Aus jedem Fenster kommt man heraus, die Kachel dreht sich, der Eingang sieht aus wie das Haus
VIER DINGE, und das erste ist eine Meldung aus dem Support.
1. MISS KAM AUS "AUFGABE BEARBEITEN" NICHT HERAUS.
„Ich konnte da wieder nicht zurück gehen, musste die App schließen
damit ich wieder auf die Hauptseite kam."
Gemessen (mess-dialog-ausgang.mjs), vier Größen:
412x915 App 782 px Inhalt in 784 px -- knapp ja
412x780 Browser 782 px Inhalt in 742 px -- SACKGASSE
360x640 klein 794 px Inhalt in 602 px -- SACKGASSE
412x430 Tastatur 794 px Inhalt in 392 px -- SACKGASSE
`.dialog` hatte `overflow: hidden`, eine Scroll-Höhe gab es NUR für
`.dialog--breit`. Alles unterhalb des Rands wurde abgeschnitten --
samt "Abbrechen". Jetzt rollt JEDES Fenster, und Kopf wie Knopfzeile
bleiben stehen (`position: sticky`), damit man den Ausgang SIEHT,
ohne erst durch acht Felder zu scrollen. Alle vier Größen: ja.
2. DIE VORLAGENKACHEL DREHT SICH.
„wenn ich drauf drücke dreht sich die kachel und dan seh ich wer es
gemacht hat, und immer noch die option es nochmal zu verteilen falls
neue leute ins team zustoßen."
Vorne bleibt die Kurzfassung ("liegt bei 3 von 4"), hinten stehen
die Namen mit ihrem Stand und zwei Knöpfe: "Nachholen – 1 fehlt"
(oder "Nochmal an alle", wenn wirklich alle sie haben) und "Zurück".
Nach dem Verteilen dreht sie sich von selbst; wer nur nachsehen
will, drückt "Wer hat sie?".
3. DER EINGANG SIEHT AUS WIE DAS HAUS.
Fase und Leuchtschiene statt flachem Kasten, die Schiene in der
Farbe des Stands. Die drei Zahlen werden drei Felder -- und die
"0 neu" leuchtet nicht mehr rot: Eine Warnung, die immer kommt, ist
keine Warnung. Ab 760 px steht das Bild neben dem Text statt
darunter; die Karte war dadurch dreimal so hoch wie nötig.
4. DER CREATOR-KATALOG IST AUF DER TEAM-SEITE WEG.
„es gibt keine creator auf dieser seite" -- dort stand "Wähle oben
einen Creator", eine Aufforderung zu etwas Unmöglichem. Gefragt wird
jetzt nach den Daten (gibt es jemanden, dem ich das geben kann?),
nicht nach der Adresse.
DAZU FERTIG GEMACHT, WAS VON GESTERN OFFEN WAR:
* Die zwei Serien ohne Haus ("Community-Call", "Schulung-Agentur").
Ursache war meine eigene Abschrift: Bei den Terminen frage ich die
Teilnehmerliste, bei den Serien hatte ich sie vergessen. Auf einer
Kopie der echten Datenbank: 0 offene Zeilen.
* Sieben Schreibwege setzen jetzt `haus` (Aufgaben, Einträge,
Dateien, Material, Wissen, Video-Titelbild). Dabei gefunden:
`material` verwaltet seine Spalten SELBST -- meine Spalte stand in
der falschen Liste und fehlte auf einer frischen Datenbank
(78 Fehlschläge in pruef-material, jetzt 159/0).
* unterstuetzen.html lud meldung.js gar nicht -- dort stand das
Maschinenwort des Servers statt eines Satzes (pruef-meldungen 8/0).
DREI VERALTETE PRÜFUNGEN NACHGEZOGEN, jede STRENGER als vorher:
* "der Modi legt eine Aufgabe an (201)" -- seit dem 22.09. ist das
403 und gewollt. Geprüft wird jetzt auch das WORT.
* "calls.html ist verboten" -- Filipe hat die Kachel selbst verlangt
("jeder der einen kalender hat"). Mit Gegenprobe ersetzt.
* "Review" heißt seit dem 20.09. "Zur Freigabe". Der Name wird jetzt
aus STATUS_NAME GELESEN statt abgeschrieben.
GEPRÜFT: modi-katalog 150/0 (war 144), modi-verborgen 85/0 (war 80/2),
haus-trennung 97/0, material 159/0, meldungen 8/0, abbrechen-optik 0
Fehler. Dazu grün: an-alle, vorlagen, support, css-klassen,
aufgabenbrett, aufgaben-vorlagen, unterstuetzung, formulare, loeschen,
nachfrage, kalender, chat, leerzustand.
OFFEN UND NICHT ANGEFASST: pruef-breiten meldet auf report.html ein
Berührziel von 27x18 px. Der Link (`class="zurueck"`) ist auf 30
Seiten derselbe und hat gar keinen eigenen Stil; beanstandet wird nur
diese eine Seite, weil dort hinter ihm nur "· Review" steht und die
Prüfung Fließtext-Links erst ab 12 Zeichen Umgebung ausnimmt. Eine
Klasse auf 30 Seiten ohne Prüflauf zu ändern wäre geraten.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -235,6 +235,24 @@ try {
|
||||
if (await karte.count()) {
|
||||
await karte.screenshot({ path: `server/mess-alle-${wie}.png` });
|
||||
console.log(` Bild: server/mess-alle-${wie}.png`);
|
||||
/* UND DIE RUECKSEITE. Ohne sie waere nur bewiesen, dass die
|
||||
Namen von der Vorderseite verschwunden sind -- nicht, dass
|
||||
sie hinten ankommen. */
|
||||
await karte.locator('.vorlagenbrett__drehknopf').click().catch(() => {});
|
||||
await seite.waitForTimeout(600);
|
||||
const hinten = await seite.evaluate(() => {
|
||||
const k = document.querySelector('.vorlagenbrett__karte[data-gedreht="ja"]');
|
||||
const r = k?.querySelector('.vorlagenbrett__seite--hinten');
|
||||
return {
|
||||
gedreht: !!k,
|
||||
schild: r?.querySelector('.vorlagenbrett__wer-schild')?.textContent,
|
||||
knoepfe: [...(r?.querySelectorAll('button') || [])].map((b) => b.textContent),
|
||||
namen: [...(r?.querySelectorAll('.vorlagenbrett__wer-name') || [])]
|
||||
.map((x) => x.textContent),
|
||||
};
|
||||
});
|
||||
console.log(' Rueckseite:', JSON.stringify(hinten));
|
||||
await karte.screenshot({ path: `server/mess-alle-${wie}-hinten.png` }).catch(() => {});
|
||||
}
|
||||
await kontext.close();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,226 @@
|
||||
/* =====================================================================
|
||||
KOMMT MAN AUS EINEM FENSTER WIEDER HERAUS? (25.09.2026)
|
||||
|
||||
---------------------------------------------------------------------
|
||||
DER ANLASS
|
||||
|
||||
Miss, über den Support-Weg: „Ich konnte da wieder nicht zurück gehen,
|
||||
musste die App schließen damit ich wieder auf die Hauptseite kam."
|
||||
Dazu ein Bildschirmfoto von „Aufgabe bearbeiten" auf dem Handy.
|
||||
|
||||
„WIEDER" IST DAS WICHTIGE WORT: Es ist nicht das erste Mal. Ein
|
||||
Fenster, aus dem man nur herauskommt, indem man die App beendet, ist
|
||||
die schlimmste Sorte Sackgasse -- man verliert dabei auch alles, was
|
||||
man gerade eingetippt hat.
|
||||
|
||||
---------------------------------------------------------------------
|
||||
WAS GEMESSEN WIRD
|
||||
|
||||
Für JEDES Fenster auf JEDER Seite, auf der es eines gibt:
|
||||
|
||||
1. Ist ein Ausgang (Abbrechen/Schließen) überhaupt im Baum?
|
||||
2. Liegt er INNERHALB des sichtbaren Bereichs -- oder unterhalb?
|
||||
3. Und wenn er unterhalb liegt: Lässt sich dorthin SCROLLEN?
|
||||
|
||||
Punkt 3 ist der eigentliche: Ein Knopf weiter unten ist harmlos,
|
||||
solange man hinkommt. `.dialog` hat aber `overflow: hidden`, und nur
|
||||
`.dialog--breit .neu` bekommt eine Scroll-Höhe. Bei allen anderen
|
||||
wird der Rest schlicht abgeschnitten.
|
||||
|
||||
GEMESSEN WIRD AUF 412 x 915 -- der häufigsten Android-Größe. Auf dem
|
||||
Rechner fällt das nie auf: Dort ist der Bildschirm hoch genug.
|
||||
|
||||
Aufrufen mit: node server/mess-dialog-ausgang.mjs
|
||||
===================================================================== */
|
||||
import { mkdtempSync, rmSync, readFileSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import { execFileSync } from "node:child_process";
|
||||
import { request as httpAnfrage } from "node:http";
|
||||
import { createServer as httpsServer } from "node:https";
|
||||
|
||||
const PORT = 5399, HP = 5400;
|
||||
const CREW = "crew.dogfather-universe.com";
|
||||
const ordner = mkdtempSync(join(tmpdir(), "ws-dialog-"));
|
||||
process.env.WORKSPACE_DB = join(ordner, "workspace.db");
|
||||
process.env.PORT = String(PORT);
|
||||
process.env.SITE_ACCESS_SECRET = "lokaler-test";
|
||||
process.env.SITE_PUBLIC_LAUNCH_AT = "2020-01-01T00:00:00+01:00";
|
||||
|
||||
const express = (await import("express")).default;
|
||||
const ec = express.response.cookie;
|
||||
express.response.cookie = function (n, w, o) {
|
||||
return ec.call(this, n, w, { ...(o || {}), secure: false });
|
||||
};
|
||||
import { notbremse } from "./helfer-notbremse.mjs";
|
||||
await import("./index.js");
|
||||
notbremse(240_000, "mess-dialog-ausgang");
|
||||
await new Promise((r) => setTimeout(r, 900));
|
||||
process.on("uncaughtException", (f) => { console.error("ABSTURZ:", f); process.exit(7); });
|
||||
process.on("unhandledRejection", (f) => { console.error("ABSTURZ (Versprechen):", f); process.exit(7); });
|
||||
|
||||
const { DatabaseSync } = await import("node:sqlite");
|
||||
const { scryptSync, randomBytes, createHmac } = await import("node:crypto");
|
||||
const d = new DatabaseSync(process.env.WORKSPACE_DB);
|
||||
const jetzt = new Date().toISOString();
|
||||
const sch = randomBytes(32).toString("hex");
|
||||
d.prepare("INSERT INTO einstellungen (schluessel, wert, geaendert, von)"
|
||||
+ " VALUES (?,?,?,NULL) ON CONFLICT(schluessel) DO NOTHING")
|
||||
.run("code_kennung_schluessel", sch, jetzt);
|
||||
const anlegen = (name, rolle, code) => {
|
||||
const s = randomBytes(16).toString("hex");
|
||||
const h = scryptSync(code, s, 64,
|
||||
{ N: 32768, r: 8, p: 1, maxmem: 96 * 1024 * 1024 }).toString("hex");
|
||||
return d.prepare("INSERT INTO personen"
|
||||
+ " (name, rolle, code_hash, code_salt, code_n, code_kennung, aktiv, erstellt)"
|
||||
+ " VALUES (?,?,?,?,?,?,1,?) RETURNING id")
|
||||
.get(name, rolle, h, s, 32768,
|
||||
createHmac("sha256", sch).update(code).digest("hex"), jetzt).id;
|
||||
};
|
||||
const idDogi = anlegen("Filipe", "admin", "CODE-DOGI-0001");
|
||||
const idModi = anlegen("Miss", "modi", "CODE-MODI-0001");
|
||||
/* Eine Aufgabe, die dem Modi gehoert -- sonst gibt es nichts zu
|
||||
bearbeiten, und die Messung waere gruen ueber einer Null. */
|
||||
d.prepare(`INSERT INTO aufgaben (titel, beschreibung, status, prioritaet,
|
||||
verantwortlich_id, frist, erstellt, erstellt_von, haus)
|
||||
VALUES (?,?, 'offen', 'hoch', ?, ?, ?, ?, 'crew')`)
|
||||
.run("Die Regeln des Rudels einmal ganz lesen",
|
||||
"Nicht überfliegen. Wer sie kennt, kann sie erklären – und Erklären ist in "
|
||||
+ "neun von zehn Fällen wirksamer als Löschen.",
|
||||
idModi, "2026-09-26", jetzt, idDogi);
|
||||
d.close();
|
||||
|
||||
const anfrage = (pfad, art, koerper) => new Promise((fertig, schief) => {
|
||||
const a = httpAnfrage({
|
||||
host: "127.0.0.1", port: PORT, path: pfad, method: art,
|
||||
headers: { Host: CREW, "Content-Type": "application/json" },
|
||||
}, (r) => {
|
||||
let t = ""; r.on("data", (x) => { t += x; });
|
||||
r.on("end", () => fertig({ code: r.statusCode, kopf: r.headers, text: t }));
|
||||
});
|
||||
a.on("error", schief);
|
||||
if (koerper) a.write(JSON.stringify(koerper));
|
||||
a.end();
|
||||
});
|
||||
const an = await anfrage("/workspace/api/anmelden", "POST",
|
||||
{ rolle: "modi", code: "CODE-MODI-0001" });
|
||||
if (an.code !== 200) { console.log(`ABBRUCH: Anmeldung ${an.code}`); process.exit(2); }
|
||||
const keks = (an.kopf["set-cookie"] || []).map((x) => x.split(";")[0]).join("; ");
|
||||
|
||||
const schl = join(ordner, "b.key"), zert = join(ordner, "b.crt");
|
||||
execFileSync("openssl", ["req", "-x509", "-newkey", "rsa:2048", "-nodes", "-keyout", schl,
|
||||
"-out", zert, "-days", "2", "-subj", `/CN=${CREW}`, "-addext", `subjectAltName=DNS:${CREW}`],
|
||||
{ stdio: "ignore" });
|
||||
const vorbau = httpsServer({ key: readFileSync(schl), cert: readFileSync(zert) },
|
||||
(von, nach) => {
|
||||
const w = httpAnfrage({
|
||||
host: "127.0.0.1", port: PORT, path: von.url, method: von.method,
|
||||
headers: { ...von.headers, host: `${CREW}:${HP}` },
|
||||
}, (a) => { nach.writeHead(a.statusCode || 502, a.headers); a.pipe(nach); });
|
||||
von.pipe(w);
|
||||
});
|
||||
await new Promise((r) => vorbau.listen(HP, "127.0.0.1", r));
|
||||
|
||||
const pw = await import(
|
||||
"file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
|
||||
const browser = await pw.chromium.launch({
|
||||
args: [`--host-resolver-rules=MAP ${CREW} 127.0.0.1`, "--ignore-certificate-errors"],
|
||||
});
|
||||
/* Die Hoehen, die es wirklich gibt -- nicht die aus dem Datenblatt.
|
||||
`app` ist die installierte App (nur die Systemleiste), `browser`
|
||||
zusaetzlich mit Adresszeile, `klein` ein aelteres Geraet, `tastatur`
|
||||
dasselbe Geraet mit offener Bildschirmtastatur. Die letzte ist die
|
||||
wichtigste: Man hat ja gerade etwas eingetippt. */
|
||||
const GROESSEN = [
|
||||
["app", 412, 915],
|
||||
["browser", 412, 780],
|
||||
["klein", 360, 640],
|
||||
["tastatur", 412, 430],
|
||||
];
|
||||
let schlimm = 0;
|
||||
try {
|
||||
/* MEHRERE GROESSEN UND NICHT EINE (25.09.2026). Der erste Anlauf
|
||||
mass nur 412 x 915 -- die Angabe aus dem Geraetedatenblatt. Dort
|
||||
passte es KNAPP: 782 px Inhalt in 784 px Fenster, Ausgang gerade
|
||||
noch sichtbar, und die Messung meldete "JA".
|
||||
|
||||
Das ist der BESTFALL und nicht der Alltag: Im Browser steht die
|
||||
Adresszeile darueber, in der App die Systemleiste, und beim Tippen
|
||||
kommt die Tastatur. Jede dieser Hoehen ist kleiner. Eine Messung,
|
||||
die nur den guenstigsten Fall kennt, sagt genau dann "in Ordnung",
|
||||
wenn der Nutzer schon feststeckt. */
|
||||
for (const [wie, breite, hoehe] of GROESSEN) {
|
||||
const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } });
|
||||
await kontext.addCookies(keks.split("; ").map((k) => {
|
||||
const [n, ...r] = k.split("=");
|
||||
return { name: n, value: r.join("="), domain: CREW, path: "/" };
|
||||
}));
|
||||
const seite = await kontext.newPage();
|
||||
await seite.goto(`https://${CREW}:${HP}/workspace/aufgaben.html`, { waitUntil: "networkidle" });
|
||||
await seite.waitForTimeout(1200);
|
||||
|
||||
/* Das Bearbeiten-Fenster oeffnen -- ueber den Stift an der Aufgabe,
|
||||
genau so wie Miss es getan hat. */
|
||||
const stift = seite.locator('.aufgabe [title*="earbeit"], .aufgabe button').first();
|
||||
if (await stift.count()) { await stift.click().catch(() => {}); }
|
||||
await seite.waitForTimeout(400);
|
||||
const offen = await seite.evaluate(() => {
|
||||
const dlg = document.getElementById("bearbeiten-dialog");
|
||||
if (dlg && !dlg.open) { try { dlg.showModal(); } catch { /* egal */ } }
|
||||
return !!(dlg && dlg.open);
|
||||
});
|
||||
await seite.waitForTimeout(500);
|
||||
|
||||
const mass = await seite.evaluate(() => {
|
||||
const dlg = document.getElementById("bearbeiten-dialog");
|
||||
if (!dlg || !dlg.open) return null;
|
||||
const raus = dlg.querySelector("#b-abbrechen");
|
||||
const rd = raus ? raus.getBoundingClientRect() : null;
|
||||
const dd = dlg.getBoundingClientRect();
|
||||
/* WELCHES ELEMENT KANN ROLLEN? Gefragt wird der gemessene Zustand
|
||||
(scrollHeight > clientHeight UND overflow erlaubt es), nicht die
|
||||
Absicht im Stilblatt. */
|
||||
const rollt = (el) => {
|
||||
if (!el) return false;
|
||||
const s = getComputedStyle(el);
|
||||
const geht = /auto|scroll/.test(s.overflowY);
|
||||
return geht && el.scrollHeight - el.clientHeight > 4;
|
||||
};
|
||||
const form = dlg.querySelector("form");
|
||||
return {
|
||||
fensterHoehe: window.innerHeight,
|
||||
dialogOben: Math.round(dd.top), dialogUnten: Math.round(dd.bottom),
|
||||
dialogHoehe: Math.round(dd.height),
|
||||
inhaltHoehe: form ? form.scrollHeight : null,
|
||||
dialogOverflow: getComputedStyle(dlg).overflowY,
|
||||
formOverflow: form ? getComputedStyle(form).overflowY : null,
|
||||
ausgangDa: !!raus,
|
||||
ausgangUnten: rd ? Math.round(rd.bottom) : null,
|
||||
ausgangSichtbar: !!(rd && rd.bottom <= window.innerHeight + 1 && rd.top >= -1
|
||||
&& rd.width > 0 && rd.height > 0),
|
||||
dialogRollt: rollt(dlg),
|
||||
formRollt: rollt(form),
|
||||
};
|
||||
});
|
||||
|
||||
console.log(`\n=== Aufgabe bearbeiten, ${breite} x ${hoehe} (${wie}) ===\n`);
|
||||
if (!offen || !mass) {
|
||||
console.log(" ABBRUCH: Das Fenster liess sich nicht oeffnen -- gemessen wurde nichts.");
|
||||
schlimm = 1;
|
||||
} else {
|
||||
for (const [k, v] of Object.entries(mass)) console.log(` ${k.padEnd(16)} ${v}`);
|
||||
const rauskommen = mass.ausgangSichtbar || mass.dialogRollt || mass.formRollt;
|
||||
console.log(`\n ==> Kommt man heraus? ${rauskommen ? "JA" : "NEIN -- SACKGASSE"}`);
|
||||
if (!rauskommen) schlimm = 1;
|
||||
await seite.locator("#bearbeiten-dialog")
|
||||
.screenshot({ path: `server/mess-dialog-${wie}.png` }).catch(() => {});
|
||||
console.log(` Bild: server/mess-dialog-${wie}.png`);
|
||||
}
|
||||
await kontext.close();
|
||||
}
|
||||
} finally {
|
||||
await browser.close();
|
||||
vorbau.close();
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
|
||||
process.exit(schlimm);
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
/* =====================================================================
|
||||
WIE DER EINGANG AUSSIEHT (25.09.2026)
|
||||
|
||||
Filipe zum Bildschirmfoto der Seite: „lass das bitte auch geiler
|
||||
aussehen bitte."
|
||||
|
||||
SIE PRUEFT NICHTS und meldet keinen Fehlschlag -- sie macht Bilder,
|
||||
auf denen man nachsehen kann. Deshalb `mess-` und nicht `pruef-`.
|
||||
|
||||
ZWEI BREITEN, und die kleinere ist die wichtigere: Ab 760 px steht
|
||||
das Bild neben dem Text, darunter untereinander. Wer nur die grosse
|
||||
ansieht, sieht die Haelfte der Regel nicht.
|
||||
|
||||
EIGENE WEGWERF-DATENBANK: Es entsteht eine echte Meldung mit Bild.
|
||||
In einem laufenden System waeren das Testdaten, und die sind
|
||||
verboten. Hier liegt alles in einem `mktemp`-Ordner.
|
||||
|
||||
Aufrufen mit: node server/mess-eingang-optik.mjs
|
||||
===================================================================== */
|
||||
import { mkdtempSync, rmSync, readFileSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import { execFileSync } from "node:child_process";
|
||||
import { request as httpAnfrage } from "node:http";
|
||||
import { createServer as httpsServer } from "node:https";
|
||||
|
||||
const PORT = 5401, HP = 5402;
|
||||
const CREW = "crew.dogfather-universe.com";
|
||||
const ordner = mkdtempSync(join(tmpdir(), "ws-eingang-"));
|
||||
process.env.WORKSPACE_DB = join(ordner, "workspace.db");
|
||||
process.env.PORT = String(PORT);
|
||||
process.env.SITE_ACCESS_SECRET = "lokaler-test";
|
||||
process.env.SITE_PUBLIC_LAUNCH_AT = "2020-01-01T00:00:00+01:00";
|
||||
|
||||
const express = (await import("express")).default;
|
||||
const ec = express.response.cookie;
|
||||
express.response.cookie = function (n, w, o) {
|
||||
return ec.call(this, n, w, { ...(o || {}), secure: false });
|
||||
};
|
||||
import { notbremse } from "./helfer-notbremse.mjs";
|
||||
await import("./index.js");
|
||||
notbremse(240_000, "mess-eingang-optik");
|
||||
await new Promise((r) => setTimeout(r, 900));
|
||||
process.on("uncaughtException", (f) => { console.error("ABSTURZ:", f); process.exit(7); });
|
||||
process.on("unhandledRejection", (f) => { console.error("ABSTURZ (Versprechen):", f); process.exit(7); });
|
||||
|
||||
const { DatabaseSync } = await import("node:sqlite");
|
||||
const { scryptSync, randomBytes, createHmac } = await import("node:crypto");
|
||||
const d = new DatabaseSync(process.env.WORKSPACE_DB);
|
||||
const jetzt = new Date().toISOString();
|
||||
const sch = randomBytes(32).toString("hex");
|
||||
d.prepare("INSERT INTO einstellungen (schluessel, wert, geaendert, von)"
|
||||
+ " VALUES (?,?,?,NULL) ON CONFLICT(schluessel) DO NOTHING")
|
||||
.run("code_kennung_schluessel", sch, jetzt);
|
||||
const anlegen = (name, rolle, code) => {
|
||||
const s = randomBytes(16).toString("hex");
|
||||
const h = scryptSync(code, s, 64,
|
||||
{ N: 32768, r: 8, p: 1, maxmem: 96 * 1024 * 1024 }).toString("hex");
|
||||
return d.prepare("INSERT INTO personen"
|
||||
+ " (name, rolle, code_hash, code_salt, code_n, code_kennung, aktiv, erstellt)"
|
||||
+ " VALUES (?,?,?,?,?,?,1,?) RETURNING id")
|
||||
.get(name, rolle, h, s, 32768,
|
||||
createHmac("sha256", sch).update(code).digest("hex"), jetzt).id;
|
||||
};
|
||||
anlegen("Filipe", "admin", "CODE-DOGI-0001");
|
||||
const idModi = anlegen("Miss", "modi", "CODE-MODI-0001");
|
||||
const idM2 = anlegen("Marina", "modi", "CODE-MODI-0002");
|
||||
|
||||
/* Ein winziges PNG als Anhang -- es geht um die FORM der Karte, nicht
|
||||
um das Motiv. 1x1 Bildpunkt reicht dafuer nicht: Der Kasten waere
|
||||
dann zwei Pixel gross und man saehe die Spaltenaufteilung nicht.
|
||||
Deshalb ein hochkantes Rechteck, so wie ein Handy-Bildschirmfoto. */
|
||||
const png = Buffer.from(
|
||||
"iVBORw0KGgoAAAANSUhEUgAAAGQAAADwCAYAAAB7ovsMAAAAWklEQVR42u3QMQEAAAjAoNu/"
|
||||
+ "tBmeIAfpVoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA"
|
||||
+ "AQIECBAgQIAAAQIECBAgQIAAAe4W1H8B4aXvOgAAAABJRU5ErkJggg==", "base64");
|
||||
d.prepare(`INSERT INTO support_meldungen
|
||||
(person_id, text, seite, bild_datei, bild_typ, bild_breite, bild_hoehe,
|
||||
stand, erstellt, geaendert)
|
||||
VALUES (?,?,?,?,?,?,?,?,?,?)`)
|
||||
.run(idModi,
|
||||
"Ich konnte da wieder nicht zurück gehen, musste die App schließen "
|
||||
+ "damit ich wieder auf die Hauptseite kam",
|
||||
"/workspace/support.html", "probe.png", "image/png", 100, 240,
|
||||
"in_arbeit", jetzt, jetzt);
|
||||
d.prepare(`INSERT INTO support_meldungen
|
||||
(person_id, text, seite, stand, erstellt, geaendert)
|
||||
VALUES (?,?,?,?,?,?)`)
|
||||
.run(idM2, "Der Kalender springt beim Wischen manchmal zwei Monate weiter.",
|
||||
"/workspace/kalender.html", "neu", jetzt, jetzt);
|
||||
/* Die Bilddatei dort ablegen, wo die Route sie sucht. */
|
||||
const { DATEN_ORDNER } = await import("./workspace.js");
|
||||
try {
|
||||
const { mkdirSync, writeFileSync } = await import("node:fs");
|
||||
const ziel = join(DATEN_ORDNER, "support");
|
||||
mkdirSync(ziel, { recursive: true });
|
||||
writeFileSync(join(ziel, "probe.png"), png);
|
||||
} catch (f) { console.log("Bild nicht abgelegt:", f?.message); }
|
||||
d.close();
|
||||
|
||||
const anfrage = (pfad, art, koerper) => new Promise((fertig, schief) => {
|
||||
const a = httpAnfrage({
|
||||
host: "127.0.0.1", port: PORT, path: pfad, method: art,
|
||||
headers: { Host: CREW, "Content-Type": "application/json" },
|
||||
}, (r) => {
|
||||
let t = ""; r.on("data", (x) => { t += x; });
|
||||
r.on("end", () => fertig({ code: r.statusCode, kopf: r.headers, text: t }));
|
||||
});
|
||||
a.on("error", schief);
|
||||
if (koerper) a.write(JSON.stringify(koerper));
|
||||
a.end();
|
||||
});
|
||||
const an = await anfrage("/workspace/api/anmelden", "POST",
|
||||
{ rolle: "admin", code: "CODE-DOGI-0001" });
|
||||
if (an.code !== 200) { console.log(`ABBRUCH: Anmeldung ${an.code}`); process.exit(2); }
|
||||
const keks = (an.kopf["set-cookie"] || []).map((x) => x.split(";")[0]).join("; ");
|
||||
|
||||
const schl = join(ordner, "b.key"), zert = join(ordner, "b.crt");
|
||||
execFileSync("openssl", ["req", "-x509", "-newkey", "rsa:2048", "-nodes", "-keyout", schl,
|
||||
"-out", zert, "-days", "2", "-subj", `/CN=${CREW}`, "-addext", `subjectAltName=DNS:${CREW}`],
|
||||
{ stdio: "ignore" });
|
||||
const vorbau = httpsServer({ key: readFileSync(schl), cert: readFileSync(zert) },
|
||||
(von, nach) => {
|
||||
const w = httpAnfrage({
|
||||
host: "127.0.0.1", port: PORT, path: von.url, method: von.method,
|
||||
headers: { ...von.headers, host: `${CREW}:${HP}` },
|
||||
}, (a) => { nach.writeHead(a.statusCode || 502, a.headers); a.pipe(nach); });
|
||||
von.pipe(w);
|
||||
});
|
||||
await new Promise((r) => vorbau.listen(HP, "127.0.0.1", r));
|
||||
|
||||
const pw = await import(
|
||||
"file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
|
||||
const browser = await pw.chromium.launch({
|
||||
args: [`--host-resolver-rules=MAP ${CREW} 127.0.0.1`, "--ignore-certificate-errors"],
|
||||
});
|
||||
try {
|
||||
for (const [wie, breite, hoehe] of [["computer", 1280, 1100], ["handy", 412, 915]]) {
|
||||
const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } });
|
||||
await kontext.addCookies(keks.split("; ").map((k) => {
|
||||
const [n, ...r] = k.split("=");
|
||||
return { name: n, value: r.join("="), domain: CREW, path: "/" };
|
||||
}));
|
||||
const seite = await kontext.newPage();
|
||||
const konsole = [];
|
||||
seite.on("console", (e) => {
|
||||
if (e.type() === "error" && !/favicon|ERR_CERT|net::ERR/i.test(e.text())) {
|
||||
konsole.push(e.text().slice(0, 140));
|
||||
}
|
||||
});
|
||||
await seite.goto(`https://${CREW}:${HP}/workspace/support.html`, { waitUntil: "networkidle" });
|
||||
await seite.waitForTimeout(1400);
|
||||
const blick = await seite.evaluate(() => {
|
||||
const block = document.getElementById("eingang-block");
|
||||
const karten = [...document.querySelectorAll(".s-karte")];
|
||||
const mitBild = karten.find((k) => k.querySelector(".s-karte__bild"));
|
||||
const spalten = mitBild ? getComputedStyle(mitBild).gridTemplateColumns : "-";
|
||||
return {
|
||||
eingangSichtbar: !!(block && !block.hidden),
|
||||
karten: karten.length,
|
||||
mitBild: !!mitBild,
|
||||
spalten,
|
||||
felder: document.querySelectorAll(".s-bilanz__feld").length,
|
||||
leerMarkiert: document.querySelectorAll('.s-bilanz__feld[data-leer="ja"]').length,
|
||||
};
|
||||
});
|
||||
console.log(`\n=== Eingang, ${breite} x ${hoehe} (${wie}) ===`);
|
||||
for (const [k, v] of Object.entries(blick)) console.log(` ${k.padEnd(16)} ${v}`);
|
||||
if (konsole.length) console.log(" FEHLER IN DER KONSOLE:", konsole);
|
||||
const ziel = seite.locator("#eingang-block");
|
||||
if (await ziel.count()) {
|
||||
await ziel.screenshot({ path: `server/mess-eingang-${wie}.png` }).catch(() => {});
|
||||
console.log(` Bild: server/mess-eingang-${wie}.png`);
|
||||
}
|
||||
await kontext.close();
|
||||
}
|
||||
} finally {
|
||||
await browser.close();
|
||||
vorbau.close();
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
|
||||
process.exit(0);
|
||||
}
|
||||
@@ -49,6 +49,48 @@ notbremse(480_000, "pruef-abbrechen-optik");
|
||||
await new Promise((r) => setTimeout(r, 900));
|
||||
const BASIS = `http://127.0.0.1:${PORT}`;
|
||||
|
||||
/* ==== DER ANZEIGENAME FUER „review" -- ABGELESEN, NICHT GETIPPT =====
|
||||
|
||||
Er steht in `STATUS_NAME` in workspace/assets/js/aufgaben.js und
|
||||
hiess bis zum 20.09.2026 „Review", seither „Zur Freigabe". Diese
|
||||
Pruefung hatte ihn abgeschrieben und war seitdem rot.
|
||||
|
||||
GELESEN WIRD DIE DATEI, nicht importiert: aufgaben.js ist ein
|
||||
Browser-Skript (eine IIFE ohne Export) -- ein `import` bekaeme dort
|
||||
nichts. Ein Auszug aus dem Quelltext ist der einzige Weg, der ohne
|
||||
eine zweite Wahrheit auskommt.
|
||||
|
||||
FINDET ER NICHTS, BRICHT DIE PRUEFUNG AB. Ein stiller Rueckfall auf
|
||||
„Review" waere genau der Zustand, der hier gerade repariert wird:
|
||||
ein Wort, das niemand mehr pflegt. */
|
||||
const WORT_REVIEW = await (async () => {
|
||||
const { readFileSync } = await import("node:fs");
|
||||
const { fileURLToPath } = await import("node:url");
|
||||
const { dirname, join: verbinde } = await import("node:path");
|
||||
const hier = dirname(fileURLToPath(import.meta.url));
|
||||
const quelle = readFileSync(
|
||||
verbinde(hier, "..", "workspace", "assets", "js", "aufgaben.js"), "utf8");
|
||||
/* GESUCHT WIRD IN STATUS_WORT, nicht irgendwo. Der erste Anlauf
|
||||
nahm das erste `review:` der Datei -- und das gehoert einer
|
||||
Uebergangstabelle (`review: 'erledigt'`, was der naechste
|
||||
Schritt ist, nicht der Name). Die Pruefung las dadurch
|
||||
"erledigt" und blieb rot. Ein Ausdruck, der die falsche
|
||||
Stelle trifft, ist schlimmer als keiner: Er sieht aus wie
|
||||
eine Ableitung. */
|
||||
/* SIE HEISST STATUS_NAME, nicht STATUS_WORT -- die zweite
|
||||
heisst so in entwicklung.js. Zwei Dateien, zwei Namen fuer
|
||||
dieselbe Tafel; nachgesehen statt erinnert. */
|
||||
const tafel = /STATUS_NAME\s*=\s*{([^}]*)}/.exec(quelle);
|
||||
const treffer = tafel && /review:\s*'([^']+)'/.exec(tafel[1]);
|
||||
if (!treffer) {
|
||||
console.error("ABBRUCH: In aufgaben.js steht kein Anzeigename fuer `review`. "
|
||||
+ "Wurde STATUS_NAME umbenannt? Ohne ihn prueft diese Datei nichts.");
|
||||
process.exit(3);
|
||||
}
|
||||
return treffer[1];
|
||||
})();
|
||||
console.log(` -- Anzeigename fuer "review": "${WORT_REVIEW}" (aus aufgaben.js gelesen)`);
|
||||
|
||||
const PROTOKOLL = join(process.cwd(), "pruef-abbrechen-optik-lauf.txt");
|
||||
try { rmSync(PROTOKOLL, { force: true }); } catch { /* gab es noch nicht */ }
|
||||
const melde = (z) => {
|
||||
@@ -172,7 +214,17 @@ melde("\n=== Der Dialog verlangt einen Grund ===");
|
||||
/* Sagt er, was passiert -- und was NICHT passiert? Die Sorge bei so
|
||||
einem Knopf ist immer, ob etwas verloren geht. */
|
||||
const was = await seite.$eval("#abbruch-was", (e) => e.textContent);
|
||||
ok(/nicht gelöscht/i.test(was) && /Review/.test(was),
|
||||
/* „REVIEW" HEISST SEIT DEM 20.09.2026 „ZUR FREIGABE" (nachgezogen
|
||||
25.09.2026). Die Oberflaeche wurde umbenannt, diese Pruefung
|
||||
nicht -- sie war seither rot, ohne dass etwas kaputt war, und
|
||||
eine Warnung, die immer kommt, wird ueberlesen.
|
||||
|
||||
GEPRUEFT WIRD GEGEN DIE EINE QUELLE, nicht gegen ein zweites
|
||||
abgeschriebenes Wort: `STATUS_WORT` in aufgaben.js ist die Stelle,
|
||||
an der der Anzeigename steht. Wird er morgen wieder geaendert,
|
||||
zieht diese Zeile von selbst mit -- und wer ihn aendert, ohne
|
||||
dass der Dialog mitgeht, wird hier rot. */
|
||||
ok(/nicht gelöscht/i.test(was) && new RegExp(WORT_REVIEW).test(was),
|
||||
`er erklärt es: "${was.trim().slice(0, 95)}…"`);
|
||||
|
||||
/* Ohne Grund abschicken -- der Dialog muss offen bleiben. */
|
||||
@@ -236,7 +288,7 @@ melde("\n=== Der Bereich 'Abgebrochen' ===");
|
||||
ok(/Kampagne verschoben/.test(grund), `der Grund steht dran: "${grund}"`);
|
||||
|
||||
const vorher = await seite.$eval(".abbruch-karte__vorher", (e) => e.textContent.trim());
|
||||
ok(vorher === "Review", `und in welchem Status sie war: "${vorher}"`);
|
||||
ok(vorher === WORT_REVIEW, `und in welchem Status sie war: "${vorher}"`);
|
||||
|
||||
const wer = await seite.$eval(".abbruch-karte__wer", (e) => e.textContent.trim());
|
||||
ok(/Filipe/.test(wer), `und wer es war: "${wer}"`);
|
||||
|
||||
@@ -822,6 +822,78 @@ console.log("");
|
||||
ok(/Marina/.test(nachWahl.liste),
|
||||
'die Aufgabenliste darunter gehoert ihr ("' + nachWahl.liste + '")');
|
||||
|
||||
/* ==== DIE KACHEL DREHT SICH UM (25.09.2026) ======================
|
||||
|
||||
Filipe: „wenn ich drauf drücke dreht sich die kachel und dan seh
|
||||
ich wer es gemacht hat, und immer noch die option es nochmal zu
|
||||
verteilen falls neue leute ins team zustoßen."
|
||||
|
||||
DREI DINGE, UND JEDES EINZELN:
|
||||
1. Bei „Alle" gibt es ueberhaupt einen Weg auf die Rueckseite.
|
||||
2. Dort stehen die NAMEN -- so viele, wie es Zielbare gibt.
|
||||
3. Und ein Knopf, der wieder verteilt.
|
||||
|
||||
DIE ZAHL GEHOERT IN DIE BEDINGUNG: Eine leere Rueckseite wuerde
|
||||
sonst als "gedreht, alles gut" durchgehen -- der Fehler, der in
|
||||
diesem Haus am 01.09. dreimal gruen dastand. */
|
||||
await seite.evaluate(() => {
|
||||
document.querySelector('.stufenleiter--wer [data-alle="ja"]')?.click();
|
||||
});
|
||||
await seite.waitForTimeout(900);
|
||||
const dreh = await seite.evaluate(() => {
|
||||
const k = document.querySelector('.vorlagenbrett__karte[data-dreh="ja"]');
|
||||
if (!k) return { drehbar: false };
|
||||
const knopf = k.querySelector(".vorlagenbrett__drehknopf");
|
||||
knopf?.click();
|
||||
const hinten = k.querySelector(".vorlagenbrett__seite--hinten");
|
||||
return {
|
||||
drehbar: true,
|
||||
gedreht: k.dataset.gedreht === "ja",
|
||||
namen: [...(hinten?.querySelectorAll(".vorlagenbrett__wer-name") || [])]
|
||||
.map((x) => x.textContent),
|
||||
knoepfe: [...(hinten?.querySelectorAll("button") || [])]
|
||||
.map((b) => b.textContent.trim()),
|
||||
/* Und vorne darf danach NICHTS mehr von der Rueckseite stehen
|
||||
-- sonst waere es kein Umdrehen, sondern ein Aufklappen. */
|
||||
vorneNamen: k.querySelectorAll(
|
||||
".vorlagenbrett__seite--vorn .vorlagenbrett__wer-name").length,
|
||||
};
|
||||
});
|
||||
ok(dreh.drehbar, "bei \u201eAlle\u201c ist die Kachel drehbar");
|
||||
ok(dreh.gedreht === true, `und ein Druck dreht sie um (${dreh.gedreht})`);
|
||||
ok((dreh.namen || []).length >= 2,
|
||||
`hinten stehen die Namen (${(dreh.namen || []).join(", ") || "keine"})`);
|
||||
ok((dreh.knoepfe || []).some((t) => /Nachholen|Nochmal/.test(t))
|
||||
&& (dreh.knoepfe || []).some((t) => /Zur\u00fcck/.test(t)),
|
||||
`mit Verteil- und Zurueck-Knopf (${(dreh.knoepfe || []).join(" | ") || "keine"})`);
|
||||
ok(dreh.vorneNamen === 0,
|
||||
`und vorne steht kein Name mehr (${dreh.vorneNamen})`);
|
||||
|
||||
/* ==== UND DIE AUSWAHL WIEDER ZURUECKSTELLEN =====================
|
||||
|
||||
Der Klick auf "Alle" hat die gewaehlte Person veraendert -- und
|
||||
die Pruefungen weiter unten arbeiten mit Marina. Beim ersten
|
||||
Anlauf fielen dadurch zwei Zeilen um ("die Aufgabe liegt in
|
||||
ihrer Liste (2 -> 2)"), und zwar an Stellen, an denen nichts
|
||||
kaputt war. Eine Pruefung, die den Zustand fuer die naechste
|
||||
verstellt, misst deren Ergebnis mit.
|
||||
|
||||
ES WIRD NACHGEWIESEN, NICHT GEHOFFT: Ohne die Zeile darunter
|
||||
waere ein misslungenes Zuruecksetzen wieder ein Fehler an der
|
||||
falschen Stelle -- und man suchte ihn dort. */
|
||||
await seite.evaluate(() => {
|
||||
const b = [...document.querySelectorAll(".stufenleiter--wer .stufenleiter__knopf")]
|
||||
.find((x) => /Marina/.test(x.textContent));
|
||||
b?.click();
|
||||
});
|
||||
await seite.waitForTimeout(900);
|
||||
const zurueckGestellt = await seite.evaluate(() =>
|
||||
[...document.querySelectorAll(".stufenleiter--wer .stufenleiter__knopf")]
|
||||
.filter((x) => x.getAttribute("aria-pressed") === "true")
|
||||
.map((x) => x.textContent.trim().replace(/\s+/g, " ")));
|
||||
ok(zurueckGestellt.some((t) => /Marina/.test(t)),
|
||||
`die Auswahl steht wieder auf Marina (${zurueckGestellt.join(", ") || "keine"})`);
|
||||
|
||||
/* GEZAEHLT WIRD IN IHRER LISTE, NICHT AUF DEM BRETT.
|
||||
|
||||
Auf "Aufgaben" stand unter dem Katalog das Brett, und die
|
||||
|
||||
@@ -325,11 +325,33 @@ console.log("\n=== 6. Was ein Modi auf seiner Startseite sieht ===\n");
|
||||
/* Nichts aus der Agentur. Nicht "moeglichst wenig", sondern keine
|
||||
einzige -- diese Seiten drehen sich um betreute Creator, um
|
||||
Rechte oder um Automationen. */
|
||||
/* `calls.html` STAND HIER UND IST AM 25.09.2026 HERAUSGENOMMEN.
|
||||
|
||||
Nicht, weil die Pruefung zu streng war, sondern weil sich die
|
||||
Sache geaendert hat: Filipe hat die Calls-Kachel ausdruecklich
|
||||
fuer alle verlangt, die einen Kalender haben („jeder der einen
|
||||
kalender hat soll auch sowas haben danke"), und ein Modi hat
|
||||
einen. Seither war diese Zeile rot, ohne dass etwas kaputt war
|
||||
-- und eine Warnung, die immer kommt, wird ueberlesen.
|
||||
|
||||
DIE LISTE BLEIBT EINE LISTE VON HAND, und das ist ihre Schwaeche:
|
||||
Sie altert genau so wie diese Zeile gealtert ist. Deshalb steht
|
||||
darunter eine Gegenprobe -- ohne sie waere „nichts Verbotenes
|
||||
dabei" auch dann gruen, wenn die Pruefung gar nichts mehr
|
||||
prueft. */
|
||||
const verboten = ["personen.html", "scouting.html", "automation.html",
|
||||
"report.html", "calls.html", "uebersicht.html", "content.html"];
|
||||
const drin = (b || []).map((x) => x.ziel).filter((z) => verboten.includes(z));
|
||||
ok(Array.isArray(b) && drin.length === 0,
|
||||
drin.length ? `ABER AUCH: ${drin.join(", ")} -- FEHLER` : "und nichts aus der Agentur");
|
||||
"report.html", "uebersicht.html", "content.html"];
|
||||
const ziele = (b || []).map((x) => x.ziel);
|
||||
const drin = ziele.filter((z) => verboten.includes(z));
|
||||
ok(Array.isArray(b) && verboten.length >= 6 && drin.length === 0,
|
||||
drin.length ? `ABER AUCH: ${drin.join(", ")} -- FEHLER`
|
||||
: `und nichts aus der Agentur (${verboten.length} Seiten geprueft)`);
|
||||
/* GEGENPROBE: Haette er eine davon, MUSS die Zeile darueber
|
||||
anschlagen. Gepruft wird an einer erfundenen Liste, nicht an
|
||||
echten Daten -- es wird nichts angelegt und nichts veraendert. */
|
||||
const alsHaette = [...ziele, "scouting.html"].filter((z) => verboten.includes(z));
|
||||
ok(alsHaette.length === 1,
|
||||
`und sie wuerde es merken, wenn doch (Probe: ${alsHaette.join(", ") || "merkt nichts"})`);
|
||||
/* Die Beschriftung gehoert zum Empfaenger: "Alle Creator auf einen
|
||||
Blick" waere fuer jemanden ohne Creator schlicht falsch. */
|
||||
ok((b || []).every((x) => x.name && x.unter && x.zeichen && x.ziel),
|
||||
@@ -409,6 +431,44 @@ console.log("\n=== 7. Dieselbe Seite mit einem echten Browser ===\n");
|
||||
|
||||
await seite.screenshot({ path: "pruef-modi-start.png", fullPage: true });
|
||||
console.log(" -- Bildschirmfoto: server/pruef-modi-start.png");
|
||||
|
||||
/* ==== DER CREATOR-KATALOG GEHOERT IHM NICHT (25.09.2026) ========
|
||||
|
||||
Filipe, zu einem Bildschirmfoto der Aufgabenseite: „es gibt
|
||||
keine creator auf dieser seite. die app ist nur fuer modis und
|
||||
community also steht das falsch da."
|
||||
|
||||
Dort stand ein Katalog mit vier Bereichen und vier Stufen -- der
|
||||
fuer CREATOR -- und darunter „Waehle oben einen Creator, dann
|
||||
lassen sich diese Aufgaben uebernehmen". Auf dieser Adresse gibt
|
||||
es keine; der Satz forderte zu etwas auf, das nie geht.
|
||||
|
||||
GEPRUEFT WIRD DER KASTEN UND DER SATZ, nicht nur einer von
|
||||
beiden: Verschwindet der Satz und der leere Kasten bleibt, ist
|
||||
es dieselbe Sackgasse in leise. */
|
||||
await seite.goto(BASIS + "/workspace/aufgaben.html", { waitUntil: "networkidle" });
|
||||
await seite.waitForTimeout(1200);
|
||||
const katalog = await seite.evaluate(() => {
|
||||
const kasten = document.getElementById("vorlagenbrett");
|
||||
return {
|
||||
daUeberhaupt: !!kasten,
|
||||
sichtbar: !!(kasten && !kasten.hidden && kasten.offsetHeight > 0),
|
||||
text: (document.body.textContent || "").includes("Wähle oben einen Creator"),
|
||||
/* GEGENPROBE IM SELBEN ZUG: Sein EIGENES Aufgabenbrett muss da
|
||||
sein. Waere die ganze Seite leer, meldeten die zwei Zeilen
|
||||
darueber brav "nichts Fremdes zu sehen". */
|
||||
eigenes: !!document.querySelector("#brett, .spalten, .aufgabe, #aufgaben"),
|
||||
};
|
||||
});
|
||||
ok(katalog.daUeberhaupt,
|
||||
"der Kasten fuer den Katalog steht im Bauplan der Seite (Gegenprobe)");
|
||||
ok(!katalog.sichtbar,
|
||||
`der Creator-Katalog wird ihm NICHT gezeigt (sichtbar: ${katalog.sichtbar})`);
|
||||
ok(!katalog.text,
|
||||
"und der Satz „Waehle oben einen Creator“ steht nirgends");
|
||||
ok(katalog.eigenes,
|
||||
"sein eigenes Aufgabenbrett ist trotzdem da (Gegenprobe)");
|
||||
|
||||
await kontext.close();
|
||||
} finally {
|
||||
await browser.close();
|
||||
@@ -434,7 +494,27 @@ console.log("\n=== 8. Aufgaben, Einträge und Dateien eines Modis ===\n");
|
||||
method: "POST", headers: { "Content-Type": "application/json", cookie: an.keks },
|
||||
body: JSON.stringify({ titel: MERKMAL + " Aufgabe" }),
|
||||
});
|
||||
ok(t1.status === 201, `der Modi legt eine Aufgabe an (${t1.status})`);
|
||||
/* ==== UMGEDREHT -- UND STRENGER (25.09.2026) ====================
|
||||
|
||||
Hier stand `status === 201`: „der Modi legt eine Aufgabe an". Das
|
||||
war bis zum 22.09.2026 richtig. An dem Tag hat Filipe es
|
||||
abgeschafft: „sie sich nicht selber aufgaben geben" und „die modis
|
||||
sollen nur diese aufgaben wo sie von den drauf markiert werden
|
||||
annehmen koennen". Seither antwortet der Server mit 403 -- und
|
||||
diese Zeile war seitdem rot, ohne dass etwas kaputt war.
|
||||
|
||||
SIE PRUEFT JETZT MEHR ALS VORHER, nicht weniger: nicht nur die
|
||||
Nummer, sondern auch das WORT. Eine 403 aus einem anderen Grund
|
||||
(etwa weil die Anmeldung kaputt ist) saehe sonst genauso aus wie
|
||||
die gewollte Absage -- und die Pruefung waere gruen ueber einem
|
||||
ganz anderen Fehler.
|
||||
|
||||
WARUM DAS WORT ZAEHLT: `nur_leitung_legt_an` hat in meldung.js
|
||||
einen ganzen Satz („Aufgaben werden dir zugeteilt -- anlegen
|
||||
kannst du hier keine"). Eine nackte 403 haette ihn nicht. */
|
||||
const t1Fehler = (await t1.json().catch(() => ({})))?.fehler;
|
||||
ok(t1.status === 403 && t1Fehler === "nur_leitung_legt_an",
|
||||
`der Modi legt KEINE Aufgabe an -- mit Begruendung (${t1.status} ${t1Fehler || "ohne Wort"})`);
|
||||
|
||||
/* (b) Ein Bereichs-Eintrag -- ebenfalls ueber den normalen Weg. */
|
||||
const t2 = await fetch(BASIS + "/workspace/api/bereich/live", {
|
||||
|
||||
@@ -902,13 +902,17 @@ aufgabenRouter.post("/workspace/api/aufgaben", gleicheHerkunft, (req, res) => {
|
||||
INSERT INTO aufgaben
|
||||
(titel, beschreibung, status, prioritaet, creator_id, verantwortlich_id,
|
||||
creator_extern, verantwortlich_extern, frist, kategorie, kanal,
|
||||
erstellt, erstellt_von)
|
||||
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)`).run(
|
||||
erstellt, erstellt_von, haus)
|
||||
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)`).run(
|
||||
/* DAS HAUS WIRD BEIM ANLEGEN GESCHRIEBEN (25.09.2026) -- siehe
|
||||
das letzte Argument. Ohne es bekaeme eine Aufgabe, an der nur
|
||||
DogFather haengt (Pool-Aufgabe ohne Verantwortlichen), kein
|
||||
Haus -- und waere in beiden sichtbar. */
|
||||
aus.titel, aus.beschreibung ?? null, aus.status ?? "offen",
|
||||
aus.prioritaet ?? "mittel", aus.creator_id ?? null, aus.verantwortlich_id ?? null,
|
||||
aus.creator_extern ?? null, aus.verantwortlich_extern ?? null,
|
||||
aus.frist ?? null, aus.kategorie ?? null, aus.kanal ?? null,
|
||||
jetzt(), req.person.id);
|
||||
jetzt(), req.person.id, req.person.haus || null);
|
||||
|
||||
/* AN MENSCHEN VERTEILEN (21.09.2026, Abschnitt 3).
|
||||
Nur wer verteilen darf -- sonst koennte sich jemand selbst eine
|
||||
|
||||
@@ -2125,10 +2125,11 @@ bereicheRouter.post("/workspace/api/bereich/:bereich/start", gleicheHerkunft, (r
|
||||
die Zeile laesst sich hinterher nicht mehr aendern. */
|
||||
if (!Object.hasOwn(einstellung.arten, v.art)) continue;
|
||||
const { lastInsertRowid } = db().prepare(`
|
||||
INSERT INTO eintraege (bereich, art, titel, text, datum, status, erstellt, erstellt_von)
|
||||
VALUES (?,?,?,?,?, 'offen', ?, ?)`)
|
||||
INSERT INTO eintraege (bereich, art, titel, text, datum, status, erstellt,
|
||||
erstellt_von, haus)
|
||||
VALUES (?,?,?,?,?, 'offen', ?, ?, ?)`)
|
||||
.run(bereich, v.art, v.titel, v.text ?? null,
|
||||
jetzt().slice(0, 10), jetzt(), req.person.id);
|
||||
jetzt().slice(0, 10), jetzt(), req.person.id, req.person.haus || null);
|
||||
|
||||
/* UND SOFORT FREIGEBEN (17.09.2026) -- der Fehler, den Filipe
|
||||
auf seinem Bildschirm gesehen hat.
|
||||
@@ -2237,11 +2238,12 @@ bereicheRouter.post("/workspace/api/bereich/:bereich/:id/daraus",
|
||||
|
||||
const { lastInsertRowid } = db().prepare(`
|
||||
INSERT INTO eintraege (bereich, art, titel, text, datum, status,
|
||||
erstellt, erstellt_von, aus_eintrag_id)
|
||||
VALUES (?,?,?,?,?, 'offen', ?,?,?)`)
|
||||
erstellt, erstellt_von, aus_eintrag_id, haus)
|
||||
VALUES (?,?,?,?,?, 'offen', ?,?,?,?)`)
|
||||
.run(nach, art, quelle.titel,
|
||||
String(req.body?.text ?? "").trim().slice(0, TEXT_MAX) || null,
|
||||
jetzt().slice(0, 10), jetzt(), req.person.id, quelle.id);
|
||||
jetzt().slice(0, 10), jetzt(), req.person.id, quelle.id,
|
||||
req.person.haus || null);
|
||||
|
||||
protokolliere("bereich_daraus", {
|
||||
personId: req.person.id, rolle: req.person.rolle, ip: echteIp(req),
|
||||
@@ -2500,8 +2502,8 @@ bereicheRouter.post("/workspace/api/bereich/:bereich", gleicheHerkunft, (req, re
|
||||
INSERT INTO eintraege
|
||||
(bereich, art, titel, text, datum, uhrzeit, bewertung, dringlichkeit, status,
|
||||
creator_id, creator_extern, erstellt, erstellt_von, hook, format, saeule_id, geplant,
|
||||
event_ende, event_aufgaben, event_regeln, einsatz, nur_leitung)
|
||||
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`).run(
|
||||
event_ende, event_aufgaben, event_regeln, einsatz, nur_leitung, haus)
|
||||
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`).run(
|
||||
bereich, aus.art, aus.titel, aus.text ?? null, aus.datum, aus.uhrzeit ?? null,
|
||||
aus.bewertung ?? null, aus.dringlichkeit ?? "mittel", aus.status ?? "offen",
|
||||
aus.creator_id ?? null, aus.creator_extern ?? null, jetzt(), req.person.id,
|
||||
@@ -2512,7 +2514,9 @@ bereicheRouter.post("/workspace/api/bereich/:bereich", gleicheHerkunft, (req, re
|
||||
unbekannt ist bei einer Vertraulichkeit die falsche Antwort.
|
||||
Wer nichts waehlt, schreibt fuers Team -- das ist der offene
|
||||
Fall, und der soll der Normalfall sein. */
|
||||
aus.nur_leitung ?? 0);
|
||||
aus.nur_leitung ?? 0,
|
||||
/* Das Haus aus der Adresse -- letzte Spalte, letzter Wert. */
|
||||
req.person.haus || null);
|
||||
|
||||
protokolliere("eintrag_angelegt", {
|
||||
personId: req.person.id, rolle: req.person.rolle, ip: echteIp(req),
|
||||
@@ -2686,10 +2690,11 @@ bereicheRouter.post("/workspace/api/bereich/:bereich/:id(\\d+)/bild",
|
||||
|
||||
const info = db().prepare(
|
||||
"INSERT INTO dateien (name_original, name_datei, groesse, typ, status,"
|
||||
+ " notiz, hochgeladen_von, erstellt, eintrag_id)"
|
||||
+ " VALUES (?,?,?,?,'entwurf',NULL,?,?,?)")
|
||||
+ " notiz, hochgeladen_von, erstellt, eintrag_id, haus)"
|
||||
+ " VALUES (?,?,?,?,'entwurf',NULL,?,?,?,?)")
|
||||
.run(name, dateiname, req.body.length, erkannt.typ,
|
||||
req.person.id, new Date().toISOString(), eintrag.id);
|
||||
req.person.id, new Date().toISOString(), eintrag.id,
|
||||
req.person.haus || null);
|
||||
|
||||
protokolliere("eintrag_bild", {
|
||||
personId: req.person.id, rolle: req.person.rolle, ip: echteIp(req),
|
||||
|
||||
@@ -127,7 +127,25 @@ function tabellen() {
|
||||
Fehler, ein neues CREATE wuerde die vorhandenen Zeilen nicht
|
||||
erreichen. Also nachsehen, was da ist, und nur ergaenzen, was
|
||||
fehlt -- dieselbe Bauart wie bei den Personen-Spalten. */
|
||||
const NOETIG = [["gilt_ab", "TEXT"], ["gilt_bis", "TEXT"]];
|
||||
/* ==== DAS HAUS GEHOERT IN DIESE LISTE, NICHT IN DIE ANDERE ======
|
||||
|
||||
(25.09.2026.) Beim Bau der Haustrennung habe ich `["material",
|
||||
"haus", "TEXT"]` in die Spaltenliste von `workspace.js` gesetzt --
|
||||
dort stehen die anderen sieben Wurzeltabellen. `material` ist die
|
||||
einzige, die NICHT dort angelegt wird, sondern hier.
|
||||
|
||||
Auf der echten Datenbank fiel das nicht auf: Die Tabelle gab es
|
||||
laengst, also hat `ALTER TABLE` gegriffen. Auf einer FRISCHEN
|
||||
Datenbank lief die Liste in workspace.js dagegen, bevor es die
|
||||
Tabelle gab -- sie wird dort uebersprungen --, und danach legte
|
||||
diese Datei sie ohne `haus` an. Ergebnis: 78 Fehlschlaege mit
|
||||
"table material has no column named haus", und zwar erst beim
|
||||
SCHREIBEN, nicht beim Starten.
|
||||
|
||||
Gefunden hat das keine Ueberlegung, sondern `pruef-material`, weil
|
||||
sie mit einer frischen Datenbank arbeitet. Dieselbe Falle wie
|
||||
ueberall in diesem Haus: eine Liste an zwei Orten. */
|
||||
const NOETIG = [["gilt_ab", "TEXT"], ["gilt_bis", "TEXT"], ["haus", "TEXT"]];
|
||||
const da = new Set(d.prepare("PRAGMA table_info(material)").all().map((c) => c.name));
|
||||
for (const [spalte, form] of NOETIG) {
|
||||
if (da.has(spalte)) continue;
|
||||
@@ -369,10 +387,13 @@ materialRouter.post(
|
||||
|
||||
const { lastInsertRowid } = db().prepare(`
|
||||
INSERT INTO material (datei, dateiname, typ, art, groesse, text, von_id, erstellt,
|
||||
gilt_ab, gilt_bis)
|
||||
VALUES (?,?,?,?,?,?,?,?,?,?)
|
||||
gilt_ab, gilt_bis, haus)
|
||||
VALUES (?,?,?,?,?,?,?,?,?,?,?)
|
||||
`).run(datei, name, typ, art, req.body.length, text, req.person.id,
|
||||
new Date().toISOString(), ab, bis);
|
||||
new Date().toISOString(), ab, bis,
|
||||
/* AM MATERIAL HAENGT NUR `von_id` -- ist das DogFather, gibt es
|
||||
sonst keinen Beleg. Genau deshalb steht das Haus hier. */
|
||||
req.person.haus || null);
|
||||
|
||||
protokolliere(req.person.id, "material_eingestellt",
|
||||
`${art} "${name}" (${req.body.length} Bytes)`, echteIp(req));
|
||||
|
||||
@@ -290,10 +290,11 @@ videoRouter.post("/workspace/api/bereich/:bereich/video", async (req, res) => {
|
||||
if (abgelegt) {
|
||||
db().prepare(`
|
||||
INSERT INTO dateien (name_original, name_datei, groesse, typ, status, notiz,
|
||||
hochgeladen_von, erstellt, eintrag_id)
|
||||
VALUES (?,?,?,?, 'entwurf', NULL, ?,?,?)`)
|
||||
hochgeladen_von, erstellt, eintrag_id, haus)
|
||||
VALUES (?,?,?,?, 'entwurf', NULL, ?,?,?,?)`)
|
||||
.run(`cover-${auskunft.kanal}${abgelegt.name.slice(abgelegt.name.lastIndexOf("."))}`,
|
||||
abgelegt.name, abgelegt.groesse, abgelegt.art, req.person.id, jetzt, eintragId);
|
||||
abgelegt.name, abgelegt.groesse, abgelegt.art, req.person.id, jetzt, eintragId,
|
||||
req.person.haus || null);
|
||||
abgelegt = null; /* ab hier gehoert die Datei dem Eintrag */
|
||||
}
|
||||
|
||||
|
||||
@@ -432,12 +432,20 @@ wissenRouter.post(
|
||||
const { lastInsertRowid } = db().prepare(`
|
||||
INSERT INTO wissen
|
||||
(titel, beschreibung, kategorie, stufe, geraet, tags,
|
||||
name_original, name_datei, groesse, wichtig, veroeffentlicht, hochgeladen, erstellt_von)
|
||||
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)`).run(
|
||||
name_original, name_datei, groesse, wichtig, veroeffentlicht, hochgeladen,
|
||||
erstellt_von, haus)
|
||||
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)`).run(
|
||||
aus.titel, aus.beschreibung ?? null, aus.kategorie,
|
||||
aus.stufe ?? "einsteiger", aus.geraet ?? "egal", aus.tags ?? null,
|
||||
name, dateiname, req.body.length, aus.wichtig ?? 0,
|
||||
aus.veroeffentlicht ?? heute(), jetzt(), req.person.id);
|
||||
aus.veroeffentlicht ?? heute(), jetzt(), req.person.id,
|
||||
/* Die Wissensablage gibt es auf der Team-Adresse gar nicht
|
||||
(siehe `angemeldet` weiter oben) -- hier kann also nur
|
||||
"agentur" herauskommen. Trotzdem aus `person.haus` und nicht
|
||||
fest: Eine feste Zeichenkette waere eine zweite Wahrheit
|
||||
neben der Schranke, und die beiden liefen beim naechsten
|
||||
Umbau auseinander. */
|
||||
req.person.haus || null);
|
||||
|
||||
protokolliere("wissen_hochgeladen", {
|
||||
personId: req.person.id, rolle: req.person.rolle, ip: echteIp(req),
|
||||
|
||||
+30
-3
@@ -3132,8 +3132,31 @@ export function haeuserNachtragen(d) {
|
||||
["wissen", (r) => [r.erstellt_von].filter((x) => x != null), "titel",
|
||||
() => "agentur"],
|
||||
["material", (r) => [r.von_id].filter((x) => x != null), "dateiname"],
|
||||
["termin_serien", (r) => [r.creator_id, r.teilnehmer_id, r.erstellt_von]
|
||||
.filter((x) => x != null), "titel"],
|
||||
/* DIE TEILNEHMER DER SERIE ZAEHLEN MIT (nachgetragen 25.09.2026).
|
||||
|
||||
Hier standen nur `creator_id`, `teilnehmer_id` und
|
||||
`erstellt_von` -- bei den TERMINEN eine Zeile hoeher wird
|
||||
dagegen auch `termin_teilnehmer` gefragt. Dieselbe Frage, zwei
|
||||
verschiedene Antworten: genau die Bauart, vor der in dieser
|
||||
Datei an fuenfzehn Stellen gewarnt wird, und ich habe sie beim
|
||||
Nachruesten der Serien selbst gebaut.
|
||||
|
||||
GEMESSEN AM ECHTEN STAND nach dem Ausliefern: Zwei Serien
|
||||
blieben ohne Haus -- „Community-Call" und „Schulung-Agentur".
|
||||
An beiden haengt nur DogFather; ihre Teilnehmer sind fuenf
|
||||
Creator und Scouts, also eindeutig die Agentur. Der Beleg war
|
||||
da, er wurde nur nicht gelesen.
|
||||
|
||||
WAS DAS GEKOSTET HAETTE: Die 53 bereits erzeugten Termine sind
|
||||
richtig zugeordnet (sie haben ja Teilnehmer). Aber jeder KUENFTIG
|
||||
erzeugte haette `haus = null` geerbt -- und ein `null` ist in
|
||||
BEIDEN Haeusern sichtbar. Die Trennung waere Woche fuer Woche
|
||||
ein Stueck weiter aufgegangen, ohne dass etwas rot wird. */
|
||||
["termin_serien", (r) => [
|
||||
...d.prepare("SELECT person_id AS p FROM serie_teilnehmer WHERE serie_id = ?")
|
||||
.all(r.id).map((z) => z.p),
|
||||
r.creator_id, r.teilnehmer_id, r.erstellt_von,
|
||||
].filter((x) => x != null), "titel"],
|
||||
];
|
||||
|
||||
/* DIE EINTRAEGE ZUERST -- die Dateien erben von ihnen. Stuenden
|
||||
@@ -4112,7 +4135,11 @@ function umstellungen(d) {
|
||||
["eintraege", "haus", "TEXT"],
|
||||
["dateien", "haus", "TEXT"],
|
||||
["wissen", "haus", "TEXT"],
|
||||
["material", "haus", "TEXT"],
|
||||
/* `material` steht hier ABSICHTLICH NICHT. Seine Tabelle wird in
|
||||
workspace-material.js angelegt, und diese Schleife laeuft auf
|
||||
einer frischen Datenbank vorher -- sie haette die Spalte still
|
||||
uebersprungen, und das Schreiben waere erst im Betrieb
|
||||
gescheitert. Sie steht dort, wo die Tabelle wohnt. */
|
||||
/* Die WIEDERHOLUNGSREGEL braucht es auch: Der Nachfueller erzeugt
|
||||
daraus Termine, und die muessen wissen, wohin sie gehoeren. Ohne
|
||||
sie erbten sie `null` -- und ein `null` ist in beiden Haeusern
|
||||
|
||||
@@ -16,15 +16,15 @@
|
||||
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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
<!-- 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,
|
||||
WARUM das Telefon nicht klingelt, ist das besonders unpassend. -->
|
||||
<link rel="manifest" href="/workspace/crew.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<style>
|
||||
/* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite
|
||||
soll auch dann noch etwas anzeigen, wenn genau das schiefgeht,
|
||||
@@ -126,7 +126,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/anruf-probe.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/anruf-probe.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,25 +23,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609250002",
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609250049",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609250002",
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609250049",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609250002",
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609250049",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609250002",
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609250049",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
@@ -925,6 +925,94 @@
|
||||
background: rgba(4, 7, 12, .72);
|
||||
border: 1px solid rgba(160, 190, 225, .14);
|
||||
}
|
||||
/* =====================================================================
|
||||
DIE KACHEL DREHT SICH (25.09.2026)
|
||||
|
||||
Filipe: „wenn ich drauf drücke dreht sich die kachel und dan seh ich
|
||||
wer es gemacht hat, und immer noch die option es nochmal zu
|
||||
verteilen falls neue leute ins team zustoßen."
|
||||
|
||||
WIE ES GEBAUT IST: Die Karte selbst dreht sich (`rotateY`), und die
|
||||
beiden Seiten verstecken ihre Rueckseite (`backface-visibility`).
|
||||
Das ist der eine Weg, bei dem die Drehung EINE Bewegung ist und
|
||||
nicht zwei -- ein Ein- und Ausblenden saehe aus wie ein Austausch,
|
||||
nicht wie ein Umdrehen.
|
||||
|
||||
DIE RUECKSEITE LIEGT ABSOLUT UEBER DER VORDERSEITE, und das hat
|
||||
einen Grund, der nicht nach aussen sichtbar ist: Das Brett ist ein
|
||||
Raster. Zwei Seiten im Fluss wuerden die Karte doppelt so hoch
|
||||
machen, und das Raster zoege alle Nachbarkarten mit. So bestimmt
|
||||
weiterhin die Vorderseite die Hoehe.
|
||||
|
||||
`inset: 0` MEINT DEN INNENRAND, nicht den Rahmen -- absolute
|
||||
Kinder richten sich am Innenrand ihres Ankers aus. Die Rueckseite
|
||||
sitzt damit genau dort, wo auch der Text der Vorderseite beginnt,
|
||||
ohne dass ein Wert doppelt gepflegt werden muss.
|
||||
|
||||
UND WER NICHT UMDREHEN WILL, MUSS NICHT: Die Kurzfassung („liegt bei
|
||||
3 von 4") steht weiterhin vorne im Fuss. Die Rueckseite ist die
|
||||
Vertiefung, nicht die Grundauskunft.
|
||||
===================================================================== */
|
||||
.vorlagenbrett__karte[data-dreh="ja"] {
|
||||
position: relative;
|
||||
transform-style: preserve-3d;
|
||||
transition: transform .34s cubic-bezier(.2, .7, .3, 1);
|
||||
}
|
||||
.vorlagenbrett__karte[data-dreh="ja"][data-gedreht="ja"] { transform: rotateY(180deg); }
|
||||
|
||||
.vorlagenbrett__seite {
|
||||
display: flex; flex-direction: column; gap: 8px;
|
||||
backface-visibility: hidden;
|
||||
-webkit-backface-visibility: hidden;
|
||||
}
|
||||
.vorlagenbrett__seite--vorn { flex: 1; }
|
||||
.vorlagenbrett__seite--hinten {
|
||||
position: absolute; inset: 0;
|
||||
transform: rotateY(180deg);
|
||||
/* DIE POLSTERUNG MUSS HIER NOCH EINMAL STEHEN. `inset: 0` richtet
|
||||
sich am INNENRAND des Rahmens aus -- die 16/18 px der Karte liegen
|
||||
damit INNERHALB dieser Flaeche und nicht davor. Ohne diese Zeile
|
||||
klebte die Ueberschrift am Rahmen; im Bild war die erste Ziffer
|
||||
angeschnitten. Dieselben Werte wie an `.vorlagenbrett__karte`. */
|
||||
padding: 16px 18px;
|
||||
/* Passt die Rueckseite einmal nicht (viele Namen, schmales Geraet),
|
||||
rollt SIE -- die Karte bleibt so hoch wie vorne. Ein Abschneiden
|
||||
waere dieselbe Sackgasse wie im Bearbeiten-Fenster. */
|
||||
overflow: auto;
|
||||
overscroll-behavior: contain;
|
||||
}
|
||||
|
||||
/* BEWEGUNG IST EIN ANGEBOT, KEINE PFLICHT. Wer sie abbestellt hat,
|
||||
bekommt dieselbe Rueckseite -- nur sofort. `transition: none`
|
||||
genuegt dafuer: Der Endzustand ist derselbe. */
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.vorlagenbrett__karte[data-dreh="ja"] { transition: none; }
|
||||
}
|
||||
|
||||
.vorlagenbrett__wer-schild {
|
||||
margin: 0; font-size: .78rem; font-weight: 700;
|
||||
letter-spacing: .04em; text-transform: uppercase;
|
||||
color: var(--text-still);
|
||||
}
|
||||
|
||||
/* Der Weg zurueck ist ruhiger als der Weg vorwaerts: „Nochmal
|
||||
verteilen" ist die Handlung, „Zurueck" nur das Zumachen. */
|
||||
.vorlagenbrett__zurueck {
|
||||
background: none;
|
||||
border-color: rgba(160, 190, 225, .22);
|
||||
color: var(--text-still);
|
||||
}
|
||||
.vorlagenbrett__zurueck:hover { color: var(--text); border-color: var(--akzent); }
|
||||
|
||||
/* Der Umdreh-Knopf steht rechts im Fuss, hinter Frist und Vermerk --
|
||||
er ist die Nebenhandlung, nicht die Hauptsache. */
|
||||
.vorlagenbrett__drehknopf {
|
||||
background: none;
|
||||
border-color: rgba(160, 190, 225, .22);
|
||||
color: var(--text-still);
|
||||
}
|
||||
.vorlagenbrett__drehknopf:hover { color: var(--text); border-color: var(--akzent); }
|
||||
|
||||
.vorlagenbrett__titel {
|
||||
margin: 0; font-size: 1rem; font-weight: 700; line-height: 1.3;
|
||||
color: var(--text);
|
||||
@@ -1045,8 +1133,11 @@
|
||||
===================================================================== */
|
||||
.vorlagenbrett__wer {
|
||||
display: flex; flex-wrap: wrap; gap: 6px;
|
||||
margin: 10px 0 0; padding-top: 9px;
|
||||
border-top: 1px solid var(--rand);
|
||||
/* KEIN TRENNSTRICH MEHR (25.09.2026): Der gehoerte dazu, solange die
|
||||
Reihe UNTER der Karte stand und sich vom Text darueber absetzen
|
||||
musste. Auf der Rueckseite ist sie der Inhalt -- ein Strich ueber
|
||||
dem einzigen Inhalt trennt nichts. */
|
||||
margin: 8px 0 0;
|
||||
}
|
||||
.vorlagenbrett__wer-p {
|
||||
display: inline-flex; align-items: baseline; gap: 6px;
|
||||
|
||||
@@ -714,7 +714,95 @@
|
||||
border-bottom: 1px solid rgba(150, 186, 220, .12);
|
||||
}
|
||||
|
||||
.dialog__knoepfe { display: flex; gap: 10px; align-items: center; margin-top: 16px; flex-wrap: wrap; }
|
||||
/* =====================================================================
|
||||
AUS EINEM FENSTER MUSS MAN HERAUSKOMMEN (25.09.2026)
|
||||
=====================================================================
|
||||
|
||||
Miss, ueber den Support-Weg: „Ich konnte da wieder nicht zurueck
|
||||
gehen, musste die App schliessen damit ich wieder auf die Hauptseite
|
||||
kam." Dazu ein Bild von „Aufgabe bearbeiten" auf dem Handy.
|
||||
|
||||
GEMESSEN (mess-dialog-ausgang.mjs), vier Groessen:
|
||||
|
||||
412 x 915 installierte App 782 px Inhalt in 784 px -- knapp ja
|
||||
412 x 780 Browser mit Leiste 782 px Inhalt in 742 px -- SACKGASSE
|
||||
360 x 640 aelteres Geraet 794 px Inhalt in 602 px -- SACKGASSE
|
||||
412 x 430 Tastatur offen 794 px Inhalt in 392 px -- SACKGASSE
|
||||
|
||||
`.dialog` hatte `overflow: hidden`, und eine Scroll-Hoehe gab es NUR
|
||||
fuer `.dialog--breit .neu`. Bei allen anderen wurde alles unterhalb
|
||||
des Rands schlicht abgeschnitten -- samt der Knopfzeile mit
|
||||
„Abbrechen". Kein Rollbalken, kein Hinweis, kein Weg zurueck. Auf
|
||||
dem Rechner faellt das nie auf: Dort ist der Bildschirm hoch genug.
|
||||
|
||||
---------------------------------------------------------------------
|
||||
WARUM EINE REGEL UND NICHT EIN ZWEITES `--breit`
|
||||
|
||||
Ein zweiter Sonderfall waere beim dritten Fenster wieder faellig, und
|
||||
dann wieder. Deshalb rollt ab jetzt JEDES Fenster, und `--breit`
|
||||
unterscheidet sich nur noch in der Breite -- was sein Name sagt.
|
||||
|
||||
---------------------------------------------------------------------
|
||||
UND WARUM KOPF UND FUSS STEHENBLEIBEN
|
||||
|
||||
Rollen allein haette gereicht, um herauszukommen -- aber man muesste
|
||||
erst durch acht Felder scrollen, um den Ausgang zu SEHEN. Wer nicht
|
||||
weiss, dass unten etwas ist, sucht ihn nicht. `position: sticky`
|
||||
haelt die Ueberschrift oben und die Knoepfe unten, ohne dass ein
|
||||
einziges Zeichen am HTML geaendert werden muss: Damit gilt es auch
|
||||
fuer jedes Fenster, das es noch nicht gibt.
|
||||
|
||||
DER HINTERGRUND IST PFLICHT, nicht Zierde: Ohne ihn liefe der Text
|
||||
der Felder unter den Knoepfen durch und beide waeren unlesbar. Er
|
||||
ist derselbe dunkle Ton wie der Fensterboden, leicht durchscheinend
|
||||
-- gedeckt, nicht als Balken erkennbar.
|
||||
===================================================================== */
|
||||
.dialog > form,
|
||||
.dialog > .neu {
|
||||
/* 82vh und nicht 100: Darueber und darunter bleibt der abgedunkelte
|
||||
Hintergrund sichtbar. Ein Fenster, das den Bildschirm randlos
|
||||
fuellt, sieht aus wie eine neue Seite -- und dann sucht man den
|
||||
Zurueck-Knopf des Browsers statt den Ausgang im Fenster. */
|
||||
max-height: min(82vh, 900px);
|
||||
overflow-y: auto;
|
||||
/* Wer im Fenster am Ende angekommen ist, soll nicht versehentlich die
|
||||
Seite DAHINTER weiterschieben. */
|
||||
overscroll-behavior: contain;
|
||||
}
|
||||
|
||||
.dialog > form > .dialog__titel,
|
||||
.dialog > .neu > .dialog__titel {
|
||||
position: sticky; top: 0; z-index: 3;
|
||||
margin: 0; padding: 14px 0 12px;
|
||||
/* EIN AUSLAUFENDER RAND STATT EINER KANTE. Ein flaechiger Kasten
|
||||
sah aus wie ein zweites Fenster ueber dem ersten -- im Bild klar
|
||||
zu sehen. Der Verlauf endet durchsichtig, damit der Text darunter
|
||||
hineinlaeuft, statt an einer Linie abzubrechen. Der Ton ist der
|
||||
obere des Fensters selbst (#141c29), nicht ein dunklerer. */
|
||||
background: linear-gradient(180deg,
|
||||
rgba(20, 28, 41, .98) 0%,
|
||||
rgba(20, 28, 41, .96) 62%,
|
||||
rgba(20, 28, 41, 0) 100%);
|
||||
backdrop-filter: blur(7px);
|
||||
}
|
||||
|
||||
.dialog__knoepfe {
|
||||
display: flex; gap: 10px; align-items: center; margin-top: 16px; flex-wrap: wrap;
|
||||
position: sticky; bottom: 0; z-index: 3;
|
||||
padding: 16px 0 14px;
|
||||
/* Spiegelbildlich zum Kopf: oben durchsichtig, unten deckend. Der
|
||||
Ton ist der untere des Fensterverlaufs (#070a11). */
|
||||
background: linear-gradient(180deg,
|
||||
rgba(7, 10, 17, 0) 0%,
|
||||
rgba(7, 10, 17, .92) 32%,
|
||||
rgba(7, 10, 17, .98) 100%);
|
||||
backdrop-filter: blur(7px);
|
||||
}
|
||||
|
||||
/* Wo kein Fenster ist, gilt nichts davon -- die Knopfzeile wird auch
|
||||
ausserhalb von Dialogen benutzt und soll dort nicht kleben. */
|
||||
:not(.dialog) > form > .dialog__knoepfe,
|
||||
body > .dialog__knoepfe { position: static; background: none; backdrop-filter: none; }
|
||||
|
||||
/* ---------- Der Dialog --------------------------------------------------- */
|
||||
|
||||
@@ -733,7 +821,9 @@
|
||||
/* Ein Fenster, das laenger ist als der Bildschirm, versteckt seine
|
||||
eigenen Knoepfe. Gerollt wird INNEN, damit "Uebernehmen" immer
|
||||
erreichbar bleibt. */
|
||||
.dialog--breit .neu { max-height: min(86vh, 900px); overflow-y: auto; }
|
||||
/* `--breit` sagt jetzt nur noch, was sein Name sagt: breiter. Die
|
||||
Scroll-Hoehe stand hier als EINZIGE im ganzen Haus und war damit der
|
||||
Grund, warum die anderen Fenster keine hatten (25.09.2026). */
|
||||
|
||||
/* ---- Die zwei Zeilen, die confirm() nicht kann ---------------------
|
||||
`nachfrage.js` baut den Dialog; diese beiden Teile gibt es nur dort.
|
||||
|
||||
@@ -95,13 +95,39 @@
|
||||
/* Das Zahlenband: je Stand eine Zahl gross, das Wort klein darunter.
|
||||
Dieselbe Bauart wie in den Personenkacheln -- man vergleicht mit dem
|
||||
Auge, statt eine Zeile zu lesen. */
|
||||
.s-bilanz { display: flex; gap: 18px; }
|
||||
.s-bilanz__feld { display: flex; flex-direction: column; gap: 1px; }
|
||||
.s-bilanz__zahl {
|
||||
font-size: 1.3rem; font-weight: 700; line-height: 1.1; color: var(--text);
|
||||
/* Das Zahlenband: je Stand eine Zahl gross, das Wort klein darunter --
|
||||
und seit dem 25.09.2026 jede in einem eigenen kleinen Feld. Drei
|
||||
nackte Zahlen nebeneinander lasen sich als EINE Angabe ("0 1 0");
|
||||
mit Rand und Fase sind es drei Auskuenfte. */
|
||||
.s-bilanz { display: flex; gap: 10px; flex-wrap: wrap; }
|
||||
.s-bilanz__feld {
|
||||
display: flex; flex-direction: column; gap: 1px;
|
||||
min-width: 68px; padding: 8px 13px 7px;
|
||||
border: 1px solid var(--rand);
|
||||
clip-path: polygon(10px 0, 100% 0, 100% 100%, 0 100%, 0 10px);
|
||||
background: linear-gradient(163deg,
|
||||
rgba(255, 255, 255, .035) 0%, rgba(255, 255, 255, .012) 100%);
|
||||
}
|
||||
.s-bilanz__zahl {
|
||||
font-size: 1.42rem; font-weight: 700; line-height: 1.1; color: var(--text);
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
.s-bilanz__wort {
|
||||
font-size: .72rem; color: var(--text-still);
|
||||
letter-spacing: .04em; text-transform: uppercase;
|
||||
}
|
||||
/* EINE NULL IST KEINE WARNUNG. Vorher war die Zahl bei "neu" IMMER
|
||||
rot -- auch die 0, und damit stand dauerhaft ein roter Punkt auf der
|
||||
Seite, an dem nichts war. Eine Warnung, die immer kommt, ist keine
|
||||
Warnung mehr; dieselbe Erkenntnis steht im Projektgedaechtnis vom
|
||||
03.09.2026. `data-leer` setzt support.js. */
|
||||
.s-bilanz__feld[data-stand="neu"]:not([data-leer="ja"]) .s-bilanz__zahl { color: var(--warn); }
|
||||
.s-bilanz__feld[data-stand="neu"]:not([data-leer="ja"]) {
|
||||
border-color: color-mix(in srgb, var(--warn) 38%, var(--rand));
|
||||
background: linear-gradient(163deg,
|
||||
color-mix(in srgb, var(--warn) 9%, transparent) 0%,
|
||||
rgba(255, 255, 255, .012) 100%);
|
||||
}
|
||||
.s-bilanz__wort { font-size: .75rem; color: var(--text-still); }
|
||||
.s-bilanz__feld[data-stand="neu"] .s-bilanz__zahl { color: var(--warn); }
|
||||
|
||||
.s-filter { display: flex; gap: 8px; flex-wrap: wrap; margin: 14px 0 16px; }
|
||||
.s-filter__knopf {
|
||||
@@ -124,16 +150,74 @@
|
||||
|
||||
/* ---------- Eine Meldung ------------------------------------------- */
|
||||
|
||||
/* =====================================================================
|
||||
DIE MELDEKARTE IM HAUS-STIL (25.09.2026)
|
||||
|
||||
Filipe zum Bildschirmfoto des Eingangs: "lass das bitte auch geiler
|
||||
aussehen bitte."
|
||||
|
||||
WAS VORHER DA WAR: ein flacher Kasten mit runden Ecken und einem
|
||||
3 px breiten Strich links. Funktional richtig -- aber die einzige
|
||||
Flaeche im Haus, die weder die Fase noch die Leuchtschiene traegt.
|
||||
Neben einer Kachel oder einem Dialog sah sie aus wie aus einer
|
||||
anderen Anwendung.
|
||||
|
||||
UEBERNOMMEN WIRD, WAS ES SCHON GIBT, nicht etwas Neues erfunden:
|
||||
dieselbe `--fase` wie ueberall, dieselbe Bauart der Leuchtschiene
|
||||
wie an `.dialog` und an jeder Kachel, derselbe dunkle Verlauf. Eine
|
||||
zweite Formensprache waere ein zweites Haus.
|
||||
|
||||
DIE SCHIENE TRAEGT DIE STANDFARBE (`--s`) und nicht den Akzent: An
|
||||
ihr liest man ab, ob etwas neu ist, bevor man ein Wort liest. Sie
|
||||
ist gedeckt beigemischt, nicht als Leuchtbalken -- augenschonend
|
||||
ist Vorgabe, nicht Geschmack.
|
||||
===================================================================== */
|
||||
.s-karte {
|
||||
background: var(--flaeche);
|
||||
border: 1px solid var(--rand);
|
||||
border-radius: var(--radius-klein);
|
||||
padding: 15px 16px 14px;
|
||||
--s: var(--text-still);
|
||||
position: relative;
|
||||
padding: 16px 18px 15px 22px;
|
||||
margin-bottom: 12px;
|
||||
border: 1px solid var(--rand);
|
||||
border-radius: 0;
|
||||
/* Dieselbe Fase wie an Kachel und Dialog. Wer sie spaeter aendert,
|
||||
aendert sie an EINER Stelle -- `--fase` steht im Grundblatt. */
|
||||
clip-path: polygon(var(--fase, 18px) 0, 100% 0, 100% 100%, 0 100%, 0 var(--fase, 18px));
|
||||
background:
|
||||
linear-gradient(90deg,
|
||||
color-mix(in srgb, var(--s) 13%, transparent) 0%,
|
||||
color-mix(in srgb, var(--s) 4%, transparent) 16%,
|
||||
transparent 44%),
|
||||
linear-gradient(163deg, #131b27 0%, #0b1017 62%, #080c13 100%);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, .07),
|
||||
inset 0 -1px 0 rgba(0, 0, 0, .45),
|
||||
0 14px 30px -20px rgba(0, 0, 0, .9);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Die Leuchtschiene -- dieselbe Bauart wie an `.dialog`, nur in der
|
||||
Farbe des Stands. Sie ersetzt den alten flachen Strich links. */
|
||||
.s-karte::before {
|
||||
content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
|
||||
background: linear-gradient(180deg,
|
||||
color-mix(in srgb, var(--s) 52%, #fff) 0%,
|
||||
var(--s) 24%,
|
||||
color-mix(in srgb, var(--s) 42%, transparent) 100%);
|
||||
box-shadow:
|
||||
0 0 8px 0 color-mix(in srgb, var(--s) 45%, transparent),
|
||||
3px 0 18px -4px color-mix(in srgb, var(--s) 34%, transparent);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* Beim Daruebergehen tritt die Karte einen Schritt vor -- ohne
|
||||
Bewegung, ohne Aufblitzen. Nur Rand und Schatten. */
|
||||
.s-karte:hover {
|
||||
border-color: color-mix(in srgb, var(--s) 32%, var(--rand));
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, .09),
|
||||
inset 0 -1px 0 rgba(0, 0, 0, .45),
|
||||
0 18px 38px -20px rgba(0, 0, 0, .95);
|
||||
}
|
||||
/* Ein schmaler Streifen links sagt den Stand, bevor man liest --
|
||||
gedeckt beigemischt, nicht als Leuchtbalken. */
|
||||
.s-karte { --s: var(--text-still); border-left: 3px solid color-mix(in srgb, var(--s) 55%, transparent); }
|
||||
.s-karte[data-stand="neu"] { --s: var(--warn); }
|
||||
.s-karte[data-stand="in_arbeit"] { --s: var(--akzent); }
|
||||
/* --k-gut ist die Hausfarbe fuer "passt, erledigt, freigegeben"
|
||||
@@ -175,8 +259,69 @@
|
||||
.s-karte__bild img {
|
||||
display: block; max-width: 100%; max-height: 300px;
|
||||
width: auto; height: auto;
|
||||
border-radius: var(--radius-klein);
|
||||
border: 1px solid var(--rand);
|
||||
border-radius: 0;
|
||||
/* Kleine Fase, damit das Bild zur Karte gehoert und nicht wie ein
|
||||
aufgeklebtes Rechteck darauf liegt. */
|
||||
clip-path: polygon(10px 0, 100% 0, 100% 100%, 0 100%, 0 10px);
|
||||
box-shadow: 0 10px 24px -16px rgba(0, 0, 0, .95);
|
||||
transition: border-color var(--tempo, .18s);
|
||||
}
|
||||
/* Dass man es anklicken kann, sagt bisher nur der Mauszeiger-Text.
|
||||
Ein heller werdender Rand sagt es beim Daruebergehen -- ohne
|
||||
Bewegung, ohne Vergroessern: `prefers-reduced-motion` braucht hier
|
||||
nichts abzuschalten, weil sich nichts bewegt. */
|
||||
.s-karte__bild a:hover img,
|
||||
.s-karte__bild a:focus-visible img {
|
||||
border-color: color-mix(in srgb, var(--akzent) 55%, var(--rand));
|
||||
}
|
||||
.s-karte__bild a:focus-visible { outline: 2px solid var(--akzent); outline-offset: 3px; }
|
||||
|
||||
/* =====================================================================
|
||||
DAS BILD NEBEN DEN TEXT, NICHT DARUNTER (25.09.2026)
|
||||
|
||||
Im Bildschirmfoto stand ein hochkantes Handybild unter zwei Zeilen
|
||||
Text -- und rechts daneben eine handbreite leere Flaeche ueber die
|
||||
ganze Kartenhoehe. Eine Meldung mit Bild war damit dreimal so hoch
|
||||
wie noetig, und im Eingang sah man weniger davon auf einmal.
|
||||
|
||||
ERST AB 760 px, und das ist der Punkt: Auf dem Handy gibt es keine
|
||||
zweite Spalte, dort bleibt alles untereinander. Gefragt wird nach
|
||||
dem PLATZ, nicht nach dem Geraet.
|
||||
|
||||
`auto` UND NICHT EINE FESTE BREITE fuer die Bildspalte: Gibt es kein
|
||||
Bild, greift die ganze Regel gar nicht erst (`:has`). Eine feste
|
||||
Breite waere eine Luecke bei jeder Meldung ohne Bild -- und die sind
|
||||
die Mehrzahl.
|
||||
===================================================================== */
|
||||
@media (min-width: 760px) {
|
||||
.s-karte:has(.s-karte__bild) {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr) auto;
|
||||
grid-template-areas:
|
||||
"kopf kopf"
|
||||
"text bild"
|
||||
"wo bild"
|
||||
"antwort bild"
|
||||
"tun bild";
|
||||
column-gap: 20px;
|
||||
align-items: start;
|
||||
}
|
||||
.s-karte:has(.s-karte__bild) > .s-karte__kopf { grid-area: kopf; }
|
||||
.s-karte:has(.s-karte__bild) > .s-karte__text { grid-area: text; }
|
||||
.s-karte:has(.s-karte__bild) > .s-karte__wo { grid-area: wo; }
|
||||
.s-karte:has(.s-karte__bild) > .s-antwort { grid-area: antwort; }
|
||||
.s-karte:has(.s-karte__bild) > .s-karte__tun { grid-area: tun; }
|
||||
.s-karte:has(.s-karte__bild) > .s-karte__bild {
|
||||
grid-area: bild; margin-top: 0; align-self: start;
|
||||
}
|
||||
/* 180 UND NICHT 260 (gemessen 25.09.2026). Bei 260 war die Karte
|
||||
330 px hoch, obwohl der Text zwei Zeilen hat -- die Bildspalte gab
|
||||
die Hoehe vor, und links stand eine leere Flaeche. Das Bild ist
|
||||
anklickbar ("In voller Groesse ansehen"), eine Vorschau reicht
|
||||
also. Ein Handy-Bildschirmfoto ist bei 180 px noch als solches zu
|
||||
erkennen; darum geht es an dieser Stelle. */
|
||||
.s-karte:has(.s-karte__bild) > .s-karte__bild img { max-height: 180px; }
|
||||
}
|
||||
.s-karte__bild a:focus-visible img { outline: 2px solid var(--akzent); outline-offset: 2px; }
|
||||
|
||||
|
||||
@@ -1755,8 +1755,10 @@
|
||||
/* ERST DIE AUFGABEN, DANN DER KATALOG. Er markiert daran, was
|
||||
schon uebernommen wurde -- in umgekehrter Reihenfolge waere die
|
||||
Markierung beim ersten Zeichnen leer. */
|
||||
vorlagenbrettAnschliessen();
|
||||
await window.Vorlagenbrett?.zeigen();
|
||||
/* NUR ZEICHNEN, WENN AUCH EINGERICHTET WURDE. `zeigen()` ohne
|
||||
`einrichten()` liest aus einer Schnittstelle, die es nicht gibt
|
||||
-- ein Fehler in der Konsole und ein halb gezeichneter Kasten. */
|
||||
if (vorlagenbrettAnschliessen()) await window.Vorlagenbrett?.zeigen();
|
||||
})();
|
||||
|
||||
/* =====================================================================
|
||||
@@ -1779,7 +1781,41 @@
|
||||
ZWEIG 'creator': Der Team-Katalog wird hier NICHT gezeigt, auch
|
||||
wenn der Server ihn mitschickt. Er hat seine Seite. */
|
||||
function vorlagenbrettAnschliessen() {
|
||||
if (!window.Vorlagenbrett) return;
|
||||
if (!window.Vorlagenbrett) return false;
|
||||
|
||||
/* ==== OHNE CREATOR KEIN CREATOR-KATALOG (25.09.2026) ============
|
||||
|
||||
Filipe, zu einem Bildschirmfoto dieser Seite: „es gibt keine
|
||||
creator auf dieser seite. die app ist nur fuer modis und
|
||||
community also steht das falsch da."
|
||||
|
||||
Er hatte den Satz „Waehle oben einen Creator, dann lassen sich
|
||||
diese Aufgaben uebernehmen" vor sich -- unter einem Katalog mit
|
||||
vier Bereichen und vier Stufen, der fuer Creator gemacht ist.
|
||||
Auf der Team-Adresse gibt es keine. Der Satz war also nicht nur
|
||||
falsch, sondern eine Aufforderung zu etwas Unmoeglichem: Man
|
||||
sucht oben nach einer Auswahl, die dort nie erscheinen wird.
|
||||
|
||||
GEFRAGT WIRD NACH DEN DATEN, NICHT NACH DER ADRESSE. „Gibt es
|
||||
jemanden, dem ich das geben kann?" ist dieselbe Frage, egal auf
|
||||
welcher Seite man steht -- und sie beantwortet sich aus der
|
||||
Personenliste, die die Seite ohnehin schon geholt hat. Eine
|
||||
Abfrage auf das Haus waere eine zweite Regel neben der
|
||||
Personenliste, und die beiden koennten auseinanderlaufen.
|
||||
|
||||
Ein Creator selbst behaelt den Katalog immer: Er nimmt Aufgaben
|
||||
fuer sich, dafuer braucht er niemanden zum Auswaehlen. */
|
||||
const gibtCreator = ich?.rolle === 'creator'
|
||||
|| (personenListe || []).some((p) => p.rolle === 'creator');
|
||||
if (!gibtCreator) {
|
||||
/* Der ganze Kasten geht weg, nicht nur der Satz. Eine
|
||||
Ueberschrift ueber einem Katalog, den niemand uebernehmen
|
||||
kann, ist dieselbe Sackgasse in leiser. */
|
||||
const kasten = document.getElementById('vorlagenbrett');
|
||||
if (kasten) kasten.hidden = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
window.Vorlagenbrett.einrichten({
|
||||
zweig: 'creator',
|
||||
hole,
|
||||
@@ -1811,6 +1847,7 @@
|
||||
zielWaehlen: () => {},
|
||||
nachAenderung: () => laden(),
|
||||
});
|
||||
return true;
|
||||
}
|
||||
})();
|
||||
|
||||
|
||||
@@ -325,7 +325,13 @@
|
||||
]) {
|
||||
const kasten = el('div', 's-bilanz__feld');
|
||||
kasten.dataset.stand = stand;
|
||||
kasten.append(el('span', 's-bilanz__zahl', String(zahl(stand))));
|
||||
/* OB DAS FELD LEER IST, steht als Merkmal daran -- das Stilblatt
|
||||
faerbt die "neu"-Null damit nicht mehr rot. Gerechnet wird es
|
||||
hier und nicht im CSS: Dort gibt es keine Zahlen, nur Text,
|
||||
und ":empty" traefe eine "0" nicht. */
|
||||
const n = zahl(stand);
|
||||
if (!n) kasten.dataset.leer = 'ja';
|
||||
kasten.append(el('span', 's-bilanz__zahl', String(n)));
|
||||
kasten.append(el('span', 's-bilanz__wort', wort));
|
||||
ziel.append(kasten);
|
||||
}
|
||||
|
||||
@@ -29,6 +29,19 @@
|
||||
===================================================================== */
|
||||
(() => {
|
||||
const $ = (id) => document.getElementById(id);
|
||||
|
||||
/* DER SATZ ZU EINER SERVER-KENNUNG -- mit Rueckfall (25.09.2026).
|
||||
|
||||
Ueber `window` und nicht als blanker Aufruf: Wuerde diese Datei
|
||||
einmal ohne meldung.js geladen, waere `sagWas(...)` ein
|
||||
ReferenceError -- und der traete ausgerechnet dann auf, wenn
|
||||
ohnehin schon etwas schiefgegangen ist. Eine Fehlerbehandlung,
|
||||
die selbst abstuerzt, verschluckt den eigentlichen Fehler.
|
||||
Dieselbe Bauart steht in vorlagenbrett.js und ist dort aus
|
||||
demselben Grund entstanden. */
|
||||
const sagWas = (fehler, ersatz) => (typeof window.sagWas === 'function'
|
||||
? window.sagWas(fehler, ersatz)
|
||||
: (ersatz || 'Das hat nicht geklappt.'));
|
||||
const el = (t, k, text) => {
|
||||
const n = document.createElement(t);
|
||||
if (k) n.className = k;
|
||||
@@ -301,7 +314,13 @@
|
||||
});
|
||||
if (!a.ok) {
|
||||
const r = await a.json().catch(() => ({}));
|
||||
melde(r.fehler || 'Das ließ sich nicht speichern.');
|
||||
/* SATZ STATT MASCHINENWORT (25.09.2026). Hier stand
|
||||
`r.fehler || …` -- also wurde die Kennung des Servers
|
||||
ungefiltert angezeigt. Wer "nicht_gefunden" liest, weiss
|
||||
weder, was los ist, noch was er tun soll. `sagWas` macht
|
||||
daraus den Satz aus meldung.js und faellt auf den Text
|
||||
dahinter zurueck, wenn es die Kennung dort nicht gibt. */
|
||||
melde(sagWas(r.fehler, 'Das ließ sich nicht speichern.'));
|
||||
return;
|
||||
}
|
||||
melde('Gespeichert.', true);
|
||||
@@ -339,7 +358,7 @@
|
||||
});
|
||||
if (!a.ok) {
|
||||
const r = await a.json().catch(() => ({}));
|
||||
melde(r.fehler || 'Das ließ sich nicht anlegen.');
|
||||
melde(sagWas(r.fehler, 'Das ließ sich nicht anlegen.'));
|
||||
return;
|
||||
}
|
||||
await laden();
|
||||
|
||||
@@ -61,6 +61,23 @@
|
||||
? window.sagWas(fehler, ersatz)
|
||||
: (ersatz || 'Das hat nicht geklappt.'));
|
||||
|
||||
/* ==== WELCHE KARTE SICH NACH DEM VERTEILEN ZEIGEN SOLL ==========
|
||||
|
||||
Filipe: „wenn ich drauf drücke dreht sich die kachel und dan seh
|
||||
ich wer es gemacht hat, und immer noch die option es nochmal zu
|
||||
verteilen falls neue leute ins team zustoßen."
|
||||
|
||||
WARUM EIN MERKZETTEL UND KEIN DIREKTES UMSCHALTEN: Nach dem
|
||||
Verteilen wird das ganze Brett NEU gezeichnet (die Zahlen an den
|
||||
Namen stimmen sonst nicht mehr). Eine Karte, die man vorher
|
||||
umdreht, ist danach weg -- samt ihrer Drehung. Der Schluessel
|
||||
ueberlebt das Neuzeichnen; die Karte findet sich selbst wieder.
|
||||
|
||||
EINER UND NICHT EINE LISTE: Man verteilt eine Karte und sieht sie
|
||||
an. Zwei gleichzeitig gedrehte Karten waeren ein Zustand, den
|
||||
niemand hergestellt hat. */
|
||||
let zuletztVerteilt = null;
|
||||
|
||||
/* DIE PFLICHTANGABEN als Liste und nicht als Reihe von if-Abfragen:
|
||||
Eine Liste laesst sich nicht halb vergessen. */
|
||||
const NOETIG = ['zweig', 'hole', 'melde', 'ich', 'aufgaben', 'ziel',
|
||||
@@ -959,10 +976,16 @@
|
||||
ist -- nicht, dass er die Sperre vergessen soll. Bei "alle"
|
||||
fuellt er sonst nur die Luecken; steht hier "Nochmal", haben
|
||||
wirklich alle sie, und dann ist der Druck eine Entscheidung. */
|
||||
k.addEventListener('click', () => uebernehmen(k, {
|
||||
art: 'katalog', nr: v.nr, gruppe: kGruppe,
|
||||
person_id: katalogZiel(), nochmal: wirklichNochmal,
|
||||
}));
|
||||
k.addEventListener('click', () => {
|
||||
/* VOR dem Verteilen merken, nicht danach: `uebernehmen`
|
||||
zeichnet am Ende neu, und dann gibt es diese Karte als
|
||||
Objekt nicht mehr. */
|
||||
if (anAlle) zuletztVerteilt = v.schluessel;
|
||||
uebernehmen(k, {
|
||||
art: 'katalog', nr: v.nr, gruppe: kGruppe,
|
||||
person_id: katalogZiel(), nochmal: wirklichNochmal,
|
||||
});
|
||||
});
|
||||
fuss.append(k);
|
||||
} else if (meine) {
|
||||
/* SCHON BEWORBEN. Der Satz sagt, WER antwortet -- sonst wartet
|
||||
@@ -1025,7 +1048,93 @@
|
||||
: ((U.statusName[a2.status] || a2.status) + (spaet ? ' · überfällig' : ''))));
|
||||
reihe.append(marke);
|
||||
}
|
||||
karte.append(reihe);
|
||||
|
||||
/* ==== DIE KARTE BEKOMMT ZWEI SEITEN (25.09.2026) =============
|
||||
|
||||
Bis heute stand die Namensreihe UNTER der Karte -- immer
|
||||
sichtbar, bei zwoelf Karten also zwoelfmal. Das war Filipes
|
||||
erste Entscheidung und richtig, solange es nur um "wie
|
||||
weit" ging. Jetzt will er das Einzelne auf Druck sehen:
|
||||
„wenn ich drauf drücke dreht sich die kachel".
|
||||
|
||||
VORNE BLEIBT DIE KURZFASSUNG. „liegt bei 3 von 4" steht
|
||||
weiterhin im Fuss -- man soll den Stand ueberfliegen
|
||||
koennen, ohne zwoelf Karten umzudrehen. Die Namen sind die
|
||||
Vertiefung, nicht die Grundauskunft.
|
||||
|
||||
UMGEBAUT STATT NEU GEBAUT: Alles, was schon an der Karte
|
||||
haengt, wandert geschlossen auf die Vorderseite. So kann
|
||||
die Rueckseite nichts vergessen, was vorne steht -- und ein
|
||||
kuenftiger Zusatz landet von selbst richtig. */
|
||||
const vorn = el('div', 'vorlagenbrett__seite vorlagenbrett__seite--vorn');
|
||||
while (karte.firstChild) vorn.append(karte.firstChild);
|
||||
|
||||
const hinten = el('div', 'vorlagenbrett__seite vorlagenbrett__seite--hinten');
|
||||
hinten.append(el('p', 'vorlagenbrett__wer-schild', alleHabenSie
|
||||
? `Alle ${zielbar.length} haben sie`
|
||||
: `${werHat.size} von ${zielbar.length} haben sie`));
|
||||
hinten.append(reihe);
|
||||
|
||||
const fussH = el('div', 'vorlagenbrett__fuss');
|
||||
/* ==== „NOCHMAL VERTEILEN" GEHOERT AUF DIE RUECKSEITE =========
|
||||
|
||||
Filipe ausdruecklich: „und immer noch die option es nochmal
|
||||
zu verteilen falls neue leute ins team zustoßen."
|
||||
|
||||
DER KNOPF SAGT, WAS ER TUT, und das ist bei den zwei Faellen
|
||||
NICHT dasselbe: Fehlt noch jemand, holt er die Fehlenden
|
||||
nach und laesst die anderen in Ruhe. Haben alle sie, ist der
|
||||
naechste Druck eine bewusste Wiederholung -- dann heisst er
|
||||
so und sagt es dem Server auch (`nochmal`). */
|
||||
/* DIE ZAHL IN KLAMMERN UND NICHT IM SATZ (25.09.2026).
|
||||
Der erste Entwurf setzte sie hinein: „Die 1 Fehlenden
|
||||
nachholen" -- bei genau einer Person falsches Deutsch, und
|
||||
„Die 1 Fehlende" waere je nach Mensch das falsche
|
||||
Geschlecht. So stimmt der Satz bei jeder Zahl, ohne
|
||||
Sonderfall und ohne zu raten. */
|
||||
const fehlt = zielbar.length - werHat.size;
|
||||
const nachholen = el('button', 'knopf knopf--klein', alleHabenSie
|
||||
? 'Nochmal an alle'
|
||||
: `Nachholen – ${fehlt === 1 ? '1 fehlt' : fehlt + ' fehlen'}`);
|
||||
nachholen.type = 'button';
|
||||
nachholen.title = alleHabenSie
|
||||
? 'Alle bekommen sie noch einmal – auch die, die sie schon haben.'
|
||||
: 'Nur die, die sie noch nicht haben. Niemand bekommt sie doppelt.';
|
||||
nachholen.addEventListener('click', () => {
|
||||
zuletztVerteilt = v.schluessel;
|
||||
uebernehmen(nachholen, {
|
||||
art: 'katalog', nr: v.nr, gruppe: kGruppe,
|
||||
person_id: katalogZiel(), nochmal: alleHabenSie,
|
||||
});
|
||||
});
|
||||
fussH.append(nachholen);
|
||||
|
||||
const zurueck = el('button', 'knopf knopf--klein vorlagenbrett__zurueck', 'Zurück');
|
||||
zurueck.type = 'button';
|
||||
zurueck.addEventListener('click', () => { karte.dataset.gedreht = 'nein'; });
|
||||
fussH.append(zurueck);
|
||||
hinten.append(fussH);
|
||||
|
||||
karte.append(vorn);
|
||||
karte.append(hinten);
|
||||
karte.dataset.dreh = 'ja';
|
||||
/* WER SIE SCHON HAT, KANN MAN AUCH OHNE VERTEILEN NACHSEHEN --
|
||||
sonst waere die Rueckseite nur als Nebenwirkung einer
|
||||
Handlung erreichbar, und wer nur nachsehen will, muesste
|
||||
erst etwas verteilen. */
|
||||
const umdrehen = el('button', 'knopf knopf--klein vorlagenbrett__drehknopf',
|
||||
'Wer hat sie?');
|
||||
umdrehen.type = 'button';
|
||||
umdrehen.addEventListener('click', () => { karte.dataset.gedreht = 'ja'; });
|
||||
vorn.querySelector('.vorlagenbrett__fuss')?.append(umdrehen);
|
||||
|
||||
/* Und wenn gerade DIESE Karte verteilt wurde: gedreht zeigen. */
|
||||
if (zuletztVerteilt === v.schluessel) {
|
||||
karte.dataset.gedreht = 'ja';
|
||||
zuletztVerteilt = null;
|
||||
} else {
|
||||
karte.dataset.gedreht = 'nein';
|
||||
}
|
||||
}
|
||||
|
||||
/* ==== DIE BEWERBUNGEN ANDERER -- nur für die, die entscheiden ==
|
||||
|
||||
+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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</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=202609250002"></script>
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/textform.js?v=202609250049"></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/zuteilung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/zuteilung.js?v=202609250049" 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=202609250002" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/vorlagenbrett.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -168,15 +168,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -197,16 +197,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</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=202609250002"></script>
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/textform.js?v=202609250049"></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</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=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -80,16 +80,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -89,15 +89,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609250049" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+19
-19
@@ -12,26 +12,26 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -619,25 +619,25 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609250002"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049"></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=202609250002"></script>
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002"></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002"></script>
|
||||
<script src="assets/js/textform.js?v=202609250049"></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049"></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049"></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=202609250002"></script>
|
||||
<script src="assets/js/chat.js?v=202609250002"></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/anruf.js?v=202609250049"></script>
|
||||
<script src="assets/js/chat.js?v=202609250049"></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -179,15 +179,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/content.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/content.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="gate gate--crew">
|
||||
@@ -459,7 +459,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,25 +23,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609250002",
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609250049",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609250002",
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609250049",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609250002",
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609250049",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609250002",
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609250049",
|
||||
"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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -108,15 +108,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -297,20 +297,20 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250049" 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=202609250002" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/vorlagenbrett.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -146,14 +146,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="gate">
|
||||
@@ -427,7 +427,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -383,15 +383,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -444,13 +444,13 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002"></script>
|
||||
<script src="assets/js/wahl.js?v=202609250002"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002"></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002"></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002"></script>
|
||||
<script src="assets/js/leistung.js?v=202609250002"></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049"></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049"></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049"></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049"></script>
|
||||
<script src="assets/js/leistung.js?v=202609250049"></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/material.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/material.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</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=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/material.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/material.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -453,14 +453,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -214,16 +214,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</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=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,17 +106,17 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/ki.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/report.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/report.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -173,14 +173,14 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/heim.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -700,16 +700,16 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/live.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/start.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/live.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/start.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -85,16 +85,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/ki.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -150,16 +150,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/support.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/support.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -123,16 +123,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=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" 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=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/support.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/support.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -111,15 +111,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -110,15 +110,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/team.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/team.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</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=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -112,15 +112,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -126,14 +126,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</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=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -149,16 +149,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -335,14 +335,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/live.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/live.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,13 +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=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/unterstuetzen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609250049" 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=202609250049" defer></script>
|
||||
<script src="assets/js/unterstuetzen.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -144,14 +144,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/willkommen.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/willkommen.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</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=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/willkommen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/willkommen.js?v=202609250049" 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=202609250002" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250002" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609250049" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609250049" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609250049" />
|
||||
<!-- 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=202609250002" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609250049" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -190,15 +190,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609250049" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609250002" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609250049" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609250049" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user