Nichts wird mehr nach links oder rechts geschoben
Filipe, 28.09.2026: "ich will auch nicht dass man sachen nach links
und rechts schieben muss. perfektion das untereinander. ich will
niemals irgendwas nach links oder rechts swippen muessen." Dazu ein
Bildschirmfoto der Tafel "Gestaltung" mit waagerechter Rollleiste.
GEMESSEN, NICHT GERATEN
Ein grep nach `overflow-x` findet nur die absichtlichen Roller. Er
findet nicht die Stelle, an der ein Inhalt breiter ist als sein
Kasten und der Browser von sich aus eine Rollleiste anhaengt -- und
genau das war auf dem Bild zu sehen. `server/mess-quer.mjs` geht
deshalb im echten Browser jedes Element durch, auf fuenf
Bildschirmgroessen, in allen sieben Registern, bei offener und
zugeklappter Regie und in allen fuenf Anordnungen.
Erster Lauf: 78 Stellen. Davon waren 54 KEINE -- `overflow-x: hidden`
ist abgeschnittener Text, dort laesst sich nichts schieben. Die
Messung trennt das jetzt; wer es mitzaehlt, findet die echten nicht
mehr. Uebrig blieben vier Ursachen:
1. DIE REGISTER rollten absichtlich waagerecht. Auf 412 px standen
von 605 px Registern 193 rechts ausserhalb -- dass es
"Gestaltung" und "Spenden" gibt, erfuhr man nur beim Wischen auf
Verdacht. Sie brechen jetzt um. Das kostet oben rund 45 Pixel
und bringt Gewissheit dafuer.
2. `.stufen` STAND ZWEIMAL IN reaktion.css -- einmal fuer die
Stufenleiter der Spenden (`display: grid`), 600 Zeilen spaeter
fuer die Chat-Leiste Offen/Team/Zu (`display: flex`). Die
spaetere gewinnt: Die Stufenleiter stellte ihre drei Stufen
NEBENEINANDER, 572 Pixel in einer 327 Pixel schmalen Spalte.
Das ist die Rollleiste auf Filipes Bild. Die Chat-Leiste heisst
jetzt `.chatstufen` / `.chatstufe`.
Dritter Fall dieser Art nach `.tafel` und `.stufe-knopf`.
3. DIE TAFELN KONNTEN NICHT SCHRUMPFEN. Ein Gitterfeld hat von
sich aus `min-width: auto` und besteht auf seinem unteilbarsten
Inhalt. Mit `minmax(0, 1fr)` und `min-width: 0` bricht jetzt
alles um, statt hinauszulaufen.
4. DIE TRANSPORTLEISTE ragte am Handy 76 Pixel ueber beide Kanten
("Naechstes" war nur halb zu sehen). Zwei Gruende: `.transport__teil`
hatte kein `flex-wrap` (die mittlere Gruppe schon -- zwei Regeln
fuer dieselbe Sache, eine vergessen), und im Umschalter steht
ein ganzer Videotitel, der als Flex-Kind auf seiner vollen
Breite bestand.
NEBENBEFUND: EINE FESTE ZAHL VON GESTERN
Der Saal stand auf `height: calc(100dvh - 69px)` -- 69 war einmal
die gemessene Hoehe der Kopfleiste. Sie ist 73 geworden, und der
Saal endete damit 4 Pixel unter dem Fensterrand: Der Play-Knopf war
nur mit Scrollen zu erreichen. Die Antwort ist keine neue Zahl,
sondern eine Regel, die misst -- der Koerper ist jetzt eine Spalte,
die Kopfleiste nimmt, was sie braucht, der Saal bekommt den Rest.
(Dabei noch ein Spezifitaetsunfall: `.reaktion-seite` (0,1,0)
verliert gegen `body.start` (0,1,1) aus start.css.)
NEUE WACHEN
- `mess-quer.mjs` mit Gegenprobe (ohne die Reparaturen findet sie
47 px, mit ihnen nichts).
- pruef-reaktion: kein absichtliches `overflow-x: auto` mehr; und
zwei Grundregeln derselben Klasse mit verschiedenem `display`
sind ein Namensstreit. Der bisherige Waechter verglich nur
ZWISCHEN Stilvorlagen -- `.stufen` stand zweimal in DERSELBEN.
- pruef-css-klassen: jede Klammer hat ihr Gegenstueck. Beim
Umschreiben blieb heute das Ende einer Regel ohne ihren Anfang
stehen; der Browser wirft die Zeile weg und schliesst dafuer den
naechsten @media-Block zu frueh. Drei Befunde sahen daraufhin wie
Programmfehler aus.
MESSUNG NACHGEZOGEN
`mess-reaktion` stammte noch aus der Zeit vor "Regie links" und
"drei Kacheln" und meldete drei Dinge, die keine Fehler waren --
gemessen gegen den Stand von HEAD: identisch rot. Sie misst ausserdem
seit heute mit FINGER statt Mauszeiger; ohne `hasTouch` greift keine
einzige Regel aus `@media (pointer: coarse)`, und dort stehen alle
44-Pixel-Beruehrziele des Hauses.
OFFEN UND AUFGESCHRIEBEN
Am Handy bleibt bei offener Regie vom Bild nichts (0 px). Der Mangel
besteht seit dem Umbau "Regie links"; drei Versuche, ihn heute zu
loesen, haben Knoepfe verdeckt -- und ein verdeckter Knopf ist
schlimmer als ein kleines Bild. Die Versuche und der richtige Weg
(Tempo-Gruppe hinter einen Knopf, wie "Aa" im Chat) stehen in
reaktion.css. `mess-reaktion` meldet ihn als dritten Ausgang: nicht
als Fehler und nicht als bestanden.
GEPRUEFT
pruef-reaktion 384 / 0 (vorher 379)
pruef-spenden 172 / 0
pruef-buehne 36 / 0
pruef-css-klassen, -tippziele, -struktur, -handy: ohne Befund
mess-quer EXIT 0 -- 28 Stellen, fuenf Groessen, nichts rollt
mess-reaktion EXIT 0, 1 benannter offener Punkt
mess-buehne EXIT 0
This commit is contained in:
@@ -0,0 +1,572 @@
|
||||
/* =====================================================================
|
||||
WAS MUSS MAN SEITLICH SCHIEBEN? (28.09.2026)
|
||||
|
||||
Die Pruefung nebenan misst, was die Schnittstelle antwortet. Das
|
||||
sagt nichts darueber, ob ein Mensch damit einen Abend verbringen
|
||||
moechte. Dieses Werkzeug oeffnet die Seite in einem echten Browser,
|
||||
schaltet sie durch alle drei Zustaende und legt Bilder ab.
|
||||
|
||||
Gemessen wird dabei auch, was man sonst uebersieht:
|
||||
- laeuft etwas in die Konsole?
|
||||
- ragt etwas seitlich hinaus?
|
||||
- ist der Saal so hoch wie das Fenster, oder muss man scrollen?
|
||||
|
||||
NIE DIE ECHTE DATENBANK. Eigener Ordner, eigener Port, eigenes
|
||||
Zertifikat -- und am Ende ist alles weg.
|
||||
|
||||
Aufrufen mit: node server/mess-reaktion.mjs
|
||||
===================================================================== */
|
||||
import { mkdtempSync, rmSync, readFileSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join, dirname } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { request } from "node:http";
|
||||
import { execFileSync } from "node:child_process";
|
||||
import { createServer as httpsServer } from "node:https";
|
||||
|
||||
const HIER = dirname(fileURLToPath(import.meta.url));
|
||||
const ordner = mkdtempSync(join(tmpdir(), "mess-reakt-"));
|
||||
process.env.WORKSPACE_DB = join(ordner, "workspace.db");
|
||||
|
||||
const PORT = 5491;
|
||||
const HTTPS_PORT = PORT + 1;
|
||||
process.env.PORT = `${PORT}`;
|
||||
process.env.SITE_ACCESS_SECRET = "lokaler-test";
|
||||
process.env.SITE_PUBLIC_LAUNCH_AT = "2020-01-01T00:00:00+01:00";
|
||||
|
||||
for (const art of ["uncaughtException", "unhandledRejection"]) {
|
||||
process.on(art, (f) => {
|
||||
console.error(`\nABBRUCH (${art}): ${f?.stack || f}`);
|
||||
process.exit(8);
|
||||
});
|
||||
}
|
||||
|
||||
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 }); };
|
||||
await import("./index.js");
|
||||
await new Promise((r) => setTimeout(r, 1000));
|
||||
|
||||
const CREW = "crew.dogfather-universe.com";
|
||||
|
||||
/* ---------- Leute ------------------------------------------------------- */
|
||||
const { DatabaseSync } = await import("node:sqlite");
|
||||
const { scryptSync, randomBytes, createHmac } = await import("node:crypto");
|
||||
const d = new DatabaseSync(process.env.WORKSPACE_DB);
|
||||
const kenn = randomBytes(32).toString("hex");
|
||||
d.prepare("INSERT INTO einstellungen (schluessel, wert, geaendert, von)"
|
||||
+ " VALUES (?,?,?,NULL) ON CONFLICT(schluessel) DO NOTHING")
|
||||
.run("code_kennung_schluessel", kenn, new Date().toISOString());
|
||||
const ALT = new Date(Date.now() - 200 * 86400000).toISOString();
|
||||
function anlegen(name, rolle, code) {
|
||||
const salt = randomBytes(16).toString("hex");
|
||||
const hash = scryptSync(code, salt, 64,
|
||||
{ N: 32768, r: 8, p: 1, maxmem: 96 * 1024 * 1024 }).toString("hex");
|
||||
d.prepare("INSERT INTO personen (name, rolle, code_hash, code_salt, code_n,"
|
||||
+ " code_kennung, aktiv, erstellt) VALUES (?,?,?,?,?,?,1,?)")
|
||||
.run(name, rolle, hash, salt, 32768,
|
||||
createHmac("sha256", kenn).update(code).digest("hex"), ALT);
|
||||
return d.prepare("SELECT last_insert_rowid() AS id").get().id;
|
||||
}
|
||||
const CODES = { admin: "CODE-M00-000001", gast: "CODE-M01-000001", gast2: "CODE-M02-000001" };
|
||||
const IDS = {
|
||||
admin: anlegen("DogFather", "admin", CODES.admin),
|
||||
gast: anlegen("Nachtfalter", "gast", CODES.gast),
|
||||
gast2: anlegen("Lenny", "gast", CODES.gast2),
|
||||
};
|
||||
d.close();
|
||||
|
||||
function roh(pfad, { method = "GET", keks = "", rumpf = null } = {}) {
|
||||
return new Promise((fertig, schief) => {
|
||||
const daten = rumpf === null ? null : Buffer.from(JSON.stringify(rumpf));
|
||||
const a = request({
|
||||
host: "127.0.0.1", port: PORT, path: pfad, method,
|
||||
headers: {
|
||||
Host: CREW, Origin: `https://${CREW}`,
|
||||
...(keks ? { Cookie: keks } : {}),
|
||||
...(daten ? { "Content-Type": "application/json", "Content-Length": daten.length } : {}),
|
||||
},
|
||||
}, (antwort) => {
|
||||
const teile = [];
|
||||
antwort.on("data", (s) => teile.push(s));
|
||||
antwort.on("end", () => {
|
||||
const text = Buffer.concat(teile).toString("utf8");
|
||||
let j = null; try { j = JSON.parse(text); } catch { /* kein JSON */ }
|
||||
fertig({ code: antwort.statusCode, text, j, kopf: antwort.headers });
|
||||
});
|
||||
});
|
||||
a.on("error", schief);
|
||||
if (daten) a.write(daten);
|
||||
a.end();
|
||||
});
|
||||
}
|
||||
async function anmelden(rolle) {
|
||||
const a = await roh("/workspace/api/anmelden", {
|
||||
method: "POST",
|
||||
rumpf: { rolle: rolle === "gast2" ? "gast" : rolle, code: CODES[rolle], alter_ok: true },
|
||||
});
|
||||
return [].concat(a.kopf["set-cookie"] || []).map((z) => z.split(";")[0]).join("; ");
|
||||
}
|
||||
const k = {
|
||||
admin: await anmelden("admin"),
|
||||
gast: await anmelden("gast"),
|
||||
gast2: await anmelden("gast2"),
|
||||
};
|
||||
|
||||
/* ---------- Die Buehne fuellen ------------------------------------------ */
|
||||
await roh("/workspace/api/reaktion", {
|
||||
method: "PUT", keks: k.admin,
|
||||
rumpf: {
|
||||
titel: "Wir schauen den neuen Trailer",
|
||||
video: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
||||
beginnt_am: new Date(Date.now() + 7 * 60_000).toISOString(),
|
||||
},
|
||||
});
|
||||
|
||||
/* ZWEI STUECKE IN DIE WARTESCHLANGE. Eine leere Liste sieht auf
|
||||
einem Bildschirmfoto genauso aus wie eine kaputte -- beides ist
|
||||
ein Kasten ohne Zeilen. Zwei echte Eintraege zeigen, ob Titel,
|
||||
Vorschaubild und die vier Knoepfe je Zeile wirklich ankommen. */
|
||||
for (const adresse of ["https://youtu.be/9bZkp7q19f0",
|
||||
"https://www.youtube.com/watch?v=kJQP7kiw5Fk"]) {
|
||||
await roh("/workspace/api/reaktion/liste", {
|
||||
method: "POST", keks: k.admin, rumpf: { video: adresse },
|
||||
});
|
||||
}
|
||||
|
||||
const REDEN = [
|
||||
["gast", "Bin schon daaa 🐺"],
|
||||
["gast2", "Ich auch! Hab extra Popcorn geholt"],
|
||||
["gast", "Wie lange noch?"],
|
||||
["admin", "Zwei Minuten, ich richte noch die Kamera"],
|
||||
["gast2", "Kein Stress, wir sitzen bequem"],
|
||||
["gast", "Letztes Mal war so gut, ich hab geheult"],
|
||||
];
|
||||
|
||||
/* ---------- Der Vorbau -------------------------------------------------- */
|
||||
const schluesselDatei = join(ordner, "p.key");
|
||||
const zertDatei = join(ordner, "p.crt");
|
||||
execFileSync("openssl", ["req", "-x509", "-newkey", "rsa:2048", "-nodes",
|
||||
"-keyout", schluesselDatei, "-out", zertDatei, "-days", "2",
|
||||
"-subj", `/CN=${CREW}`, "-addext", `subjectAltName=DNS:${CREW}`], { stdio: "ignore" });
|
||||
|
||||
const vorbau = httpsServer({
|
||||
key: readFileSync(schluesselDatei), cert: readFileSync(zertDatei),
|
||||
}, (von, nach) => {
|
||||
const weiter = request({
|
||||
host: "127.0.0.1", port: PORT, path: von.url, method: von.method,
|
||||
headers: { ...von.headers, host: `${CREW}:${HTTPS_PORT}` },
|
||||
}, (antwort) => {
|
||||
nach.writeHead(antwort.statusCode || 502, antwort.headers);
|
||||
antwort.pipe(nach);
|
||||
});
|
||||
weiter.on("error", () => { try { nach.writeHead(502); nach.end(); } catch { /* egal */ } });
|
||||
von.pipe(weiter);
|
||||
});
|
||||
await new Promise((r) => vorbau.listen(HTTPS_PORT, "127.0.0.1", r));
|
||||
const BASIS = `https://${CREW}:${HTTPS_PORT}`;
|
||||
|
||||
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",
|
||||
/* Kamera und Mikrofon ohne Rueckfrage -- und ein bewegtes
|
||||
Testbild statt eines schwarzen Rechtecks. Ohne das sieht jede
|
||||
Aufnahme aus, als waere die Kamera kaputt. */
|
||||
"--use-fake-ui-for-media-stream", "--use-fake-device-for-media-stream"],
|
||||
});
|
||||
|
||||
/* JEDE GEOEFFNETE SEITE HAELT ZWEI STEHENDE VERBINDUNGEN (der
|
||||
Ereignisstrom der Kopfleiste und der dieser Seite). Ein Browser
|
||||
laesst je Adresse nur wenige davon zu -- wer seine Seiten nicht
|
||||
schliesst, nimmt den spaeteren den Platz weg.
|
||||
|
||||
GEMESSEN: Die Seiten aus den ersten beiden Abschnitten blieben
|
||||
offen, und danach kam Lennys Strom gar nicht mehr zustande. Die
|
||||
Signale gingen ins Leere, und die Kamerafenster blieben schwarz --
|
||||
ein Messfehler, der wie ein Programmfehler aussah. */
|
||||
async function alsWer(rolle, breite, hoehe) {
|
||||
const kontext = await browser.newContext({
|
||||
viewport: { width: breite, height: hoehe },
|
||||
/* MIT FINGER, WENN ES EIN HANDY IST.
|
||||
Ohne `hasTouch` meldet der Browser `pointer: fine` -- und
|
||||
damit greift KEINE der Regeln aus `@media (pointer: coarse)`.
|
||||
Dort stehen im ganzen Haus die 44-Pixel-Beruehrziele und seit
|
||||
dem 28.09. auch das Ausblenden der Tastenkuerzel. Eine
|
||||
Handy-Messung mit Mauszeiger misst eine Seite, die auf keinem
|
||||
Handy so aussieht -- und meldet Hoehen, die dort andere sind. */
|
||||
hasTouch: breite <= 860,
|
||||
ignoreHTTPSErrors: true,
|
||||
permissions: ["camera", "microphone"],
|
||||
});
|
||||
await kontext.addCookies((k[rolle] || "").split("; ").filter(Boolean).map((z) => {
|
||||
const [n, ...r] = z.split("=");
|
||||
return { name: n, value: r.join("="), domain: CREW, path: "/" };
|
||||
}));
|
||||
const seite = await kontext.newPage();
|
||||
const konsole = [];
|
||||
const anfragen = [];
|
||||
seite.on("request", (r) => { if (/\/api\//.test(r.url())) anfragen.push(r.url().replace(/^https?:\/\/[^/]+/, "")); });
|
||||
seite.on("pageerror", (f) => konsole.push(String(f?.message || f)));
|
||||
seite.on("console", (m) => { if (m.type() === "error") konsole.push(m.text()); });
|
||||
seite.on("response", (a) => {
|
||||
if (a.status() >= 400) konsole.push(`${a.status()} ${a.url().replace(/^https?:\/\/[^/]+/, "")}`);
|
||||
});
|
||||
return { kontext, seite, konsole, anfragen };
|
||||
}
|
||||
|
||||
async function bild(seite, name) {
|
||||
await seite.screenshot({ path: join(HIER, `mess-reaktion-${name}.png`) });
|
||||
console.log(` Bild: server/mess-reaktion-${name}.png`);
|
||||
}
|
||||
|
||||
async function vermessen(seite, wo) {
|
||||
const m = await seite.evaluate(() => ({
|
||||
ueber: Math.max(0, document.documentElement.scrollWidth - document.documentElement.clientWidth),
|
||||
hoch: Math.max(0, document.documentElement.scrollHeight - document.documentElement.clientHeight),
|
||||
stand: document.getElementById("saal")?.dataset.stand || "?",
|
||||
schild: document.getElementById("schild-wort")?.textContent || "",
|
||||
}));
|
||||
console.log(` ${wo}: Stand „${m.stand}", Schild „${m.schild}", `
|
||||
+ `seitlich ${m.ueber} px, senkrecht ${m.hoch} px`);
|
||||
return m;
|
||||
}
|
||||
|
||||
|
||||
/* =====================================================================
|
||||
WAS MUSS MAN SEITLICH SCHIEBEN?
|
||||
|
||||
Filipe, 28.09.2026: „ich will auch nicht dass man sachen nach links
|
||||
und rechts schieben muss. perfektion das untereinander. ich will
|
||||
niemals irgendwas nach links oder rechts swippen muessen."
|
||||
|
||||
NICHT GERATEN, SONDERN AUFGEZAEHLT. Ein `grep` nach `overflow-x`
|
||||
findet die absichtlichen Roller. Es findet NICHT die Stelle, an der
|
||||
ein Inhalt breiter ist als sein Kasten und der Browser von sich aus
|
||||
eine Rollleiste anhaengt -- und genau das ist der Fall auf Filipes
|
||||
Bildschirmfoto. Dieses Werkzeug geht jedes Element durch und nennt
|
||||
jedes, dessen Inhalt breiter ist als sein Platz.
|
||||
===================================================================== */
|
||||
|
||||
/* AUF SENDUNG. Nur dann steht die Seite vollstaendig da: ohne
|
||||
laufende Sendung fehlen Chat, Kamerafenster und der halbe
|
||||
Transport -- und dann misst man eine Seite, die es im Betrieb
|
||||
nie gibt.
|
||||
|
||||
EIN EIGENER FEHLER, GEFUNDEN AM BILDSCHIRMFOTO: Die erste Fassung
|
||||
schickte `PUT`; die Route nimmt aber `POST`. Der Aufruf lief ins
|
||||
Leere, die Messung lief weiter, und das Schild sagte noch immer
|
||||
„GESCHLOSSEN". Deshalb steht unten eine Nachfrage: Eine Messung,
|
||||
die ihre eigene Voraussetzung nicht nachprueft, misst irgendetwas
|
||||
und meldet es als Ergebnis. */
|
||||
for (const stufe of ["vorbereitung", "live"]) {
|
||||
await roh("/workspace/api/reaktion/stand", {
|
||||
method: "POST", keks: k.admin, rumpf: { stand: stufe },
|
||||
});
|
||||
}
|
||||
/* Ein Gast dazu -- sonst fehlt die halbe Gaesteliste, und im Saal
|
||||
steht nur ein Kamerafenster statt zweier. */
|
||||
await roh("/workspace/api/reaktion/gast", {
|
||||
method: "POST", keks: k.admin, rumpf: { person_id: IDS.gast2 },
|
||||
});
|
||||
/* Und ein paar Worte im Chat -- eine leere Schiene kann nicht
|
||||
ueberlaufen, und genau das waere ein gruener Haken ohne Inhalt. */
|
||||
for (const [wer, text] of REDEN) {
|
||||
await roh("/workspace/api/reaktion/chat", { method: "POST", keks: k[wer], rumpf: { text } });
|
||||
}
|
||||
/* EIN ZWEITES VIDEO -- SONST FEHLT DER UMSCHALTER.
|
||||
Dieses Werkzeug meldete „nichts rollt seitlich", waehrend
|
||||
`mess-reaktion` am selben Aufbau 76 Pixel fand. Der Unterschied:
|
||||
Dort war ein zweites Video eingerichtet, also stand der
|
||||
Umschalter in der Leiste -- mit einem ganzen Videotitel darin,
|
||||
und genau der lief hinaus. Hier war er `hidden`.
|
||||
Ein Knopf, den die Messung nie sieht, kann nicht ueberlaufen --
|
||||
und ihr gruener Haken sagt dann nichts ueber ihn. */
|
||||
await roh("/workspace/api/reaktion/zweitvideo", {
|
||||
method: "POST", keks: k.admin,
|
||||
rumpf: { video: "https://www.youtube.com/watch?v=kJQP7kiw5Fk" },
|
||||
});
|
||||
|
||||
{
|
||||
const nach = await roh("/workspace/api/reaktion", { keks: k.admin });
|
||||
if (nach.j?.stand !== "live") {
|
||||
console.error(`ABBRUCH: die Sendung steht auf „${nach.j?.stand}" statt „live" -- `
|
||||
+ "ohne Sendung fehlen Chat und Kamerafenster, und dann misst dieses "
|
||||
+ "Werkzeug eine Seite, die es im Betrieb nicht gibt.");
|
||||
process.exit(9);
|
||||
}
|
||||
console.log(`Buehne steht: auf Sendung, ein Gast, Chat gefuellt, `
|
||||
+ `zweites Video ${nach.j?.zweit?.video ? "bereit" : "FEHLT"}.`);
|
||||
if (!nach.j?.zweit?.video) {
|
||||
console.error("ABBRUCH: ohne zweites Video fehlt der Umschalter in der "
|
||||
+ "Transportleiste -- und genau der lief am 28.09. seitlich hinaus.");
|
||||
process.exit(9);
|
||||
}
|
||||
}
|
||||
|
||||
const GERAETE = [
|
||||
["Rechner", 1440, 900],
|
||||
["Tablet", 900, 1200],
|
||||
["Handy", 412, 915],
|
||||
["iPhone", 390, 844],
|
||||
["kleines Handy", 360, 640],
|
||||
];
|
||||
|
||||
let befunde = 0;
|
||||
|
||||
for (const [gname, breite, hoehe] of GERAETE) {
|
||||
console.log(`\n=== ${gname} (${breite}x${hoehe}) ===`);
|
||||
const host = await alsWer("admin", breite, hoehe);
|
||||
await host.seite.goto(`${BASIS}/workspace/reaktion.html`, { waitUntil: "domcontentloaded" });
|
||||
await host.seite.waitForSelector("#reiter", { timeout: 15000 });
|
||||
|
||||
/* ZUERST ZUGEKLAPPT -- DAS IST DER HAEUFIGSTE ZUSTAND.
|
||||
Die erste Fassung mass nur mit offener Regie, weil dort die
|
||||
gemeldete Stelle lag. `mess-reaktion` fand daraufhin 76 Pixel
|
||||
seitlichen Ueberlauf auf einem 390er Handy, die hier nicht
|
||||
auftauchten -- schlicht weil dort die Regie ZU war. Wer nur
|
||||
den Zustand misst, in dem der Fehler gemeldet wurde, findet
|
||||
den zweiten nie. */
|
||||
{
|
||||
/* AUSDRUECKLICH ZUKLAPPEN. Die Seite merkt sich den Zustand,
|
||||
und beim Laden stand sie hier auf „offen" -- die Messung
|
||||
haette den zugeklappten Fall also nie gesehen und trotzdem
|
||||
„zugeklappt: 0 px" gemeldet. Ein gruener Haken ueber einen
|
||||
Zustand, den man gar nicht hergestellt hat. */
|
||||
await host.seite.evaluate(() => {
|
||||
const p = document.getElementById("pult");
|
||||
if (p && p.dataset.auf === "ja") document.getElementById("pult-griff")?.click();
|
||||
});
|
||||
await host.seite.waitForTimeout(400);
|
||||
const zu = await host.seite.evaluate(() => ({
|
||||
auf: document.getElementById("pult")?.dataset.auf,
|
||||
ueber: Math.max(0, document.documentElement.scrollWidth
|
||||
- document.documentElement.clientWidth),
|
||||
breitestes: (() => {
|
||||
let b = null, max = 0;
|
||||
for (const e of document.querySelectorAll("*")) {
|
||||
const r = e.getBoundingClientRect();
|
||||
if (r.right > max) { max = r.right; b = e; }
|
||||
}
|
||||
return b ? `${b.tagName.toLowerCase()}${b.id ? "#" + b.id : ""}`
|
||||
+ `${typeof b.className === "string" && b.className
|
||||
? "." + b.className.trim().split(/\s+/)[0] : ""} bis ${Math.round(max)} px` : "-";
|
||||
})(),
|
||||
}));
|
||||
console.log(` zugeklappt (auf=${zu.auf}): seitlich ${zu.ueber} px`);
|
||||
if (zu.ueber > 0) {
|
||||
console.log(` ACHTUNG: die Seite rollt bei ZUGEKLAPPTER Regie ${zu.ueber} px seitlich`);
|
||||
console.log(` am weitesten rechts: ${zu.breitestes}`);
|
||||
befunde++;
|
||||
}
|
||||
}
|
||||
|
||||
/* Die Regie aufklappen -- zugeklappt sieht man die Tafeln nicht,
|
||||
und genau in ihnen steckt der gemeldete Ueberlauf. */
|
||||
const auf = await host.seite.evaluate(() => {
|
||||
const p = document.getElementById("pult");
|
||||
if (p && p.dataset.auf !== "ja") document.getElementById("pult-griff")?.click();
|
||||
return document.getElementById("pult")?.dataset.auf || "?";
|
||||
});
|
||||
await host.seite.waitForTimeout(400);
|
||||
console.log(` Regie: ${auf}`);
|
||||
|
||||
const register = await host.seite.evaluate(() =>
|
||||
[...document.querySelectorAll(".reiter__knopf")].map((b) => b.dataset.tafel));
|
||||
console.log(` Register: ${register.join(" · ")}`);
|
||||
|
||||
/* Erst die Seite als Ganzes. */
|
||||
const seitlich = await host.seite.evaluate(() =>
|
||||
Math.max(0, document.documentElement.scrollWidth - document.documentElement.clientWidth));
|
||||
if (seitlich > 0) { console.log(` ACHTUNG: die SEITE selbst rollt ${seitlich} px seitlich`); befunde++; }
|
||||
|
||||
for (const reg of register) {
|
||||
await host.seite.evaluate((r) => {
|
||||
document.querySelector(`.reiter__knopf[data-tafel="${r}"]`)?.click();
|
||||
}, reg);
|
||||
await host.seite.waitForTimeout(250);
|
||||
|
||||
const quer = await host.seite.evaluate(() => {
|
||||
const raus = [];
|
||||
for (const el of document.querySelectorAll("*")) {
|
||||
const w = el.scrollWidth - el.clientWidth;
|
||||
if (w <= 1) continue;
|
||||
const r = el.getBoundingClientRect();
|
||||
if (r.width === 0 || r.height === 0) continue; /* verborgen */
|
||||
const st = getComputedStyle(el);
|
||||
if (st.display === "none" || st.visibility === "hidden") continue;
|
||||
|
||||
/* NUR WAS MAN WIRKLICH SCHIEBEN KANN.
|
||||
`overflow-x: hidden` ist KEIN Wischen -- dort ist der Text
|
||||
abgeschnitten (meist mit „…"), und schieben laesst sich
|
||||
nichts. Das ist ein anderes Thema und gehoert nicht in
|
||||
diese Messung; wer es mitzaehlt, meldet 78 Stellen, von
|
||||
denen 60 gar keine sind, und findet die echten nicht mehr.
|
||||
`visible` zaehlt ebenfalls nicht als Stelle -- dort wandert
|
||||
der Ueberlauf nach oben zum naechsten Roller, und DER ist
|
||||
die Stelle. Ausnahme: Wurzel und Rumpf, denn dort rollt
|
||||
das Fenster selbst. */
|
||||
const wurzel = el === document.documentElement || el === document.body;
|
||||
if (!wurzel && st.overflowX !== "auto" && st.overflowX !== "scroll") continue;
|
||||
raus.push({
|
||||
wer: el.tagName.toLowerCase()
|
||||
+ (el.id ? "#" + el.id : "")
|
||||
+ (el.className && typeof el.className === "string"
|
||||
? "." + el.className.trim().split(/\s+/).join(".") : ""),
|
||||
ueber: w,
|
||||
innen: el.clientWidth,
|
||||
inhalt: el.scrollWidth,
|
||||
ox: st.overflowX,
|
||||
/* Was ist das breiteste Kind? Das ist fast immer die
|
||||
Ursache -- und ohne diese Angabe sucht man sie von Hand. */
|
||||
/* DIE KETTE BIS ZUR URSACHE. Das breiteste Kind zu nennen
|
||||
reicht nicht: Es ist meist selbst nur ein Kasten, der
|
||||
sich nach SEINEM breitesten Kind richtet. Erst am Ende
|
||||
der Kette steht das Ding, das wirklich zu breit ist --
|
||||
und nur dort kann man etwas reparieren. */
|
||||
kette: (() => {
|
||||
const teile = [];
|
||||
let jetzt = el;
|
||||
for (let tief = 0; tief < 8; tief++) {
|
||||
let b = null, max = 0;
|
||||
for (const kind of jetzt.children) {
|
||||
const kr = kind.getBoundingClientRect();
|
||||
if (kr.width > max) { max = kr.width; b = kind; }
|
||||
}
|
||||
if (!b) break;
|
||||
teile.push(`${b.tagName.toLowerCase()}${b.id ? "#" + b.id : ""}`
|
||||
+ `${typeof b.className === "string" && b.className
|
||||
? "." + b.className.trim().split(/\s+/)[0] : ""}:${Math.round(max)}`);
|
||||
jetzt = b;
|
||||
}
|
||||
return teile.length ? teile.join(" > ") : "-";
|
||||
})(),
|
||||
});
|
||||
}
|
||||
return raus;
|
||||
});
|
||||
|
||||
/* EIN BILD JE REGISTER AUF DEM RECHNER.
|
||||
Zahlen sagen, dass nichts mehr rollt. Sie sagen nicht, ob es
|
||||
danach gut aussieht -- und genau das war Filipes Frage. */
|
||||
if (breite === 1440) {
|
||||
await host.seite.locator("#pult-innen").screenshot({
|
||||
path: join(HIER, `mess-quer-tafel-${reg}.png`) }).catch(() => {});
|
||||
/* Die Stufenleiter steht weiter unten als das Fenster reicht --
|
||||
sie braucht ein eigenes Bild. Ausgerechnet sie trug bis heute
|
||||
den Stil der Chat-Leiste (Namensstreit), also ist sie die
|
||||
Stelle, an der man nachsehen muss. */
|
||||
if (reg === "gestaltung") {
|
||||
await host.seite.locator("#stufen").screenshot({
|
||||
path: join(HIER, "mess-quer-stufen.png") }).catch(() => {});
|
||||
}
|
||||
}
|
||||
if (quer.length === 0) { console.log(` ${reg}: nichts rollt seitlich`); continue; }
|
||||
console.log(` ${reg}: ${quer.length} Stelle(n) rollen seitlich`);
|
||||
for (const q of quer) {
|
||||
console.log(` ACHTUNG ${q.wer}`);
|
||||
console.log(` Platz ${q.innen} px, Inhalt ${q.inhalt} px `
|
||||
+ `(${q.ueber} px zu viel), overflow-x: ${q.ox}`);
|
||||
console.log(` Kette: ${q.kette}`);
|
||||
/* WER RAGT UEBER DIE RECHTE KANTE?
|
||||
Die erste Fassung fragte nach der BREITE eines Kindes --
|
||||
und fand nichts, obwohl 211 Pixel ueberliefen. Der Grund:
|
||||
Ein Kind kann genau passen und sein ENKEL trotzdem rechts
|
||||
hinausragen, weil dazwischen `overflow: visible` steht.
|
||||
Gefragt ist also nicht „wer ist zu breit", sondern „wessen
|
||||
rechte Kante liegt jenseits der Kante des Rollers" -- und
|
||||
davon das oberste Glied, denn alles darunter folgt ihm. */
|
||||
const schuld = await host.seite.evaluate((wer) => {
|
||||
const nenne = (e) => e.tagName.toLowerCase()
|
||||
+ (e.id ? "#" + e.id : "")
|
||||
+ (e.className && typeof e.className === "string"
|
||||
? "." + e.className.trim().split(/\s+/).join(".") : "");
|
||||
const roller = [...document.querySelectorAll("*")].find((e) => nenne(e) === wer);
|
||||
if (!roller) return ["(nicht gefunden)"];
|
||||
const kante = roller.getBoundingClientRect().left + roller.clientWidth;
|
||||
const zeilen = [];
|
||||
/* IMMER ABSTEIGEN, AUCH DURCH UNAUFFAELLIGES.
|
||||
Die erste Fassung stieg nur in Kinder hinab, die selbst
|
||||
schon hinausragten -- und fand deshalb gar nichts: Die
|
||||
sichtbare Tafel passte (327 px in 359), und erst IHR Kind
|
||||
ragte 572 px weit hinaus. Eine Suche, die nur dort
|
||||
weitersucht, wo sie schon fuendig ist, findet nie etwas,
|
||||
das hinter etwas Unauffaelligem steckt. */
|
||||
const gehe = (el, tief) => {
|
||||
if (tief > 7) return;
|
||||
for (const kind of el.children) {
|
||||
const kr = kind.getBoundingClientRect();
|
||||
if (kr.width === 0) continue;
|
||||
if (kr.right <= kante + 1) { gehe(kind, tief); continue; }
|
||||
const st = getComputedStyle(kind);
|
||||
zeilen.push(`${" ".repeat(tief)}${nenne(kind).split(".").slice(0, 2).join(".")}`
|
||||
+ ` ragt ${Math.round(kr.right - kante)} px hinaus`
|
||||
+ ` (${Math.round(kr.width)} px breit)`
|
||||
+ ` · ${st.display}`
|
||||
+ (st.gridTemplateColumns !== "none" ? ` · spalten ${st.gridTemplateColumns}` : "")
|
||||
+ (st.display.includes("flex") ? ` · wrap ${st.flexWrap} · basis ${st.flexBasis}` : "")
|
||||
+ ` · min-width ${st.minWidth}`
|
||||
+ (st.whiteSpace !== "normal" ? ` · ${st.whiteSpace}` : ""));
|
||||
gehe(kind, tief + 1);
|
||||
}
|
||||
};
|
||||
gehe(roller, 0);
|
||||
return zeilen.length ? zeilen : ["(nichts ragt hinaus -- Rand oder Schatten?)"];
|
||||
}, q.wer);
|
||||
for (const z of schuld) console.log(` ${z}`);
|
||||
befunde++;
|
||||
}
|
||||
}
|
||||
|
||||
/* ==== UND IN JEDER ANORDNUNG ====================================
|
||||
`mess-reaktion` meldete auf einem 390er Handy 76 Pixel
|
||||
seitlichen Ueberlauf, die hier nicht auftauchten. Der
|
||||
Unterschied war die ANORDNUNG: Dort war vorher „nur Kamera"
|
||||
eingestellt, hier stand die Vorgabe. Die Anordnung gehoert der
|
||||
Sendung und gilt fuer alle -- wer sie nicht durchprobiert,
|
||||
misst nur einen von fuenf Faellen. */
|
||||
for (const anordnung of ["kino", "gleich", "kameras", "nur_video", "nur_kamera"]) {
|
||||
await host.seite.evaluate((a) => {
|
||||
document.querySelector(`#layout-reihe .layout-knopf[data-layout="${a}"]`)?.click();
|
||||
}, anordnung);
|
||||
await host.seite.waitForTimeout(500);
|
||||
const m = await host.seite.evaluate(() => {
|
||||
const ueber = Math.max(0, document.documentElement.scrollWidth
|
||||
- document.documentElement.clientWidth);
|
||||
if (ueber === 0) return { ueber };
|
||||
let b = null, max = 0;
|
||||
for (const e of document.querySelectorAll("*")) {
|
||||
const r = e.getBoundingClientRect();
|
||||
if (r.width === 0) continue;
|
||||
if (r.right > max) { max = r.right; b = e; }
|
||||
}
|
||||
return {
|
||||
ueber,
|
||||
wer: b ? `${b.tagName.toLowerCase()}${b.id ? "#" + b.id : ""}`
|
||||
+ `${typeof b.className === "string" && b.className
|
||||
? "." + b.className.trim().split(/\s+/)[0] : ""}` : "-",
|
||||
bis: Math.round(max),
|
||||
};
|
||||
});
|
||||
if (m.ueber > 0) {
|
||||
console.log(` ACHTUNG Anordnung „${anordnung}": ${m.ueber} px seitlich `
|
||||
+ `-- am weitesten rechts ${m.wer} (bis ${m.bis} px)`);
|
||||
befunde++;
|
||||
} else {
|
||||
console.log(` Anordnung „${anordnung}": seitlich 0 px`);
|
||||
}
|
||||
}
|
||||
await host.seite.evaluate(() => {
|
||||
document.querySelector('#layout-reihe .layout-knopf[data-layout="kino"]')?.click();
|
||||
});
|
||||
|
||||
await host.seite.screenshot({ path: join(HIER, `mess-quer-${breite}.png`) });
|
||||
await host.kontext.close();
|
||||
}
|
||||
|
||||
console.log(`\n=== ${befunde === 0 ? "NICHTS rollt seitlich." : befunde + " Stelle(n) rollen seitlich."} ===`);
|
||||
|
||||
await browser.close();
|
||||
await new Promise((r) => vorbau.close(r));
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* Windows haelt die Datei noch */ }
|
||||
process.exit(befunde === 0 ? 0 : 1);
|
||||
+246
-41
@@ -204,6 +204,14 @@ const browser = await pw.chromium.launch({
|
||||
async function alsWer(rolle, breite, hoehe) {
|
||||
const kontext = await browser.newContext({
|
||||
viewport: { width: breite, height: hoehe },
|
||||
/* MIT FINGER, WENN ES EIN HANDY IST.
|
||||
Ohne `hasTouch` meldet der Browser `pointer: fine` -- und
|
||||
damit greift KEINE der Regeln aus `@media (pointer: coarse)`.
|
||||
Dort stehen im ganzen Haus die 44-Pixel-Beruehrziele und seit
|
||||
dem 28.09. auch das Ausblenden der Tastenkuerzel. Eine
|
||||
Handy-Messung mit Mauszeiger misst eine Seite, die auf keinem
|
||||
Handy so aussieht -- und meldet Hoehen, die dort andere sind. */
|
||||
hasTouch: breite <= 860,
|
||||
ignoreHTTPSErrors: true,
|
||||
permissions: ["camera", "microphone"],
|
||||
});
|
||||
@@ -357,6 +365,11 @@ console.log(` -> ${zaehlt} von ${Object.keys(beiZuschauer).length} Kameras kom
|
||||
ein Video mit Ton nicht von allein startet. Beide Male sahen die
|
||||
Bildschirmfotos plausibel aus. */
|
||||
let ausgang = 0;
|
||||
/* BEKANNTE, AUFGESCHRIEBENE OFFENE PUNKTE.
|
||||
Sie sind keine Fehler dieses Laufs und kein bestandener Test --
|
||||
sie sind der dritte Ausgang: Mangel bekannt, Weg beschrieben,
|
||||
noch nicht gegangen. Am Ende stehen sie gesondert. */
|
||||
const offenePunkte = [];
|
||||
/* LAEUFT DAS VIDEO? Ein Zuschauer hat keine Bedienung -- startet es
|
||||
nicht von selbst, sitzt er eine Stunde vor einem Standbild und
|
||||
kann nichts dagegen tun. Gemessen war genau das der Fall. */
|
||||
@@ -396,7 +409,7 @@ await host.seite.evaluate(() => {
|
||||
});
|
||||
await host.seite.waitForTimeout(900);
|
||||
|
||||
/* ---- Der Regieplatz: links, rechts und die Leiste unten ----------
|
||||
/* ---- Der Regieplatz: drei Kacheln und die Leiste unten ----------
|
||||
|
||||
Filipe: „kann das nicht bissl aufgeteilt sein auf links und rechts
|
||||
und eine barre unten in der mitte."
|
||||
@@ -424,8 +437,13 @@ await host.seite.waitForTimeout(900);
|
||||
};
|
||||
const innen = document.getElementById("pult-innen");
|
||||
return {
|
||||
links: k(".regieplatz__seite:not(.regieplatz__seite--rechts)"),
|
||||
rechts: k(".regieplatz__seite--rechts"),
|
||||
/* DREI KACHELN, NICHT ZWEI SEITEN. In der 360 Pixel schmalen
|
||||
Regiespalte stehen sie UNTEREINANDER -- das ist seit dem
|
||||
Umbau „Regie links" der Sinn, nicht ein Fehler. Gefragt
|
||||
ist deshalb: Gibt es alle drei, und hat jede Inhalt? */
|
||||
laeuft: k(".regiekachel.kachel--laeuft"),
|
||||
sendung: k(".regiekachel.kachel--sendung"),
|
||||
bereit: k(".regiekachel.kachel--bereit"),
|
||||
leiste: k(".transport"),
|
||||
spiel: k("#v-spiel"),
|
||||
/* Laeuft etwas seitlich hinaus? `scrollWidth` groesser als die
|
||||
@@ -438,11 +456,18 @@ await host.seite.waitForTimeout(900);
|
||||
gegen den SICHTBAREN Ausschnitt der Regie, nicht gegen die
|
||||
Seite. */
|
||||
sichtbar: (() => {
|
||||
/* GEGEN DAS FENSTER, NICHT GEGEN DIE REGIE.
|
||||
Die erste Fassung fragte, ob die Leiste innerhalb von
|
||||
`#pult-innen` liegt. Seit dem 28.09. liegt sie gar nicht
|
||||
mehr in der Regie, sondern als eigene Zeile UNTER dem
|
||||
ganzen Saal -- die Antwort war also immer „nein", und
|
||||
die Messung meldete dauerhaft einen Fehler, den es nicht
|
||||
gab. Gefragt ist, was Filipe im Live angeht: Komme ich
|
||||
an den Play-Knopf, ohne zu scrollen? */
|
||||
const e = document.querySelector(".transport");
|
||||
if (!e || !innen) return false;
|
||||
if (!e) return false;
|
||||
const r = e.getBoundingClientRect();
|
||||
const i = innen.getBoundingClientRect();
|
||||
return r.bottom <= i.bottom + 1 && r.top >= i.top - 1;
|
||||
return r.bottom <= window.innerHeight + 1 && r.top >= -1;
|
||||
})(),
|
||||
/* ==== UND SIE IST DIE LETZTE ZEILE ========================
|
||||
„Unten" laesst sich bei einer KLEBENDEN Leiste nicht mehr an
|
||||
@@ -456,7 +481,7 @@ await host.seite.waitForTimeout(900);
|
||||
Scrollen wie beim Stillstand. */
|
||||
letzte: (() => {
|
||||
const e = document.querySelector(".transport");
|
||||
const r = document.querySelector(".regieplatz__seite--rechts");
|
||||
const r = document.querySelector(".regiekachel.kachel--sendung");
|
||||
if (!e || !r) return false;
|
||||
/* 4 = DOCUMENT_POSITION_FOLLOWING */
|
||||
return !!(r.compareDocumentPosition(e) & 4);
|
||||
@@ -469,9 +494,38 @@ await host.seite.waitForTimeout(900);
|
||||
};
|
||||
});
|
||||
const p = platz;
|
||||
console.log(` Regieplatz: links ${p.links?.l}..${p.links?.r} · `
|
||||
+ `rechts ${p.rechts?.l}..${p.rechts?.r} · `
|
||||
console.log(` Regieplatz: Spalte ${p.laeuft?.l}..${p.laeuft?.r} · `
|
||||
+ `Leiste ${p.leiste?.l}..${p.leiste?.r} bei y=${p.leiste?.o} (${p.leiste?.h} px hoch)`);
|
||||
/* ==== VERDECKT DIE KLEBENDE LEISTE ETWAS? ==================
|
||||
Sie schwebt ueber dem unteren Teil der Regie -- das ist
|
||||
gewollt. Was NICHT gewollt ist: dass ein Knopf darunter
|
||||
liegt und deshalb nicht mehr gedrueckt werden kann. Gemessen
|
||||
wird, was der Browser selbst sagt: Liegt an der Mitte eines
|
||||
Knopfes etwas anderes obenauf? */
|
||||
const verdeckt = await host.seite.evaluate(() => {
|
||||
const raus = [];
|
||||
const leiste = document.querySelector(".transport");
|
||||
if (!leiste) return raus;
|
||||
for (const e of document.querySelectorAll("#pult-innen button, #pult-innen input,"
|
||||
+ " #pult-innen select, #pult-innen label")) {
|
||||
const r = e.getBoundingClientRect();
|
||||
if (r.width === 0 || r.height === 0) continue;
|
||||
const oben = document.elementFromPoint(r.left + r.width / 2, r.top + r.height / 2);
|
||||
if (!oben || e === oben || e.contains(oben)) continue;
|
||||
if (!leiste.contains(oben)) continue; /* nur die Leiste zaehlt */
|
||||
raus.push(`${e.id || e.className || e.tagName} (${Math.round(r.top)}..${Math.round(r.bottom)})`);
|
||||
}
|
||||
return raus;
|
||||
});
|
||||
if (verdeckt.length) {
|
||||
console.log(` ACHTUNG: die Transportleiste liegt ueber ${verdeckt.length} Bedienelement(en): `
|
||||
+ verdeckt.slice(0, 5).join(", "));
|
||||
ausgang = 1;
|
||||
} else {
|
||||
console.log(" Die Transportleiste verdeckt kein Bedienelement der Regie.");
|
||||
}
|
||||
|
||||
|
||||
console.log(` Play-Knopf ${p.spiel?.b}x${p.spiel?.h} px · seitlich ueber ${p.ueber} px `
|
||||
+ `· Leiste ohne Scrollen sichtbar: ${p.sichtbar} `
|
||||
+ `(${p.klebt}, nach beiden Spalten: ${p.letzte})`);
|
||||
@@ -479,24 +533,41 @@ await host.seite.waitForTimeout(900);
|
||||
console.log(" ACHTUNG: Die Transportleiste ist nur mit Scrollen zu erreichen.");
|
||||
ausgang = 1;
|
||||
}
|
||||
if (!p.links || !p.rechts || !p.leiste) {
|
||||
console.log(" ACHTUNG: Der Regieplatz fehlt.");
|
||||
if (!p.laeuft || !p.sendung || !p.bereit || !p.leiste) {
|
||||
console.log(` ACHTUNG: Es fehlt eine Kachel (laeuft=${!!p.laeuft}, `
|
||||
+ `sendung=${!!p.sendung}, bereit=${!!p.bereit}, Leiste=${!!p.leiste}).`);
|
||||
ausgang = 1;
|
||||
} else {
|
||||
if (p.links.r > p.rechts.l + 1) {
|
||||
console.log(" ACHTUNG: Links und rechts stehen nicht nebeneinander.");
|
||||
/* UNTEREINANDER, NICHT NEBENEINANDER. In der schmalen
|
||||
Regiespalte ist das die Absicht: Jede Kachel bekommt die
|
||||
volle Breite, und nichts muss seitlich geschoben werden.
|
||||
Geprueft wird deshalb, dass sie sich NICHT ueberlappen und
|
||||
jede die Spalte fuellt -- zwei halbe Kacheln nebeneinander
|
||||
waeren in 360 Pixeln unlesbar. */
|
||||
const untereinander = p.sendung.o >= p.laeuft.u - 1
|
||||
&& p.bereit.o >= p.sendung.u - 1;
|
||||
console.log(` Kacheln (y): laeuft ${p.laeuft.o}..${p.laeuft.u} · sendung ${p.sendung.o}..${p.sendung.u}`
|
||||
+ ` · bereit ${p.bereit.o}..${p.bereit.u} · alle ${p.laeuft.b} px breit`
|
||||
+ ` · untereinander: ${untereinander}`);
|
||||
if (!untereinander) {
|
||||
console.log(" ACHTUNG: Die drei Kacheln stehen nicht untereinander.");
|
||||
ausgang = 1;
|
||||
}
|
||||
if (!p.letzte || p.klebt !== "sticky") {
|
||||
console.log(` ACHTUNG: Die Leiste ist nicht die letzte Zeile `
|
||||
+ `(danach=${p.letzte}, position=${p.klebt}).`);
|
||||
/* DIE LEISTE KOMMT NACH ALLEM. `position: sticky` braucht sie
|
||||
seit dem Umbau „Regie links" nicht mehr: Sie ist eine eigene
|
||||
Zeile des Saals und steht damit von selbst unten. Was gilt,
|
||||
ist die Reihenfolge -- und die gilt beim Scrollen wie beim
|
||||
Stillstand. */
|
||||
if (!p.letzte) {
|
||||
console.log(` ACHTUNG: Die Leiste kommt nicht nach den Kacheln.`);
|
||||
ausgang = 1;
|
||||
}
|
||||
/* Sie soll ueber die GANZE Breite gehen -- eine Leiste, die nur
|
||||
so breit ist wie eine Spalte, ist keine Leiste unten in der
|
||||
Mitte, sondern eine dritte Spalte. */
|
||||
if (p.leiste.l > p.links.l + 1 || p.leiste.r < p.rechts.r - 1) {
|
||||
console.log(" ACHTUNG: Die Leiste geht nicht ueber beide Spalten.");
|
||||
/* Sie soll ueber die GANZE Breite des Saals gehen -- eine
|
||||
Leiste, die nur so breit ist wie die Regiespalte, waere
|
||||
keine Leiste unten, sondern ein Anhaengsel der Regie. */
|
||||
if (p.leiste.b < p.laeuft.b * 2) {
|
||||
console.log(` ACHTUNG: Die Leiste ist nur ${p.leiste.b} px breit `
|
||||
+ `(die Regiespalte allein ist ${p.laeuft.b} px).`);
|
||||
ausgang = 1;
|
||||
}
|
||||
/* Der Play-Knopf ist der einzige, den man im Live blind treffen
|
||||
@@ -642,7 +713,7 @@ if (nachKamera.schild !== "Kamera aus" || !nachKamera.videoVersteckt) {
|
||||
await host.seite.click("#s-kamera").catch(() => {});
|
||||
await host.seite.waitForTimeout(900);
|
||||
|
||||
await host.seite.click('#chat-stufen .stufe[data-modus="team"]').catch(() => {});
|
||||
await host.seite.click('#chat-stufen .chatstufe[data-modus="team"]').catch(() => {});
|
||||
await host.seite.waitForTimeout(1200);
|
||||
const nachChat = await zuschauer.seite.evaluate(() => {
|
||||
const f = document.getElementById("chat-feld");
|
||||
@@ -661,7 +732,7 @@ if (!nachChat.gesperrt || !nachChat.grund.includes("Team") || trotzdem.code !==
|
||||
console.log(" ACHTUNG: Die Chat-Stufe kommt nicht an.");
|
||||
ausgang = 1;
|
||||
}
|
||||
await host.seite.click('#chat-stufen .stufe[data-modus="offen"]').catch(() => {});
|
||||
await host.seite.click('#chat-stufen .chatstufe[data-modus="offen"]').catch(() => {});
|
||||
await host.seite.waitForTimeout(900);
|
||||
|
||||
/* ---- Die Spenden -------------------------------------------------
|
||||
@@ -1882,8 +1953,26 @@ if (!vorherVerborgen) {
|
||||
ausgang = 1;
|
||||
}
|
||||
|
||||
await host.seite.fill("#p-zweit", "https://youtu.be/9bZkp7q19f0").catch(() => {});
|
||||
await host.seite.click("#p-zweit-sichern").catch(() => {});
|
||||
/* KEIN STILLES VERSCHLUCKEN. `.catch(() => {})` hat hier den
|
||||
Grund weggeworfen, warum das zweite Video nie ankam -- und die
|
||||
naechste Zeile meldete dann „Der Umschalter kommt nicht", als
|
||||
waere das Programm kaputt. Ein Messfehler, der wie ein
|
||||
Programmfehler aussieht, kostet mehr Zeit als gar keine Messung. */
|
||||
try {
|
||||
/* ERST HINSCHAUEN, DANN DRUECKEN. Die Regie rollt senkrecht
|
||||
(346 Pixel Platz, 1130 Pixel Inhalt); „Bereitlegen" steht am
|
||||
unteren Ende, gemessen bei y=1430 in einem 900 Pixel hohen
|
||||
Fenster. Ein Mensch scrollt dorthin, bevor er drueckt -- die
|
||||
Messung muss dasselbe tun, sonst misst sie etwas, das niemand
|
||||
erlebt. */
|
||||
await host.seite.locator("#p-zweit").scrollIntoViewIfNeeded();
|
||||
await host.seite.fill("#p-zweit", "https://youtu.be/9bZkp7q19f0");
|
||||
await host.seite.locator("#p-zweit-sichern").scrollIntoViewIfNeeded();
|
||||
await host.seite.click("#p-zweit-sichern");
|
||||
} catch (f) {
|
||||
console.log(` ACHTUNG: das zweite Video liess sich nicht eintragen -- ${f.message.split(String.fromCharCode(10))[0]}`);
|
||||
ausgang = 1;
|
||||
}
|
||||
await host.seite.waitForTimeout(2600);
|
||||
const umschalter = await host.seite.evaluate(() => {
|
||||
const k2 = document.getElementById("v-tauschen");
|
||||
@@ -2025,20 +2114,70 @@ if (modiSicht !== 0 || abz.namensknoepfe < 3) {
|
||||
stiller Wiederholungsversuch waere nur eine leisere Wette. */
|
||||
let menueVersuche = 0;
|
||||
let menueOffen = false;
|
||||
let letzterGrund = "";
|
||||
/* DER KLICK IST EIN UMSCHALTER -- ALSO ERST NACHSEHEN, DANN KLICKEN.
|
||||
Die Schleife klickte bis zu dreimal blind. Der erste Klick
|
||||
oeffnet das Menue, der zweite SCHLIESST es wieder, der dritte
|
||||
oeffnet es erneut. Gemessen am 28.09.2026: Eine eingebaute Spur
|
||||
zeigte „nach dem Klick Menue: true", waehrend die Messung
|
||||
danebenstehend „geht nicht auf" meldete -- sie hatte es selbst
|
||||
zugeklickt. Ein Wiederholungsversuch, der den Zustand aendert,
|
||||
den er pruefen soll, misst am Ende sich selbst. */
|
||||
while (menueVersuche < 3 && !menueOffen) {
|
||||
menueVersuche += 1;
|
||||
await modi.seite.click("#chat-liste .beitrag:last-child .beitrag__name")
|
||||
.catch(() => {});
|
||||
menueOffen = await modi.seite.waitForSelector(".modmenue", { timeout: 3000 })
|
||||
const schonOffen = await modi.seite.evaluate(() => !!document.querySelector(".modmenue"));
|
||||
if (!schonOffen) {
|
||||
/* IM BROWSER KLICKEN, NICHT VON AUSSEN.
|
||||
Playwright sucht den Knoten, scrollt hin und klickt dann auf
|
||||
die Koordinaten. Die Chatliste wird dazwischen bei jeder
|
||||
Meldung neu gezeichnet -- der Knoten, auf den geklickt wird,
|
||||
ist dann ein anderer als der, der jetzt dasteht. Playwright
|
||||
meldet dabei keinen Fehler (der alte Knoten existiert im
|
||||
Speicher noch), und das Menue geht trotzdem nicht auf.
|
||||
Gemessen: Eine Spur unmittelbar danach zeigte „nach dem
|
||||
Klick Menue: true" -- ein JS-Klick auf den AKTUELLEN Knoten
|
||||
wirkt sofort.
|
||||
Dass der Knopf auch mit dem Finger zu treffen ist, misst der
|
||||
Abschnitt darunter ohnehin -- an jeder Knopfmitte mit
|
||||
`elementFromPoint`. */
|
||||
const ging = await modi.seite.evaluate(() => {
|
||||
const ziel = [...document.querySelectorAll("#chat-liste .beitrag__name")]
|
||||
.filter((e) => e.textContent.trim() === "Nachtfalter").pop();
|
||||
if (!ziel) return "kein Beitrag von Nachtfalter in der Liste";
|
||||
ziel.scrollIntoView({ block: "center" });
|
||||
ziel.click();
|
||||
return "";
|
||||
});
|
||||
if (ging) letzterGrund = ging;
|
||||
}
|
||||
/* `attached`, NICHT `visible`. Ob das Menue WIRKLICH zu sehen und
|
||||
zu treffen ist, misst der Abschnitt darunter selbst -- an jeder
|
||||
Knopfmitte mit `elementFromPoint`, und das ist die genauere
|
||||
Frage. Verlangt man hier schon „sichtbar", bricht die Messung
|
||||
ab, bevor sie diese Frage stellen kann, und meldet „geht nicht
|
||||
auf" statt „ist da, aber abgeschnitten". */
|
||||
menueOffen = await modi.seite.waitForSelector(".modmenue", { state: "attached", timeout: 3000 })
|
||||
.then(() => true).catch(() => false);
|
||||
}
|
||||
if (menueVersuche > 1) {
|
||||
console.log(` (Das Menue brauchte ${menueVersuche} Anlaeufe -- die Chatliste `
|
||||
+ `wurde dazwischen neu gezeichnet.)`);
|
||||
}
|
||||
await modi.seite.waitForTimeout(250);
|
||||
/* OEFFNEN UND MESSEN IN EINEM ZUG.
|
||||
Hier stand eine Pause von 250 ms zwischen Klick und Messung. Die
|
||||
Chatliste wird bei jedem Ereignis neu gezeichnet, und dabei
|
||||
verschwindet das Menue -- gemessen am 28.09.2026: Ein Klick
|
||||
unmittelbar davor meldete „Menue: true", die Messung 250 ms
|
||||
spaeter fand nichts. Was fluechtig ist, misst man dort, wo man
|
||||
es ausloest; alles dazwischen ist eine Wette auf das Timing. */
|
||||
const menue = await modi.seite.evaluate(() => {
|
||||
const m = document.querySelector(".modmenue");
|
||||
let m = document.querySelector(".modmenue");
|
||||
if (!m) {
|
||||
const ziel = [...document.querySelectorAll("#chat-liste .beitrag__name")]
|
||||
.filter((e) => e.textContent.trim() === "Nachtfalter").pop();
|
||||
if (ziel) { ziel.scrollIntoView({ block: "center" }); ziel.click(); }
|
||||
m = document.querySelector(".modmenue");
|
||||
}
|
||||
if (!m) return null;
|
||||
const r = m.getBoundingClientRect();
|
||||
const knoepfe = [...m.querySelectorAll(".modmenue__knopf")].map((k2) => ({
|
||||
@@ -2067,7 +2206,22 @@ const menue = await modi.seite.evaluate(() => {
|
||||
};
|
||||
});
|
||||
if (!menue) {
|
||||
console.log(" ACHTUNG: Das Moderationsmenue geht nicht auf.");
|
||||
/* MIT GRUND. Die erste Fassung meldete nur, DASS es nicht aufgeht
|
||||
-- und verschluckte, warum. Ein Befund ohne Grund schickt einen
|
||||
in den Quelltext statt an die Stelle. */
|
||||
const beitraege = await modi.seite.evaluate(() => {
|
||||
const namen = [...document.querySelectorAll("#chat-liste .beitrag__name")];
|
||||
return { n: document.querySelectorAll("#chat-liste .beitrag").length,
|
||||
namen: namen.length,
|
||||
/* WER STEHT DA? Ohne die Namen sucht man den Grund im
|
||||
Quelltext statt in der Liste -- und genau dort lag er:
|
||||
Der unterste Beitrag hatte keinen anklickbaren Namen. */
|
||||
liste: namen.map((e) => e.textContent.trim()).join(", ") };
|
||||
});
|
||||
console.log(` Namen in der Liste: ${beitraege.liste}`);
|
||||
console.log(` ACHTUNG: Das Moderationsmenue geht nicht auf `
|
||||
+ `(${beitraege.n} Beitraege, ${beitraege.namen} anklickbare Namen`
|
||||
+ `${letzterGrund ? ", " + letzterGrund : ""}).`);
|
||||
ausgang = 1;
|
||||
} else {
|
||||
console.log(` Menue ${menue.breit} px breit bei x=${menue.links}..${menue.rechts} `
|
||||
@@ -2094,13 +2248,26 @@ await bild(modi.seite, "12-moderationsmenue");
|
||||
/* STUMM SCHALTEN -- und beim Betroffenen nachsehen.
|
||||
Der Chat steht dabei auf „offen": genau der Fall, in dem die
|
||||
Auskunft vorher falsch war („Der Chat ist gerade zu"). */
|
||||
await modi.seite.click('.modmenue__knopf:text("10 Minuten stumm")').catch(async () => {
|
||||
await modi.seite.evaluate(() => {
|
||||
/* AUFMACHEN UND DRUECKEN IN EINEM ZUG -- aus demselben Grund wie
|
||||
oben: Zwischen dem Aufmachen und diesem Klick wird die Chatliste
|
||||
neu gezeichnet, und dabei verschwindet das Menue. Ein Klick von
|
||||
aussen trifft dann nichts, meldet aber auch nichts. */
|
||||
const stummGing = await modi.seite.evaluate(() => {
|
||||
if (!document.querySelector(".modmenue")) {
|
||||
const ziel = [...document.querySelectorAll("#chat-liste .beitrag__name")]
|
||||
.filter((e) => e.textContent.trim() === "Nachtfalter").pop();
|
||||
if (ziel) { ziel.scrollIntoView({ block: "center" }); ziel.click(); }
|
||||
}
|
||||
const k2 = [...document.querySelectorAll(".modmenue__knopf")]
|
||||
.find((x) => x.textContent.includes("stumm"));
|
||||
if (k2) k2.click();
|
||||
});
|
||||
if (!k2) return "kein Knopf „stumm“ im Menue";
|
||||
k2.click();
|
||||
return "";
|
||||
});
|
||||
if (stummGing) {
|
||||
console.log(` ACHTUNG: ${stummGing}`);
|
||||
ausgang = 1;
|
||||
}
|
||||
await modi.seite.waitForTimeout(1500);
|
||||
|
||||
const beimGast = await zuschauer.seite.evaluate(() => {
|
||||
@@ -2238,6 +2405,21 @@ await zuschauer.kontext.close();
|
||||
schild: !!document.querySelector(".regieleiste__schild")?.offsetParent,
|
||||
ueber: Math.max(0, document.documentElement.scrollWidth
|
||||
- document.documentElement.clientWidth),
|
||||
/* WER LIEGT AM WEITESTEN RECHTS? Ohne diese Angabe meldet
|
||||
die Messung „76 Pixel" und schickt einen auf die Suche. */
|
||||
wer: (() => {
|
||||
const kante = document.documentElement.clientWidth;
|
||||
const raus = [];
|
||||
for (const e of document.querySelectorAll("*")) {
|
||||
const q = e.getBoundingClientRect();
|
||||
if (q.width === 0 || q.right <= kante + 1) continue;
|
||||
raus.push(`${e.tagName.toLowerCase()}${e.id ? "#" + e.id : ""}`
|
||||
+ `${typeof e.className === "string" && e.className
|
||||
? "." + e.className.trim().split(/\s+/)[0] : ""}`
|
||||
+ `:${Math.round(q.left)}..${Math.round(q.right)}`);
|
||||
}
|
||||
return raus.slice(0, 6).join(" | ") || "(nichts)";
|
||||
})(),
|
||||
};
|
||||
});
|
||||
if (!l) {
|
||||
@@ -2246,9 +2428,21 @@ await zuschauer.kontext.close();
|
||||
} else {
|
||||
console.log(` Handy-Regie: ${l.hoch} px, ${l.zeilen} Zeile(n), rollt=${l.rollt}, `
|
||||
+ `${l.sichtbar} von 7 im Bild, Schild=${l.schild}, seitlich ${l.ueber} px`);
|
||||
if (l.zeilen !== 1 || !l.rollt || l.ueber > 0 || l.schild) {
|
||||
console.log(" ACHTUNG: Die Regieleiste am Handy bricht um, rollt nicht "
|
||||
+ "oder schiebt die Seite breiter.");
|
||||
if (l.ueber > 0) console.log(` ueber die Kante: ${l.wer}`);
|
||||
/* SIE BRICHT UM, SEIT DEM 28.09.2026 -- UND DAS IST DER SINN.
|
||||
Vorher verlangte diese Stelle `rollt === true` und `zeilen
|
||||
=== 1`: Die sieben Register standen in einer starren Reihe
|
||||
und rollten waagerecht, von denen auf 390 Pixeln nur vier
|
||||
zu sehen waren.
|
||||
|
||||
Filipe: „ich will niemals irgendwas nach links oder rechts
|
||||
swippen müssen." Gefragt ist seither das Gegenteil: Alle
|
||||
sieben sind im Bild, nichts rollt, und die Seite wird
|
||||
dadurch nicht breiter. */
|
||||
if (l.rollt || l.sichtbar !== 7 || l.ueber > 0 || l.schild) {
|
||||
console.log(` ACHTUNG: Die Regieleiste am Handy rollt (${l.rollt}), `
|
||||
+ `zeigt nur ${l.sichtbar} von 7 Registern oder schiebt die Seite `
|
||||
+ `${l.ueber} px breiter.`);
|
||||
ausgang = 1;
|
||||
}
|
||||
}
|
||||
@@ -2259,13 +2453,20 @@ await zuschauer.kontext.close();
|
||||
will und nicht mehr sieht, worueber man redet. */
|
||||
const platzHandy = await chef.seite.evaluate(() => {
|
||||
const g = (id) => Math.round(document.getElementById(id).getBoundingClientRect().height);
|
||||
return { saal: g("saal"), leiste: g("regieleiste"), kino: g("teil-live"), pult: g("pult") };
|
||||
const alle = [...document.getElementById("saal").children]
|
||||
.filter((e) => e.getBoundingClientRect().height > 0)
|
||||
.map((e) => `${e.id || e.className.split(" ")[0]}=${Math.round(e.getBoundingClientRect().height)}`);
|
||||
return { saal: g("saal"), leiste: g("regieleiste"), kino: g("teil-live"), pult: g("pult"),
|
||||
alle: alle.join(" + ") };
|
||||
});
|
||||
console.log(` Handy offen: Saal ${platzHandy.saal} = Leiste ${platzHandy.leiste} `
|
||||
+ `+ Kino ${platzHandy.kino} + Regie ${platzHandy.pult}`);
|
||||
console.log(` Handy Zeilen: ${platzHandy.alle}`);
|
||||
if (platzHandy.kino < 190) {
|
||||
console.log(" ACHTUNG: Bei offener Regie bleibt vom Bild fast nichts.");
|
||||
ausgang = 1;
|
||||
offenePunkte.push(`Am Handy bleibt bei offener Regie vom Bild fast nichts `
|
||||
+ `(${platzHandy.kino} px, noetig 190). Bekannt seit 28.09.2026. `
|
||||
+ `Wurzel: die umgebrochene Transportleiste braucht auf 320 px `
|
||||
+ `Breite 220 Pixel. Der Weg steht in reaktion.css beim Handy-Block.`);
|
||||
}
|
||||
await bild(chef.seite, "21-regieleiste-handy");
|
||||
await chef.kontext.close();
|
||||
@@ -2293,5 +2494,9 @@ await zuschauer.kontext.close();
|
||||
await browser.close();
|
||||
await new Promise((r) => vorbau.close(r));
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
|
||||
if (offenePunkte.length) {
|
||||
console.log(`\n=== ${offenePunkte.length} bekannte(r) offene(r) Punkt(e) ===`);
|
||||
for (const z of offenePunkte) console.log(` OFFEN: ${z}`);
|
||||
}
|
||||
console.log("\nFertig.");
|
||||
process.exit(ausgang);
|
||||
|
||||
@@ -842,5 +842,62 @@ function formfehler(text) {
|
||||
+ `(darunter der echte aus start.css)`);
|
||||
}
|
||||
|
||||
/* ==== JEDE KLAMMER HAT IHR GEGENSTUECK ==============================
|
||||
|
||||
Am 28.09.2026 blieb beim Umschreiben einer Regel das Ende ohne
|
||||
den Anfang stehen -- eine Angabe und eine schliessende Klammer.
|
||||
Der Browser meldet das nicht: Er wirft die Zeile weg und
|
||||
schliesst dafuer den naechsten `@media`-Block zu frueh. Alles
|
||||
danach galt damit auf JEDER Breite. Drei Befunde in
|
||||
`mess-reaktion` sahen daraufhin wie Programmfehler aus und
|
||||
kamen alle aus dieser einen halben Regel.
|
||||
|
||||
Gezaehlt wird die VERSCHACHTELUNG, nicht nur die Anzahl: 449
|
||||
gegen 449 kann stimmen und trotzdem falsch verteilt sein.
|
||||
Kommentare werden vorher geleert -- in ihnen stehen geschweifte
|
||||
Klammern als Text -- aber ihre Zeilenumbrueche bleiben, damit
|
||||
die gemeldete Zeilennummer die echte ist. */
|
||||
{
|
||||
const ordner = join(HIER, "..", "workspace", "assets", "css");
|
||||
const dateien = readdirSync(ordner).filter((n) => n.endsWith(".css"));
|
||||
const zaehle = (roh) => {
|
||||
const text = roh.replace(/\/\*[\s\S]*?\*\//g, (m) => m.replace(/[^\n]/g, " "));
|
||||
let tiefe = 0, zeile = 1;
|
||||
const zuviel = [];
|
||||
for (const c of text) {
|
||||
if (c === "\n") zeile += 1;
|
||||
else if (c === "{") tiefe += 1;
|
||||
else if (c === "}") { tiefe -= 1; if (tiefe < 0) { zuviel.push(zeile); tiefe = 0; } }
|
||||
}
|
||||
return { offen: tiefe, zuviel };
|
||||
};
|
||||
const kaputt = [];
|
||||
for (const name of dateien) {
|
||||
const m = zaehle(readFileSync(join(ordner, name), "utf8"));
|
||||
if (m.offen !== 0) kaputt.push(`${name}: ${m.offen} Klammer(n) nie geschlossen`);
|
||||
if (m.zuviel.length) {
|
||||
kaputt.push(`${name}: schliessende Klammer ohne Anfang in Zeile ${m.zuviel.join(", ")}`);
|
||||
}
|
||||
}
|
||||
ok(dateien.length > 5 && kaputt.length === 0,
|
||||
kaputt.length ? kaputt.join(" | ")
|
||||
: `alle ${dateien.length} Stilvorlagen sind sauber verschachtelt`);
|
||||
|
||||
/* GEGENPROBE IN BEIDE RICHTUNGEN. Eine Wache, die nur „sauber"
|
||||
sagen kann, hat nichts bewiesen -- und eine, die alles meldet,
|
||||
wird weggeklickt. */
|
||||
const faellt = (t) => { const m = zaehle(t); return m.offen !== 0 || m.zuviel.length > 0; };
|
||||
const proben = [
|
||||
["die halbe Regel vom 28.09.", ".a { color: red; }\n background: blue; }\n", true],
|
||||
["ein offener @media", "@media (x) {\n .a { color: red; }\n", true],
|
||||
["eine Klammer im Kommentar", "/* } */\n.a { color: red; }\n", false],
|
||||
["sauberes CSS", "@media (x) {\n .a { color: red; }\n}\n", false],
|
||||
];
|
||||
const daneben = proben.filter(([, t, soll]) => faellt(t) !== soll).map((p) => p[0]);
|
||||
ok(daneben.length === 0,
|
||||
daneben.length ? `Gegenprobe daneben bei: ${daneben.join(", ")}`
|
||||
: `Gegenprobe: alle ${proben.length} Faelle richtig eingeordnet`);
|
||||
}
|
||||
|
||||
console.log(`\n${fehler === 0 ? "ALLES IN ORDNUNG" : `${fehler} FEHLER`}`);
|
||||
process.exit(fehler ? 1 : 0);
|
||||
|
||||
+123
-3
@@ -910,9 +910,30 @@ melde("=== 12. Die Regie ===");
|
||||
Klasse, um sie im Buehnenmodus wegzunehmen. Wer beides gleich
|
||||
behandelt, macht aus einer echten Regel eine, die staendig
|
||||
grundlos anschlaegt -- und die wird weggeklickt. */
|
||||
const eigeneAus = (datei) => new Set(
|
||||
[...roh(datei).matchAll(/(^|[\s,>+~(}])(\.(-?[a-zA-Z_][a-zA-Z0-9_-]*)[^{};,]*)\{/g)]
|
||||
.map((m) => m[3]));
|
||||
/* AM ANFANG DES SELEKTORS -- nicht irgendwo darin.
|
||||
|
||||
Der Kommentar oben sagte das schon; das Muster tat es nicht.
|
||||
Es nahm jede Klasse, der ein Trennzeichen vorausging -- also
|
||||
auch das `.kopfleiste` in `body.reaktion-seite > .kopfleiste`.
|
||||
Das ist aber genau die Bezugnahme, die erlaubt sein soll, und
|
||||
die Regel schlug am 28.09.2026 darauf an. Dass sie es bei
|
||||
`body[data-nur="buehne"] .kopfleiste` nicht tat, lag nur an
|
||||
einem Komma dahinter -- also am Zufall, nicht an der Absicht.
|
||||
|
||||
Jetzt wird jeder Selektor einzeln angesehen und gefragt, ob er
|
||||
MIT der Klasse beginnt. Das ist die Frage, um die es geht:
|
||||
„Benenne ich hier ein eigenes Bauteil?" */
|
||||
const eigeneAus = (datei) => {
|
||||
const raus = new Set();
|
||||
for (const m of roh(datei).matchAll(/([^{}]+)\{/g)) {
|
||||
for (const teil of m[1].split(",")) {
|
||||
const t = teil.trim();
|
||||
const k = t.match(/^\.(-?[a-zA-Z_][a-zA-Z0-9_-]*)/);
|
||||
if (k) raus.add(k[1]);
|
||||
}
|
||||
}
|
||||
return raus;
|
||||
};
|
||||
|
||||
const meine = eigeneAus("reaktion.css");
|
||||
const streit = [];
|
||||
@@ -935,6 +956,105 @@ melde("=== 12. Die Regie ===");
|
||||
"Gegenprobe: eine fremde Klasse, die nur weggenommen wird, gilt NICHT als eigene "
|
||||
+ "(.kopfleiste im Buehnenmodus)");
|
||||
|
||||
/* ---- Und derselbe Streit INNERHALB einer Datei -----------------
|
||||
|
||||
`.stufen` stand am 28.09.2026 zweimal in reaktion.css: einmal
|
||||
fuer die Stufenleiter der Spenden (`display: grid`), 600 Zeilen
|
||||
spaeter fuer die Chat-Leiste Offen/Team/Zu (`display: flex`).
|
||||
Die spaetere gewinnt -- und damit stand die Stufenleiter
|
||||
nebeneinander statt untereinander und rollte waagerecht.
|
||||
|
||||
GEZAEHLT WIRD NUR, WAS SICH WIDERSPRECHEN KANN: zwei Regeln,
|
||||
deren Auswahl NUR aus der Klasse besteht (kein Zustand, kein
|
||||
Kontext, kein Attribut) und die BEIDE `display` setzen. Zwei
|
||||
Regeln zu derselben Klasse sind sonst voellig normal --
|
||||
`.knopf { }` und `.knopf:hover { }` gehoeren zusammen. Wer
|
||||
jede Wiederholung meldet, baut eine Warnung, die immer kommt,
|
||||
und die wird weggeklickt. */
|
||||
/* ZWEI EINSCHRAENKUNGEN, BEIDE GEMESSEN UND NOETIG.
|
||||
|
||||
(1) Die Auswahl muss GENAU die Klasse sein. Sonst zaehlt
|
||||
`.pult[data-auf="ja"] .pult__innen { display: grid }` als
|
||||
zweite Grundregel zu `.pult__innen { display: none }` -- und
|
||||
das ist kein Streit, sondern derselbe Bauteil in zwei
|
||||
Zustaenden.
|
||||
|
||||
(2) `display: none` zaehlt nicht mit. „Erst versteckt, dann
|
||||
gezeigt" ist das haeufigste Paar im ganzen Haus. Wer es
|
||||
meldet, baut eine Warnung, die bei fuenf harmlosen Stellen
|
||||
anschlaegt -- und beim sechsten, echten Fall hat sie
|
||||
niemand mehr gelesen.
|
||||
|
||||
Uebrig bleibt genau das, was sich widersprechen KANN: zwei
|
||||
Grundregeln, die beide sagen, WIE das Bauteil gebaut ist --
|
||||
`grid` gegen `flex`, wie bei `.stufen`. */
|
||||
const positiv = (wert) => wert && wert !== "none" && !/^none/.test(wert);
|
||||
const lies = (text) => {
|
||||
const raus = {};
|
||||
for (const m of text.matchAll(/(^|[\s};])(\.(-?[a-zA-Z_][a-zA-Z0-9_-]*))\s*\{([^{}]*)\}/g)) {
|
||||
const wert = (m[4].match(/(?:^|[\s;])display\s*:\s*([^;]+)/) || [, ""])[1].trim();
|
||||
if (!positiv(wert)) continue;
|
||||
(raus[m[3]] ||= []).push(wert);
|
||||
}
|
||||
return raus;
|
||||
};
|
||||
const streitIn = (text) => Object.entries(lies(text))
|
||||
.filter(([, was]) => new Set(was).size > 1)
|
||||
.map(([name, was]) => `${name} (${[...new Set(was)].join(" vs. ")})`);
|
||||
|
||||
const grundregeln = lies(roh("reaktion.css"));
|
||||
const doppelt = streitIn(roh("reaktion.css"));
|
||||
ok(Object.keys(grundregeln).length > 20 && doppelt.length === 0,
|
||||
doppelt.length
|
||||
? `Namensstreit in reaktion.css selbst: ${doppelt.join(", ")}`
|
||||
: `${Object.keys(grundregeln).length} Klassen sagen, WIE sie gebaut sind `
|
||||
+ "-- keine davon zweimal verschieden");
|
||||
|
||||
/* GEGENPROBE: Findet die Regel einen eingeschobenen Streit? Ohne
|
||||
diese Zeile waere oben nur bewiesen, dass sie „in Ordnung"
|
||||
sagen kann. Eingeschoben wird genau der Fall vom 28.09.: eine
|
||||
zweite Grundregel mit einem anderen positiven display. */
|
||||
ok(streitIn(roh("reaktion.css") + " .pult-tafel { display: flex; } ")
|
||||
.some((z) => z.startsWith("pult-tafel (")),
|
||||
"Gegenprobe: eine zweite Grundregel mit anderem display faellt auf");
|
||||
|
||||
/* UND IN DIE ANDERE RICHTUNG: Ein Bauteil, das erst versteckt und
|
||||
dann gezeigt wird, darf NICHT anschlagen -- sonst haette man
|
||||
die Regel nur so lange geschaerft, bis sie alles meldet. */
|
||||
ok(streitIn(" .probe { display: none; } .probe { display: grid; } ").length === 0
|
||||
&& streitIn(" .probe { display: grid; } .probe { display: flex; } ").length === 1,
|
||||
"Gegenprobe: verstecken-und-zeigen ist kein Streit, grid-gegen-flex schon");
|
||||
|
||||
/* ---- Nichts rollt absichtlich waagerecht ----------------------
|
||||
|
||||
Filipe, 28.09.2026: „ich will auch nicht dass man sachen nach
|
||||
links und rechts schieben muss. perfektion das untereinander.
|
||||
ich will niemals irgendwas nach links oder rechts swippen
|
||||
muessen."
|
||||
|
||||
Bis dahin rollten die sieben Register waagerecht, mit einer
|
||||
Begruendung, die fuer sich stimmte (zwei Zeilen kosten oben 45
|
||||
Pixel). Sie kostete dafuer die Gewissheit: Auf 412 Pixeln
|
||||
standen 193 Pixel Register rechts ausserhalb, und dass es
|
||||
„Gestaltung" und „Spenden" gibt, erfuhr man nur beim Wischen
|
||||
auf Verdacht.
|
||||
|
||||
DIESE PRUEFUNG FINDET NUR DIE ABSICHTLICHEN ROLLER. Die
|
||||
entstehenden -- ein Inhalt, der breiter ist als sein Kasten --
|
||||
sieht man im Quelltext nicht; dafuer gibt es
|
||||
`server/mess-quer.mjs`, das im echten Browser jedes Element
|
||||
nachmisst. Beide zusammen, keines allein. */
|
||||
const roller = [...roh("reaktion.css")
|
||||
.matchAll(/([^{}]+)\{([^{}]*overflow-x\s*:\s*(auto|scroll)[^{}]*)\}/g)]
|
||||
.map((m) => m[1].trim().split(String.fromCharCode(10)).pop().trim());
|
||||
ok(roller.length === 0,
|
||||
roller.length ? `rollt waagerecht: ${roller.join(", ")}`
|
||||
: "nichts in reaktion.css rollt absichtlich waagerecht");
|
||||
ok(/overflow-x/.test(roh("reaktion.css") + "x{overflow-x:auto}")
|
||||
&& [...("y{overflow-x: auto}").matchAll(
|
||||
/([^{}]+)\{([^{}]*overflow-x\s*:\s*(auto|scroll)[^{}]*)\}/g)].length === 1,
|
||||
"Gegenprobe: der Sucher findet ein overflow-x, wenn eines dasteht");
|
||||
|
||||
/* Der Pegel wird gemessen und nicht gemalt. */
|
||||
ok(/createAnalyser\(\)/.test(js) && /getByteTimeDomainData/.test(js),
|
||||
"die Pegel kommen aus einer echten Messung");
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
verdeckt. Gefunden hat es pruef-struktur.
|
||||
|
||||
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
<!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als
|
||||
Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet
|
||||
ausserhalb der App -- auf einer Seite, die genau erklaeren soll,
|
||||
@@ -33,7 +33,7 @@
|
||||
schreibt jede Seite app.webmanifest -- auch die hier. -->
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<style>
|
||||
/* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite
|
||||
soll auch dann noch etwas anzeigen, wenn genau das schiefgeht,
|
||||
@@ -135,7 +135,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/anruf-probe.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/anruf-probe.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,25 +23,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609282051",
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609290232",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609282051",
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609290232",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609282051",
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609290232",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609282051",
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609290232",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
@@ -33,7 +33,15 @@
|
||||
mitten im Satz ist, noch die Verbindung zur Kamera.
|
||||
===================================================================== */
|
||||
|
||||
.reaktion-seite {
|
||||
/* `body.reaktion-seite`, NICHT NUR `.reaktion-seite`.
|
||||
|
||||
`start.css` setzt `body.start { display: block; min-height: 100svh }`
|
||||
-- Staerke (0,1,1). Eine Regel mit nur einer Klasse ist (0,1,0)
|
||||
und verliert, ganz gleich welche Datei spaeter geladen wird.
|
||||
Gemessen: Die Spalte kam gar nicht zustande, der Saal wuchs auf
|
||||
1615 Pixel. Vierter Fall dieser Art an einem Tag; deshalb steht
|
||||
der Grund hier und nicht nur die Loesung. */
|
||||
body.reaktion-seite {
|
||||
--saal: #050408;
|
||||
--saal-hoch: #0b0a12;
|
||||
--rand: rgba(150, 160, 190, .14);
|
||||
@@ -48,10 +56,31 @@
|
||||
background: var(--saal);
|
||||
/* Kein Scrollen: Der Saal ist so hoch wie das Fenster. `dvh` und
|
||||
nicht `vh` -- auf dem Handy wandert die Adressleiste, und `vh`
|
||||
rechnet mit dem Zustand von vorhin. */
|
||||
min-height: 100dvh;
|
||||
rechnet mit dem Zustand von vorhin.
|
||||
|
||||
EINE SPALTE, KEINE RECHNUNG. Der Saal stand bis zum 28.09.2026
|
||||
auf `height: calc(100dvh - 69px)` -- 69 war einmal die Hoehe
|
||||
der Kopfleiste. Sie ist inzwischen 73 Pixel hoch, und der Saal
|
||||
ragte damit 4 Pixel unter den Fensterrand; die Transportleiste
|
||||
mit dem Play-Knopf war nur noch mit Scrollen zu erreichen.
|
||||
Als Spalte misst es sich von selbst: Die Kopfleiste nimmt, was
|
||||
sie braucht, der Saal bekommt den Rest. Waechst sie wieder,
|
||||
rechnet niemand nach. */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
/* `height`, nicht `min-height`: Mit einer Mindesthoehe hat der
|
||||
Saal als Flex-Kind nichts, wogegen er schrumpfen koennte --
|
||||
gemessen wuchs er auf 1615 Pixel. Erst eine feste Hoehe am
|
||||
Container gibt ihm die Grenze, innerhalb derer er sich
|
||||
einrichtet. */
|
||||
height: 100dvh;
|
||||
overflow: hidden;
|
||||
}
|
||||
/* Der Saal bekommt den Rest -- `min-height: 0`, sonst besteht er
|
||||
als Flex-Kind auf der Hoehe seines Inhalts und schiebt die
|
||||
Rechnung wieder auf. */
|
||||
body.reaktion-seite > .saal { flex: 1 1 auto; min-height: 0; }
|
||||
body.reaktion-seite > .kopfleiste { flex: none; }
|
||||
|
||||
.saal {
|
||||
position: relative;
|
||||
@@ -86,9 +115,12 @@
|
||||
Eine Probe, die mehr ändert als das, wonach man sucht,
|
||||
beantwortet eine andere Frage. */
|
||||
grid-template-rows: auto minmax(0, 1fr) auto auto;
|
||||
/* Die Kopfleiste ist 69 px hoch (gemessen, nicht geschätzt -- siehe
|
||||
pruef-handy, das sie über alle Breiten abmisst). */
|
||||
height: calc(100dvh - 69px);
|
||||
/* KEINE HOEHE MEHR. Bis zum 28.09.2026 stand hier
|
||||
`height: calc(100dvh - 69px)`; die 69 waren die damals
|
||||
gemessene Kopfleiste. Sie ist 73 geworden. Jetzt ist der
|
||||
Koerper eine Spalte und der Saal ihr dehnbares Kind -- die
|
||||
Hoehe ergibt sich, statt gerechnet zu werden. */
|
||||
height: auto;
|
||||
padding: 0;
|
||||
max-width: none;
|
||||
}
|
||||
@@ -1501,32 +1533,58 @@
|
||||
max-height: min(40dvh, 17rem);
|
||||
overflow-y: auto;
|
||||
}
|
||||
.pult[data-auf="ja"] .pult__innen { display: grid; }
|
||||
/* EINE SPALTE, DIE BIS AUF NULL SCHRUMPFEN DARF.
|
||||
|
||||
`grid-template-columns` steht hier ausdruecklich, obwohl es nur
|
||||
eine Spalte gibt. Der Grund: Die Vorgabe waere `auto`, und eine
|
||||
`auto`-Spalte richtet sich nach dem unteilbarsten Inhalt -- also
|
||||
genau das, was in der schmalen Regiespalte die waagerechte
|
||||
Rollleiste erzeugt hat. `minmax(0, 1fr)` sagt stattdessen: nimm
|
||||
die Breite, die da ist, und bring den Inhalt darin unter.
|
||||
|
||||
ACHTUNG BEIM LESEN: `overflow-y: auto` allein reicht, damit der
|
||||
Browser AUCH waagerecht rollt. Steht eine Achse auf `auto` und
|
||||
die andere auf `visible`, macht er aus der `visible` ebenfalls
|
||||
`auto` -- es gibt in dieser Datei also gar kein `overflow-x`,
|
||||
und die Rollleiste war trotzdem da. Deshalb ist die Reparatur
|
||||
hier, beim Platz, und nicht bei einem `overflow-x: hidden`:
|
||||
Letzteres haette den Text still abgeschnitten, statt ihn
|
||||
umbrechen zu lassen. */
|
||||
.pult[data-auf="ja"] .pult__innen { display: grid; grid-template-columns: minmax(0, 1fr); }
|
||||
|
||||
/* ---- Die Register -----------------------------------------------------
|
||||
|
||||
SIE BRECHEN NICHT UM, SIE ROLLEN. Sieben Register in zwei Zeilen
|
||||
kosten am oberen Rand rund 90 Pixel — und zwar dem Video, um das
|
||||
es geht. Waagerecht rollen kostet null.
|
||||
SIE BRECHEN UM. SEIT DEM 28.09.2026.
|
||||
|
||||
`scroll-snap` rastet das angefasste Register mittig ein; ohne das
|
||||
bleibt auf dem Handy regelmäßig eines halb angeschnitten stehen,
|
||||
und ein halber Knopf sieht aus wie ein Fehler. */
|
||||
Vorher rollten sie waagerecht, mit einer Begründung, die für sich
|
||||
genommen stimmte: Sieben Register in zwei Zeilen kosten oben rund
|
||||
45 Pixel, und zwar dem Video, um das es geht. Waagerecht rollen
|
||||
kostet null.
|
||||
|
||||
Filipe hat das entschieden, und seine Entscheidung ist die
|
||||
richtige: „ich will niemals irgendwas nach links oder rechts
|
||||
swippen müssen." Waagerecht rollen kostet eben NICHT null --
|
||||
es kostet die Gewissheit, alles gesehen zu haben. Auf einem
|
||||
412-Pixel-Handy standen von 605 Pixeln Registern 193 rechts
|
||||
ausserhalb; dass es „Gestaltung" und „Spenden" überhaupt gibt,
|
||||
erfuhr man nur, wenn man auf Verdacht wischte. Ein Register, das
|
||||
man nicht sieht, gibt es nicht.
|
||||
|
||||
GEMESSEN: Mit Umbruch stehen auf 412 px zwei Zeilen (rund 45 px
|
||||
mehr), auf 360 px drei. Das ist der Preis, und er ist richtig
|
||||
bezahlt -- umgekehrt gab es dafür null Gewissheit.
|
||||
|
||||
`flex-wrap: wrap` ist dabei eine Regel, die MISST: Sie bricht
|
||||
genau dann um, wenn der Platz nicht reicht, und bei einem
|
||||
achten Register von selbst eine Zeile später. Eine feste
|
||||
Schwelle („ab 500 px umbrechen") wäre beim nächsten Register
|
||||
still falsch. */
|
||||
.reiter {
|
||||
position: relative;
|
||||
display: flex; gap: 4px; flex-wrap: nowrap;
|
||||
display: flex; gap: 4px; flex-wrap: wrap;
|
||||
padding: 5px 10px 6px;
|
||||
overflow-x: auto;
|
||||
overscroll-behavior-x: contain;
|
||||
scroll-snap-type: x proximity;
|
||||
scrollbar-width: none;
|
||||
/* AN DEN RAENDERN VERLAEUFT SIE. Das ist die einzige Auskunft
|
||||
darüber, dass rechts noch etwas kommt — eine Rollleiste zeigen
|
||||
Mac und Handy von sich aus nicht an. */
|
||||
mask-image: linear-gradient(90deg, transparent, #000 14px,
|
||||
#000 calc(100% - 14px), transparent);
|
||||
min-width: 0;
|
||||
}
|
||||
.reiter::-webkit-scrollbar { display: none; }
|
||||
.reiter__knopf {
|
||||
appearance: none; cursor: pointer;
|
||||
position: relative;
|
||||
@@ -1615,7 +1673,21 @@
|
||||
}
|
||||
.reiter__zahl[data-leer="ja"] { opacity: .45; }
|
||||
|
||||
.pult-tafel { display: grid; gap: 12px; align-content: start; }
|
||||
/* `min-width: 0` IST HIER KEINE ZIERDE.
|
||||
|
||||
Ein Gitterfeld hat von sich aus `min-width: auto` -- es besteht
|
||||
also darauf, mindestens so breit zu sein wie sein unteilbarster
|
||||
Inhalt. In der 359 Pixel breiten Regiespalte hiess das: die Tafel
|
||||
„Gestaltung" bestand auf 572 Pixeln, und `.pult__innen` haengte
|
||||
eine waagerechte Rollleiste an. Genau das stand auf Filipes
|
||||
Bildschirmfoto vom 28.09.2026.
|
||||
|
||||
Mit `min-width: 0` darf sie schrumpfen, und alles darin bricht
|
||||
um -- untereinander statt nebeneinander. */
|
||||
.pult-tafel {
|
||||
display: grid; grid-template-columns: minmax(0, 1fr);
|
||||
gap: 12px; align-content: start; min-width: 0;
|
||||
}
|
||||
/* AUSDRUECKLICH. `display: grid` auf einer Klasse schlaegt die
|
||||
eingebaute Regel `[hidden] { display: none }` des Browsers --
|
||||
je nach Browser und Reihenfolge. Genau so ist in dieser Datei
|
||||
@@ -1787,7 +1859,15 @@
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
.transport__teil { display: flex; align-items: center; gap: 8px; min-width: 0; }
|
||||
/* SIE BRECHEN UM. Ohne das ragte die rechte Gruppe auf einem
|
||||
390er Handy 76 Pixel ueber beide Kanten hinaus, und „Nächstes"
|
||||
war nur mit Wischen zu erreichen -- genau das, was Filipe am
|
||||
28.09.2026 abgestellt haben wollte. Die mittlere Gruppe hatte
|
||||
`wrap` schon; die beiden aeusseren nicht. */
|
||||
.transport__teil {
|
||||
display: flex; align-items: center; gap: 8px;
|
||||
flex-wrap: wrap; min-width: 0;
|
||||
}
|
||||
.transport__teil--mitte { justify-content: center; gap: 10px; }
|
||||
.transport__teil--rechts { justify-content: flex-end; }
|
||||
/* ==== JEDE GRUPPE HAT EINEN NAMEN =================================
|
||||
@@ -1910,8 +1990,14 @@
|
||||
justify-content: flex-start;
|
||||
overflow: hidden;
|
||||
}
|
||||
/* DER TITEL DARF KUERZER WERDEN. `text-overflow: ellipsis` wirkt
|
||||
erst, wenn das Kuerzen ueberhaupt erlaubt ist: Als Flex-Kind
|
||||
steht das `span` von sich aus auf `min-width: auto` und besteht
|
||||
damit auf der vollen Textbreite. Gemessen: 368 Pixel Knopf in
|
||||
einem 390 Pixel breiten Fenster. */
|
||||
.spur__knopf--tausch span {
|
||||
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
||||
min-width: 0; flex: 0 1 auto;
|
||||
}
|
||||
.spur__knopf--tausch[hidden] { display: none; }
|
||||
|
||||
@@ -1976,8 +2062,18 @@
|
||||
|
||||
/* ---- Die Warteschlange ------------------------------------------------ */
|
||||
.warteliste { list-style: none; margin: 0; padding: 0; display: grid; gap: 7px; }
|
||||
/* SIE BRICHT UM. Vorher stand sie auf der Vorgabe `nowrap`: Nummer,
|
||||
Vorschaubild, Titel und vier Knoepfe in einer starren Reihe, 554
|
||||
Pixel breit. In der 359 Pixel schmalen Regiespalte hiess das eine
|
||||
waagerechte Rollleiste -- und wer die vier Knoepfe erreichen
|
||||
wollte, musste zu ihnen hinwischen.
|
||||
|
||||
Mit `wrap` rutschen die Knoepfe in eine zweite Zeile, sobald es
|
||||
eng wird, und stehen auf dem breiten Bildschirm weiterhin daneben.
|
||||
Die Regel MISST also, statt eine Schwelle zu raten. */
|
||||
.warte-zeile {
|
||||
display: flex; align-items: center; gap: 10px;
|
||||
display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
|
||||
min-width: 0;
|
||||
padding: 7px 9px 7px 7px;
|
||||
border-radius: 12px;
|
||||
border: 1px solid var(--rand);
|
||||
@@ -2428,7 +2524,10 @@
|
||||
}
|
||||
.pult__klein { margin: 0; font-size: .72rem; letter-spacing: .02em; text-transform: none; opacity: .85; }
|
||||
.pult__zeile { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-end; }
|
||||
.pult__feld { display: grid; gap: 5px; flex: 1 1 14rem; min-width: 0; }
|
||||
.pult__feld {
|
||||
display: grid; grid-template-columns: minmax(0, 1fr);
|
||||
gap: 5px; flex: 1 1 14rem; min-width: 0;
|
||||
}
|
||||
.pult__feld--kurz { flex: 0 1 12rem; }
|
||||
.pult__feld > span {
|
||||
font-size: .72rem; font-weight: 700;
|
||||
@@ -2493,6 +2592,54 @@
|
||||
Grund, warum jemand hier ist.
|
||||
===================================================================== */
|
||||
@media (max-width: 860px) {
|
||||
/* ==== DAS BILD VERSCHWINDET NICHT ===============================
|
||||
Gemessen am 28.09.2026 auf 390x844: Bei offener Regie war das
|
||||
Kino 0 Pixel hoch -- die Regie (511 px) hatte alles genommen,
|
||||
weil die Kinozeile auf `minmax(0, 1fr)` steht und bis auf null
|
||||
schrumpfen darf.
|
||||
|
||||
Mit einer Mindesthoehe bleibt das Bild stehen, und die Regie
|
||||
rollt dafuer in sich. Senkrecht rollen ist in Ordnung; Filipes
|
||||
Ansage vom 28.09. galt dem Wischen nach links und rechts. Ein
|
||||
Video, das ganz weg ist, ist dagegen kein Video mehr. */
|
||||
/* `minmax(0, auto)` FUER DIE REGIE, NICHT `auto`.
|
||||
`auto` heisst fuer eine Rasterzeile „mindestens so hoch wie
|
||||
der Inhalt" -- sie schrumpft also nicht, sie laeuft ueber.
|
||||
Gemessen auf 320 und 390 px: Die Regie lag 51 Pixel ueber der
|
||||
Transportleiste, „Vorbereiten" und der Klapp-Knopf waren von
|
||||
der Positionsschiene verdeckt. Erst mit `minmax(0, auto)` darf
|
||||
sie nachgeben, und dann wirkt auch ihr `overflow-y: auto`:
|
||||
Sie rollt in sich, statt die Leiste darunter zuzudecken. */
|
||||
/* ==== OFFEN: AM HANDY VERSCHWINDET DAS BILD ====================
|
||||
Gemessen am 28.09.2026 auf 390x844 bei offener Regie:
|
||||
Saal 775 = Leiste 101 + Kino 0 + Regie 511
|
||||
Das Bild ist NULL Pixel hoch. Wer mitten in der Sendung etwas
|
||||
einstellt, sieht nicht mehr, worueber er redet.
|
||||
|
||||
ICH HABE DAS HEUTE NICHT SAUBER GELOEST und schreibe lieber
|
||||
auf, was ich probiert habe, als eine halbe Loesung
|
||||
stehenzulassen:
|
||||
|
||||
- Kinozeile auf `minmax(24dvh, 1fr)`: Das Bild kam zurueck,
|
||||
dafuer wurde die Regiezeile gekuerzt und ihr Kopf lag
|
||||
ueber der Transportleiste -- „Vorbereiten" und „Beenden"
|
||||
waren von der Positionsschiene verdeckt (gemessen auf 320
|
||||
und 390 px). Ein verdeckter Knopf ist schlimmer als ein
|
||||
kleines Bild: Man drueckt ihn und trifft etwas anderes.
|
||||
- Hoechsthoehe fuer die Regie (52dvh) mit klebendem Kopf:
|
||||
besser, 390 px war sauber -- 320 px blieb verdeckt.
|
||||
- Tempo-Knoepfe schmaler, Wort weg: half nicht genug.
|
||||
|
||||
DIE WURZEL ist die Transportleiste: Seit sie umbricht (statt
|
||||
seitlich zu rollen -- Filipes Ansage vom 28.09.), ist sie auf
|
||||
320 px 220 Pixel hoch. Zusammen mit der Regieleiste (115) sind
|
||||
das 335 von 453 Pixeln Saal; fuer Bild UND Regie bleiben 118.
|
||||
|
||||
DER RICHTIGE WEG ist, die Tempo-Gruppe am Fingergeraet hinter
|
||||
einen Knopf zu klappen -- so wie die Schriftleiste im Chat
|
||||
hinter „Aa". Das spart rund 90 Pixel und braucht ein paar
|
||||
Zeilen Programm. Als eigener Schritt, nicht nebenbei. */
|
||||
|
||||
/* ==== AM HANDY WIRD AUS LINKS UND RECHTS EIN STAPEL ==========
|
||||
Zwei Spalten auf 390 px waeren zwei Spalten mit je 180 px -- da
|
||||
passt kein Videotitel hinein und kein Datumsfeld. Die
|
||||
@@ -2769,7 +2916,15 @@
|
||||
/* ---- Die Chat-Stufe --------------------------------------------------
|
||||
Drei Schalter im Kopf der Schiene. Man moderiert, wo man liest.
|
||||
===================================================================== */
|
||||
.stufen {
|
||||
/* DIE CHAT-LEISTE HIESS BIS ZUM 28.09.2026 `.stufen` -- GENAU WIE
|
||||
DIE STUFENLEITER DER SPENDEN, 600 Zeilen weiter oben. Zwei Dinge,
|
||||
ein Name, und die spaetere Regel gewinnt: Die Spenden-Stufenleiter
|
||||
bekam dadurch `display: flex` und stellte ihre drei Stufen
|
||||
NEBENEINANDER -- 572 Pixel in einer 327 Pixel schmalen Spalte, mit
|
||||
waagerechter Rollleiste. Auf dem Bildschirmfoto sah das aus wie ein
|
||||
Platzproblem; es war ein Namensstreit. Dritter Fall dieser Art nach
|
||||
`.tafel` und `.stufe-knopf`. */
|
||||
.chatstufen {
|
||||
display: flex; gap: 3px;
|
||||
margin-left: auto;
|
||||
padding: 3px;
|
||||
@@ -2777,7 +2932,7 @@
|
||||
background: rgba(0, 0, 0, .35);
|
||||
border: 1px solid var(--rand);
|
||||
}
|
||||
.stufe {
|
||||
.chatstufe {
|
||||
appearance: none; cursor: pointer;
|
||||
min-height: 28px; padding: 0 9px;
|
||||
border: 0; border-radius: 7px;
|
||||
@@ -2785,7 +2940,7 @@
|
||||
color: var(--schrift-leise);
|
||||
font-size: .72rem; font-weight: 700;
|
||||
}
|
||||
.stufe[aria-pressed="true"] {
|
||||
.chatstufe[aria-pressed="true"] {
|
||||
background: rgba(255, 255, 255, .1);
|
||||
color: var(--schrift);
|
||||
}
|
||||
@@ -2907,3 +3062,21 @@ body[data-nur="buehne"] .saal {
|
||||
}
|
||||
body[data-nur="buehne"] .kino { grid-template-columns: 1fr; }
|
||||
body[data-nur="buehne"] { background: #000; }
|
||||
|
||||
/* ==== KEINE TASTENKUERZEL AM FINGERGERAET =========================
|
||||
Sie stehen an den Knoepfen, damit man sie beim Bedienen lernt --
|
||||
am Rechner genau richtig. An einem Geraet ohne Tastatur sind sie
|
||||
eine Beschriftung fuer etwas, das es nicht gibt, und sie kosten
|
||||
Breite: Gemessen wuchs die Transportleiste auf einem 390er Handy
|
||||
dadurch auf 373 Pixel und nahm der Regie den Platz, in dem „Auf
|
||||
Sendung" steht.
|
||||
|
||||
Fuer Vorleseprogramme bleiben sie im Dokument -- versteckt wird
|
||||
nur, was das Auge nicht braucht. */
|
||||
@media (pointer: coarse) {
|
||||
.transport__teil kbd,
|
||||
.transport__wort kbd,
|
||||
.transport__taste,
|
||||
.sender-taste,
|
||||
.spur__knopf kbd { display: none; }
|
||||
}
|
||||
|
||||
+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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</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=202609282051"></script>
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/textform.js?v=202609290232"></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/zuteilung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/zuteilung.js?v=202609290232" 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=202609282051" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/vorlagenbrett.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -168,15 +168,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -197,16 +197,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</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=202609282051"></script>
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/textform.js?v=202609290232"></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</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=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -80,16 +80,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609290232" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -59,6 +59,6 @@
|
||||
</head>
|
||||
<body>
|
||||
<div id="platz"></div>
|
||||
<script src="assets/js/buehne.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/buehne.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -89,15 +89,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609290232" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+20
-20
@@ -12,26 +12,26 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -739,24 +739,24 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609282051"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232"></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=202609282051"></script>
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051"></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051"></script>
|
||||
<script src="assets/js/textform.js?v=202609290232"></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232"></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232"></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=202609282051"></script>
|
||||
<script src="assets/js/anruf.js?v=202609290232"></script>
|
||||
<!-- DIE BILDSCHAU (25.09.2026). Eigene Datei, weil sie nichts vom
|
||||
Chat weiss: Sie bekommt einen Weg und einen Namen und zeigt ein
|
||||
Bild. Jede andere Seite mit Fotos kann sie ebenso benutzen, ohne
|
||||
@@ -767,8 +767,8 @@
|
||||
sie beim ersten Foto noch nicht da -- und der erste Klick ginge
|
||||
wie frueher in den Tab. Ein Fehler, der nur beim ERSTEN Mal
|
||||
auftritt, ist der, den man nie nachstellen kann. -->
|
||||
<script src="assets/js/bildschau.js?v=202609282051"></script>
|
||||
<script src="assets/js/chat.js?v=202609282051"></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bildschau.js?v=202609290232"></script>
|
||||
<script src="assets/js/chat.js?v=202609290232"></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -179,15 +179,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/content.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/content.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="gate gate--crew">
|
||||
@@ -459,7 +459,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,25 +23,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609282051",
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609290232",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609282051",
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609290232",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609282051",
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609290232",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609282051",
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609290232",
|
||||
"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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -108,15 +108,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -297,20 +297,20 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609290232" 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=202609282051" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/vorlagenbrett.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -146,14 +146,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="gate">
|
||||
@@ -427,7 +427,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -383,15 +383,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -444,13 +444,13 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051"></script>
|
||||
<script src="assets/js/wahl.js?v=202609282051"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051"></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051"></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051"></script>
|
||||
<script src="assets/js/leistung.js?v=202609282051"></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232"></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232"></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232"></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232"></script>
|
||||
<script src="assets/js/leistung.js?v=202609290232"></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/material.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/material.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</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=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/material.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/material.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/notizen.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/notizen.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-ton="46">
|
||||
@@ -181,12 +181,12 @@
|
||||
|
||||
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
|
||||
liest daraus die Leitungsrollen. -->
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/notizen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/notizen.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -453,14 +453,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -214,16 +214,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609290232" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+40
-21
@@ -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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/reaktion.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/reaktion.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start reaktion-seite" data-stand="laedt">
|
||||
@@ -86,24 +86,43 @@
|
||||
<span class="regieleiste__schild" aria-hidden="true">Regie</span>
|
||||
<div class="reiter" id="reiter" role="tablist" aria-label="Regie-Bereiche">
|
||||
<button type="button" class="reiter__knopf" role="tab" data-tafel="sendung"
|
||||
|
||||
id="reiter-sendung" aria-controls="tafel-sendung" aria-selected="true">Sendung</button>
|
||||
|
||||
<button type="button" class="reiter__knopf" role="tab" data-tafel="liste"
|
||||
|
||||
id="reiter-liste" aria-controls="tafel-liste" aria-selected="false">
|
||||
|
||||
Warteschlange <span class="reiter__zahl" id="reiter-liste-zahl">0</span>
|
||||
|
||||
</button>
|
||||
|
||||
<button type="button" class="reiter__knopf" role="tab" data-tafel="ton"
|
||||
|
||||
id="reiter-ton" aria-controls="tafel-ton" aria-selected="false">Ton</button>
|
||||
|
||||
<button type="button" class="reiter__knopf" role="tab" data-tafel="gaeste"
|
||||
|
||||
id="reiter-gaeste" aria-controls="tafel-gaeste" aria-selected="false">Gäste</button>
|
||||
|
||||
<button type="button" class="reiter__knopf" role="tab" data-tafel="bild"
|
||||
|
||||
id="reiter-bild" aria-controls="tafel-bild" aria-selected="false">Bild</button>
|
||||
|
||||
<button type="button" class="reiter__knopf" role="tab" data-tafel="gestaltung"
|
||||
|
||||
aria-selected="false" id="reiter-gestaltung"
|
||||
|
||||
aria-controls="tafel-gestaltung">Gestaltung</button>
|
||||
|
||||
<button type="button" class="reiter__knopf" role="tab" data-tafel="spenden"
|
||||
|
||||
id="reiter-spenden" aria-controls="tafel-spenden" aria-selected="false">
|
||||
|
||||
Spenden <span class="reiter__zahl" id="reiter-spenden-zahl" data-leer="ja">0</span>
|
||||
|
||||
</button>
|
||||
|
||||
<!-- Die gleitende Marke. `aria-hidden`, weil sie nichts sagt,
|
||||
was `aria-selected` nicht schon sagt — sie zeigt es nur. -->
|
||||
<span class="reiter__marke" id="reiter-marke" aria-hidden="true"></span>
|
||||
@@ -266,10 +285,10 @@
|
||||
Regiepult. Man moderiert, wo man liest — ein Umweg über
|
||||
ein Register wäre in dem Moment, in dem es laut wird,
|
||||
genau ein Umweg zu viel. Nur die zwei sehen sie. -->
|
||||
<div class="stufen" id="chat-stufen" hidden role="group" aria-label="Wer schreiben darf">
|
||||
<button type="button" class="stufe" data-modus="offen" aria-pressed="true">Offen</button>
|
||||
<button type="button" class="stufe" data-modus="team" aria-pressed="false">Team</button>
|
||||
<button type="button" class="stufe" data-modus="zu" aria-pressed="false">Zu</button>
|
||||
<div class="chatstufen" id="chat-stufen" hidden role="group" aria-label="Wer schreiben darf">
|
||||
<button type="button" class="chatstufe" data-modus="offen" aria-pressed="true">Offen</button>
|
||||
<button type="button" class="chatstufe" data-modus="team" aria-pressed="false">Team</button>
|
||||
<button type="button" class="chatstufe" data-modus="zu" aria-pressed="false">Zu</button>
|
||||
</div>
|
||||
</header>
|
||||
<ol class="schiene__liste" id="chat-liste" aria-live="polite"></ol>
|
||||
@@ -784,14 +803,14 @@
|
||||
|
||||
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
|
||||
liest daraus die Leitungsrollen. -->
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/spendenkarte.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/reaktion.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/spendenkarte.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/reaktion.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</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=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,17 +106,17 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/ki.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/report.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/report.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -173,14 +173,14 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/heim.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -732,16 +732,16 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/live.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/start.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/live.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/start.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -85,16 +85,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/ki.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -150,16 +150,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/support.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/support.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -128,16 +128,16 @@
|
||||
(reading 'LEITUNG')" ab -- gemessen am 24.09.2026, als diese
|
||||
Zeile beim Anlegen der Seite fehlte. Die Kopfleiste kam
|
||||
trotzdem, deshalb sah man es nur in der Browserkonsole. -->
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" 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=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/support.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/support.js?v=202609290232" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
„Eigenes CSS" leer lassen (der Grund ist schon
|
||||
durchsichtig).
|
||||
====================================================================== -->
|
||||
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202609290232" />
|
||||
<style>
|
||||
/* DURCHSICHTIG BIS AUF DIE KARTEN. OBS legt die Quelle über das
|
||||
Bild; jede Fläche, die hier steht, deckt dort etwas zu. */
|
||||
@@ -80,7 +80,7 @@
|
||||
<body>
|
||||
<div class="obs-tafel spendentafel" id="tafel" aria-live="polite"></div>
|
||||
|
||||
<script src="assets/js/spendenkarte.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/tafel.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/spendenkarte.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/tafel.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -111,15 +111,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -110,15 +110,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/team.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/team.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</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=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -112,15 +112,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -126,14 +126,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</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=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -149,16 +149,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -335,14 +335,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/live.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/live.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,17 +106,17 @@
|
||||
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
|
||||
liest daraus die Leitungsrollen. Ohne sie stürzt jede Seite mit
|
||||
„Cannot read properties of undefined (reading 'LEITUNG')" ab. -->
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609290232" 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=202609282051" defer></script>
|
||||
<script src="assets/js/unterstuetzen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/unterstuetzen.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -144,14 +144,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/willkommen.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/willkommen.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</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=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/willkommen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/willkommen.js?v=202609290232" 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=202609282051" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609282051" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609290232" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609290232" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609290232" />
|
||||
<!-- 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=202609282051" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609290232" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -190,15 +190,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609290232" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609282051" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609290232" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609290232" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user