Compare commits
3
Commits
2719bd9b88
...
b0e7542507
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b0e7542507 | ||
|
|
9d086eccaf | ||
|
|
9c96612321 |
@@ -68,7 +68,15 @@ const anrufModul = await import("./workspace-anruf.js");
|
||||
|
||||
/* ---- Leute anlegen ---- */
|
||||
const d = new DatabaseSync(process.env.WORKSPACE_DB);
|
||||
/* Die Namen der Konten, die diese Pruefung anlegt -- gesammelt an der
|
||||
Stelle, an der sie entstehen. Eine zweite Liste weiter unten waere
|
||||
beim naechsten umbenannten Konto die veraltete: Genau das ist hier
|
||||
passiert (die Liste nannte „Jonas, Luna, Mara, Pat", angelegt wurden
|
||||
„Filipe, Rieke, Kessi, Tili"), und der Kommentar daneben behauptete
|
||||
schon damals, sie sei abgeleitet. Jetzt ist sie es. */
|
||||
const ANGELEGTE_NAMEN = [];
|
||||
function person(name, rolle, code) {
|
||||
ANGELEGTE_NAMEN.push(name);
|
||||
const salt = randomBytes(16).toString("hex");
|
||||
const hash = scryptSync(code, salt, 64,
|
||||
{ N: 32768, r: 8, p: 1, maxmem: 96 * 1024 * 1024 }).toString("hex");
|
||||
@@ -996,6 +1004,83 @@ melde("=== 8. Zu dritt ===");
|
||||
`${wer} hoert BEIDE anderen (${z.stroeme} Stroeme, „${z.lage}")`);
|
||||
}
|
||||
|
||||
/* ---- WER IST DRAN (20.09.2026) -----------------------------
|
||||
|
||||
Filipe: „die soll auch viel besser geiler und spezieller
|
||||
aussehen, aber nicht so raushaengen."
|
||||
|
||||
DER MANGEL WAR KEIN SCHOENHEITSFEHLER: In einem Anruf ohne
|
||||
Video stand unter dem Kasten je Person das Wort „Verbunden"
|
||||
-- bei dreien dreimal dasselbe Wort, und man sah nicht, WER
|
||||
verbunden war. In einer Gruppe ist genau das die Frage.
|
||||
|
||||
Gemessen wird deshalb, dass NAMEN dastehen, nicht Kacheln:
|
||||
Ein Gesichtsfeld ohne Namen bestuende jede Pruefung, die nur
|
||||
zaehlt. */
|
||||
/* WER MUSS WEN SEHEN. Nicht „irgendein echter Name", sondern
|
||||
genau die beiden ANDEREN: Stuende bei DogFather sein eigener
|
||||
Name im Kasten, waere das ein Fehler, den eine Pruefung auf
|
||||
„ist ein echter Name" durchliesse. Die Namen kommen aus
|
||||
`ANGELEGTE_NAMEN` -- sie werden beim Anlegen eingesammelt und
|
||||
hier nur noch verteilt. */
|
||||
const NAME = { [idDogi]: ANGELEGTE_NAMEN[0], [idHand]: ANGELEGTE_NAMEN[1],
|
||||
[idModi]: ANGELEGTE_NAMEN[2] };
|
||||
const ERWARTET = {
|
||||
DogFather: [NAME[idHand], NAME[idModi]],
|
||||
"die rechte Hand": [NAME[idDogi], NAME[idModi]],
|
||||
"der Modi": [NAME[idDogi], NAME[idHand]],
|
||||
};
|
||||
for (const [wen, x] of [["DogFather", a], ["die rechte Hand", b], ["der Modi", c]]) {
|
||||
const g = await x.se.evaluate(() => ({
|
||||
felder: document.querySelectorAll("#anruf-leute .anruf__gesicht").length,
|
||||
namen: [...document.querySelectorAll("#anruf-leute .anruf__gesicht .anruf__name")]
|
||||
.map((e) => e.textContent.trim()).filter(Boolean),
|
||||
verbunden: /Verbunden/.test(document.getElementById("anruf-leute")?.textContent || ""),
|
||||
}));
|
||||
ok(g.felder === 2,
|
||||
`${wen} sieht die beiden anderen als Gesichtsfeld (${g.felder})`);
|
||||
/* NICHT „laenger als ein Zeichen" -- der Rueckfalltext
|
||||
„Jemand" ist sechs Zeichen lang und kam damit durch. Die
|
||||
Pruefung war gruen, waehrend ausgerechnet der ANRUFER unter
|
||||
jedem Kreis „Jemand" stehen sah. Verglichen wird deshalb
|
||||
gegen die Namen, die es wirklich gibt. */
|
||||
const soll = [...ERWARTET[wen]].sort().join(", ");
|
||||
const ist = [...g.namen].sort().join(", ");
|
||||
ok(g.namen.length === 2 && ist === soll,
|
||||
` und zwar genau die beiden anderen (${ist || "keine"}, erwartet: ${soll})`);
|
||||
ok(!g.verbunden,
|
||||
" statt dreimal dem Wort „Verbunden“, das nichts unterscheidet");
|
||||
}
|
||||
|
||||
/* ---- UND NICHTS HAENGT RAUS --------------------------------
|
||||
„nicht so raushaengen" ist die schaerfere der beiden Vorgaben:
|
||||
Der Kasten ist 340 px breit und liegt in der Ecke. Bei DREI
|
||||
Gesichtsfeldern plus Knopfreihe ist das die engste Lage, die
|
||||
im Betrieb vorkommt -- also die, in der gemessen wird. */
|
||||
for (const [wen, x] of [["am Rechner", a]]) {
|
||||
const raus = await x.se.evaluate(() => {
|
||||
const k = document.querySelector(".anruf");
|
||||
if (!k) return null;
|
||||
const r = k.getBoundingClientRect();
|
||||
const treffer = [];
|
||||
for (const e of k.querySelectorAll("*")) {
|
||||
const b2 = e.getBoundingClientRect();
|
||||
if (b2.width < 1 || b2.height < 1) continue;
|
||||
if (b2.right > r.right + 1 || b2.left < r.left - 1 || b2.bottom > r.bottom + 1) {
|
||||
treffer.push((e.className.baseVal ?? e.className).toString().split(" ")[0]);
|
||||
}
|
||||
}
|
||||
return { geprueft: k.querySelectorAll("*").length, treffer };
|
||||
});
|
||||
/* DIE ZAHL GEHOERT IN DIE BEDINGUNG: Faende der Wahlausdruck
|
||||
nichts, waere die Liste leer und die Pruefung gruen, ohne
|
||||
etwas angesehen zu haben. */
|
||||
ok(raus && raus.geprueft > 10 && raus.treffer.length === 0,
|
||||
raus?.treffer.length
|
||||
? `es haengt etwas raus: ${raus.treffer.slice(0, 3).join(", ")}`
|
||||
: `nichts haengt aus dem Kasten (${raus?.geprueft} Teile geprueft, ${wen})`);
|
||||
}
|
||||
|
||||
/* ---- DER LAUTSPRECHER (18.09.2026) -------------------------
|
||||
Filipe: „die funktion lautsprecher fehlt."
|
||||
|
||||
|
||||
@@ -880,6 +880,56 @@ melde("=== 8. Die Analyse im Browser ===");
|
||||
ok(g.schluss.length > 20, `und einem Schlusssatz („${g.schluss.slice(0, 46)}…")`);
|
||||
ok(/\d+ Fragen aus \d+ Feldern/.test(g.zahlen),
|
||||
`die Belegzahlen stehen darunter („${g.zahlen}")`);
|
||||
|
||||
/* ---- KEIN TEXT AUF TEXT, AUCH AM HANDY (20.09.2026) --------------
|
||||
|
||||
Gefunden hat das ein Bildschirmfoto bei 430 px: Die Unterzeile
|
||||
„Deine Antworten liest niemand ausser dir" lag 18 px UNTER dem
|
||||
Absatz darunter -- Buchstaben in Buchstaben, ausgerechnet in dem
|
||||
Satz, in dem Vertrauen entsteht.
|
||||
|
||||
Ursache war eine feste Zahl: `-18px` Abstand, gerechnet gegen die
|
||||
26 px, die das Element darueber mitbrachte. In der Kopfzeile sind
|
||||
es aber 0 px. Zwei fuer sich richtige Regeln, und dazwischen ein
|
||||
Schaden, den keine von beiden verursacht.
|
||||
|
||||
Warum das hier stehen bleibt: Es ist kein Fehler, den man beim
|
||||
Lesen sieht -- beide Regeln wirken einzeln vernuenftig. Nur eine
|
||||
Messung findet ihn wieder, wenn jemand an einem der beiden
|
||||
Abstaende dreht. */
|
||||
const enge = await seite.setViewportSize({ width: 430, height: 900 })
|
||||
.then(() => seite.waitForTimeout(500))
|
||||
.then(() => seite.evaluate(() => {
|
||||
const kandidaten = [...document.querySelectorAll("body *")].filter((e) => {
|
||||
const r = e.getBoundingClientRect();
|
||||
return r.width > 20 && r.height > 6
|
||||
&& /P|H1|H2|H3|LI/.test(e.tagName)
|
||||
&& e.textContent.trim().length > 12;
|
||||
});
|
||||
const treffer = [];
|
||||
for (let i = 0; i < kandidaten.length; i++) {
|
||||
for (let j = i + 1; j < kandidaten.length; j++) {
|
||||
const x = kandidaten[i], y = kandidaten[j];
|
||||
if (x.contains(y) || y.contains(x)) continue;
|
||||
const a2 = x.getBoundingClientRect(), b2 = y.getBoundingClientRect();
|
||||
const ux = Math.min(a2.right, b2.right) - Math.max(a2.left, b2.left);
|
||||
const uy = Math.min(a2.bottom, b2.bottom) - Math.max(a2.top, b2.top);
|
||||
if (ux > 8 && uy > 6) {
|
||||
treffer.push(`${x.className.split(" ")[0]} über ${y.className.split(" ")[0]} (${Math.round(uy)} px)`);
|
||||
}
|
||||
}
|
||||
}
|
||||
return { treffer, geprueft: kandidaten.length };
|
||||
}));
|
||||
/* DIE ZAHL GEHOERT IN DIE BEDINGUNG. Faende der Wahlausdruck nichts,
|
||||
waere `treffer` leer und die Pruefung gruen, ohne etwas angesehen
|
||||
zu haben -- genau der Fehler vom 01.09. mit `every()` auf einer
|
||||
leeren Liste. */
|
||||
ok(enge.geprueft > 20 && enge.treffer.length === 0,
|
||||
enge.treffer.length
|
||||
? `Text liegt auf Text: ${enge.treffer.slice(0, 2).join("; ")}`
|
||||
: `bei 430 px liegt kein Text auf Text (${enge.geprueft} Absätze verglichen)`);
|
||||
await seite.setViewportSize({ width: 1280, height: 1000 });
|
||||
if (process.env.SCHIRM) {
|
||||
await seite.locator("#analyse-block").screenshot(
|
||||
{ path: "C:/Users/qciga/Documents/Obelix/DogiHompage/blick.png" });
|
||||
|
||||
@@ -0,0 +1,337 @@
|
||||
/* =====================================================================
|
||||
pruef-chatkachel.mjs — Bild hinter dem Chat, Kachel für jeden Account
|
||||
|
||||
Filipe, 20.09.2026: „ich will auch ein krasses hintergrundbild für
|
||||
den treff chat. und die texte sollen immer in einer kachel sein. und
|
||||
jeder account soll seine kachel personalisieren können."
|
||||
|
||||
---------------------------------------------------------------------
|
||||
DIE EINE FRAGE, AN DER SO ETWAS SCHEITERT: LESBARKEIT
|
||||
|
||||
Ein Bild hinter einem Chat geht nur, WENN der Text auf einer
|
||||
deckenden Kachel steht. Sonst liegt Schrift auf einem Foto — an der
|
||||
dunklen Stelle lesbar, an der hellen nicht, und beim Scrollen
|
||||
wechselt es. Deshalb wird hier nicht geprüft, ob ein Bild da ist,
|
||||
sondern ob die Kachel DECKT: gemessen am Alphawert, nicht geschätzt.
|
||||
|
||||
Und alle zwölf Töne müssen gleich gut tragen. Ein freier Farbwähler
|
||||
hätte genau hier sein Problem: Mit ihm kann sich jemand unlesbar
|
||||
machen, und sehen müssen es die anderen.
|
||||
|
||||
AUFRUF: node server/pruef-chatkachel.mjs
|
||||
===================================================================== */
|
||||
|
||||
import { mkdtempSync, rmSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import { portMussFreiSein } from "./helfer-port.mjs";
|
||||
import { notbremse } from "./helfer-notbremse.mjs";
|
||||
|
||||
const PORT = await portMussFreiSein(4442, "pruef-chatkachel");
|
||||
const ordner = mkdtempSync(join(tmpdir(), "ws-kachel-"));
|
||||
process.env.WORKSPACE_DB = join(ordner, "workspace.db");
|
||||
process.env.PORT = String(PORT);
|
||||
process.env.SITE_ACCESS_SECRET = "lokaler-test";
|
||||
process.env.SITE_PUBLIC_LAUNCH_AT = "2020-01-01T00:00:00+01:00";
|
||||
const express = (await import("express")).default;
|
||||
const ec = express.response.cookie;
|
||||
express.response.cookie = function (n, w, o) { return ec.call(this, n, w, { ...(o || {}), secure: false }); };
|
||||
await import("./index.js");
|
||||
notbremse(250_000, "pruef-chatkachel");
|
||||
await new Promise((r) => setTimeout(r, 900));
|
||||
const BASIS = `http://127.0.0.1:${PORT}`;
|
||||
|
||||
process.on("uncaughtException", (f) => { console.error("ABSTURZ:", f); process.exit(7); });
|
||||
process.on("unhandledRejection", (f) => { console.error("ABSTURZ (Versprechen):", f); process.exit(7); });
|
||||
|
||||
let fehler = 0, geprueft = 0;
|
||||
const ok = (b, t) => { geprueft++; console.log((b ? " ok " : " FEHL ") + t); if (!b) fehler++; };
|
||||
|
||||
console.log("\n=== Chat: Bild dahinter, Kachel davor ===\n");
|
||||
|
||||
/* ---- 1. Die Töne, ohne Browser ----------------------------------- */
|
||||
const { CHAT_KACHELN, kachelPruefen } = await import("./workspace-chat.js");
|
||||
ok(CHAT_KACHELN.length >= 8, `es gibt genug Töne zur Auswahl (${CHAT_KACHELN.length})`);
|
||||
|
||||
/* ALLE GLEICH DUNKEL. Nur dann ist der Kontrast zur Schrift bei jedem
|
||||
gleich, und niemand kann sich unlesbar machen. Gerechnet wird die
|
||||
relative Helligkeit nach WCAG — nicht der Augenschein. */
|
||||
const helligkeit = (hex) => {
|
||||
const z = hex.replace("#", "");
|
||||
const teil = [0, 2, 4].map((i) => parseInt(z.slice(i, i + 2), 16) / 255);
|
||||
const lin = teil.map((c) => (c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4));
|
||||
return 0.2126 * lin[0] + 0.7152 * lin[1] + 0.0722 * lin[2];
|
||||
};
|
||||
const kontrast = (a, b) => {
|
||||
const [h, d] = [helligkeit(a), helligkeit(b)].sort((x, y) => y - x);
|
||||
return (h + 0.05) / (d + 0.05);
|
||||
};
|
||||
const SCHRIFT = "#e8f1fa"; /* die Textfarbe des Hauses */
|
||||
|
||||
let schlechtester = 99, schlechtesterName = "";
|
||||
for (const k of CHAT_KACHELN) {
|
||||
const c = kontrast(SCHRIFT, k.farbe);
|
||||
if (c < schlechtester) { schlechtester = c; schlechtesterName = k.name; }
|
||||
}
|
||||
/* 7:1 ist die strengere WCAG-Stufe (AAA für Fließtext). Ein Chat ist
|
||||
die Seite, auf der am längsten gelesen wird — hier die niedrigere
|
||||
Schwelle zu nehmen wäre am falschen Ende gespart. */
|
||||
ok(schlechtester >= 7,
|
||||
`auch der hellste Ton trägt die Schrift noch (${schlechtesterName}: ${schlechtester.toFixed(1)}:1, nötig 7)`);
|
||||
|
||||
const spanne = Math.max(...CHAT_KACHELN.map((k) => helligkeit(k.farbe)))
|
||||
/ Math.max(1e-6, Math.min(...CHAT_KACHELN.map((k) => helligkeit(k.farbe))));
|
||||
ok(spanne < 6,
|
||||
`die Töne liegen nah beieinander (Faktor ${spanne.toFixed(1)}) — keiner sticht heraus`);
|
||||
|
||||
/* KEINE DOPPELTE FARBE. Zwei gleiche Töne wären zwei Namen für
|
||||
dieselbe Kachel — man wählt den zweiten und sieht keinen Unterschied. */
|
||||
const farben = new Set(CHAT_KACHELN.map((k) => k.farbe.toLowerCase()));
|
||||
ok(farben.size === CHAT_KACHELN.length,
|
||||
`kein Ton doppelt (${farben.size} von ${CHAT_KACHELN.length})`);
|
||||
|
||||
/* Die Prüfung am Wert selbst — sie ist der Riegel gegen alles, was
|
||||
nicht aus der Liste kommt. */
|
||||
ok(kachelPruefen("moos") === "moos", "ein bekannter Ton kommt durch");
|
||||
ok(kachelPruefen("rgb(255,0,0)") === null,
|
||||
"Gegenprobe: ein erfundener Wert nicht — sonst stünde CSS aus der Datenbank in der Seite");
|
||||
ok(kachelPruefen(null) === null, "und 'nichts eingestellt' ist ein gültiger Zustand");
|
||||
|
||||
/* ---- 2. Am echten Bildschirm ------------------------------------- */
|
||||
const { DatabaseSync } = await import("node:sqlite");
|
||||
const { scryptSync, randomBytes } = await import("node:crypto");
|
||||
const d = new DatabaseSync(process.env.WORKSPACE_DB);
|
||||
const mach = (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, aktiv, erstellt)"
|
||||
+ " VALUES (?,?,?,?,?,1,?)").run(name, rolle, h, s, 32768, new Date().toISOString()).lastInsertRowid;
|
||||
};
|
||||
mach("Filipe", "admin", "CODE-DOGI-0001");
|
||||
const idLuna = mach("Luna", "manager", "CODE-LUNA-0002");
|
||||
d.close();
|
||||
|
||||
const anmelden = async (rolle, code) => {
|
||||
const a = await fetch(BASIS + "/workspace/api/anmelden", {
|
||||
method: "POST", headers: { "Content-Type": "application/json", Origin: BASIS },
|
||||
body: JSON.stringify({ rolle, code }),
|
||||
});
|
||||
return (a.headers.getSetCookie?.() || []).map((z) => z.split(";")[0]).join("; ");
|
||||
};
|
||||
const kFilipe = await anmelden("admin", "CODE-DOGI-0001");
|
||||
const kLuna = await anmelden("manager", "CODE-LUNA-0002");
|
||||
ok(!!kFilipe && !!kLuna, "beide angemeldet");
|
||||
|
||||
/* Ein Gespräch und zwei Nachrichten. */
|
||||
const raumA = await fetch(BASIS + "/workspace/api/chat/direkt", {
|
||||
method: "POST", headers: { "Content-Type": "application/json", Cookie: kFilipe, Origin: BASIS },
|
||||
body: JSON.stringify({ mit: idLuna }),
|
||||
});
|
||||
const raum = (await raumA.json()).raum_id;
|
||||
ok(!!raum, `ein Gespräch steht (${raum})`);
|
||||
const schreib = async (keks, text) => fetch(BASIS + `/workspace/api/chat/raeume/${raum}/nachrichten`, {
|
||||
method: "POST", headers: { "Content-Type": "application/json", Cookie: keks, Origin: BASIS },
|
||||
body: JSON.stringify({ text }),
|
||||
});
|
||||
await schreib(kFilipe, "Servus, hier ist Filipe.");
|
||||
await schreib(kLuna, "Und hier Luna.");
|
||||
|
||||
/* Luna stellt eine Farbe ein. */
|
||||
const setzen = await fetch(BASIS + "/workspace/api/chat/kachel", {
|
||||
method: "PUT", headers: { "Content-Type": "application/json", Cookie: kLuna, Origin: BASIS },
|
||||
body: JSON.stringify({ kachel: "moos" }),
|
||||
});
|
||||
ok(setzen.ok, `Luna stellt ihre Kachel ein (${setzen.status})`);
|
||||
|
||||
const boese = await fetch(BASIS + "/workspace/api/chat/kachel", {
|
||||
method: "PUT", headers: { "Content-Type": "application/json", Cookie: kLuna, Origin: BASIS },
|
||||
body: JSON.stringify({ kachel: "url(javascript:0)" }),
|
||||
});
|
||||
ok(boese.status === 400,
|
||||
`Gegenprobe: ein erfundener Wert wird abgelehnt (${boese.status}) — eine Regel, die nur im Formular steht, ist keine Regel`);
|
||||
|
||||
/* FILIPE SIEHT LUNAS FARBE — das ist der Sinn der Sache. */
|
||||
const verlauf = await (await fetch(BASIS + `/workspace/api/chat/raeume/${raum}/nachrichten`,
|
||||
{ headers: { Cookie: kFilipe } })).json();
|
||||
const vonLuna = (verlauf.nachrichten || []).find((n) => n.von === "Luna");
|
||||
ok(vonLuna?.von_kachel === "moos",
|
||||
`Filipe bekommt Lunas Kachel mitgeliefert (${vonLuna?.von_kachel})`);
|
||||
const vonFilipe = (verlauf.nachrichten || []).find((n) => n.von === "Filipe");
|
||||
ok(!vonFilipe?.von_kachel,
|
||||
"und seine eigene bleibt Standard, solange er nichts einstellt");
|
||||
|
||||
const pw = await import("file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
|
||||
const browser = await pw.chromium.launch();
|
||||
try {
|
||||
const ctx = await browser.newContext({ viewport: { width: 1280, height: 900 } });
|
||||
await ctx.addCookies(kFilipe.split("; ").filter(Boolean).map((t) => {
|
||||
const [name, ...rest] = t.split("=");
|
||||
return { name, value: rest.join("="), domain: "127.0.0.1", path: "/" };
|
||||
}));
|
||||
const s = await ctx.newPage();
|
||||
const konsole = [];
|
||||
s.on("console", (m) => { if (m.type() === "error" && !/favicon|ERR_/i.test(m.text())) konsole.push(m.text()); });
|
||||
s.on("pageerror", (e) => konsole.push("Absturz: " + e.message));
|
||||
|
||||
await s.goto(BASIS + "/workspace/chat.html", { waitUntil: "networkidle" });
|
||||
await s.waitForTimeout(1400);
|
||||
await s.click(".chat-raum");
|
||||
await s.waitForTimeout(1200);
|
||||
|
||||
/* ==== DIE EIGENTLICHE MESSUNG: SCHEINT DAS BILD DURCH? ===========
|
||||
|
||||
Der erste Anlauf las `backgroundColor` und pruefte den Alphawert.
|
||||
Das war falsch, und zwar auf eine Art, die fast durchgegangen
|
||||
waere: Eine Kachel mit einem VERLAUF hat `backgroundColor:
|
||||
rgba(0,0,0,0)` -- der Verlauf steht in `background-image`. Die
|
||||
Pruefung meldete „durchsichtig" bei einer Kachel, die voellig
|
||||
deckt, und haette umgekehrt eine halbtransparente Verlaufskachel
|
||||
durchgelassen.
|
||||
|
||||
GEMESSEN WIRD JETZT DIE SACHE SELBST: zweimal dasselbe Bildpunkt-
|
||||
feld, einmal mit und einmal ohne Buehnenbild. Deckt die Kachel,
|
||||
sind beide Aufnahmen an dieser Stelle identisch. Scheint das Bild
|
||||
durch, unterscheiden sie sich.
|
||||
|
||||
DIE GEGENPROBE IST EINGEBAUT und kostet nichts: An der Flaeche
|
||||
ZWISCHEN den Kacheln MUSS sich etwas aendern. Tut sie das nicht,
|
||||
misst der Vergleich gar nichts -- etwa weil das Bild in dieser
|
||||
Umgebung nie geladen wurde. Genau die Sorte stiller Erfolg, vor
|
||||
der die Hausregel zum dritten Ausgang warnt. */
|
||||
const punkte = await s.evaluate(() => {
|
||||
const b = document.querySelector('.chat-nachricht[data-selbst="ja"] .chat-nachricht__blase')
|
||||
|| document.querySelector(".chat-nachricht__blase");
|
||||
const v = document.querySelector(".chat__verlauf");
|
||||
if (!b || !v) return null;
|
||||
const rb = b.getBoundingClientRect(), rv = v.getBoundingClientRect();
|
||||
return {
|
||||
/* Mitten in der Kachel -- nicht am Rand, dort liegen Kante und
|
||||
abgerundete Ecke. */
|
||||
kachel: { x: Math.round(rb.left + rb.width / 2), y: Math.round(rb.top + rb.height / 2) },
|
||||
/* Und ein Fleck im Verlauf, auf dem sicher keine Kachel liegt:
|
||||
ganz rechts aussen, wo die eigenen Nachrichten nicht hinreichen. */
|
||||
frei: { x: Math.round(rv.right - 6), y: Math.round(rv.top + rv.height / 2) },
|
||||
};
|
||||
});
|
||||
ok(!!punkte, "Kachel und freie Fläche gefunden");
|
||||
|
||||
/* Playwright kann einen Ausschnitt aufnehmen -- ein Bildpunkt reicht. */
|
||||
const punktFarbe = async (pkt) => {
|
||||
const bild = await s.screenshot({
|
||||
clip: { x: pkt.x, y: pkt.y, width: 1, height: 1 }, type: "png",
|
||||
});
|
||||
/* Der Farbwert steckt im PNG. Statt es zu entpacken, wird die
|
||||
AUFNAHME selbst verglichen: Zwei Aufnahmen desselben Bildpunkts
|
||||
sind byteweise gleich, wenn die Farbe gleich ist. Das ist genau
|
||||
die Frage, und sie braucht keinen Decoder. */
|
||||
return bild.toString("base64");
|
||||
};
|
||||
|
||||
const mitBild = { kachel: await punktFarbe(punkte.kachel), frei: await punktFarbe(punkte.frei) };
|
||||
await s.addStyleTag({ content: "body.start::before { display: none !important; }" });
|
||||
await s.waitForTimeout(350);
|
||||
const ohneBild = { kachel: await punktFarbe(punkte.kachel), frei: await punktFarbe(punkte.frei) };
|
||||
|
||||
/* ZUERST DIE GEGENPROBE. Ohne sie waere die Hauptmessung wertlos. */
|
||||
ok(mitBild.frei !== ohneBild.frei,
|
||||
"Gegenprobe: auf der freien Fläche ändert sich etwas, wenn das Bild weg ist — es ist also wirklich da");
|
||||
ok(mitBild.kachel === ohneBild.kachel,
|
||||
mitBild.kachel === ohneBild.kachel
|
||||
? "auf der Kachel ändert sich NICHTS — sie deckt, das Bild kommt nicht durch die Schrift"
|
||||
: "das Bühnenbild scheint durch die Kachel — dort läge Schrift auf einem Foto");
|
||||
|
||||
/* Die Fläche darum MUSS durchlassen, sonst gäbe es gar kein Bild zu
|
||||
sehen -- das ist die Hälfte des Wunsches. */
|
||||
const flaeche = await s.evaluate(() => {
|
||||
const c = getComputedStyle(document.querySelector(".chat")).backgroundColor;
|
||||
/* ZWEI SCHREIBWEISEN, NICHT EINE (20.09.2026).
|
||||
|
||||
Der erste Anlauf suchte nur `rgba(...)`. Chrome gibt das
|
||||
Ergebnis von `color-mix()` aber als `color(srgb r g b / a)`
|
||||
zurueck -- die Suche fand nichts, der Rueckfall war „Alpha 1",
|
||||
und die Pruefung meldete „deckt" bei einer Flaeche, die
|
||||
durchscheint. Ein Messfehler, der genau das Gegenteil behauptet. */
|
||||
const alphaVon = (farbe) => {
|
||||
const rgba = farbe.match(/rgba?\(([^)]+)\)/);
|
||||
if (rgba) {
|
||||
const t = rgba[1].split(",").map((x) => parseFloat(x));
|
||||
return t.length > 3 ? t[3] : 1;
|
||||
}
|
||||
const srgb = farbe.match(/color\([^/)]*\/\s*([\d.]+)\s*\)/);
|
||||
if (srgb) return parseFloat(srgb[1]);
|
||||
return farbe === "transparent" ? 0 : 1;
|
||||
};
|
||||
return { alpha: alphaVon(c), roh: c,
|
||||
buehne: getComputedStyle(document.body, "::before").backgroundImage };
|
||||
});
|
||||
ok(flaeche.alpha < 0.98,
|
||||
`die Fläche um die Kacheln lässt durch (Alpha ${flaeche.alpha.toFixed(2)}, ${flaeche.roh})`);
|
||||
ok(/\.webp|\.png|\.jpg/i.test(flaeche.buehne || ""),
|
||||
`und dahinter steht wirklich ein Bild (…${(flaeche.buehne || "").slice(-30)}`);
|
||||
|
||||
const lage = await s.evaluate(() => ({
|
||||
blasen: document.querySelectorAll(".chat-nachricht__blase").length,
|
||||
knopf: !!document.querySelector(".chat__kachelknopf:not([hidden])"),
|
||||
}));
|
||||
ok(lage.blasen >= 2, `die Nachrichten stehen in Kacheln (${lage.blasen})`);
|
||||
|
||||
ok(lage.knopf, "der Knopf für die eigene Kachel steht da");
|
||||
|
||||
/* Und er lässt sich bedienen. */
|
||||
await s.click(".chat__kachelknopf");
|
||||
await s.waitForTimeout(400);
|
||||
const wahl = await s.evaluate(() => {
|
||||
const dlg = document.querySelector("#kachel-wahl[open]");
|
||||
const toene = [...document.querySelectorAll(".chat-kachelwahl__ton")];
|
||||
return {
|
||||
offen: !!dlg,
|
||||
toene: toene.length,
|
||||
mitNamen: toene.filter((t) => (t.getAttribute("aria-label") || "").length > 2).length,
|
||||
hoch: toene.length ? Math.round(toene[0].getBoundingClientRect().height) : 0,
|
||||
};
|
||||
});
|
||||
ok(wahl.offen, "die Auswahl geht auf");
|
||||
ok(wahl.toene === CHAT_KACHELN.length,
|
||||
`mit allen ${CHAT_KACHELN.length} Tönen (${wahl.toene})`);
|
||||
ok(wahl.mitNamen === wahl.toene,
|
||||
`jeder trägt seinen Namen (${wahl.mitNamen}) — wer Farben schlecht unterscheidet, wählt sonst blind`);
|
||||
ok(wahl.hoch >= 44, `und ist am Finger treffbar (${wahl.hoch} px)`);
|
||||
|
||||
/* Eine andere wählen und nachsehen, ob die eigenen Kacheln sofort
|
||||
umspringen -- ohne Neuladen. */
|
||||
/* DIE FARBE STECKT IM VERLAUF, nicht in `backgroundColor`.
|
||||
|
||||
Auch das war erst falsch: Eine Kachel mit `background:
|
||||
linear-gradient(...)` hat `backgroundColor: rgba(0,0,0,0)` -- der
|
||||
Vergleich lieferte zweimal „durchsichtig" und meldete „springt
|
||||
nicht um" bei einer Kachel, die sehr wohl umsprang. Beides wird
|
||||
gelesen und aneinandergehaengt; dann ist es egal, welche der
|
||||
beiden Stellen die Farbe traegt. */
|
||||
const kachelBild = () => s.evaluate(() => {
|
||||
const b = document.querySelector('.chat-nachricht[data-selbst="ja"] .chat-nachricht__blase');
|
||||
const c = getComputedStyle(b);
|
||||
return c.backgroundColor + " | " + c.backgroundImage;
|
||||
});
|
||||
const vorher = await kachelBild();
|
||||
await s.click('.chat-kachelwahl__ton[data-wert="wein"]');
|
||||
await s.waitForTimeout(600);
|
||||
const nachher = await kachelBild();
|
||||
ok(vorher !== nachher,
|
||||
`die eigenen Kacheln springen sofort um (${vorher.slice(0, 46)} → ${nachher.slice(0, 46)})`);
|
||||
|
||||
/* UND ES IST GESPEICHERT, nicht nur gemalt. */
|
||||
const nachSetzen = await (await fetch(BASIS + "/workspace/api/chat/kacheln",
|
||||
{ headers: { Cookie: kFilipe } })).json();
|
||||
ok(nachSetzen.meine === "wein",
|
||||
`und die Wahl ist gespeichert, nicht nur gemalt (${nachSetzen.meine})`);
|
||||
|
||||
ok(konsole.length === 0,
|
||||
konsole.length ? "Fehler im Browser: " + konsole[0].slice(0, 80) : "keine Fehler im Browser");
|
||||
await ctx.close();
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
|
||||
console.log(`\n${fehler ? fehler + " FEHLER" : "Alles in Ordnung"} — ${geprueft} Prüfungen\n`);
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
|
||||
process.exit(fehler ? 1 : 0);
|
||||
+123
-1
@@ -174,6 +174,65 @@ function bildWegFuer(personId) {
|
||||
} catch { return null; }
|
||||
}
|
||||
|
||||
/* =====================================================================
|
||||
JEDER ACCOUNT SEINE EIGENE KACHEL (20.09.2026)
|
||||
|
||||
Filipe: „jeder account soll seine kachel personalisieren koennen."
|
||||
|
||||
---------------------------------------------------------------------
|
||||
EINE AUSWAHL, KEIN FARBWAEHLER
|
||||
|
||||
Ein freier Farbwaehler klingt grosszuegiger und ist die schlechtere
|
||||
Loesung: Mit ihm laesst sich Schwarz auf Schwarz einstellen, oder
|
||||
Neongelb, das jedem anderen im Gespraech in die Augen sticht. Die
|
||||
Kachel gehoert einem selbst, GESEHEN wird sie von allen anderen --
|
||||
deshalb ist sie kein Platz fuer etwas, das man nicht abschalten kann.
|
||||
|
||||
Die zwoelf Toene hier sind alle gleich dunkel und gleich gesaettigt.
|
||||
Sie unterscheiden sich im Farbton und in sonst nichts. Damit ist der
|
||||
Kontrast zur Schrift bei jedem gleich -- er muss nicht bei jedem
|
||||
einzeln geprueft werden, und niemand kann sich unlesbar machen.
|
||||
Augenschonend ist hier keine Geschmacksfrage: Ein Chat ist die
|
||||
Seite, auf der am laengsten gelesen wird.
|
||||
|
||||
KEINE der zwoelf ist hell. Das ist Absicht und nicht Sparsamkeit --
|
||||
die Schrift ist hell, und eine helle Kachel waere fuer die Person,
|
||||
die sie waehlt, hübsch und fuer alle anderen unlesbar.
|
||||
===================================================================== */
|
||||
export const CHAT_KACHELN = [
|
||||
{ wert: "grund", name: "Standard", farbe: "#131a25" },
|
||||
{ wert: "tinte", name: "Tinte", farbe: "#141c2e" },
|
||||
{ wert: "veilchen", name: "Veilchen", farbe: "#1d1730" },
|
||||
{ wert: "pflaume", name: "Pflaume", farbe: "#251729" },
|
||||
{ wert: "wein", name: "Wein", farbe: "#2a1620" },
|
||||
{ wert: "ziegel", name: "Ziegel", farbe: "#2a1a17" },
|
||||
{ wert: "bernstein", name: "Bernstein", farbe: "#271f14" },
|
||||
{ wert: "moos", name: "Moos", farbe: "#16251b" },
|
||||
{ wert: "tanne", name: "Tanne", farbe: "#132622" },
|
||||
{ wert: "lagune", name: "Lagune", farbe: "#122429" },
|
||||
{ wert: "stahl", name: "Stahl", farbe: "#1b2128" },
|
||||
{ wert: "schiefer", name: "Schiefer", farbe: "#20201f" },
|
||||
];
|
||||
|
||||
/** Nur ein Ton aus der Liste kommt durch -- sonst nichts.
|
||||
*
|
||||
* DIE PRUEFUNG STEHT HIER UND NICHT NUR IM FORMULAR. Was aus der
|
||||
* Datenbank kommt, koennte aus einer aelteren Fassung stammen oder
|
||||
* von einem Aufruf an der Oberflaeche vorbei; ein unbekannter Wert
|
||||
* wanderte sonst als CSS-Farbe in die Seite. `null` heisst
|
||||
* „Standard", und das ist ein gueltiger Zustand. */
|
||||
export function kachelPruefen(wert) {
|
||||
if (!wert) return null;
|
||||
return CHAT_KACHELN.some((k) => k.wert === String(wert)) ? String(wert) : null;
|
||||
}
|
||||
|
||||
function kachelFuer(personId) {
|
||||
try {
|
||||
return kachelPruefen(db().prepare(
|
||||
"SELECT chat_kachel FROM personen WHERE id = ?").get(personId)?.chat_kachel);
|
||||
} catch { return null; }
|
||||
}
|
||||
|
||||
function teilnehmerVon(raumId) {
|
||||
return db().prepare(`
|
||||
SELECT t.person_id AS id, p.name, p.rolle, p.bild, t.leitung, t.gelesen_bis
|
||||
@@ -465,6 +524,54 @@ chatRouter.get("/workspace/api/chat/partner", (req, res) => {
|
||||
});
|
||||
|
||||
/** Meine Gespräche, das jüngste zuerst. */
|
||||
/* =====================================================================
|
||||
DIE EIGENE KACHEL EINSTELLEN (20.09.2026)
|
||||
|
||||
Filipe: „jeder account soll seine kachel personalisieren koennen."
|
||||
|
||||
ZWEI WEGE, WEIL ES ZWEI FRAGEN SIND: „welche gibt es" und „das will
|
||||
ich". Die Liste kommt vom Server, damit im Browser keine zweite
|
||||
Fassung der zwoelf Toene steht -- die waere beim dreizehnten die
|
||||
vergessene.
|
||||
|
||||
NUR FUER SICH SELBST. Es gibt keinen Weg, die Kachel eines anderen
|
||||
zu setzen, und das ist keine Luecke: Die Kachel ist das Einzige auf
|
||||
dieser Seite, das einem selbst gehoert. Ein Recht der Leitung darauf
|
||||
waere ein Recht, jemandem seine Farbe wegzunehmen.
|
||||
===================================================================== */
|
||||
chatRouter.get("/workspace/api/chat/kacheln", (req, res) => {
|
||||
try {
|
||||
res.json({
|
||||
kacheln: CHAT_KACHELN,
|
||||
meine: kachelFuer(req.person.id),
|
||||
});
|
||||
} catch (f) {
|
||||
console.error("[chat] Kacheln:", f?.message);
|
||||
res.status(503).json({ fehler: "nicht_verfuegbar" });
|
||||
}
|
||||
});
|
||||
|
||||
chatRouter.put("/workspace/api/chat/kachel", express.json({ limit: "2kb" }),
|
||||
gleicheHerkunft, (req, res) => {
|
||||
try {
|
||||
const roh = req.body?.kachel;
|
||||
/* LEER IST GUELTIG und heisst "Standard". Wer sich umentscheidet,
|
||||
braucht einen Weg zurueck -- eine Einstellung ohne Rueckweg ist
|
||||
eine Falle, keine Einstellung. */
|
||||
const wert = (roh === null || roh === "" || roh === "grund")
|
||||
? null : kachelPruefen(roh);
|
||||
if (roh && roh !== "grund" && wert === null) {
|
||||
return res.status(400).json({ fehler: "unbekannte_kachel" });
|
||||
}
|
||||
db().prepare("UPDATE personen SET chat_kachel = ? WHERE id = ?")
|
||||
.run(wert, req.person.id);
|
||||
res.json({ kachel: wert });
|
||||
} catch (f) {
|
||||
console.error("[chat] Kachel setzen:", f?.message);
|
||||
res.status(503).json({ fehler: "nicht_verfuegbar" });
|
||||
}
|
||||
});
|
||||
|
||||
chatRouter.get("/workspace/api/chat/raeume", (req, res) => {
|
||||
try {
|
||||
/* WEGGERÄUMTE GESPRÄCHE STEHEN NICHT IN DER LISTE.
|
||||
@@ -888,7 +995,7 @@ chatRouter.get("/workspace/api/chat/raeume/:id/nachrichten", (req, res) => {
|
||||
const weg = geloeschtBis(raumId, req.person.id);
|
||||
const reihen = db().prepare(`
|
||||
SELECT n.id, n.person_id, n.text, n.erstellt, n.weg_am, p.name AS von, p.rolle,
|
||||
p.bild AS von_bild,
|
||||
p.bild AS von_bild, p.chat_kachel AS von_kachel,
|
||||
n.antwort_auf, n.angeheftet_am,
|
||||
n.anhang_name, n.anhang_art, n.anhang_typ, n.anhang_groesse,
|
||||
n.anhang_breite, n.anhang_hoehe,
|
||||
@@ -974,6 +1081,17 @@ chatRouter.get("/workspace/api/chat/raeume/:id/nachrichten", (req, res) => {
|
||||
reaktionen: reakt.get(n.id) || [],
|
||||
id: n.id, von_id: n.person_id, von: n.von || "Gelöscht", rolle: n.rolle,
|
||||
von_bild: n.von_bild ? `/workspace/api/steckbrief/bild/${n.von_bild}` : null,
|
||||
/* DIE EIGENE KACHELFARBE (20.09.2026).
|
||||
|
||||
Filipe: "jeder account soll seine kachel personalisieren
|
||||
koennen."
|
||||
|
||||
Sie kommt aus `personen`, nicht aus der Nachricht: Wer seine
|
||||
Farbe aendert, aendert sie fuer ALLE seine Nachrichten,
|
||||
auch die von gestern. Die Farbe an jede Zeile zu schreiben
|
||||
waere eine zweite Wahrheit -- und nach der ersten Aenderung
|
||||
haette dieselbe Person zwei Farben im selben Gespraech. */
|
||||
von_kachel: kachelPruefen(n.von_kachel),
|
||||
text: n.weg_am ? null : n.text,
|
||||
zurueckgenommen: !!n.weg_am,
|
||||
erstellt: n.erstellt,
|
||||
@@ -1093,6 +1211,10 @@ chatRouter.post("/workspace/api/chat/raeume/:id/nachrichten", gleicheHerkunft,
|
||||
laedt, ein Gesicht. Derselbe Mensch, zwei Darstellungen, und
|
||||
der Unterschied haengt nur daran, wann man geschaut hat. */
|
||||
von_bild: bildWegFuer(req.person.id),
|
||||
/* Auch hier -- sonst kaeme die frisch gesendete Nachricht ohne
|
||||
Farbe bei den anderen an und faerbte sich erst beim naechsten
|
||||
Laden. Derselbe Fehler wie beim Bild eine Zeile darueber. */
|
||||
von_kachel: kachelFuer(req.person.id),
|
||||
rolle: req.person.rolle, text, erstellt: n, zurueckgenommen: false,
|
||||
antwort: zitat ? {
|
||||
id: antwortAuf, von: zitat.von || "Gelöscht",
|
||||
|
||||
@@ -2491,6 +2491,13 @@ function umstellungen(d) {
|
||||
["personen", "instagram", "TEXT"],
|
||||
["personen", "youtube", "TEXT"],
|
||||
["personen", "twitch", "TEXT"],
|
||||
/* Die eigene Kachelfarbe im Chat (20.09.2026). Ein Schluessel aus
|
||||
CHAT_KACHELN, nicht die Farbe selbst: Sonst stuende in der
|
||||
Datenbank ein CSS-Wert, und eine Aenderung am Farbton hiesse,
|
||||
jede Zeile anzufassen. NULL heisst "Standard" und ist der
|
||||
Normalfall -- ein Pflichtwert waere eine Entscheidung, die
|
||||
niemand treffen wollte. */
|
||||
["personen", "chat_kachel", "TEXT"],
|
||||
|
||||
/* ---- Wiederkehrende Termine (02.09.2026) ----
|
||||
Drei Spalten an `termine`, damit eine Ausprägung weiss, woher sie
|
||||
|
||||
@@ -16,15 +16,15 @@
|
||||
verdeckt. Gefunden hat es pruef-struktur.
|
||||
|
||||
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
<!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als
|
||||
Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet
|
||||
ausserhalb der App -- auf einer Seite, die genau erklaeren soll,
|
||||
WARUM das Telefon nicht klingelt, ist das besonders unpassend. -->
|
||||
<link rel="manifest" href="/workspace/crew.webmanifest?v=202609191018" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<style>
|
||||
/* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite
|
||||
soll auch dann noch etwas anzeigen, wenn genau das schiefgeht,
|
||||
@@ -125,6 +125,6 @@
|
||||
</main>
|
||||
␍␍
|
||||
|
||||
<script src="assets/js/anruf-probe.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/anruf-probe.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -22,25 +22,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609201909",
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609202225",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609201909",
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609202225",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609201909",
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609202225",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609201909",
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609202225",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
@@ -61,9 +61,33 @@
|
||||
gap: 0;
|
||||
border: 1px solid var(--rand);
|
||||
border-radius: var(--radius);
|
||||
/* ==== DAS BUEHNENBILD SCHEINT DURCH (20.09.2026) ==================
|
||||
|
||||
Filipe: „ich will auch ein krasses hintergrundbild fuer den treff
|
||||
chat. und die texte sollen immer in einer kachel sein."
|
||||
|
||||
BEIDES ZUSAMMEN, und in dieser Reihenfolge -- sie bedingen
|
||||
einander: Ein Bild hinter dem Chat geht nur, WENN der Text auf
|
||||
einer deckenden Kachel steht. Sonst liegt Schrift auf einem Foto,
|
||||
und das ist an der hellsten Stelle unlesbar. Genau deshalb ist der
|
||||
zweite Satz kein Zusatzwunsch, sondern die Bedingung fuer den
|
||||
ersten.
|
||||
|
||||
WARUM KEIN EIGENES BILD, SONDERN DAS DER SEITE: Hinter jeder Seite
|
||||
steht ohnehin eine Buehne (start.css, neun Szenen, fuer den Chat
|
||||
die Lounge). Sie lag bisher hinter einer deckenden Flaeche --
|
||||
vorhanden, geladen, unsichtbar. Sie durchscheinen zu lassen kostet
|
||||
KEINE einzige Datei mehr, und auf der Adresse von Team Dogi kommt
|
||||
damit von selbst deren eigene Fassung (crew-buehne-lounge), ohne
|
||||
dass hier eine zweite Liste von neun Bildern stuende. Eine solche
|
||||
Liste waere die, die beim zehnten Motiv vergessen wird.
|
||||
|
||||
DER SCHLEIER IST NICHT DEKORATION. Ohne ihn waere die Liste links
|
||||
(Namen, Vorschauzeilen) Text direkt auf dem Foto. Er ist deshalb
|
||||
kraeftig und wird gemessen, nicht geschaetzt. */
|
||||
background:
|
||||
radial-gradient(120% 90% at 0% 0%, rgba(255, 255, 255, .03), transparent 55%),
|
||||
var(--flaeche);
|
||||
color-mix(in srgb, var(--flaeche) 88%, transparent);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@@ -250,6 +274,16 @@
|
||||
overflow-y: auto;
|
||||
padding: 18px 18px 8px;
|
||||
display: flex; flex-direction: column; gap: 3px;
|
||||
/* IM VERLAUF DARF MEHR DURCHKOMMEN als in der Liste links: Hier steht
|
||||
jede Zeile auf einer eigenen, deckenden Kachel -- dazwischen ist
|
||||
Luft, und durch die Luft sieht man den Raum. Links stehen Namen
|
||||
ohne Kachel, dort bleibt es dichter.
|
||||
Ein eigener Schleier statt einer Aenderung am Grund darueber: So
|
||||
hat jede der beiden Spalten ihren Wert, und eine Aenderung an der
|
||||
einen verstellt die andere nicht. */
|
||||
background: linear-gradient(180deg,
|
||||
color-mix(in srgb, var(--grund) 58%, transparent),
|
||||
color-mix(in srgb, var(--grund) 34%, transparent));
|
||||
/* Ein weicher Schleier am oberen Rand: Der Verlauf scrollt unter den
|
||||
Kopf, statt an einer harten Kante abgeschnitten zu wirken. */
|
||||
mask-image: linear-gradient(180deg, transparent, #000 14px);
|
||||
@@ -323,7 +357,19 @@
|
||||
padding: 10px 13px 7px;
|
||||
border: 1px solid var(--rand);
|
||||
border-radius: 14px 14px 14px 4px;
|
||||
background: rgba(255, 255, 255, .045);
|
||||
/* DECKEND, NICHT DURCHSCHEINEND (20.09.2026).
|
||||
|
||||
Hier stand `rgba(255,255,255,.045)` -- praktisch durchsichtig. Das
|
||||
war richtig, solange dahinter eine ruhige Flaeche lag. Seit das
|
||||
Buehnenbild durchscheint, waere es Schrift auf einem Foto: an der
|
||||
dunklen Stelle lesbar, an der hellen nicht, und beim Scrollen
|
||||
wechselt es.
|
||||
|
||||
`--kachel` statt einer festen Farbe: Darueber personalisiert jeder
|
||||
Account seine eigene Kachel (siehe weiter unten). Der Rueckfall
|
||||
ist die Hausfarbe -- wer nichts einstellt, bekommt das, was vorher
|
||||
auch da war, nur deckend. */
|
||||
background: var(--kachel, #131a25);
|
||||
min-width: 0;
|
||||
}
|
||||
.chat-nachricht[data-folge="ja"] .chat-nachricht__blase { border-radius: 14px 14px 14px 8px; }
|
||||
@@ -333,7 +379,10 @@
|
||||
.chat-nachricht[data-selbst="ja"] .chat-nachricht__blase {
|
||||
grid-column: 1;
|
||||
border-radius: 14px 14px 4px 14px;
|
||||
background: color-mix(in srgb, var(--akzent) 16%, transparent);
|
||||
/* Auch die eigene deckt jetzt. `color-mix` auf `transparent` liesse
|
||||
das Foto durch -- gemischt wird deshalb auf die Hausflaeche. */
|
||||
background: var(--kachel,
|
||||
color-mix(in srgb, var(--akzent) 16%, #131a25));
|
||||
border-color: color-mix(in srgb, var(--akzent) 30%, transparent);
|
||||
}
|
||||
.chat-nachricht[data-selbst="ja"][data-folge="ja"] .chat-nachricht__blase {
|
||||
@@ -666,9 +715,25 @@
|
||||
}
|
||||
.chat-nachricht[data-selbst="ja"] .chat-nachricht__blase {
|
||||
border-radius: 16px 16px 5px 16px;
|
||||
/* DIESE REGEL IST DIE ZWEITE FÜR DIESELBE KACHEL (20.09.2026).
|
||||
|
||||
Weiter oben steht schon eine -- und genau daran wäre die eigene
|
||||
Kachel beinahe transparent geblieben: Dort wurde `--kachel`
|
||||
eingebaut, hier gewinnt der Verlauf, und der kannte die Farbe
|
||||
nicht. Gemessen am Bildschirm: rgba(0,0,0,0), also nichts.
|
||||
|
||||
Dass es zwei Stellen gibt, ist gewachsen (Grundform oben,
|
||||
Feinschliff hier). Sie zusammenzulegen wäre ein größerer Umbau an
|
||||
einer Datei, die heute schon viel abbekommen hat -- deshalb
|
||||
stattdessen: BEIDE kennen `--kachel`, und diese Zeile hier sagt
|
||||
es dazu.
|
||||
|
||||
.95 ist zu .99 geworden: Seit das Bühnenbild durchscheint, sind
|
||||
fünf Prozent Foto in der Schriftfläche sichtbar -- und zwar
|
||||
wandernd, weil das Bild fest steht und die Kachel scrollt. */
|
||||
background: linear-gradient(160deg,
|
||||
color-mix(in srgb, var(--akzent) 26%, rgba(17, 24, 37, .95)),
|
||||
color-mix(in srgb, var(--akzent) 12%, rgba(12, 17, 27, .95)));
|
||||
color-mix(in srgb, var(--akzent) 26%, var(--kachel, rgba(17, 24, 37, .99))),
|
||||
color-mix(in srgb, var(--akzent) 12%, var(--kachel, rgba(12, 17, 27, .99))));
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, .10),
|
||||
0 2px 8px -3px color-mix(in srgb, var(--akzent) 45%, transparent);
|
||||
@@ -1637,6 +1702,89 @@
|
||||
.anruf__bild--ich { max-width: 88px; }
|
||||
.anruf__name { font-size: .8rem; color: var(--text-leise); }
|
||||
|
||||
/* =====================================================================
|
||||
WER IST DRAN (20.09.2026)
|
||||
|
||||
Filipe: „die soll auch viel besser geiler und spezieller aussehen,
|
||||
aber nicht so raushängen."
|
||||
|
||||
„Nicht raushängen" ist dabei die schärfere der beiden Vorgaben, und
|
||||
sie steht hier zuerst: Der Kasten ist 340 px breit und liegt in der
|
||||
Ecke. Alles darin muss mit dieser Breite auskommen — bei einem
|
||||
Gruppenanruf mit drei Leuten genauso wie bei einem Gespräch zu
|
||||
zweit. Deshalb ein Raster mit `auto-fit`, das misst statt zu
|
||||
rechnen, und ein Name, der umbricht statt zu schieben.
|
||||
|
||||
Vorher stand hier je Person das Wort „Verbunden" — bei dreien
|
||||
dreimal dasselbe Wort, ohne Namen.
|
||||
===================================================================== */
|
||||
.anruf__leute:has(.anruf__gesicht) {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(84px, 1fr));
|
||||
gap: 10px;
|
||||
justify-items: center;
|
||||
}
|
||||
.anruf__gesicht {
|
||||
display: flex; flex-direction: column; align-items: center; gap: 5px;
|
||||
min-width: 0; max-width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
.anruf__kreis {
|
||||
display: grid; place-items: center;
|
||||
width: 46px; height: 46px;
|
||||
border-radius: 50%;
|
||||
border: 1px solid color-mix(in srgb, var(--gut, #79d1a2) 45%, var(--rand));
|
||||
background: color-mix(in srgb, var(--gut, #79d1a2) 14%, #0b1018);
|
||||
color: color-mix(in srgb, var(--gut, #79d1a2) 35%, #ffffff);
|
||||
font-size: .95rem; font-weight: 700;
|
||||
letter-spacing: .02em;
|
||||
}
|
||||
/* Der Name darf umbrechen und wird notfalls gekürzt -- er ist das
|
||||
Einzige hier, dessen Länge wir nicht kennen. */
|
||||
.anruf__gesicht .anruf__name {
|
||||
max-width: 100%;
|
||||
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
||||
font-weight: 600; color: var(--text);
|
||||
}
|
||||
.anruf__stand { font-size: .72rem; color: var(--text-still); }
|
||||
|
||||
/* ---- Es klingelt noch -------------------------------------------------
|
||||
EIN RUHIGER PULS, kein Blinken. Augenschonend ist hier keine
|
||||
Geschmacksfrage: Der Kasten steht am Bildrand und läuft, solange das
|
||||
Gespräch läuft. Ein Blinken dort wäre nach zwei Minuten
|
||||
unerträglich. Deshalb ein weicher Ring, der nach außen ausläuft --
|
||||
dieselbe Bewegung wie beim Punkt in der Kopfzeile. */
|
||||
.anruf__gesicht[data-lage="wartet"] .anruf__kreis {
|
||||
border-color: color-mix(in srgb, var(--akzent) 45%, var(--rand));
|
||||
background: color-mix(in srgb, var(--akzent) 12%, #0b1018);
|
||||
color: color-mix(in srgb, var(--akzent) 30%, #ffffff);
|
||||
position: relative;
|
||||
}
|
||||
.anruf__gesicht[data-lage="wartet"] .anruf__kreis::after {
|
||||
content: "";
|
||||
position: absolute; inset: -5px;
|
||||
border-radius: 50%;
|
||||
border: 1px solid color-mix(in srgb, var(--akzent) 40%, transparent);
|
||||
animation: anruf-ring 2.4s ease-out infinite;
|
||||
}
|
||||
@keyframes anruf-ring {
|
||||
0% { transform: scale(.88); opacity: .75; }
|
||||
70% { transform: scale(1.18); opacity: 0; }
|
||||
100% { transform: scale(1.18); opacity: 0; }
|
||||
}
|
||||
/* Während es klingelt ist das Gesicht größer -- es ist in diesem
|
||||
Moment das Einzige, worauf man schaut. */
|
||||
.anruf__gesicht[data-lage="wartet"] .anruf__kreis { width: 58px; height: 58px; font-size: 1.1rem; }
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.anruf__gesicht[data-lage="wartet"] .anruf__kreis::after { animation: none; opacity: .5; }
|
||||
}
|
||||
@media (forced-colors: active) {
|
||||
.anruf__kreis { border: 2px solid CanvasText; }
|
||||
.anruf__gesicht[data-lage="wartet"] .anruf__kreis { border-color: Highlight; }
|
||||
.anruf__gesicht[data-lage="wartet"] .anruf__kreis::after { display: none; }
|
||||
}
|
||||
|
||||
.anruf__knoepfe { display: flex; flex-wrap: wrap; gap: 8px; }
|
||||
.anruf__knopf {
|
||||
min-height: 40px;
|
||||
@@ -2208,3 +2356,80 @@
|
||||
@media (forced-colors: active) {
|
||||
.anruf__stumm { border: 2px solid CanvasText; animation: none; }
|
||||
}
|
||||
|
||||
|
||||
/* =====================================================================
|
||||
MEINE KACHEL (20.09.2026)
|
||||
|
||||
Filipe: „jeder account soll seine kachel personalisieren können."
|
||||
|
||||
Der Knopf ist ein FARBFLECK, kein Wort. Er zeigt, was eingestellt
|
||||
ist — ein Knopf mit der Aufschrift „Kachel" müsste erst geöffnet
|
||||
werden, damit man sieht, was gerade gilt.
|
||||
===================================================================== */
|
||||
.chat__kachelknopf {
|
||||
flex: 0 0 auto;
|
||||
margin-left: auto;
|
||||
width: 30px; height: 30px;
|
||||
padding: 3px;
|
||||
border: 1px solid var(--rand-hell);
|
||||
border-radius: 9px;
|
||||
background: transparent;
|
||||
cursor: pointer;
|
||||
display: inline-flex; align-items: center; justify-content: center;
|
||||
}
|
||||
.chat__kachelknopf:hover { border-color: var(--akzent); }
|
||||
.chat__kachelknopf:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
|
||||
.chat__kachelknopf-probe {
|
||||
display: block; width: 100%; height: 100%;
|
||||
border-radius: 6px;
|
||||
/* Eine feine Innenkante, damit ein sehr dunkler Ton nicht aussieht
|
||||
wie ein Loch im Knopf. */
|
||||
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .10);
|
||||
}
|
||||
/* „Neu" steht danach und schiebt sich nicht mehr selbst -- der
|
||||
Farbfleck hat den auto-Rand übernommen. Zwei auto-Ränder
|
||||
nebeneinander teilen sich den Platz und reißen die Knöpfe
|
||||
auseinander; derselbe Fehler stand am 11.09. schon im Verlaufskopf. */
|
||||
.chat__kopf #neu-oeffnen { flex: 0 0 auto; margin-left: 8px; }
|
||||
|
||||
.chat-kachelwahl__gitter {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(62px, 1fr));
|
||||
gap: 8px;
|
||||
margin: 14px 0 4px;
|
||||
}
|
||||
.chat-kachelwahl__ton {
|
||||
position: relative;
|
||||
min-height: 48px; /* am Finger treffbar */
|
||||
border: 1px solid var(--rand);
|
||||
border-radius: 12px;
|
||||
cursor: pointer;
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
color: var(--text);
|
||||
font: inherit; font-size: .84rem;
|
||||
}
|
||||
.chat-kachelwahl__wort { opacity: .9; }
|
||||
.chat-kachelwahl__ton:hover { border-color: var(--rand-hell); }
|
||||
.chat-kachelwahl__ton:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
|
||||
/* DIE WAHL WIRD MIT EINEM HAKEN ANGEZEIGT, nicht nur mit einem
|
||||
helleren Rahmen: Auf zwölf dunklen Feldern ist ein Rahmen mehr der
|
||||
Unterschied, den man sucht — ein Haken ist der, den man sieht. */
|
||||
.chat-kachelwahl__ton[aria-checked="true"] {
|
||||
border-color: var(--akzent);
|
||||
box-shadow: 0 0 0 2px color-mix(in srgb, var(--akzent) 45%, transparent);
|
||||
}
|
||||
.chat-kachelwahl__ton[aria-checked="true"]::after {
|
||||
content: "¹3";
|
||||
position: absolute; top: 3px; right: 6px;
|
||||
font-size: .8rem; font-weight: 700;
|
||||
color: var(--akzent);
|
||||
}
|
||||
|
||||
@media (forced-colors: active) {
|
||||
.chat-kachelwahl__ton[aria-checked="true"] { border: 3px solid Highlight; }
|
||||
.chat__kachelknopf { border: 1px solid CanvasText; }
|
||||
/* Im Kontrastmodus gibt es keine Farbflächen -- dann sind die zwölf
|
||||
Töne ununterscheidbar, und nur der Name trägt. Er steht ohnehin
|
||||
im aria-label und im title. */
|
||||
}
|
||||
|
||||
@@ -439,8 +439,35 @@ body.gate {
|
||||
vervollständigt ihn. Deshalb tritt sie zurück, statt zu warnen —
|
||||
augenschonend heißt hier ausdrücklich auch: keine Signalfarbe für
|
||||
etwas, das keine Warnung ist. */
|
||||
/* ---- DER ABSTAND IST EINE REGEL, KEINE ZAHL (korrigiert 20.09.2026) --
|
||||
|
||||
Hier stand `margin: -18px 0 26px`. Die -18 waren gegen die 26 px
|
||||
gerechnet, die `.unterzeile` darueber mitbringt -- Netto acht Pixel
|
||||
Abstand, und auf der Torseite sah das richtig aus.
|
||||
|
||||
AUF DER BEFINDENS-SEITE UEBERLAGERTEN SICH DIE BEIDEN ABSAETZE UM
|
||||
GENAU 18 PIXEL. Dort steht die Unterzeile in einer Kopfzeile, und
|
||||
`start.css` setzt deren `margin-bottom` auf 0. Aus 26 minus 18 wurde
|
||||
0 minus 18. Zwei fuer sich richtige Regeln, und dazwischen Text ueber
|
||||
Text -- ausgerechnet im Satz „Deine Antworten liest niemand ausser
|
||||
dir", also dort, wo Vertrauen entsteht.
|
||||
|
||||
Gefunden hat es ein Bildschirmfoto, nicht das Lesen: Beide Regeln
|
||||
sehen einzeln vernuenftig aus.
|
||||
|
||||
DIE LEHRE IST NICHT „-18 auf -8 aendern" -- das waere dieselbe Zahl
|
||||
mit einem anderen Wert und beim naechsten Zusammentreffen wieder
|
||||
falsch. Stattdessen bestimmt der Absatz DAVOR seinen Abstand selbst,
|
||||
und zwar nur dann, wenn der Zusatz wirklich folgt (`:has`). Damit
|
||||
sind es IMMER acht Pixel, egal in welcher Umgebung.
|
||||
|
||||
Die Klasse steht doppelt (`.unterzeile.unterzeile`), um dieselbe
|
||||
Staerke wie `.willkommen .unterzeile` zu uebertreffen -- sonst
|
||||
entschiede die Ladereihenfolge, und gate.css laedt zuerst. */
|
||||
.unterzeile.unterzeile:has(+ .unterzeile--zusatz) { margin-bottom: 8px; }
|
||||
|
||||
.unterzeile--zusatz {
|
||||
margin: -18px 0 26px;
|
||||
margin: 0 0 26px;
|
||||
padding-left: 11px;
|
||||
border-left: 2px solid var(--rand);
|
||||
max-width: 62ch;
|
||||
|
||||
@@ -251,6 +251,82 @@
|
||||
* klingelt …" -- man sah nicht, wen man anruft. */
|
||||
const wer = (text) => { const w = $('anruf-wer'); if (w) w.textContent = text; };
|
||||
|
||||
/* =====================================================================
|
||||
WER IST DRAN -- MIT NAMEN UND GESICHT (20.09.2026)
|
||||
|
||||
Filipe, zur Anrufbox: „die soll auch viel besser geiler und
|
||||
spezieller aussehen, aber nicht so raushaengen."
|
||||
|
||||
DER GROESSTE MANGEL WAR KEIN SCHOENHEITSFEHLER. In einem Anruf
|
||||
ohne Video stand unter dem Kasten das Wort „Verbunden" -- einmal
|
||||
je Person. Bei dreien stand es dreimal, und man sah nicht, WER
|
||||
verbunden war. In einer Gruppe ist genau das die Frage: Ist Luna
|
||||
schon drin? Hoert der Modi mit?
|
||||
|
||||
Es gibt keine Profilbilder im Anruf -- die Sitzung liefert sie
|
||||
nicht mit, und sie dafuer durch eine Abfrage zu holen, die auf
|
||||
JEDER Seite laeuft, waere an der falschen Stelle gespart und an
|
||||
der falschen teuer. Stattdessen dasselbe Mittel wie im Chat: der
|
||||
Anfangsbuchstabe in einem Kreis. Er ist sofort da, kostet nichts
|
||||
und unterscheidet in einer Gruppe von drei bis fuenf Leuten
|
||||
zuverlaessig.
|
||||
|
||||
WAEHREND ES KLINGELT steht dort, WEN man anruft -- gross, mit
|
||||
einem ruhigen Puls. Vorher war die Flaeche in diesem Moment leer,
|
||||
und ein leerer Kasten mit „Es klingelt ..." sieht aus wie einer,
|
||||
der haengt. Es ist die Sekunde, in der man am unsichersten ist.
|
||||
===================================================================== */
|
||||
|
||||
/** Die Namen aller, die im Anruf sind -- id -> Name.
|
||||
*
|
||||
* Auf dem Anruf selbst und nicht daneben: Endet er, ist die Karte
|
||||
* mit ihm weg. Eine Karte, die einen Anruf ueberlebt, zeigt beim
|
||||
* naechsten Namen von gestern. */
|
||||
function namenMerken(liste) {
|
||||
if (!anruf || !Array.isArray(liste)) return;
|
||||
if (!anruf.namen) anruf.namen = new Map();
|
||||
for (const w of liste) if (w && w.id != null) anruf.namen.set(w.id, w.name || '');
|
||||
}
|
||||
|
||||
/** Ein bis zwei Buchstaben aus einem Namen -- dieselbe Regel wie im
|
||||
* Chat: bei zwei Wörtern die Anfangsbuchstaben beider, sonst der
|
||||
* erste. „Luna Sanchez" -> LS, „Dogi" -> D. */
|
||||
function zeichenVon(name) {
|
||||
const teile = String(name || '').trim().split(/\s+/).filter(Boolean);
|
||||
if (!teile.length) return '?';
|
||||
if (teile.length === 1) return teile[0][0].toUpperCase();
|
||||
return (teile[0][0] + teile[teile.length - 1][0]).toUpperCase();
|
||||
}
|
||||
|
||||
/** Ein Gesichtsfeld: Kreis mit Buchstaben, Name darunter.
|
||||
*
|
||||
* `lage` ist 'da' (verbunden) oder 'wartet' (klingelt noch) -- das
|
||||
* Stilblatt macht daraus den Unterschied zwischen ruhig und
|
||||
* pulsierend. Der Zustand steht auch im Text darunter: Ein Puls
|
||||
* allein ist nichts, was ein Vorleseprogramm ansagen kann. */
|
||||
function gesichtsfeld(name, lage, stumm) {
|
||||
const k = el('div', 'anruf__gesicht');
|
||||
k.dataset.lage = lage;
|
||||
const kreis = el('span', 'anruf__kreis', zeichenVon(name));
|
||||
/* Der Kreis traegt zwei Buchstaben -- als Bild, nicht als Text.
|
||||
Ein Vorleseprogramm soll „Luna Sanchez, klingelt" sagen und
|
||||
nicht „L S". */
|
||||
kreis.setAttribute('aria-hidden', 'true');
|
||||
k.append(kreis);
|
||||
if (stumm) {
|
||||
/* KEINE WIEDERHOLUNG DESSEN, WAS DIREKT DARUEBER STEHT.
|
||||
Beim Anruf zu zweit sagt die Kopfzeile schon „Luna Sanchez" und
|
||||
„Es klingelt ..." -- beides zwei Zeilen tiefer noch einmal
|
||||
hinzuschreiben macht den Kasten hoeher und sagt nichts dazu.
|
||||
Fuer Vorleseprogramme bleibt der Name trotzdem am Element. */
|
||||
k.setAttribute('aria-label', `${name || 'Jemand'} – klingelt`);
|
||||
return k;
|
||||
}
|
||||
k.append(el('span', 'anruf__name', name || 'Jemand'));
|
||||
k.append(el('span', 'anruf__stand', lage === 'da' ? 'ist dabei' : 'klingelt …'));
|
||||
return k;
|
||||
}
|
||||
|
||||
/** Einen Schalter auf an/aus stellen.
|
||||
*
|
||||
* Die Aufschrift bleibt IMMER dieselbe (die Sache), der Zustand
|
||||
@@ -408,13 +484,30 @@
|
||||
}
|
||||
|
||||
async function starten(raumId, mitVideo, raumName) {
|
||||
/* WEN RUFE ICH AN? Der Chat weiss es und gibt es mit. Faellt
|
||||
der Name aus (aelterer Aufruf), bleibt es bei „Anruf" --
|
||||
das ist immer noch richtig, nur weniger. */
|
||||
wer(raumName || 'Anruf');
|
||||
if (anruf) return;
|
||||
kastenBauen();
|
||||
$('anruf').hidden = false;
|
||||
/* WEN RUFE ICH AN? Der Chat weiss es und gibt es mit. Faellt
|
||||
der Name aus (aelterer Aufruf), bleibt es bei „Anruf" --
|
||||
das ist immer noch richtig, nur weniger.
|
||||
|
||||
NACH `kastenBauen()`, UND DAS IST DER PUNKT (20.09.2026):
|
||||
Vorher stand diese Zeile DAVOR. Da gibt es das Element
|
||||
`#anruf-wer` noch gar nicht -- `wer()` fand nichts, tat nichts,
|
||||
und der Name war weg. Oben stand deshalb bei JEDEM ersten Anruf
|
||||
„Anruf" statt „Luna Sanchez", obwohl der Chat ihn korrekt
|
||||
mitgab. Der Kommentar daneben beschrieb die Absicht und nicht,
|
||||
was passierte -- ein Kommentar, der eine Absicht beschreibt,
|
||||
erfuellt sie nicht.
|
||||
|
||||
Gefunden hat es ein Bildschirmfoto, nicht das Lesen: Der Code
|
||||
liest sich richtig, und der Rueckfall „Anruf" ist plausibel
|
||||
genug, um nicht aufzufallen.
|
||||
|
||||
Der frueher hier stehende `if (anruf) return;` ist mit nach oben
|
||||
gewandert. Das ist auch sachlich besser: Laeuft schon ein
|
||||
Gespraech, soll ein zweiter Aufruf es nicht umbenennen. */
|
||||
wer(raumName || 'Anruf');
|
||||
/* JEDES GESPRAECH FAENGT LEISE AN (20.09.2026) -- an BEIDEN
|
||||
Wegen, Anrufen und Rangehen. Einer allein waere die
|
||||
Haelfte, und die andere Haelfte faellt niemandem auf,
|
||||
@@ -449,6 +542,10 @@
|
||||
$('anruf-video').hidden = !mitVideo;
|
||||
if (mitVideo) $('anruf-video').setAttribute('aria-pressed', 'true');
|
||||
lage('Es klingelt …');
|
||||
/* JETZT ZEICHNEN, nicht erst wenn jemand rangeht: Dies ist der
|
||||
Moment, in dem die Flaeche bisher leer war -- und ein leerer
|
||||
Kasten mit „Es klingelt ..." sieht aus wie einer, der haengt. */
|
||||
leuteZeichnen();
|
||||
/* DAS FREIZEICHEN. Ein stiller Kasten mit laufender Uhr sagt nur,
|
||||
dass etwas passiert -- nicht, was. */
|
||||
freiTon();
|
||||
@@ -528,6 +625,7 @@
|
||||
|
||||
/* Mit allen, die schon dabei sind, eine Verbindung aufbauen --
|
||||
aber das ANGEBOT macht nur, wer die kleinere Nummer hat. */
|
||||
namenMerken(d.wer);
|
||||
for (const p of d.wer || []) {
|
||||
if (p.id === ichId) continue;
|
||||
if (ichId < p.id) angebotMachen(p.id);
|
||||
@@ -580,20 +678,38 @@
|
||||
eigen.srcObject = anruf.eigener;
|
||||
ziel.append(eigen);
|
||||
}
|
||||
for (const [wer, strom] of anruf.stroeme) {
|
||||
for (const [werId, strom] of anruf.stroeme) {
|
||||
if (anruf.video) {
|
||||
const v = el('video', 'anruf__bild');
|
||||
v.autoplay = true; v.playsInline = true;
|
||||
v.srcObject = strom;
|
||||
ziel.append(v);
|
||||
} else {
|
||||
/* Der Ton muss abgespielt werden -- das Element bleibt, nur
|
||||
unsichtbar. Es traegt die Verbindung, nicht die Anzeige. */
|
||||
const t = el('audio');
|
||||
t.autoplay = true;
|
||||
t.srcObject = strom;
|
||||
ziel.append(t);
|
||||
ziel.append(el('span', 'anruf__name', 'Verbunden'));
|
||||
/* HIER STAND „Verbunden" -- einmal je Person, ohne Namen.
|
||||
Bei dreien dreimal dasselbe Wort, und man sah nicht, wer. */
|
||||
ziel.append(gesichtsfeld(anruf.namen?.get(werId), 'da'));
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- NOCH NIEMAND DRAN: zeigen, WEN man anruft ----------------
|
||||
Die Flaeche war in diesem Moment leer, und ein leerer Kasten mit
|
||||
„Es klingelt ..." sieht aus wie einer, der haengt -- ausgerechnet
|
||||
in der Sekunde, in der man am unsichersten ist. */
|
||||
if (!anruf.video && !anruf.stroeme.size) {
|
||||
const gegenueber = $('anruf-wer')?.textContent?.trim();
|
||||
/* „Anruf" ist der Rueckfalltext, kein Name -- dann lieber gar
|
||||
kein Gesicht als ein Kreis mit „A" darin. */
|
||||
if (gegenueber && gegenueber !== 'Anruf') {
|
||||
/* `true`: Name und Zustand stehen schon in der Kopfzeile --
|
||||
siehe die Begruendung in `gesichtsfeld`. */
|
||||
ziel.append(gesichtsfeld(gegenueber, 'wartet', true));
|
||||
}
|
||||
void wer;
|
||||
}
|
||||
/* Der Zustand gilt auch fuer die Elemente, die es gerade eben noch
|
||||
nicht gab -- und die Geraeteauswahl kann erst hier entstehen,
|
||||
@@ -975,6 +1091,7 @@
|
||||
if (!d.laeuft) { nachfrageStoppen(); tonAus(); lage('Der Anruf ist vorbei.');
|
||||
setTimeout(() => { if (anruf) auflegen(); }, 1500); return; }
|
||||
|
||||
namenMerken(d.wer);
|
||||
const andere = (d.wer || []).filter((w) => w.id !== ichId);
|
||||
if (!andere.length) return; /* es klingelt weiter, alles richtig */
|
||||
|
||||
@@ -1048,6 +1165,21 @@
|
||||
Den richtigen Zeitpunkt kennt nur die Verbindung selbst --
|
||||
`onconnectionstatechange` meldet ihn (siehe oben). */
|
||||
lage('Baut auf …');
|
||||
/* DEN NAMEN MITNEHMEN (20.09.2026).
|
||||
|
||||
Hier fehlte er, und das Loch war genau umgekehrt zu dem, was
|
||||
man erwartet: Wer ANGERUFEN wird, erfaehrt die Namen ueber
|
||||
`dazustossen` (die Antwort des Servers enthaelt alle). Wer
|
||||
ANRUFT, bekommt beim Start nur sich selbst -- alle weiteren
|
||||
kommen ausschliesslich ueber dieses Ereignis. Ohne diese Zeile
|
||||
stand bei ihm unter jedem Kreis „Jemand", und ausgerechnet der
|
||||
Anrufer sah als Einziger keine Namen.
|
||||
|
||||
Gefunden hat es die Pruefung, aber erst, nachdem sie
|
||||
verschaerft wurde: Der erste Anlauf verlangte nur „Name laenger
|
||||
als ein Zeichen" -- und „Jemand" ist sechs Zeichen lang. Eine
|
||||
Pruefung, die den Rueckfalltext durchlaesst, prueft nichts. */
|
||||
namenMerken([d.person]);
|
||||
/* Der Neue: Angebot macht, wer die kleinere Nummer hat. */
|
||||
if (ichId < d.person.id) angebotMachen(d.person.id);
|
||||
else verbindungFuer(d.person.id);
|
||||
|
||||
@@ -30,6 +30,124 @@
|
||||
'use strict';
|
||||
|
||||
const $ = (id) => document.getElementById(id);
|
||||
|
||||
/* =====================================================================
|
||||
MEINE KACHEL (20.09.2026)
|
||||
|
||||
Filipe: „jeder account soll seine kachel personalisieren koennen."
|
||||
|
||||
DIE TABELLE IST LEER UND WIRD GEFUELLT. Sie steht nicht als feste
|
||||
Liste hier: Die zwoelf Toene gehoeren dem Server (CHAT_KACHELN in
|
||||
workspace-chat.js), und eine zweite Fassung im Browser waere beim
|
||||
dreizehnten die vergessene -- dieselbe Krankheit wie bei KANAL_WORT
|
||||
auf dem Highlight-Brett, die heute behoben wurde.
|
||||
|
||||
WOZU SIE HIER GEBRAUCHT WIRD: Die Nachricht bringt einen
|
||||
SCHLUESSEL mit („moos"), keine Farbe. Waere die Farbe selbst in der
|
||||
Nachricht, stuende ein CSS-Wert aus der Datenbank in der Seite --
|
||||
und ein vertippter oder boeswilliger Eintrag koennte faerben, was
|
||||
er will. So kommt nur durch, was in der Tabelle steht. */
|
||||
const KACHEL_FARBE = Object.create(null);
|
||||
let kachelListe = [];
|
||||
let meineKachel = null;
|
||||
|
||||
async function kachelnLaden() {
|
||||
try {
|
||||
const a2 = await fetch('/workspace/api/chat/kacheln', { credentials: 'same-origin' });
|
||||
if (!a2.ok) return;
|
||||
const d = await a2.json();
|
||||
kachelListe = Array.isArray(d.kacheln) ? d.kacheln : [];
|
||||
meineKachel = d.meine || null;
|
||||
for (const k of kachelListe) KACHEL_FARBE[k.wert] = k.farbe;
|
||||
kachelKnopfZeigen();
|
||||
} catch { /* ohne die Liste bleibt alles beim Standard -- kein Grund
|
||||
zu scheitern, der Chat funktioniert weiter */ }
|
||||
}
|
||||
|
||||
function kachelKnopfZeigen() {
|
||||
const knopf = $('kachel-oeffnen');
|
||||
if (!knopf) return;
|
||||
/* OHNE LISTE KEIN KNOPF. Ein Knopf, der eine leere Auswahl oeffnet,
|
||||
ist schlimmer als keiner -- man drueckt ihn und sucht den Fehler
|
||||
bei sich. */
|
||||
knopf.hidden = kachelListe.length === 0;
|
||||
const probe = knopf.querySelector('.chat__kachelknopf-probe');
|
||||
if (probe) {
|
||||
probe.style.background = KACHEL_FARBE[meineKachel] || KACHEL_FARBE.grund || '#131a25';
|
||||
}
|
||||
}
|
||||
|
||||
function kachelwahlBauen() {
|
||||
const gitter = $('kachel-gitter');
|
||||
if (!gitter) return;
|
||||
gitter.textContent = '';
|
||||
for (const k of kachelListe) {
|
||||
const b = el('button', 'chat-kachelwahl__ton');
|
||||
b.type = 'button';
|
||||
b.dataset.wert = k.wert;
|
||||
b.style.background = k.farbe;
|
||||
b.setAttribute('role', 'radio');
|
||||
/* DER NAME GEHOERT DAZU, nicht nur die Farbe. Wer Farben schlecht
|
||||
unterscheidet, waehlt sonst zwoelf Mal dasselbe Kaestchen --
|
||||
und ein Vorleseprogramm saehe zwoelf namenlose Knoepfe. */
|
||||
b.setAttribute('aria-label', k.name);
|
||||
b.title = k.name;
|
||||
b.setAttribute('aria-checked', String((meineKachel || 'grund') === k.wert));
|
||||
/* EINE VORSCHAU MIT ECHTEM TEXT, nicht nur ein Farbfleck: Gewaehlt
|
||||
wird ja nicht die Farbe, sondern wie die eigene Nachricht
|
||||
aussieht. */
|
||||
b.append(el('span', 'chat-kachelwahl__wort', 'Aa'));
|
||||
b.addEventListener('click', () => kachelSetzen(k.wert, b));
|
||||
gitter.append(b);
|
||||
}
|
||||
}
|
||||
|
||||
async function kachelSetzen(wert, knopf) {
|
||||
const vorher = meineKachel;
|
||||
/* SOFORT UMSTELLEN, dann speichern. Wer eine Farbe antippt und eine
|
||||
halbe Sekunde nichts sieht, tippt noch einmal. Geht es schief,
|
||||
wird es zurueckgenommen -- und zwar sichtbar. */
|
||||
meineKachel = (wert === 'grund') ? null : wert;
|
||||
for (const b of knopf.parentElement.querySelectorAll('.chat-kachelwahl__ton')) {
|
||||
b.setAttribute('aria-checked', String(b === knopf));
|
||||
}
|
||||
kachelKnopfZeigen();
|
||||
eigeneKachelnFaerben();
|
||||
try {
|
||||
const a2 = await hole('/workspace/api/chat/kachel', {
|
||||
method: 'PUT', headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ kachel: wert }),
|
||||
});
|
||||
if (!a2.ok) throw new Error('abgelehnt');
|
||||
} catch {
|
||||
meineKachel = vorher;
|
||||
kachelKnopfZeigen();
|
||||
eigeneKachelnFaerben();
|
||||
kachelwahlBauen();
|
||||
melde('Die Farbe konnte nicht gespeichert werden.');
|
||||
}
|
||||
}
|
||||
|
||||
/** Die eigenen Nachrichten im offenen Verlauf sofort umfaerben.
|
||||
*
|
||||
* OHNE NEU ZU LADEN: Der Verlauf neu zu holen hiesse, beim Faerben
|
||||
* nach unten zu springen und die Stelle zu verlieren, an der man
|
||||
* gerade liest. Die Farbe steht ohnehin nur an der Kachel. */
|
||||
function eigeneKachelnFaerben() {
|
||||
const farbe = KACHEL_FARBE[meineKachel] || null;
|
||||
for (const z of document.querySelectorAll('.chat-nachricht[data-selbst="ja"] .chat-nachricht__blase')) {
|
||||
if (farbe) z.style.setProperty('--kachel', farbe);
|
||||
else z.style.removeProperty('--kachel');
|
||||
}
|
||||
}
|
||||
|
||||
function kachelwahlBedienen() {
|
||||
const knopf = $('kachel-oeffnen'), dlg = $('kachel-wahl'), zu = $('kachel-zu');
|
||||
if (!knopf || !dlg) return;
|
||||
knopf.addEventListener('click', () => { kachelwahlBauen(); dlg.showModal(); });
|
||||
zu?.addEventListener('click', () => dlg.close());
|
||||
}
|
||||
|
||||
const el = (tag, klasse, text) => {
|
||||
const k = document.createElement(tag);
|
||||
if (klasse) k.className = klasse;
|
||||
@@ -1090,6 +1208,23 @@
|
||||
if (n.angeheftet) zeile.dataset.angeheftet = 'ja';
|
||||
|
||||
const blase = el('div', 'chat-nachricht__blase');
|
||||
/* DIE EIGENE KACHELFARBE (20.09.2026).
|
||||
|
||||
Filipe: „jeder account soll seine kachel personalisieren
|
||||
koennen."
|
||||
|
||||
Der Wert kommt vom Server als SCHLUESSEL, nicht als Farbe --
|
||||
hier wird er in der Tabelle nachgeschlagen, die ebenfalls vom
|
||||
Server kam. Waere die Farbe selbst in der Nachricht, stuende
|
||||
ein CSS-Wert aus der Datenbank in der Seite; ein vertippter
|
||||
oder boeswilliger Eintrag koennte dann faerben, was er will.
|
||||
|
||||
Kein Wert heisst Standard, und dafuer steht gar nichts da --
|
||||
der Rueckfall liegt im Stilblatt (`var(--kachel, …)`). Eine
|
||||
Zeile, die die Standardfarbe noch einmal hinschreibt, waere
|
||||
eine zweite Stelle, an der sie stimmen muss. */
|
||||
const kFarbe = KACHEL_FARBE[n.von_kachel];
|
||||
if (kFarbe) blase.style.setProperty('--kachel', kFarbe);
|
||||
if (!gleicheFolge && !n.selbst && offen.art !== 'direkt') {
|
||||
blase.append(el('p', 'chat-nachricht__von', n.von));
|
||||
}
|
||||
@@ -2811,6 +2946,11 @@
|
||||
window.werZeigen?.(ich);
|
||||
|
||||
await raeumeLaden();
|
||||
/* DIE KACHELN VOR DEM ERSTEN VERLAUF. Kaemen sie danach, stuenden
|
||||
die ersten Nachrichten kurz in Standardfarbe und faerbten sich
|
||||
dann um -- eine Seite, die sich unter den Fingern aendert. */
|
||||
await kachelnLaden();
|
||||
kachelwahlBedienen();
|
||||
stromOeffnen();
|
||||
unterbauBeobachten();
|
||||
unterbauMessen();
|
||||
|
||||
+15
-15
@@ -12,19 +12,19 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -291,14 +291,14 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -168,13 +168,13 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -7,14 +7,14 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -160,13 +160,13 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+19
-19
@@ -12,24 +12,24 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -277,16 +277,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -7,17 +7,17 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -108,12 +108,12 @@
|
||||
</main>
|
||||
|
||||
<!-- Der Fuß gehört zu jeder Seite - siehe pruef-css-klassen. -->
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -7,16 +7,16 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -80,13 +80,13 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202609202225" 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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -89,14 +89,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+47
-17
@@ -12,26 +12,26 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -70,9 +70,39 @@
|
||||
<section class="chat__spalte chat__spalte--liste" aria-labelledby="liste-titel">
|
||||
<div class="chat__kopf">
|
||||
<h1 class="chat__titel" id="liste-titel">Gespräche</h1>
|
||||
<!-- MEINE KACHEL (20.09.2026).
|
||||
Filipe: "jeder account soll seine kachel personalisieren
|
||||
koennen."
|
||||
Der Knopf steht LINKS bei den Gespraechen und nicht rechts
|
||||
im Verlauf: Es ist eine Einstellung ueber MICH, nicht ueber
|
||||
dieses eine Gespraech. Rechts stehen ausserdem schon fuenf
|
||||
Knoepfe, und ein sechster hat dort am Handy keinen Platz
|
||||
mehr -- das war am 19.09. schon einmal der Fehler. -->
|
||||
<button type="button" class="chat__kachelknopf" id="kachel-oeffnen"
|
||||
aria-label="Meine Kachelfarbe wählen"
|
||||
title="Meine Kachelfarbe">
|
||||
<span class="chat__kachelknopf-probe" aria-hidden="true"></span>
|
||||
</button>
|
||||
<button type="button" class="knopf knopf--klein" id="neu-oeffnen">Neu</button>
|
||||
</div>
|
||||
|
||||
<!-- Die Auswahl. Als <dialog>, wie die anderen Nachfragen im
|
||||
Haus -- ein eigenes Aufklapp-Menue waere ein zweites Muster
|
||||
fuer dieselbe Sache. -->
|
||||
<dialog class="nachfrage chat-kachelwahl" id="kachel-wahl">
|
||||
<h2 class="nachfrage__titel">Deine Kachel</h2>
|
||||
<p class="nachfrage__text">
|
||||
So sehen deine Nachrichten für alle anderen aus. Alle Töne sind
|
||||
gleich dunkel – damit bleibt die Schrift überall gleich gut
|
||||
lesbar.
|
||||
</p>
|
||||
<div class="chat-kachelwahl__gitter" id="kachel-gitter" role="radiogroup"
|
||||
aria-label="Kachelfarbe"></div>
|
||||
<div class="nachfrage__knoepfe">
|
||||
<button type="button" class="abmelden" id="kachel-zu">Fertig</button>
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<!-- Suchen erst, wenn es etwas zu suchen gibt (chat.js blendet
|
||||
es ab acht Gesprächen ein). Ein Suchfeld über drei Einträgen
|
||||
ist Zierde. -->
|
||||
@@ -384,18 +414,18 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609201909"></script>
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909"></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225"></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225"></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225"></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=202609201909"></script>
|
||||
<script src="assets/js/chat.js?v=202609201909"></script>
|
||||
<script src="assets/js/anruf.js?v=202609202225"></script>
|
||||
<script src="assets/js/chat.js?v=202609202225"></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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -179,14 +179,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/content.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/content.js?v=202609202225" 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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="gate gate--crew">
|
||||
@@ -358,6 +358,6 @@
|
||||
␍
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -22,25 +22,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609201909",
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609202225",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609201909",
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609202225",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609201909",
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609202225",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609201909",
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609202225",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -108,14 +108,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -7,14 +7,14 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,12 +106,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -146,12 +146,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202609202225" 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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="gate">
|
||||
@@ -411,6 +411,6 @@
|
||||
</div>
|
||||
␍␍
|
||||
|
||||
<script src="assets/js/gate.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609202225" 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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -383,14 +383,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -444,12 +444,12 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909"></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909"></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909"></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909"></script>
|
||||
<script src="assets/js/leistung.js?v=202609201909"></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225"></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225"></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225"></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225"></script>
|
||||
<script src="assets/js/leistung.js?v=202609202225"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -453,13 +453,13 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609202225" 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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -214,15 +214,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -7,14 +7,14 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -134,11 +134,11 @@
|
||||
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
||||
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
||||
die seit dem 07.09. jede Seite danach absucht. -->
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202609202225" 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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,14 +106,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
|
||||
<script src="assets/js/ki.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/report.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/report.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -173,13 +173,13 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -12,21 +12,21 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/heim.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -678,13 +678,13 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/start.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/start.js?v=202609202225" 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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -85,14 +85,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
|
||||
<script src="assets/js/ki.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609202225" 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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -150,15 +150,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -7,18 +7,18 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -111,12 +111,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/talente.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -7,20 +7,20 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -110,12 +110,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/team.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/team.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -7,20 +7,20 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu
|
||||
@@ -84,11 +84,11 @@
|
||||
Kaputt ist dabei nichts -- er funktioniert. Genau deshalb faellt
|
||||
es niemandem auf, und deshalb prueft pruef-css-klassen die
|
||||
ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. -->
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -112,12 +112,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202609202225" 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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -126,12 +126,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -7,18 +7,18 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des
|
||||
Treffs biegt der Server genau diesen Dateinamen auf crew-haus.css
|
||||
um, und die Seite kommt schon beim ERSTEN Abruf in Lila und
|
||||
Babyblau an -- ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -221,11 +221,11 @@
|
||||
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
||||
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
||||
die seit dem 07.09. jede Seite danach absucht. -->
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -12,22 +12,22 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -149,14 +149,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609202225" 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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -217,11 +217,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -7,15 +7,15 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -144,11 +144,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>␍
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>␍
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202609202225" 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=202609201909" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609201909" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609202225" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609202225" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609202225" />
|
||||
<!-- 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=202609201909" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609202225" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -190,14 +190,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202609202225" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609201909" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609202225" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609202225" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user