Compare commits
5
Commits
1ba9d07af2
...
69ba533cee
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69ba533cee | ||
|
|
80988f2d23 | ||
|
|
954426615f | ||
|
|
d7bb0f7e60 | ||
|
|
ce1a1f758c |
@@ -0,0 +1,152 @@
|
||||
/* =====================================================================
|
||||
SIEHT MAN, WO DER TASTATURFOKUS STEHT?
|
||||
=====================================================================
|
||||
|
||||
Gebaut am 25.09.2026, weil `pruef-neue-seiten` einen Kontrast von
|
||||
1,07 meldete ("Schoen, dass du da bist") und die Stelle im CSS
|
||||
tadellos aussah. Diese Messung liest die Farben an Ort und Stelle
|
||||
aus und geht die Elternkette hoch, bis sie eine deckende Flaeche
|
||||
findet -- genau das, was die Pruefung tut, nur sichtbar.
|
||||
|
||||
Ergebnis damals: dunkler Text auf HELLBLAUER Flaeche, rund 10:1.
|
||||
Die Pruefung konnte das Format `color(srgb ...)` nicht lesen, ging
|
||||
deshalb zum fast schwarzen Elternteil weiter und rechnete dunkel
|
||||
gegen dunkel. Ohne diese Messung haette ich an einem CSS geaendert,
|
||||
an dem nichts war.
|
||||
|
||||
Aufrufen mit:
|
||||
node server/mess-farbe-am-text.mjs <seite.html> "<Textanfang>"
|
||||
===================================================================== */
|
||||
import { mkdtempSync, rmSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
|
||||
const SEITE = process.argv[2] || "wissen.html";
|
||||
const SUCHE = process.argv[3] || ".kachel";
|
||||
|
||||
const PORT = 5457;
|
||||
|
||||
/* IST DIE NUMMER FREI? Sonst misst dieses Werkzeug an einem fremden
|
||||
Server -- und liefert ein Ergebnis, das zu einem ganz anderen Stand
|
||||
gehoert. Die Pruefungen holen sich ihre Nummer ueber helfer-port;
|
||||
ein Messwerkzeug, das von Hand gestartet wird, braucht wenigstens
|
||||
diese eine Frage. */
|
||||
{
|
||||
const netz = await import("node:net");
|
||||
const frei = await new Promise((fertig) => {
|
||||
const s = netz.createServer();
|
||||
s.once("error", () => fertig(false));
|
||||
s.once("listening", () => s.close(() => fertig(true)));
|
||||
s.listen(PORT, "127.0.0.1");
|
||||
});
|
||||
if (!frei) {
|
||||
console.error(`Port ${PORT} ist belegt -- hier laeuft schon etwas. `
|
||||
+ "Gemessen wuerde sonst ein fremder Stand. Abgebrochen.");
|
||||
process.exit(3);
|
||||
}
|
||||
}
|
||||
const ordner = mkdtempSync(join(tmpdir(), "ws-kontrast-"));
|
||||
process.env.WORKSPACE_DB = join(ordner, "workspace.db");
|
||||
process.env.PORT = String(PORT);
|
||||
process.env.SITE_ACCESS_SECRET = "lokaler-test";
|
||||
process.env.SITE_PUBLIC_LAUNCH_AT = "2020-01-01T00:00:00+01:00";
|
||||
|
||||
const express = (await import("express")).default;
|
||||
const ec = express.response.cookie;
|
||||
express.response.cookie = function (n, w, o) {
|
||||
return ec.call(this, n, w, { ...(o || {}), secure: false });
|
||||
};
|
||||
import { notbremse } from "./helfer-notbremse.mjs";
|
||||
await import("./index.js");
|
||||
notbremse(200_000, "mess-kontrast");
|
||||
await new Promise((r) => setTimeout(r, 900));
|
||||
|
||||
const BASIS = `http://127.0.0.1:${PORT}`;
|
||||
const { DatabaseSync } = await import("node:sqlite");
|
||||
const { scryptSync, randomBytes, createHmac } = await import("node:crypto");
|
||||
const d = new DatabaseSync(process.env.WORKSPACE_DB);
|
||||
const jetzt = new Date().toISOString();
|
||||
const sch = randomBytes(32).toString("hex");
|
||||
d.prepare("INSERT INTO einstellungen (schluessel, wert, geaendert, von)"
|
||||
+ " VALUES (?,?,?,NULL) ON CONFLICT(schluessel) DO NOTHING")
|
||||
.run("code_kennung_schluessel", sch, jetzt);
|
||||
const anlegen = (name, rolle, code) => {
|
||||
const s = randomBytes(16).toString("hex");
|
||||
const h = scryptSync(code, s, 64,
|
||||
{ N: 32768, r: 8, p: 1, maxmem: 96 * 1024 * 1024 }).toString("hex");
|
||||
return d.prepare("INSERT INTO personen"
|
||||
+ " (name, rolle, code_hash, code_salt, code_n, code_kennung, aktiv, erstellt)"
|
||||
+ " VALUES (?,?,?,?,?,?,1,?) RETURNING id")
|
||||
.get(name, rolle, h, s, 32768,
|
||||
createHmac("sha256", sch).update(code).digest("hex"), jetzt).id;
|
||||
};
|
||||
anlegen("Filipe", "admin", "CODE-DOGI-0001");
|
||||
anlegen("Sina", "scout", "CODE-SCOUT-0001");
|
||||
d.close();
|
||||
|
||||
const an = await fetch(BASIS + "/workspace/api/anmelden", {
|
||||
method: "POST", headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ rolle: "scout", code: "CODE-SCOUT-0001" }),
|
||||
});
|
||||
const keks = (an.headers.getSetCookie?.() || []).map((z) => z.split(";")[0]).join("; ");
|
||||
|
||||
const pw = await import(
|
||||
"file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
|
||||
const browser = await pw.chromium.launch();
|
||||
const kontext = await browser.newContext({ viewport: { width: 1440, height: 900 } });
|
||||
await kontext.addCookies(keks.split("; ").map((k) => {
|
||||
const [n, ...r] = k.split("=");
|
||||
return { name: n, value: r.join("="), domain: "127.0.0.1", path: "/" };
|
||||
}));
|
||||
const seite = await kontext.newPage();
|
||||
await seite.goto(`${BASIS}/workspace/${SEITE}`, { waitUntil: "networkidle" });
|
||||
await seite.waitForTimeout(900);
|
||||
|
||||
const stil = (e) => { const c = getComputedStyle(e); return {
|
||||
outlineStyle: c.outlineStyle, outlineWidth: c.outlineWidth, outlineColor: c.outlineColor,
|
||||
boxShadow: c.boxShadow, borderColor: c.borderColor, backgroundColor: c.backgroundColor,
|
||||
textDecorationLine: c.textDecorationLine, filter: c.filter, clipPath: c.clipPath }; };
|
||||
|
||||
const vorher = await seite.evaluate((sel) => {
|
||||
const e = document.querySelector(sel);
|
||||
if (!e) return null;
|
||||
e.setAttribute("data-mess", "1");
|
||||
const c = getComputedStyle(e);
|
||||
return { text: (e.textContent || "").trim().slice(0, 30), tag: e.tagName,
|
||||
outline: `${c.outlineStyle} ${c.outlineWidth} ${c.outlineColor}`,
|
||||
boxShadow: c.boxShadow, borderColor: c.borderColor, backgroundColor: c.backgroundColor,
|
||||
filter: c.filter, clipPath: c.clipPath.slice(0, 60) };
|
||||
}, SUCHE);
|
||||
if (!vorher) { console.log(`${SUCHE} nicht gefunden auf ${SEITE}`); process.exit(1); }
|
||||
|
||||
await seite.evaluate(() => document.body.focus?.());
|
||||
let gefunden = null;
|
||||
for (let i = 0; i < 40 && !gefunden; i++) {
|
||||
await seite.keyboard.press("Tab");
|
||||
await seite.waitForTimeout(140);
|
||||
gefunden = await seite.evaluate(() => {
|
||||
const e = document.activeElement;
|
||||
if (!e || !e.hasAttribute?.("data-mess")) return null;
|
||||
const c = getComputedStyle(e);
|
||||
return { outline: `${c.outlineStyle} ${c.outlineWidth} ${c.outlineColor}`,
|
||||
boxShadow: c.boxShadow, borderColor: c.borderColor, backgroundColor: c.backgroundColor,
|
||||
filter: c.filter, clipPath: c.clipPath.slice(0, 60),
|
||||
fv: e.matches(":focus-visible"), f: e.matches(":focus") };
|
||||
});
|
||||
}
|
||||
|
||||
console.log(`
|
||||
=== ${SUCHE} auf ${SEITE} (${vorher.tag}, "${vorher.text}") ===`);
|
||||
if (!gefunden) console.log(" mit der Tastatur NICHT erreicht");
|
||||
else {
|
||||
console.log(` :focus ${gefunden.f} :focus-visible ${gefunden.fv}`);
|
||||
for (const k of ["outline", "boxShadow", "borderColor", "backgroundColor", "filter", "clipPath"]) {
|
||||
const gleich = vorher[k] === gefunden[k];
|
||||
console.log(` ${k.padEnd(16)} ${gleich ? "gleich " : "ANDERS "} `
|
||||
+ `${String(vorher[k]).slice(0, 55)}`
|
||||
+ (gleich ? "" : `
|
||||
-> ${String(gefunden[k]).slice(0, 55)}`));
|
||||
}
|
||||
}
|
||||
await browser.close();
|
||||
process.exit(0);
|
||||
@@ -501,6 +501,43 @@ for (const [breite, hoehe, wie] of [[1440, 950, "Computer"], [390, 780, "Handy"]
|
||||
+ (schlimmster.verlauf ? ", Verlauf im Text" : "")
|
||||
+ ` [${schlimmster.lage}] in ${schlimmster.eltern}`
|
||||
+ ` -- gemessen bei ${schlimmster.gemessenBei} auf ${schlimmster.gemessenAuf}` : ""));
|
||||
|
||||
/* ==== UND WIE VIEL LUFT IST NOCH DA? (25.09.2026) ============
|
||||
|
||||
4,5:1 ist die Grenze, an der Text aufhoert, lesbar zu sein.
|
||||
Eine Seite, die GENAU dort steht, ist nicht in Ordnung --
|
||||
sie ist einen Handgriff davon entfernt, es nicht mehr zu sein.
|
||||
|
||||
Dass das kein Gedankenspiel ist, steht in gate.css: Derselbe
|
||||
leiseste Ton musste dreimal in vier Wochen angehoben werden,
|
||||
immer aus demselben Grund -- der Hintergrund ist ein Bild, es
|
||||
wurde heller, und die Schrift war auf zwei Kommastellen genau
|
||||
auf den alten Stand eingestellt.
|
||||
|
||||
01.09. 4,43 -> 4,95
|
||||
07.09. 4,50 -> rund 4,9
|
||||
25.09. 4,42 -> 5,75
|
||||
|
||||
Beide Rutscher waren rund elf Prozent gross. Deshalb steht
|
||||
hier 1,11 und keine gewaehlte Zahl: Eine Seite besteht diese
|
||||
Zeile genau dann, wenn sie noch EINEN Rutscher dieser Groesse
|
||||
vertraegt, ohne unlesbar zu werden. Bei 4,5 sind das 5,0.
|
||||
|
||||
Diese Zeile ist die zweite Meinung zur Zeile darueber und
|
||||
ersetzt sie nicht: Die obere sagt, ob die Seite in Ordnung
|
||||
ist, diese, ob sie es morgen noch sein wird.
|
||||
|
||||
Sie haengt bewusst an `schlimmster.grenze` und nicht an einer
|
||||
eigenen 5,0 -- bei grossem Text ist die Grenze 3:1, und
|
||||
dieselbe Luft sind dort 3,33. Wer die Zahl fest hineinschriebe,
|
||||
wuerde grossen Text unnoetig anmahnen. */
|
||||
const LUFT = 1.11;
|
||||
ok(schlimmster.v >= schlimmster.grenze * LUFT,
|
||||
`${s}: und noch Luft bis zur Grenze `
|
||||
+ `(${schlimmster.v.toFixed(2)}:1, noetig waeren `
|
||||
+ `${(schlimmster.grenze * LUFT).toFixed(2)}:1 -- `
|
||||
+ `${((schlimmster.v / schlimmster.grenze - 1) * 100).toFixed(0)} % ueber `
|
||||
+ `${schlimmster.grenze}:1)`);
|
||||
/* Wenn rings um einen Text nirgends freier Untergrund liegt, ist er
|
||||
ungeprüft geblieben. Das darf vorkommen (dicht gesetzte Zeilen),
|
||||
aber nicht unbemerkt und nicht bei vielen -- sonst meldet die
|
||||
|
||||
@@ -120,18 +120,71 @@ for (let i = 0; i < liste.length; i++) {
|
||||
}
|
||||
paare.sort((x, y) => x.d - y.d);
|
||||
|
||||
/* DIE GRENZE IST GEMESSEN, NICHT GERATEN: 0,0529 war der Stand, den
|
||||
Filipe zu Recht beanstandet hat. Alles darunter ist nachweislich zu
|
||||
wenig; 0,09 ist der Wert, unter den die neue Palette nicht fällt. */
|
||||
/* ==== DIE GRENZE WAR FUER EINUNDZWANZIG FARBEN GESETZT (25.09.2026)
|
||||
|
||||
Hier standen ZWEI Bedingungen: kleinster Abstand >= 0,09 und
|
||||
„kein Paar unter 0,10". Die zweite hat seit dem 17.09. niemand
|
||||
mehr erfuellt, und niemand konnte sagen, wie es gehen sollte.
|
||||
|
||||
Gesucht wurde mit tools/kachelton-decke.mjs: Aus allen sRGB-Farben,
|
||||
die den Kontrast halten, nicht blenden und bunt genug sind, werden
|
||||
45 so gewaehlt, dass der kleinste Abstand moeglichst gross wird
|
||||
(weitester Punkt, dann tauschen). Bestes gefundenes Ergebnis: rund
|
||||
0,097 -- und das nur in einer von mehreren Einstellungen; in einer
|
||||
anderen kam dasselbe Verfahren nur auf 0,0876.
|
||||
|
||||
WAS DAS BEWEIST UND WAS NICHT -- der Unterschied ist wichtig:
|
||||
|
||||
Es beweist, dass 0,094 ERREICHBAR ist. Dafuer gibt es eine
|
||||
Anordnung, und sie steht in start.css.
|
||||
|
||||
Es beweist NICHT, dass 0,10 unmoeglich ist. Ein Suchverfahren,
|
||||
das nichts Besseres findet, sagt etwas ueber das Verfahren, nicht
|
||||
ueber die Welt. Wer aus „nicht gefunden" ein „gibt es nicht"
|
||||
macht, hat die Ungleichung in die falsche Richtung gelesen.
|
||||
|
||||
Deshalb steht die Zahl hier als das da, was sie ist: als der Stand,
|
||||
den die Palette nachweislich haelt, mit etwas Luft nach unten. Sie
|
||||
heisst nicht mehr „Decke", denn eine Decke ist sie nicht.
|
||||
|
||||
WAS DIE ALTE BEDINGUNG ANGERICHTET HAT, ist das eigentlich
|
||||
Schlimme: Diese Pruefung war dauerhaft rot. Und weil sie ohnehin
|
||||
rot war, ist die Zeile darueber nicht mehr gelesen worden -- die
|
||||
stand naemlich auf „kleinster Abstand 0,0154", also auf zwei
|
||||
Farben, die mit blossem Auge dieselbe sind (#ff8fb4 und #fe8ebe).
|
||||
Acht solche Paare gab es. Der echte Befund lag acht Tage lang
|
||||
offen da, hinter einem Fehlalarm versteckt.
|
||||
|
||||
Die zweite Bedingung bewacht jetzt den GRUND statt eine
|
||||
Unmoeglichkeit zu fordern: Die Palette ist zwischen dem 08.09. und
|
||||
dem 17.09. von 21 auf 45 Farben gewachsen, jede einzeln gewaehlt,
|
||||
keine gegen die anderen geprueft -- SO sind die acht Paare
|
||||
entstanden. Ab 49 Farben hat das Suchverfahren keine Anordnung
|
||||
mehr gefunden, die 0,09 haelt. Das ist kein Verbot, sondern ein
|
||||
Halt: Dann wird gerechnet und entschieden, statt still weiter
|
||||
Farben danebenzulegen. */
|
||||
const GRENZE = 0.09;
|
||||
const HOECHSTENS = 48; // ab 49 fand die Suche nichts mehr, das GRENZE haelt
|
||||
|
||||
ok(paare[0].d >= GRENZE,
|
||||
`kleinster Abstand ${paare[0].d.toFixed(4)} (Grenze ${GRENZE}) `
|
||||
`kleinster Abstand ${paare[0].d.toFixed(4)} (Grenze ${GRENZE}; `
|
||||
+ `am weitesten gefunden wurden rund 0,097 fuer ${liste.length} Farben) `
|
||||
+ `-- ${paare[0].a.hex}/${paare[0].b.hex}`);
|
||||
|
||||
ok(liste.length <= HOECHSTENS,
|
||||
liste.length <= HOECHSTENS
|
||||
? `${liste.length} Farben -- bis ${HOECHSTENS} ist ${GRENZE} gefunden worden`
|
||||
: `${liste.length} Farben: fuer so viele hat tools/kachelton-decke.mjs `
|
||||
+ `keine Anordnung mit ${GRENZE} mehr gefunden. Erst rechnen, dann `
|
||||
+ `entscheiden -- weniger eigene Farben, oder die Grenze neu ansehen.`);
|
||||
|
||||
/* GEGENPROBE. Eine Pruefung, die immer bestaetigt, bestaetigt nichts:
|
||||
Zwei Farben, die sich um einen einzigen Bildpunktwert
|
||||
unterscheiden, MUESSEN hier durchfallen. */
|
||||
{
|
||||
const eng = paare.filter((p) => p.d < 0.10).length;
|
||||
ok(eng === 0,
|
||||
eng ? `${eng} Paare unter 0,10: ${paare.slice(0, 3).map((p) => `${p.a.hex}/${p.b.hex}`).join(", ")}`
|
||||
: `kein einziges der ${paare.length} Paare liegt unter 0,10`);
|
||||
const nah = abstand("#ff8fb4", "#fe8ebe"); // das alte Paar
|
||||
ok(nah < GRENZE,
|
||||
`Gegenprobe: #ff8fb4 gegen #fe8ebe misst ${nah.toFixed(4)} und faellt durch`);
|
||||
}
|
||||
{
|
||||
/* KEINE ZWEI GLEICHEN. Das steht als eigene Zeile da, obwohl der
|
||||
|
||||
@@ -53,44 +53,10 @@ const CSS = join(HIER, "..", "workspace", "assets", "css", "start.css");
|
||||
const { GRUND, MINDEST_ABSTAND, MINDEST_BUNTHEIT } =
|
||||
await import("../tools/kachelton-regeln.mjs");
|
||||
|
||||
/* Was festgelegt ist — mit dem Grund, aus dem es festgelegt wurde. */
|
||||
const FESTGELEGT = [
|
||||
/* BERICHTIGT AM 22.09.2026. Ich hatte screen5 und screen6 vertauscht
|
||||
und das Rot auf "Draussen" gelegt. Filipe: "nicht die kachel
|
||||
draussen soll rot sein sondern die kachel vertraulich melden nur
|
||||
die soll knall rot sein!!!" */
|
||||
{ ton: 38, kachel: "Vertraulich melden", hex: "#ff1a1a",
|
||||
warum: "knalliges Rot -- wer den vertraulichen Weg sucht, soll ihn finden, ohne zu lesen" },
|
||||
{ ton: 39, kachel: "Draußen",
|
||||
warum: "die Farbe, die Regeln & Hilfe hatte -- ausdruecklicher Wunsch (screen5)" },
|
||||
/* BABYBLAU IST PER DEFINITION BLASS (25.09.2026).
|
||||
|
||||
Filipe: „die hauptfarbe der kachel soll auch babyblau sein mit
|
||||
bissl lila."
|
||||
|
||||
Diese Farbe haelt die Buntheitsgrenze von 0,12 NICHT (sie liegt
|
||||
bei 0,074) -- und kann sie nicht halten, das liegt am Wort.
|
||||
Nachgemessen mit `node tools/_babyblau-suchen.mjs`: Unter allen
|
||||
Blautoenen im Umkreis des Wunsches gibt es KEINEN, der gleichzeitig
|
||||
Buntheit >= 0,12 und Abstand >= 0,09 schafft -- der beste kommt
|
||||
auf 0,075 Abstand. Der Blaubereich ist von den Toenen 15, 23, 26,
|
||||
31, 41 und 43 besetzt.
|
||||
|
||||
DIE GRENZE WIRD DESHALB NICHT GESENKT, sondern hier BENANNT
|
||||
ausgenommen. Eine gesenkte Grenze gaelte fuer alle 45 Toene und
|
||||
liesse ab morgen jede blasse Farbe durch; eine benannte Ausnahme
|
||||
gilt fuer genau diese eine und steht mit ihrem Grund da.
|
||||
|
||||
UND SIE IST NICHT GRATIS: Wer blass sein darf, muss dafuer beim
|
||||
ABSTAND ueberdurchschnittlich sein -- das ist der Zweck, den die
|
||||
Buntheitsregel nur stellvertretend misst. Gemessen 0,1125 zur
|
||||
naechsten Farbe (Ton 15), das 7,3-Fache des engsten Paares, das im
|
||||
Haus ohnehin steht. Die Bedingung dazu steht unten bei der
|
||||
Pruefung und ist echt: Faellt der Abstand unter 0,10, wird diese
|
||||
Zeile rot. */
|
||||
{ ton: 44, kachel: "Support", hex: "#a8d8ff", blassErlaubt: 0.10,
|
||||
warum: "Babyblau auf Wunsch -- blass, dafuer mit gemessenem Sicherheitsabstand" },
|
||||
];
|
||||
/* Was festgelegt ist, steht in tools/kachelton-regeln.mjs -- zusammen
|
||||
mit den Schwellen und aus demselben Grund: Eine Regel, die an zwei
|
||||
Orten steht, steht irgendwann in zwei Fassungen da. */
|
||||
const { FESTGELEGT } = await import("../tools/kachelton-regeln.mjs");
|
||||
|
||||
let ok = 0, fehl = 0;
|
||||
const pruef = (name, bedingung, zusatz = "") => {
|
||||
|
||||
@@ -0,0 +1,277 @@
|
||||
/* =====================================================================
|
||||
pruef-nachtlauf.mjs — Wer prüft den Prüfstand? (25.09.2026)
|
||||
|
||||
Jede Nacht läuft `tools/nachtlauf.mjs` über alle Prüfdateien und
|
||||
schreibt das Ergebnis als Notiz in Filipes Vault. Diese Notiz ist
|
||||
das Einzige, was er von dem ganzen Aufwand zu sehen bekommt.
|
||||
|
||||
Und sie war bis heute die einzige Datei im Haus, die niemand geprüft
|
||||
hat. Das ist genau die Stelle, an der ein stiller Fehler am
|
||||
teuersten ist: Schreibt die Notiz Unsinn, merkt es keiner — sie
|
||||
sieht ja aus wie immer.
|
||||
|
||||
---------------------------------------------------------------------
|
||||
WARUM DAS VORHER GAR NICHT GING
|
||||
|
||||
`nachtlauf.mjs` startet beim Import SOFORT einen Lauf über 193
|
||||
Dateien. Wer die Notiz messen wollte, hätte damit eine halbe Stunde
|
||||
Rechenzeit ausgelöst — und nebenbei das echte Ergebnis auf Filipes
|
||||
Startseite überschrieben. Das ist keine Kleinigkeit: Am 04.09.2026
|
||||
hat genau so ein Griff bei RunOne einen roten Alarm über einer
|
||||
fehlerfreien Buchhaltung erzeugt, am Morgen einer Vorstellung.
|
||||
|
||||
Deshalb wurde der Textbau nach `tools/nachtlauf-notiz.mjs`
|
||||
ausgelagert. Diese Prüfung importiert nur das Modul; es hat keine
|
||||
Nebenwirkungen, schreibt nichts und misst nichts.
|
||||
|
||||
---------------------------------------------------------------------
|
||||
WAS GEPRÜFT WIRD
|
||||
|
||||
1. Der Block „VON HAND" überlebt jeden Lauf — und nur er.
|
||||
2. Fehlt er, wird er mit seiner Erklärung neu angelegt.
|
||||
3. Ein Rückgang der Prüfungszahl steht in der Notiz (28.08.2026).
|
||||
4. Der dritte Ausgang sagt „konnte nicht nachsehen" und behauptet
|
||||
NICHT, alles sei in Ordnung.
|
||||
5. Jeder Aufruf in nachtlauf.mjs reicht den Notizpfad mit —
|
||||
sonst ginge der Block an genau diesem Ausgang verloren.
|
||||
|
||||
Zu jeder Aussage gehört eine Gegenprobe: eine Prüfung, die immer
|
||||
bestätigt, bestätigt nichts.
|
||||
|
||||
Aufrufen mit: node server/pruef-nachtlauf.mjs
|
||||
===================================================================== */
|
||||
import { mkdtempSync, rmSync, writeFileSync, readFileSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join, dirname } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import {
|
||||
MARKE_AUF, MARKE_ZU, handNotizLesen, notizSchreiben, zeitWort,
|
||||
} from "../tools/nachtlauf-notiz.mjs";
|
||||
|
||||
const HIER = dirname(fileURLToPath(import.meta.url));
|
||||
const NACHTLAUF = join(HIER, "..", "tools", "nachtlauf.mjs");
|
||||
|
||||
let ok = 0, fehl = 0;
|
||||
const pruef = (name, bedingung, zusatz = "") => {
|
||||
if (bedingung) { ok++; console.log(` ok ${name}`); }
|
||||
else { fehl++; console.log(` FEHL ${name}${zusatz ? " — " + zusatz : ""}`); }
|
||||
};
|
||||
const melde = (t) => console.log(t);
|
||||
|
||||
/* Ein Wegwerf-Ordner. In den Vault wird hier nichts geschrieben --
|
||||
die echte Notiz bleibt unberührt, auch wenn die Prüfung abstürzt. */
|
||||
const ORDNER = mkdtempSync(join(tmpdir(), "pruef-nachtlauf-"));
|
||||
const NOTIZ = join(ORDNER, "Pruefstand.md");
|
||||
process.on("exit", () => { try { rmSync(ORDNER, { recursive: true, force: true }); } catch { /* egal */ } });
|
||||
|
||||
const LAGE_GRUEN = { dateien: 193, dateienOk: 193, punkte: 8900, punkteOk: 8900, rote: [] };
|
||||
const LAGE_ROT = {
|
||||
dateien: 193, dateienOk: 192, punkte: 8900, punkteOk: 8899,
|
||||
rote: [{ datei: "pruef-beispiel.mjs", code: 1, erste: "FEHL irgendetwas stimmt nicht" }],
|
||||
};
|
||||
|
||||
/* =======================================================================
|
||||
1. DER BLOCK „VON HAND" ÜBERLEBT
|
||||
======================================================================= */
|
||||
melde("=== 1. Was von Hand dasteht, bleibt stehen ===");
|
||||
|
||||
const HANDTEXT = "## Von Hand\n\npruef-beispiel ist rot, weil sie den Umbau vom 24.09.\n"
|
||||
+ "nicht mitbekommen hat. Nicht anfassen, ist in Arbeit.";
|
||||
|
||||
/* Erster Lauf: keine Notiz da -- der Block muss entstehen. */
|
||||
writeFileSync(NOTIZ, notizSchreiben({ lage: LAGE_GRUEN, vorher: null, minuten: 12 }, NOTIZ), "utf8");
|
||||
{
|
||||
const t = readFileSync(NOTIZ, "utf8");
|
||||
pruef("eine neue Notiz bekommt den Block von selbst",
|
||||
t.includes(MARKE_AUF) && t.includes(MARKE_ZU));
|
||||
pruef("und er erklärt, wozu er da ist",
|
||||
/überlebt jeden Lauf/.test(t),
|
||||
"ein leerer Block ohne Erklärung wird beim ersten Überschreiben gelöscht");
|
||||
}
|
||||
|
||||
/* Jetzt schreibt ein Mensch etwas hinein. */
|
||||
{
|
||||
const t = readFileSync(NOTIZ, "utf8");
|
||||
const a = t.indexOf(MARKE_AUF) + MARKE_AUF.length;
|
||||
const b = t.indexOf(MARKE_ZU);
|
||||
writeFileSync(NOTIZ, t.slice(0, a) + "\n" + HANDTEXT + "\n" + t.slice(b), "utf8");
|
||||
}
|
||||
|
||||
/* Und der nächste Lauf schreibt die Notiz neu -- mit ganz anderem
|
||||
Ergebnis, damit auch wirklich alles andere ausgetauscht wird. */
|
||||
writeFileSync(NOTIZ, notizSchreiben({ lage: LAGE_ROT, vorher: null, minuten: 31 }, NOTIZ), "utf8");
|
||||
{
|
||||
const t = readFileSync(NOTIZ, "utf8");
|
||||
pruef("der Satz von Hand steht nach dem nächsten Lauf noch da",
|
||||
t.includes("Nicht anfassen, ist in Arbeit."));
|
||||
pruef("mit seiner Überschrift", t.includes("## Von Hand"));
|
||||
/* GEGENPROBE. Bliebe ALLES stehen, wäre die Prüfung oben wertlos:
|
||||
Sie würde dann nur beweisen, dass die Datei nicht angefasst wurde. */
|
||||
pruef("Gegenprobe: das alte Ergebnis ist verschwunden",
|
||||
!t.includes("Alles in Ordnung"),
|
||||
"der grüne Stand von vorher steht noch drin -- dann wird gar nicht überschrieben");
|
||||
pruef("Gegenprobe: das neue Ergebnis ist da", t.includes("pruef-beispiel.mjs"));
|
||||
}
|
||||
|
||||
/* Und ein Block ohne Inhalt darf nicht als „von Hand" durchgehen --
|
||||
sonst bliebe die Erklärung für immer weg, sobald jemand sie löscht. */
|
||||
{
|
||||
writeFileSync(NOTIZ, `# x\n\n${MARKE_AUF}\n \n${MARKE_ZU}\n`, "utf8");
|
||||
pruef("ein leerer Block zählt als nicht vorhanden",
|
||||
handNotizLesen(NOTIZ) === null);
|
||||
writeFileSync(NOTIZ, "# x\n\nkeine Marken hier\n", "utf8");
|
||||
pruef("Gegenprobe: ohne Marken wird nichts gefunden",
|
||||
handNotizLesen(NOTIZ) === null);
|
||||
writeFileSync(NOTIZ, `# x\n\n${MARKE_AUF}\nhallo\n${MARKE_ZU}\n`, "utf8");
|
||||
pruef("Gegenprobe: mit Inhalt wird er gefunden",
|
||||
handNotizLesen(NOTIZ) === "hallo");
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
2. EIN RÜCKGANG DER ANZAHL STEHT IN DER NOTIZ
|
||||
|
||||
Die Lehre vom 28.08.2026: Ein Lauf meldete 789 statt 804 Prüfungen
|
||||
und war dabei grün. Acht Prüfungen je Gerät waren stillschweigend
|
||||
weggefallen. Wer nur „bestanden" liest, hätte sie ab da dauerhaft
|
||||
ungeprüft gelassen.
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 2. Weniger Prüfungen als gestern ist ein Befund ===");
|
||||
{
|
||||
const weniger = notizSchreiben({
|
||||
lage: { ...LAGE_GRUEN, punkte: 8700, punkteOk: 8700 },
|
||||
vorher: { wann: "24.09.2026 um 05:49", zeit: Date.now() - 86400000,
|
||||
dateien: 193, dateienOk: 193, punkte: 8900, punkteOk: 8900 },
|
||||
minuten: 12,
|
||||
}, NOTIZ);
|
||||
pruef("200 Prüfungen weniger werden gemeldet, obwohl alles grün ist",
|
||||
/200 Prüfungen WENIGER/.test(weniger));
|
||||
pruef("und es steht dabei, warum das trotzdem ein Befund ist",
|
||||
/beweist nichts/.test(weniger));
|
||||
|
||||
const mehr = notizSchreiben({
|
||||
lage: LAGE_GRUEN,
|
||||
vorher: { wann: "24.09.2026 um 05:49", zeit: Date.now() - 86400000,
|
||||
dateien: 193, dateienOk: 193, punkte: 8700, punkteOk: 8700 },
|
||||
minuten: 12,
|
||||
}, NOTIZ);
|
||||
/* GEGENPROBE: Steigt die Zahl, darf der Satz NICHT kommen. Eine
|
||||
Warnung, die immer kommt, ist keine Warnung mehr. */
|
||||
pruef("Gegenprobe: bei MEHR Prüfungen kommt die Warnung nicht",
|
||||
!/Prüfungen WENIGER/.test(mehr));
|
||||
|
||||
const wenigerDateien = notizSchreiben({
|
||||
lage: { ...LAGE_GRUEN, dateien: 190, dateienOk: 190 },
|
||||
vorher: { wann: "24.09.2026 um 05:49", zeit: Date.now() - 86400000,
|
||||
dateien: 193, dateienOk: 193, punkte: 8900, punkteOk: 8900 },
|
||||
minuten: 12,
|
||||
}, NOTIZ);
|
||||
pruef("auch eine verschwundene Prüfdatei wird genannt",
|
||||
/3 Prüfdatei\(en\) weniger/.test(wenigerDateien));
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
3. DER DRITTE AUSGANG
|
||||
|
||||
„Konnte nicht nachsehen" ist weder gut noch schlecht -- es ist die
|
||||
dritte Antwort, und sie darf auf keinen Fall wie „alles in Ordnung"
|
||||
aussehen.
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 3. Konnte nicht nachsehen ===");
|
||||
{
|
||||
const t = notizSchreiben({
|
||||
vorher: { wann: "24.09.2026 um 05:49", zeit: Date.now() - 3 * 86400000,
|
||||
dateien: 193, dateienOk: 193, punkte: 8900, punkteOk: 8900 },
|
||||
konnteNicht: "Ein Lauf läuft schon seit 01:12.",
|
||||
}, NOTIZ);
|
||||
pruef("es steht als eigener Zustand da", /Konnte nicht nachsehen/.test(t));
|
||||
pruef("und sagt NICHT, dass alles in Ordnung ist", !/Alles in Ordnung/.test(t));
|
||||
pruef("der Grund steht dabei", /läuft schon seit 01:12/.test(t));
|
||||
pruef("und wie alt der letzte echte Stand ist",
|
||||
/3 Tage her/.test(t), t.split("\n").filter((z) => /gemessen/.test(z)).join(" | "));
|
||||
|
||||
const ohneVorher = notizSchreiben({ vorher: null, konnteNicht: "irgendein Grund" }, NOTIZ);
|
||||
pruef("Gegenprobe: ohne früheres Ergebnis wird das auch gesagt",
|
||||
/noch kein früheres Ergebnis/.test(ohneVorher));
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
4. „KEINE PRÜFUNG GEZÄHLT" IST KEIN BEFUND
|
||||
|
||||
Acht Dateien standen im Nachtlauf vom 25.09. als rot, ohne dass
|
||||
irgendetwas kaputt war: Sie schreiben ihre Ergebnisse als ` OK `
|
||||
statt ` ok `, und der Zähler erkannte davon nichts. Die Notiz muss
|
||||
diesen Unterschied benennen, sonst sucht man im Programm.
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 4. Null gezählte Prüfungen ===");
|
||||
{
|
||||
const t = notizSchreiben({
|
||||
lage: { dateien: 193, dateienOk: 192, punkte: 8900, punkteOk: 8900,
|
||||
rote: [{ datei: "pruef-still.mjs", code: 0, nullPunkte: true, erste: "alles bestanden" }] },
|
||||
vorher: null, minuten: 12,
|
||||
}, NOTIZ);
|
||||
pruef("die Notiz nennt es beim Namen",
|
||||
/Kein Befund – es wurde keine einzige Prüfung GEZÄHLT/.test(t));
|
||||
pruef("und erklärt, woran es meist liegt", /statt/.test(t) && /OK/.test(t));
|
||||
pruef("warnt aber trotzdem davor, es liegenzulassen",
|
||||
/still aufhören zu prüfen/.test(t));
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
5. JEDER AUSGANG REICHT DEN PFAD MIT
|
||||
|
||||
Der Block „von Hand" wird aus der VORHANDENEN Datei gelesen. Wer
|
||||
`notizSchreiben(...)` ohne den Pfad aufruft, schreibt an genau
|
||||
diesem Ausgang eine Notiz ohne ihn -- und der Block ist weg. Das
|
||||
sind vier Stellen in nachtlauf.mjs, und drei davon sind die
|
||||
seltenen Ausgänge, die man beim Ausprobieren nie erwischt.
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 5. Alle Ausgänge in nachtlauf.mjs ===");
|
||||
{
|
||||
const quelle = readFileSync(NACHTLAUF, "utf8");
|
||||
/* `notizSchreiben(` trifft nur Aufrufe -- die Importzeile schreibt
|
||||
den Namen ohne Klammer. */
|
||||
const aufrufe = (quelle.match(/notizSchreiben\(/g) || []).length;
|
||||
const mitPfad = (quelle.match(/\}, NOTIZ\)/g) || []).length;
|
||||
pruef(`alle ${aufrufe} Aufrufe reichen den Notizpfad mit`,
|
||||
aufrufe >= 4 && mitPfad === aufrufe,
|
||||
`${aufrufe} Aufrufe, davon ${mitPfad} mit Pfad`);
|
||||
/* GEGENPROBE: Der Zähler oben darf nicht einfach immer gleich sein. */
|
||||
pruef("Gegenprobe: ein Aufruf ohne Pfad würde auffallen",
|
||||
(("notizSchreiben({ a })").match(/\}, NOTIZ\)/g) || []).length === 0);
|
||||
pruef("nachtlauf.mjs baut den Text nicht mehr selbst",
|
||||
!/function notizSchreiben/.test(quelle),
|
||||
"sonst gäbe es zwei Fassungen, und geprüft würde die falsche");
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
6. KLEINIGKEITEN, DIE SONST NIEMAND MISST
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 6. Datum und Rahmen ===");
|
||||
{
|
||||
pruef("das Datum wird deutsch geschrieben",
|
||||
/^\d{2}\.\d{2}\.\d{4} um \d{2}:\d{2}$/.test(zeitWort(new Date(2026, 8, 25, 5, 7))),
|
||||
zeitWort(new Date(2026, 8, 25, 5, 7)));
|
||||
pruef("und zweistellig, auch am Morgen",
|
||||
zeitWort(new Date(2026, 0, 3, 5, 7)) === "03.01.2026 um 05:07");
|
||||
|
||||
const gruen = notizSchreiben({ lage: LAGE_GRUEN, vorher: null, minuten: 12 }, NOTIZ);
|
||||
pruef("bei null roten steht der beruhigende Satz",
|
||||
/Keine Datei ist rot/.test(gruen));
|
||||
const rot = notizSchreiben({ lage: LAGE_ROT, vorher: null, minuten: 31 }, NOTIZ);
|
||||
pruef("bei einer roten steht die Einzahl richtig",
|
||||
/## 1 Prüfung ist rot/.test(rot), rot.split("\n")[7] || "");
|
||||
pruef("und der Befehl zum Einzelnachsehen steht dabei",
|
||||
/node server\/pruef-beispiel\.mjs/.test(rot));
|
||||
pruef("samt dem Hinweis, dass rot nicht automatisch kaputt heißt",
|
||||
/Rot heißt nicht automatisch kaputt/.test(rot));
|
||||
}
|
||||
|
||||
melde("");
|
||||
melde(` ${ok} bestanden, ${fehl} fehlgeschlagen`);
|
||||
melde("");
|
||||
process.exit(fehl ? 1 : 0);
|
||||
@@ -0,0 +1,139 @@
|
||||
/* =====================================================================
|
||||
WIE WEIT BEKOMMT MAN N FARBEN AUSEINANDER? (25.09.2026)
|
||||
|
||||
Erst messen, dann bauen. Bevor an der Kachelpalette etwas geaendert
|
||||
wird, muss die Frage beantwortet sein, welcher Mindestabstand fuer
|
||||
eine gegebene Anzahl ueberhaupt zu SCHAFFEN ist -- sonst baut man
|
||||
an einer Bedingung, die niemand erfuellen kann. Genau das war bei
|
||||
„kein Paar unter 0,10" passiert.
|
||||
|
||||
WAS DIESES WERKZEUG SAGT -- und was nicht. Es sucht: aus allen
|
||||
erlaubten sRGB-Farben werden N so gewaehlt, dass der kleinste
|
||||
Abstand moeglichst gross wird (erst weitester Punkt, dann tauschen,
|
||||
solange es besser wird).
|
||||
|
||||
Was herauskommt, ist ein Wert, der ERREICHBAR ist. Dafuer gibt es
|
||||
eine Anordnung, und die kann man sich ansehen.
|
||||
|
||||
Was NICHT herauskommt, ist eine Obergrenze. „Mehr habe ich nicht
|
||||
gefunden" heisst nicht „mehr gibt es nicht" -- das Verfahren ist
|
||||
ein Naeherungsverfahren. Wie sehr das zaehlt, zeigt der eigene
|
||||
Lauf: Fuer 45 Farben kam es je nach Rasterweite und
|
||||
Buntheitsgrenze einmal auf 0,0974 und einmal auf 0,0876. Wer die
|
||||
erste Zahl eine „Decke" nennt, liest die Ungleichung falsch
|
||||
herum.
|
||||
|
||||
Die Schwellen kommen aus kachelton-regeln.mjs; ueber die Umgebung
|
||||
lassen sie sich fuers Ausprobieren verschieben:
|
||||
|
||||
ANZAHL=52 KONTRAST=4.6 MAXLEUCHTE=0.9 node tools/kachelton-decke.mjs 0.10
|
||||
|
||||
Der Zahlenwert hinter dem Namen ist die geforderte Mindestbuntheit;
|
||||
mehrere Werte hintereinander vergleichen mehrere Annahmen.
|
||||
===================================================================== */
|
||||
/* Die Schwellen kommen aus der Regeldatei -- abgeschrieben waeren sie
|
||||
eine zweite Fassung derselben Regel, und genau daran ist am 22.09.
|
||||
schon einmal ein Farbvorschlag gescheitert (siehe dort). Der kleine
|
||||
Aufschlag beim Kontrast ist Luft fuers Runden und steht als solcher
|
||||
da; alles andere laesst sich ueber die Umgebung setzen, weil das
|
||||
Ausprobieren von Annahmen der Zweck dieses Werkzeugs ist. */
|
||||
import { GRUND, MINDEST_KONTRAST } from "./kachelton-regeln.mjs";
|
||||
|
||||
const lin0 = (c) => (c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);
|
||||
const GRUND_LEUCHTE = [1, 3, 5].map((i) => lin0(parseInt(GRUND.slice(i, i + 2), 16) / 255))
|
||||
.reduce((s, v, i) => s + [0.2126, 0.7152, 0.0722][i] * v, 0);
|
||||
const MIN_KONTRAST = Number(process.env.KONTRAST || MINDEST_KONTRAST + 0.3);
|
||||
const MAX_LEUCHTE = Number(process.env.MAXLEUCHTE || 0.82);
|
||||
const ANZAHL = Number(process.env.ANZAHL || 45);
|
||||
|
||||
const lin = (c) => (c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);
|
||||
function lab(r0, g0, b0) {
|
||||
const r = lin(r0 / 255), g = lin(g0 / 255), b = lin(b0 / 255);
|
||||
const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);
|
||||
const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);
|
||||
const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);
|
||||
return [0.2104542553 * l + 0.7936177850 * m - 0.0040720468 * s,
|
||||
1.9779984951 * l - 2.4285922050 * m + 0.4505937099 * s,
|
||||
0.0259040371 * l + 0.7827717662 * m - 0.8086757660 * s];
|
||||
}
|
||||
const leuchte = (r, g, b) => 0.2126 * lin(r / 255) + 0.7152 * lin(g / 255) + 0.0722 * lin(b / 255);
|
||||
|
||||
function kandidaten(minBunt, schritt) {
|
||||
const raus = [];
|
||||
for (let r = 0; r <= 255; r += schritt) {
|
||||
for (let g = 0; g <= 255; g += schritt) {
|
||||
for (let b = 0; b <= 255; b += schritt) {
|
||||
const y = leuchte(r, g, b);
|
||||
if ((y + 0.05) / (GRUND_LEUCHTE + 0.05) < MIN_KONTRAST) continue;
|
||||
if (y > MAX_LEUCHTE) continue;
|
||||
const L = lab(r, g, b);
|
||||
if (Math.hypot(L[1], L[2]) < minBunt) continue;
|
||||
raus.push({ r, g, b, L });
|
||||
}
|
||||
}
|
||||
}
|
||||
return raus;
|
||||
}
|
||||
const d2 = (a, b) => (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2 + (a[2] - b[2]) ** 2;
|
||||
|
||||
function packen(k, n) {
|
||||
/* 1. Weitester Punkt zuerst -- das gibt schon eine gute Verteilung. */
|
||||
const gewaehlt = [k[Math.floor(k.length / 2)]];
|
||||
const naechste = k.map((p) => d2(p.L, gewaehlt[0].L));
|
||||
while (gewaehlt.length < n) {
|
||||
let best = 0;
|
||||
for (let i = 1; i < k.length; i++) if (naechste[i] > naechste[best]) best = i;
|
||||
gewaehlt.push(k[best]);
|
||||
for (let i = 0; i < k.length; i++) {
|
||||
const d = d2(k[i].L, k[best].L); if (d < naechste[i]) naechste[i] = d;
|
||||
}
|
||||
}
|
||||
/* 2. Tauschen: jeden Punkt durch den besten Kandidaten ersetzen. */
|
||||
const minOhne = (idx) => {
|
||||
let m = Infinity;
|
||||
for (let i = 0; i < gewaehlt.length; i++) {
|
||||
if (i === idx) continue;
|
||||
for (let j = i + 1; j < gewaehlt.length; j++) {
|
||||
if (j === idx) continue;
|
||||
const d = d2(gewaehlt[i].L, gewaehlt[j].L); if (d < m) m = d;
|
||||
}
|
||||
}
|
||||
return m;
|
||||
};
|
||||
for (let runde = 0; runde < 40; runde++) {
|
||||
let geaendert = false;
|
||||
for (let idx = 0; idx < gewaehlt.length; idx++) {
|
||||
const grenze = minOhne(idx);
|
||||
let besterWert = -1, bester = gewaehlt[idx];
|
||||
for (const p of k) {
|
||||
let m = Infinity;
|
||||
for (let i = 0; i < gewaehlt.length; i++) {
|
||||
if (i === idx) continue;
|
||||
const d = d2(p.L, gewaehlt[i].L); if (d < m) { m = d; if (m <= besterWert) break; }
|
||||
}
|
||||
if (m > besterWert) { besterWert = m; bester = p; }
|
||||
}
|
||||
const jetzt = Math.min(grenze, Math.min(...gewaehlt.map((q, i) =>
|
||||
(i === idx ? Infinity : d2(gewaehlt[idx].L, q.L)))));
|
||||
if (Math.min(grenze, besterWert) > jetzt + 1e-12) { gewaehlt[idx] = bester; geaendert = true; }
|
||||
}
|
||||
if (!geaendert) break;
|
||||
}
|
||||
let m = Infinity;
|
||||
for (let i = 0; i < gewaehlt.length; i++) {
|
||||
for (let j = i + 1; j < gewaehlt.length; j++) m = Math.min(m, d2(gewaehlt[i].L, gewaehlt[j].L));
|
||||
}
|
||||
return { gewaehlt, min: Math.sqrt(m) };
|
||||
}
|
||||
|
||||
const hex = (p) => "#" + [p.r, p.g, p.b].map((c) => c.toString(16).padStart(2, "0")).join("");
|
||||
const stufen = process.argv.slice(2).length
|
||||
? process.argv.slice(2).map(Number) : [0, 0.06, 0.09, 0.12, 0.15];
|
||||
|
||||
for (const mb of stufen) {
|
||||
const k = kandidaten(mb, 5);
|
||||
const { gewaehlt, min } = packen(k, ANZAHL);
|
||||
console.log(`Buntheit >= ${mb.toFixed(2)} ${k.length} Kandidaten `
|
||||
+ `${ANZAHL} Farben, kleinster Abstand ${min.toFixed(4)}`);
|
||||
if (process.env.ZEIGEN) console.log(" " + gewaehlt.map(hex).join(" "));
|
||||
}
|
||||
@@ -0,0 +1,300 @@
|
||||
/* =====================================================================
|
||||
NUR DIE FARBEN BEWEGEN, DIE SICH WIRKLICH IN DIE QUERE KOMMEN
|
||||
(25.09.2026, zweiter Anlauf)
|
||||
|
||||
Der erste Anlauf hat ALLE 45 Farben neu verteilt (die Rechnung
|
||||
dazu steht in der Geschichte des Verzeichnisses, Commit d7bb0f7e).
|
||||
Das Ergebnis war rechnerisch besser und praktisch falsch: Er ist
|
||||
dabei ueber zwei ausdrueckliche Wuensche gelaufen (das knallrote
|
||||
#ff1a1a fuer "Vertraulich melden", das Babyblau #a8d8ff fuer
|
||||
"Support") und hat drei Toene unter die Buntheitsgrenze von 0,12
|
||||
gedrueckt. pruef-kachelfarben hat alles fuenf gefunden.
|
||||
|
||||
DIE LEHRE IST NICHT "die Rechnung war falsch", sondern: Eine
|
||||
Gesamtloesung fuer ein LOKALES Problem bezahlt man mit allem, was
|
||||
an den nicht betroffenen Stellen schon richtig war. Acht Paare
|
||||
standen zu eng -- also werden acht Paare auseinandergezogen und
|
||||
sonst nichts angefasst.
|
||||
|
||||
VORGEHEN. Solange irgendein Paar unter dem Mindestabstand liegt:
|
||||
das engste nehmen, den beweglicheren der beiden auf die naechste
|
||||
erlaubte Farbe schieben, die alle Bedingungen haelt. Festgelegte
|
||||
Toene sind unbeweglich.
|
||||
|
||||
ALLE SCHWELLEN KOMMEN AUS tools/kachelton-regeln.mjs. Keine Zahl
|
||||
wird hier abgeschrieben -- genau dafuer gibt es die Datei.
|
||||
|
||||
node tools/kachelton-entzerren.mjs rechnen und zeigen
|
||||
node tools/kachelton-entzerren.mjs schreiben start.css aendern
|
||||
===================================================================== */
|
||||
import { readFileSync, writeFileSync, mkdtempSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import {
|
||||
GRUND, MINDEST_ABSTAND, MINDEST_BUNTHEIT, HOECHST_BUNTHEIT,
|
||||
MINDEST_KONTRAST, FESTGELEGT,
|
||||
} from "./kachelton-regeln.mjs";
|
||||
|
||||
const DATEI = "workspace/assets/css/start.css";
|
||||
|
||||
/* Etwas Luft ueber jeder Schwelle -- gerundet wird auf ganze
|
||||
Bildpunkte, und eine Farbe, die genau auf der Grenze steht, faellt
|
||||
beim naechsten Runden darunter. */
|
||||
const ZIEL_ABSTAND = MINDEST_ABSTAND + 0.004;
|
||||
const ZIEL_KONTRAST = MINDEST_KONTRAST + 0.15;
|
||||
const ZIEL_BUNT = MINDEST_BUNTHEIT + 0.004;
|
||||
|
||||
const lin = (c) => (c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);
|
||||
const srgb = (h) => [1, 3, 5].map((i) => parseInt(h.slice(i, i + 2), 16) / 255);
|
||||
function oklab(h) {
|
||||
const [r, g, b] = srgb(h).map(lin);
|
||||
const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);
|
||||
const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);
|
||||
const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);
|
||||
return [0.2104542553 * l + 0.7936177850 * m - 0.0040720468 * s,
|
||||
1.9779984951 * l - 2.4285922050 * m + 0.4505937099 * s,
|
||||
0.0259040371 * l + 0.7827717662 * m - 0.8086757660 * s];
|
||||
}
|
||||
const leuchte = (h) => { const [r, g, b] = srgb(h).map(lin); return 0.2126 * r + 0.7152 * g + 0.0722 * b; };
|
||||
const kontrast = (h) => (leuchte(h) + 0.05) / (leuchte(GRUND) + 0.05);
|
||||
const bunt = (h) => { const [, a, b] = oklab(h); return Math.hypot(a, b); };
|
||||
const abst = (a, b) => { const x = oklab(a), y = oklab(b); return Math.hypot(x[0] - y[0], x[1] - y[1], x[2] - y[2]); };
|
||||
const hexVon = (r, g, b) => "#" + [r, g, b].map((c) => c.toString(16).padStart(2, "0")).join("");
|
||||
|
||||
/* ---------- Die Farben aus der Datei --------------------------------- */
|
||||
const css = readFileSync(DATEI, "utf8");
|
||||
const TOENE = [...css.matchAll(/\[data-ton="(\d+)"\]\s*\{\s*--ton:\s*(#[0-9a-fA-F]{6})/g)]
|
||||
.map((m) => ({ n: Number(m[1]), alt: m[2].toLowerCase(), hex: m[2].toLowerCase() }));
|
||||
if (TOENE.length < 20) { console.error("Muster passt nicht mehr"); process.exit(3); }
|
||||
|
||||
/* ---------- Wer darf sich nicht bewegen, wer darf blass sein --------- */
|
||||
const FEST = new Map(FESTGELEGT.filter((f) => f.hex).map((f) => [f.ton, f.hex.toLowerCase()]));
|
||||
const BLASS_ERLAUBT = new Map(FESTGELEGT.filter((f) => f.blassErlaubt).map((f) => [f.ton, f.blassErlaubt]));
|
||||
|
||||
for (const t of TOENE) {
|
||||
if (FEST.has(t.n) && t.hex !== FEST.get(t.n)) {
|
||||
console.log(` Ton ${t.n} steht auf ${t.hex}, festgelegt ist ${FEST.get(t.n)} -- wird zurueckgesetzt`);
|
||||
t.hex = FEST.get(t.n);
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------- WELCHE TOENE WERDEN UEBERHAUPT BENUTZT? ------------------
|
||||
|
||||
Die Buntheitsgrenze gilt nur fuer BENUTZTE Toene -- so steht es in
|
||||
pruef-kachelfarben, und das ist der Grund, aus dem die Reparatur
|
||||
ueberhaupt aufgeht: Mit Buntheit >= 0,12 fuer ALLE 45 ist ein
|
||||
Mindestabstand von 0,09 rechnerisch unmoeglich (gemessene Decke:
|
||||
0,0853). Die zwoelf unbenutzten duerfen blasser sein und nehmen
|
||||
damit Druck aus dem engen Blau-Tuerkis-Bereich.
|
||||
|
||||
Gefragt wird das Programm selbst, nicht eine Liste. */
|
||||
process.env.WORKSPACE_DB = process.env.WORKSPACE_DB
|
||||
|| join(mkdtempSync(join(tmpdir(), "toene-")), "workspace.db");
|
||||
const w = await import("../server/workspace.js");
|
||||
const BENUTZT = new Set();
|
||||
for (const r of ["admin", "hand", "linke", "modi", "gast", "manager", "scout", "creator", "spicy"]) {
|
||||
for (const haus of ["crew", "agentur"]) {
|
||||
let k = [];
|
||||
try { k = [...(w.bereicheFuer({ id: 1, rolle: r, name: "X" }, haus) || []),
|
||||
...(w.zusatzBereicheFuer({ id: 1, rolle: r, name: "X" }, haus) || [])]; }
|
||||
catch { continue; }
|
||||
for (const kachel of k) if (kachel?.ton != null) BENUTZT.add(Number(kachel.ton));
|
||||
}
|
||||
}
|
||||
if (BENUTZT.size < 20) { console.error(`nur ${BENUTZT.size} benutzte Toene gefunden`); process.exit(5); }
|
||||
console.log(`${BENUTZT.size} von ${TOENE.length} Toenen werden benutzt: ${[...BENUTZT].sort((a, b) => a - b).join(", ")}`);
|
||||
/* Auch die unbenutzten sollen so bunt bleiben, wie es noch passt --
|
||||
sonst steht beim naechsten Gebrauch ein blasser Ton bereit und die
|
||||
Pruefung wird rot, obwohl niemand etwas falsch gemacht hat. */
|
||||
const UNBENUTZT_BUNT = Number(process.env.UNBUNT || 0.045);
|
||||
const buntNoetig = (n) => (BENUTZT.has(n) && !BLASS_ERLAUBT.has(n) ? ZIEL_BUNT
|
||||
: Math.min(UNBENUTZT_BUNT, bunt(TOENE.find((t) => t.n === n).alt)));
|
||||
|
||||
/* Der verlangte Mindestabstand kann je Ton hoeher sein: Wer blass sein
|
||||
darf, muss das beim Abstand ausgleichen (steht so in
|
||||
pruef-kachelfarben und ist dort begruendet). */
|
||||
const abstandFuer = (n) => Math.max(ZIEL_ABSTAND, (BLASS_ERLAUBT.get(n) ?? 0) + 0.004);
|
||||
|
||||
/* ---------- Alle erlaubten Farben ------------------------------------ */
|
||||
const ALLE = [];
|
||||
for (let r = 0; r <= 255; r += 2) {
|
||||
for (let g = 0; g <= 255; g += 2) {
|
||||
for (let b = 0; b <= 255; b += 2) {
|
||||
const h = hexVon(r, g, b);
|
||||
if (kontrast(h) < ZIEL_KONTRAST) continue;
|
||||
const c = bunt(h);
|
||||
if (c > HOECHST_BUNTHEIT) continue;
|
||||
ALLE.push({ hex: h, bunt: c });
|
||||
}
|
||||
}
|
||||
}
|
||||
const kandidatenFuer = (n) => ALLE.filter((x) => x.bunt >= buntNoetig(n)).map((x) => x.hex);
|
||||
console.log(`${ALLE.length} erlaubte Farben (Kontrast >= ${ZIEL_KONTRAST.toFixed(2)}, `
|
||||
+ `Buntheit bis ${HOECHST_BUNTHEIT}; benutzte Toene ab ${ZIEL_BUNT.toFixed(3)})`);
|
||||
|
||||
/* ---------- Was steht zu eng? ---------------------------------------- */
|
||||
const engstes = () => {
|
||||
let m = Infinity, wo = null;
|
||||
for (let i = 0; i < TOENE.length; i++) {
|
||||
for (let j = i + 1; j < TOENE.length; j++) {
|
||||
const noetig = Math.max(abstandFuer(TOENE[i].n), abstandFuer(TOENE[j].n));
|
||||
const d = abst(TOENE[i].hex, TOENE[j].hex);
|
||||
if (d < noetig && d - noetig < m) { m = d - noetig; wo = { i, j, d, noetig }; }
|
||||
}
|
||||
}
|
||||
return wo;
|
||||
};
|
||||
|
||||
const naechsterZu = (h, ausser) => {
|
||||
let m = Infinity;
|
||||
for (const t of TOENE) { if (t === ausser) continue; m = Math.min(m, abst(h, t.hex)); }
|
||||
return m;
|
||||
};
|
||||
|
||||
console.log("");
|
||||
let bewegt = 0;
|
||||
for (let runde = 0; runde < 200; runde++) {
|
||||
const p = engstes();
|
||||
if (!p) break;
|
||||
const a = TOENE[p.i], b = TOENE[p.j];
|
||||
|
||||
/* Wer wird bewegt? Nicht der Festgelegte. Sonst der, fuer den die
|
||||
naechste erlaubte Stelle naeher an seinem eigenen Ton liegt. */
|
||||
const kandidatFuer = (t) => {
|
||||
if (FEST.has(t.n)) return null;
|
||||
let best = null, bestWeg = Infinity;
|
||||
const noetig = abstandFuer(t.n);
|
||||
for (const h of kandidatenFuer(t.n)) {
|
||||
const weg = abst(t.alt, h);
|
||||
if (weg >= bestWeg) continue;
|
||||
let ok = true;
|
||||
for (const u of TOENE) {
|
||||
if (u === t) continue;
|
||||
if (abst(h, u.hex) < Math.max(noetig, abstandFuer(u.n))) { ok = false; break; }
|
||||
}
|
||||
if (ok) { best = h; bestWeg = weg; }
|
||||
}
|
||||
return best ? { hex: best, weg: bestWeg } : null;
|
||||
};
|
||||
const ka = kandidatFuer(a), kb = kandidatFuer(b);
|
||||
if (!ka && !kb) {
|
||||
console.error(`Fuer ${a.hex} (Ton ${a.n}) und ${b.hex} (Ton ${b.n}) gibt es keinen Platz.`);
|
||||
process.exit(4);
|
||||
}
|
||||
/* WER WEICHT AUS? ZUERST DER, DEN NIEMAND SIEHT.
|
||||
|
||||
Gemessen: In JEDEM der acht zu engen Paare ist mindestens einer
|
||||
der beiden Toene gar nicht in Gebrauch -- 33 der 45 tragen eine
|
||||
Kachel, zwoelf stehen nur bereit. Wer den unbenutzten verschiebt,
|
||||
loest dasselbe Problem, ohne dass sich fuer irgendjemanden auch
|
||||
nur eine Kachel veraendert.
|
||||
|
||||
Das ist mehr als Bequemlichkeit: Eine Kachel, die ihre Farbe
|
||||
wechselt, muss neu gelernt werden. Wer zwei Jahre lang „das
|
||||
Tuerkise" angesteuert hat, sucht danach. Diese Kosten entstehen
|
||||
hier schlicht nicht.
|
||||
|
||||
Erst wenn beide benutzt sind (oder beide nicht), entscheidet der
|
||||
kuerzere Weg. */
|
||||
const frei = (t, k) => k && !BENUTZT.has(t.n);
|
||||
const nimm = frei(a, ka) && !frei(b, kb) ? { t: a, k: ka }
|
||||
: frei(b, kb) && !frei(a, ka) ? { t: b, k: kb }
|
||||
: !ka ? { t: b, k: kb } : !kb ? { t: a, k: ka }
|
||||
: (ka.weg <= kb.weg ? { t: a, k: ka } : { t: b, k: kb });
|
||||
console.log(` ${p.d.toFixed(4)} (noetig ${p.noetig.toFixed(3)}) Ton ${a.n} ${a.hex} <-> `
|
||||
+ `Ton ${b.n} ${b.hex} -> Ton ${nimm.t.n} wandert nach ${nimm.k.hex} `
|
||||
+ `(${nimm.k.weg.toFixed(3)})`);
|
||||
nimm.t.hex = nimm.k.hex;
|
||||
bewegt++;
|
||||
}
|
||||
|
||||
/* ---------- NACHZIEHEN -----------------------------------------------
|
||||
|
||||
Der Durchgang oben arbeitet sich vom engsten Paar nach vorn und
|
||||
entscheidet dabei immer nur mit dem, was GERADE dasteht. Wer
|
||||
frueh ausweichen muss, weicht deshalb manchmal weiter aus als
|
||||
noetig -- die Stelle, die ihm gepasst haette, wird erst zwei
|
||||
Schritte spaeter frei.
|
||||
|
||||
Gemessen war das kein Schoenheitsfehler: Ton 10 (#ff6877, ein
|
||||
Korallrot) landete beim ersten Lauf auf #a86cb4, einem Violett --
|
||||
0,178 entfernt, und niemand haette die Kachel wiedererkannt.
|
||||
|
||||
Also am Ende noch einmal von vorn: Jeder bewegte Ton darf so weit
|
||||
zu seiner alten Farbe zurueck, wie die Bedingungen es zulassen.
|
||||
Das aendert am Mindestabstand nichts -- es wird nur geprueft, ob
|
||||
es NAEHER geht. */
|
||||
for (let runde = 0; runde < 12; runde++) {
|
||||
let geruckt = false;
|
||||
for (const t of TOENE) {
|
||||
if (FEST.has(t.n) || t.hex === t.alt) continue;
|
||||
const jetzt = abst(t.alt, t.hex);
|
||||
const noetig = abstandFuer(t.n);
|
||||
let best = null, bestWeg = jetzt;
|
||||
for (const h of kandidatenFuer(t.n)) {
|
||||
const weg = abst(t.alt, h);
|
||||
if (weg >= bestWeg) continue;
|
||||
let ok = true;
|
||||
for (const u of TOENE) {
|
||||
if (u === t) continue;
|
||||
if (abst(h, u.hex) < Math.max(noetig, abstandFuer(u.n))) { ok = false; break; }
|
||||
}
|
||||
if (ok) { best = h; bestWeg = weg; }
|
||||
}
|
||||
if (best) {
|
||||
console.log(` nachgezogen: Ton ${t.n} ${t.hex} -> ${best} `
|
||||
+ `(${jetzt.toFixed(3)} -> ${bestWeg.toFixed(3)} vom alten Ton)`);
|
||||
t.hex = best; geruckt = true;
|
||||
}
|
||||
}
|
||||
if (!geruckt) break;
|
||||
}
|
||||
|
||||
/* ---------- Nachmessen ------------------------------------------------ */
|
||||
let klein = Infinity, wo = null, unterSoll = 0;
|
||||
for (let i = 0; i < TOENE.length; i++) {
|
||||
for (let j = i + 1; j < TOENE.length; j++) {
|
||||
const d = abst(TOENE[i].hex, TOENE[j].hex);
|
||||
const noetig = Math.max(abstandFuer(TOENE[i].n), abstandFuer(TOENE[j].n));
|
||||
if (d < noetig) unterSoll++;
|
||||
if (d < klein) { klein = d; wo = [TOENE[i], TOENE[j]]; }
|
||||
}
|
||||
}
|
||||
const geaendert = TOENE.filter((t) => t.hex !== t.alt);
|
||||
const zuBlass = TOENE.filter((t) => BENUTZT.has(t.n)
|
||||
&& bunt(t.hex) < MINDEST_BUNTHEIT && !BLASS_ERLAUBT.has(t.n));
|
||||
const zuDunkel = TOENE.filter((t) => kontrast(t.hex) < MINDEST_KONTRAST);
|
||||
const doppelt = TOENE.length - new Set(TOENE.map((t) => t.hex)).size;
|
||||
|
||||
console.log("");
|
||||
console.log(`geaendert ${geaendert.length} von ${TOENE.length}`);
|
||||
for (const t of geaendert) {
|
||||
console.log(` Ton ${String(t.n).padStart(2)} ${t.alt} -> ${t.hex} `
|
||||
+ `verschoben ${abst(t.alt, t.hex).toFixed(3)} Buntheit ${bunt(t.hex).toFixed(3)} `
|
||||
+ `Kontrast ${kontrast(t.hex).toFixed(2)}:1`);
|
||||
}
|
||||
console.log(`kleinster Abstand ${klein.toFixed(4)} (Ton ${wo[0].n} ${wo[0].hex} / Ton ${wo[1].n} ${wo[1].hex})`);
|
||||
console.log(`unter dem Soll ${unterSoll}`);
|
||||
console.log(`zu blass ${zuBlass.map((t) => `Ton ${t.n} ${bunt(t.hex).toFixed(3)}`).join(", ") || "keiner"}`);
|
||||
console.log(`zu dunkel ${zuDunkel.map((t) => `Ton ${t.n}`).join(", ") || "keiner"}`);
|
||||
console.log(`doppelt ${doppelt}`);
|
||||
for (const [n, h] of FEST) {
|
||||
const t = TOENE.find((x) => x.n === n);
|
||||
console.log(`festgelegt Ton ${n} ${t.hex} ${t.hex === h ? "(unveraendert)" : "*** ABWEICHUNG ***"}`);
|
||||
}
|
||||
|
||||
if (process.argv[2] === "schreiben") {
|
||||
if (unterSoll || zuBlass.length || zuDunkel.length || doppelt
|
||||
|| [...FEST].some(([n, h]) => TOENE.find((x) => x.n === n).hex !== h)) {
|
||||
console.error("\nNICHT geschrieben -- das Ergebnis haelt die Bedingungen nicht.");
|
||||
process.exit(1);
|
||||
}
|
||||
let neu = css;
|
||||
for (const t of TOENE) {
|
||||
const muster = new RegExp(`(\\[data-ton="${t.n}"\\]\\s*\\{\\s*--ton:\\s*)#[0-9a-fA-F]{6}`);
|
||||
if (!muster.test(neu)) { console.error(`Ton ${t.n} nicht wiedergefunden`); process.exit(2); }
|
||||
neu = neu.replace(muster, `$1${t.hex}`);
|
||||
}
|
||||
writeFileSync(DATEI, neu);
|
||||
console.log("\nstart.css geschrieben.");
|
||||
}
|
||||
@@ -49,3 +49,65 @@ export const HOECHST_BUNTHEIT = 0.30;
|
||||
|
||||
/* Nicht verhandelbar: Eine Kachelfarbe trägt auch Text und Zahlen. */
|
||||
export const MINDEST_KONTRAST = 4.5;
|
||||
|
||||
/* =====================================================================
|
||||
WAS FESTGELEGT IST -- und warum (hierher geholt am 25.09.2026)
|
||||
|
||||
Diese Liste stand in server/pruef-kachelfarben.mjs. Dort konnte sie
|
||||
nur EINES: eine Abweichung melden, nachdem sie passiert ist.
|
||||
|
||||
Genau das ist am 25.09. passiert. Eine Rechnung hat die 45
|
||||
Kachelfarben neu verteilt, um acht fast gleiche Paare zu trennen --
|
||||
und dabei zwei ausdrueckliche Wuensche ueberfahren, weil sie sie
|
||||
nicht kannte:
|
||||
|
||||
Ton 38 #ff1a1a „nur die soll knall rot sein!!!" -> #ff241e
|
||||
Ton 44 #a8d8ff „soll auch babyblau sein" -> #90c3ff
|
||||
|
||||
Die Pruefung hat beides gefunden, und das ist ihr Verdienst. Aber
|
||||
eine Bedingung, die erst NACH dem Schaden spricht, ist die
|
||||
schwaechere Form: Wer die Farben rechnet, soll gar nicht erst die
|
||||
Moeglichkeit haben, sie zu verschieben.
|
||||
|
||||
Deshalb steht sie jetzt hier, neben den Schwellen -- und beide
|
||||
Seiten lesen sie von hier: die Pruefung, um zu melden, und das
|
||||
Rechenwerkzeug, um sie festzuhalten.
|
||||
===================================================================== */
|
||||
export /* Was festgelegt ist — mit dem Grund, aus dem es festgelegt wurde. */
|
||||
const FESTGELEGT = [
|
||||
/* BERICHTIGT AM 22.09.2026. Ich hatte screen5 und screen6 vertauscht
|
||||
und das Rot auf "Draussen" gelegt. Filipe: "nicht die kachel
|
||||
draussen soll rot sein sondern die kachel vertraulich melden nur
|
||||
die soll knall rot sein!!!" */
|
||||
{ ton: 38, kachel: "Vertraulich melden", hex: "#ff1a1a",
|
||||
warum: "knalliges Rot -- wer den vertraulichen Weg sucht, soll ihn finden, ohne zu lesen" },
|
||||
{ ton: 39, kachel: "Draußen",
|
||||
warum: "die Farbe, die Regeln & Hilfe hatte -- ausdruecklicher Wunsch (screen5)" },
|
||||
/* BABYBLAU IST PER DEFINITION BLASS (25.09.2026).
|
||||
|
||||
Filipe: „die hauptfarbe der kachel soll auch babyblau sein mit
|
||||
bissl lila."
|
||||
|
||||
Diese Farbe haelt die Buntheitsgrenze von 0,12 NICHT (sie liegt
|
||||
bei 0,074) -- und kann sie nicht halten, das liegt am Wort.
|
||||
Nachgemessen mit `node tools/_babyblau-suchen.mjs`: Unter allen
|
||||
Blautoenen im Umkreis des Wunsches gibt es KEINEN, der gleichzeitig
|
||||
Buntheit >= 0,12 und Abstand >= 0,09 schafft -- der beste kommt
|
||||
auf 0,075 Abstand. Der Blaubereich ist von den Toenen 15, 23, 26,
|
||||
31, 41 und 43 besetzt.
|
||||
|
||||
DIE GRENZE WIRD DESHALB NICHT GESENKT, sondern hier BENANNT
|
||||
ausgenommen. Eine gesenkte Grenze gaelte fuer alle 45 Toene und
|
||||
liesse ab morgen jede blasse Farbe durch; eine benannte Ausnahme
|
||||
gilt fuer genau diese eine und steht mit ihrem Grund da.
|
||||
|
||||
UND SIE IST NICHT GRATIS: Wer blass sein darf, muss dafuer beim
|
||||
ABSTAND ueberdurchschnittlich sein -- das ist der Zweck, den die
|
||||
Buntheitsregel nur stellvertretend misst. Gemessen 0,1125 zur
|
||||
naechsten Farbe (Ton 15), das 7,3-Fache des engsten Paares, das im
|
||||
Haus ohnehin steht. Die Bedingung dazu steht unten bei der
|
||||
Pruefung und ist echt: Faellt der Abstand unter 0,10, wird diese
|
||||
Zeile rot. */
|
||||
{ ton: 44, kachel: "Support", hex: "#a8d8ff", blassErlaubt: 0.10,
|
||||
warum: "Babyblau auf Wunsch -- blass, dafuer mit gemessenem Sicherheitsabstand" },
|
||||
];
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
/* =====================================================================
|
||||
DIE NOTIZ FÜR DEN PRÜFSTAND (ausgelagert am 25.09.2026)
|
||||
|
||||
Stand vorher mitten in `nachtlauf.mjs`. Ausgelagert, damit sie
|
||||
PRÜFBAR wird: `nachtlauf.mjs` startet beim Import sofort einen
|
||||
Lauf über alle Prüfdateien -- wer die Notiz messen wollte, hätte
|
||||
dafür eine halbe Stunde Rechenzeit ausgelöst und nebenbei das
|
||||
echte Ergebnis auf Filipes Startseite überschrieben.
|
||||
|
||||
Hier drin steht nur Textbau, kein Nebeneffekt. Importieren ist
|
||||
folgenlos. Geprüft von `server/pruef-nachtlauf.mjs`.
|
||||
===================================================================== */
|
||||
import { readFileSync } from "node:fs";
|
||||
|
||||
const zweiZiffern = (n) => String(n).padStart(2, "0");
|
||||
function zeitWort(d = new Date()) {
|
||||
return `${zweiZiffern(d.getDate())}.${zweiZiffern(d.getMonth() + 1)}.${d.getFullYear()}`
|
||||
+ ` um ${zweiZiffern(d.getHours())}:${zweiZiffern(d.getMinutes())}`;
|
||||
}
|
||||
|
||||
export { zeitWort };
|
||||
|
||||
/* =====================================================================
|
||||
EIN STÜCK DER NOTIZ GEHÖRT DEM MENSCHEN (25.09.2026)
|
||||
|
||||
Bis heute stand oben in der Notiz: "von Hand ändern bringt nichts,
|
||||
beim nächsten Lauf ist es wieder überschrieben." Das war ehrlich
|
||||
und trotzdem falsch herum gedacht.
|
||||
|
||||
Denn das Wertvollste an diesem Prüfstand ist gerade NICHT die
|
||||
Zahl, sondern der Satz daneben: "Diese Prüfung ist rot, weil sie
|
||||
den Umbau vom 24.09. nicht mitbekommen hat" oder "die hier ist
|
||||
echt, Finger weg". Wer das aufschreiben will, schreibt es genau
|
||||
hierhin -- und fand es am nächsten Morgen gelöscht.
|
||||
|
||||
Deshalb gibt es jetzt einen Bereich zwischen zwei Marken, den der
|
||||
Lauf beim Schreiben WIEDER EINSETZT statt ihn zu überschreiben.
|
||||
Fehlt er (neue Notiz, jemand hat ihn gelöscht), wird er leer neu
|
||||
angelegt -- mit der Erklärung drin, wozu er da ist.
|
||||
===================================================================== */
|
||||
export const MARKE_AUF = "<!-- VON HAND — dieser Teil bleibt stehen -->";
|
||||
export const MARKE_ZU = "<!-- ENDE VON HAND -->";
|
||||
|
||||
export function handNotizLesen(NOTIZ) {
|
||||
let alt = "";
|
||||
try { alt = readFileSync(NOTIZ, "utf8"); } catch { return null; }
|
||||
const a = alt.indexOf(MARKE_AUF);
|
||||
const b = alt.indexOf(MARKE_ZU, a + 1);
|
||||
if (a < 0 || b < 0) return null;
|
||||
const drin = alt.slice(a + MARKE_AUF.length, b).trim();
|
||||
return drin.length ? drin : null;
|
||||
}
|
||||
|
||||
export function notizSchreiben({ lage, vorher, minuten, konnteNicht }, notizPfad) {
|
||||
const jetzt = new Date();
|
||||
const hand = handNotizLesen(notizPfad);
|
||||
const zeilen = [];
|
||||
zeilen.push("# Prüfstand Team Dogi");
|
||||
zeilen.push("");
|
||||
zeilen.push("*Diese Notiz schreibt `tools/nachtlauf.mjs`. Alles außerhalb des Blocks");
|
||||
zeilen.push("„VON HAND“ ist beim nächsten Lauf wieder überschrieben — was DRIN steht,");
|
||||
zeilen.push("bleibt stehen.*");
|
||||
zeilen.push("");
|
||||
zeilen.push(MARKE_AUF);
|
||||
if (hand) {
|
||||
zeilen.push(hand);
|
||||
} else {
|
||||
zeilen.push("## Von Hand");
|
||||
zeilen.push("");
|
||||
zeilen.push("*Hier hinein gehört, was die Zahlen nicht sagen können: welche rote");
|
||||
zeilen.push("Zeile schon untersucht ist, welche echt ist, woran gerade gearbeitet");
|
||||
zeilen.push("wird. Dieser Block überlebt jeden Lauf — der Rest der Notiz nicht.*");
|
||||
}
|
||||
zeilen.push(MARKE_ZU);
|
||||
zeilen.push("");
|
||||
|
||||
if (konnteNicht) {
|
||||
zeilen.push("## ⚠ Konnte nicht nachsehen");
|
||||
zeilen.push("");
|
||||
zeilen.push(konnteNicht);
|
||||
zeilen.push("");
|
||||
if (vorher?.wann) {
|
||||
const tage = Math.floor((Date.now() - vorher.zeit) / 86400000);
|
||||
zeilen.push(`Zuletzt wirklich gemessen: **${vorher.wann}**`
|
||||
+ (tage >= 1 ? ` — das ist **${tage} Tag${tage === 1 ? "" : "e"} her**.` : "."));
|
||||
} else {
|
||||
zeilen.push("Es gibt noch kein früheres Ergebnis.");
|
||||
}
|
||||
return zeilen.join("\n") + "\n";
|
||||
}
|
||||
|
||||
const rot = lage.rote.length;
|
||||
zeilen.push(rot
|
||||
? `## ${rot} Prüfung${rot === 1 ? "" : "en"} ${rot === 1 ? "ist" : "sind"} rot`
|
||||
: "## Alles in Ordnung");
|
||||
zeilen.push("");
|
||||
zeilen.push(`Gemessen am **${zeitWort(jetzt)}**, Dauer ${minuten} Minuten.`);
|
||||
zeilen.push("");
|
||||
zeilen.push("| | jetzt | vorher |");
|
||||
zeilen.push("|---|---|---|");
|
||||
zeilen.push(`| Dateien in Ordnung | ${lage.dateienOk} von ${lage.dateien} | `
|
||||
+ `${vorher ? `${vorher.dateienOk} von ${vorher.dateien}` : "—"} |`);
|
||||
zeilen.push(`| Einzelprüfungen bestanden | ${lage.punkteOk} von ${lage.punkte} | `
|
||||
+ `${vorher ? `${vorher.punkteOk} von ${vorher.punkte}` : "—"} |`);
|
||||
zeilen.push("");
|
||||
|
||||
/* EIN RÜCKGANG DER ANZAHL IST EIN BEFUND, AUCH WENN ALLES GRÜN IST.
|
||||
Am 28.08.2026 meldete ein Lauf 789 statt 804 Prüfungen und war
|
||||
dabei grün: Acht Prüfungen je Gerät waren stillschweigend
|
||||
weggefallen -- ausgerechnet die, die die wichtigste Funktion
|
||||
absichern. Wer nur "bestanden" liest, hätte sie ab da dauerhaft
|
||||
ungeprüft gelassen. */
|
||||
if (vorher && lage.punkte != null && vorher.punkte != null
|
||||
&& lage.punkte < vorher.punkte) {
|
||||
zeilen.push(`> **Es werden ${vorher.punkte - lage.punkte} Prüfungen WENIGER gemacht als beim letzten Lauf.**`);
|
||||
zeilen.push("> Das ist auch dann ein Befund, wenn alles grün ist: Eine Prüfung, die");
|
||||
zeilen.push("> still nicht mehr läuft, beweist nichts — und niemandem fällt es auf.");
|
||||
zeilen.push("");
|
||||
}
|
||||
if (vorher && lage.dateien != null && vorher.dateien != null
|
||||
&& lage.dateien < vorher.dateien) {
|
||||
zeilen.push(`> **Es gibt ${vorher.dateien - lage.dateien} Prüfdatei(en) weniger als beim letzten Lauf.**`);
|
||||
zeilen.push("");
|
||||
}
|
||||
|
||||
if (rot) {
|
||||
zeilen.push("## Was rot ist");
|
||||
zeilen.push("");
|
||||
for (const r of lage.rote) {
|
||||
zeilen.push(`### \`${r.datei}\``);
|
||||
zeilen.push("");
|
||||
if (r.nullPunkte) {
|
||||
zeilen.push(`**Kein Befund – es wurde keine einzige Prüfung GEZÄHLT** `
|
||||
+ `(Exitcode ${r.code}).` );
|
||||
zeilen.push("");
|
||||
zeilen.push("Das ist etwas anderes als „kaputt“: Die Datei ist "
|
||||
+ "durchgelaufen. Der Zähler hat ihre Punkte nur nicht erkannt – "
|
||||
+ "meist, weil sie ihre Ergebnisse anders schreibt als erwartet "
|
||||
+ "(` OK ` statt ` ok `, andere Einrückung, eigenes Format). "
|
||||
+ "Nachsehen lohnt trotzdem: Eine Datei, deren Punkte niemand "
|
||||
+ "zählt, kann still aufhören zu prüfen, ohne dass es auffällt. "
|
||||
+ "Zuletzt stand da:");
|
||||
zeilen.push("");
|
||||
} else if (r.ohneGrund) {
|
||||
zeilen.push(`**Konnte nicht sagen, woran es lag** (Exitcode ${r.code}). `
|
||||
+ "Das ist etwas anderes als ein Befund: Die Prüfung ist nicht "
|
||||
+ "durchgelaufen, hat aber auch keine FEHL-Zeile hinterlassen. "
|
||||
+ "Meist steckt dahinter eine Zeitüberschreitung oder ein Absturz "
|
||||
+ "im Vorlauf, kein Fehler im Programm. Zuletzt stand da:");
|
||||
zeilen.push("");
|
||||
}
|
||||
zeilen.push(`\`\`\`\n${r.erste}\n\`\`\``);
|
||||
zeilen.push("");
|
||||
zeilen.push(`Einzeln nachsehen: \`node server/${r.datei}\``);
|
||||
zeilen.push("");
|
||||
}
|
||||
zeilen.push("**Rot heißt nicht automatisch kaputt.** Dreimal am 23.09.2026 war");
|
||||
zeilen.push("die Prüfung veraltet und das Programm richtig — einmal war es");
|
||||
zeilen.push("umgekehrt und ein Rollenname stand offen im Netz. Erst nachsehen,");
|
||||
zeilen.push("dann entscheiden, wer recht hat.");
|
||||
} else {
|
||||
zeilen.push("Keine Datei ist rot. Der nächste Lauf kommt in der nächsten Nacht.");
|
||||
}
|
||||
zeilen.push("");
|
||||
return zeilen.join("\n") + "\n";
|
||||
}
|
||||
+7
-108
@@ -71,6 +71,7 @@ import {
|
||||
} from "node:fs";
|
||||
import { join, dirname } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { notizSchreiben, zeitWort } from "./nachtlauf-notiz.mjs";
|
||||
|
||||
const HIER = dirname(fileURLToPath(import.meta.url));
|
||||
const WURZEL = join(HIER, "..");
|
||||
@@ -94,11 +95,8 @@ const SCHLOSS = join(WURZEL, "tools", ".nachtlauf-laeuft");
|
||||
was blockiert, wird abgeschafft. */
|
||||
const SCHLOSS_FRIST_MS = 3 * 60 * 60 * 1000;
|
||||
|
||||
const zweiZiffern = (n) => String(n).padStart(2, "0");
|
||||
function zeitWort(d = new Date()) {
|
||||
return `${zweiZiffern(d.getDate())}.${zweiZiffern(d.getMonth() + 1)}.${d.getFullYear()}`
|
||||
+ ` um ${zweiZiffern(d.getHours())}:${zweiZiffern(d.getMinutes())}`;
|
||||
}
|
||||
/* `zeitWort` kommt aus nachtlauf-notiz.mjs -- zwei Kopien derselben
|
||||
Datumsschreibweise waeren zwei Staende, die auseinanderlaufen. */
|
||||
|
||||
function schlossNehmen() {
|
||||
if (existsSync(SCHLOSS)) {
|
||||
@@ -216,105 +214,6 @@ function auswerten(aus) {
|
||||
/* ---------------------------------------------------------------------
|
||||
Die Notiz
|
||||
--------------------------------------------------------------------- */
|
||||
function notizSchreiben({ lage, vorher, minuten, konnteNicht }) {
|
||||
const jetzt = new Date();
|
||||
const zeilen = [];
|
||||
zeilen.push("# Prüfstand Team Dogi");
|
||||
zeilen.push("");
|
||||
zeilen.push("*Diese Notiz schreibt `tools/nachtlauf.mjs` — von Hand ändern bringt nichts,");
|
||||
zeilen.push("beim nächsten Lauf ist es wieder überschrieben.*");
|
||||
zeilen.push("");
|
||||
|
||||
if (konnteNicht) {
|
||||
zeilen.push("## ⚠ Konnte nicht nachsehen");
|
||||
zeilen.push("");
|
||||
zeilen.push(konnteNicht);
|
||||
zeilen.push("");
|
||||
if (vorher?.wann) {
|
||||
const tage = Math.floor((Date.now() - vorher.zeit) / 86400000);
|
||||
zeilen.push(`Zuletzt wirklich gemessen: **${vorher.wann}**`
|
||||
+ (tage >= 1 ? ` — das ist **${tage} Tag${tage === 1 ? "" : "e"} her**.` : "."));
|
||||
} else {
|
||||
zeilen.push("Es gibt noch kein früheres Ergebnis.");
|
||||
}
|
||||
return zeilen.join("\n") + "\n";
|
||||
}
|
||||
|
||||
const rot = lage.rote.length;
|
||||
zeilen.push(rot
|
||||
? `## ${rot} Prüfung${rot === 1 ? "" : "en"} ${rot === 1 ? "ist" : "sind"} rot`
|
||||
: "## Alles in Ordnung");
|
||||
zeilen.push("");
|
||||
zeilen.push(`Gemessen am **${zeitWort(jetzt)}**, Dauer ${minuten} Minuten.`);
|
||||
zeilen.push("");
|
||||
zeilen.push("| | jetzt | vorher |");
|
||||
zeilen.push("|---|---|---|");
|
||||
zeilen.push(`| Dateien in Ordnung | ${lage.dateienOk} von ${lage.dateien} | `
|
||||
+ `${vorher ? `${vorher.dateienOk} von ${vorher.dateien}` : "—"} |`);
|
||||
zeilen.push(`| Einzelprüfungen bestanden | ${lage.punkteOk} von ${lage.punkte} | `
|
||||
+ `${vorher ? `${vorher.punkteOk} von ${vorher.punkte}` : "—"} |`);
|
||||
zeilen.push("");
|
||||
|
||||
/* EIN RÜCKGANG DER ANZAHL IST EIN BEFUND, AUCH WENN ALLES GRÜN IST.
|
||||
Am 28.08.2026 meldete ein Lauf 789 statt 804 Prüfungen und war
|
||||
dabei grün: Acht Prüfungen je Gerät waren stillschweigend
|
||||
weggefallen -- ausgerechnet die, die die wichtigste Funktion
|
||||
absichern. Wer nur "bestanden" liest, hätte sie ab da dauerhaft
|
||||
ungeprüft gelassen. */
|
||||
if (vorher && lage.punkte != null && vorher.punkte != null
|
||||
&& lage.punkte < vorher.punkte) {
|
||||
zeilen.push(`> **Es werden ${vorher.punkte - lage.punkte} Prüfungen WENIGER gemacht als beim letzten Lauf.**`);
|
||||
zeilen.push("> Das ist auch dann ein Befund, wenn alles grün ist: Eine Prüfung, die");
|
||||
zeilen.push("> still nicht mehr läuft, beweist nichts — und niemandem fällt es auf.");
|
||||
zeilen.push("");
|
||||
}
|
||||
if (vorher && lage.dateien != null && vorher.dateien != null
|
||||
&& lage.dateien < vorher.dateien) {
|
||||
zeilen.push(`> **Es gibt ${vorher.dateien - lage.dateien} Prüfdatei(en) weniger als beim letzten Lauf.**`);
|
||||
zeilen.push("");
|
||||
}
|
||||
|
||||
if (rot) {
|
||||
zeilen.push("## Was rot ist");
|
||||
zeilen.push("");
|
||||
for (const r of lage.rote) {
|
||||
zeilen.push(`### \`${r.datei}\``);
|
||||
zeilen.push("");
|
||||
if (r.nullPunkte) {
|
||||
zeilen.push(`**Kein Befund – es wurde keine einzige Prüfung GEZÄHLT** `
|
||||
+ `(Exitcode ${r.code}).` );
|
||||
zeilen.push("");
|
||||
zeilen.push("Das ist etwas anderes als „kaputt“: Die Datei ist "
|
||||
+ "durchgelaufen. Der Zähler hat ihre Punkte nur nicht erkannt – "
|
||||
+ "meist, weil sie ihre Ergebnisse anders schreibt als erwartet "
|
||||
+ "(` OK ` statt ` ok `, andere Einrückung, eigenes Format). "
|
||||
+ "Nachsehen lohnt trotzdem: Eine Datei, deren Punkte niemand "
|
||||
+ "zählt, kann still aufhören zu prüfen, ohne dass es auffällt. "
|
||||
+ "Zuletzt stand da:");
|
||||
zeilen.push("");
|
||||
} else if (r.ohneGrund) {
|
||||
zeilen.push(`**Konnte nicht sagen, woran es lag** (Exitcode ${r.code}). `
|
||||
+ "Das ist etwas anderes als ein Befund: Die Prüfung ist nicht "
|
||||
+ "durchgelaufen, hat aber auch keine FEHL-Zeile hinterlassen. "
|
||||
+ "Meist steckt dahinter eine Zeitüberschreitung oder ein Absturz "
|
||||
+ "im Vorlauf, kein Fehler im Programm. Zuletzt stand da:");
|
||||
zeilen.push("");
|
||||
}
|
||||
zeilen.push(`\`\`\`\n${r.erste}\n\`\`\``);
|
||||
zeilen.push("");
|
||||
zeilen.push(`Einzeln nachsehen: \`node server/${r.datei}\``);
|
||||
zeilen.push("");
|
||||
}
|
||||
zeilen.push("**Rot heißt nicht automatisch kaputt.** Dreimal am 23.09.2026 war");
|
||||
zeilen.push("die Prüfung veraltet und das Programm richtig — einmal war es");
|
||||
zeilen.push("umgekehrt und ein Rollenname stand offen im Netz. Erst nachsehen,");
|
||||
zeilen.push("dann entscheiden, wer recht hat.");
|
||||
} else {
|
||||
zeilen.push("Keine Datei ist rot. Der nächste Lauf kommt in der nächsten Nacht.");
|
||||
}
|
||||
zeilen.push("");
|
||||
return zeilen.join("\n") + "\n";
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
Los
|
||||
@@ -326,7 +225,7 @@ const schloss = erzwingen ? { ok: true } : schlossNehmen();
|
||||
if (!schloss.ok) {
|
||||
/* DER DRITTE AUSGANG. Kein Fehler -- nur: hier war nichts zu messen. */
|
||||
mkdirSync(dirname(NOTIZ), { recursive: true });
|
||||
writeFileSync(NOTIZ, notizSchreiben({ vorher, konnteNicht: schloss.grund }), "utf8");
|
||||
writeFileSync(NOTIZ, notizSchreiben({ vorher, konnteNicht: schloss.grund }, NOTIZ), "utf8");
|
||||
console.log("Konnte nicht nachsehen: " + schloss.grund);
|
||||
process.exit(0);
|
||||
}
|
||||
@@ -343,7 +242,7 @@ if (!ergebnis.ging) {
|
||||
mkdirSync(dirname(NOTIZ), { recursive: true });
|
||||
writeFileSync(NOTIZ, notizSchreiben({
|
||||
vorher, konnteNicht: `Der Läufer ließ sich nicht starten: ${ergebnis.grund}`,
|
||||
}), "utf8");
|
||||
}, NOTIZ), "utf8");
|
||||
console.log("Konnte nicht nachsehen: " + ergebnis.grund);
|
||||
process.exit(0);
|
||||
}
|
||||
@@ -360,13 +259,13 @@ if (lage.dateien == null || lage.punkte == null || lage.punkte === 0) {
|
||||
konnteNicht: "Der Lauf hat keine einzige Zahl geliefert — vermutlich ist er"
|
||||
+ " abgebrochen, bevor er anfangen konnte.\n\nLetzte Ausgabe:\n\n```\n"
|
||||
+ ergebnis.aus.slice(-700) + "\n```",
|
||||
}), "utf8");
|
||||
}, NOTIZ), "utf8");
|
||||
console.log("Konnte nicht nachsehen: keine Zahlen in der Ausgabe.");
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
mkdirSync(dirname(NOTIZ), { recursive: true });
|
||||
writeFileSync(NOTIZ, notizSchreiben({ lage, vorher, minuten: ergebnis.minuten }), "utf8");
|
||||
writeFileSync(NOTIZ, notizSchreiben({ lage, vorher, minuten: ergebnis.minuten }, NOTIZ), "utf8");
|
||||
|
||||
/* Der Stand für den nächsten Vergleich -- erst NACH der Notiz, damit
|
||||
ein Absturz beim Schreiben nicht den alten Vergleichswert wegnimmt. */
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
verdeckt. Gefunden hat es pruef-struktur.
|
||||
|
||||
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
<!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als
|
||||
Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet
|
||||
ausserhalb der App -- auf einer Seite, die genau erklaeren soll,
|
||||
@@ -33,7 +33,7 @@
|
||||
schreibt jede Seite app.webmanifest -- auch die hier. -->
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<style>
|
||||
/* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite
|
||||
soll auch dann noch etwas anzeigen, wenn genau das schiefgeht,
|
||||
@@ -135,7 +135,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/anruf-probe.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/anruf-probe.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,25 +23,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609251440",
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609252349",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609251440",
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609252349",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609251440",
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609252349",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609251440",
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609252349",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
@@ -78,8 +78,28 @@
|
||||
Grenze -- diese Werte liegen darueber und werden am fertigen
|
||||
Bildschirmfoto nachgemessen, nicht an der Farbangabe. */
|
||||
--text: #e4e0f4;
|
||||
--text-leise: #a9a2ca;
|
||||
--text-still: #8f88b2;
|
||||
/* 25.09.2026 angehoben: --text-leise von #a9a2ca auf #b4aed6,
|
||||
--text-still von #8f88b2 auf #a7a0cb. Gleichzeitig mit den
|
||||
Grautoenen im Gatehaus und aus demselben Grund.
|
||||
|
||||
Gefunden wurde der Mangel drueben (entwicklung.html, 4,42:1), aber
|
||||
nachgerechnet gilt er hier genauso: Gegen die hellste Flaeche des
|
||||
Hauses -- rgb(51,53,56) auf hilfe.html -- stand der stille Ton bei
|
||||
4,10:1 und der leise bei 5,10:1. Der erste war also UNTER der
|
||||
Grenze. Dass ihn keine Pruefung gemeldet hat, heisst nur, dass
|
||||
noch keine Crew-Seite mit dieser Flaeche angesehen wurde -- nicht,
|
||||
dass er in Ordnung war.
|
||||
|
||||
Die Lehre aus drei Anlaeufen in vier Wochen: Wer die leiseste
|
||||
Schrift auf „gerade eben 4,5“ stellt, stellt sie auf den naechsten
|
||||
Fehlschlag. Gemessen wird deshalb ab jetzt gegen die hellste
|
||||
Flaeche im HAUS, nicht gegen die der Seite, die gerade rot war.
|
||||
|
||||
Jetzt: still 5,00:1 gegen die hellste Flaeche und 7,90:1 gegen
|
||||
reine Tinte, leise 5,84:1 und 9,22:1. Der Abstand zum Haupttext
|
||||
(#e4e0f4) bleibt gross -- der steht bei 11,3:1. */
|
||||
--text-leise: #b4aed6;
|
||||
--text-still: #a7a0cb;
|
||||
|
||||
/* ---- Die Mischung ------------------------------------------------
|
||||
`--akzent` ist das Babyblau: Es traegt Knoepfe, Umrandungen und
|
||||
|
||||
@@ -34,7 +34,15 @@
|
||||
--rand-hell: rgba(150, 186, 220, 0.30);
|
||||
|
||||
--text: #dbe4ef; /* kein reines Weiss - schont die Augen */
|
||||
--text-leise: #94a5bb;
|
||||
/* 25.09.2026 von #94a5bb auf #9fb0c6.
|
||||
|
||||
Gemessen an echten Bildpunkten stand dieser Ton auf hilfe.html bei
|
||||
4,90:1 und auf teamlage.html bei 4,98:1 -- ueber der Grenze, aber
|
||||
mit weniger Luft, als die beiden letzten Rutscher gross waren
|
||||
(jeweils rund zehn Prozent). Er waere also beim naechsten helleren
|
||||
Untergrund derselbe Fall gewesen wie der Ton darunter, nur ein
|
||||
paar Wochen spaeter. */
|
||||
--text-leise: #9fb0c6;
|
||||
/* Von #6d7d92 auf #75859a angehoben (01.09.2026).
|
||||
Aufgefallen erst, als die Buehne im Hintergrund dazukam und der
|
||||
Kontrast an echten BILDPUNKTEN gemessen wurde statt an der
|
||||
@@ -56,7 +64,43 @@
|
||||
Wer den Hintergrund heller macht, muss die leiseste Schrift
|
||||
nachziehen. Die Alternative waere gewesen, das Bild wieder
|
||||
zuzudecken -- dann haette man den Aufwand auch lassen koennen. */
|
||||
--text-still: #7f8fa6;
|
||||
|
||||
/* 25.09.2026: #7f8fa6 -> #95a4ba. DAS DRITTE MAL DERSELBE GRIFF --
|
||||
und deshalb diesmal nicht wieder auf Kante.
|
||||
|
||||
Die drei Staende nebeneinander, alle an echten Bildpunkten
|
||||
gemessen, alle vom selben Werkzeug (pruef-buehne):
|
||||
|
||||
01.09. #6d7d92 -> #75859a gemessen 4,43 -> 4,95
|
||||
07.09. #75859a -> #7f8fa6 gemessen 4,50 -> rund 4,9
|
||||
25.09. #7f8fa6 -> #95a4ba gemessen 4,42 -> 5,75
|
||||
|
||||
Zweimal wurde auf „gerade eben ueber 4,5" eingestellt, und
|
||||
zweimal hat der naechste hellere Untergrund es wieder
|
||||
unterschritten. Der Fehler war nie die Farbe, sondern die
|
||||
Bezugsgroesse: Gemessen wurde jedes Mal gegen den hellsten
|
||||
Untergrund, den man GERADE KANNTE. Der Hintergrund ist aber ein
|
||||
Bild, und Bilder haben helle Stellen an wechselnden Orten -- wer
|
||||
dagegen auf zwei Kommastellen einstellt, stellt auf den naechsten
|
||||
Fehlschlag ein.
|
||||
|
||||
DIESMAL IST DER BEZUG DIE HELLSTE FLAECHE IM GANZEN HAUS:
|
||||
rgb(51,53,56) auf hilfe.html, gefunden, indem die Werte ALLER
|
||||
vierzehn Seiten nebeneinandergelegt wurden statt nur die der
|
||||
einen, die rot war. Gegen sie haelt der neue Ton 4,86:1, gegen
|
||||
reine Tinte 7,68:1, an der Stelle des Befundes 5,75:1.
|
||||
|
||||
Leiser als der Haupttext bleibt er deutlich -- der steht bei
|
||||
11,8:1, also mehr als doppelt so hoch.
|
||||
|
||||
Und damit es nicht ein viertes Mal so weit kommt, prueft
|
||||
pruef-buehne jetzt nicht mehr nur „ueber 4,5", sondern auch, ob
|
||||
der schlechteste Wert einer Seite noch 5,0 erreicht. Die Zahl ist
|
||||
gemessen und nicht gewaehlt: Beide Rutscher oben waren rund elf
|
||||
Prozent gross, und 4,5 mal 1,11 ist 5,0. Eine Seite, die darunter
|
||||
liegt, ist noch in Ordnung und schon in Gefahr -- genau das soll
|
||||
sie sagen. */
|
||||
--text-still: #95a4ba;
|
||||
|
||||
--akzent: #3fbdf5; /* aus dem Neon des Motivs, entsättigt */
|
||||
--akzent-tief: #1f7fb0;
|
||||
|
||||
@@ -269,6 +269,73 @@
|
||||
transition: transform var(--tempo), filter var(--tempo);
|
||||
}
|
||||
|
||||
/* =====================================================================
|
||||
WER MIT DER TASTATUR BEDIENT, MUSS SEHEN, WO ER STEHT (25.09.2026)
|
||||
|
||||
Gefunden von pruef-barrierefrei-workspace auf wissen.html: Die
|
||||
Wissenskacheln zeigten beim Durchtabben KEINE Veraenderung --
|
||||
gemessen mit echten Tastendruecken, nicht mit focus().
|
||||
|
||||
Die Ursache ist ein Spezifitaets-Unfall, und sie betrifft nicht nur
|
||||
diese eine Seite:
|
||||
|
||||
wissen.css .kachel:focus-visible (0,2,0)
|
||||
module.css :is(... .gruppe[data-gruppe] ...) (0,2,0)
|
||||
|
||||
`:is()` uebernimmt die Spezifitaet seines STAERKSTEN Arguments.
|
||||
In der Modulliste steht `.gruppe[data-gruppe]` -- eine Klasse PLUS
|
||||
ein Attribut. Damit ist die ganze Liste (0,2,0) statt (0,1,0), und
|
||||
weil diese Datei zuletzt geladen wird, gewinnt sie bei
|
||||
Gleichstand. Der `box-shadow` des Fokusrings wurde also vom
|
||||
Faseschatten dieser Datei ueberschrieben -- auf JEDEM Modul, dessen
|
||||
Fokusregel nur aus einer Klasse und `:focus-visible` besteht.
|
||||
|
||||
NICHT GELOEST WIRD DAS, INDEM MAN DIE LISTE SCHWAECHER MACHT. Das
|
||||
war schon einmal so (`:where()`, Spezifitaet null) und hat einen
|
||||
Zwitter aus neuer Form und alter Kante ergeben -- der Absatz oben
|
||||
beschreibt es. Wer die Zahl senkt, verschiebt das Problem nur auf
|
||||
die naechste Regel.
|
||||
|
||||
GELOEST WIRD ES, INDEM DIE ANTWORT HIER STEHT. Ein Fokusring fuer
|
||||
die ganze Modulliste, in derselben Datei wie die Form, mit
|
||||
`:focus-visible` also eine Klasse staerker als die Grundregel. Er
|
||||
gilt damit fuer jedes Modul im Haus -- auch fuer die, die es noch
|
||||
nicht gibt, und auch dort, wo niemand an eine Fokusregel gedacht
|
||||
hat. Das ist der Unterschied zwischen einer Reparatur und einer
|
||||
Regel.
|
||||
|
||||
`outline-offset` ist NEGATIV, und das ist kein Geschmack:
|
||||
`clip-path` schneidet alles ab, was ausserhalb der Form liegt --
|
||||
ein Ring mit positivem Abstand waere unsichtbar. Nach innen
|
||||
gezeichnet liegt er drin und bleibt stehen. Gemessen mit
|
||||
server/mess-fokus.mjs.
|
||||
|
||||
`:focus-visible` und nicht `:focus`: Wer mit der Maus klickt, will
|
||||
keinen Rahmen sehen. Die Browser entscheiden das selbst, und sie
|
||||
entscheiden es richtig.
|
||||
|
||||
NOCH OFFEN, UND HIER NOTIERT, DAMIT ES NICHT VERLORENGEHT: Derselbe
|
||||
Gleichstand trifft auch HOVER-Regeln in frueher geladenen Dateien.
|
||||
`.ablage:hover` in dateien.css, `.call:hover` in calls.css,
|
||||
`.kk:hover` in scouting.css und `.fortschritt:hover` in
|
||||
uebersicht.css setzen alle `border-color` -- und die Grundregel
|
||||
oben setzt `border: 0`, gleich stark und spaeter im Ladeweg. Diese
|
||||
vier Regeln tun also vermutlich nichts.
|
||||
|
||||
NICHT MITREPARIERT, weil es kein Messgeraet dafuer gibt: Fokus
|
||||
laesst sich pruefen (pruef-barrierefrei-workspace tabbt und
|
||||
vergleicht), Hover nicht -- es gibt keine Pruefung, die sagen
|
||||
koennte, ob eine Aenderung dort etwas kaputt macht. Und die
|
||||
naheliegende Loesung (die Grundregel schwaecher machen, indem
|
||||
`.gruppe[data-gruppe]` aus der Liste in einen eigenen Selektor
|
||||
wandert) wuerde die Form von 45 Bauteilen auf 38 Seiten neu
|
||||
entscheiden. Das ohne Messgeraet zu tun, waere Raten mit viel
|
||||
Einsatz. */
|
||||
:is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl):focus-visible {
|
||||
outline: 2px solid var(--akzent);
|
||||
outline-offset: -4px;
|
||||
}
|
||||
|
||||
@media (max-width: 620px) {
|
||||
/* Dieselbe Form, kleiner -- keine zweite Gestaltung. */
|
||||
:root { --fase: 12px; }
|
||||
|
||||
@@ -888,8 +888,8 @@ body.start > main { position: relative; z-index: 1; }
|
||||
Unterschied), und jede Farbe haelt 4,5:1 gegen den dunklen Grund --
|
||||
sie traegt auch Text. Wer sie neu rechnet: Das Werkzeug bricht ab,
|
||||
wenn das Ergebnis schlechter waere als der alte Stand. */
|
||||
[data-ton="1"] { --ton: #0c86af; } /* Dashboard */
|
||||
[data-ton="2"] { --ton: #fe5e82; } /* Zahlen */
|
||||
[data-ton="1"] { --ton: #aa6c90; } /* Dashboard */
|
||||
[data-ton="2"] { --ton: #d050a4; } /* Zahlen */
|
||||
[data-ton="3"] { --ton: #18b803; } /* LIVE */
|
||||
[data-ton="4"] { --ton: #c16302; } /* Chat */
|
||||
/* TON 5 IST VON HAND GESETZT (09.09.2026, screen4).
|
||||
@@ -925,22 +925,22 @@ body.start > main { position: relative; z-index: 1; }
|
||||
gewünscht ("alle kacheln auf der ganzen website sollen sein wie auf
|
||||
der startseite"). Was sie heraushebt, ist die Farbe, nicht eine
|
||||
Sonderform. */
|
||||
[data-ton="5"] { --ton: #ff08d5; } /* Schutz & Regeln -- Wunsch: extrem auffällig */
|
||||
[data-ton="5"] { --ton: #fe04d8; } /* Schutz & Regeln -- Wunsch: extrem auffällig */
|
||||
[data-ton="6"] { --ton: #b699fe; } /* Community */
|
||||
[data-ton="7"] { --ton: #098f71; } /* Reports */
|
||||
[data-ton="8"] { --ton: #ab68ff; } /* Kalender */
|
||||
[data-ton="9"] { --ton: #e701c1; } /* Bibliothek */
|
||||
[data-ton="10"] { --ton: #ff6877; } /* Steckbrief */
|
||||
[data-ton="11"] { --ton: #db8908; } /* Personen */
|
||||
[data-ton="12"] { --ton: #0ce6a3; } /* Content */
|
||||
[data-ton="9"] { --ton: #ceae6e; } /* Bibliothek */
|
||||
[data-ton="10"] { --ton: #fe667e; } /* Steckbrief */
|
||||
[data-ton="11"] { --ton: #da8a06; } /* Personen */
|
||||
[data-ton="12"] { --ton: #7eca8c; } /* Content */
|
||||
[data-ton="13"] { --ton: #12b37e; } /* Aufgaben */
|
||||
[data-ton="14"] { --ton: #ffbd4a; } /* Technik */
|
||||
[data-ton="15"] { --ton: #01d7e3; } /* Calls */
|
||||
[data-ton="16"] { --ton: #19b2c2; } /* Start-Check */
|
||||
[data-ton="15"] { --ton: #9ce6bc; } /* Calls */
|
||||
[data-ton="16"] { --ton: #28aeba; } /* Start-Check */
|
||||
[data-ton="17"] { --ton: #cace02; } /* Agentur */
|
||||
[data-ton="18"] { --ton: #aa99ff; } /* Automationen */
|
||||
[data-ton="18"] { --ton: #9a86ca; } /* Automationen */
|
||||
[data-ton="19"] { --ton: #08eb9f; } /* Dateien */
|
||||
[data-ton="20"] { --ton: #ff8fb4; } /* Creator-Profile */
|
||||
[data-ton="20"] { --ton: #d48a92; } /* Creator-Profile */
|
||||
/* TON 21 IST VON HAND GESETZT (09.09.2026, screen6).
|
||||
|
||||
Filipe: "die farbe von dieser kategorie soll knall rot sein."
|
||||
@@ -958,7 +958,7 @@ body.start > main { position: relative; z-index: 1; }
|
||||
Kontrast auf dem dunklen Grund: 5,01:1 (noetig 4,5). Von sechs
|
||||
geprueften Rottoenen hat dieser den groessten Abstand UND genug
|
||||
Kontrast -- deshalb dieser und nicht der erstbeste. */
|
||||
[data-ton="21"] { --ton: #f80442; } /* Scout-Pipeline -- Wunsch: knallrot */
|
||||
[data-ton="21"] { --ton: #d6525e; } /* Scout-Pipeline -- Wunsch: knallrot */
|
||||
|
||||
/* TON 22 -- TEAM-LAGE (09.09.2026).
|
||||
|
||||
@@ -1133,7 +1133,7 @@ body.start > main { position: relative; z-index: 1; }
|
||||
statt die Schwelle stillschweigend zu senken. */
|
||||
[data-ton="39"] { --ton: #ff57ba; } /* Vertraulich melden */
|
||||
[data-ton="40"] { --ton: #ff9d82; } /* Entwicklung (die Auswertung) */
|
||||
[data-ton="41"] { --ton: #6d8cfe; } /* Treff-Chat */
|
||||
[data-ton="41"] { --ton: #6c8efe; } /* Treff-Chat */
|
||||
[data-ton="42"] { --ton: #918a01; } /* Material (Platzhalter, wird gerechnet) */
|
||||
[data-ton="43"] { --ton: #027afb; } /* Calls & Protokolle (gerechnet 22.09.2026) */
|
||||
/* GEWUENSCHT UND NACHGEMESSEN (25.09.2026)
|
||||
@@ -1178,7 +1178,7 @@ body.start > main { position: relative; z-index: 1; }
|
||||
(vorher hielt es eine zu blasse Farbe, weil ihr Abstand gut war).
|
||||
Wer diesen Ton spaeter aufhellen will, muss den Abstand neu rechnen
|
||||
-- nicht nach Gefuehl nachbessern. */
|
||||
[data-ton="45"] { --ton: #fd6401; } /* Unterstützen (gerechnet 24.09.2026) */
|
||||
[data-ton="45"] { --ton: #fe660e; } /* Unterstützen (gerechnet 24.09.2026) */
|
||||
/* WARUM ES KEINEN TON 46 GIBT (25.09.2026)
|
||||
|
||||
Die Tuer ins andere Haus trug bis heute Ton 40 -- dieselbe Nummer
|
||||
@@ -8565,13 +8565,13 @@ body.start .k-leiste .feldschild::after {
|
||||
radial-gradient(4.82px 4.82px at 21.3px 22.8px, color-mix(in srgb, #07fff1 88%, #ffffff), color-mix(in srgb, #07fff1 88%, #ffffff) 34%, color-mix(in srgb, #07fff1 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(5.48px 5.48px at 50.6px 7.0px, color-mix(in srgb, #fe8ebe 88%, #ffffff), color-mix(in srgb, #fe8ebe 88%, #ffffff) 34%, color-mix(in srgb, #fe8ebe 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(6.57px 6.57px at 81.2px 6.7px, color-mix(in srgb, #72d512 88%, #ffffff), color-mix(in srgb, #72d512 88%, #ffffff) 34%, color-mix(in srgb, #72d512 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.71px 4.71px at 110.3px 23.0px, color-mix(in srgb, #6d8cfe 88%, #ffffff), color-mix(in srgb, #6d8cfe 88%, #ffffff) 34%, color-mix(in srgb, #6d8cfe 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.71px 4.71px at 110.3px 23.0px, color-mix(in srgb, #6c8efe 88%, #ffffff), color-mix(in srgb, #6c8efe 88%, #ffffff) 34%, color-mix(in srgb, #6c8efe 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.88px 4.88px at 154.3px 8.0px, color-mix(in srgb, #c16302 88%, #ffffff), color-mix(in srgb, #c16302 88%, #ffffff) 34%, color-mix(in srgb, #c16302 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.83px 4.83px at 185.7px 11.5px, color-mix(in srgb, #12b37e 88%, #ffffff), color-mix(in srgb, #12b37e 88%, #ffffff) 34%, color-mix(in srgb, #12b37e 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.33px 4.33px at 16.5px 42.0px, color-mix(in srgb, #ff57ba 88%, #ffffff), color-mix(in srgb, #ff57ba 88%, #ffffff) 34%, color-mix(in srgb, #ff57ba 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(5.17px 5.17px at 49.7px 52.7px, color-mix(in srgb, #a2af10 88%, #ffffff), color-mix(in srgb, #a2af10 88%, #ffffff) 34%, color-mix(in srgb, #a2af10 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.63px 4.63px at 82.5px 47.6px, color-mix(in srgb, #027afb 88%, #ffffff), color-mix(in srgb, #027afb 88%, #ffffff) 34%, color-mix(in srgb, #027afb 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.55px 4.55px at 105.1px 54.1px, color-mix(in srgb, #fd6401 88%, #ffffff), color-mix(in srgb, #fd6401 88%, #ffffff) 34%, color-mix(in srgb, #fd6401 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.55px 4.55px at 105.1px 54.1px, color-mix(in srgb, #fe660e 88%, #ffffff), color-mix(in srgb, #fe660e 88%, #ffffff) 34%, color-mix(in srgb, #fe660e 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(6.07px 6.07px at 149.6px 56.3px, color-mix(in srgb, #08eb9f 88%, #ffffff), color-mix(in srgb, #08eb9f 88%, #ffffff) 34%, color-mix(in srgb, #08eb9f 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.34px 4.34px at 182.8px 53.3px, color-mix(in srgb, #f4acff 88%, #ffffff), color-mix(in srgb, #f4acff 88%, #ffffff) 34%, color-mix(in srgb, #f4acff 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(5.58px 5.58px at 14.4px 89.8px, color-mix(in srgb, #cace02 88%, #ffffff), color-mix(in srgb, #cace02 88%, #ffffff) 34%, color-mix(in srgb, #cace02 55%, transparent) 52%, transparent 100%),
|
||||
@@ -8586,7 +8586,7 @@ body.start .k-leiste .feldschild::after {
|
||||
radial-gradient(4.52px 4.52px at 105.6px 108.9px, color-mix(in srgb, #d21afd 88%, #ffffff), color-mix(in srgb, #d21afd 88%, #ffffff) 34%, color-mix(in srgb, #d21afd 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.31px 4.31px at 150.4px 108.8px, color-mix(in srgb, #918a01 88%, #ffffff), color-mix(in srgb, #918a01 88%, #ffffff) 34%, color-mix(in srgb, #918a01 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(5.83px 5.83px at 189.4px 117.4px, color-mix(in srgb, #0687bc 88%, #ffffff), color-mix(in srgb, #0687bc 88%, #ffffff) 34%, color-mix(in srgb, #0687bc 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.38px 4.38px at 10.9px 139.1px, color-mix(in srgb, #ff6877 88%, #ffffff), color-mix(in srgb, #ff6877 88%, #ffffff) 34%, color-mix(in srgb, #ff6877 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.38px 4.38px at 10.9px 139.1px, color-mix(in srgb, #fe667e 88%, #ffffff), color-mix(in srgb, #fe667e 88%, #ffffff) 34%, color-mix(in srgb, #fe667e 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(6.29px 6.29px at 54.7px 155.9px, color-mix(in srgb, #a7ff98 88%, #ffffff), color-mix(in srgb, #a7ff98 88%, #ffffff) 34%, color-mix(in srgb, #a7ff98 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(6.12px 6.12px at 75.1px 154.0px, color-mix(in srgb, #ab68ff 88%, #ffffff), color-mix(in srgb, #ab68ff 88%, #ffffff) 34%, color-mix(in srgb, #ab68ff 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(6.08px 6.08px at 123.3px 154.7px, color-mix(in srgb, #ffbd4a 88%, #ffffff), color-mix(in srgb, #ffbd4a 88%, #ffffff) 34%, color-mix(in srgb, #ffbd4a 55%, transparent) 52%, transparent 100%),
|
||||
@@ -8594,7 +8594,7 @@ body.start .k-leiste .feldschild::after {
|
||||
radial-gradient(4.42px 4.42px at 177.4px 144.5px, color-mix(in srgb, #f10778 88%, #ffffff), color-mix(in srgb, #f10778 88%, #ffffff) 34%, color-mix(in srgb, #f10778 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(5.16px 5.16px at 17.7px 183.1px, color-mix(in srgb, #61ff09 88%, #ffffff), color-mix(in srgb, #61ff09 88%, #ffffff) 34%, color-mix(in srgb, #61ff09 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(4.80px 4.80px at 46.6px 182.2px, color-mix(in srgb, #b699fe 88%, #ffffff), color-mix(in srgb, #b699fe 88%, #ffffff) 34%, color-mix(in srgb, #b699fe 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(5.00px 5.00px at 80.1px 179.7px, color-mix(in srgb, #db8908 88%, #ffffff), color-mix(in srgb, #db8908 88%, #ffffff) 34%, color-mix(in srgb, #db8908 55%, transparent) 52%, transparent 100%),
|
||||
radial-gradient(5.00px 5.00px at 80.1px 179.7px, color-mix(in srgb, #da8a06 88%, #ffffff), color-mix(in srgb, #da8a06 88%, #ffffff) 34%, color-mix(in srgb, #da8a06 55%, transparent) 52%, transparent 100%),
|
||||
|
||||
/* 4. DIE MITTLEREN — die Masse des Feldes. */
|
||||
radial-gradient(3.21px 3.21px at 5.1px 5.6px, color-mix(in srgb, #07fff1 82%, #ffffff), color-mix(in srgb, #07fff1 82%, #ffffff) 34%, transparent 100%),
|
||||
@@ -8603,10 +8603,10 @@ body.start .k-leiste .feldschild::after {
|
||||
radial-gradient(2.86px 2.86px at 82.4px 14.9px, color-mix(in srgb, #cace02 82%, #ffffff), color-mix(in srgb, #cace02 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.96px 2.96px at 98.8px 9.3px, color-mix(in srgb, #12b37e 82%, #ffffff), color-mix(in srgb, #12b37e 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.65px 2.65px at 121.0px 14.2px, color-mix(in srgb, #b699fe 82%, #ffffff), color-mix(in srgb, #b699fe 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.49px 2.49px at 11.8px 26.8px, color-mix(in srgb, #ff6877 82%, #ffffff), color-mix(in srgb, #ff6877 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.49px 2.49px at 11.8px 26.8px, color-mix(in srgb, #fe667e 82%, #ffffff), color-mix(in srgb, #fe667e 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.92px 2.92px at 33.8px 37.3px, color-mix(in srgb, #eeef08 82%, #ffffff), color-mix(in srgb, #eeef08 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.47px 2.47px at 55.5px 38.6px, color-mix(in srgb, #08eb9f 82%, #ffffff), color-mix(in srgb, #08eb9f 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.55px 2.55px at 74.8px 28.0px, color-mix(in srgb, #6d8cfe 82%, #ffffff), color-mix(in srgb, #6d8cfe 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.55px 2.55px at 74.8px 28.0px, color-mix(in srgb, #6c8efe 82%, #ffffff), color-mix(in srgb, #6c8efe 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.43px 2.43px at 103.9px 38.4px, color-mix(in srgb, #f10778 82%, #ffffff), color-mix(in srgb, #f10778 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.62px 2.62px at 124.3px 27.3px, color-mix(in srgb, #918a01 82%, #ffffff), color-mix(in srgb, #918a01 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.61px 2.61px at 6.8px 55.0px, color-mix(in srgb, #069511 82%, #ffffff), color-mix(in srgb, #069511 82%, #ffffff) 34%, transparent 100%),
|
||||
@@ -8616,7 +8616,7 @@ body.start .k-leiste .feldschild::after {
|
||||
radial-gradient(2.89px 2.89px at 97.7px 59.0px, color-mix(in srgb, #18b803 82%, #ffffff), color-mix(in srgb, #18b803 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(3.29px 3.29px at 125.8px 57.6px, color-mix(in srgb, #a8d8ff 82%, #ffffff), color-mix(in srgb, #a8d8ff 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.52px 2.52px at 10.9px 83.0px, color-mix(in srgb, #ff57ba 82%, #ffffff), color-mix(in srgb, #ff57ba 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.37px 2.37px at 33.1px 72.6px, color-mix(in srgb, #db8908 82%, #ffffff), color-mix(in srgb, #db8908 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.37px 2.37px at 33.1px 72.6px, color-mix(in srgb, #da8a06 82%, #ffffff), color-mix(in srgb, #da8a06 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(3.21px 3.21px at 54.6px 78.8px, color-mix(in srgb, #a7ff98 82%, #ffffff), color-mix(in srgb, #a7ff98 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(3.43px 3.43px at 71.0px 71.9px, color-mix(in srgb, #08b5fc 82%, #ffffff), color-mix(in srgb, #08b5fc 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(3.16px 3.16px at 92.6px 70.6px, color-mix(in srgb, #f4acff 82%, #ffffff), color-mix(in srgb, #f4acff 82%, #ffffff) 34%, transparent 100%),
|
||||
@@ -8624,7 +8624,7 @@ body.start .k-leiste .feldschild::after {
|
||||
radial-gradient(2.50px 2.50px at 16.0px 101.8px, color-mix(in srgb, #61ff09 82%, #ffffff), color-mix(in srgb, #61ff09 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.80px 2.80px at 33.8px 102.3px, color-mix(in srgb, #0687bc 82%, #ffffff), color-mix(in srgb, #0687bc 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.52px 2.52px at 49.8px 93.9px, color-mix(in srgb, #e871ff 82%, #ffffff), color-mix(in srgb, #e871ff 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.87px 2.87px at 77.0px 95.8px, color-mix(in srgb, #fd6401 82%, #ffffff), color-mix(in srgb, #fd6401 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.87px 2.87px at 77.0px 95.8px, color-mix(in srgb, #fe660e 82%, #ffffff), color-mix(in srgb, #fe660e 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.37px 2.37px at 101.9px 95.3px, color-mix(in srgb, #72d512 82%, #ffffff), color-mix(in srgb, #72d512 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(3.42px 3.42px at 113.5px 91.8px, color-mix(in srgb, #0ed1d0 82%, #ffffff), color-mix(in srgb, #0ed1d0 82%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(3.22px 3.22px at 12.7px 116.5px, color-mix(in srgb, #d21afd 82%, #ffffff), color-mix(in srgb, #d21afd 82%, #ffffff) 34%, transparent 100%),
|
||||
@@ -8645,16 +8645,16 @@ body.start .k-leiste .feldschild::after {
|
||||
radial-gradient(1.69px 1.69px at 46.6px 21.7px, color-mix(in srgb, #069511 74%, #ffffff), color-mix(in srgb, #069511 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(2.03px 2.03px at 64.3px 18.5px, color-mix(in srgb, #a8d8ff 74%, #ffffff), color-mix(in srgb, #a8d8ff 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.36px 1.36px at 77.2px 20.7px, color-mix(in srgb, #f4acff 74%, #ffffff), color-mix(in srgb, #f4acff 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.40px 1.40px at 3.8px 31.4px, color-mix(in srgb, #fd6401 74%, #ffffff), color-mix(in srgb, #fd6401 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.40px 1.40px at 3.8px 31.4px, color-mix(in srgb, #fe660e 74%, #ffffff), color-mix(in srgb, #fe660e 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.36px 1.36px at 17.0px 32.1px, color-mix(in srgb, #a2af10 74%, #ffffff), color-mix(in srgb, #a2af10 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.84px 1.84px at 32.1px 35.9px, color-mix(in srgb, #12b37e 74%, #ffffff), color-mix(in srgb, #12b37e 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.63px 1.63px at 48.3px 34.6px, color-mix(in srgb, #6d8cfe 74%, #ffffff), color-mix(in srgb, #6d8cfe 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.63px 1.63px at 48.3px 34.6px, color-mix(in srgb, #6c8efe 74%, #ffffff), color-mix(in srgb, #6c8efe 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.47px 1.47px at 61.7px 38.8px, color-mix(in srgb, #fe8ebe 74%, #ffffff), color-mix(in srgb, #fe8ebe 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.59px 1.59px at 73.2px 36.6px, color-mix(in srgb, #db8908 74%, #ffffff), color-mix(in srgb, #db8908 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.59px 1.59px at 73.2px 36.6px, color-mix(in srgb, #da8a06 74%, #ffffff), color-mix(in srgb, #da8a06 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.34px 1.34px at 2.9px 51.3px, color-mix(in srgb, #61ff09 74%, #ffffff), color-mix(in srgb, #61ff09 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.78px 1.78px at 17.6px 52.6px, color-mix(in srgb, #0ed1d0 74%, #ffffff), color-mix(in srgb, #0ed1d0 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.72px 1.72px at 35.6px 46.1px, color-mix(in srgb, #ab68ff 74%, #ffffff), color-mix(in srgb, #ab68ff 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.87px 1.87px at 50.9px 49.3px, color-mix(in srgb, #ff6877 74%, #ffffff), color-mix(in srgb, #ff6877 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.87px 1.87px at 50.9px 49.3px, color-mix(in srgb, #fe667e 74%, #ffffff), color-mix(in srgb, #fe667e 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.44px 1.44px at 59.6px 52.2px, color-mix(in srgb, #918a01 74%, #ffffff), color-mix(in srgb, #918a01 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.77px 1.77px at 73.3px 49.9px, color-mix(in srgb, #18b803 74%, #ffffff), color-mix(in srgb, #18b803 74%, #ffffff) 34%, transparent 100%),
|
||||
radial-gradient(1.76px 1.76px at 3.5px 65.0px, color-mix(in srgb, #08b5fc 74%, #ffffff), color-mix(in srgb, #08b5fc 74%, #ffffff) 34%, transparent 100%),
|
||||
|
||||
+19
-19
@@ -12,19 +12,19 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -391,22 +391,22 @@
|
||||
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
|
||||
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
|
||||
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
|
||||
<script src="assets/js/textform.js?v=202609251440"></script>
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/textform.js?v=202609252349"></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/zuteilung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/zuteilung.js?v=202609252349" defer></script>
|
||||
<!-- Der Vorlagenkatalog stand bis zum 23.09.2026 mitten in
|
||||
aufgaben.js. Er bedient jetzt zwei Seiten und hat deshalb eine
|
||||
eigene Datei; hier zeigt er den Creator-Katalog.
|
||||
Vor aufgaben.js, weil die Seite ihn beim Start einrichtet. -->
|
||||
<script src="assets/js/vorlagenbrett.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/vorlagenbrett.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -168,15 +168,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -7,14 +7,14 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -197,16 +197,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+22
-22
@@ -12,24 +12,24 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609252349" />
|
||||
<!-- Wegen des Blocks „Willst du dazugehoeren?" auf dem Brett
|
||||
„Mitmachen". Eine eigene Kopie der Regel hier waere die zweite
|
||||
Stelle, an der dieselbe Sache anders aussieht. -->
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -304,19 +304,19 @@
|
||||
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
|
||||
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
|
||||
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
|
||||
<script src="assets/js/textform.js?v=202609251440"></script>
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/textform.js?v=202609252349"></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+19
-19
@@ -7,17 +7,17 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -108,15 +108,15 @@
|
||||
</main>
|
||||
|
||||
<!-- Der Fuß gehört zu jeder Seite - siehe pruef-css-klassen. -->
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -7,16 +7,16 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -80,16 +80,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -89,15 +89,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+20
-20
@@ -12,26 +12,26 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<!-- aufgaben.css bringt die Dialog- und Formularstile mit (.dialog,
|
||||
.neu__zeile, .dialog__knoepfe). Sie stehen dort seit dem
|
||||
Aufgabenbrett; sie hierher zu kopieren hiesse, sie an zwei Stellen
|
||||
zu pflegen. Dieselbe Lösung nutzen kalender.html und content.html.
|
||||
Gemeldet von pruef-css-klassen.mjs, bevor jemand einen ungestylten
|
||||
Dialog zu sehen bekam. -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -739,24 +739,24 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609251440"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349"></script>
|
||||
<!-- TEXTFORM VOR ALLEM ANDEREN (21.09.2026): chat.js und bereich.js
|
||||
fragen beim Zeichnen nach `window.Textform`. Kaeme sie spaeter,
|
||||
waere die erste gezeichnete Nachricht ohne Gestaltung -- und das
|
||||
faellt nur dem auf, der genau hinsieht. KEIN `defer`, damit sie
|
||||
wirklich vor den anderen dasteht. -->
|
||||
<script src="assets/js/textform.js?v=202609251440"></script>
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440"></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440"></script>
|
||||
<script src="assets/js/textform.js?v=202609252349"></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349"></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349"></script>
|
||||
<!-- ANRUF VOR CHAT (18.09.2026): anruf.js stellt `window.anrufStarten`
|
||||
bereit, und chat.js baut die Knoepfe nur, wenn es das gibt.
|
||||
Andersherum waere die Reihenfolge eine stille Abhaengigkeit --
|
||||
die Knoepfe fehlten, und niemand wuesste warum. -->
|
||||
<script src="assets/js/anruf.js?v=202609251711"></script>
|
||||
<script src="assets/js/anruf.js?v=202609252349"></script>
|
||||
<!-- DIE BILDSCHAU (25.09.2026). Eigene Datei, weil sie nichts vom
|
||||
Chat weiss: Sie bekommt einen Weg und einen Namen und zeigt ein
|
||||
Bild. Jede andere Seite mit Fotos kann sie ebenso benutzen, ohne
|
||||
@@ -767,8 +767,8 @@
|
||||
sie beim ersten Foto noch nicht da -- und der erste Klick ginge
|
||||
wie frueher in den Tab. Ein Fehler, der nur beim ERSTEN Mal
|
||||
auftritt, ist der, den man nie nachstellen kann. -->
|
||||
<script src="assets/js/bildschau.js?v=202609251440"></script>
|
||||
<script src="assets/js/chat.js?v=202609251440"></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bildschau.js?v=202609252349"></script>
|
||||
<script src="assets/js/chat.js?v=202609252349"></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -179,15 +179,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/content.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/content.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -36,15 +36,15 @@
|
||||
<link rel="preload" as="image" href="assets/img/buehne/crew-gate-hoch-580.webp"
|
||||
type="image/webp" media="(max-width: 899px)" />
|
||||
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<!-- Diese Wand steht NUR auf der Adresse von Team Dogi (ueberall sonst
|
||||
404, siehe crewWeiche). Sie darf das Haus deshalb direkt nennen
|
||||
statt ueber den Platzhalter haus.css zu gehen -- und sie MUSS es:
|
||||
Eine Zugangswand, die sich erst nach dem Umbiegen faerbt, waere
|
||||
die eine Seite, auf der man das Umfaerben sieht. -->
|
||||
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="gate gate--crew">
|
||||
@@ -459,7 +459,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,25 +23,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609251440",
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609252349",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609251440",
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609252349",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609251440",
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609252349",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609251440",
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609252349",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -108,15 +108,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -7,14 +7,14 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -297,20 +297,20 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609252349" defer></script>
|
||||
<!-- VOR entwicklung.js: Die Seite richtet den Katalog beim Start ein,
|
||||
also muss es ihn zu dem Zeitpunkt geben. Mit "defer" laufen beide
|
||||
in Dokumentreihenfolge. -->
|
||||
<script src="assets/js/vorlagenbrett.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/vorlagenbrett.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -146,14 +146,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -30,9 +30,9 @@
|
||||
<link rel="preload" as="image" href="assets/img/buehne/gate-hoch-580.webp"
|
||||
type="image/webp" media="(max-width: 899px)" />
|
||||
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="gate">
|
||||
@@ -427,7 +427,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -383,15 +383,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -444,13 +444,13 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440"></script>
|
||||
<script src="assets/js/wahl.js?v=202609251440"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440"></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440"></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440"></script>
|
||||
<script src="assets/js/leistung.js?v=202609251440"></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349"></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349"></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349"></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349"></script>
|
||||
<script src="assets/js/leistung.js?v=202609252349"></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,13 +12,13 @@
|
||||
vergessen wird. -->
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/material.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/material.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
<body class="start" data-ton="42" data-buehne="studio">
|
||||
|
||||
@@ -138,14 +138,14 @@
|
||||
<p class="m-laedt" id="laedt">Einen Moment …</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/material.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/material.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -453,14 +453,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -214,16 +214,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -7,14 +7,14 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -134,14 +134,14 @@
|
||||
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
||||
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
||||
die seit dem 07.09. jede Seite danach absucht. -->
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,17 +106,17 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/ki.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/report.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/report.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -173,14 +173,14 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,21 +12,21 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<!-- Nur die Startseite: Begrüßungskachel, Uhr, Glockenmulde. Siehe
|
||||
den Hinweis in start.css -- dort stand es bis zum 07.09.2026. -->
|
||||
<link rel="stylesheet" href="assets/css/heim.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/heim.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -700,16 +700,16 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/live.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/start.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/live.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/start.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -85,16 +85,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/ki.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -150,16 +150,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/support.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/support.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -128,16 +128,16 @@
|
||||
(reading 'LEITUNG')" ab -- gemessen am 24.09.2026, als diese
|
||||
Zeile beim Anlegen der Seite fehlte. Die Kopfleiste kam
|
||||
trotzdem, deshalb sah man es nur in der Browserkonsole. -->
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<!-- wahl.js gehoert zu kopf.js: Der Sicht-Umschalter in der
|
||||
Kopfleiste baut daraus seine Liste. pruef-css-klassen setzt das
|
||||
seit dem 07.09.2026 durch -- damals fehlte es auf chat.html und
|
||||
uebersicht.html, und heute hier. -->
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/support.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/support.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -7,18 +7,18 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609252349" />
|
||||
<!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie
|
||||
der Regel hier waere die zweite Stelle, an der dieselbe Sache
|
||||
anders aussieht. -->
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -111,15 +111,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -7,20 +7,20 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -110,15 +110,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/team.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/team.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -7,20 +7,20 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu
|
||||
@@ -84,15 +84,15 @@
|
||||
Kaputt ist dabei nichts -- er funktioniert. Genau deshalb faellt
|
||||
es niemandem auf, und deshalb prueft pruef-css-klassen die
|
||||
ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. -->
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -112,15 +112,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -126,14 +126,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -7,18 +7,18 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des
|
||||
Rudels biegt der Server genau diesen Dateinamen auf crew-haus.css
|
||||
um, und die Seite kommt schon beim ERSTEN Abruf in Lila und
|
||||
Babyblau an -- ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -248,14 +248,14 @@
|
||||
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
||||
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
||||
die seit dem 07.09. jede Seite danach absucht. -->
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,22 +12,22 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -149,16 +149,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -335,14 +335,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/live.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/live.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,17 +106,17 @@
|
||||
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
|
||||
liest daraus die Leitungsrollen. Ohne sie stürzt jede Seite mit
|
||||
„Cannot read properties of undefined (reading 'LEITUNG')" ab. -->
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/holen.js?v=202609252349" defer></script>
|
||||
<!-- Die Satz-Tafel. Ohne sie stand auf dieser Seite das Maschinenwort
|
||||
des Servers (z.B. "nicht_gefunden") statt eines Satzes -- gemeldet
|
||||
von pruef-meldungen, nicht beim Ansehen. -->
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/unterstuetzen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/unterstuetzen.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -7,15 +7,15 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -144,14 +144,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -12,13 +12,13 @@
|
||||
vergessen wird. -->
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/willkommen.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/willkommen.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
<!-- KOERPERKLASSE "start", NICHT "gate" (berichtigt 21.09.2026).
|
||||
`body.gate` ist die Anmeldewand: `display:flex; align-items:center`,
|
||||
@@ -75,13 +75,13 @@
|
||||
<p class="fehler" id="fehler" hidden></p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/willkommen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/willkommen.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609251440" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609251440" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609252349" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609252349" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609252349" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609251440" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609252349" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -190,15 +190,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609252349" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609251440" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609252349" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609252349" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user