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. */
|
Wahrheit, und beim Umformulieren liefe sie auseinander. */
|
||||||
const da = new Set(db().prepare(
|
const da = new Set(db().prepare(
|
||||||
"SELECT titel FROM eintraege WHERE bereich = ?").all(bereich).map((z) => z.titel));
|
"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({
|
res.json({
|
||||||
vorschlaege: liste.map((v, nr) => ({ nr, ...v, schon: da.has(v.titel) })),
|
vorschlaege: fenster,
|
||||||
offen: liste.filter((v) => !da.has(v.titel)).length,
|
/* `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) {
|
} catch (fehler) {
|
||||||
console.error("[workspace] Startkatalog:", fehler?.message);
|
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
|
laufen auseinander, und dann zeigt die Karte etwas anderes als der
|
||||||
Kalender. */
|
Kalender. */
|
||||||
import {
|
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";
|
} from "./workspace-termin-regel.js";
|
||||||
|
|
||||||
export const kalenderRouter = express.Router();
|
export const kalenderRouter = express.Router();
|
||||||
@@ -463,10 +463,17 @@ kalenderRouter.get("/workspace/api/termine", (req, res) => {
|
|||||||
WHERE ${eintragRegel.wo}
|
WHERE ${eintragRegel.wo}
|
||||||
AND e.status NOT IN (${OHNE_ZUSTAENDE.map(() => "?").join(", ")})
|
AND e.status NOT IN (${OHNE_ZUSTAENDE.map(() => "?").join(", ")})
|
||||||
AND ${TERMIN_BEDINGUNG_SQL}
|
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_TAG_SQL} <= ?
|
||||||
|
AND ${TERMIN_ENDE_SQL} >= ?
|
||||||
ORDER BY wann, e.uhrzeit, e.id`)
|
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
|
/* DER NAME DES BRETTS KOMMT MIT -- und zwar aus dem Katalog, nicht
|
||||||
als abgeschriebene Liste im Browser. Ein Brett, das morgen
|
als abgeschriebene Liste im Browser. Ein Brett, das morgen
|
||||||
|
|||||||
@@ -52,6 +52,26 @@
|
|||||||
* den 24., auch wenn der Zettel am 3. entstanden ist. */
|
* den 24., auch wenn der Zettel am 3. entstanden ist. */
|
||||||
export const TERMIN_TAG_SQL = "COALESCE(e.geplant, e.datum)";
|
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
|
/** Die Bedingung als SQL. Erwartet GENAU EINEN Platzhalter: den
|
||||||
* heutigen Tag in Ortszeit (`heuteLokal()`).
|
* heutigen Tag in Ortszeit (`heuteLokal()`).
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -16,15 +16,15 @@
|
|||||||
verdeckt. Gefunden hat es pruef-struktur.
|
verdeckt. Gefunden hat es pruef-struktur.
|
||||||
|
|
||||||
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
|
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/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||||
<!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als
|
<!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als
|
||||||
Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet
|
Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet
|
||||||
ausserhalb der App -- auf einer Seite, die genau erklaeren soll,
|
ausserhalb der App -- auf einer Seite, die genau erklaeren soll,
|
||||||
WARUM das Telefon nicht klingelt, ist das besonders unpassend. -->
|
WARUM das Telefon nicht klingelt, ist das besonders unpassend. -->
|
||||||
<link rel="manifest" href="/workspace/crew.webmanifest?v=202609191018" />
|
<link rel="manifest" href="/workspace/crew.webmanifest?v=202609191018" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<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>
|
<style>
|
||||||
/* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite
|
/* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite
|
||||||
soll auch dann noch etwas anzeigen, wenn genau das schiefgeht,
|
soll auch dann noch etwas anzeigen, wenn genau das schiefgeht,
|
||||||
@@ -125,6 +125,6 @@
|
|||||||
</main>
|
</main>
|
||||||
␍␍
|
␍␍
|
||||||
|
|
||||||
<script src="assets/js/anruf-probe.js?v=202609201907" defer></script>
|
<script src="assets/js/anruf-probe.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -22,25 +22,25 @@
|
|||||||
},
|
},
|
||||||
"icons": [
|
"icons": [
|
||||||
{
|
{
|
||||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609201907",
|
"src": "/assets/img/app-symbole/workspace-192.png?v=202609201909",
|
||||||
"sizes": "192x192",
|
"sizes": "192x192",
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"purpose": "any"
|
"purpose": "any"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609201907",
|
"src": "/assets/img/app-symbole/workspace-512.png?v=202609201909",
|
||||||
"sizes": "512x512",
|
"sizes": "512x512",
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"purpose": "any"
|
"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",
|
"sizes": "192x192",
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"purpose": "maskable"
|
"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",
|
"sizes": "512x512",
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"purpose": "maskable"
|
"purpose": "maskable"
|
||||||
|
|||||||
@@ -998,6 +998,25 @@
|
|||||||
font-size: .85rem; color: var(--text-leise);
|
font-size: .85rem; color: var(--text-leise);
|
||||||
}
|
}
|
||||||
.startkatalog__alle { flex: 0 0 auto; }
|
.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,
|
/* Auto-fill: Auf dem Handy eine Spalte, am Rechner drei — gemessen,
|
||||||
nicht gerechnet. */
|
nicht gerechnet. */
|
||||||
|
|||||||
@@ -355,6 +355,75 @@
|
|||||||
Kontrastmodus nicht zu erkennen. */
|
Kontrastmodus nicht zu erkennen. */
|
||||||
.k-pille.erledigt { opacity: .5; text-decoration: line-through; }
|
.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 ----------------------------------------------- */
|
/* ---------- Wochenansicht ----------------------------------------------- */
|
||||||
.k-woche {
|
.k-woche {
|
||||||
display: grid; gap: 1px;
|
display: grid; gap: 1px;
|
||||||
|
|||||||
@@ -1022,3 +1022,43 @@
|
|||||||
.tperson[data-rolle="hand"] { border: 3px solid Highlight; }
|
.tperson[data-rolle="hand"] { border: 3px solid Highlight; }
|
||||||
.tperson[data-rolle="hand"]::before { display: none; }
|
.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
|
Fertige Texte, die jemand aus dem Team uebernimmt. Nicht
|
||||||
automatisch: Ein Text, den niemand gelesen hat, stuende sonst als
|
automatisch: Ein Text, den niemand gelesen hat, stuende sonst als
|
||||||
Ansage des Teams auf einer oeffentlichen Seite. */
|
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() {
|
async function startkatalogZeigen() {
|
||||||
const ziel = $('startkatalog');
|
const ziel = $('startkatalog');
|
||||||
if (!ziel) return;
|
if (!ziel) return;
|
||||||
if (!darfEintragen()) { ziel.hidden = true; return; }
|
if (!darfEintragen()) { ziel.hidden = true; return; }
|
||||||
let daten = null;
|
let daten = null;
|
||||||
try {
|
try {
|
||||||
const a = await fetch(`/workspace/api/bereich/${bereich}/start`,
|
const a = await fetch(
|
||||||
|
`/workspace/api/bereich/${bereich}/start?ab=${katalogAb}`,
|
||||||
{ credentials: 'same-origin' });
|
{ credentials: 'same-origin' });
|
||||||
if (!a.ok) { ziel.hidden = true; return; }
|
if (!a.ok) { ziel.hidden = true; return; }
|
||||||
daten = await a.json();
|
daten = await a.json();
|
||||||
@@ -1660,7 +1679,9 @@
|
|||||||
kopf.append(el('h2', 'startkatalog__titel', 'Fertige Vorschläge'));
|
kopf.append(el('h2', 'startkatalog__titel', 'Fertige Vorschläge'));
|
||||||
kopf.append(el('p', 'startkatalog__unter',
|
kopf.append(el('p', 'startkatalog__unter',
|
||||||
`${daten.offen} ${daten.offen === 1 ? 'Vorschlag ist' : 'Vorschläge sind'} `
|
`${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',
|
const alle = el('button', 'schritt startkatalog__alle',
|
||||||
`Alle ${daten.offen} übernehmen`);
|
`Alle ${daten.offen} übernehmen`);
|
||||||
alle.type = 'button';
|
alle.type = 'button';
|
||||||
@@ -1673,6 +1694,32 @@
|
|||||||
await laden();
|
await laden();
|
||||||
});
|
});
|
||||||
kopf.append(alle);
|
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);
|
ziel.append(kopf);
|
||||||
|
|
||||||
const liste = el('div', 'startkatalog__liste');
|
const liste = el('div', 'startkatalog__liste');
|
||||||
|
|||||||
@@ -601,11 +601,93 @@
|
|||||||
statt verschluckt. */
|
statt verschluckt. */
|
||||||
const sichtbare = () => (daten ? daten.eintraege.filter((e) => zeigen[e.art] !== false) : []);
|
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() {
|
function nachTag() {
|
||||||
const karte = new Map();
|
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()) {
|
for (const e of sichtbare()) {
|
||||||
if (!karte.has(e.tag)) karte.set(e.tag, []);
|
const ende = endTagVon(e);
|
||||||
karte.get(e.tag).push(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;
|
return karte;
|
||||||
}
|
}
|
||||||
@@ -629,8 +711,38 @@
|
|||||||
if (e.ziel) k.href = e.ziel;
|
if (e.ziel) k.href = e.ziel;
|
||||||
k.style.setProperty('--pfarbe', e.farbe);
|
k.style.setProperty('--pfarbe', e.farbe);
|
||||||
k.title = `${e.titel}${e.zusatz ? ' — ' + e.zusatz : ''}`
|
k.title = `${e.titel}${e.zusatz ? ' — ' + e.zusatz : ''}`
|
||||||
+ (e.serie_id ? ' — wiederholt sich' : '');
|
+ (e.serie_id ? ' — wiederholt sich' : '')
|
||||||
if (e.uhr) k.append(el('span', 'k-pille__zeit', e.uhr));
|
/* 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
|
/* Das Zeichen steht im Raster VOR dem Titel, nicht dahinter: Eine
|
||||||
Zelle im Monatsraster ist gut 150 px breit, der Titel wird dort
|
Zelle im Monatsraster ist gut 150 px breit, der Titel wird dort
|
||||||
abgeschnitten -- ein Zeichen am Ende wäre genau in der Ansicht
|
abgeschnitten -- ein Zeichen am Ende wäre genau in der Ansicht
|
||||||
@@ -1355,7 +1467,16 @@
|
|||||||
|
|
||||||
const liste = $('tagdialog-liste');
|
const liste = $('tagdialog-liste');
|
||||||
liste.replaceChildren();
|
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) {
|
if (!eintraege.length) {
|
||||||
liste.append(el('p', 'leise', 'An diesem Tag steht nichts.'));
|
liste.append(el('p', 'leise', 'An diesem Tag steht nichts.'));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1032,6 +1032,138 @@
|
|||||||
const kopfRechts = document.querySelector('.kopfleiste__rechts');
|
const kopfRechts = document.querySelector('.kopfleiste__rechts');
|
||||||
if (kopfRechts) aufbauSuche(kopfRechts);
|
if (kopfRechts) aufbauSuche(kopfRechts);
|
||||||
if (kopfRechts) aufbauChat(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 -----------------------------------
|
/* ---------- Der Chat-Knopf mit Zähler -----------------------------------
|
||||||
|
|
||||||
|
|||||||
+15
-15
@@ -12,19 +12,19 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -291,14 +291,14 @@
|
|||||||
</form>
|
</form>
|
||||||
</dialog>
|
</dialog>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/aufgaben.js?v=202609201907" defer></script>
|
<script src="assets/js/aufgaben.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+15
-15
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/automation.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -168,13 +168,13 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/automation.js?v=202609201907" defer></script>
|
<script src="assets/js/automation.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+14
-14
@@ -7,14 +7,14 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -130,12 +130,12 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/befinden.js?v=202609201907" defer></script>
|
<script src="assets/js/befinden.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+19
-19
@@ -12,24 +12,24 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201909" />
|
||||||
<!-- Wegen des Blocks „Willst du dazugehoeren?" auf dem Brett
|
<!-- Wegen des Blocks „Willst du dazugehoeren?" auf dem Brett
|
||||||
„Mitmachen". Eine eigene Kopie der Regel hier waere die zweite
|
„Mitmachen". Eine eigene Kopie der Regel hier waere die zweite
|
||||||
Stelle, an der dieselbe Sache anders aussieht. -->
|
Stelle, an der dieselbe Sache anders aussieht. -->
|
||||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -256,16 +256,16 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/checkliste.js?v=202609201907" defer></script>
|
<script src="assets/js/checkliste.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/ampel.js?v=202609201907" defer></script>
|
<script src="assets/js/ampel.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/schulung.js?v=202609201907" defer></script>
|
<script src="assets/js/schulung.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/bereich.js?v=202609201907" defer></script>
|
<script src="assets/js/bereich.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+17
-17
@@ -7,17 +7,17 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
<!-- 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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -108,12 +108,12 @@
|
|||||||
</main>
|
</main>
|
||||||
|
|
||||||
<!-- Der Fuß gehört zu jeder Seite - siehe pruef-css-klassen. -->
|
<!-- 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/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/auskunft.js?v=202609201907" defer></script>
|
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/bewerben.js?v=202609201907" defer></script>
|
<script src="assets/js/bewerben.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+16
-16
@@ -7,16 +7,16 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
<!-- 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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -80,13 +80,13 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/auskunft.js?v=202609201907" defer></script>
|
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/bewerbungen.js?v=202609201907" defer></script>
|
<script src="assets/js/bewerbungen.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+16
-16
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/calls.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -89,14 +89,14 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/nachfrage.js?v=202609201907" 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/ki.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
<script src="assets/js/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/calls.js?v=202609201907" defer></script>
|
<script src="assets/js/calls.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+17
-17
@@ -12,26 +12,26 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<!-- aufgaben.css bringt die Dialog- und Formularstile mit (.dialog,
|
<!-- aufgaben.css bringt die Dialog- und Formularstile mit (.dialog,
|
||||||
.neu__zeile, .dialog__knoepfe). Sie stehen dort seit dem
|
.neu__zeile, .dialog__knoepfe). Sie stehen dort seit dem
|
||||||
Aufgabenbrett; sie hierher zu kopieren hiesse, sie an zwei Stellen
|
Aufgabenbrett; sie hierher zu kopieren hiesse, sie an zwei Stellen
|
||||||
zu pflegen. Dieselbe Lösung nutzen kalender.html und content.html.
|
zu pflegen. Dieselbe Lösung nutzen kalender.html und content.html.
|
||||||
Gemeldet von pruef-css-klassen.mjs, bevor jemand einen ungestylten
|
Gemeldet von pruef-css-klassen.mjs, bevor jemand einen ungestylten
|
||||||
Dialog zu sehen bekam. -->
|
Dialog zu sehen bekam. -->
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/chat.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -384,18 +384,18 @@
|
|||||||
</form>
|
</form>
|
||||||
</dialog>
|
</dialog>
|
||||||
|
|
||||||
<script src="assets/js/bereiche.js?v=202609201907"></script>
|
<script src="assets/js/bereiche.js?v=202609201909"></script>
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||||
<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/wahl.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/kopf.js?v=202609201907"></script>
|
<script src="assets/js/kopf.js?v=202609201909"></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907"></script>
|
<script src="assets/js/glocke.js?v=202609201909"></script>
|
||||||
<!-- ANRUF VOR CHAT (18.09.2026): anruf.js stellt `window.anrufStarten`
|
<!-- ANRUF VOR CHAT (18.09.2026): anruf.js stellt `window.anrufStarten`
|
||||||
bereit, und chat.js baut die Knoepfe nur, wenn es das gibt.
|
bereit, und chat.js baut die Knoepfe nur, wenn es das gibt.
|
||||||
Andersherum waere die Reihenfolge eine stille Abhaengigkeit --
|
Andersherum waere die Reihenfolge eine stille Abhaengigkeit --
|
||||||
die Knoepfe fehlten, und niemand wuesste warum. -->
|
die Knoepfe fehlten, und niemand wuesste warum. -->
|
||||||
<script src="assets/js/anruf.js?v=202609201907"></script>
|
<script src="assets/js/anruf.js?v=202609201909"></script>
|
||||||
<script src="assets/js/chat.js?v=202609201907"></script>
|
<script src="assets/js/chat.js?v=202609201909"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+16
-16
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/content.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/content.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -179,14 +179,14 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/checkliste.js?v=202609201907" defer></script>
|
<script src="assets/js/checkliste.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/content.js?v=202609201907" defer></script>
|
<script src="assets/js/content.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -36,15 +36,15 @@
|
|||||||
<link rel="preload" as="image" href="assets/img/buehne/crew-gate-hoch-580.webp"
|
<link rel="preload" as="image" href="assets/img/buehne/crew-gate-hoch-580.webp"
|
||||||
type="image/webp" media="(max-width: 899px)" />
|
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="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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<!-- Diese Wand steht NUR auf der Adresse von Team Dogi (ueberall sonst
|
<!-- Diese Wand steht NUR auf der Adresse von Team Dogi (ueberall sonst
|
||||||
404, siehe crewWeiche). Sie darf das Haus deshalb direkt nennen
|
404, siehe crewWeiche). Sie darf das Haus deshalb direkt nennen
|
||||||
statt ueber den Platzhalter haus.css zu gehen -- und sie MUSS es:
|
statt ueber den Platzhalter haus.css zu gehen -- und sie MUSS es:
|
||||||
Eine Zugangswand, die sich erst nach dem Umbiegen faerbt, waere
|
Eine Zugangswand, die sich erst nach dem Umbiegen faerbt, waere
|
||||||
die eine Seite, auf der man das Umfaerben sieht. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="gate gate--crew">
|
<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>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -22,25 +22,25 @@
|
|||||||
},
|
},
|
||||||
"icons": [
|
"icons": [
|
||||||
{
|
{
|
||||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609201907",
|
"src": "/assets/img/app-symbole/crew-192.png?v=202609201909",
|
||||||
"sizes": "192x192",
|
"sizes": "192x192",
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"purpose": "any"
|
"purpose": "any"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609201907",
|
"src": "/assets/img/app-symbole/crew-512.png?v=202609201909",
|
||||||
"sizes": "512x512",
|
"sizes": "512x512",
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"purpose": "any"
|
"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",
|
"sizes": "192x192",
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"purpose": "maskable"
|
"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",
|
"sizes": "512x512",
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"purpose": "maskable"
|
"purpose": "maskable"
|
||||||
|
|||||||
+16
-16
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/dateien.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -108,14 +108,14 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/dateien.js?v=202609201907" defer></script>
|
<script src="assets/js/dateien.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+14
-14
@@ -7,14 +7,14 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -106,12 +106,12 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/entwicklung.js?v=202609201907" defer></script>
|
<script src="assets/js/entwicklung.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+13
-13
@@ -7,13 +7,13 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -146,12 +146,12 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/hilfe.js?v=202609201907" defer></script>
|
<script src="assets/js/hilfe.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -30,9 +30,9 @@
|
|||||||
<link rel="preload" as="image" href="assets/img/buehne/gate-hoch-580.webp"
|
<link rel="preload" as="image" href="assets/img/buehne/gate-hoch-580.webp"
|
||||||
type="image/webp" media="(max-width: 899px)" />
|
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="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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="gate">
|
<body class="gate">
|
||||||
@@ -411,6 +411,6 @@
|
|||||||
</div>
|
</div>
|
||||||
␍␍
|
␍␍
|
||||||
|
|
||||||
<script src="assets/js/gate.js?v=202609201907" defer></script>
|
<script src="assets/js/gate.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+16
-16
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/kalender.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -383,14 +383,14 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/kalender.js?v=202609201907" defer></script>
|
<script src="assets/js/kalender.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/kalender-abo.js?v=202609201907" defer></script>
|
<script src="assets/js/kalender-abo.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+15
-15
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/leistung.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -444,12 +444,12 @@
|
|||||||
</form>
|
</form>
|
||||||
</dialog>
|
</dialog>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907"></script>
|
<script src="assets/js/meldung.js?v=202609201909"></script>
|
||||||
<script src="assets/js/nachfrage.js?v=202609201907"></script>
|
<script src="assets/js/nachfrage.js?v=202609201909"></script>
|
||||||
<script src="assets/js/wahl.js?v=202609201907"></script>
|
<script src="assets/js/wahl.js?v=202609201909"></script>
|
||||||
<script src="assets/js/bereiche.js?v=202609201907"></script>
|
<script src="assets/js/bereiche.js?v=202609201909"></script>
|
||||||
<script src="assets/js/kopf.js?v=202609201907"></script>
|
<script src="assets/js/kopf.js?v=202609201909"></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907"></script>
|
<script src="assets/js/glocke.js?v=202609201909"></script>
|
||||||
<script src="assets/js/leistung.js?v=202609201907"></script>
|
<script src="assets/js/leistung.js?v=202609201909"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+15
-15
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/personen.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -453,13 +453,13 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/personen.js?v=202609201907" defer></script>
|
<script src="assets/js/personen.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+17
-17
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/profil.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -214,15 +214,15 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/steckbrief.js?v=202609201907" defer></script>
|
<script src="assets/js/steckbrief.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/profil.js?v=202609201907" defer></script>
|
<script src="assets/js/profil.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+14
-14
@@ -7,14 +7,14 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -134,11 +134,11 @@
|
|||||||
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
||||||
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
||||||
die seit dem 07.09. jede Seite danach absucht. -->
|
die seit dem 07.09. jede Seite danach absucht. -->
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/rechte.js?v=202609201907" defer></script>
|
<script src="assets/js/rechte.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+16
-16
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/report.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/report.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -106,14 +106,14 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/nachfrage.js?v=202609201907" 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/ki.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
<script src="assets/js/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/report.js?v=202609201907" defer></script>
|
<script src="assets/js/report.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+15
-15
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/scouting.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -173,13 +173,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/scouting.js?v=202609201907" defer></script>
|
<script src="assets/js/scouting.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+14
-14
@@ -12,21 +12,21 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<!-- Nur die Startseite: Begrüßungskachel, Uhr, Glockenmulde. Siehe
|
<!-- Nur die Startseite: Begrüßungskachel, Uhr, Glockenmulde. Siehe
|
||||||
den Hinweis in start.css -- dort stand es bis zum 07.09.2026. -->
|
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/heim.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -678,13 +678,13 @@
|
|||||||
</p>
|
</p>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/start.js?v=202609201907" defer></script>
|
<script src="assets/js/start.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+16
-16
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -85,14 +85,14 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/nachfrage.js?v=202609201907" 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/ki.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/wahl.js?v=202609201907" defer></script>
|
<script src="assets/js/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/startcheck.js?v=202609201907" defer></script>
|
<script src="assets/js/startcheck.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+17
-17
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/profil.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -150,15 +150,15 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/auskunft.js?v=202609201907" defer></script>
|
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/steckbrief.js?v=202609201907" defer></script>
|
<script src="assets/js/steckbrief.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+15
-15
@@ -7,18 +7,18 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||||
<!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie
|
<!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie
|
||||||
der Regel hier waere die zweite Stelle, an der dieselbe Sache
|
der Regel hier waere die zweite Stelle, an der dieselbe Sache
|
||||||
anders aussieht. -->
|
anders aussieht. -->
|
||||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -111,12 +111,12 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/talente.js?v=202609201907" defer></script>
|
<script src="assets/js/talente.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+14
-14
@@ -7,20 +7,20 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/team.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/team.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -110,12 +110,12 @@
|
|||||||
|
|
||||||
</main>
|
</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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/team.js?v=202609201907" defer></script>
|
<script src="assets/js/team.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+14
-14
@@ -7,20 +7,20 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/team.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/team.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu
|
<!-- `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
|
Kaputt ist dabei nichts -- er funktioniert. Genau deshalb faellt
|
||||||
es niemandem auf, und deshalb prueft pruef-css-klassen die
|
es niemandem auf, und deshalb prueft pruef-css-klassen die
|
||||||
ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. -->
|
ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. -->
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/teamlage.js?v=202609201907" defer></script>
|
<script src="assets/js/teamlage.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+13
-13
@@ -7,13 +7,13 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -112,12 +112,12 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/teilen.js?v=202609201907" defer></script>
|
<script src="assets/js/teilen.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -7,14 +7,14 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -126,12 +126,12 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/treff-moderation.js?v=202609201907" defer></script>
|
<script src="assets/js/treff-moderation.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+14
-14
@@ -7,18 +7,18 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des
|
<!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des
|
||||||
Treffs biegt der Server genau diesen Dateinamen auf crew-haus.css
|
Treffs biegt der Server genau diesen Dateinamen auf crew-haus.css
|
||||||
um, und die Seite kommt schon beim ERSTEN Abruf in Lila und
|
um, und die Seite kommt schon beim ERSTEN Abruf in Lila und
|
||||||
Babyblau an -- ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -221,11 +221,11 @@
|
|||||||
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
||||||
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
||||||
die seit dem 07.09. jede Seite danach absucht. -->
|
die seit dem 07.09. jede Seite danach absucht. -->
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/auskunft.js?v=202609201907" defer></script>
|
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/treff-regeln.js?v=202609201907" defer></script>
|
<script src="assets/js/treff-regeln.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+15
-15
@@ -12,22 +12,22 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||||
Dialog "Creator anlegen". -->
|
Dialog "Creator anlegen". -->
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -149,14 +149,14 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/nachfrage.js?v=202609201907" 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/wahl.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/uebersicht.js?v=202609201907" defer></script>
|
<script src="assets/js/uebersicht.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -7,13 +7,13 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -217,11 +217,11 @@
|
|||||||
|
|
||||||
</main>
|
</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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/unsere-seiten.js?v=202609201907" defer></script>
|
<script src="assets/js/unsere-seiten.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+14
-14
@@ -7,15 +7,15 @@
|
|||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -144,11 +144,11 @@
|
|||||||
|
|
||||||
</main>
|
</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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/werdegang.js?v=202609201907" defer></script>
|
<script src="assets/js/werdegang.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+16
-16
@@ -12,20 +12,20 @@
|
|||||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||||
eine Flaeche sind statt zweier. -->
|
eine Flaeche sind statt zweier. -->
|
||||||
<meta name="theme-color" content="#06090f" />
|
<meta name="theme-color" content="#06090f" />
|
||||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?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=202609201907" />
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/wissen.css?v=202609201909" />
|
||||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201907" />
|
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
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>
|
</head>
|
||||||
|
|
||||||
<body class="start">
|
<body class="start">
|
||||||
@@ -190,14 +190,14 @@
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="assets/js/meldung.js?v=202609201907" defer></script>
|
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/hochladen.js?v=202609201907" defer></script>
|
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||||
<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/wahl.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/kopf.js?v=202609201907" defer></script>
|
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/glocke.js?v=202609201907" defer></script>
|
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||||
<script src="assets/js/wissen.js?v=202609201907" defer></script>
|
<script src="assets/js/wissen.js?v=202609201909" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user