Reaction: der Gleichlauf rechnet ohne Uhrenvergleich
Filipe: „die videos muessen perfekt laufen wenn ich die reaktions
mache."
GEMESSEN, NICHT VERMUTET. mess-reaktion hat einen neuen Abschnitt:
Er liest den Spielstand am ECHTEN <video>-Element in beiden Browsern,
rechnet beide auf denselben Augenblick um und sagt, wie weit Host und
Zuschauerin auseinanderliegen. Die vorhandene Pruefung fragte nur, ob
Start und Stopp ANKOMMEN -- zwei Videos koennen beide laufen und
trotzdem zwanzig Sekunden auseinander sein.
vorher nachher
Im Lauf 0,12 s -0,04 s
Wer dazukommt 6,91 s 0,26 s
Uhr des Geraets 30 s vor -29,97 s 0,26 s
DER SCHLIMMSTE FUND: DIE UHR DES TELEFONS
Der Zuschauer rechnete `Date.now() - stand.gesendet`. `gesendet` kam
vom SERVER, `Date.now()` vom Geraet -- zwei Uhren, die nie jemand
verglichen hat. Wessen Telefon dreissig Sekunden vorgeht, schaute
29,97 s weiter als alle anderen. Kein langsames Netz, kein schwaches
Handy. Oertlich faellt das nie auf: Auf einem Rechner sind beide
Uhren dieselbe.
Jetzt geht ein ALTER hinaus statt einer Uhrzeit -- die Differenz
zweier SERVERzeiten. Der Empfaenger braucht dafuer gar keine Uhr,
nur eine Stoppuhr (`performance.now()`), und die haelt Zeitumstellung
und Aufwachen aus dem Ruhezustand aus.
WEITER
* WER DAZUKOMMT, STEIGT RICHTIG EIN. Der gespeicherte Stand war so
alt wie der letzte Takt des Hosts; neue Spalte `sekunde_am` sagt,
wann er galt.
* DAS TEMPO GEHT IN DIE HOCHRECHNUNG EIN. Bei 2x laeuft die Videouhr
doppelt so schnell -- das fehlte ganz.
* JEDER RECHNET ALLE ZWEI SEKUNDEN SELBST NACH statt nur auf Zuruf.
Wer stockte, hing bis zu fuenf Sekunden hinterher.
* DER VORLAUF NACH EINEM SPRUNG WIRD GEREGELT, nicht geschaetzt --
gemessen wird der Rest, nicht die Ladezeit (siehe unten).
* PUFFERN IST AUCH IN DER TRANSPORTLEISTE KEINE PAUSE. Der
Start-Stopp-Knopf rief beim Puffern `playVideo()` -- wer Pause
drueckte, bekam „weiter". Lampe und Knopfbild flackerten bei jedem
Stocken. Die Lektion vom 29.09. war nur an einer Stelle eingeloest.
* DAS TEMPO MELDET UEBER `hostMelden()` statt ein zweites Mal von
Hand -- es hielt Puffern fuer Stillstand und hielt damit beim
Umschalten alle an.
* EIN VIDEO-RUNDRUF STATT DREI ABSCHRIFTEN. Beim Einbau hatte ich
zuerst nur eine nachgezogen; das Tauschen der beiden Videos haette
still die alte Rechnung weiterverschickt.
DREI EIGENE FEHLER UNTERWEGS, alle im Text festgehalten
1. ZWEI FUNKTIONEN HIESSEN `springen`. Meine „spring AUF die Stelle"
wurde von der vorhandenen „spring UM so viele Sekunden"
ueberschrieben -- lautlos, rueckwirkend fuer die ganze Datei. Ein
Zuschauer bei Sekunde 100, dem „geh auf 101" gesagt wird, waere
bei 201 gelandet. DREI BROWSERLAEUFE HABEN ES NICHT GEFUNDEN:
oertlich blieb der Abstand unter der Sprungschwelle, die Zeile
lief kein einziges Mal. Gefunden hat es erst eine Frage an die
ganze Datei -- die steht jetzt als Pruefung drin und wurde
nachgestellt (rot).
2. DER VORLAUF LERNTE NUR NACH OBEN. Gemessen wurde die Ladezeit
nach einem Sprung; ein Sprung in geladenes Material dauert aber
gar nicht, meldet nichts und lehrt nichts. Ergebnis: -0,95 s
stabil. Jetzt wird das ERGEBNIS geregelt statt der Ursache.
3. DER AUSREISSER VON 39,84 s WAR MEINE EIGENE MESSUNG -- der Block
davor schickt eine erfundene Position. Jetzt wird abgeklungen und
in Messreihenfolge ausgegeben.
GEPRUEFT
pruef-reaktion 421/0 (14 neue, darunter der Riegel gegen die
Rueckkehr der Uhrenrechnung und die Wache gegen doppelte
Funktionsnamen -- beide nachgestellt), mess-reaktion ohne ein
einziges ACHTUNG, pruef-buehne 38/0, pruef-struktur, pruef-
zwischenspeicher 34/0.
Schemaaenderung: ADD COLUMN sekunde_am. Datenbank vorher gesichert
und geprueft (integrity_check ok, 20 Personen).
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -553,6 +553,190 @@ console.log("=== Der Gleichlauf des Videos ===");
|
||||
}
|
||||
}
|
||||
|
||||
/* ==== WIE WEIT LIEGEN SIE AUSEINANDER? ==============================
|
||||
|
||||
Der Abschnitt darueber prueft, ob Start und Stopp ANKOMMEN. Das ist
|
||||
etwas anderes als gemeinsam schauen: Zwei Videos koennen beide
|
||||
laufen und trotzdem zwanzig Sekunden auseinanderliegen. Dort saehe
|
||||
man davon nichts -- beide meldeten brav „laeuft".
|
||||
|
||||
GELESEN WIRD AM ECHTEN <video>-ELEMENT im YouTube-Rahmen. Nicht an
|
||||
einer Zahl, die die Seite ueber sich selbst schreibt: Die koennte
|
||||
stimmen, waehrend das Bild etwas anderes zeigt. Playwright kommt an
|
||||
den Rahmen heran, also wird dort gemessen, wo das Bild entsteht.
|
||||
|
||||
BEIDE AUF DENSELBEN AUGENBLICK UMGERECHNET. Zwei Ablesungen
|
||||
nacheinander liegen 20 bis 80 ms auseinander; ungerechnet waere
|
||||
genau das der „Abstand". Jede Ablesung bekommt deshalb ihren
|
||||
Zeitpunkt (die Mitte zwischen Anfrage und Antwort) und wird auf
|
||||
einen gemeinsamen Bezug hochgerechnet -- mit dem Tempo, denn bei 2x
|
||||
laeuft die Uhr im Video doppelt so schnell.
|
||||
==================================================================== */
|
||||
console.log("");
|
||||
console.log(" --- Der Abstand zwischen Host und Zuschauerin ---");
|
||||
{
|
||||
const stelleLesen = async (w) => {
|
||||
const f = w.seite.frames().find((x) => /youtube(-nocookie)?\.com\/embed/.test(x.url()));
|
||||
if (!f) return null;
|
||||
const t0 = Date.now();
|
||||
let z = null;
|
||||
try {
|
||||
z = await f.evaluate(() => {
|
||||
const v = document.querySelector("video");
|
||||
return v ? { zeit: v.currentTime, steht: v.paused, tempo: v.playbackRate || 1 } : null;
|
||||
});
|
||||
} catch { return null; } /* der Rahmen wurde gerade neu gebaut */
|
||||
const t1 = Date.now();
|
||||
return z ? { ...z, am: (t0 + t1) / 2, spanne: (t1 - t0) / 1000 } : null;
|
||||
};
|
||||
|
||||
/** Der Abstand in Sekunden. Positiv heisst: die Zuschauerin ist
|
||||
* HINTEN -- der Host ist schon weiter. */
|
||||
const abstandMessen = async () => {
|
||||
const [h, g] = await Promise.all([stelleLesen(host), stelleLesen(zuschauer)]);
|
||||
if (!h || !g) return null;
|
||||
const bezug = Math.max(h.am, g.am);
|
||||
const bei = (z) => z.zeit + (z.steht ? 0 : ((bezug - z.am) / 1000) * z.tempo);
|
||||
return {
|
||||
abstand: bei(h) - bei(g),
|
||||
/* Wie genau diese eine Messung ueberhaupt sein kann. Ein
|
||||
Befund, der kleiner ist als seine eigene Ungenauigkeit, ist
|
||||
keiner. */
|
||||
genauigkeit: h.spanne + g.spanne,
|
||||
hSteht: h.steht, gSteht: g.steht,
|
||||
};
|
||||
};
|
||||
|
||||
const reihe = async (wieoft, abstandMs) => {
|
||||
const werte = [];
|
||||
for (let i = 0; i < wieoft; i++) {
|
||||
const m = await abstandMessen();
|
||||
if (m) werte.push(m);
|
||||
await host.seite.waitForTimeout(abstandMs);
|
||||
}
|
||||
return werte;
|
||||
};
|
||||
|
||||
const auswerten = (werte, was) => {
|
||||
if (!werte.length) {
|
||||
console.log(` KONNTE NICHT NACHSEHEN: ${was} -- der YouTube-Rahmen `
|
||||
+ "war nicht zu lesen.");
|
||||
offenePunkte.push(`Abstand „${was}" war in diesem Lauf nicht messbar.`);
|
||||
return null;
|
||||
}
|
||||
const b = werte.map((w) => w.abstand).sort((x, y) => x - y);
|
||||
const mitte = b[Math.floor(b.length / 2)];
|
||||
const groesste = b.reduce((a, x) => (Math.abs(x) > Math.abs(a) ? x : a), 0);
|
||||
const gen = Math.max(...werte.map((w) => w.genauigkeit));
|
||||
console.log(` ${was}: Mitte ${mitte.toFixed(2)} s, `
|
||||
+ `groesster ${groesste.toFixed(2)} s, ${werte.length} Messungen `
|
||||
+ `(Messgenauigkeit ${gen.toFixed(2)} s)`);
|
||||
/* IN MESSREIHENFOLGE, nicht sortiert. Die Reihenfolge ist eine
|
||||
Auskunft: Ein Ausreisser gleich am Anfang heisst „es hat sich
|
||||
noch nicht eingerenkt", einer mittendrin heisst etwas ganz
|
||||
anderes. Sortiert sieht beides gleich aus. */
|
||||
console.log(` der Reihe nach: `
|
||||
+ `${werte.map((w) => w.abstand.toFixed(2)).join(" ")}`);
|
||||
return { mitte, groesste };
|
||||
};
|
||||
|
||||
/* ---- 1. Der Normalfall: beide laufen schon eine Weile ---------
|
||||
|
||||
ERST ABKLINGEN LASSEN -- und zwar wegen des Blocks DARUEBER,
|
||||
nicht wegen des Programms. Um einen Pufferer herzustellen,
|
||||
springt der Host dort 60 Sekunden vor; danach schickt die
|
||||
Messung eine erfundene Meldung („die Sendung steht bei Sekunde
|
||||
7"). Die Zuschauerin folgt ihr, der Host bleibt bei 60 -- bis
|
||||
sein naechster Takt die Wahrheit sagt.
|
||||
|
||||
Im ersten Lauf stand deshalb ein Ausreisser von 39,84 s in der
|
||||
Reihe. Er kam aus dem Aufbau der Messung, nicht aus der
|
||||
Software. Zwei Takte des Hosts abwarten, dann ist der Zustand
|
||||
wieder echt. */
|
||||
await host.seite.waitForTimeout(11000);
|
||||
const normal = auswerten(await reihe(8, 1800), "Im Lauf");
|
||||
if (normal && Math.abs(normal.mitte) > 1.5) {
|
||||
console.log(" ACHTUNG: Sie schauen nicht dasselbe. Ein Abstand von "
|
||||
+ `${normal.mitte.toFixed(1)} s heisst, dass die Zuschauerin eine andere `
|
||||
+ "Stelle sieht als der Host -- bei einer Reaction ist genau das der Punkt.");
|
||||
ausgang = 1;
|
||||
}
|
||||
|
||||
/* ---- 2. Wer mitten in der Sendung dazukommt -------------------
|
||||
Der haeufigste Fall ueberhaupt: Jemand macht die Seite auf,
|
||||
waehrend schon laeuft. Er bekommt den Stand aus der Datenbank --
|
||||
und der ist so alt wie der letzte Takt des Hosts. */
|
||||
await zuschauer.seite.reload({ waitUntil: "networkidle" });
|
||||
let da = false;
|
||||
for (let i = 0; i < 40 && !da; i++) {
|
||||
da = !!(await stelleLesen(zuschauer));
|
||||
if (!da) await zuschauer.seite.waitForTimeout(250);
|
||||
}
|
||||
if (!da) {
|
||||
console.log(" KONNTE NICHT NACHSEHEN: nach dem Neuladen kam kein Spieler.");
|
||||
offenePunkte.push("Der Abstand beim Dazukommen war nicht messbar.");
|
||||
} else {
|
||||
/* SOFORT messen, nicht nach zehn Sekunden -- die Frage ist, was
|
||||
der Mensch in der ersten Sekunde sieht. Danach noch einmal:
|
||||
Holt das System den Rueckstand von allein auf? */
|
||||
const gleich = await abstandMessen();
|
||||
if (gleich) {
|
||||
console.log(` Beim Dazukommen: ${gleich.abstand.toFixed(2)} s`);
|
||||
if (Math.abs(gleich.abstand) > 2) {
|
||||
console.log(" ACHTUNG: Wer dazukommt, steigt "
|
||||
+ `${gleich.abstand.toFixed(1)} s versetzt ein.`);
|
||||
ausgang = 1;
|
||||
}
|
||||
}
|
||||
await zuschauer.seite.waitForTimeout(7000);
|
||||
const spaeter = await abstandMessen();
|
||||
if (spaeter) {
|
||||
console.log(` Sieben Sekunden spaeter: ${spaeter.abstand.toFixed(2)} s`);
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- 3. UND DIE UHR DES GERAETS -------------------------------
|
||||
Der Zuschauer rechnet `Date.now() - stand.gesendet`. `gesendet`
|
||||
kommt vom SERVER, `Date.now()` vom Handy. Das sind zwei Uhren,
|
||||
und niemand hat sie je verglichen.
|
||||
|
||||
HERGESTELLT, NICHT ABGEWARTET: Die Uhr der Seite wird um 30
|
||||
Sekunden vorgestellt -- genau das, was ein Telefon mit von Hand
|
||||
gestellter Zeit mitbringt. Ein Geraet, das nachgeht, faellt
|
||||
durch `Math.max(0, ...)` weniger auf; eines, das vorgeht, nicht. */
|
||||
console.log("");
|
||||
console.log(" --- Wenn die Uhr des Geraets falsch geht ---");
|
||||
await zuschauer.seite.evaluate((ms) => {
|
||||
window.__echtJetzt = Date.now;
|
||||
Date.now = () => window.__echtJetzt() + ms;
|
||||
}, 30000);
|
||||
/* Zwei Takte des Hosts abwarten -- erst dann hat die falsche Uhr
|
||||
ueberhaupt Gelegenheit, sich auszuwirken. */
|
||||
await host.seite.waitForTimeout(12000);
|
||||
const schief = auswerten(await reihe(5, 1500), "Uhr 30 s vor");
|
||||
if (schief && Math.abs(schief.mitte) > 3) {
|
||||
console.log(" ACHTUNG: Eine falsch gehende Uhr im Geraet verschiebt das "
|
||||
+ `Video um ${schief.mitte.toFixed(1)} s. Der Abstand wird aus zwei `
|
||||
+ "Uhren gerechnet, die niemand verglichen hat -- wessen Telefon "
|
||||
+ "falsch steht, schaut etwas anderes.");
|
||||
ausgang = 1;
|
||||
}
|
||||
|
||||
/* DIE GEGENPROBE ZUR GEGENPROBE: Uhr zurueckstellen, und es muss
|
||||
sich wieder einrenken. Ohne sie hiesse ein grosser Wert oben
|
||||
womoeglich nur, dass die Messung kaputtgegangen ist. */
|
||||
await zuschauer.seite.evaluate(() => {
|
||||
if (window.__echtJetzt) Date.now = window.__echtJetzt;
|
||||
});
|
||||
await host.seite.waitForTimeout(12000);
|
||||
const wieder = auswerten(await reihe(4, 1200), "Uhr wieder richtig");
|
||||
if (wieder && Math.abs(wieder.mitte) > 2) {
|
||||
console.log(" ACHTUNG: Nach dem Zurueckstellen der Uhr renkt es sich "
|
||||
+ "nicht wieder ein.");
|
||||
ausgang = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- Die Regie ---------------------------------------------------
|
||||
NICHT UMSCHALTEN, SONDERN HERSTELLEN. Ein Klick auf „Griff" heisst
|
||||
„das Gegenteil von dem, was gerade ist" -- und setzt damit voraus,
|
||||
|
||||
@@ -1660,6 +1660,166 @@ melde("=== 17. Tempo, Anordnung und das zweite Video ===");
|
||||
method: "POST", keks: k.admin, rumpf: { tempo: 1, laeuft: true, sekunde: 25 },
|
||||
});
|
||||
|
||||
/* =====================================================================
|
||||
DER GLEICHLAUF: WIE ALT IST DER STAND? (30.09.2026)
|
||||
|
||||
Bis heute schickte der Server seine UHRZEIT mit (`gesendet`), und
|
||||
der Browser rechnete `Date.now() - gesendet`. Das vergleicht die
|
||||
Uhr des Servers mit der Uhr des Telefons -- zwei Uhren, die nie
|
||||
jemand abgeglichen hat.
|
||||
|
||||
Gemessen am echten Browser (mess-reaktion): Ein Geraet, dessen Uhr
|
||||
30 Sekunden vorgeht, spielte das Video 29,97 Sekunden weiter als
|
||||
alle anderen. Und wer mitten in der Sendung dazukam, stieg 6,91
|
||||
Sekunden hinter allen ein, weil der gespeicherte Stand so alt war
|
||||
wie der letzte Takt des Hosts.
|
||||
|
||||
Jetzt geht ein ALTER hinaus -- die Differenz zweier SERVERzeiten.
|
||||
Der Empfaenger braucht dafuer keine eigene Uhr.
|
||||
===================================================================== */
|
||||
{
|
||||
const jetztStellen = (sek, alter) => roh(CREW, "/workspace/api/reaktion/video", {
|
||||
method: "POST", keks: k.admin, rumpf: { laeuft: true, sekunde: sek, alter },
|
||||
});
|
||||
const holen = async () => (await roh(CREW, "/workspace/api/reaktion", { keks: k.gast })).j;
|
||||
|
||||
await jetztStellen(100, 0);
|
||||
const frisch = await holen();
|
||||
ok(Number.isFinite(frisch?.alter) && frisch.alter >= 0 && frisch.alter < 500,
|
||||
`ein frischer Stand ist fast null Millisekunden alt (${frisch?.alter})`);
|
||||
|
||||
/* ES IST WIRKLICH EIN ALTER UND KEINE FESTE ZAHL. Ohne diese
|
||||
Zeile hiesse „0 ms" oben womoeglich nur, dass dort immer 0
|
||||
steht -- und dann rechnete niemand je etwas dazu. */
|
||||
await new Promise((r) => setTimeout(r, 1300));
|
||||
const gereift = await holen();
|
||||
ok(gereift?.alter >= 1200 && gereift?.alter <= 2600,
|
||||
`nach 1,3 s ist derselbe Stand 1,3 s alt (${gereift?.alter} ms)`);
|
||||
|
||||
/* UND DIE RECHNUNG GEHT AUF. Das ist der eigentliche Zweck:
|
||||
sekunde + alter muss die Stelle ergeben, an der die Sendung
|
||||
jetzt steht. */
|
||||
const stelle = (gereift.sekunde || 0) + (gereift.alter || 0) / 1000;
|
||||
ok(Math.abs(stelle - 101.3) < 0.4,
|
||||
`daraus folgt die richtige Stelle: ${stelle.toFixed(2)} s (erwartet ~101,3)`);
|
||||
|
||||
/* ---- Was der Host ueber seine eigene Ablesung sagt ----------
|
||||
Er misst oertlich, wie alt sie beim Absenden war. Das gehoert
|
||||
dazugerechnet -- sonst saesse jeder Zuschauer genau um diese
|
||||
Spanne zu weit hinten. */
|
||||
await jetztStellen(200, 3000);
|
||||
const mitAlter = await holen();
|
||||
ok(mitAlter?.alter >= 3000 && mitAlter?.alter < 3600,
|
||||
`eine 3 s alte Ablesung kommt auch als 3 s alt an (${mitAlter?.alter})`);
|
||||
|
||||
/* GEDECKELT, WEIL ES VOM BROWSER KOMMT. Was hereinkommt, wird
|
||||
geprueft und nicht geglaubt -- sonst setzte eine einzige
|
||||
falsche Zahl alle Zuschauer an eine erfundene Stelle. */
|
||||
await jetztStellen(300, 999999);
|
||||
const frech = await holen();
|
||||
ok(frech?.alter !== null && frech.alter <= 5600,
|
||||
`ein unsinniges Alter wird auf 5 s gedeckelt (${frech?.alter})`);
|
||||
|
||||
await jetztStellen(310, -8000);
|
||||
const negativ = await holen();
|
||||
ok(negativ?.alter !== null && negativ.alter >= 0 && negativ.alter < 600,
|
||||
`ein negatives Alter gilt als null (${negativ?.alter})`);
|
||||
|
||||
/* ---- Der dritte Ausgang: „weiss ich nicht" -------------------
|
||||
Ein Stand ohne Zeitstempel (alte Zeile, frisch aufgeraeumte
|
||||
Sendung) darf NICHT als „null Millisekunden alt" durchgehen.
|
||||
`null` heisst beim Empfaenger „nicht hochrechnen"; eine 0
|
||||
hiesse „taufrisch" und schickte alle an eine alte Stelle. */
|
||||
/* EIGENES HANDLE. Das vom Anfang der Datei ist laengst
|
||||
geschlossen (Zeile 108) -- die Pruefung legt die Leute an und
|
||||
ueberlaesst die Datenbank danach dem Server. */
|
||||
const { DatabaseSync: DB3 } = await import("node:sqlite");
|
||||
const d3 = new DB3(process.env.WORKSPACE_DB);
|
||||
d3.prepare("UPDATE reaktion SET sekunde_am = 0 WHERE id = 1").run();
|
||||
const ohne = await holen();
|
||||
ok(ohne?.alter === null,
|
||||
`ohne Zeitstempel ist das Alter ausdruecklich unbekannt (${JSON.stringify(ohne?.alter)})`);
|
||||
|
||||
/* UND EIN UNMOEGLICH ALTER STAND EBENSO. Eine Zeile aus der
|
||||
vorigen Woche wuerde sonst „604800000 ms" melden, und der
|
||||
Browser rechnete sie brav dazu. */
|
||||
d3.prepare("UPDATE reaktion SET sekunde_am = ? WHERE id = 1")
|
||||
.run(Date.now() - 7 * 86400000);
|
||||
const uralt = await holen();
|
||||
ok(uralt?.alter === null,
|
||||
`ein eine Woche alter Stand gilt als unbekannt (${JSON.stringify(uralt?.alter)})`);
|
||||
|
||||
d3.close();
|
||||
|
||||
/* Und wieder in einen brauchbaren Zustand -- die Pruefungen
|
||||
danach sollen keinen Scherbenhaufen vorfinden. */
|
||||
await jetztStellen(0, 0);
|
||||
|
||||
/* ---- UND EIN RIEGEL GEGEN DIE RUECKKEHR ---------------------
|
||||
|
||||
Die alte Zeile sah harmlos aus:
|
||||
|
||||
const unterwegs = Date.now() - stand.gesendet;
|
||||
|
||||
Der Kommentar daneben erklaerte sogar richtig, warum die
|
||||
Laufzeit dazugehoert. Nur verglich sie die Uhr des Servers mit
|
||||
der Uhr des Telefons -- und das faellt oertlich NIE auf: Auf
|
||||
einem Rechner sind beide Uhren dieselbe. Erst als jemand die
|
||||
Uhr absichtlich verstellt hat, kam es heraus.
|
||||
|
||||
GEMESSEN WIRD AM KOMMENTARFREIEN TEXT. Im Kopf der Datei steht
|
||||
die alte Zeile als Beispiel, und ein Beispiel im Kommentar ist
|
||||
kein Programm. Genau diese Falle hat mich heute frueh beim
|
||||
Abzeichen schon einmal erwischt. */
|
||||
const { jsOhneKommentar: ohneK } = await import("./helfer-ohne-kommentar.mjs");
|
||||
const rjs = ohneK(readFileSync(
|
||||
join(HIER, "..", "workspace", "assets", "js", "reaktion.js"), "utf8"));
|
||||
|
||||
ok(!/\bgesendet\b/.test(rjs),
|
||||
"der Browser rechnet nicht mehr mit der Uhrzeit des Servers");
|
||||
|
||||
const kern = rjs.slice(rjs.indexOf("function sollJetzt"));
|
||||
const rumpf = kern.slice(0, kern.indexOf("\n }"));
|
||||
ok(rumpf.length > 40 && /performance\.now\(\)/.test(rumpf),
|
||||
"die Soll-Stelle wird mit der Stoppuhr gerechnet, nicht mit dem Kalender");
|
||||
ok(/anker\.tempo/.test(rumpf),
|
||||
"und das Tempo geht in die Hochrechnung ein (bei 2x laeuft die Videouhr doppelt)");
|
||||
ok(!/Date\.now\(\)/.test(rumpf),
|
||||
"in der Rechnung selbst steckt keine Tagesuhr mehr");
|
||||
|
||||
/* GEGENPROBE: Die Suche liest wirklich etwas. Ohne sie hiessen
|
||||
die drei Zeilen darueber womoeglich nur, dass `rumpf` leer
|
||||
ist -- und ein leerer Text besteht jede Verbotspruefung. */
|
||||
ok(/const her =/.test(rumpf),
|
||||
`die Suche findet den Rumpf von sollJetzt (${rumpf.length} Zeichen)`);
|
||||
|
||||
/* ---- KEIN NAME ZWEIMAL ---------------------------------------
|
||||
|
||||
`reaktion.js` ist ein einziger Rumpf von 4400 Zeilen. Wer dort
|
||||
einen Funktionsnamen ein zweites Mal vergibt, ueberschreibt
|
||||
die erste -- und zwar RUECKWIRKEND fuer die ganze Datei, auch
|
||||
fuer Aufrufe weit davor. Es gibt keine Fehlermeldung.
|
||||
|
||||
GENAU DAS IST AM 30.09.2026 PASSIERT. Die neue Nachfuehrung
|
||||
hiess `springen(ziel)` („spring AUF diese Stelle"), der Host
|
||||
hatte laengst ein `springen(um)` („spring UM so viele
|
||||
Sekunden"). Gewonnen hat das zweite. Ein Zuschauer bei
|
||||
Sekunde 100, dem „geh auf 101" gesagt wird, waere bei 201
|
||||
gelandet.
|
||||
|
||||
DIE MESSUNG IM BROWSER HAT ES NICHT GEFUNDEN -- oertlich blieb
|
||||
der Abstand unter der Sprungschwelle, die Zeile lief in drei
|
||||
Laeufen kein einziges Mal. Gefunden hat es erst diese Frage an
|
||||
die ganze Datei. */
|
||||
const namen = [...rjs.matchAll(/^\s{0,4}(?:async\s+)?function\s+([A-Za-z_$][\w$]*)/gm)]
|
||||
.map((t) => t[1]);
|
||||
const doppelt = [...new Set(namen.filter((n, i) => namen.indexOf(n) !== i))];
|
||||
ok(namen.length > 40 && doppelt.length === 0,
|
||||
doppelt.length
|
||||
? `ZWEIMAL VERGEBEN: ${doppelt.join(", ")} — die spaetere gewinnt, lautlos`
|
||||
: `alle ${namen.length} Funktionsnamen in reaktion.js sind einmalig`);
|
||||
}
|
||||
|
||||
/* ---- Das zweite Video ---- */
|
||||
const A = "dQw4w9WgXcQ";
|
||||
const B = "9bZkp7q19f0";
|
||||
|
||||
@@ -495,6 +495,25 @@ export function reaktionTabellen(d) {
|
||||
["ecke_gross", "REAL NOT NULL DEFAULT 1"],
|
||||
];
|
||||
|
||||
if (!da.has("sekunde_am")) {
|
||||
/* WANN DIE SEKUNDE GALT -- in Millisekunden der Serveruhr.
|
||||
(30.09.2026)
|
||||
|
||||
Ohne sie liess sich nicht sagen, wie alt der gespeicherte
|
||||
Spielstand ist. Wer mitten in der Sendung dazukam, bekam
|
||||
`sekunde` aus der Datenbank und setzte sich damit dorthin --
|
||||
gemessen 6,91 s hinter allen anderen, weil der Host nur alle
|
||||
fuenf Sekunden meldet.
|
||||
|
||||
Sie wird NICHT an den Browser weitergegeben. Hinausgeschickt
|
||||
wird nur die Differenz `Date.now() - sekunde_am`, also ein
|
||||
ALTER. Eine absolute Serverzeit koennte der Empfaenger nur mit
|
||||
seiner eigenen Uhr verrechnen, und genau das war der Fehler:
|
||||
Ein Geraet mit 30 s falscher Uhr schaute 30 s woanders. */
|
||||
d.exec("ALTER TABLE reaktion ADD COLUMN sekunde_am INTEGER NOT NULL DEFAULT 0");
|
||||
console.log("[reaktion] Spalte sekunde_am angelegt.");
|
||||
}
|
||||
|
||||
if (!da.has("chat_modus")) {
|
||||
/* Wer im Live-Chat schreiben darf. Gilt fuer die ganze Sendung,
|
||||
nicht je Person -- deshalb hier und nicht an den Zusehenden. */
|
||||
|
||||
@@ -117,7 +117,7 @@ const jetzt = () => new Date().toISOString();
|
||||
====================================================================== */
|
||||
const SENDUNGS_FELDER = {
|
||||
titel: "", video: "", video_titel: "", vorschau: "",
|
||||
beginnt_am: null, laeuft: 0, sekunde: 0, gestartet_am: null,
|
||||
beginnt_am: null, laeuft: 0, sekunde: 0, sekunde_am: 0, gestartet_am: null,
|
||||
zweit_video: "", zweit_titel: "", zweit_sekunde: 0,
|
||||
};
|
||||
|
||||
@@ -133,6 +133,63 @@ const PULT_EINSTELLUNGEN = {
|
||||
chat_modus: "offen",
|
||||
};
|
||||
|
||||
/** Wie alt ist dieser Spielstand -- in Millisekunden?
|
||||
*
|
||||
* DAS IST DIE EINE ZAHL, DIE HINAUSGEHT (30.09.2026), und
|
||||
* ausdruecklich keine Uhrzeit. Ein Alter ist die Differenz zweier
|
||||
* Serverzeiten; der Empfaenger braucht dafuer keine eigene Uhr.
|
||||
*
|
||||
* Vorher ging `gesendet: Date.now()` hinaus, und der Browser rechnete
|
||||
* `Date.now() - gesendet`. Das verglich die Serveruhr mit der Uhr des
|
||||
* Telefons. Gemessen am 30.09.2026: Ein Geraet, dessen Uhr 30 s
|
||||
* vorgeht, spielte das Video 29,97 s weiter als alle anderen. Kein
|
||||
* Fehler im Netz, kein langsames Handy -- nur zwei Uhren, die nie
|
||||
* jemand verglichen hat.
|
||||
*
|
||||
* GEDECKELT. Ein `sekunde_am` von 0 (alte Zeile, frisch angelegte
|
||||
* Sendung) hiesse sonst „dieser Stand ist 56 Jahre alt". Wer nichts
|
||||
* weiss, gibt `null` zurueck -- und `null` heisst beim Empfaenger
|
||||
* „nicht hochrechnen", nicht „null Millisekunden". */
|
||||
const MAX_ALTER_MS = 60_000;
|
||||
function standAlter(s) {
|
||||
const am = Number(s?.sekunde_am) || 0;
|
||||
if (!am) return null;
|
||||
const alt = Date.now() - am;
|
||||
if (alt < 0 || alt > MAX_ALTER_MS) return null;
|
||||
return Math.round(alt);
|
||||
}
|
||||
|
||||
/** Der Rundruf „so steht das Video jetzt" -- an EINER Stelle.
|
||||
*
|
||||
* ER WURDE AN DREI STELLEN VON HAND ZUSAMMENGESETZT: beim Starten
|
||||
* der Sendung, beim Takt des Hosts und beim Tauschen der beiden
|
||||
* Videos. Beim Einbau des Alters (30.09.2026) habe ich zuerst nur
|
||||
* eine davon nachgezogen -- das Tauschen haette danach weiter die
|
||||
* alte, kaputte Rechnung verschickt, und zwar still.
|
||||
*
|
||||
* Dieselbe Sorte Doppelung wie am 11.09.2026, als drei Spalten mit
|
||||
* Inhalt verlorengegangen sind. Eine Liste, die niemand pflegt, kann
|
||||
* nicht veralten.
|
||||
*
|
||||
* GELESEN WIRD AUS DER ZEILE, nicht aus dem, was der Aufrufer
|
||||
* gerade zu wissen glaubt. */
|
||||
function videoRundruf(s) {
|
||||
melden("reaktion", {
|
||||
was: "video",
|
||||
video: s.video,
|
||||
laeuft: !!s.laeuft,
|
||||
sekunde: s.sekunde,
|
||||
tempo: Number(s.tempo) || 1,
|
||||
/* DAS ALTER, NICHT DIE UHRZEIT. Warum: siehe standAlter(). */
|
||||
alter: standAlter(s),
|
||||
/* `gesendet` bleibt vorerst mit drin. Ein Browser, der die alte
|
||||
Fassung noch im Zwischenspeicher hat, wuerde sonst gar nicht
|
||||
mehr nachfuehren -- und „gar nicht" ist schlechter als „etwas
|
||||
ungenau". Darf weg, sobald der Stempel ueberall durch ist. */
|
||||
gesendet: Date.now(),
|
||||
});
|
||||
}
|
||||
|
||||
/* ---------- Schranken --------------------------------------------------- */
|
||||
|
||||
function angemeldet(req, res, next) {
|
||||
@@ -236,7 +293,7 @@ function listeHolen() {
|
||||
* Zuruecksetzen der Sekunde vergessen kann. */
|
||||
function weiterZu(zeile, personId) {
|
||||
db().prepare("UPDATE reaktion SET video = ?, video_titel = ?, laeuft = 1,"
|
||||
+ " sekunde = 0, geaendert = ? WHERE id = 1")
|
||||
+ " sekunde = 0, sekunde_am = unixepoch('subsec') * 1000, geaendert = ? WHERE id = 1")
|
||||
.run(zeile.video, zeile.titel, jetzt());
|
||||
db().prepare("DELETE FROM reaktion_liste WHERE id = ?").run(zeile.id);
|
||||
protokolliere("reaktion_weiter", { personId, detail: zeile.video });
|
||||
@@ -248,7 +305,11 @@ function weiterZu(zeile, personId) {
|
||||
betrifft nur die Anzeige und darf einen Wimpernschlag spaeter
|
||||
kommen. Nur die erste zu schicken hiesse: Das Video wechselt,
|
||||
und im Pult steht weiter der alte Name. */
|
||||
melden("reaktion", { was: "video", video: s.video, laeuft: true, sekunde: 0, gesendet: Date.now() });
|
||||
/* HIER GILT DIE SEKUNDE JETZT -- das Video faengt von vorn an.
|
||||
Ohne `sekunde_am` waere der Stand „unbekannt alt" und niemand
|
||||
duerfte hochrechnen; ausgerechnet beim Start, wo alle
|
||||
gleichzeitig einsteigen. */
|
||||
videoRundruf(s);
|
||||
return s;
|
||||
}
|
||||
|
||||
@@ -300,6 +361,12 @@ function lage(person) {
|
||||
layout: s.layout,
|
||||
laeuft: !!s.laeuft,
|
||||
sekunde: s.sekunde,
|
||||
/* WIE ALT DIESE SEKUNDE IST. Ohne sie setzte sich jeder, der
|
||||
mitten in der Sendung dazukam, auf den Stand des letzten
|
||||
Host-Taktes -- gemessen 6,91 s hinter allen anderen. Jetzt
|
||||
rechnet er die verstrichene Zeit dazu und steigt an der
|
||||
richtigen Stelle ein. */
|
||||
alter: standAlter(s),
|
||||
/* DIE GESCHWINDIGKEIT GEHT AN ALLE. Sie ist kein Regieknopf,
|
||||
sondern Teil dessen, was gerade laeuft -- wer sie nicht
|
||||
bekaeme, saehe dasselbe Video in einem anderen Tempo und waere
|
||||
@@ -943,6 +1010,14 @@ reaktionRouter.post("/workspace/api/reaktion/video", nurHost, express.json({ lim
|
||||
try {
|
||||
const laeuft = req.body?.laeuft ? 1 : 0;
|
||||
const sekunde = Math.max(0, Number(req.body?.sekunde) || 0);
|
||||
/* WIE ALT DIE ABLESUNG BEIM ABSENDEN WAR.
|
||||
Der Host misst das oertlich (Differenz zweier eigener
|
||||
Messpunkte) -- das stimmt auch auf einem Geraet mit falscher
|
||||
Uhr, waehrend eine mitgeschickte Uhrzeit dort falsch waere.
|
||||
Gedeckelt, weil es vom Browser kommt: Was hereinkommt, wird
|
||||
geprueft, nicht geglaubt. */
|
||||
const alter = Math.min(5000, Math.max(0, Number(req.body?.alter) || 0));
|
||||
const sekundeAm = Date.now() - alter;
|
||||
const video = req.body?.video === undefined ? null : videoKennung(String(req.body.video));
|
||||
if (req.body?.video !== undefined && !video) {
|
||||
return res.status(400).json({ fehler: "video_unklar" });
|
||||
@@ -963,8 +1038,9 @@ reaktionRouter.post("/workspace/api/reaktion/video", nurHost, express.json({ lim
|
||||
db().prepare("UPDATE reaktion SET tempo = ? WHERE id = 1").run(tempo);
|
||||
}
|
||||
if (video) {
|
||||
db().prepare("UPDATE reaktion SET video = ?, laeuft = ?, sekunde = ?, geaendert = ? WHERE id = 1")
|
||||
.run(video, laeuft, sekunde, jetzt());
|
||||
db().prepare(`UPDATE reaktion SET video = ?, laeuft = ?, sekunde = ?,
|
||||
sekunde_am = ?, geaendert = ? WHERE id = 1`)
|
||||
.run(video, laeuft, sekunde, sekundeAm, jetzt());
|
||||
/* Der Name wird NACHGEREICHT und nicht abgewartet: Diese
|
||||
Route laeuft waehrend der Sendung im Sekundentakt. Sie
|
||||
darf unter keinen Umstaenden auf YouTube warten. */
|
||||
@@ -977,19 +1053,11 @@ reaktionRouter.post("/workspace/api/reaktion/video", nurHost, express.json({ lim
|
||||
});
|
||||
}
|
||||
} else {
|
||||
db().prepare("UPDATE reaktion SET laeuft = ?, sekunde = ? WHERE id = 1")
|
||||
.run(laeuft, sekunde);
|
||||
db().prepare("UPDATE reaktion SET laeuft = ?, sekunde = ?, sekunde_am = ? WHERE id = 1")
|
||||
.run(laeuft, sekunde, sekundeAm);
|
||||
}
|
||||
const s = sendung();
|
||||
melden("reaktion", {
|
||||
was: "video",
|
||||
video: s.video, laeuft: !!s.laeuft, sekunde: s.sekunde,
|
||||
tempo: Number(s.tempo) || 1,
|
||||
/* Die Uhrzeit des Servers geht mit: Der Empfaenger rechnet
|
||||
die Laufzeit seit dem Absenden dazu. Ohne das waere jeder
|
||||
genau so weit hinten, wie sein Netz langsam ist. */
|
||||
gesendet: Date.now(),
|
||||
});
|
||||
videoRundruf(s);
|
||||
res.json({ ok: true, tempo: Number(s.tempo) || 1 });
|
||||
} catch (fehler) {
|
||||
console.error("[reaktion] Video:", fehler?.message);
|
||||
@@ -1073,6 +1141,7 @@ reaktionRouter.post("/workspace/api/reaktion/tauschen", nurHost,
|
||||
try {
|
||||
db().prepare(`UPDATE reaktion SET
|
||||
video = ?, video_titel = ?, sekunde = ?,
|
||||
sekunde_am = unixepoch('subsec') * 1000,
|
||||
zweit_video = ?, zweit_titel = ?, zweit_sekunde = ?,
|
||||
geaendert = ?
|
||||
WHERE id = 1`)
|
||||
@@ -1095,11 +1164,7 @@ reaktionRouter.post("/workspace/api/reaktion/tauschen", nurHost,
|
||||
}
|
||||
|
||||
const n = sendung();
|
||||
melden("reaktion", {
|
||||
was: "video",
|
||||
video: n.video, laeuft: !!n.laeuft, sekunde: n.sekunde,
|
||||
tempo: Number(n.tempo) || 1, gesendet: Date.now(),
|
||||
});
|
||||
videoRundruf(n);
|
||||
melden("reaktion", { was: "getauscht", lage: oeffentlich(lage(req.person)) });
|
||||
res.json(lage(req.person));
|
||||
} catch (fehler) {
|
||||
|
||||
@@ -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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<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=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/anruf-probe.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,25 +23,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609301339",
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609301544",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609301339",
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609301544",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609301339",
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609301544",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609301339",
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609301544",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
+364
-28
@@ -873,13 +873,250 @@
|
||||
|
||||
NACHGEFUEHRT WIRD NUR BEI ECHTER ABWEICHUNG. Ein Player, dem man
|
||||
jede Sekunde eine neue Position gibt, ruckelt sichtbar. Erst ab
|
||||
anderthalb Sekunden Unterschied wird gesprungen -- darunter
|
||||
gut einer Sekunde Unterschied wird gesprungen -- darunter
|
||||
merkt es niemand, darüber merkt es jeder.
|
||||
|
||||
---------------------------------------------------------------
|
||||
WIE DIE SOLL-STELLE GERECHNET WIRD (neu gefasst 30.09.2026)
|
||||
|
||||
soll = sekunde + (alter + laufzeit + seither) * tempo
|
||||
|
||||
Hier stand bis heute `Date.now() - stand.gesendet` — die Uhr des
|
||||
Telefons gegen die Uhr des Servers. Zwei Uhren, die nie jemand
|
||||
verglichen hat. Gemessen: Ein Gerät, dessen Uhr 30 Sekunden
|
||||
vorgeht, spielte das Video **29,97 Sekunden weiter** als alle
|
||||
anderen. Kein langsames Netz, kein schwaches Handy — nur eine
|
||||
falsch gestellte Uhr, wie sie auf jedem dritten Telefon steht.
|
||||
|
||||
Die neue Rechnung benutzt überhaupt keine Tagesuhr mehr:
|
||||
|
||||
`alter` sagt der Server, gerechnet aus ZWEI Serverzeiten.
|
||||
Ein Alter ist eine Differenz — dafür braucht der
|
||||
Empfänger keinen eigenen Kalender.
|
||||
`laufzeit` die halbe kleinste selbst gemessene Umlaufzeit.
|
||||
`seither` `performance.now()`, eine Stoppuhr ab Seitenstart.
|
||||
Sie überlebt Zeitumstellung, Zeitzonenwechsel und
|
||||
das Aufwachen aus dem Ruhezustand; `Date.now()`
|
||||
springt dabei.
|
||||
`tempo` Bei 2× läuft die Uhr im Video doppelt so schnell.
|
||||
Das fehlte bisher ganz — bei einer Sekunde
|
||||
Laufzeit war das eine Sekunde Fehler.
|
||||
|
||||
UND ES WIRD NICHT NUR AUF ZURUF NACHGEFÜHRT. Der Host meldet
|
||||
alle fünf Sekunden; wer dazwischen stockt, hing bis zu fünf
|
||||
Sekunden hinterher und wurde dann mit einem Ruck geholt. Jetzt
|
||||
rechnet jeder alle zwei Sekunden selbst nach — der Anker weiß,
|
||||
wo die Sendung steht, auch ohne neue Meldung.
|
||||
|
||||
WER NICHTS WEISS, SPRINGT NICHT. Kommt kein `alter` mit oder ist
|
||||
die Seite so lange weggewesen, dass die Hochrechnung nicht mehr
|
||||
trägt, liefert `sollJetzt()` `null` — und `null` heißt „nicht
|
||||
anfassen", nicht „auf null springen". Lieber eine Sekunde hinten
|
||||
als an der falschen Stelle.
|
||||
================================================================= */
|
||||
let spieler = null;
|
||||
let spielerBereit = false;
|
||||
let letztesVideo = '';
|
||||
|
||||
/* ---- Wie lange eine Meldung zu mir braucht ---------------------
|
||||
Die HALBE KLEINSTE Umlaufzeit, nicht der Durchschnitt. Eine
|
||||
einzelne langsame Antwort sagt etwas über die Warteschlange
|
||||
unterwegs, nicht über den Weg; die schnellste gemessene kommt
|
||||
der reinen Laufzeit am nächsten. Dieselbe Überlegung wie bei
|
||||
jeder Zeitmessung über ein Netz. */
|
||||
let laufzeitMs = 0;
|
||||
let kleinsteUmlauf = Infinity;
|
||||
function umlaufMerken(ms) {
|
||||
if (!(ms >= 0) || ms > 10_000) return;
|
||||
if (ms < kleinsteUmlauf) { kleinsteUmlauf = ms; laufzeitMs = ms / 2; }
|
||||
}
|
||||
|
||||
/* ---- Der Anker: der letzte bekannte Stand ----------------------
|
||||
`seit` ist eine STOPPUHR (`performance.now()`), keine Uhrzeit.
|
||||
Gesetzt wird er in dem Augenblick, in dem die Nachricht ANKOMMT
|
||||
— nicht dort, wo sie später verarbeitet wird. Das ist kein
|
||||
Detail: Zwischen dem Laden des Stands und dem Fertigwerden des
|
||||
YouTube-Spielers vergehen ein bis drei Sekunden, und genau die
|
||||
fehlten sonst in der Rechnung. */
|
||||
let anker = null;
|
||||
function ankerSetzen(stand) {
|
||||
if (!stand) return;
|
||||
anker = {
|
||||
sekunde: Number(stand.sekunde) || 0,
|
||||
laeuft: !!stand.laeuft,
|
||||
tempo: Number(stand.tempo) || 1,
|
||||
/* `null` heißt „unbekannt" und ist etwas anderes als 0. */
|
||||
alterMs: Number.isFinite(stand.alter) ? stand.alter : null,
|
||||
seit: performance.now(),
|
||||
};
|
||||
}
|
||||
|
||||
/* Weiter als das trägt keine Hochrechnung. Wer eine Viertelstunde
|
||||
im Hintergrund lag, weiß nichts mehr — und eine Zahl, die aus
|
||||
einem Anker von vor einer Viertelstunde stammt, ist schlimmer
|
||||
als keine. */
|
||||
const ANKER_HAELT = 90;
|
||||
|
||||
/** Wo müsste ich jetzt stehen? `null` = weiß ich nicht. */
|
||||
function sollJetzt() {
|
||||
if (!anker) return null;
|
||||
if (!anker.laeuft) return anker.sekunde;
|
||||
if (anker.alterMs === null) return anker.sekunde;
|
||||
const her = (anker.alterMs + laufzeitMs + (performance.now() - anker.seit)) / 1000;
|
||||
if (her < 0 || her > ANKER_HAELT) return null;
|
||||
return anker.sekunde + her * anker.tempo;
|
||||
}
|
||||
|
||||
/** Wer die Sendung führt, folgt niemandem — er IST der Stand.
|
||||
*
|
||||
* GEPRÜFT WIRD DIE KENNUNG, NICHT DIE ROLLE: `ich.host` ist bei
|
||||
* DogFather UND bei seiner rechten Hand wahr, geführt wird aber
|
||||
* von genau einem. Wer danebensteht, muss mitlaufen. */
|
||||
function binSteuerHost() {
|
||||
return !!(lage?.host?.id && meineId && lage.host.id === meineId);
|
||||
}
|
||||
|
||||
/* ---- Springen, und wie weit vorgehalten wird -------------------
|
||||
|
||||
Nach einem Sprung lädt der Spieler nach. Bis er wieder spielt,
|
||||
ist die Sendung weitergelaufen — man landet also genau um diese
|
||||
Ladezeit hinten und braucht bald den nächsten Sprung. Deshalb
|
||||
wird ein Vorlauf dazugerechnet.
|
||||
|
||||
GEMESSEN WIRD DAS ERGEBNIS, NICHT DIE URSACHE.
|
||||
|
||||
Der erste Anlauf (30.09.2026) stoppte die LADEZEIT: Wie lange
|
||||
dauert es vom Sprung bis zum Weiterspielen? Klingt richtig und
|
||||
war systematisch falsch. Ein Sprung in einen schon geladenen
|
||||
Bereich dauert nämlich gar nicht — der Spieler verlässt den
|
||||
Zustand „läuft" nie, die Meldung darüber kommt nie, und gelernt
|
||||
wurde ausschließlich aus den LANGSAMEN Sprüngen. Der Vorlauf
|
||||
kannte nur den Weg nach oben.
|
||||
|
||||
Gemessen kam dabei heraus: Die Zuschauerin lag 0,95 s VOR dem
|
||||
Host — über acht Messungen auf zwei Hundertstel stabil. Ein
|
||||
Mittelwert, der nur eine Sorte Messung sieht, ist keiner.
|
||||
|
||||
Jetzt wird zweieinhalb Sekunden nach jedem Sprung nachgesehen,
|
||||
wie weit man DANEBEN liegt, und der Vorlauf um einen Teil dieses
|
||||
Restes verschoben. Zu weit vorn zieht ihn herunter, zu weit
|
||||
hinten hinauf — ein Regelkreis auf die Größe, auf die es
|
||||
ankommt, statt auf einen Hilfswert, von dem man hofft, dass er
|
||||
dasselbe bedeutet.
|
||||
|
||||
Auf einer schnellen Leitung geht er gegen null, auf einer
|
||||
langsamen wächst er mit. Eine feste Zahl wäre wieder die
|
||||
Rechnung von gestern. */
|
||||
let vorlauf = 0;
|
||||
let restPruefenAb = 0;
|
||||
/* `aufStelleSpringen` UND NICHT `springen` (berichtigt 30.09.2026).
|
||||
|
||||
Sie hiess zuerst `springen` -- genau wie die Funktion des Hosts
|
||||
1600 Zeilen weiter unten, die UM so viele Sekunden spult. In
|
||||
einem gemeinsamen Rumpf gewinnt die spaetere Deklaration, und
|
||||
zwar rueckwirkend fuer die ganze Datei. Nachgestellt:
|
||||
|
||||
function springen(ziel) { return 'MEINER'; }
|
||||
function springen(um) { return 'HOSTS'; }
|
||||
springen(101); // -> „HOSTS"
|
||||
|
||||
Ein Zuschauer bei Sekunde 100, dem „geh auf 101" gesagt wird,
|
||||
waere damit bei 201 gelandet. Und beim naechsten Mal bei 302.
|
||||
|
||||
Die Messung hat es NICHT gefunden: Oertlich blieb der Abstand
|
||||
unter der Sprungschwelle, die Zeile lief in drei Laeufen kein
|
||||
einziges Mal. Auf einer echten Leitung waere sie staendig
|
||||
gelaufen. */
|
||||
function aufStelleSpringen(ziel) {
|
||||
spieler.seekTo(Math.max(0, ziel + (anker?.laeuft ? vorlauf : 0)), true);
|
||||
/* Erst nachsehen, wenn das Nachladen vorbei sein kann. Sofort
|
||||
gemessen wäre der „Rest" nur die Ladezeit selbst. */
|
||||
restPruefenAb = performance.now() + 2500;
|
||||
}
|
||||
/** Was ist von dem Sprung übrig geblieben? `weg` ist positiv, wenn
|
||||
* man hinten liegt. */
|
||||
function vorlaufLernen(weg) {
|
||||
if (!restPruefenAb || performance.now() < restPruefenAb) return;
|
||||
restPruefenAb = 0;
|
||||
/* Mehr als fünf Sekunden Rest ist kein Nachladefehler, sondern
|
||||
etwas anderes (ein Sprung des Hosts, ein Videowechsel) — und
|
||||
darf den Vorlauf nicht verziehen. */
|
||||
if (Math.abs(weg) > 5) return;
|
||||
/* Nur ein Teil des Restes, damit einzelne Ausreißer den Wert
|
||||
nicht hin und her werfen. */
|
||||
vorlauf = Math.max(0, Math.min(1.5, vorlauf + 0.4 * weg));
|
||||
}
|
||||
|
||||
/* Ab wann gesprungen wird. Darunter merkt es niemand; ein Sprung
|
||||
kostet dagegen immer ein sichtbares Nachladen. */
|
||||
const SPRUNG_AB = 1.2;
|
||||
|
||||
/** Einmal nachführen: stehe ich da, wo die Sendung steht?
|
||||
*
|
||||
* `auchHost` — WER FÜHRT, WIRD NICHT NACHGEFÜHRT, mit genau einer
|
||||
* Ausnahme: dem ersten Mal. Sein Spieler IST der Stand; ihn alle
|
||||
* zwei Sekunden auf seine eigene Meldung zu setzen, wäre ein Echo,
|
||||
* das sich selbst hinterherläuft (genau der Fehler vom 29.09., als
|
||||
* ein Pufferer den Host über den Umweg des Servers anhielt).
|
||||
*
|
||||
* Beim Laden hat er aber noch gar keine Stelle. Im Quelltext stand
|
||||
* dazu schon: „Lädt der Host mitten in der Sendung neu, soll er
|
||||
* dort weitermachen, wo die Sendung steht, und nicht bei null."
|
||||
* Ohne diese Ausnahme finge er bei null an — und alle anderen
|
||||
* wären ihm eine Sekunde später dorthin gefolgt. */
|
||||
function nachfuehren(auchHost = false) {
|
||||
if (!spielerBereit || !anker) return;
|
||||
if (!auchHost && binSteuerHost()) return;
|
||||
const zustand = spieler.getPlayerState();
|
||||
/* WÄHREND GEPUFFERT WIRD, WIRD NICHT GESPRUNGEN. Ein Sprung löst
|
||||
neues Puffern aus — auf einer schwachen Leitung käme man aus
|
||||
dem Nachladen nicht mehr heraus, und genau das fühlt sich an
|
||||
wie „das Video hängt". */
|
||||
if (zustand === PUFFERT) return;
|
||||
const soll = sollJetzt();
|
||||
if (soll === null) { standAuffrischen(); return; }
|
||||
const ist = spieler.getCurrentTime();
|
||||
const weg = soll - ist;
|
||||
/* Ablesbar von außen, wie `data-spieler` daneben — die Messung
|
||||
braucht eine Zahl, die das Programm selbst für wahr hält. */
|
||||
const platz = $('video-platz');
|
||||
if (platz) {
|
||||
platz.dataset.stelle = ist.toFixed(2);
|
||||
platz.dataset.versatz = weg.toFixed(2);
|
||||
}
|
||||
/* ZUERST LERNEN, DANN ENTSCHEIDEN. Andersherum wäre der Rest
|
||||
schon wegkorrigiert, bevor jemand ihn gesehen hat — und der
|
||||
Vorlauf bliebe für immer auf seinem ersten Wert. */
|
||||
vorlaufLernen(weg);
|
||||
if (Math.abs(weg) > SPRUNG_AB) aufStelleSpringen(soll);
|
||||
if (anker.laeuft && zustand !== SPIELT && zustand !== PUFFERT) spieler.playVideo();
|
||||
if (!anker.laeuft && zustand === SPIELT) spieler.pauseVideo();
|
||||
}
|
||||
|
||||
/* Der eigene Takt. Der Host meldet alle fünf Sekunden; wer
|
||||
dazwischen stockt, hing bisher bis zu fünf Sekunden hinterher.
|
||||
Zwei Sekunden sind der Kompromiss: oft genug, dass man es nicht
|
||||
merkt, selten genug, dass es nichts kostet. */
|
||||
let gleichUhr = null;
|
||||
function gleichlaufTakt() {
|
||||
clearInterval(gleichUhr);
|
||||
/* Über eine Pfeilfunktion und nicht direkt: `setInterval`
|
||||
übergibt in manchen Umgebungen die Zahl der Verspätungen als
|
||||
erstes Argument — das wäre hier ein wahrheitswertiges
|
||||
`auchHost` und machte aus der Ausnahme die Regel. */
|
||||
gleichUhr = setInterval(() => nachfuehren(), 2000);
|
||||
}
|
||||
|
||||
/* Wenn der Anker nicht mehr trägt (lange im Hintergrund), wird er
|
||||
geholt statt geraten. Mit Bremse — sonst fragte eine Seite ohne
|
||||
Verbindung im Zwei-Sekunden-Takt. */
|
||||
let letztesAuffrischen = 0;
|
||||
function standAuffrischen() {
|
||||
if (performance.now() - letztesAuffrischen < 10_000) return;
|
||||
letztesAuffrischen = performance.now();
|
||||
standHolen(true);
|
||||
}
|
||||
|
||||
function apiLaden() {
|
||||
if (window.YT && window.YT.Player) { spielerBauen(); return; }
|
||||
if (document.getElementById('yt-api')) return;
|
||||
@@ -933,6 +1170,10 @@
|
||||
Sendung steht, und nicht bei null. */
|
||||
folgen(lage);
|
||||
if (lage.ich.host) hostTakt();
|
||||
/* FÜR ALLE, AUCH FÜR DEN HOST. `nachfuehren()` steigt bei
|
||||
dem, der führt, selbst wieder aus — und wechselt die
|
||||
Führung mitten in der Sendung, läuft der Takt schon. */
|
||||
gleichlaufTakt();
|
||||
},
|
||||
onStateChange: (e) => {
|
||||
/* Der Zustand steht am Element -- ablesbar von aussen, ohne
|
||||
@@ -963,8 +1204,33 @@
|
||||
nachgeschlagen und danach falsch erinnert wird. */
|
||||
const SPIELT = 1, PUFFERT = 3;
|
||||
|
||||
async function hostMelden() {
|
||||
if (!spielerBereit || !lage || lage.stand !== 'live') return;
|
||||
/** @param {object} dazu Was ausser dem Spielstand mitgehen soll
|
||||
* (heute nur `tempo`).
|
||||
*
|
||||
* ES GIBT NUR EINE STELLE, DIE DEN SPIELSTAND MELDET.
|
||||
* Der Tempo-Knopf hatte dieselbe Meldung ein zweites Mal von Hand
|
||||
* zusammengebaut -- und dabei beides falsch gemacht, was diese
|
||||
* Funktion richtig macht: Er hielt Puffern fuer Stillstand
|
||||
* (`=== 1`) und liess das Alter der Ablesung weg. Wer das Tempo
|
||||
* umstellte, waehrend seine Leitung nachlud, hielt damit alle
|
||||
* Zuschauer an. */
|
||||
async function hostMelden(dazu = null) {
|
||||
if (!lage) return null;
|
||||
/* ---- HERZSCHLAG ODER ANSAGE? ------------------------------
|
||||
Der Fuenf-Sekunden-Takt meldet nur waehrend der Sendung --
|
||||
sonst schriebe eine offene Regieseite dauernd in eine
|
||||
Sendung, die gar nicht laeuft.
|
||||
|
||||
Eine ABSICHTLICHE Ansage (`dazu`, heute das Tempo) geht
|
||||
dagegen immer hinaus. Das Tempo laesst sich naemlich vor der
|
||||
Sendung stellen; die Route verlangt `nurHost` und sonst
|
||||
nichts. Ohne diese Unterscheidung bekaeme Filipe in der
|
||||
Vorbereitung „Das Tempo ging nicht." zu sehen.
|
||||
|
||||
Der Unterschied ist inhaltlich: Ein Herzschlag sagt „so steht
|
||||
es gerade" und darf ausfallen. Eine Ansage sagt „mach das ab
|
||||
jetzt" und muss ankommen. */
|
||||
if (!dazu && (!spielerBereit || lage.stand !== 'live')) return null;
|
||||
try {
|
||||
/* PUFFERN IST KEIN ANHALTEN (29.09.2026).
|
||||
|
||||
@@ -983,23 +1249,56 @@
|
||||
|
||||
Gemessen in mess-reaktion: `Host=laeuft` → ein gemeldeter
|
||||
Pufferer → `Host=pause`. */
|
||||
const zustand = spieler.getPlayerState();
|
||||
/* OHNE FERTIGEN SPIELER GIBT ES KEINEN SPIELSTAND -- aber die
|
||||
Ansage geht trotzdem hinaus. Genau so hat es der Tempo-Knopf
|
||||
vorher gemacht (`sekunde: 0`), und das war richtig. */
|
||||
const zustand = spielerBereit ? spieler.getPlayerState() : -1;
|
||||
const laeuft = zustand === SPIELT || zustand === PUFFERT;
|
||||
const sekunde = spieler.getCurrentTime();
|
||||
await hole('/workspace/api/reaktion/video', {
|
||||
const gelesenAm = performance.now();
|
||||
const sekunde = spielerBereit ? spieler.getCurrentTime() : 0;
|
||||
/* WIE ALT DIE ABLESUNG IST, WENN SIE ANKOMMT.
|
||||
Das Ablesen, das Zusammenbauen und der Weg zum Server
|
||||
dauern zusammen ein paar Dutzend Millisekunden. Ohne diese
|
||||
Zahl hielte der Server die Sekunde für taufrisch, und jeder
|
||||
Zuschauer säße genau um diese Spanne zu weit hinten.
|
||||
Gerechnet wird mit der Stoppuhr, nicht mit dem Kalender —
|
||||
eine örtliche Differenz stimmt auch auf einem Gerät mit
|
||||
falsch gestellter Uhr. */
|
||||
const t0 = performance.now();
|
||||
const a = await hole('/workspace/api/reaktion/video', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ laeuft, sekunde }),
|
||||
body: JSON.stringify({
|
||||
...(dazu || {}),
|
||||
laeuft, sekunde,
|
||||
alter: Math.round(performance.now() - gelesenAm + laufzeitMs),
|
||||
}),
|
||||
});
|
||||
umlaufMerken(performance.now() - t0);
|
||||
return a;
|
||||
} catch { /* der nächste Takt versucht es wieder */ }
|
||||
return null;
|
||||
}
|
||||
|
||||
/** Alle anderen folgen. */
|
||||
/** Alle anderen folgen.
|
||||
*
|
||||
* DER ANKER WIRD HIER NICHT GESETZT, sondern dort, wo die
|
||||
* Nachricht ANKOMMT (`standHolen` und der Ereignisstrom). Der
|
||||
* Unterschied sind ein bis drei Sekunden: `folgen(lage)` läuft
|
||||
* aus `onReady`, und bis der YouTube-Spieler fertig ist, vergeht
|
||||
* genau diese Zeit. Sie hier in den Anker zu schreiben hieße,
|
||||
* sie zu verlieren. */
|
||||
function folgen(stand) {
|
||||
if (!spielerBereit || !stand) return;
|
||||
if (stand.video && stand.video !== letztesVideo) {
|
||||
letztesVideo = stand.video;
|
||||
spieler.loadVideoById(stand.video, stand.sekunde || 0);
|
||||
/* AN DIE HOCHGERECHNETE STELLE, nicht an die gemeldete. Ein
|
||||
Videowechsel mitten in der Sendung ist der Fall, in dem der
|
||||
Rückstand am meisten auffällt — alle anderen laufen weiter,
|
||||
während hier noch geladen wird. */
|
||||
const start = sollJetzt();
|
||||
spieler.loadVideoById(stand.video,
|
||||
Number.isFinite(start) ? Math.max(0, start) : (stand.sekunde || 0));
|
||||
/* YouTube setzt die Geschwindigkeit beim Laden auf 1 zurück.
|
||||
Ein kurzer Nachschlag, sobald das neue Video bereit ist --
|
||||
sonst liefe jedes zweite Video im falschen Tempo. */
|
||||
@@ -1007,14 +1306,11 @@
|
||||
return;
|
||||
}
|
||||
if (stand.tempo) tempoNachziehen(stand.tempo);
|
||||
/* Die Laufzeit der Meldung wird dazugerechnet. Ohne das wäre
|
||||
jeder genau so weit hinten, wie sein Netz langsam ist. */
|
||||
const unterwegs = stand.gesendet ? Math.max(0, (Date.now() - stand.gesendet) / 1000) : 0;
|
||||
const soll = (stand.sekunde || 0) + (stand.laeuft ? unterwegs : 0);
|
||||
const ist = spieler.getCurrentTime();
|
||||
if (Math.abs(ist - soll) > 1.5) spieler.seekTo(soll, true);
|
||||
if (stand.laeuft && spieler.getPlayerState() !== 1) spieler.playVideo();
|
||||
if (!stand.laeuft && spieler.getPlayerState() === 1) spieler.pauseVideo();
|
||||
/* `true`: Aus `folgen()` heraus darf auch der Host einmal
|
||||
einsteigen — von hier kommt entweder sein eigener erster
|
||||
Aufruf beim Laden oder ein Rundruf, und Rundrufe erreichen
|
||||
`folgen()` bei ihm ohnehin nicht. */
|
||||
nachfuehren(true);
|
||||
}
|
||||
|
||||
/** Die Geschwindigkeit nachziehen.
|
||||
@@ -2401,7 +2697,18 @@
|
||||
/* ---- Die Videospur bedienen -------------------------------------- */
|
||||
function spielPause() {
|
||||
if (!spielerBereit) return;
|
||||
if (spieler.getPlayerState() === 1) spieler.pauseVideo();
|
||||
/* PUFFERN ZAEHLT ALS LAEUFT (berichtigt 30.09.2026).
|
||||
|
||||
Hier stand `=== 1`. Waehrend nachgeladen wird, ist der Zustand
|
||||
3 -- also nicht 1, also ging der Klick in den else-Zweig und
|
||||
rief `playVideo()`. Wer die Pause drueckte, bekam „weiter".
|
||||
Der Knopf tat das Gegenteil dessen, was auf ihm stand, und
|
||||
zwar genau dann, wenn die Leitung ohnehin schon stockt.
|
||||
|
||||
Dieselbe Verwechslung wie am 29.09. in `hostMelden()`. Die
|
||||
Reparatur blieb damals an dieser einen Stelle haengen. */
|
||||
const zustand = spieler.getPlayerState();
|
||||
if (zustand === SPIELT || zustand === PUFFERT) spieler.pauseVideo();
|
||||
else spieler.playVideo();
|
||||
hostMelden();
|
||||
}
|
||||
@@ -2496,15 +2803,14 @@
|
||||
* zweites Mal. */
|
||||
async function tempoSetzen(wert) {
|
||||
tempoNachziehen(wert);
|
||||
const a = await hole('/workspace/api/reaktion/video', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
tempo: wert,
|
||||
laeuft: spielerBereit && spieler.getPlayerState() === 1,
|
||||
sekunde: spielerBereit ? spieler.getCurrentTime() : 0,
|
||||
}),
|
||||
});
|
||||
/* UEBER `hostMelden()` UND NICHT NOCH EINMAL VON HAND
|
||||
(berichtigt 30.09.2026). Hier stand dieselbe Meldung ein
|
||||
zweites Mal, und sie machte beides falsch, was `hostMelden()`
|
||||
richtig macht: Sie hielt Puffern fuer Stillstand und liess das
|
||||
Alter der Ablesung weg. Wer das Tempo umstellte, waehrend
|
||||
seine Leitung nachlud, hielt damit alle Zuschauer an. */
|
||||
const a = await hostMelden({ tempo: wert });
|
||||
if (!a) { sagFehler('Das Tempo ging nicht.'); return; }
|
||||
if (!a.ok) { melde(await a.json().catch(() => null), 'Das Tempo ging nicht.'); return; }
|
||||
lage = { ...lage, tempo: wert };
|
||||
zeichnen();
|
||||
@@ -2554,7 +2860,13 @@
|
||||
|
||||
/* Das Positionsband */
|
||||
if (!spielerBereit) return;
|
||||
const laeuft = spieler.getPlayerState() === 1;
|
||||
/* UND AUCH HIER IST PUFFERN KEINE PAUSE. Ohne das sprang die
|
||||
Lampe bei jedem Stocken der Leitung auf „Pause" und gleich
|
||||
wieder zurueck -- ein Flackern, das sagt „etwas ist kaputt",
|
||||
waehrend nur nachgeladen wird. Dasselbe galt fuer das Bild auf
|
||||
dem Knopf: zwei Balken, Dreieck, zwei Balken. */
|
||||
const zustandJetzt = spieler.getPlayerState();
|
||||
const laeuft = zustandJetzt === SPIELT || zustandJetzt === PUFFERT;
|
||||
$('spur').dataset.laeuft = laeuft ? 'ja' : 'nein';
|
||||
$('spur-marke').textContent = laeuft ? 'Läuft' : 'Pause';
|
||||
$('v-spiel-bild').innerHTML = laeuft
|
||||
@@ -3379,6 +3691,15 @@
|
||||
Das Tempo kommt nicht aus seinem Spieler zurück, sondern
|
||||
aus dem Pult. Es ist kein Echo seiner selbst, sondern
|
||||
eine Ansage. */
|
||||
/* DER ANKER ZUERST, und zwar fuer JEDEN -- auch fuer den,
|
||||
der fuehrt. Er ist die Beschreibung dessen, was gerade
|
||||
laeuft, nicht eine Anweisung an den Spieler. Wer sie
|
||||
nicht mitschreibt, hat nach einem Wechsel der Fuehrung
|
||||
keinen Stand.
|
||||
|
||||
HIER OBEN, weil `seit` eine Stoppuhr ist: Sie gehoert in
|
||||
den Augenblick der Ankunft. */
|
||||
ankerSetzen(d);
|
||||
if (lage?.host?.id && lage.host.id === meineId) {
|
||||
if (d.tempo) tempoNachziehen(d.tempo);
|
||||
} else {
|
||||
@@ -4303,12 +4624,27 @@
|
||||
* Vorrang des Rundrufs ein Verlust. */
|
||||
async function standHolen(sanft) {
|
||||
const beim = standFolge;
|
||||
/* GLEICH MITGEMESSEN: wie lange ein Hin und Zurueck dauert.
|
||||
Daraus schaetzt der Gleichlauf die Laufzeit einer Meldung zu
|
||||
mir. Ein eigener Weg nur zum Messen waere ein zweiter Weg,
|
||||
der irgendwann eine andere Antwort gibt als dieser. */
|
||||
const t0 = performance.now();
|
||||
const a = await hole('/workspace/api/reaktion');
|
||||
umlaufMerken(performance.now() - t0);
|
||||
if (!a.ok) { sagFehler('Die Reaction ist gerade nicht erreichbar.'); return; }
|
||||
const neu = await a.json();
|
||||
if (sanft && beim !== standFolge) return;
|
||||
/* DER ANKER GEHT SOFORT LOS -- vor dem Zeichnen, vor allem
|
||||
anderen. Er merkt sich mit `performance.now()`, wann diese
|
||||
Zahl ankam; jede Sekunde, die zwischen Ankunft und Auswertung
|
||||
liegt, waere sonst ein Rueckstand, den niemand mehr sieht. */
|
||||
ankerSetzen(neu);
|
||||
lage = neu;
|
||||
zeichnen();
|
||||
/* Und gleich hinterher: Steht der Spieler schon, wird jetzt
|
||||
nachgefuehrt. Ohne das wartete ein frisch geladener Stand bis
|
||||
zum naechsten Takt. */
|
||||
nachfuehren();
|
||||
}
|
||||
|
||||
async function los() {
|
||||
|
||||
+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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -391,22 +391,22 @@
|
||||
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
|
||||
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
|
||||
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
|
||||
<script src="assets/js/textform.js?v=202609301339"></script>
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/textform.js?v=202609301544"></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/zuteilung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/zuteilung.js?v=202609301544" 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=202609301339" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/vorlagenbrett.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -168,15 +168,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -197,16 +197,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609301544" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+22
-22
@@ -12,24 +12,24 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -304,19 +304,19 @@
|
||||
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
|
||||
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
|
||||
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
|
||||
<script src="assets/js/textform.js?v=202609301339"></script>
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/textform.js?v=202609301544"></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</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=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -80,16 +80,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/werbung.css?v=202609301544" />
|
||||
</head>
|
||||
<body class="obs-buehne">
|
||||
<div id="platz"></div>
|
||||
<script src="assets/js/werbung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/buehne.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/werbung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/buehne.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -89,15 +89,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609301544" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+20
-20
@@ -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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -739,24 +739,24 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609301339"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544"></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=202609301339"></script>
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339"></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339"></script>
|
||||
<script src="assets/js/textform.js?v=202609301544"></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544"></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544"></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=202609301339"></script>
|
||||
<script src="assets/js/anruf.js?v=202609301544"></script>
|
||||
<!-- DIE BILDSCHAU (25.09.2026). Eigene Datei, weil sie nichts vom
|
||||
Chat weiss: Sie bekommt einen Weg und einen Namen und zeigt ein
|
||||
Bild. Jede andere Seite mit Fotos kann sie ebenso benutzen, ohne
|
||||
@@ -767,8 +767,8 @@
|
||||
sie beim ersten Foto noch nicht da -- und der erste Klick ginge
|
||||
wie frueher in den Tab. Ein Fehler, der nur beim ERSTEN Mal
|
||||
auftritt, ist der, den man nie nachstellen kann. -->
|
||||
<script src="assets/js/bildschau.js?v=202609301339"></script>
|
||||
<script src="assets/js/chat.js?v=202609301339"></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bildschau.js?v=202609301544"></script>
|
||||
<script src="assets/js/chat.js?v=202609301544"></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -179,15 +179,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/content.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/content.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="gate gate--crew">
|
||||
@@ -459,7 +459,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,25 +23,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609301339",
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609301544",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609301339",
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609301544",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609301339",
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609301544",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609301339",
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609301544",
|
||||
"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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -108,15 +108,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -297,20 +297,20 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301544" 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=202609301339" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/vorlagenbrett.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -146,14 +146,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="gate">
|
||||
@@ -427,7 +427,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -383,15 +383,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -444,13 +444,13 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339"></script>
|
||||
<script src="assets/js/wahl.js?v=202609301339"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339"></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339"></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339"></script>
|
||||
<script src="assets/js/leistung.js?v=202609301339"></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544"></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544"></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544"></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544"></script>
|
||||
<script src="assets/js/leistung.js?v=202609301544"></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/material.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/material.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</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=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/material.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/material.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/notizen.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/notizen.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</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=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/notizen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/notizen.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -453,14 +453,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -214,16 +214,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/reaktion.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/werbung.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/reaktion.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/werbung.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start reaktion-seite" data-stand="laedt">
|
||||
@@ -881,15 +881,15 @@
|
||||
|
||||
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
|
||||
liest daraus die Leitungsrollen. -->
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/spendenkarte.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/werbung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/reaktion.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/spendenkarte.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/werbung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/reaktion.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</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=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,17 +106,17 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/ki.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/report.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/report.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -173,14 +173,14 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609301544" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,21 +12,21 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/heim.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -732,16 +732,16 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/live.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/start.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/live.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/start.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -85,16 +85,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/ki.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -150,16 +150,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/support.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/support.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -128,16 +128,16 @@
|
||||
(reading 'LEITUNG')" ab -- gemessen am 24.09.2026, als diese
|
||||
Zeile beim Anlegen der Seite fehlte. Die Kopfleiste kam
|
||||
trotzdem, deshalb sah man es nur in der Browserkonsole. -->
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" 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=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/support.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/support.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202609301544" />
|
||||
<style>
|
||||
/* DURCHSICHTIG BIS AUF DIE KARTEN. OBS legt die Quelle über das
|
||||
Bild; jede Fläche, die hier steht, deckt dort etwas zu. */
|
||||
@@ -80,7 +80,7 @@
|
||||
<body>
|
||||
<div class="obs-tafel spendentafel" id="tafel" aria-live="polite"></div>
|
||||
|
||||
<script src="assets/js/spendenkarte.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/tafel.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/spendenkarte.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/tafel.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -111,15 +111,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -110,15 +110,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/team.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/team.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</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=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -112,15 +112,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -126,14 +126,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</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=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -149,16 +149,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -335,14 +335,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/live.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/live.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</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=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609301544" 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=202609301339" defer></script>
|
||||
<script src="assets/js/unterstuetzen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/unterstuetzen.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -144,14 +144,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609301544" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/willkommen.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/willkommen.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
<!-- KOERPERKLASSE "start", NICHT "gate" (berichtigt 21.09.2026).
|
||||
`body.gate` ist die Anmeldewand: `display:flex; align-items:center`,
|
||||
@@ -75,13 +75,13 @@
|
||||
<p class="fehler" id="fehler" hidden></p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/willkommen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/willkommen.js?v=202609301544" 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=202609301339" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301339" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609301544" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609301544" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609301544" />
|
||||
<!-- 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=202609301339" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609301544" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -190,15 +190,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609301544" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609301339" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609301544" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609301544" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user