Compare commits
3
Commits
586eb51504
...
d77dd216c5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d77dd216c5 | ||
|
|
947ea7ff49 | ||
|
|
c4e26409b9 |
@@ -0,0 +1,206 @@
|
||||
/* =====================================================================
|
||||
pruef-installieren.mjs — Die Seite als App auf dem Gerät
|
||||
|
||||
Filipe, 20.09.2026: „kannst du da dazwischen in der starseite oben,
|
||||
ein button reinsetzen damit die leute die seite installieren koennen
|
||||
auf dem handy oder pc. das soll auch verschwinden wenn die leute es
|
||||
installiert haben."
|
||||
|
||||
---------------------------------------------------------------------
|
||||
WARUM DAS MEHR IST ALS EIN KNOPF
|
||||
|
||||
Ohne installierte App gibt es auf dem Handy keine verlässlichen
|
||||
Benachrichtigungen — daran hing im September das Telefonieren. Das
|
||||
Manifest war die ganze Zeit vollständig, die App ließ sich
|
||||
installieren. Nur bot das ausschließlich der Browser an, versteckt
|
||||
in seinem Dreipunktemenü.
|
||||
|
||||
DREI ZUSTÄNDE, DREI ANTWORTEN — und jede wird hier geprüft:
|
||||
|
||||
1. schon installiert -> gar kein Knopf
|
||||
2. Browser bietet an -> Knopf fragt ihn
|
||||
3. Safari/iPhone -> Knopf erklärt den Weg (dort gibt es
|
||||
`beforeinstallprompt` nicht und wird es
|
||||
nicht geben)
|
||||
|
||||
Der gefährlichste Fall ist der dritte: Ein Knopf, der auf dem iPhone
|
||||
nichts tut, ist schlimmer als keiner — man drückt ihn und sucht den
|
||||
Fehler bei sich.
|
||||
|
||||
AUFRUF: node server/pruef-installieren.mjs
|
||||
===================================================================== */
|
||||
|
||||
import { mkdtempSync, rmSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import { portMussFreiSein } from "./helfer-port.mjs";
|
||||
import { notbremse } from "./helfer-notbremse.mjs";
|
||||
|
||||
const PORT = await portMussFreiSein(4435, "pruef-installieren");
|
||||
const ordner = mkdtempSync(join(tmpdir(), "ws-install-"));
|
||||
process.env.WORKSPACE_DB = join(ordner, "workspace.db");
|
||||
process.env.PORT = String(PORT);
|
||||
process.env.SITE_ACCESS_SECRET = "lokaler-test";
|
||||
process.env.SITE_PUBLIC_LAUNCH_AT = "2020-01-01T00:00:00+01:00";
|
||||
const express = (await import("express")).default;
|
||||
const ec = express.response.cookie;
|
||||
express.response.cookie = function (n, w, o) { return ec.call(this, n, w, { ...(o || {}), secure: false }); };
|
||||
await import("./index.js");
|
||||
notbremse(220_000, "pruef-installieren");
|
||||
await new Promise((r) => setTimeout(r, 900));
|
||||
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 ok = (b, t) => { geprueft++; console.log((b ? " ok " : " FEHL ") + t); if (!b) fehler++; };
|
||||
|
||||
console.log("\n=== Die Seite als App installieren ===\n");
|
||||
|
||||
/* ---- 1. Das Manifest, ohne Browser -------------------------------- */
|
||||
{
|
||||
const { readFileSync } = await import("node:fs");
|
||||
const { fileURLToPath } = await import("node:url");
|
||||
const { dirname } = await import("node:path");
|
||||
const HIER = dirname(fileURLToPath(import.meta.url));
|
||||
const m = JSON.parse(readFileSync(join(HIER, "..", "workspace", "crew.webmanifest"), "utf8"));
|
||||
/* Ohne diese vier Angaben bietet kein Browser das Installieren an --
|
||||
der schoenste Knopf haette dann nichts zu fragen. */
|
||||
ok(!!m.name && !!m.short_name, `Name und Kurzname stehen (${m.short_name})`);
|
||||
ok(m.display === "standalone", `display ist "${m.display}"`);
|
||||
ok(!!m.start_url && m.start_url.startsWith("/workspace/"),
|
||||
`Startadresse zeigt in den Workspace (${m.start_url})`);
|
||||
const gross = (m.icons || []).filter((i) => /512|384/.test(i.sizes || ""));
|
||||
ok(gross.length >= 1, `mindestens ein grosses Symbol (${gross.length})`);
|
||||
}
|
||||
|
||||
/* ---- 2. Am echten Bildschirm -------------------------------------- */
|
||||
const { DatabaseSync } = await import("node:sqlite");
|
||||
const { scryptSync, randomBytes } = await import("node:crypto");
|
||||
const d = new DatabaseSync(process.env.WORKSPACE_DB);
|
||||
const salt = randomBytes(16).toString("hex");
|
||||
const hash = scryptSync("CODE-DOGI-0001", 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, aktiv, erstellt)"
|
||||
+ " VALUES (?,?,?,?,?,1,?)").run("Filipe", "admin", hash, salt, 32768, new Date().toISOString());
|
||||
d.close();
|
||||
|
||||
const pw = await import("file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
|
||||
const browser = await pw.chromium.launch();
|
||||
try {
|
||||
async function seiteAuf(extra = {}) {
|
||||
const ctx = await browser.newContext({ viewport: { width: 1280, height: 860 }, ...extra });
|
||||
const s = await ctx.newPage();
|
||||
await s.goto(BASIS + "/workspace/", { waitUntil: "networkidle" });
|
||||
await s.click('.rolle[data-rolle="admin"]');
|
||||
await s.fill("#code", "CODE-DOGI-0001");
|
||||
await s.click("button[type=submit]");
|
||||
await s.waitForURL("**/start.html", { timeout: 25000 });
|
||||
await s.waitForTimeout(1300);
|
||||
return { ctx, s };
|
||||
}
|
||||
|
||||
/* ---- Zustand 2: der Browser bietet es an ----------------------- */
|
||||
const a = await seiteAuf();
|
||||
/* Chromium loest `beforeinstallprompt` in dieser Umgebung nicht von
|
||||
selbst aus (kein echtes Profil, kein Nutzerverhalten). Das
|
||||
Ereignis wird deshalb nachgestellt -- geprueft wird, was DIE SEITE
|
||||
damit macht, und genau das ist hier die Frage. */
|
||||
const vorher = await a.s.locator(".install-knopf").count();
|
||||
const sichtbarVorher = await a.s.evaluate(() =>
|
||||
!!document.querySelector(".install-knopf:not([hidden])"));
|
||||
ok(vorher === 1, `der Knopf steht im Dokument (${vorher})`);
|
||||
ok(sichtbarVorher === false,
|
||||
"bleibt aber versteckt, solange der Browser nichts anbietet — kein Knopf ohne Wirkung");
|
||||
|
||||
await a.s.evaluate(() => {
|
||||
const e = new Event("beforeinstallprompt");
|
||||
e.prompt = () => {};
|
||||
e.userChoice = Promise.resolve({ outcome: "accepted" });
|
||||
window.dispatchEvent(e);
|
||||
});
|
||||
await a.s.waitForTimeout(300);
|
||||
const nachher = await a.s.evaluate(() => {
|
||||
const k = document.querySelector(".install-knopf");
|
||||
if (!k) return null;
|
||||
const r = k.getBoundingClientRect();
|
||||
return { sichtbar: !k.hidden, text: k.textContent.trim(),
|
||||
satz: k.getAttribute("aria-label"),
|
||||
breit: Math.round(r.width), hoch: Math.round(r.height) };
|
||||
});
|
||||
ok(nachher?.sichtbar === true, `sobald der Browser anbietet, steht er da ("${nachher?.text}")`);
|
||||
ok((nachher?.hoch || 0) >= 44, ` und ist am Finger treffbar (${nachher?.hoch} px)`);
|
||||
ok(/installieren/i.test(nachher?.satz || ""),
|
||||
` mit einem ganzen Satz fuer Vorleseprogramme ("${nachher?.satz}")`);
|
||||
|
||||
/* Und ein Druck macht ihn fertig. */
|
||||
await a.s.click(".install-knopf");
|
||||
await a.s.waitForTimeout(500);
|
||||
const weg = await a.s.locator(".install-knopf").count();
|
||||
ok(weg === 0, `nach dem Installieren ist er weg (${weg})`);
|
||||
|
||||
/* ---- Zustand 1: schon installiert ------------------------------ */
|
||||
const b = await browser.newContext({ viewport: { width: 1280, height: 860 } });
|
||||
const bs = await b.newPage();
|
||||
/* `display-mode: standalone` laesst sich nicht direkt setzen --
|
||||
`matchMedia` wird deshalb vor dem Laden ueberschrieben. Damit
|
||||
antwortet die Seite genau so, wie sie es in einer installierten
|
||||
App taete. */
|
||||
await bs.addInitScript(() => {
|
||||
const echt = window.matchMedia.bind(window);
|
||||
window.matchMedia = (q) => (q.includes("display-mode: standalone")
|
||||
? { matches: true, media: q, addEventListener() {}, removeEventListener() {}, addListener() {}, removeListener() {} }
|
||||
: echt(q));
|
||||
});
|
||||
await bs.goto(BASIS + "/workspace/", { waitUntil: "networkidle" });
|
||||
await bs.click('.rolle[data-rolle="admin"]');
|
||||
await bs.fill("#code", "CODE-DOGI-0001");
|
||||
await bs.click("button[type=submit]");
|
||||
await bs.waitForURL("**/start.html", { timeout: 25000 });
|
||||
await bs.waitForTimeout(1300);
|
||||
const inApp = await bs.locator(".install-knopf").count();
|
||||
ok(inApp === 0,
|
||||
`Gegenprobe: in der installierten App gibt es den Knopf gar nicht erst (${inApp})`);
|
||||
|
||||
/* ---- Zustand 3: Safari auf dem iPhone -------------------------- */
|
||||
const c = await browser.newContext({
|
||||
viewport: { width: 390, height: 844 }, isMobile: true, hasTouch: true,
|
||||
userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) "
|
||||
+ "AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1",
|
||||
});
|
||||
const cs = await c.newPage();
|
||||
await cs.goto(BASIS + "/workspace/", { waitUntil: "networkidle" });
|
||||
await cs.click('.rolle[data-rolle="admin"]');
|
||||
await cs.fill("#code", "CODE-DOGI-0001");
|
||||
await cs.click("button[type=submit]");
|
||||
await cs.waitForURL("**/start.html", { timeout: 25000 });
|
||||
await cs.waitForTimeout(1300);
|
||||
const beiApple = await cs.evaluate(() => {
|
||||
const k = document.querySelector(".install-knopf");
|
||||
return k ? { sichtbar: !k.hidden, breit: Math.round(k.getBoundingClientRect().width) } : null;
|
||||
});
|
||||
/* DER WICHTIGSTE FALL: Dort gibt es `beforeinstallprompt` nicht --
|
||||
der Knopf muss trotzdem dastehen und erklaeren. */
|
||||
ok(beiApple?.sichtbar === true,
|
||||
"auf dem iPhone steht er von Anfang an da (dort fragt der Browser nie)");
|
||||
ok((beiApple?.breit || 0) >= 44,
|
||||
` und ist auch dort treffbar (${beiApple?.breit} px breit)`);
|
||||
|
||||
await cs.click(".install-knopf");
|
||||
await cs.waitForTimeout(700);
|
||||
const erklaerung = await cs.evaluate(() => {
|
||||
const d2 = document.querySelector("dialog.nachfrage[open]");
|
||||
return d2 ? d2.textContent.replace(/\s+/g, " ").trim() : null;
|
||||
});
|
||||
ok(/Teilen|Home-Bildschirm/i.test(erklaerung || ""),
|
||||
` und erklaert den Weg statt es zu versuchen ("${(erklaerung || "").slice(0, 70)}…")`);
|
||||
|
||||
await a.ctx.close(); await b.close(); await c.close();
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
|
||||
console.log(`\n${fehler ? fehler + " FEHLER" : "Alles in Ordnung"} — ${geprueft} Prüfungen\n`);
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
|
||||
process.exit(fehler ? 1 : 0);
|
||||
@@ -0,0 +1,178 @@
|
||||
/* =====================================================================
|
||||
pruef-vorschlaege.mjs — Die fertigen Vorschläge lassen sich wechseln
|
||||
|
||||
Filipe, 20.09.2026: „fertige vorschläge, überall auf der ganzen
|
||||
kompletten website, will ich dass man auch immer wieder neuladen
|
||||
kann, so dass wenn man alle benutzt hat man neue erstellen kann oder
|
||||
wenn keiner uns gefällt wir komplett neue erstellen können
|
||||
automatisch, mach das richtig geil dass es immer wieder möglich ist
|
||||
die liste zu wechseln wenn sie uns nicht gefällt oder leer ist."
|
||||
|
||||
---------------------------------------------------------------------
|
||||
WAS HIER DIE EIGENTLICHE FRAGE IST
|
||||
|
||||
Nicht „gibt es einen Knopf" — sondern „kommt nach dem Druck etwas
|
||||
ANDERES". Ein Knopf, der dieselben vier Karten noch einmal malt,
|
||||
besteht jede Prüfung, die nur nach dem Knopf sucht, und ist
|
||||
trotzdem wertlos. Deshalb werden hier die Titel VORHER und NACHHER
|
||||
verglichen.
|
||||
|
||||
UND DER RUNDLAUF: Wer oft genug drückt, muss wieder am Anfang
|
||||
landen statt vor einer leeren Liste. Das wird gemessen, indem so oft
|
||||
weitergeschaltet wird, dass der Vorrat sicher durch ist.
|
||||
|
||||
AUFRUF: node server/pruef-vorschlaege.mjs
|
||||
===================================================================== */
|
||||
|
||||
import { mkdtempSync, rmSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import { portMussFreiSein } from "./helfer-port.mjs";
|
||||
import { notbremse } from "./helfer-notbremse.mjs";
|
||||
|
||||
const PORT = await portMussFreiSein(4436, "pruef-vorschlaege");
|
||||
const ordner = mkdtempSync(join(tmpdir(), "ws-vorschlag-"));
|
||||
process.env.WORKSPACE_DB = join(ordner, "workspace.db");
|
||||
process.env.PORT = String(PORT);
|
||||
process.env.SITE_ACCESS_SECRET = "lokaler-test";
|
||||
process.env.SITE_PUBLIC_LAUNCH_AT = "2020-01-01T00:00:00+01:00";
|
||||
const express = (await import("express")).default;
|
||||
const ec = express.response.cookie;
|
||||
express.response.cookie = function (n, w, o) { return ec.call(this, n, w, { ...(o || {}), secure: false }); };
|
||||
await import("./index.js");
|
||||
notbremse(200_000, "pruef-vorschlaege");
|
||||
await new Promise((r) => setTimeout(r, 900));
|
||||
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 ok = (b, t) => { geprueft++; console.log((b ? " ok " : " FEHL ") + t); if (!b) fehler++; };
|
||||
|
||||
console.log("\n=== Fertige Vorschläge wechseln ===\n");
|
||||
|
||||
/* ---- Anmelden: ein Gast, denn nur wer NICHT schreiben darf, bekommt
|
||||
den Katalog ueberhaupt. Genau das ist der Sinn: Vorschlaege sind
|
||||
fuer leere Bretter da. ------------------------------------------ */
|
||||
const { DatabaseSync } = await import("node:sqlite");
|
||||
const { scryptSync, randomBytes } = await import("node:crypto");
|
||||
const d = new DatabaseSync(process.env.WORKSPACE_DB);
|
||||
const salt = randomBytes(16).toString("hex");
|
||||
const hash = scryptSync("CODE-DOGI-0001", 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, aktiv, erstellt)"
|
||||
+ " VALUES (?,?,?,?,?,1,?)").run("Filipe", "admin", hash, salt, 32768, new Date().toISOString());
|
||||
d.close();
|
||||
|
||||
const an = await fetch(BASIS + "/workspace/api/anmelden", {
|
||||
method: "POST", headers: { "Content-Type": "application/json", Origin: BASIS },
|
||||
body: JSON.stringify({ rolle: "admin", code: "CODE-DOGI-0001" }),
|
||||
});
|
||||
const keks = (an.headers.getSetCookie?.() || []).map((z) => z.split(";")[0]).join("; ");
|
||||
ok(an.ok && !!keks, "angemeldet");
|
||||
|
||||
const hole = async (weg) => {
|
||||
const a = await fetch(BASIS + weg, { headers: { Cookie: keks } });
|
||||
return a.ok ? a.json() : null;
|
||||
};
|
||||
|
||||
/* ---- 1. Welches Brett hat den groessten Vorrat? ------------------- */
|
||||
/* NICHT geraten: gemessen. Ein fest eingetragener Bereichsname waere
|
||||
falsch, sobald jemand den Katalog umbaut -- und die Pruefung liefe
|
||||
dann auf einem Brett mit drei Vorschlaegen und koennte gar nichts
|
||||
ueber das Weiterschalten sagen. */
|
||||
const { STARTKATALOG } = await import("./workspace-bereiche.js")
|
||||
.then((m) => ({ STARTKATALOG: m.STARTKATALOG }))
|
||||
.catch(() => ({ STARTKATALOG: null }));
|
||||
|
||||
let bereich = null, vorrat = 0;
|
||||
for (const b of ["regeln", "mitmachen", "content", "community", "live", "technik", "schutz"]) {
|
||||
const r = await hole(`/workspace/api/bereich/${b}/start`);
|
||||
if (r && r.offen > vorrat) { bereich = b; vorrat = r.offen; }
|
||||
}
|
||||
/* DRITTER AUSGANG: Ohne ein Brett mit mehr als vier offenen
|
||||
Vorschlaegen ist die Frage "kommt etwas anderes" nicht zu
|
||||
beantworten -- und das muss ein FEHLER sein, kein Schweigen. */
|
||||
ok(!!bereich && vorrat > 4,
|
||||
`Brett mit genug Vorrat gefunden: "${bereich}" mit ${vorrat} offenen`);
|
||||
if (!bereich || vorrat <= 4) {
|
||||
console.log("\n KONNTE NICHT NACHSEHEN: Kein Brett hat mehr als vier offene");
|
||||
console.log(" Vorschlaege. Ohne das ist nicht messbar, ob das Weiterschalten");
|
||||
console.log(" etwas anderes liefert. Katalog pruefen: server/workspace-*-start.js\n");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
/* ---- 2. Es kommt ein FENSTER, nicht die ganze Wand ---------------- */
|
||||
const s0 = await hole(`/workspace/api/bereich/${bereich}/start?ab=0`);
|
||||
ok(s0.vorschlaege.length < vorrat,
|
||||
`es kommen ${s0.vorschlaege.length} von ${vorrat} auf einmal - nicht alle`);
|
||||
ok(s0.vorschlaege.length === 4, `das Fenster ist vier gross (${s0.vorschlaege.length})`);
|
||||
ok(s0.mehr_da === true, "und der Server sagt, dass es mehr gibt (mehr_da)");
|
||||
ok(s0.offen === vorrat, `"offen" zaehlt weiterhin alle (${s0.offen}) - davon haengt "Alle N uebernehmen" ab`);
|
||||
|
||||
/* ---- 3. DIE EIGENTLICHE FRAGE: kommt etwas anderes? --------------- */
|
||||
const s1 = await hole(`/workspace/api/bereich/${bereich}/start?ab=4`);
|
||||
const t0 = s0.vorschlaege.map((v) => v.titel);
|
||||
const t1 = s1.vorschlaege.map((v) => v.titel);
|
||||
const gleich = t1.filter((t) => t0.includes(t)).length;
|
||||
ok(gleich === 0,
|
||||
`nach dem Weiterschalten ist KEINER der vier derselbe (${gleich} Ueberschneidungen)`);
|
||||
console.log(` vorher : ${t0.map((t) => t.slice(0, 22)).join(" | ")}`);
|
||||
console.log(` nachher: ${t1.map((t) => t.slice(0, 22)).join(" | ")}`);
|
||||
|
||||
/* GEGENPROBE: Dieselbe Abfrage OHNE Weiterschalten muss dieselben
|
||||
liefern. Sonst misst der Vergleich oben nur Zufall -- eine Liste,
|
||||
die sich bei jedem Abruf mischt, haette den Test auch bestanden und
|
||||
waere trotzdem kaputt (man findet einen Vorschlag nie wieder). */
|
||||
const s0b = await hole(`/workspace/api/bereich/${bereich}/start?ab=0`);
|
||||
ok(JSON.stringify(s0b.vorschlaege.map((v) => v.titel)) === JSON.stringify(t0),
|
||||
"Gegenprobe: ohne Weiterschalten kommen dieselben - die Liste wuerfelt nicht");
|
||||
|
||||
/* ---- 4. KEIN ENDE: der Vorrat laeuft im Kreis --------------------- */
|
||||
/* Weit ueber den Vorrat hinaus. Wer so oft drueckt, darf nicht vor
|
||||
einer leeren Liste stehen -- das war Filipes Punkt ("oder leer ist"). */
|
||||
const weit = await hole(`/workspace/api/bereich/${bereich}/start?ab=${vorrat * 3 + 2}`);
|
||||
ok((weit?.vorschlaege?.length || 0) === 4,
|
||||
`weit hinter dem Ende kommen immer noch vier (${weit?.vorschlaege?.length}) - kein leerer Bildschirm`);
|
||||
const rund = await hole(`/workspace/api/bereich/${bereich}/start?ab=${vorrat}`);
|
||||
ok(JSON.stringify(rund.vorschlaege.map((v) => v.titel)) === JSON.stringify(t0),
|
||||
"genau einmal herum gibt wieder den Anfang - der Rundlauf schliesst");
|
||||
|
||||
/* ---- 5. Unsinn in der Adresse darf nichts umwerfen ---------------- */
|
||||
for (const mies of ["-7", "abc", "9e99", "", "1.5"]) {
|
||||
const r = await hole(`/workspace/api/bereich/${bereich}/start?ab=${encodeURIComponent(mies)}`);
|
||||
ok((r?.vorschlaege?.length || 0) === 4, ` "ab=${mies}" liefert trotzdem vier`);
|
||||
}
|
||||
|
||||
/* ---- 6. Ein kleines Brett bekommt KEINEN Wechselknopf ------------- */
|
||||
/* Ein Knopf, der dieselben drei Karten noch einmal malt, ist ein
|
||||
Knopf, der nichts tut -- und der Verdacht, die Seite haenge, ist
|
||||
schlimmer als ein fehlender Knopf. */
|
||||
let klein = null;
|
||||
for (const b of ["highlight", "ansteht", "agentur", "wunsch", "ideen", "angebote"]) {
|
||||
const r = await hole(`/workspace/api/bereich/${b}/start`);
|
||||
if (r && r.offen > 0 && r.offen <= 4) { klein = { b, r }; break; }
|
||||
}
|
||||
ok(!!klein, `Brett mit hoechstens vier Vorschlaegen gefunden ("${klein?.b}", ${klein?.r?.offen})`);
|
||||
ok(klein?.r?.mehr_da === false,
|
||||
" und dort sagt der Server: nichts zu wechseln (mehr_da ist falsch)");
|
||||
ok((klein?.r?.vorschlaege?.length || 0) === klein?.r?.offen,
|
||||
` es kommen trotzdem alle ${klein?.r?.offen} auf einmal - nichts versteckt`);
|
||||
|
||||
/* ---- 7. Und die Seite baut den Knopf auch ------------------------- */
|
||||
const { readFileSync } = await import("node:fs");
|
||||
const { fileURLToPath } = await import("node:url");
|
||||
const { dirname } = await import("node:path");
|
||||
const HIER = dirname(fileURLToPath(import.meta.url));
|
||||
const js = readFileSync(join(HIER, "..", "workspace", "assets", "js", "bereich.js"), "utf8");
|
||||
ok(/katalogAb \+= Math\.max\(1, daten\.vorschlaege\.length\)/.test(js),
|
||||
"die Seite zaehlt um das weiter, was wirklich kam - keine zweite 4 im Code");
|
||||
ok(/if \(daten\.mehr_da\)/.test(js),
|
||||
"und zeigt den Knopf nur, wenn der Server sagt, dass es mehr gibt");
|
||||
ok(/let katalogAb = 0;[\s\S]{0,200}async function startkatalogZeigen/.test(js),
|
||||
"der Merker steht AUSSERHALB der Funktion - sonst spraenge die Liste nach jedem Uebernehmen zurueck");
|
||||
|
||||
console.log(`\n${fehler ? fehler + " FEHLER" : "Alles in Ordnung"} — ${geprueft} Prüfungen\n`);
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
|
||||
process.exit(fehler ? 1 : 0);
|
||||
@@ -0,0 +1,218 @@
|
||||
/* =====================================================================
|
||||
pruef-zeitraum.mjs — Ein Termin von–bis belegt jeden Tag dazwischen
|
||||
|
||||
Filipe, 20.09.2026: „wenn ich termine eintrage mit von bis, will ich
|
||||
dass die ganze zeit markiert ist und nicht nur der anfang."
|
||||
|
||||
---------------------------------------------------------------------
|
||||
ZWEI FEHLER, NICHT EINER
|
||||
|
||||
Der sichtbare: Die Kachel stand nur am Anfangstag. Wer im
|
||||
Monatsraster auf den Mittwoch sah, sah nichts — obwohl die Aktion
|
||||
von Montag bis Freitag lief.
|
||||
|
||||
Der unsichtbare, und der ist der schlimmere: Der SERVER suchte
|
||||
Einträge, deren ANFANG im sichtbaren Fenster liegt. Eine Aktion vom
|
||||
28.09. bis zum 05.10. kam im Oktober deshalb überhaupt nicht an —
|
||||
nicht „nur am ersten Tag markiert", sondern gar nicht da. Wer im
|
||||
Oktober plante, sah eine freie Woche, die belegt war.
|
||||
|
||||
Deshalb wird hier BEIDES gemessen, und der zweite Fall zuerst.
|
||||
|
||||
AUFRUF: node server/pruef-zeitraum.mjs
|
||||
===================================================================== */
|
||||
|
||||
import { mkdtempSync, rmSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import { portMussFreiSein } from "./helfer-port.mjs";
|
||||
import { notbremse } from "./helfer-notbremse.mjs";
|
||||
|
||||
const PORT = await portMussFreiSein(4437, "pruef-zeitraum");
|
||||
const ordner = mkdtempSync(join(tmpdir(), "ws-zeitraum-"));
|
||||
process.env.WORKSPACE_DB = join(ordner, "workspace.db");
|
||||
process.env.PORT = String(PORT);
|
||||
process.env.SITE_ACCESS_SECRET = "lokaler-test";
|
||||
process.env.SITE_PUBLIC_LAUNCH_AT = "2020-01-01T00:00:00+01:00";
|
||||
const express = (await import("express")).default;
|
||||
const ec = express.response.cookie;
|
||||
express.response.cookie = function (n, w, o) { return ec.call(this, n, w, { ...(o || {}), secure: false }); };
|
||||
await import("./index.js");
|
||||
notbremse(230_000, "pruef-zeitraum");
|
||||
await new Promise((r) => setTimeout(r, 900));
|
||||
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 ok = (b, t) => { geprueft++; console.log((b ? " ok " : " FEHL ") + t); if (!b) fehler++; };
|
||||
|
||||
console.log("\n=== Termine über mehrere Tage ===\n");
|
||||
|
||||
/* ---- Daten anlegen ------------------------------------------------
|
||||
RELATIV ZU HEUTE, nie mit einem festen Datum: Ein fest eingetragener
|
||||
Termin wird vom Kalender eingeholt, und dann schlägt die Prüfung
|
||||
fehl, ohne dass etwas kaputt ist (Hausregel, 06.09.2026). */
|
||||
const { DatabaseSync } = await import("node:sqlite");
|
||||
const { scryptSync, randomBytes } = await import("node:crypto");
|
||||
const d = new DatabaseSync(process.env.WORKSPACE_DB);
|
||||
const salt = randomBytes(16).toString("hex");
|
||||
const hash = scryptSync("CODE-DOGI-0001", 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, aktiv, erstellt)"
|
||||
+ " VALUES (?,?,?,?,?,1,?)").run("Filipe", "admin", hash, salt, 32768, new Date().toISOString());
|
||||
|
||||
const tagPlus = (n) => {
|
||||
const x = new Date();
|
||||
x.setHours(12, 0, 0, 0);
|
||||
x.setDate(x.getDate() + n);
|
||||
return x.toISOString().slice(0, 10);
|
||||
};
|
||||
/* Eine Aktion über fünf Tage, die GESTERN angefangen hat — genau der
|
||||
Fall, den der Server vorher verschluckt hat. */
|
||||
const LAUF_START = tagPlus(-1), LAUF_ENDE = tagPlus(3);
|
||||
/* Und ein Punkttermin als Gegenprobe. */
|
||||
const EINZEL = tagPlus(5);
|
||||
|
||||
const spalten = new Set(d.prepare("PRAGMA table_info(eintraege)").all().map((z) => z.name));
|
||||
ok(spalten.has("event_ende") && spalten.has("geplant"),
|
||||
"die Tabelle kennt Anfang und Ende (event_ende, geplant)");
|
||||
|
||||
const einf = (titel, von, bis) => d.prepare(
|
||||
"INSERT INTO eintraege (bereich, art, titel, text, status, dringlichkeit,"
|
||||
+ " datum, geplant, event_ende, erstellt_von, erstellt)"
|
||||
+ " VALUES (?,?,?,?,?,?,?,?,?,?,?)")
|
||||
.run("live", "idee", titel, "", "offen", "mittel", von, von, bis, 1,
|
||||
new Date().toISOString());
|
||||
einf("Wochenaktion quer", LAUF_START, LAUF_ENDE);
|
||||
einf("Nur ein Tag", EINZEL, null);
|
||||
d.close();
|
||||
|
||||
const an = await fetch(BASIS + "/workspace/api/anmelden", {
|
||||
method: "POST", headers: { "Content-Type": "application/json", Origin: BASIS },
|
||||
body: JSON.stringify({ rolle: "admin", code: "CODE-DOGI-0001" }),
|
||||
});
|
||||
const keks = (an.headers.getSetCookie?.() || []).map((z) => z.split(";")[0]).join("; ");
|
||||
ok(an.ok && !!keks, "angemeldet");
|
||||
|
||||
/* ---- 1. DER SERVER: Überschneidung statt Anfang ------------------- */
|
||||
const hole = async (von, tage) => {
|
||||
const a = await fetch(`${BASIS}/workspace/api/termine?von=${von}&tage=${tage}`,
|
||||
{ headers: { Cookie: keks } });
|
||||
return a.ok ? a.json() : null;
|
||||
};
|
||||
const titel = (j) => (j?.brettsachen || []).map((b) => b.titel);
|
||||
|
||||
/* Ein Fenster, das MITTEN im Zeitraum liegt — der Anfang ist davor. */
|
||||
const mitten = await hole(tagPlus(1), 2);
|
||||
ok(titel(mitten).includes("Wochenaktion quer"),
|
||||
"ein laufender Zeitraum kommt mit, auch wenn sein Anfang vor dem Fenster liegt");
|
||||
console.log(` Fenster ${tagPlus(1)} + 2 Tage, Aktion läuft ${LAUF_START}–${LAUF_ENDE}`);
|
||||
|
||||
/* GEGENPROBE: Ein Fenster NACH dem Ende darf ihn nicht bringen. Ohne
|
||||
diese Probe würde auch ein Server bestehen, der einfach alles
|
||||
schickt — und dann stünde jeder je getippte Zettel im Kalender. */
|
||||
const danach = await hole(tagPlus(10), 5);
|
||||
ok(!titel(danach).includes("Wochenaktion quer"),
|
||||
"Gegenprobe: nach dem Ende kommt er nicht mehr — es wird nicht einfach alles geschickt");
|
||||
const davor = await hole(tagPlus(-30), 20);
|
||||
ok(!titel(davor).includes("Wochenaktion quer"),
|
||||
"Gegenprobe: und vor dem Anfang auch nicht");
|
||||
|
||||
/* Der Punkttermin muss sich genauso verhalten wie vorher. */
|
||||
const beimEinzel = await hole(EINZEL, 1);
|
||||
ok(titel(beimEinzel).includes("Nur ein Tag"),
|
||||
"der Punkttermin kommt weiterhin an seinem Tag");
|
||||
|
||||
/* ---- 2. DER BILDSCHIRM: jeder Tag ist markiert -------------------- */
|
||||
const pw = await import("file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
|
||||
const browser = await pw.chromium.launch();
|
||||
try {
|
||||
const ctx = await browser.newContext({ viewport: { width: 1400, height: 1000 } });
|
||||
const s = await ctx.newPage();
|
||||
await s.goto(BASIS + "/workspace/", { waitUntil: "networkidle" });
|
||||
await s.click('.rolle[data-rolle="admin"]');
|
||||
await s.fill("#code", "CODE-DOGI-0001");
|
||||
await s.click("button[type=submit]");
|
||||
await s.waitForURL("**/start.html", { timeout: 25000 });
|
||||
await s.goto(BASIS + "/workspace/kalender.html", { waitUntil: "networkidle" });
|
||||
await s.waitForTimeout(1800);
|
||||
|
||||
/* Wie viele Tageszellen tragen die Aktion? */
|
||||
const lage = await s.evaluate(() => {
|
||||
const zellen = [...document.querySelectorAll(".k-tag")];
|
||||
const treffer = [];
|
||||
for (const z of zellen) {
|
||||
for (const p of z.querySelectorAll(".k-pille")) {
|
||||
if (/Wochenaktion quer/.test(p.textContent)) {
|
||||
treffer.push({
|
||||
zahl: z.querySelector(".k-tag__zahl")?.textContent || "?",
|
||||
spanne: p.dataset.spanne || null,
|
||||
text: p.textContent.replace(/\s+/g, " ").trim(),
|
||||
breit: Math.round(p.getBoundingClientRect().width),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
const einzel = [...document.querySelectorAll(".k-pille")]
|
||||
.filter((p) => /Nur ein Tag/.test(p.textContent));
|
||||
return { zellen: zellen.length, treffer,
|
||||
einzel: einzel.length, einzelSpanne: einzel[0]?.dataset.spanne ?? null };
|
||||
});
|
||||
|
||||
ok(lage.zellen > 0, `das Monatsraster steht (${lage.zellen} Tageszellen)`);
|
||||
ok(lage.treffer.length === 5,
|
||||
`die Aktion ist an allen fünf Tagen markiert (${lage.treffer.length})`);
|
||||
console.log(" " + lage.treffer.map((t) => `${t.zahl}.[${t.spanne}]`).join(" "));
|
||||
|
||||
const pos = lage.treffer.map((t) => t.spanne);
|
||||
ok(pos[0] === "start" && pos.at(-1) === "ende",
|
||||
`Anfang und Ende sind als solche erkennbar (${pos[0]} … ${pos.at(-1)})`);
|
||||
ok(pos.slice(1, -1).every((p) => p === "mitte"),
|
||||
"dazwischen steht überall 'mitte' — die Form sagt, dass es weitergeht");
|
||||
|
||||
/* Auf dem ersten Tag steht die Uhrzeit-Spalte, danach die Lage. Eine
|
||||
Uhrzeit am Mittwoch zu wiederholen behauptet, es ginge am Mittwoch
|
||||
wieder los. */
|
||||
ok(/Tag 2\/5/.test(lage.treffer[1]?.text || ""),
|
||||
`der zweite Tag sagt, der wievielte er ist ("${lage.treffer[1]?.text.slice(0, 34)}")`);
|
||||
ok(!/Tag \d+\/\d+/.test(lage.treffer[0]?.text || ""),
|
||||
"am ersten Tag steht das NICHT — dort gehört die Startzeit hin");
|
||||
|
||||
/* GEGENPROBE AM BILDSCHIRM: Der Punkttermin darf sich nicht
|
||||
angesteckt haben. Ohne sie bestünde auch eine Fassung, die jede
|
||||
Kachel über den halben Monat zieht. */
|
||||
ok(lage.einzel === 1,
|
||||
`Gegenprobe: der Punkttermin steht an genau einem Tag (${lage.einzel})`);
|
||||
ok(lage.einzelSpanne === null,
|
||||
"Gegenprobe: und trägt keine Spannen-Kennzeichnung");
|
||||
|
||||
/* ---- 3. Der Tagesdialog widerspricht dem Raster nicht ----------- */
|
||||
/* Vorher filterte er selbst auf den Anfangstag: Im Raster war der
|
||||
Mittwoch markiert, tippte man ihn an, stand da „An diesem Tag
|
||||
steht nichts." */
|
||||
const mitteTag = lage.treffer[2]?.zahl;
|
||||
await s.evaluate((zahl) => {
|
||||
for (const z of document.querySelectorAll(".k-tag")) {
|
||||
if (z.querySelector(".k-tag__zahl")?.textContent === zahl) { z.click(); return; }
|
||||
}
|
||||
}, mitteTag);
|
||||
await s.waitForTimeout(700);
|
||||
const dialog = await s.evaluate(() => {
|
||||
const dl = document.querySelector("#tagdialog[open]");
|
||||
return dl ? dl.textContent.replace(/\s+/g, " ").trim() : null;
|
||||
});
|
||||
ok(!!dialog && /Wochenaktion quer/.test(dialog),
|
||||
`der Tagesdialog am ${mitteTag}. zeigt die Aktion auch`);
|
||||
ok(!/An diesem Tag steht nichts/.test(dialog || ""),
|
||||
" und sagt nicht mehr 'An diesem Tag steht nichts'");
|
||||
|
||||
await ctx.close();
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
|
||||
console.log(`\n${fehler ? fehler + " FEHLER" : "Alles in Ordnung"} — ${geprueft} Prüfungen\n`);
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
|
||||
process.exit(fehler ? 1 : 0);
|
||||
@@ -1846,9 +1846,59 @@ bereicheRouter.get("/workspace/api/bereich/:bereich/start", (req, res) => {
|
||||
Wahrheit, und beim Umformulieren liefe sie auseinander. */
|
||||
const da = new Set(db().prepare(
|
||||
"SELECT titel FROM eintraege WHERE bereich = ?").all(bereich).map((z) => z.titel));
|
||||
|
||||
/* ==== EIN FENSTER STATT DER GANZEN LISTE (20.09.2026) ===========
|
||||
|
||||
Filipe: "fertige vorschlaege, ueberall auf der ganzen kompletten
|
||||
website, will ich dass man auch immer wieder neuladen kann, so
|
||||
dass wenn man alle benutzt hat man neue erstellen kann oder wenn
|
||||
keiner uns gefaellt wir komplett neue erstellen koennen
|
||||
automatisch ... dass es immer wieder moeglich ist die liste zu
|
||||
wechseln wenn sie uns nicht gefaellt oder leer ist."
|
||||
|
||||
BISHER KAMEN ALLE AUF EINMAL. Damit gab es nichts zu wechseln --
|
||||
die Liste war entweder ganz da oder ganz weg. Und bei 17
|
||||
Vorschlaegen (Brett "regeln") ist eine Wand aus Karten das
|
||||
Gegenteil von "uebernehmen, was passt".
|
||||
|
||||
JETZT: vier auf einmal, und ein Knopf holt die naechsten vier.
|
||||
Ist der Vorrat durch, faengt er von vorn an -- `ab` wird mit
|
||||
Rest gerechnet, es gibt also kein Ende und keine Sackgasse.
|
||||
|
||||
WAS ES NICHT IST: Die Vorschlaege werden nicht ERZEUGT. Sie sind
|
||||
ein geschriebener Vorrat (113 Stueck auf 16 Brettern), und das
|
||||
steht auch in der Antwort -- `vorrat` sagt, wie viele es
|
||||
insgesamt sind. Der Oberflaeche zu erlauben, "neue" zu
|
||||
versprechen, die es nicht gibt, waere eine Luege mit
|
||||
Fortschrittsanzeige. */
|
||||
const FENSTER = 4;
|
||||
const offeneListe = liste.map((v, nr) => ({ nr, ...v, schon: da.has(v.titel) }))
|
||||
.filter((v) => !v.schon);
|
||||
|
||||
const roh = Number(req.query?.ab);
|
||||
/* MODULO STATT GRENZE: Wer oft genug weiterklickt, landet wieder am
|
||||
Anfang -- statt vor einer leeren Liste zu stehen. */
|
||||
const ab = offeneListe.length
|
||||
? ((Number.isFinite(roh) ? Math.trunc(roh) : 0) % offeneListe.length
|
||||
+ offeneListe.length) % offeneListe.length
|
||||
: 0;
|
||||
|
||||
const fenster = [];
|
||||
for (let i = 0; i < Math.min(FENSTER, offeneListe.length); i++) {
|
||||
fenster.push(offeneListe[(ab + i) % offeneListe.length]);
|
||||
}
|
||||
|
||||
res.json({
|
||||
vorschlaege: liste.map((v, nr) => ({ nr, ...v, schon: da.has(v.titel) })),
|
||||
offen: liste.filter((v) => !da.has(v.titel)).length,
|
||||
vorschlaege: fenster,
|
||||
/* `offen` bleibt, was es war: wie viele es NOCH gibt. Die
|
||||
Oberflaeche zaehlt damit "Alle N uebernehmen" richtig. */
|
||||
offen: offeneListe.length,
|
||||
/* NEU: Gibt es ueberhaupt etwas zu wechseln? Ohne diese Angabe
|
||||
muesste die Seite rechnen, und ein Knopf, der nichts anderes
|
||||
zeigt, ist ein Knopf, der nichts tut. */
|
||||
mehr_da: offeneListe.length > FENSTER,
|
||||
ab,
|
||||
vorrat: liste.length,
|
||||
});
|
||||
} catch (fehler) {
|
||||
console.error("[workspace] Startkatalog:", fehler?.message);
|
||||
|
||||
@@ -36,7 +36,7 @@ import { sichtbarEintrag, BEREICHE } from "./workspace-bereiche.js";
|
||||
laufen auseinander, und dann zeigt die Karte etwas anderes als der
|
||||
Kalender. */
|
||||
import {
|
||||
TERMIN_TAG_SQL, TERMIN_BEDINGUNG_SQL, TERMIN_GRUND_SQL, OHNE_ZUSTAENDE,
|
||||
TERMIN_TAG_SQL, TERMIN_ENDE_SQL, TERMIN_BEDINGUNG_SQL, TERMIN_GRUND_SQL, OHNE_ZUSTAENDE,
|
||||
} from "./workspace-termin-regel.js";
|
||||
|
||||
export const kalenderRouter = express.Router();
|
||||
@@ -463,10 +463,17 @@ kalenderRouter.get("/workspace/api/termine", (req, res) => {
|
||||
WHERE ${eintragRegel.wo}
|
||||
AND e.status NOT IN (${OHNE_ZUSTAENDE.map(() => "?").join(", ")})
|
||||
AND ${TERMIN_BEDINGUNG_SQL}
|
||||
AND ${TERMIN_TAG_SQL} >= ?
|
||||
/* UEBERSCHNEIDUNG, NICHT ANFANG (20.09.2026).
|
||||
Vorher stand hier zweimal TERMIN_TAG_SQL -- also: „faengt
|
||||
im sichtbaren Fenster an". Eine Aktion vom 28.09. bis zum
|
||||
05.10. fiel damit im Oktober komplett heraus. Richtig ist
|
||||
die Frage, ob sich Zeitraum und Fenster BERUEHREN:
|
||||
faengt vor dem Fensterende an UND hoert nach dem
|
||||
Fensteranfang auf. */
|
||||
AND ${TERMIN_TAG_SQL} <= ?
|
||||
AND ${TERMIN_ENDE_SQL} >= ?
|
||||
ORDER BY wann, e.uhrzeit, e.id`)
|
||||
.all(...eintragRegel.werte, ...OHNE_ZUSTAENDE, heuteLokal(), von, bis) : [];
|
||||
.all(...eintragRegel.werte, ...OHNE_ZUSTAENDE, heuteLokal(), bis, von) : [];
|
||||
|
||||
/* DER NAME DES BRETTS KOMMT MIT -- und zwar aus dem Katalog, nicht
|
||||
als abgeschriebene Liste im Browser. Ein Brett, das morgen
|
||||
|
||||
@@ -52,6 +52,26 @@
|
||||
* den 24., auch wenn der Zettel am 3. entstanden ist. */
|
||||
export const TERMIN_TAG_SQL = "COALESCE(e.geplant, e.datum)";
|
||||
|
||||
/** Der LETZTE Tag, an dem ein Eintrag noch laeuft -- als SQL-Ausdruck.
|
||||
*
|
||||
* Gebraucht seit dem 20.09.2026. Filipe: „wenn ich termine eintrage
|
||||
* mit von bis, will ich dass die ganze zeit markiert ist und nicht
|
||||
* nur der anfang."
|
||||
*
|
||||
* DER FEHLER SASS TIEFER ALS IN DER ANZEIGE. Der Kalender suchte
|
||||
* Eintraege, deren ANFANG im sichtbaren Fenster liegt. Eine Aktion
|
||||
* vom 28.09. bis zum 05.10. kam damit im Oktober ueberhaupt nicht an
|
||||
* -- nicht „nur am ersten Tag markiert", sondern gar nicht da. Wer im
|
||||
* Oktober plante, sah eine freie Woche, die belegt war.
|
||||
*
|
||||
* `MAX` und nicht `COALESCE(e.event_ende, ...)`: Ein Ende, das VOR
|
||||
* dem Anfang liegt (vertippt, Anfang spaeter verschoben), wuerde
|
||||
* sonst den Eintrag aus seinem eigenen Zeitraum werfen. Der leere
|
||||
* Text sortiert vor jedem Datum -- ohne Ende gewinnt damit immer der
|
||||
* Anfang, und das ist genau richtig. */
|
||||
export const TERMIN_ENDE_SQL =
|
||||
"MAX(COALESCE(e.event_ende, ''), COALESCE(e.geplant, e.datum))";
|
||||
|
||||
/** Die Bedingung als SQL. Erwartet GENAU EINEN Platzhalter: den
|
||||
* heutigen Tag in Ortszeit (`heuteLokal()`).
|
||||
*
|
||||
|
||||
@@ -16,15 +16,15 @@
|
||||
verdeckt. Gefunden hat es pruef-struktur.
|
||||
|
||||
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als
|
||||
Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet
|
||||
ausserhalb der App -- auf einer Seite, die genau erklaeren soll,
|
||||
WARUM das Telefon nicht klingelt, ist das besonders unpassend. -->
|
||||
<link rel="manifest" href="/workspace/crew.webmanifest?v=202609191018" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<style>
|
||||
/* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite
|
||||
soll auch dann noch etwas anzeigen, wenn genau das schiefgeht,
|
||||
@@ -125,6 +125,6 @@
|
||||
</main>
|
||||
␍␍
|
||||
|
||||
<script src="assets/js/anruf-probe.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/anruf-probe.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -22,25 +22,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609201907",
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609201909",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609201907",
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609201909",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609201907",
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609201909",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609201907",
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609201909",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
@@ -998,6 +998,25 @@
|
||||
font-size: .85rem; color: var(--text-leise);
|
||||
}
|
||||
.startkatalog__alle { flex: 0 0 auto; }
|
||||
.startkatalog__andere { flex: 0 0 auto; }
|
||||
|
||||
/* DER WECHSELKNOPF IST DER ZWEITE, NICHT DER ERSTE (20.09.2026).
|
||||
|
||||
Neben ihm steht "Alle N uebernehmen" -- das ist die Handlung, die
|
||||
etwas bewirkt. "Andere zeigen" blaettert nur. Stuenden beide gleich
|
||||
kraeftig da, muesste man jedes Mal lesen, welcher welcher ist.
|
||||
Deshalb bekommt er dieselbe Form und weniger Farbe: erkennbar als
|
||||
Knopf, aber nicht als Angebot. */
|
||||
.startkatalog__andere {
|
||||
background: transparent;
|
||||
border-color: var(--rand);
|
||||
color: var(--text-leise);
|
||||
}
|
||||
.startkatalog__andere:hover {
|
||||
color: var(--text);
|
||||
border-color: color-mix(in srgb, var(--akzent) 45%, var(--rand));
|
||||
background: color-mix(in srgb, var(--akzent) 7%, transparent);
|
||||
}
|
||||
|
||||
/* Auto-fill: Auf dem Handy eine Spalte, am Rechner drei — gemessen,
|
||||
nicht gerechnet. */
|
||||
|
||||
@@ -355,6 +355,75 @@
|
||||
Kontrastmodus nicht zu erkennen. */
|
||||
.k-pille.erledigt { opacity: .5; text-decoration: line-through; }
|
||||
|
||||
/* =====================================================================
|
||||
EIN TERMIN, DER MEHRERE TAGE LAEUFT (20.09.2026)
|
||||
|
||||
Filipe: „wenn ich termine eintrage mit von bis, will ich dass die
|
||||
ganze zeit markiert ist und nicht nur der anfang."
|
||||
|
||||
Die Kachel steht jetzt in jeder Tageszelle dazwischen. Damit man
|
||||
sieht, dass es EIN Termin ist und nicht vier gleichnamige, wird sie
|
||||
an den Seiten angeschnitten, an denen es weitergeht:
|
||||
|
||||
Mo [ 20:00 Aktion ━
|
||||
Di ━ Tag 2/4 ━
|
||||
Mi ━ Tag 3/4 ━
|
||||
Do ━ Tag 4/4 ]
|
||||
|
||||
DIE FORM MACHT DIE AUSSAGE, nicht die Farbe -- an einer eckigen
|
||||
Kante sieht man „geht weiter" auch dann, wenn man Farben schlecht
|
||||
unterscheidet oder der Kontrastmodus alles einfaerbt.
|
||||
|
||||
WARUM KEIN ECHTER BALKEN UEBER DIE ZELLEN: Ein Element, das sich
|
||||
ueber mehrere Rasterzellen legt, muesste wissen, wo die Woche
|
||||
umbricht, wie hoch die Zeile gerade ist und was darunter noch steht.
|
||||
Das ist bei jeder Fensterbreite eine andere Rechnung -- und eine
|
||||
Rechnung, die irgendwann danebenliegt, schiebt Kacheln uebereinander.
|
||||
Die angeschnittene Kante kostet nichts und kann nicht verrutschen. */
|
||||
|
||||
/* Laeuft gestern schon: links glatt abgeschnitten, kein Randstrich. */
|
||||
.k-pille[data-spanne="mitte"],
|
||||
.k-pille[data-spanne="ende"] {
|
||||
border-left: 0;
|
||||
border-top-left-radius: 0; border-bottom-left-radius: 0;
|
||||
/* Der Strich am linken Rand wird zum FORTSETZUNGSZEICHEN: ein
|
||||
schmaler, waagerechter Balken in der Farbe, auf halber Hoehe. */
|
||||
padding-left: 12px;
|
||||
background-image: linear-gradient(90deg,
|
||||
var(--pfarbe) 0 4px, transparent 4px);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 50%;
|
||||
background-size: 100% 2px;
|
||||
}
|
||||
/* Geht morgen weiter: rechts glatt abgeschnitten. */
|
||||
.k-pille[data-spanne="start"],
|
||||
.k-pille[data-spanne="mitte"] {
|
||||
border-top-right-radius: 0; border-bottom-right-radius: 0;
|
||||
/* Eine Kante, die zeigt, dass hier nichts endet. */
|
||||
box-shadow: inset -3px 0 0 -1px color-mix(in srgb, var(--pfarbe) 70%, transparent);
|
||||
}
|
||||
/* Der ganze Zeitraum liegt etwas satter als ein Punkttermin -- er
|
||||
BELEGT die Tage, und das soll man beim Ueberfliegen sehen. */
|
||||
.k-pille[data-spanne] {
|
||||
background-color: color-mix(in srgb, var(--pfarbe) 22%, transparent);
|
||||
}
|
||||
.k-pille[data-spanne]:hover {
|
||||
background-color: color-mix(in srgb, var(--pfarbe) 32%, transparent);
|
||||
}
|
||||
/* „Tag 2/4" ist eine Angabe zur Lage, keine Uhrzeit -- deshalb ruhiger
|
||||
als die fette Startzeit daneben. */
|
||||
.k-pille__lauf { font-weight: 550; opacity: .82; }
|
||||
|
||||
@media (forced-colors: active) {
|
||||
/* Im Kontrastmodus verschwinden Farbflaechen und Schatten. Dann muss
|
||||
die Kante als echter Rahmen dastehen, sonst sieht die Kachel am
|
||||
Mittwoch genauso aus wie ein eigener Termin. */
|
||||
.k-pille[data-spanne="start"],
|
||||
.k-pille[data-spanne="mitte"] { border-right: 2px dashed CanvasText; }
|
||||
.k-pille[data-spanne="mitte"],
|
||||
.k-pille[data-spanne="ende"] { border-left: 2px dashed CanvasText; }
|
||||
}
|
||||
|
||||
/* ---------- Wochenansicht ----------------------------------------------- */
|
||||
.k-woche {
|
||||
display: grid; gap: 1px;
|
||||
|
||||
@@ -1022,3 +1022,43 @@
|
||||
.tperson[data-rolle="hand"] { border: 3px solid Highlight; }
|
||||
.tperson[data-rolle="hand"]::before { display: none; }
|
||||
}
|
||||
|
||||
/* ---- Der Installieren-Knopf (20.09.2026) ---------------------------
|
||||
|
||||
Er sieht aus wie die anderen Knöpfe der Kopfleiste -- mit einem
|
||||
Unterschied: ein leiser Akzentrand. Er ist ein Angebot, keine
|
||||
Warnung, und er verschwindet, sobald er überflüssig ist. Deshalb
|
||||
darf er auffallen, ohne zu drängen. */
|
||||
.install-knopf {
|
||||
appearance: none;
|
||||
display: inline-flex; align-items: center; gap: 7px;
|
||||
min-height: 44px; padding: 0 13px;
|
||||
border-radius: var(--radius-klein);
|
||||
border: 1px solid color-mix(in srgb, var(--akzent) 45%, transparent);
|
||||
background: color-mix(in srgb, var(--akzent) 12%, transparent);
|
||||
color: var(--text);
|
||||
font: inherit; font-size: .86rem; font-weight: 600;
|
||||
cursor: pointer; white-space: nowrap;
|
||||
transition: background var(--tempo), border-color var(--tempo);
|
||||
}
|
||||
.install-knopf:hover {
|
||||
background: color-mix(in srgb, var(--akzent) 22%, transparent);
|
||||
border-color: color-mix(in srgb, var(--akzent) 70%, transparent);
|
||||
}
|
||||
.install-knopf:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
|
||||
.install-knopf__zeichen {
|
||||
flex: none; width: 17px; height: 17px;
|
||||
fill: none; stroke: currentColor; stroke-width: 1.8;
|
||||
stroke-linecap: round; stroke-linejoin: round;
|
||||
}
|
||||
/* AM HANDY NUR DAS ZEICHEN. Die Leiste ist dort eng, und ein Knopf mit
|
||||
Pfeil-nach-unten-in-eine-Ablage wird als „herunterladen/installieren"
|
||||
verstanden -- das Wort kostet 90 px, die woanders fehlen. Der
|
||||
`aria-label` sagt es weiterhin vollständig. */
|
||||
@media (max-width: 760px) {
|
||||
.install-knopf__text { display: none; }
|
||||
.install-knopf { padding: 0; width: 44px; justify-content: center; }
|
||||
}
|
||||
@media (forced-colors: active) {
|
||||
.install-knopf { border: 1px solid CanvasText; }
|
||||
}
|
||||
|
||||
@@ -1641,13 +1641,32 @@
|
||||
Fertige Texte, die jemand aus dem Team uebernimmt. Nicht
|
||||
automatisch: Ein Text, den niemand gelesen hat, stuende sonst als
|
||||
Ansage des Teams auf einer oeffentlichen Seite. */
|
||||
/* WO IM VORRAT WIR GERADE STEHEN (20.09.2026).
|
||||
|
||||
Filipe: "fertige vorschlaege ... will ich dass man auch immer
|
||||
wieder neuladen kann, so dass wenn man alle benutzt hat man neue
|
||||
erstellen kann oder wenn keiner uns gefaellt wir komplett neue
|
||||
erstellen koennen automatisch."
|
||||
|
||||
Bisher kamen ALLE auf einmal -- damit gab es nichts zu wechseln.
|
||||
Jetzt zeigt der Server ein Fenster, und dieser Merker sagt ihm, wo
|
||||
es anfangen soll. Er steht ausserhalb der Funktion, weil `laden()`
|
||||
sie neu aufruft: Waere er drin, spraenge die Liste nach jedem
|
||||
Uebernehmen zurueck an den Anfang.
|
||||
|
||||
KEINE EIGENE FENSTERGROESSE HIER. Weitergezaehlt wird um das, was
|
||||
tatsaechlich kam (`vorschlaege.length`) -- eine zweite 4 an dieser
|
||||
Stelle waere eine Zahl, die beim naechsten Anfassen auseinanderlaeuft. */
|
||||
let katalogAb = 0;
|
||||
|
||||
async function startkatalogZeigen() {
|
||||
const ziel = $('startkatalog');
|
||||
if (!ziel) return;
|
||||
if (!darfEintragen()) { ziel.hidden = true; return; }
|
||||
let daten = null;
|
||||
try {
|
||||
const a = await fetch(`/workspace/api/bereich/${bereich}/start`,
|
||||
const a = await fetch(
|
||||
`/workspace/api/bereich/${bereich}/start?ab=${katalogAb}`,
|
||||
{ credentials: 'same-origin' });
|
||||
if (!a.ok) { ziel.hidden = true; return; }
|
||||
daten = await a.json();
|
||||
@@ -1660,7 +1679,9 @@
|
||||
kopf.append(el('h2', 'startkatalog__titel', 'Fertige Vorschläge'));
|
||||
kopf.append(el('p', 'startkatalog__unter',
|
||||
`${daten.offen} ${daten.offen === 1 ? 'Vorschlag ist' : 'Vorschläge sind'} `
|
||||
+ 'vorbereitet. Übernehmen, was passt – ändern kannst du danach alles.'));
|
||||
+ (daten.mehr_da
|
||||
? 'vorbereitet. Hier stehen die nächsten – übernimm, was passt.'
|
||||
: 'vorbereitet. Übernehmen, was passt – ändern kannst du danach alles.')));
|
||||
const alle = el('button', 'schritt startkatalog__alle',
|
||||
`Alle ${daten.offen} übernehmen`);
|
||||
alle.type = 'button';
|
||||
@@ -1673,6 +1694,32 @@
|
||||
await laden();
|
||||
});
|
||||
kopf.append(alle);
|
||||
|
||||
/* ---- ANDERE ZEIGEN ------------------------------------------------
|
||||
Nur wenn es ueberhaupt andere GIBT. Ein Knopf, der dieselben vier
|
||||
noch einmal bringt, ist ein Knopf, der nichts tut -- und der
|
||||
Verdacht, dass die Seite haengt, ist schlimmer als ein fehlender
|
||||
Knopf. Deshalb entscheidet der Server (`mehr_da`) und nicht eine
|
||||
Rechnung hier.
|
||||
|
||||
DER VORRAT ENDET NICHT: Der Server rechnet `ab` mit Rest, nach dem
|
||||
letzten kommt wieder der erste. Es gibt also keinen Zustand
|
||||
"durchgeklickt, jetzt ist leer". */
|
||||
if (daten.mehr_da) {
|
||||
const andere = el('button', 'schritt startkatalog__andere',
|
||||
'Andere Vorschläge zeigen');
|
||||
andere.type = 'button';
|
||||
andere.setAttribute('aria-label',
|
||||
'Andere Vorschläge zeigen – die nächsten aus dem Vorrat');
|
||||
andere.addEventListener('click', () => {
|
||||
/* Um das weiterzaehlen, was wirklich kam. Bei drei gezeigten
|
||||
Karten um drei -- sonst uebersprungen wir eine. */
|
||||
katalogAb += Math.max(1, daten.vorschlaege.length);
|
||||
startkatalogZeigen();
|
||||
});
|
||||
kopf.append(andere);
|
||||
}
|
||||
|
||||
ziel.append(kopf);
|
||||
|
||||
const liste = el('div', 'startkatalog__liste');
|
||||
|
||||
@@ -601,11 +601,93 @@
|
||||
statt verschluckt. */
|
||||
const sichtbare = () => (daten ? daten.eintraege.filter((e) => zeigen[e.art] !== false) : []);
|
||||
|
||||
/* =====================================================================
|
||||
EIN TERMIN VON--BIS STEHT AN JEDEM TAG DAZWISCHEN (20.09.2026)
|
||||
|
||||
Filipe: „wenn ich termine eintrage mit von bis, will ich dass die
|
||||
ganze zeit markiert ist und nicht nur der anfang."
|
||||
|
||||
BISHER stand er nur am Anfangstag. Wer im Monatsraster auf den
|
||||
Mittwoch sah, sah nichts -- obwohl die Aktion von Montag bis
|
||||
Freitag lief. Genau in der Ansicht, in der man plant, war der
|
||||
belegte Zeitraum unsichtbar, und man legte etwas mitten hinein.
|
||||
|
||||
WARUM GENAU HIER: `nachTag()` ist die EINZIGE Stelle, an der
|
||||
Eintraege auf Tage verteilt werden -- Monat, Woche, Liste und
|
||||
Zeitstrahl holen sich alle `karte.get(tag)`. Vier Ansichten
|
||||
einzeln nachzuruesten waere vier Stellen, an denen die naechste
|
||||
Ansicht vergessen wird.
|
||||
|
||||
DAS ENDE WIRD ABGELEITET, NICHT GEPFLEGT:
|
||||
* `bis` -- Brettkarten mit event_ende
|
||||
* Uhr + Dauer -- ein Live von 22:00 ueber 240 Minuten endet um
|
||||
02:00 am naechsten Tag. Das stand bisher
|
||||
NIRGENDS, obwohl die Zahlen da waren.
|
||||
Eine Liste „diese Arten haben ein Ende" waere die Liste, die beim
|
||||
naechsten Termintyp veraltet.
|
||||
|
||||
DIE KOPIEN AENDERN `tag` NICHT. Wer auf eine Kachel am Mittwoch
|
||||
tippt, will den Termin bearbeiten -- und der faengt am Montag an.
|
||||
Wuerde die Kopie `tag` auf den Mittwoch setzen, verschoebe ein
|
||||
Speichern den Termin auf den Tag, an dem man zufaellig
|
||||
hingetippt hat. Der Anzeigetag steht deshalb getrennt daneben. */
|
||||
|
||||
/** Der letzte Tag, an dem dieser Eintrag noch laeuft. */
|
||||
function endTagVon(e) {
|
||||
if (e.bis) return String(e.bis).slice(0, 10);
|
||||
if (e.uhr && Number(e.dauer_min) > 0) {
|
||||
const [st, mi] = e.uhr.split(':').map(Number);
|
||||
const start = ausText(e.tag);
|
||||
if (Number.isNaN(st) || Number.isNaN(start.getTime())) return e.tag;
|
||||
/* AB MITTERNACHT RECHNEN, NICHT AB `ausText`. `ausText` legt den
|
||||
Tag bewusst auf 12:00 UTC (damit Zeitzonen ihn nicht um einen
|
||||
Tag verschieben) -- wer darauf die Uhrzeit ADDIERT, rechnet
|
||||
zwoelf Stunden zu viel. Erster Anlauf ergab damit fuer
|
||||
„13:00, 60 Minuten" den FOLGETAG. */
|
||||
const mitternacht = Date.UTC(
|
||||
start.getUTCFullYear(), start.getUTCMonth(), start.getUTCDate());
|
||||
/* Minus eine Millisekunde: Ein Stream von 22:00 ueber genau zwei
|
||||
Stunden endet um 00:00 -- er laeuft am naechsten Tag NICHT
|
||||
mehr, auch wenn die Zahl dort steht. */
|
||||
const endeMs = mitternacht
|
||||
+ ((st * 60 + mi + Number(e.dauer_min)) * 60000) - 1;
|
||||
return alsText(new Date(Math.max(endeMs, mitternacht)));
|
||||
}
|
||||
return e.tag;
|
||||
}
|
||||
|
||||
/* Eine Obergrenze, die nicht schoen ist, aber ehrlich: Ein Eintrag
|
||||
mit kaputtem Enddatum (Jahr 9999) wuerde sonst Millionen Kopien
|
||||
bauen und den Browser anhalten. 400 Tage sind mehr als jede
|
||||
Ansicht je zeigt -- die Grenze ist also nie im Weg und faengt nur
|
||||
den Unfall ab. */
|
||||
const SPANNE_MAX = 400;
|
||||
|
||||
function nachTag() {
|
||||
const karte = new Map();
|
||||
const lege = (tag, e) => {
|
||||
if (!karte.has(tag)) karte.set(tag, []);
|
||||
karte.get(tag).push(e);
|
||||
};
|
||||
for (const e of sichtbare()) {
|
||||
if (!karte.has(e.tag)) karte.set(e.tag, []);
|
||||
karte.get(e.tag).push(e);
|
||||
const ende = endTagVon(e);
|
||||
if (!ende || ende <= e.tag) { lege(e.tag, e); continue; }
|
||||
|
||||
const tage = Math.min(SPANNE_MAX,
|
||||
Math.round((ausText(ende) - ausText(e.tag)) / 86400000) + 1);
|
||||
let d = ausText(e.tag);
|
||||
for (let i = 0; i < tage; i++) {
|
||||
lege(alsText(d), {
|
||||
...e,
|
||||
/* Der Tag, an dem die Kachel steht -- NICHT `tag`. */
|
||||
spann_tag: alsText(d),
|
||||
spann_nr: i + 1,
|
||||
spann_tage: tage,
|
||||
spann_bis: ende,
|
||||
spann_pos: i === 0 ? 'start' : (i === tage - 1 ? 'ende' : 'mitte'),
|
||||
});
|
||||
d = plus(d, 1);
|
||||
}
|
||||
}
|
||||
return karte;
|
||||
}
|
||||
@@ -629,8 +711,38 @@
|
||||
if (e.ziel) k.href = e.ziel;
|
||||
k.style.setProperty('--pfarbe', e.farbe);
|
||||
k.title = `${e.titel}${e.zusatz ? ' — ' + e.zusatz : ''}`
|
||||
+ (e.serie_id ? ' — wiederholt sich' : '');
|
||||
if (e.uhr) k.append(el('span', 'k-pille__zeit', e.uhr));
|
||||
+ (e.serie_id ? ' — wiederholt sich' : '')
|
||||
/* Der ganze Zeitraum, nicht nur „Tag 2/4": Wer am Mittwoch
|
||||
draufzeigt, will wissen, WANN es anfing und aufhoert -- sonst
|
||||
muss er selbst zurueckblaettern und zaehlen. */
|
||||
+ (e.spann_tage > 1
|
||||
? ` — läuft vom ${tagLang(e.tag)} bis ${tagLang(e.spann_bis)}`
|
||||
+ ` (Tag ${e.spann_nr} von ${e.spann_tage})`
|
||||
: '');
|
||||
/* ---- LAEUFT UEBER MEHRERE TAGE (20.09.2026) --------------------
|
||||
|
||||
Drei Dinge unterscheiden die Kachel eines Zeitraums von der eines
|
||||
Punkttermins, und alle drei sind noetig:
|
||||
|
||||
1. `data-spanne` -- daraus macht das Stilblatt einen
|
||||
durchgehenden Balken: links angeschnitten, wo er gestern
|
||||
schon lief, rechts angeschnitten, wo er morgen weiterlaeuft.
|
||||
Man sieht an der FORM, dass es weitergeht, ohne ein Wort.
|
||||
2. „Tag 2/4" statt der Uhrzeit auf den Folgetagen. Die Uhrzeit
|
||||
gehoert zum Anfang; sie am Mittwoch zu wiederholen behauptet,
|
||||
es ginge am Mittwoch um 20:00 wieder los.
|
||||
3. Der ganze Zeitraum im Titel -- fuer Maus und Vorleseprogramm.
|
||||
|
||||
AUF DEM ANFANGSTAG BLEIBT ALLES WIE VORHER. Wer den Termin
|
||||
eintraegt, sieht dort die Uhrzeit, die er eingetragen hat. */
|
||||
if (e.spann_tage > 1) {
|
||||
k.dataset.spanne = e.spann_pos;
|
||||
k.style.setProperty('--spann-tage', String(e.spann_tage));
|
||||
}
|
||||
if (e.spann_tage > 1 && e.spann_pos !== 'start') {
|
||||
k.append(el('span', 'k-pille__zeit k-pille__lauf',
|
||||
`Tag ${e.spann_nr}/${e.spann_tage}`));
|
||||
} else if (e.uhr) k.append(el('span', 'k-pille__zeit', e.uhr));
|
||||
/* Das Zeichen steht im Raster VOR dem Titel, nicht dahinter: Eine
|
||||
Zelle im Monatsraster ist gut 150 px breit, der Titel wird dort
|
||||
abgeschnitten -- ein Zeichen am Ende wäre genau in der Ansicht
|
||||
@@ -1355,7 +1467,16 @@
|
||||
|
||||
const liste = $('tagdialog-liste');
|
||||
liste.replaceChildren();
|
||||
const eintraege = sichtbare().filter((e) => e.tag === tag);
|
||||
/* UEBER `nachTag()`, NICHT UEBER `e.tag` (20.09.2026).
|
||||
|
||||
Vorher stand hier ein eigener Filter auf den Anfangstag. Folge:
|
||||
Im Monatsraster war die Aktion am Mittwoch markiert -- tippte man
|
||||
die Zelle an, sagte der Tagesdialog „An diesem Tag steht
|
||||
nichts." Zwei Antworten auf dieselbe Frage, und die zweite
|
||||
widerspricht dem, was man gerade gesehen hat.
|
||||
|
||||
`nachTag()` ist die eine Stelle, die das entscheidet. */
|
||||
const eintraege = nachTag().get(tag) || [];
|
||||
if (!eintraege.length) {
|
||||
liste.append(el('p', 'leise', 'An diesem Tag steht nichts.'));
|
||||
} else {
|
||||
|
||||
@@ -1032,6 +1032,138 @@
|
||||
const kopfRechts = document.querySelector('.kopfleiste__rechts');
|
||||
if (kopfRechts) aufbauSuche(kopfRechts);
|
||||
if (kopfRechts) aufbauChat(kopfRechts);
|
||||
if (kopfRechts) aufbauInstallieren(kopfRechts);
|
||||
|
||||
/* =====================================================================
|
||||
DIE SEITE ALS APP INSTALLIEREN (20.09.2026)
|
||||
|
||||
Filipe: „kannst du da dazwischen in der starseite oben, ein button
|
||||
reinsetzen damit die leute die seite installieren koennen auf dem
|
||||
handy oder pc. das soll auch verschwinden wenn die leute es
|
||||
installiert haben."
|
||||
|
||||
WARUM ES DEN KNOPF BRAUCHT: Das Manifest ist seit Langem
|
||||
vollstaendig -- die App LIESS sich installieren. Nur bot das
|
||||
ausschliesslich der Browser selbst an, versteckt in seinem
|
||||
Dreipunktemenue. Wer es nicht sucht, findet es nie. Und ohne
|
||||
installierte App gibt es auf dem Handy keine verlaesslichen
|
||||
Benachrichtigungen; genau daran hing im September das Telefonieren.
|
||||
|
||||
DREI ZUSTAENDE, UND JEDER BRAUCHT EINE ANDERE ANTWORT:
|
||||
|
||||
1. SCHON INSTALLIERT -> gar kein Knopf. Ein Angebot fuer etwas,
|
||||
das man hat, ist Rauschen. Erkannt an `display-mode:
|
||||
standalone` (und an Safaris eigenem `navigator.standalone`).
|
||||
|
||||
2. DER BROWSER BIETET ES AN (Chrome, Edge, Android) -> der Knopf
|
||||
fragt ihn. `beforeinstallprompt` kommt EINMAL und muss
|
||||
aufgehoben werden; wer ihn nicht festhaelt, kann spaeter
|
||||
nicht mehr fragen.
|
||||
|
||||
3. SAFARI AUF DEM iPHONE -> dort gibt es `beforeinstallprompt`
|
||||
NICHT, und es wird ihn nicht geben. Apple laesst nur den Weg
|
||||
ueber „Teilen -> Zum Home-Bildschirm". Ein Knopf, der dort
|
||||
nichts tut, waere schlimmer als keiner -- also sagt er in
|
||||
diesem Fall, was zu tun ist, statt es zu versuchen.
|
||||
|
||||
WARUM IN DER KOPFLEISTE UND NICHT NUR AUF DER STARTSEITE: Die
|
||||
Leiste steht auf allen 32 Seiten. Wer den Knopf einmal uebersieht,
|
||||
sieht ihn beim naechsten Mal wieder -- und er verschwindet ohnehin,
|
||||
sobald er ueberfluessig ist.
|
||||
===================================================================== */
|
||||
|
||||
function aufbauInstallieren(wohin) {
|
||||
const el = (tag, klasse, text) => {
|
||||
const k = document.createElement(tag);
|
||||
if (klasse) k.className = klasse;
|
||||
if (text !== undefined) k.textContent = text;
|
||||
return k;
|
||||
};
|
||||
|
||||
/* ---- Zustand 1: schon installiert -> nichts tun --------------- */
|
||||
const schonDrin = () =>
|
||||
(window.matchMedia && window.matchMedia('(display-mode: standalone)').matches)
|
||||
|| window.navigator.standalone === true;
|
||||
if (schonDrin()) return;
|
||||
|
||||
/* Apple: kein `beforeinstallprompt`, aber ein Weg. */
|
||||
const istApple = /iphone|ipad|ipod/i.test(navigator.userAgent)
|
||||
|| (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
|
||||
|
||||
let angebot = null; // der aufgehobene Browser-Vorschlag
|
||||
|
||||
const knopf = el('button', 'install-knopf');
|
||||
knopf.type = 'button';
|
||||
knopf.hidden = true;
|
||||
knopf.title = 'Diese Seite als App installieren';
|
||||
/* DAS WORT VERSCHWINDET AM HANDY (siehe CSS) -- der Satz fuer
|
||||
Vorleseprogramme nicht. Ein Knopf, der dort nur aus einem
|
||||
Pfeil besteht, heisst sonst "Schaltflaeche". */
|
||||
knopf.setAttribute('aria-label', 'Diese Seite als App installieren');
|
||||
const zeichen = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
||||
zeichen.setAttribute('viewBox', '0 0 24 24');
|
||||
zeichen.setAttribute('class', 'install-knopf__zeichen');
|
||||
zeichen.setAttribute('aria-hidden', 'true');
|
||||
zeichen.innerHTML = '<path d="M12 3.5v11M8 11l4 4 4-4"/><path d="M5 18.5h14"/>';
|
||||
knopf.append(zeichen, el('span', 'install-knopf__text', 'Installieren'));
|
||||
|
||||
knopf.addEventListener('click', async () => {
|
||||
if (angebot) {
|
||||
/* Zustand 2: den Browser fragen. Die Antwort interessiert uns
|
||||
nur insofern, als ein angenommener Vorschlag den Knopf
|
||||
ueberfluessig macht -- ein abgelehnter nicht: Vielleicht
|
||||
ueberlegt man es sich morgen anders. */
|
||||
knopf.disabled = true;
|
||||
try {
|
||||
angebot.prompt();
|
||||
const { outcome } = await angebot.userChoice;
|
||||
if (outcome === 'accepted') knopf.remove();
|
||||
} catch { /* dann eben nicht */ }
|
||||
angebot = null;
|
||||
knopf.disabled = false;
|
||||
return;
|
||||
}
|
||||
/* Zustand 3: erklaeren statt versuchen. */
|
||||
window.frageNach?.({
|
||||
titel: 'Als App auf dem Home-Bildschirm',
|
||||
was: istApple
|
||||
? 'Tippe unten in Safari auf das Teilen-Zeichen (Viereck mit Pfeil nach oben), '
|
||||
+ 'dann auf „Zum Home-Bildschirm".'
|
||||
: 'Öffne das Menü deines Browsers (die drei Punkte) und wähle dort '
|
||||
+ '„App installieren" oder „Zum Startbildschirm hinzufügen".',
|
||||
bleibt: 'Danach liegt die Seite wie eine App auf deinem Gerät – und '
|
||||
+ 'Anrufe und Nachrichten kommen zuverlässiger an.',
|
||||
ja: 'Alles klar',
|
||||
nein: null,
|
||||
});
|
||||
});
|
||||
|
||||
wohin.prepend(knopf);
|
||||
|
||||
/* Der Browser meldet sich, wenn er es anbieten kann. */
|
||||
window.addEventListener('beforeinstallprompt', (e) => {
|
||||
/* Ohne `preventDefault` zeigt der Browser seine eigene Leiste --
|
||||
zwei Angebote fuer dieselbe Sache sind eines zu viel. */
|
||||
e.preventDefault();
|
||||
angebot = e;
|
||||
knopf.hidden = false;
|
||||
});
|
||||
|
||||
/* Auf Apple gibt es diese Meldung nie -- dort steht der Knopf von
|
||||
Anfang an da und erklaert den Weg. */
|
||||
if (istApple) knopf.hidden = false;
|
||||
|
||||
/* Und wenn es geklappt hat, ist er fertig. */
|
||||
window.addEventListener('appinstalled', () => knopf.remove());
|
||||
/* Manche Browser melden `appinstalled` nicht -- dann faellt der
|
||||
Knopf beim naechsten Oeffnen ueber `schonDrin()` weg. Und wer die
|
||||
App waehrend der Sitzung installiert und zurueckwechselt, merkt
|
||||
es hier: */
|
||||
try {
|
||||
window.matchMedia('(display-mode: standalone)')
|
||||
.addEventListener('change', (m) => { if (m.matches) knopf.remove(); });
|
||||
} catch { /* aeltere Browser koennen das nicht -- kein Grund zu scheitern */ }
|
||||
}
|
||||
|
||||
/* ---------- Der Chat-Knopf mit Zähler -----------------------------------
|
||||
|
||||
|
||||
+15
-15
@@ -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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -291,14 +291,14 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609201909" defer></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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -168,13 +168,13 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -130,12 +130,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+19
-19
@@ -12,24 +12,24 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201909" />
|
||||
<!-- Wegen des Blocks „Willst du dazugehoeren?" auf dem Brett
|
||||
„Mitmachen". Eine eigene Kopie der Regel hier waere die zweite
|
||||
Stelle, an der dieselbe Sache anders aussieht. -->
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -256,16 +256,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -7,17 +7,17 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -108,12 +108,12 @@
|
||||
</main>
|
||||
|
||||
<!-- Der Fuß gehört zu jeder Seite - siehe pruef-css-klassen. -->
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -7,16 +7,16 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -80,13 +80,13 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -89,14 +89,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -384,18 +384,18 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609201907"></script>
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907"></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909"></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909"></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909"></script>
|
||||
<!-- ANRUF VOR CHAT (18.09.2026): anruf.js stellt `window.anrufStarten`
|
||||
bereit, und chat.js baut die Knoepfe nur, wenn es das gibt.
|
||||
Andersherum waere die Reihenfolge eine stille Abhaengigkeit --
|
||||
die Knoepfe fehlten, und niemand wuesste warum. -->
|
||||
<script src="assets/js/anruf.js?v=202609201907"></script>
|
||||
<script src="assets/js/chat.js?v=202609201907"></script>
|
||||
<script src="assets/js/anruf.js?v=202609201909"></script>
|
||||
<script src="assets/js/chat.js?v=202609201909"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -179,14 +179,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/content.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/content.js?v=202609201909" 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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="gate gate--crew">
|
||||
@@ -358,6 +358,6 @@
|
||||
␍
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -22,25 +22,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609201907",
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609201909",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609201907",
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609201909",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609201907",
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609201909",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609201907",
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609201909",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -108,14 +108,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,12 +106,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -146,12 +146,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609201909" 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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="gate">
|
||||
@@ -411,6 +411,6 @@
|
||||
</div>
|
||||
␍␍
|
||||
|
||||
<script src="assets/js/gate.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -383,14 +383,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609201909" defer></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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -444,12 +444,12 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907"></script>
|
||||
<script src="assets/js/wahl.js?v=202609201907"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907"></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907"></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907"></script>
|
||||
<script src="assets/js/leistung.js?v=202609201907"></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909"></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909"></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909"></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909"></script>
|
||||
<script src="assets/js/leistung.js?v=202609201909"></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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -453,13 +453,13 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609201909" 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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -214,15 +214,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -134,11 +134,11 @@
|
||||
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
||||
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
||||
die seit dem 07.09. jede Seite danach absucht. -->
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,14 +106,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/ki.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/report.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/report.js?v=202609201909" defer></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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -173,13 +173,13 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/heim.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -678,13 +678,13 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/start.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/start.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -85,14 +85,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/ki.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609201909" 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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -150,15 +150,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||
<!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie
|
||||
der Regel hier waere die zweite Stelle, an der dieselbe Sache
|
||||
anders aussieht. -->
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -111,12 +111,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -110,12 +110,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/team.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/team.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu
|
||||
@@ -84,11 +84,11 @@
|
||||
Kaputt ist dabei nichts -- er funktioniert. Genau deshalb faellt
|
||||
es niemandem auf, und deshalb prueft pruef-css-klassen die
|
||||
ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. -->
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -112,12 +112,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609201909" 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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -126,12 +126,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -221,11 +221,11 @@
|
||||
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
||||
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
||||
die seit dem 07.09. jede Seite danach absucht. -->
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -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=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -149,14 +149,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -217,11 +217,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -7,15 +7,15 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -144,11 +144,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>␍
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201907" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<!-- 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=202609201907" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -190,14 +190,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609201907" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609201909" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user