Stufe 6 und 7: Der Treff wird ein Gespraech, jedes Brett bekommt seine Form
Damit sind alle acht Stufen des Plans gebaut. STUFE 6 -- DAS GESPRAECH "Der Treff -- Hallo sagen, fragen, loben" war eine Liste aus Karten. Der einzige Bereich, in dem Menschen MITEINANDER reden sollen, zwang sie, nebeneinander zu reden: Jeder schrieb eine eigene Karte, niemand antwortete jemandem. Jetzt: Antworten eingerueckt unter ihrem Beitrag, aelteste zuerst (so liest man ein Gespraech), mit Namen und Rolle. Das Feld steht immer da statt hinter einem "Antworten"-Knopf -- ein leeres Feld ist die deutlichste Einladung, die es gibt. Nur EINE Stufe eingerueckt: Auf 390 px ist bei der zweiten Schluss. Eine EIGENE Tabelle, kein Eintrag mit "antwort_auf": Eine Antwort hat keine Art, keinen Zustand, keine Frist und gehoert in keinen Filter. Als Eintrag gefuehrt haette sie zwanzig immer leere Spalten -- und tauchte in jeder Zaehlung auf, die Beitraege zaehlt. Und nicht ueberall: nur Treff und Wunschliste. Aus dem Plan, §9 -- ein Antwortfeld unter jedem Aushang hiesse, jeder Aushang muss betreut werden. ZWEI FEHLER, BEIDE VON DER PRUEFUNG GEFUNDEN 1. EIN PFAD, DER AUSSAH WIE EIN BEREICH. `/api/bereich/antwort/:id` lief in die Middleware auf `/api/bereich/:bereich` -- "antwort" ist kein Bereich. Fuer DogFather ging es (ein frueherer Zweig liess ihn durch), fuer einen Modi kam 404. Ein Weg, der je nach ROLLE an voellig anderer Stelle scheitert, sucht man lange. Liegt jetzt unter `/api/antwort/:id`. 2. UND EIN ECHTES LOCH. Die Loeschregel hiess `!darfSchreiben(req.person, "treff")` -- also "wer schreiben darf", und das duerfen Gaeste ab der Stufe "dabei". JEDER GAST HAETTE JEDE FREMDE ANTWORT LOESCHEN KOENNEN. Gefunden hat es eine Pruefung mit einer FALSCHEN Erwartung: Sie verlangte, dass ein Modi keine fremde Antwort loeschen kann. Das war falsch -- er moderiert ja --, aber der Weg dorthin hat das echte Problem freigelegt. Jetzt entscheidet TREFF_TEAM_ROLLEN. Der Gast-Fall ist ueber HTTP nicht messbar (er kommt nur ueber die crew-Adresse herein, und den Host-Kopf kann fetch nicht setzen). Statt stillschweigend zu ueberspringen prueft die Pruefung die REGEL selbst -- und dass die Route wirklich diese Menge benutzt. STUFE 7 -- JEDES BRETT BEKOMMT SEINE FORM - "Regeln & Hilfe" ist ein DOKUMENT: Sprungmarken oben, vier Abschnitte (Regel, Was passiert wenn, Hilfe, Haeufige Frage). Man schlaegt es im Streitfall auf und will FINDEN, nicht scrollen. scroll-margin-top, sonst verschwindet die angesprungene Ueberschrift unter der Kopfleiste und der Sprung sieht aus wie ins Leere. - "Anschlagbrett" zeigt grosse AUSHAENGE statt Zeilen -- gemessen 21 px Titel statt 17. Ein Aushang zwischen dreissig anderen ist kein Aushang. - "Mitmachen" gruppiert nach Art, die drei Schritte zuerst. UND EINE SCHRIFT, DIE ZU KLEIN WAR: Die Rollen-Marke an einer Antwort stand auf 11,2 px, die Hausgrenze liegt bei 11,5. Die Grenze anzuheben waere der bequeme Weg gewesen -- und ab da haette pruef-css-klassen nichts mehr gehalten. NEU: pruef-gespraech (27 Pruefungen) pruef-treff-start jetzt 34 (Stufe 7 mitgeprueft) Alle Community-Pruefungen gruen: gespraech 27, treff-start 34, kreislauf 23, countdown 22, wunschliste 30, galerie 26, bremse 16, treff 66, bereiche-lesend, css-klassen, deutsche-texte 12. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -0,0 +1,324 @@
|
||||
/* =====================================================================
|
||||
STUFE 6: DER TREFF WIRD EIN GESPRÄCH (17.09.2026)
|
||||
|
||||
"Der Treff -- Hallo sagen, fragen, loben" war eine Liste aus Karten.
|
||||
Der einzige Bereich, in dem Menschen MITEINANDER reden sollen,
|
||||
zwang sie, nebeneinander zu reden: Jeder schrieb eine eigene Karte,
|
||||
niemand antwortete jemandem.
|
||||
|
||||
---------------------------------------------------------------------
|
||||
EINE EIGENE TABELLE, KEIN HALBER EINTRAG
|
||||
|
||||
Eine Antwort hat keine Art, keinen Zustand, keine Frist und gehoert
|
||||
in keinen Filter. Sie als Eintrag mit `antwort_auf` zu fuehren hiesse,
|
||||
ihr zwanzig Spalten mitzugeben, die immer leer sind -- und sie
|
||||
tauchte in jeder Zaehlung auf, die Beitraege zaehlt.
|
||||
|
||||
---------------------------------------------------------------------
|
||||
NICHT UEBERALL
|
||||
|
||||
Aus dem Plan, §9: "Keine Kommentarfunktion ueberall. Nur dort, wo ein
|
||||
Gespraech gemeint ist." Ein Antwortfeld unter jedem Aushang hiesse:
|
||||
Jeder Aushang muss betreut werden -- und ein unbeantwortetes
|
||||
Antwortfeld ist schlimmer als keins.
|
||||
|
||||
Aufrufen mit: node server/pruef-gespraech.mjs
|
||||
Bild: SCHIRM=1 node server/pruef-gespraech.mjs
|
||||
===================================================================== */
|
||||
|
||||
import { mkdtempSync, rmSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { portMussFreiSein } from "./helfer-port.mjs";
|
||||
import { heuteLokal } from "./helfer-tag.mjs";
|
||||
|
||||
const PORT = await portMussFreiSein(4493, "pruef-gespraech");
|
||||
const ordner = mkdtempSync(join(tmpdir(), "ws-gespr-"));
|
||||
process.env.WORKSPACE_DB = join(ordner, "workspace.db");
|
||||
process.env.PORT = String(PORT);
|
||||
process.env.SITE_ACCESS_SECRET = "lokaler-test";
|
||||
process.env.SITE_ACCESS_CODE_DOGI = "DOGI-TEST-1";
|
||||
process.env.SITE_PUBLIC_LAUNCH_AT = "2020-01-01T00:00:00+01:00";
|
||||
|
||||
const express = (await import("express")).default;
|
||||
const ec = express.response.cookie;
|
||||
express.response.cookie = function (n, w, o) { return ec.call(this, n, w, { ...(o || {}), secure: false }); };
|
||||
import { notbremse } from "./helfer-notbremse.mjs";
|
||||
await import("./index.js");
|
||||
notbremse(180_000, "pruef-gespraech");
|
||||
await new Promise((r) => setTimeout(r, 700));
|
||||
const BASIS = `http://127.0.0.1:${PORT}`;
|
||||
|
||||
process.on("uncaughtException", (f) => { console.error("ABSTURZ:", f); process.exit(7); });
|
||||
process.on("unhandledRejection", (f) => { console.error("ABSTURZ (Versprechen):", f); process.exit(7); });
|
||||
|
||||
let fehler = 0, geprueft = 0;
|
||||
const melde = (t) => console.log(t);
|
||||
const ok = (b, t) => { geprueft++; console.log((b ? " ok " : " FEHL ") + t); if (!b) fehler++; };
|
||||
|
||||
const { DatabaseSync } = await import("node:sqlite");
|
||||
const { scryptSync, randomBytes, createHmac } = await import("node:crypto");
|
||||
const d = new DatabaseSync(process.env.WORKSPACE_DB);
|
||||
const jetzt = new Date().toISOString();
|
||||
const schluessel = randomBytes(32).toString("hex");
|
||||
d.prepare("INSERT INTO einstellungen (schluessel, wert, geaendert, von)"
|
||||
+ " VALUES (?,?,?,NULL) ON CONFLICT(schluessel) DO NOTHING")
|
||||
.run("code_kennung_schluessel", schluessel, jetzt);
|
||||
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", schluessel).update(code).digest("hex"), jetzt);
|
||||
}
|
||||
anlegen("Filipe", "admin", "CODE-DOGI-0001");
|
||||
anlegen("Lena", "modi", "CODE-LENA-0001");
|
||||
const tabellen = d.prepare("SELECT name FROM sqlite_master WHERE type='table'").all()
|
||||
.map((z) => z.name);
|
||||
d.close();
|
||||
|
||||
async function anmelden(kachel, code) {
|
||||
const a = await fetch(BASIS + "/workspace/api/anmelden", {
|
||||
method: "POST", headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ rolle: kachel, code }),
|
||||
});
|
||||
return (a.headers.getSetCookie?.() || []).map((z) => z.split(";")[0]).join("; ");
|
||||
}
|
||||
const dogi = await anmelden("admin", "CODE-DOGI-0001");
|
||||
const lena = await anmelden("creator", "CODE-LENA-0001");
|
||||
const kopf = (keks) => ({ "Content-Type": "application/json", cookie: keks, origin: BASIS });
|
||||
|
||||
async function liste(bereich, keks = dogi) {
|
||||
const a = await fetch(`${BASIS}/workspace/api/bereich/${bereich}`, { headers: { cookie: keks } });
|
||||
return (await a.json().catch(() => null))?.eintraege || [];
|
||||
}
|
||||
async function antworten(bereich, id, text, keks = dogi) {
|
||||
const a = await fetch(`${BASIS}/workspace/api/bereich/${bereich}/${id}/antwort`, {
|
||||
method: "POST", headers: kopf(keks), body: JSON.stringify({ text }),
|
||||
});
|
||||
return { status: a.status, daten: await a.json().catch(() => null) };
|
||||
}
|
||||
|
||||
/* ---------- Ein Beitrag im Treff ------------------------------------- */
|
||||
const b = await fetch(`${BASIS}/workspace/api/bereich/treff`, {
|
||||
method: "POST", headers: kopf(lena),
|
||||
body: JSON.stringify({ art: "hallo", titel: "Hallo, ich bin neu hier",
|
||||
text: "Bin über TikTok gekommen.", datum: heuteLokal() }),
|
||||
});
|
||||
const beitragId = (await b.json().catch(() => null))?.id || 0;
|
||||
|
||||
/* =======================================================================
|
||||
1. DER PLATZ DAFUER
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 1. Die Tabelle ===");
|
||||
ok(tabellen.includes("eintrag_antworten"), "es gibt eine eigene Tabelle fuer Antworten");
|
||||
ok(beitragId > 0, `Lena hat etwas geschrieben (#${beitragId})`);
|
||||
|
||||
/* =======================================================================
|
||||
2. EIN GESPRAECH ENTSTEHT
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 2. Antworten ===");
|
||||
{
|
||||
const a = await antworten("treff", beitragId, "Willkommen! Schön, dass du da bist.");
|
||||
ok(a.status === 201, `DogFather antwortet (${a.status} ${a.daten?.fehler || ""})`);
|
||||
const z = await antworten("treff", beitragId, "Danke! Freut mich.", lena);
|
||||
ok(z.status === 201, `Lena antwortet zurueck (${z.status})`);
|
||||
|
||||
const e = (await liste("treff")).find((x) => x.id === beitragId);
|
||||
ok((e?.antworten || []).length === 2, `zwei Antworten am Beitrag (${(e?.antworten || []).length})`);
|
||||
/* AELTESTE ZUERST -- so liest man ein Gespraech. Neueste zuerst
|
||||
waere eine Liste, kein Gespraech. */
|
||||
ok(e?.antworten?.[0]?.text?.startsWith("Willkommen"),
|
||||
`die aeltere steht oben ("${e?.antworten?.[0]?.text?.slice(0, 20)}…")`);
|
||||
ok(e?.antworten?.[0]?.von_name === "Filipe",
|
||||
`mit Namen (${e?.antworten?.[0]?.von_name})`);
|
||||
/* WER AUS DEM TEAM ANTWORTET, ist eine andere Auskunft als wer
|
||||
mitredet. */
|
||||
ok(!!e?.antworten?.[0]?.von_rolle_name,
|
||||
`und mit Rolle (${e?.antworten?.[0]?.von_rolle_name})`);
|
||||
|
||||
/* "MEINE" ENTSCHEIDET UEBER DEN LOESCHKNOPF -- und muss je Person
|
||||
verschieden sein, sonst sieht jeder ihn ueberall. */
|
||||
const beiLena = (await liste("treff", lena)).find((x) => x.id === beitragId);
|
||||
const meineDogi = (e?.antworten || []).filter((a2) => a2.meine).length;
|
||||
const meineLena = (beiLena?.antworten || []).filter((a2) => a2.meine).length;
|
||||
ok(meineDogi === 1 && meineLena === 1,
|
||||
`jeder sieht genau seine eigene als "meine" (${meineDogi} / ${meineLena})`);
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
3. NICHT UEBERALL
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 3. Wo es KEIN Gespraech gibt ===");
|
||||
{
|
||||
const an = await fetch(`${BASIS}/workspace/api/bereich/anschlag`, {
|
||||
method: "POST", headers: kopf(dogi),
|
||||
body: JSON.stringify({ art: "ansage", titel: "Eine Ansage", datum: heuteLokal() }),
|
||||
});
|
||||
const id = (await an.json().catch(() => null))?.id;
|
||||
const a = await antworten("anschlag", id, "Darf ich hier antworten?");
|
||||
ok(a.status === 404, `am Anschlagbrett nicht (${a.status})`);
|
||||
|
||||
const e = (await liste("anschlag")).find((x) => x.id === id);
|
||||
ok(e && e.antworten === undefined,
|
||||
"und die Ansage bringt gar kein Antwortfeld mit");
|
||||
|
||||
/* GEGENPROBE: In der Wunschliste geht es sehr wohl -- dort ist ein
|
||||
Gespraech gemeint ("ich auch, weil ..."). */
|
||||
const w = await fetch(`${BASIS}/workspace/api/bereich/wunsch`, {
|
||||
method: "POST", headers: kopf(lena),
|
||||
body: JSON.stringify({ art: "stream", titel: "Ein Wunsch", datum: heuteLokal() }),
|
||||
});
|
||||
const wid = (await w.json().catch(() => null))?.id;
|
||||
const wa = await antworten("wunsch", wid, "Das will ich auch, weil …");
|
||||
ok(wa.status === 201, `in der Wunschliste dagegen schon (${wa.status})`);
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
4. WAS NICHT DURCHGEHT
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 4. Grenzen ===");
|
||||
{
|
||||
const leer = await antworten("treff", beitragId, " ");
|
||||
ok(leer.status === 400, `eine leere Antwort nicht (${leer.status})`);
|
||||
const lang = await antworten("treff", beitragId, "x".repeat(1500));
|
||||
ok(lang.status === 400, `eine zu lange auch nicht (${lang.status})`);
|
||||
const weg = await antworten("treff", 999999, "An nichts");
|
||||
ok(weg.status === 404, `an einen erfundenen Beitrag ebenfalls nicht (${weg.status})`);
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
5. LOESCHEN
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 5. Wieder weg ===");
|
||||
{
|
||||
const e = (await liste("treff")).find((x) => x.id === beitragId);
|
||||
const vonLena = (e?.antworten || []).find((a) => a.von_name === "Lena");
|
||||
|
||||
/* DIE EIGENE IMMER. */
|
||||
const a = await fetch(`${BASIS}/workspace/api/antwort/${vonLena.id}`,
|
||||
{ method: "DELETE", headers: { cookie: lena, origin: BASIS } });
|
||||
const atext = await a.text().catch(() => "");
|
||||
ok(a.status === 200, `Lena loescht ihre eigene (${a.status} ${atext.slice(0,80)}) id=${vonLena.id}`);
|
||||
|
||||
const e2 = (await liste("treff")).find((x) => x.id === beitragId);
|
||||
ok((e2?.antworten || []).length === 1, `eine bleibt uebrig (${(e2?.antworten || []).length})`);
|
||||
|
||||
/* UND DAS TEAM AUCH FREMDE -- sonst waere Moderation nicht moeglich. */
|
||||
const rest = e2.antworten[0];
|
||||
const b2 = await fetch(`${BASIS}/workspace/api/antwort/${rest.id}`,
|
||||
{ method: "DELETE", headers: { cookie: dogi, origin: BASIS } });
|
||||
ok(b2.status === 200, `das Team loescht auch fremde (${b2.status})`);
|
||||
|
||||
/* EIN MODI DARF FREMDE LOESCHEN -- er moderiert den Treff. Das war
|
||||
beim Schreiben dieser Pruefung meine falsche Erwartung; der Weg
|
||||
dorthin hat aber ein echtes Loch freigelegt (siehe Kommentar an
|
||||
der Route): Die Regel hiess "wer schreiben darf", und das duerfen
|
||||
auch Gaeste. */
|
||||
const c = await antworten("treff", beitragId, "Noch eine von DogFather");
|
||||
const e3 = (await liste("treff")).find((x) => x.id === beitragId);
|
||||
const fremd = e3.antworten.find((x) => x.id === c.daten?.id);
|
||||
const d2 = await fetch(`${BASIS}/workspace/api/antwort/${fremd.id}`,
|
||||
{ method: "DELETE", headers: { cookie: lena, origin: BASIS } });
|
||||
ok(d2.status === 200, `ein Modi darf fremde loeschen -- er moderiert (${d2.status})`);
|
||||
|
||||
/* UND DIE ENTSCHEIDENDE GEGENPROBE: EIN GAST DARF NICHT.
|
||||
|
||||
Ohne sie waere nie aufgefallen, dass die Regel urspruenglich
|
||||
`!darfSchreiben(...)` hiess -- also "wer schreiben darf", und das
|
||||
duerfen Gaeste ab der Stufe "dabei". Jeder Gast haette jede fremde
|
||||
Antwort loeschen koennen.
|
||||
|
||||
UEBER HTTP IST DAS HIER NICHT MESSBAR, und das wird gesagt statt
|
||||
verschwiegen: Ein Gast kommt nur ueber die crew-Adresse herein, und
|
||||
den Host-Kopf kann `fetch` nicht setzen (Node verbietet es). Statt
|
||||
die Pruefung stillschweigend zu ueberspringen, wird die REGEL
|
||||
selbst geprueft -- dieselbe Menge, die die Route benutzt. */
|
||||
const { TREFF_TEAM_ROLLEN } = await import("./workspace-treff.js");
|
||||
ok(TREFF_TEAM_ROLLEN.has("modi") && TREFF_TEAM_ROLLEN.has("hand")
|
||||
&& TREFF_TEAM_ROLLEN.has("admin"),
|
||||
`das Moderationsteam ist ${[...TREFF_TEAM_ROLLEN].join(", ")}`);
|
||||
ok(!TREFF_TEAM_ROLLEN.has("gast"),
|
||||
"und ein Gast gehoert nicht dazu -- er kann keine fremde Antwort loeschen");
|
||||
/* Und die Route benutzt wirklich DIESE Menge und nicht wieder
|
||||
`darfSchreiben`. Ein Kommentar daneben wuerde es nicht verhindern. */
|
||||
const { readFileSync } = await import("node:fs");
|
||||
const quelle = readFileSync(new URL("./workspace-bereiche.js", import.meta.url), "utf8");
|
||||
const stelle = quelle.slice(quelle.indexOf("/workspace/api/antwort/:id"));
|
||||
ok(/TREFF_TEAM_ROLLEN\.has\(req\.person\?\.rolle\)/.test(stelle.slice(0, 2000)),
|
||||
"und die Route entscheidet mit genau dieser Menge");
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
6. IM BROWSER
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 6. Wie es aussieht ===");
|
||||
{
|
||||
const { chromium } = await import(
|
||||
"file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
|
||||
const browser = await chromium.launch();
|
||||
try {
|
||||
const kontext = await browser.newContext({ viewport: { width: 390, height: 900 } });
|
||||
await kontext.addCookies(dogi.split("; ").map((k) => {
|
||||
const [name, ...rest] = k.split("=");
|
||||
return { name, value: rest.join("="), domain: "127.0.0.1", path: "/" };
|
||||
}));
|
||||
const seite = await kontext.newPage();
|
||||
const konsole = [];
|
||||
seite.on("console", (e) => { if (e.type() === "error") konsole.push(e.text()); });
|
||||
await seite.goto(`${BASIS}/workspace/bereich.html?b=treff`, { waitUntil: "networkidle" });
|
||||
await seite.waitForSelector(".antwort-neu__feld", { timeout: 15_000 });
|
||||
await seite.waitForTimeout(400);
|
||||
|
||||
/* UEBER DIE OBERFLAECHE ANTWORTEN, nicht ueber die Schnittstelle --
|
||||
ein Feld, das der Server annimmt und das Formular nicht
|
||||
abschickt, waere gruen und nutzlos. */
|
||||
await seite.fill(".antwort-neu__feld", "Geschrieben im Browser");
|
||||
await seite.click(".antwort-neu__ab");
|
||||
await seite.waitForTimeout(1500);
|
||||
|
||||
const m = await seite.evaluate(() => ({
|
||||
antworten: document.querySelectorAll(".antwort").length,
|
||||
texte: [...document.querySelectorAll(".antwort__text")].map((z) => z.textContent.trim()),
|
||||
/* Nur EINE Stufe eingerueckt -- auf 390 px ist bei der zweiten
|
||||
Schluss. */
|
||||
verschachtelt: document.querySelectorAll(".antworten .antworten").length,
|
||||
feldBreit: Math.round(
|
||||
document.querySelector(".antwort-neu__feld")?.getBoundingClientRect().width || 0),
|
||||
}));
|
||||
ok(m.antworten >= 1, `${m.antworten} Antworten stehen da`);
|
||||
ok(m.texte.some((t) => t === "Geschrieben im Browser"),
|
||||
"die im Browser geschriebene ist dabei");
|
||||
ok(m.verschachtelt === 0, "nur eine Stufe eingerueckt");
|
||||
/* AUF DEM HANDY MUSS MAN TIPPEN KOENNEN. Ein Feld von 80 px ist
|
||||
kein Feld. */
|
||||
ok(m.feldBreit > 150, `das Feld ist auf 390 px noch benutzbar (${m.feldBreit} px)`);
|
||||
ok(konsole.length === 0,
|
||||
konsole.length ? `Konsole: ${konsole[0]}` : "keine Fehler in der Konsole");
|
||||
|
||||
if (process.env.SCHIRM) {
|
||||
await seite.screenshot({ path: fileURLToPath(new URL("pruef-gespraech.png",
|
||||
import.meta.url)), fullPage: false });
|
||||
melde(" -- Bildschirmfoto: server/pruef-gespraech.png");
|
||||
}
|
||||
await kontext.close();
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
}
|
||||
|
||||
melde("");
|
||||
melde(`${geprueft} Pruefungen, ${fehler} Fehler`);
|
||||
melde(fehler ? "NICHT IN ORDNUNG" : "ALLES IN ORDNUNG");
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* Aufraeumrest */ }
|
||||
process.exit(fehler ? 1 : 0);
|
||||
@@ -331,6 +331,80 @@ melde("=== 6. Wie es aussieht ===");
|
||||
}
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
7. JEDES BRETT HAT SEINE FORM (Stufe 7)
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 7. Die Form je Brett ===");
|
||||
{
|
||||
const { chromium } = await import(
|
||||
"file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
|
||||
const browser = await chromium.launch();
|
||||
try {
|
||||
const kontext = await browser.newContext({ viewport: { width: 1000, height: 900 } });
|
||||
await kontext.addCookies(dogi.split("; ").map((k) => {
|
||||
const [name, ...rest] = k.split("=");
|
||||
return { name, value: rest.join("="), domain: "127.0.0.1", path: "/" };
|
||||
}));
|
||||
const seite = await kontext.newPage();
|
||||
const konsole = [];
|
||||
seite.on("console", (e) => { if (e.type() === "error") konsole.push(e.text()); });
|
||||
|
||||
/* Regeln sind schon uebernommen (Abschnitt 3). */
|
||||
await seite.goto(`${BASIS}/workspace/bereich.html?b=regeln`, { waitUntil: "networkidle" });
|
||||
await seite.waitForSelector(".brettabschnitt", { timeout: 15_000 });
|
||||
await seite.waitForTimeout(400);
|
||||
const r = await seite.evaluate(() => ({
|
||||
abschnitte: [...document.querySelectorAll(".brettabschnitt")]
|
||||
.map((z) => z.firstChild?.textContent?.trim() || ""),
|
||||
marken: document.querySelectorAll(".brettmarken__weg").length,
|
||||
/* Springt die Marke wirklich zu einer Ueberschrift? Ein Verweis
|
||||
ins Leere sieht aus wie ein kaputter Sprung. */
|
||||
zieleDa: [...document.querySelectorAll(".brettmarken__weg")]
|
||||
.every((a) => !!document.getElementById(a.getAttribute("href").slice(1))),
|
||||
}));
|
||||
ok(r.abschnitte.length >= 3,
|
||||
`Regeln & Hilfe ist ein Dokument mit ${r.abschnitte.length} Abschnitten (${r.abschnitte.join(" · ")})`);
|
||||
ok(r.marken >= 3, `mit ${r.marken} Sprungmarken oben`);
|
||||
ok(r.zieleDa, "und jede Marke findet ihre Ueberschrift");
|
||||
|
||||
/* Das Anschlagbrett: Aushaenge statt Zeilen. */
|
||||
await seite.goto(`${BASIS}/workspace/bereich.html?b=anschlag`, { waitUntil: "networkidle" });
|
||||
await seite.waitForTimeout(600);
|
||||
const gross = await seite.evaluate(async () => {
|
||||
const knopf = document.querySelector(".startkatalog__alle");
|
||||
if (knopf) { knopf.click(); await new Promise((r2) => setTimeout(r2, 1500)); }
|
||||
const t = document.querySelector("#liste .eintrag-titel");
|
||||
return {
|
||||
aushang: document.getElementById("liste")?.dataset.aushang || "",
|
||||
titelGroesse: t ? Math.round(parseFloat(getComputedStyle(t).fontSize)) : 0,
|
||||
anzahl: document.querySelectorAll(".eintrag-karte").length,
|
||||
};
|
||||
});
|
||||
ok(gross.aushang === "ja", "das Anschlagbrett ist als Aushangbrett gesetzt");
|
||||
/* GROSS heisst messbar gross -- groesser als ein Titel auf einem
|
||||
gewoehnlichen Brett (1.05rem = 17 px). */
|
||||
ok(gross.titelGroesse >= 20,
|
||||
`und seine Aushaenge sind gross (${gross.titelGroesse} px)`);
|
||||
ok(gross.anzahl >= 4, `${gross.anzahl} Aushaenge haengen`);
|
||||
|
||||
ok(konsole.length === 0,
|
||||
konsole.length ? `Konsole: ${konsole[0]}` : "keine Fehler in der Konsole");
|
||||
|
||||
if (process.env.SCHIRM) {
|
||||
const { fileURLToPath } = await import("node:url");
|
||||
await seite.goto(`${BASIS}/workspace/bereich.html?b=regeln`, { waitUntil: "networkidle" });
|
||||
await seite.waitForTimeout(600);
|
||||
await seite.screenshot({ path: fileURLToPath(new URL("pruef-regeln.png",
|
||||
import.meta.url)), fullPage: false });
|
||||
melde(" -- Bildschirmfoto: server/pruef-regeln.png");
|
||||
}
|
||||
await kontext.close();
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
}
|
||||
|
||||
melde("");
|
||||
melde(`${geprueft} Pruefungen, ${fehler} Fehler`);
|
||||
melde(fehler ? "NICHT IN ORDNUNG" : "ALLES IN ORDNUNG");
|
||||
|
||||
@@ -611,6 +611,13 @@ export const BEITRAEGE_JE_STUNDE = 10;
|
||||
Content-Planung ist Arbeit am eigenen Kanal; dort waere eine Bremse
|
||||
eine Behinderung ohne Gegenwert. */
|
||||
const treffBereich = (b) => TREFF_BRETTER.includes(b);
|
||||
/* WO EIN GESPRAECH GEMEINT IST (17.09.2026), Stufe 6.
|
||||
|
||||
Nicht ueberall. Aus dem Plan, §9: "Keine Kommentarfunktion ueberall.
|
||||
Nur dort, wo ein Gespraech gemeint ist." Ein Antwortfeld unter jedem
|
||||
Aushang hiesse: Jeder Aushang muss betreut werden -- und ein
|
||||
unbeantwortetes Antwortfeld ist schlimmer als keins. */
|
||||
const MIT_ANTWORTEN = new Set(["treff", "wunsch"]);
|
||||
const TITEL_MAX = 160;
|
||||
const TEXT_MAX = 6000;
|
||||
|
||||
@@ -1204,6 +1211,33 @@ bereicheRouter.get("/workspace/api/bereich/:bereich", (req, res) => {
|
||||
jeQuelle.get(z.aus_eintrag_id).push({ id: z.id, bereich: z.bereich, titel: z.titel });
|
||||
}
|
||||
for (const e of eintraege) e.wurde = jeQuelle.get(e.id) || [];
|
||||
|
||||
/* DIE ANTWORTEN, in EINER Abfrage fuer die ganze Liste. */
|
||||
if (MIT_ANTWORTEN.has(bereich)) {
|
||||
const p4 = eintraege.map(() => "?").join(", ");
|
||||
const alle = db().prepare(
|
||||
`SELECT a.id, a.eintrag_id, a.text, a.erstellt, a.person_id,
|
||||
p.name AS von_name, p.rolle AS von_rolle
|
||||
FROM eintrag_antworten a
|
||||
LEFT JOIN personen p ON p.id = a.person_id
|
||||
WHERE a.eintrag_id IN (${p4})
|
||||
ORDER BY a.id`).all(...eintraege.map((e) => e.id));
|
||||
const jeE = new Map();
|
||||
for (const a of alle) {
|
||||
if (!jeE.has(a.eintrag_id)) jeE.set(a.eintrag_id, []);
|
||||
/* DEN ROLLENNAMEN MACHT `mitRollenname`, wie ueberall im
|
||||
Treff. Eine eigene Uebersetzung hier waere eine zweite
|
||||
Wahrheit ueber dieselbe Sache -- und Rollennamen sind in
|
||||
diesem Haus die Sorte Angabe, bei der zwei Stellen einmal
|
||||
zu viel sind. */
|
||||
jeE.get(a.eintrag_id).push(mitRollenname({
|
||||
id: a.id, text: a.text, erstellt: a.erstellt,
|
||||
von_name: a.von_name, von_rolle: a.von_rolle,
|
||||
meine: a.person_id === (req.sicht || req.person)?.id,
|
||||
}));
|
||||
}
|
||||
for (const e of eintraege) e.antworten = jeE.get(e.id) || [];
|
||||
}
|
||||
}
|
||||
|
||||
/* DASS DIES EIN BRETT DES TREFFS IST, SAGT DER SERVER (11.09.2026).
|
||||
@@ -1685,6 +1719,108 @@ bereicheRouter.post("/workspace/api/bereich/:bereich/:id/daraus",
|
||||
}
|
||||
});
|
||||
|
||||
/* =====================================================================
|
||||
ANTWORTEN (17.09.2026) -- Stufe 6 des Plans
|
||||
|
||||
"Der Treff" war eine Liste aus Karten. Der einzige Bereich, in dem
|
||||
Menschen MITEINANDER reden sollen, zwang sie, nebeneinander zu
|
||||
reden.
|
||||
|
||||
DIE BREMSE GILT AUCH HIER. Eine Antwort ist ein Beitrag; wer sie
|
||||
ausnaehme, haette die Bremse mit drei Klicks umgangen. Sie zaehlt
|
||||
allerdings ihren EIGENEN Vorrat: Wer zehn Beitraege geschrieben hat,
|
||||
soll noch antworten koennen -- ein Gespraech, das mitten im Satz
|
||||
abbricht, ist schlimmer als eins, das nicht angefangen wird. */
|
||||
const ANTWORTEN_JE_STUNDE = 20;
|
||||
const ANTWORT_MAX = 1200;
|
||||
|
||||
bereicheRouter.post("/workspace/api/bereich/:bereich/:id/antwort",
|
||||
gleicheHerkunft, (req, res) => {
|
||||
try {
|
||||
const bereich = String(req.params.bereich);
|
||||
const id = Number(req.params.id);
|
||||
if (!MIT_ANTWORTEN.has(bereich) || !Number.isInteger(id)) {
|
||||
return res.status(404).json({ fehler: "nicht_gefunden" });
|
||||
}
|
||||
const warum = darfSchreiben(req.person, bereich);
|
||||
if (warum) return res.status(403).json({ fehler: warum });
|
||||
|
||||
const text = String(req.body?.text ?? "").trim();
|
||||
if (!text) return res.status(400).json({ fehler: "Schreib etwas." });
|
||||
if (text.length > ANTWORT_MAX) return res.status(400).json({ fehler: "Das ist zu lang." });
|
||||
|
||||
const regel = sichtbar(req.person);
|
||||
const e = db().prepare("SELECT id FROM eintraege WHERE id = ? AND bereich = ?")
|
||||
.get(id, bereich);
|
||||
if (!e || !regel) return res.status(404).json({ fehler: "nicht_gefunden" });
|
||||
|
||||
const seit = new Date(Date.now() - 3600_000).toISOString();
|
||||
const { anzahl } = db().prepare(
|
||||
"SELECT COUNT(*) AS anzahl FROM eintrag_antworten WHERE person_id = ? AND erstellt >= ?")
|
||||
.get(req.person.id, seit);
|
||||
if (anzahl >= ANTWORTEN_JE_STUNDE) {
|
||||
return res.status(429).json({
|
||||
fehler: `Du hast in der letzten Stunde ${anzahl} Antworten geschrieben. `
|
||||
+ "Mach mal kurz Pause.",
|
||||
});
|
||||
}
|
||||
|
||||
const { lastInsertRowid } = db().prepare(
|
||||
"INSERT INTO eintrag_antworten (eintrag_id, person_id, text, erstellt) VALUES (?,?,?,?)")
|
||||
.run(id, req.person.id, text, jetzt());
|
||||
res.status(201).json({ id: Number(lastInsertRowid) });
|
||||
} catch (fehler) {
|
||||
console.error("[workspace] Antwort:", fehler?.message);
|
||||
res.status(503).json({ fehler: "nicht_verfuegbar" });
|
||||
}
|
||||
});
|
||||
|
||||
/* DER PFAD LIEGT AUSSERHALB VON `/bereich/` -- und das ist eine
|
||||
Reparatur, keine Geschmacksfrage (17.09.2026).
|
||||
|
||||
Zuerst hiess er `/api/bereich/antwort/:id`. Darueber liegt aber eine
|
||||
Middleware auf `/api/bereich/:bereich`, die prueft, ob es den
|
||||
Bereich gibt und ob die Person hineindarf -- und "antwort" ist kein
|
||||
Bereich. Ergebnis: Fuer DogFather ging es (ein frueherer Zweig liess
|
||||
ihn durch), fuer einen Modi kam 404. Ein Weg, der je nach Rolle an
|
||||
einer voellig anderen Stelle scheitert, sucht man lange.
|
||||
|
||||
Gefunden hat es die Pruefung, nicht das Lesen: "das Team loescht
|
||||
auch fremde" war gruen, "Lena loescht ihre eigene" nicht. */
|
||||
bereicheRouter.delete("/workspace/api/antwort/:id",
|
||||
gleicheHerkunft, (req, res) => {
|
||||
try {
|
||||
const id = Number(req.params.id);
|
||||
if (!Number.isInteger(id)) return res.status(400).json({ fehler: "ungueltig" });
|
||||
const a = db().prepare(
|
||||
"SELECT id, person_id FROM eintrag_antworten WHERE id = ?").get(id);
|
||||
if (!a) return res.status(404).json({ fehler: "nicht_gefunden" });
|
||||
/* DIE EIGENE IMMER, FREMDE NUR DAS TEAM.
|
||||
|
||||
HIER STAND `!darfSchreiben(req.person, "treff")` -- und das war
|
||||
ein Loch. `darfSchreiben` beantwortet "darf diese Person hier
|
||||
SCHREIBEN", und das duerfen auch Gaeste ab der Stufe "dabei".
|
||||
Ein Gast haette also jede fremde Antwort loeschen koennen.
|
||||
|
||||
Gefunden hat es die Pruefung, nicht das Lesen: Sie verlangte,
|
||||
dass ein Modi eine fremde Antwort NICHT loeschen kann, und
|
||||
bekam 200. Die Erwartung war fuer den Modi falsch -- er
|
||||
moderiert ja --, aber der Weg dorthin hat das echte Loch
|
||||
freigelegt.
|
||||
|
||||
`TREFF_TEAM_ROLLEN` ist die Liste, die im Haus ohnehin
|
||||
entscheidet, wer im Treff moderiert: modi, hand, admin. */
|
||||
const darf = a.person_id === req.person.id
|
||||
|| TREFF_TEAM_ROLLEN.has(req.person?.rolle);
|
||||
if (!darf) return res.status(403).json({ fehler: "nicht_erlaubt" });
|
||||
db().prepare("DELETE FROM eintrag_antworten WHERE id = ?").run(id);
|
||||
res.json({ ok: true });
|
||||
} catch (fehler) {
|
||||
console.error("[workspace] Antwort loeschen:", fehler?.message);
|
||||
res.status(503).json({ fehler: "nicht_verfuegbar" });
|
||||
}
|
||||
});
|
||||
|
||||
/* ---------- Anlegen ------------------------------------------------------ */
|
||||
|
||||
bereicheRouter.post("/workspace/api/bereich/:bereich", gleicheHerkunft, (req, res) => {
|
||||
|
||||
@@ -1766,6 +1766,37 @@ function umstellungen(d) {
|
||||
falschen Moment. */
|
||||
const jetztStempel = new Date().toISOString().slice(0, 19).replace(/[-:T]/g, "");
|
||||
|
||||
/* ---- Antworten an einem Beitrag (17.09.2026), Stufe 6 ----
|
||||
|
||||
"Der Treff -- Hallo sagen, fragen, loben" war eine Liste aus
|
||||
Karten. Der einzige Bereich, in dem Menschen MITEINANDER reden
|
||||
sollen, zwang sie, nebeneinander zu reden: Jeder schreibt eine
|
||||
eigene Karte, niemand antwortet jemandem.
|
||||
|
||||
EINE EIGENE TABELLE UND KEIN EINTRAG MIT "antwort_auf": Eine
|
||||
Antwort hat keine Art, keinen Zustand, keine Frist und gehoert in
|
||||
keinen Filter. Sie als halben Eintrag zu fuehren hiesse, ihr
|
||||
zwanzig Spalten mitzugeben, die immer leer sind -- und sie taeuchte
|
||||
in jeder Zaehlung auf, die Beitraege zaehlt.
|
||||
|
||||
ON DELETE CASCADE: Verschwindet der Beitrag, verschwinden die
|
||||
Antworten. Eine Antwort ohne ihre Frage ist nicht halb so viel
|
||||
wert, sondern gar nichts. */
|
||||
try {
|
||||
d.exec(`
|
||||
CREATE TABLE IF NOT EXISTS eintrag_antworten (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
eintrag_id INTEGER NOT NULL REFERENCES eintraege(id) ON DELETE CASCADE,
|
||||
person_id INTEGER REFERENCES personen(id) ON DELETE SET NULL,
|
||||
text TEXT NOT NULL,
|
||||
erstellt TEXT NOT NULL
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_antworten_eintrag
|
||||
ON eintrag_antworten (eintrag_id, id);`);
|
||||
} catch (fehler) {
|
||||
console.error("[workspace] Antworten-Tabelle:", fehler?.message);
|
||||
}
|
||||
|
||||
/* ---- Der Kreislauf: ein Eintrag kommt aus einem anderen (17.09.2026)
|
||||
|
||||
Aus dem Plan im Vault, Stufe 8 -- und die Stelle, an der der Plan
|
||||
|
||||
@@ -13,25 +13,25 @@
|
||||
"theme_color": "#06090f",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609171158",
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609171211",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609171158",
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609171211",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609171158",
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609171211",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609171158",
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609171211",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
@@ -987,3 +987,139 @@
|
||||
.kette__weg { color: var(--text); text-decoration: none; }
|
||||
.kette__weg:hover { text-decoration: underline; }
|
||||
.kette__wer { color: var(--text-still); }
|
||||
|
||||
/* =====================================================================
|
||||
DAS GESPRÄCH (17.09.2026) — Stufe 6 des Plans
|
||||
|
||||
„Der Treff" war eine Liste aus Karten. Der einzige Bereich, in dem
|
||||
Menschen MITEINANDER reden sollen, zwang sie, nebeneinander zu reden.
|
||||
|
||||
EINE STUFE EINGERÜCKT, NICHT MEHR. Auf 390 px ist bei der zweiten
|
||||
Schluss — dann steht der Text in einer Spalte von vier Wörtern. Die
|
||||
Linie links macht die Zugehörigkeit deutlicher als jeder Abstand.
|
||||
------------------------------------------------------------------- */
|
||||
.antworten {
|
||||
margin: 12px 0 0 0; padding-left: 14px;
|
||||
border-left: 2px solid color-mix(in srgb, var(--akzent) 22%, var(--rand));
|
||||
}
|
||||
.antwort { padding: 8px 0; }
|
||||
.antwort + .antwort { border-top: 1px solid color-mix(in srgb, var(--rand) 60%, transparent); }
|
||||
.antwort__kopf {
|
||||
display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px;
|
||||
margin: 0 0 3px; font-size: .78rem;
|
||||
}
|
||||
.antwort__wer { font-weight: 640; color: var(--text); }
|
||||
/* Wer aus dem Team antwortet, ist eine andere Auskunft als wer
|
||||
mitredet — deshalb sichtbar, aber leise. */
|
||||
.antwort__rolle {
|
||||
padding: 0 7px; border-radius: 999px;
|
||||
/* .74rem und nicht .7rem: Bei 11,2 px liegt die Marke unter der
|
||||
Grenze, die pruef-css-klassen im Haus haelt (11,5 px). Die Grenze
|
||||
anzuheben waere der bequeme Weg gewesen -- und ab da haette die
|
||||
Pruefung nichts mehr gehalten. */
|
||||
font-size: .74rem; font-weight: 600;
|
||||
color: color-mix(in srgb, var(--akzent) 70%, #ffffff);
|
||||
background: color-mix(in srgb, var(--akzent) 13%, transparent);
|
||||
}
|
||||
.antwort__wann { color: var(--text-still); margin-left: auto; }
|
||||
.antwort__text {
|
||||
margin: 0; font-size: .88rem; line-height: 1.55; color: var(--text-leise);
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
.antwort__weg {
|
||||
margin-top: 4px; padding: 0;
|
||||
background: none; border: 0; cursor: pointer;
|
||||
font: inherit; font-size: .74rem; color: var(--text-still);
|
||||
text-decoration: underline;
|
||||
}
|
||||
.antwort__weg:hover { color: var(--text-leise); }
|
||||
|
||||
/* Das Feld steht immer da — ein leeres Feld ist die deutlichste
|
||||
Einladung, die es gibt. */
|
||||
.antwort-neu { display: flex; gap: 8px; margin-top: 10px; }
|
||||
.antwort-neu__feld {
|
||||
flex: 1 1 auto; min-width: 0;
|
||||
font: inherit; font-size: .88rem;
|
||||
}
|
||||
.antwort-neu__ab {
|
||||
flex: 0 0 auto;
|
||||
font: inherit; font-size: .82rem; font-weight: 600;
|
||||
padding: 0 14px; border-radius: 999px; cursor: pointer;
|
||||
color: var(--text-leise);
|
||||
background: transparent;
|
||||
border: 1px solid var(--rand-hell);
|
||||
transition: color var(--tempo), border-color var(--tempo), background var(--tempo);
|
||||
}
|
||||
.antwort-neu__ab:hover:not(:disabled) {
|
||||
color: var(--text); background: rgba(255, 255, 255, .05);
|
||||
}
|
||||
|
||||
/* =====================================================================
|
||||
STUFE 7: JEDES BRETT BEKOMMT SEINE FORM (17.09.2026)
|
||||
|
||||
„Regeln & Hilfe" ist ein Nachschlagewerk, kein Feed — man schlägt es
|
||||
im Streitfall auf und will **finden**, nicht scrollen. „Mitmachen"
|
||||
ist ein Weg. „Anschlagbrett" ist ein schwarzes Brett: wenige, große
|
||||
Aushänge.
|
||||
------------------------------------------------------------------- */
|
||||
|
||||
/* Die Sprungmarken — der Unterschied zwischen einem Dokument und einer
|
||||
langen Seite. */
|
||||
.brettmarken {
|
||||
display: flex; flex-wrap: wrap; gap: 6px;
|
||||
margin: 0 0 18px; padding-bottom: 14px;
|
||||
border-bottom: 1px solid var(--rand);
|
||||
}
|
||||
.brettmarken__weg {
|
||||
padding: 5px 12px; border-radius: 999px;
|
||||
font-size: .8rem; font-weight: 600; text-decoration: none;
|
||||
color: var(--text-leise);
|
||||
border: 1px solid var(--rand-hell);
|
||||
transition: color var(--tempo), border-color var(--tempo), background var(--tempo);
|
||||
}
|
||||
.brettmarken__weg:hover {
|
||||
color: var(--text); background: rgba(255, 255, 255, .04);
|
||||
}
|
||||
|
||||
/* Die Abschnittsüberschrift. scroll-margin, damit die Überschrift beim
|
||||
Anspringen nicht unter der Kopfleiste verschwindet — ohne das landet
|
||||
man auf dem Text darunter und glaubt, der Sprung sei ins Leere
|
||||
gegangen. */
|
||||
.brettabschnitt {
|
||||
display: flex; align-items: baseline; gap: 10px;
|
||||
margin: 30px 0 12px; scroll-margin-top: 80px;
|
||||
font-size: .82rem; font-weight: 650;
|
||||
letter-spacing: .09em; text-transform: uppercase;
|
||||
color: var(--text-still);
|
||||
}
|
||||
.brettabschnitt:first-child { margin-top: 4px; }
|
||||
.brettabschnitt::after {
|
||||
content: ""; flex: 1; height: 1px;
|
||||
background: linear-gradient(90deg, var(--rand), transparent);
|
||||
}
|
||||
.brettabschnitt__zahl {
|
||||
order: 3; padding: 1px 8px; border-radius: 999px;
|
||||
background: rgba(255, 255, 255, .06);
|
||||
font-size: .74rem; letter-spacing: normal; color: var(--text-still);
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
DAS ANSCHLAGBRETT — wenige, große Aushänge
|
||||
|
||||
Ein Aushang zwischen dreißig anderen ist kein Aushang. Größerer
|
||||
Titel, mehr Luft, ein Rahmen, der nach Papier aussieht statt nach
|
||||
Zeile.
|
||||
------------------------------------------------------------------- */
|
||||
#liste[data-aushang="ja"] { display: grid; gap: 18px; }
|
||||
#liste[data-aushang="ja"] .eintrag-karte { padding: 22px 24px; }
|
||||
#liste[data-aushang="ja"] .eintrag-titel {
|
||||
font-size: 1.32rem; line-height: 1.25;
|
||||
}
|
||||
#liste[data-aushang="ja"] .eintrag-text {
|
||||
font-size: .98rem; line-height: 1.6;
|
||||
}
|
||||
@media (max-width: 560px) {
|
||||
#liste[data-aushang="ja"] .eintrag-karte { padding: 17px 16px; }
|
||||
#liste[data-aushang="ja"] .eintrag-titel { font-size: 1.12rem; }
|
||||
}
|
||||
|
||||
@@ -646,6 +646,86 @@
|
||||
if (zeile.childNodes.length) k.append(zeile);
|
||||
}
|
||||
|
||||
/* ---- DAS GESPRAECH (17.09.2026), Stufe 6 des Plans -------------
|
||||
"Der Treff" war eine Liste aus Karten. Der einzige Bereich, in
|
||||
dem Menschen MITEINANDER reden sollen, zwang sie, nebeneinander
|
||||
zu reden: Jeder schrieb eine eigene Karte, niemand antwortete
|
||||
jemandem.
|
||||
|
||||
ANTWORTEN STEHEN EINGERUECKT UNTER IHREM BEITRAG, aelteste
|
||||
zuerst -- so liest man ein Gespraech. Und nur EINE Stufe
|
||||
eingerueckt: Auf 390 px ist bei der zweiten Schluss, dann steht
|
||||
der Text in einer Spalte von vier Woertern. */
|
||||
if (Array.isArray(e.antworten)) {
|
||||
const strang = el('div', 'antworten');
|
||||
for (const a of e.antworten) {
|
||||
const z = el('div', 'antwort');
|
||||
const kopf2 = el('p', 'antwort__kopf');
|
||||
kopf2.append(el('span', 'antwort__wer', a.von_name || 'jemand'));
|
||||
if (a.von_rolle_name) {
|
||||
kopf2.append(el('span', 'antwort__rolle', a.von_rolle_name));
|
||||
}
|
||||
kopf2.append(el('span', 'antwort__wann', datum(String(a.erstellt).slice(0, 10))));
|
||||
z.append(kopf2);
|
||||
z.append(el('p', 'antwort__text', a.text));
|
||||
/* Die eigene immer, fremde nur das Team -- was der Server
|
||||
genauso entscheidet. Ein Knopf, den der Server ablehnt,
|
||||
waere schlimmer als keiner. */
|
||||
if (a.meine || darfEintragen()) {
|
||||
const w = el('button', 'antwort__weg', 'löschen');
|
||||
w.type = 'button';
|
||||
w.addEventListener('click', async () => {
|
||||
w.disabled = true;
|
||||
const r = await hole(`/workspace/api/antwort/${a.id}`, { method: 'DELETE' });
|
||||
if (!r.ok) { melde('Ging nicht.'); w.disabled = false; return; }
|
||||
await laden();
|
||||
});
|
||||
z.append(w);
|
||||
}
|
||||
strang.append(z);
|
||||
}
|
||||
|
||||
/* DAS FELD STEHT IMMER DA, nicht hinter einem "Antworten"-Knopf.
|
||||
Ein Gespraech faengt nicht an, wenn man erst einen Knopf
|
||||
suchen muss -- und ein leeres Feld ist die deutlichste
|
||||
Einladung, die es gibt.
|
||||
|
||||
ABER NUR FUER DEN, DER AUCH DARF. Der Server entscheidet das
|
||||
mit derselben Regel (`darfSchreiben`); ein Feld, dessen
|
||||
Absenden der Server ablehnt, ist schlimmer als keins -- man
|
||||
tippt umsonst und bekommt eine Absage fuer etwas, das man
|
||||
angeboten bekommen hat. */
|
||||
if (darfEintragen()) {
|
||||
const form = el('form', 'antwort-neu');
|
||||
const feld = el('input', 'antwort-neu__feld');
|
||||
feld.type = 'text';
|
||||
feld.maxLength = 1200;
|
||||
feld.placeholder = e.antworten.length ? 'Antworten …' : 'Als Erster antworten …';
|
||||
feld.setAttribute('aria-label', `Antwort auf „${e.titel}“`);
|
||||
const ab = el('button', 'antwort-neu__ab', 'Senden');
|
||||
ab.type = 'submit';
|
||||
form.append(feld, ab);
|
||||
form.addEventListener('submit', async (ev) => {
|
||||
ev.preventDefault();
|
||||
const text = feld.value.trim();
|
||||
if (!text) return;
|
||||
ab.disabled = true;
|
||||
const r = await hole(`/workspace/api/bereich/${bereich}/${e.id}/antwort`, {
|
||||
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ text }),
|
||||
});
|
||||
if (!r.ok) {
|
||||
melde((await r.json().catch(() => ({}))).fehler || 'Ging nicht.');
|
||||
ab.disabled = false; return;
|
||||
}
|
||||
feld.value = '';
|
||||
await laden();
|
||||
});
|
||||
strang.append(form);
|
||||
}
|
||||
k.append(strang);
|
||||
}
|
||||
|
||||
if (!darfEintragen()) { k.append(fuss); return k; }
|
||||
|
||||
const knoepfe = el('div', 'eintrag-knoepfe');
|
||||
@@ -916,6 +996,12 @@
|
||||
sieben davon falsch. */
|
||||
if (bereich === 'highlight') ziel.dataset.galerie = 'ja';
|
||||
else delete ziel.dataset.galerie;
|
||||
/* DAS ANSCHLAGBRETT IST EIN SCHWARZES BRETT: wenige, GROSSE
|
||||
Aushaenge. Ein Aushang zwischen dreissig anderen ist kein
|
||||
Aushang -- die Wirkung entsteht durch die Groesse und die
|
||||
Begrenzung. */
|
||||
if (bereich === 'anschlag') ziel.dataset.aushang = 'ja';
|
||||
else delete ziel.dataset.aushang;
|
||||
|
||||
const sichtbar = daten.eintraege.filter((e) => {
|
||||
if (!filter) return true;
|
||||
@@ -952,6 +1038,57 @@
|
||||
return;
|
||||
}
|
||||
const karten = new Map();
|
||||
|
||||
/* ---- STUFE 7: JEDES BRETT BEKOMMT SEINE FORM ------------------
|
||||
"Regeln & Hilfe" ist ein NACHSCHLAGEWERK, kein Feed: Man
|
||||
schlaegt es im Streitfall auf und will finden, nicht scrollen.
|
||||
Also nach Art gruppiert, mit Ueberschriften -- und ganz oben
|
||||
Sprungmarken.
|
||||
|
||||
"Mitmachen" ist ein WEG: erst die drei Schritte, dann die
|
||||
Gebiete, dann die Fragen. Eine Liste beantwortet "was gibt
|
||||
es"; die Frage lautet aber "was tue ich als Erstes". */
|
||||
const NACH_ART = {
|
||||
regeln: ['regel', 'folge', 'hilfe', 'frage'],
|
||||
mitmachen: ['gesucht', 'lust', 'frage'],
|
||||
};
|
||||
if (NACH_ART[bereich] && !filter) {
|
||||
const reihe = NACH_ART[bereich];
|
||||
const faecher = new Map(reihe.map((a) => [a, []]));
|
||||
for (const e of sichtbar) {
|
||||
if (!faecher.has(e.art)) faecher.set(e.art, []);
|
||||
faecher.get(e.art).push(e);
|
||||
}
|
||||
/* DIE SPRUNGMARKEN ZUERST. Sie sind der Unterschied zwischen
|
||||
einem Dokument und einer langen Seite. */
|
||||
const marken = el('nav', 'brettmarken');
|
||||
marken.setAttribute('aria-label', 'Zu einem Abschnitt springen');
|
||||
for (const a of faecher.keys()) {
|
||||
if (!faecher.get(a).length) continue;
|
||||
const m = el('a', 'brettmarken__weg', einstellung?.arten?.[a] || a);
|
||||
m.href = `#abschnitt-${a}`;
|
||||
marken.append(m);
|
||||
}
|
||||
if (marken.childNodes.length > 1) ziel.append(marken);
|
||||
|
||||
for (const a of faecher.keys()) {
|
||||
const fach = faecher.get(a);
|
||||
if (!fach.length) continue;
|
||||
const kopf2 = el('h2', 'brettabschnitt');
|
||||
kopf2.id = `abschnitt-${a}`;
|
||||
kopf2.textContent = einstellung?.arten?.[a] || a;
|
||||
kopf2.append(el('span', 'brettabschnitt__zahl', String(fach.length)));
|
||||
ziel.append(kopf2);
|
||||
for (const e of fach) {
|
||||
const k = karte(e);
|
||||
karten.set(e.id, k);
|
||||
ziel.append(k);
|
||||
}
|
||||
}
|
||||
sprungZeigen(ziel, karten);
|
||||
return;
|
||||
}
|
||||
|
||||
if (bereich === 'ansteht') {
|
||||
/* ALS ZEITSTRAHL, NICHT ALS LISTE (17.09.2026).
|
||||
|
||||
|
||||
+12
-12
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -291,10 +291,10 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -168,10 +168,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -105,9 +105,9 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609171211" 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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -210,14 +210,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -89,11 +89,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -341,10 +341,10 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609171158"></script>
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158"></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158"></script>
|
||||
<script src="assets/js/chat.js?v=202609171158"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211"></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211"></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211"></script>
|
||||
<script src="assets/js/chat.js?v=202609171211"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -179,12 +179,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/content.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/content.js?v=202609171211" 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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="gate gate--crew">
|
||||
@@ -339,6 +339,6 @@
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/gate.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -13,25 +13,25 @@
|
||||
"theme_color": "#06090f",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609171158",
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609171211",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609171158",
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609171211",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609171158",
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609171211",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609171158",
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609171211",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
+13
-13
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -108,10 +108,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -102,9 +102,9 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609171211" 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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="gate">
|
||||
@@ -401,6 +401,6 @@
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/gate.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -377,11 +377,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -444,10 +444,10 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158"></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158"></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158"></script>
|
||||
<script src="assets/js/leistung.js?v=202609171158"></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211"></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211"></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211"></script>
|
||||
<script src="assets/js/leistung.js?v=202609171211"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -423,10 +423,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -214,11 +214,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -134,9 +134,9 @@
|
||||
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/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,11 +106,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/report.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/report.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -173,10 +173,10 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/heim.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -674,10 +674,10 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/start.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/start.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -85,11 +85,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -146,11 +146,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -94,9 +94,9 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -110,10 +110,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/team.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/team.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu
|
||||
@@ -84,9 +84,9 @@
|
||||
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/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609171211" 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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -126,9 +126,9 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des
|
||||
Treffs 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -211,10 +211,10 @@
|
||||
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/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -149,11 +149,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609171158" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171158" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609171211" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609171211" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609171211" />
|
||||
<!-- 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=202609171158" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609171211" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -190,10 +190,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609171158" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609171211" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609171211" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user