Anleitung, Etappe 1: die Einweisung fuer Creator steht

Erste von sieben Etappen aus dem geprueften Bauplan
(`02 Projekte/Anleitung-Kachel – Bauplan.md`). Ein Creator oeffnet die
neue Kachel und sieht seine vollstaendige Einweisung: drei Saetze „In
60 Sekunden", fuenf Erste Schritte, achtzehn Karten in drei Stufen,
„Das kannst du liegen lassen", sein Rhythmus und vier Fragen.

WAS NICHT IN DER DATENBANK STEHT -- und das ist der Kern.

Eine Karte zeigt Name, Symbol, Farbe und Adresse ihrer echten Kachel.
Nichts davon ist gespeichert. Es steht in bereiche.js, genau einmal,
und wird ueber einen abgeleiteten Schluessel verbunden
(`bereich.html?b=live` -> `bereich:live`). Haette ich den Namen
danebengeschrieben, erklaerte die Anleitung nach der ersten Umbenennung
eine Kachel, die es so nicht mehr gibt -- und niemandem fiele es auf.
Gespeichert ist nur, was der Bauplan NEU bringt: die Stufe und die drei
Saetze Wozu / Was du hier tust / Merke.

Der Schluessel muss abgeleitet sein, weil zwei Faelle sonst
zusammenfallen: `bereich.html` ist FUENF Kacheln, und `profil.html`
heisst beim Creator „Mein Profil" und beim Manager „Creator-Profile".

DIE WICHTIGSTE PRUEFUNG STEHT NICHT IM BAUPLAN.

pruef-anleitung.mjs fragt in BEIDE Richtungen: Hat jede Kachel, die
diese Rolle sieht, genau eine Karte -- und zeigt jede Karte auf eine
Kachel, die es wirklich gibt? Beides kann lautlos kaputtgehen, und der
Bauplan sah dafuer nur einen Hinweis in der Pflege-Ansicht vor. Der
hilft nur, wenn jemand hinsieht.

Dafuer wird bereiche.js in der Pruefung AUSGEFUEHRT (node:vm mit einem
winzigen Browser-Ersatz), nicht mit einem Muster durchsucht. Ein Muster
waere eine ungenaue Nachbildung und wuerde bei der ersten ungewohnten
Schreibweise „alles in Ordnung" melden.

DREI BEFUNDE BEIM BAUEN, ALLE GEMESSEN STATT GEAHNT:

1. Ton 48. Das Hauswerkzeug schlug #b0ec0a vor -- Abstand 0,0815 zur
   Kachel „Agentur", die ein Creator direkt daneben sieht, und 13,28:1
   Kontrast. Der Grund: Es rechnet gegen alle 47 Toene, aber die Haelfte
   gehoert zum anderen Haus und erscheint nie auf demselben Bildschirm.
   Gegen die 24 Toene DIESES Hauses gerechnet: #ff7eed, Abstand 0,1168
   (43 % mehr) bei sanfteren 8,46:1. Die Herleitung steht in start.css,
   samt Warnung, dass ein erneuter Werkzeuglauf es verschlechtern wuerde.

2. Die Erste-Schritte-Verweise waren 20 px hoch. Gemessen bei 412 px --
   die halbe Hausgroesse fuer einen Daumen, auf der Seite, die fuer
   Leute gebaut ist, die zum ersten Mal hier sind und auf dem Handy
   sitzen. Jetzt ist die ganze Zeile das Ziel, 44 px.

3. Die Textbloecke standen ohne Flaeche auf der Seite. Auf dem ersten
   Bild lief „Fast alles andere fuellt deine Betreuung fuer dich" quer
   ueber das helle Wasserzeichen des Hintergrundbildes. Deshalb hat im
   Haus jeder Textträger `--flaeche`: Ein Kontrast, der vom
   Bildausschnitt abhaengt, ist keiner.

NEBENBEI ZWEI LUECKEN GESCHLOSSEN: `manager-ziele.html` und
`anleitung.html` fehlten in der Seitenliste von pruef-rollen. Ganz
ungeprueft waren sie nicht -- der Kachel-Durchgang oeffnet jede Kachel
--, aber er prueft nur, WO man landet. Konsolenfehler, 4xx-Antworten,
tote Verweise und Ueberstehen liefen fuer beide nie. Dieselbe Sorte
stiller Luecke wie am 28.08.2026 bei RunOne.

ENTSCHEIDUNGEN VON FILIPE (06.10.2026):
  Pflege durch DogFather UND Spicy (nicht nur DogFather wie im Bauplan)
  -- dieselbe Regel wie bei den Manager-Zielen am 02.10.
  Vorerst nur das Agenturhaus, die Daten aber haus-bewusst angelegt.

DogFather bekommt keine Kachel (er braucht keine Einweisung), darf die
Seite aber oeffnen: Ueber den vorhandenen Sicht-Umschalter sieht er
jede Fassung. Eine zweite Rollenauswahl auf der Seite waere dieselbe
Funktion an einer Stelle, an der sie niemand sucht.

Gemessen
  pruef-anleitung     47 Pruefungen, 0 Fehler (neu)
  pruef-rollen       401 Pruefungen, 0 Fehler (vorher 384)
  pruef-rechtetafel   19 Pruefungen, 0 Fehler
  pruef-css-klassen   alles in Ordnung, jetzt 40 Seiten, 42 Stellen
                      unter 11,5 px (unveraendert)
  mess-anleitung      kein Querschieben bei 412 und 1440 px, keine
                      Konsolenfehler, alle 18 Karten mit Kachelfarbe

Sicherung vor dem Ausliefern:
  ~/sicherungen/workspace-vor-anleitung-20261006-1325.db (integrity ok)

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-06 13:26:43 +02:00
co-authored by Claude Opus 5
parent 26aec420f4
commit a7b2ad77b8
59 changed files with 2864 additions and 684 deletions
+376
View File
@@ -0,0 +1,376 @@
/* =====================================================================
DIE ANLEITUNG — Tabellen und Inhalte
Bauplan: "Kachel Anleitung — Bauplan fuer die Einweisung neuer
Leute", Stand 06.10.2026. Geprueft und ergaenzt in
`02 Projekte/Anleitung-Kachel – Bauplan.md` (Obsidian).
---------------------------------------------------------------------
WAS HIER *NICHT* STEHT, UND WARUM DAS DER KERN IST
Eine Karte der Anleitung zeigt Symbol, Farbe, Name und Ziel der
echten Kachel. Nichts davon steht in dieser Datenbank.
Es steht in `workspace/assets/js/bereiche.js`, und zwar genau
einmal. Wuerde man es hier noch einmal hinschreiben, haette man zwei
Listen: Die eine wird gepflegt, wenn eine Kachel umbenannt wird, die
andere nicht — und ab da erklaert die Anleitung eine Kachel, die es
so nicht mehr gibt. Das ist derselbe Fehler, der am 11.09.2026 beim
Spaltenumbau drei Spalten gekostet hat: eine abgeschriebene Liste.
Gespeichert wird deshalb nur, was der Bauplan NEU hinzufuegt:
die Stufe und die drei Saetze (Wozu / Was du hier tust / Merke).
Verbunden wird ueber den Kachel-Schluessel.
---------------------------------------------------------------------
DER KACHEL-SCHLUESSEL wird aus dem Ziel ABGELEITET, nicht vergeben:
uebersicht.html -> uebersicht
bereich.html?b=live -> bereich:live
Das muss sein, weil zwei Faelle sonst zusammenfallen:
* `bereich.html` ist FUENF Kacheln (live, community, technik,
schutz, agentur). Ueber die Seite allein waeren sie eine.
* `profil.html` heisst beim Creator "Mein Profil" und beim Manager
"Creator-Profile" — zwei Karten, eine Adresse. Hier trennt sie
die Rolle im Schluessel (haus, rolle, kachel).
---------------------------------------------------------------------
DIE HAUS-SPALTE ist leer gelaufene Vorsorge und soll es bleiben.
Entscheidung Filipe, 06.10.2026: "Jetzt nur Agentur, aber
vorbereitet." Team Dogi bekommt heute keine Anleitung. Die Spalte
kostet jetzt ein Feld; sie spaeter nachzuruesten hiesse, jede Zeile
und jeden Schluessel anzufassen.
===================================================================== */
/** Die drei Stufen. Reihenfolge ist die Anzeigereihenfolge. */
export const STUFEN = [
{ schluessel: "muss", name: "Muss",
titel: "Das brauchst du sofort",
unter: "Ohne das laeuft der Alltag nicht.",
offen: true },
{ schluessel: "regelmaessig", name: "Regelmäßig",
titel: "Das kommt regelmäßig",
unter: "Woechentlich, monatlich oder bei jedem neuen Creator.",
offen: false },
{ schluessel: "bedarf", name: "Bei Bedarf",
titel: "Das brauchst du nur bei Bedarf",
unter: "Nur oeffnen, wenn es einen Anlass gibt.",
offen: false },
];
export const STUFEN_SCHLUESSEL = STUFEN.map((s) => s.schluessel);
/** Die Rollen, die eine eigene Fassung bekommen.
*
* OHNE 'admin'. DogFather bekommt keine Einweisung (Bauplan,
* Kapitel 11) — bei ihm oeffnet dieselbe Adresse ab Etappe 4 die
* Pflege-Ansicht. */
export const FASSUNGEN = ["creator", "scout", "manager", "spicy"];
/** Wer die Texte aendern darf.
*
* DogFather UND Spicy — Entscheidung Filipe am 06.10.2026, und zwar
* ausdruecklich dieselbe Regel wie bei den Manager-Zielen am
* 02.10.2026 ("dogfather und spicy rolle sollen gleichzeitig es immer
* aendern koennen fuer alle"). Der Bauplan hatte hier "nur DogFather"
* stehen; zwei verschiedene Regeln fuer dieselbe Frage sind eine
* Regel, die man sich nicht merken kann. */
export const PFLEGE_ROLLEN = ["admin", "spicy"];
/** Die Arten von Listenzeilen in `anl_zeile`.
*
* EINE TABELLE STATT FUENF. Satz, Schritt, Nicht-deins, Takt und Frage
* sind alle dasselbe: eine geordnete Zeile mit hoechstens zwei Texten
* und manchmal einem Ziel. Fuenf Tabellen waeren fuenfmal dieselbe
* Spaltenliste, fuenf Indizes und fuenf Stellen, an denen die
* Haus-Spalte vergessen werden kann. */
export const ZEILEN_ARTEN = {
/* "In 60 Sekunden" — drei Saetze. Nur `text`. */
satz: { titel: false, ziel: false },
/* "Erste Schritte" — `titel` ist die Kachel, `ziel` der Sprung. */
schritt: { titel: true, ziel: true },
/* "Das kannst du liegen lassen" — `titel` die Taetigkeit,
`text` wer sie erledigt. */
nicht: { titel: true, ziel: false },
/* "Dein Rhythmus" — `titel` ist das Wann, `text` das Was. */
takt: { titel: true, ziel: false },
/* "Haeufige Fragen" — `titel` die Frage, `text` die Antwort. */
frage: { titel: true, ziel: false },
};
export const ARTEN_SCHLUESSEL = Object.keys(ZEILEN_ARTEN);
/* =====================================================================
WO DIE UMRECHNUNG "Ziel -> Schluessel" STEHT
NICHT hier. Der Server bildet nie einen Schluessel: Die Schluessel
stehen woertlich in INHALTE weiter unten, er schreibt sie nur weg.
Gebraucht wird die Rechnung ausschliesslich im Browser, wo die
Kachelliste liegt — also steht sie dort, als
`window.Bereiche.schluesselVonZiel`.
Ich hatte sie zuerst hier gebaut und exportiert. Benutzt haette sie
niemand. Eine Funktion, die nur dasteht, liest sich beim naechsten
Mal wie eine Zusage ("der Server kennt die Kacheln") und ist keine.
Wenn die Pflege-Ansicht in Etappe 4 Schreibzugriffe pruefen muss,
kommt sie zurueck — dann aber mit einem Aufrufer.
===================================================================== */
const TABELLEN = `
CREATE TABLE IF NOT EXISTS anl_karte (
id INTEGER PRIMARY KEY AUTOINCREMENT,
haus TEXT NOT NULL DEFAULT 'agentur',
rolle TEXT NOT NULL,
kachel TEXT NOT NULL,
stufe TEXT NOT NULL,
wozu TEXT NOT NULL DEFAULT '',
tust TEXT NOT NULL DEFAULT '',
merke TEXT NOT NULL DEFAULT '',
reihe INTEGER NOT NULL DEFAULT 0,
geaendert TEXT NOT NULL,
geaendert_von INTEGER REFERENCES personen(id) ON DELETE SET NULL,
UNIQUE (haus, rolle, kachel)
);
CREATE INDEX IF NOT EXISTS idx_anl_karte_sicht ON anl_karte (haus, rolle, stufe, reihe);
CREATE TABLE IF NOT EXISTS anl_zeile (
id INTEGER PRIMARY KEY AUTOINCREMENT,
haus TEXT NOT NULL DEFAULT 'agentur',
rolle TEXT NOT NULL,
art TEXT NOT NULL,
reihe INTEGER NOT NULL DEFAULT 0,
titel TEXT NOT NULL DEFAULT '',
text TEXT NOT NULL DEFAULT '',
ziel TEXT,
geaendert TEXT NOT NULL,
geaendert_von INTEGER REFERENCES personen(id) ON DELETE SET NULL
);
CREATE INDEX IF NOT EXISTS idx_anl_zeile_sicht ON anl_zeile (haus, rolle, art, reihe);
CREATE TABLE IF NOT EXISTS anl_rolle (
haus TEXT NOT NULL DEFAULT 'agentur',
rolle TEXT NOT NULL,
leitgedanke TEXT NOT NULL DEFAULT '',
geaendert TEXT NOT NULL,
geaendert_von INTEGER REFERENCES personen(id) ON DELETE SET NULL,
PRIMARY KEY (haus, rolle)
);
`;
/* =====================================================================
DIE INHALTE
Woertlich aus dem Bauplan vom 06.10.2026, Kapitel 06. Gewonnen mit
`pdftotext -raw`, NICHT mit `-layout`: Der Layout-Auszug verschiebt
Tabellenzellen. Dort stand "Schulung und Community-Call laufen
woechentlich von allein" beim Eintrag *Mein Profil* statt bei
*Kalender* — eine Zeile, die man ohne Verdacht uebernommen und nie
wiedergefunden haette.
Die Stufen stammen aus Kapitel 05. Sie sind ab Etappe 4 in der
Pflege-Ansicht aenderbar, ohne dass hier jemand etwas anfasst —
deshalb ist diese Liste eine ERSTBEFUELLUNG und keine Wahrheit.
===================================================================== */
export const INHALTE = {
creator: {
leitgedanke:
"Das ist dein eigener Bereich. Du siehst nur, was zu dir gehört. "
+ "Deine Betreuung trägt ein, du liest mit, antwortest und hakst ab.",
saetze: [
"Du musst nicht alles kennen. Fünf Kacheln reichen für den Anfang.",
"Was heute dran ist, steht immer auf der Zentrale unter „Was ist dran“.",
"Fast alles andere füllt deine Betreuung für dich. Du liest und antwortest.",
],
schritte: [
{ titel: "Mein Profil", ziel: "profil.html",
text: "Bild wählen, einen Satz über dich schreiben, TikTok-Namen eintragen, speichern." },
{ titel: "Schutz & Regeln", ziel: "bereich.html?b=schutz",
text: "Unterweisungen lesen und zusammen mit deiner Betreuung bestätigen." },
{ titel: "Aufgaben", ziel: "aufgaben.html",
text: "Nachsehen, ob schon etwas für dich offen ist." },
{ titel: "Kalender", ziel: "kalender.html",
text: "Termine in deinen eigenen Kalender holen (Google, Apple, Outlook)." },
/* KEIN ZIEL. "Installieren" ist keine Kachel, sondern der Knopf
in der Kopfleiste. Ein Sprung auf eine Seite waere hier falsch
-- und ein Sprung ins Leere erst recht. */
{ titel: "Installieren", ziel: null,
text: "Oben antippen, dann hast du den Workspace als App auf dem Handy." },
],
karten: [
{ kachel: "aufgaben", stufe: "muss",
wozu: "Was du zu tun hast.",
tust: "Annehmen, bearbeiten, zur Freigabe geben, Rückmeldung schreiben.",
merke: "„Zur Freigabe“ heißt: Jemand schaut noch drauf." },
{ kachel: "chat", stufe: "muss",
wozu: "Nachrichten mit deinem Team.",
tust: "Mit „Neu“ ein Gespräch beginnen.",
merke: "Fehler an der Seite gehören in Support, nicht in den Chat." },
{ kachel: "kalender", stufe: "muss",
wozu: "Termine und Calls.",
tust: "Termine ansehen, eigene anlegen.",
merke: "Schulung und Community-Call laufen wöchentlich von allein." },
{ kachel: "profil", stufe: "muss",
wozu: "Wer du bist und wohin du willst.",
tust: "Einmal ausfüllen: Bild, Kanäle, Stammdaten, Ziele, 90-Tage-Plan.",
merke: "Nur du schreibst deinen Eintrag." },
{ kachel: "bereich:schutz", stufe: "muss",
wozu: "Regeln, die du kennen musst.",
tust: "Einmal: Dokument öffnen, durchgehen, bestätigen.",
merke: "Nach der Bestätigung von beiden Seiten nicht mehr änderbar." },
{ kachel: "bereich:live", stufe: "regelmaessig",
wozu: "Dein LIVE besser machen.",
tust: "Vor und nach dem LIVE: Bewertungen und Notizen lesen, an jedem Punkt antworten.",
merke: "Geordnet nach vor, während, nach der Sendung." },
{ kachel: "leistung", stufe: "regelmaessig",
wozu: "Diamanten, LIVE-Tage, Verweildauer.",
tust: "Wochenzahlen und Ziele ansehen.",
merke: "Kommen aus Backstage und werden eingetragen, nicht automatisch geholt." },
{ kachel: "calls", stufe: "regelmaessig",
wozu: "Gespräche mit To-dos.",
tust: "Nachlesen, was besprochen wurde. Der Call-Raum ist verlinkt.",
merke: "To-dos landen direkt bei deinen Aufgaben." },
{ kachel: "bereich:agentur", stufe: "regelmaessig",
wozu: "Events und offizielle Wege.",
tust: "Event-Aufgaben ansehen, Rückmeldung geben, Anliegen an die Agentur stellen.",
merke: "Teilnahmebedingungen stehen beim Event." },
{ kachel: "content", stufe: "regelmaessig",
wozu: "Von der Idee bis zum Upload.",
tust: "Sehen, was geplant ist, und antworten.",
merke: "Fünf Stufen: Idee, Hook & Skript, Gedreht, Fertig & geplant, Veröffentlicht." },
{ kachel: "report", stufe: "regelmaessig",
wozu: "Rückblick und nächste Schritte.",
tust: "Einmal im Monat: Zeitraum wählen (7, 30 oder 90 Tage).",
merke: "Ein Review endet mit einer Entscheidung." },
{ kachel: "uebersicht", stufe: "bedarf",
wozu: "Dein Stand auf einen Blick.",
tust: "Nachsehen: nächster Termin, offene Aufgaben, Start-Check.",
merke: "Was dran ist, zeigt dir schon die Zentrale." },
{ kachel: "startcheck", stufe: "bedarf",
wozu: "Erstanalyse deines Kanals.",
tust: "Ansehen, was passt und was nicht, in 16 Punkten.",
merke: "Grundlage für deinen 90-Tage-Plan." },
{ kachel: "bereich:community", stufe: "bedarf",
wozu: "Moderation und Konflikte.",
tust: "Nachlesen, wenn es im Chat unruhig wird.",
merke: "Ruhig statt Drama." },
{ kachel: "bereich:technik", stufe: "bedarf",
wozu: "Setup, Fehler, Lösungen.",
tust: "Nachschlagen, wenn etwas klemmt.",
merke: "Erst hier schauen, dann fragen." },
{ kachel: "dateien", stufe: "bedarf",
wozu: "Ablage für dich.",
tust: "Dateien öffnen, die für dich abgelegt wurden.",
merke: "Du kannst hier nichts hochladen." },
{ kachel: "wissen", stufe: "bedarf",
wozu: "Anleitungen zu TikTok und Technik.",
tust: "Nach Stufe, Gerät oder Tag filtern.",
merke: "Hier geht es um Streaming, nicht um den Workspace." },
{ kachel: "support", stufe: "bedarf",
wozu: "Etwas ist kaputt.",
tust: "Kurz beschreiben, bis zu drei Bilder anhängen, abschicken.",
merke: "DogFather und die rechte Hand kümmern sich." },
],
nicht: [
{ titel: "Zahlen eintragen.", text: "Das macht deine Betreuung." },
{ titel: "Start-Check und LIVE-Analyse bewerten.", text: "Du liest und antwortest nur." },
{ titel: "Protokolle schreiben.", text: "Du liest sie nach." },
{ titel: "Dateien hochladen.", text: "Geht in deiner Ansicht nicht." },
{ titel: "Jede Kachel täglich öffnen.", text: "Die Zentrale sagt dir, was dran ist." },
],
takt: [
{ titel: "Täglich", text: "Zentrale („Was ist dran“), Aufgaben, Chat." },
{ titel: "Vor und nach dem LIVE", text: "LIVE-Analyse und Zahlen." },
{ titel: "Wöchentlich", text: "Kalender, Calls & Protokolle, Agentur." },
{ titel: "Monatlich", text: "Reports & Review und dein 90-Tage-Plan in Mein Profil." },
],
fragen: [
{ titel: "Muss ich jede Kachel kennen?",
text: "Nein. Fang mit den fünf Muss-Kacheln an. Der Rest kommt, wenn du ihn brauchst." },
{ titel: "Ich habe meinen Code verloren.",
text: "Sag deiner Betreuung oder DogFather Bescheid. Du bekommst einen neuen, "
+ "der alte gilt dann nicht mehr." },
{ titel: "Warum sehe ich keine Zahlen?",
text: "Für die Woche wurde noch kein Tag eingetragen. Sprich deine Betreuung an." },
{ titel: "Wer sieht mein Profil?",
text: "Dein Team: Bild, Name und was du über dich geschrieben hast." },
],
},
};
/* =====================================================================
ANLEGEN UND ERSTBEFUELLEN
===================================================================== */
/** Spielt eine Rolle ein — aber nur, wenn fuer sie noch GAR NICHTS da ist.
*
* DAS IST DIE WICHTIGSTE ZEILE DIESER DATEI. Ein Einspielen bei jedem
* Serverstart wuerde jede Aenderung aus der Pflege-Ansicht beim
* naechsten Neustart ueberschreiben — lautlos, und man wuerde es erst
* Wochen spaeter merken, wenn jemand fragt, warum sein Text wieder
* der alte ist.
*
* Gepruefte Bedingung ist "keine einzige Karte dieser Rolle", nicht
* "Tabelle leer": Sonst bekaeme Rolle zwei nichts mehr, sobald Rolle
* eins drin ist. */
function rolleEinspielen(d, haus, rolle, inhalt, jetzt) {
const schon = d.prepare(
"SELECT COUNT(*) n FROM anl_karte WHERE haus = ? AND rolle = ?").get(haus, rolle)?.n ?? 0;
if (schon > 0) return 0;
const karte = d.prepare(
`INSERT INTO anl_karte (haus, rolle, kachel, stufe, wozu, tust, merke, reihe, geaendert)
VALUES (?,?,?,?,?,?,?,?,?)`);
const zeile = d.prepare(
`INSERT INTO anl_zeile (haus, rolle, art, reihe, titel, text, ziel, geaendert)
VALUES (?,?,?,?,?,?,?,?)`);
let n = 0;
inhalt.karten.forEach((k, i) => {
karte.run(haus, rolle, k.kachel, k.stufe, k.wozu, k.tust, k.merke, i, jetzt);
n++;
});
const listen = [
["satz", inhalt.saetze.map((t) => ({ titel: "", text: t, ziel: null }))],
["schritt", inhalt.schritte],
["nicht", inhalt.nicht],
["takt", inhalt.takt],
["frage", inhalt.fragen],
];
for (const [art, liste] of listen) {
liste.forEach((z, i) => {
zeile.run(haus, rolle, art, i, z.titel ?? "", z.text ?? "", z.ziel ?? null, jetzt);
n++;
});
}
d.prepare(
`INSERT INTO anl_rolle (haus, rolle, leitgedanke, geaendert) VALUES (?,?,?,?)
ON CONFLICT(haus, rolle) DO NOTHING`).run(haus, rolle, inhalt.leitgedanke, jetzt);
return n;
}
export function anleitungTabellen(d) {
d.exec(TABELLEN);
const jetzt = new Date().toISOString();
let gesamt = 0;
const neu = [];
for (const rolle of FASSUNGEN) {
const inhalt = INHALTE[rolle];
/* Eine Rolle ohne Inhalte ist kein Fehler, sondern der Stand der
Arbeit: Etappe 1 bringt nur den Creator, die drei anderen kommen
in Etappe 3. Still uebergehen — aber die Zuordnungspruefung
weiss davon und meldet es als offen, nicht als in Ordnung. */
if (!inhalt) continue;
const n = rolleEinspielen(d, "agentur", rolle, inhalt, jetzt);
if (n) { gesamt += n; neu.push(`${rolle} ${n}`); }
}
if (gesamt) {
console.log(`[workspace] Anleitung: ${gesamt} Zeilen erstbefuellt (${neu.join(", ")}).`);
}
}
+2
View File
@@ -72,6 +72,7 @@ import { videoRouter, videoWacheStarten } from "./workspace-video.js";
import { bewerbungRouter } from "./workspace-bewerbung.js"; import { bewerbungRouter } from "./workspace-bewerbung.js";
import { leistungRouter } from "./workspace-leistung.js"; import { leistungRouter } from "./workspace-leistung.js";
import { managerZieleRouter } from "./workspace-manager-ziele.js"; import { managerZieleRouter } from "./workspace-manager-ziele.js";
import { anleitungRouter } from "./workspace-anleitung.js";
import { fruehwarnungRouter } from "./workspace-fruehwarnung.js"; import { fruehwarnungRouter } from "./workspace-fruehwarnung.js";
import { icsRouter } from "./workspace-ics.js"; import { icsRouter } from "./workspace-ics.js";
@@ -356,6 +357,7 @@ app.use(scoutRouter);
ueberschneiden sich nicht), aber wer suchen muss, sucht sie ueberschneiden sich nicht), aber wer suchen muss, sucht sie
nebeneinander. */ nebeneinander. */
app.use(managerZieleRouter); app.use(managerZieleRouter);
app.use(anleitungRouter);
app.use(callRouter); app.use(callRouter);
app.use(hinweisRouter); app.use(hinweisRouter);
app.use(zentraleRouter); app.use(zentraleRouter);
+190
View File
@@ -0,0 +1,190 @@
/* =====================================================================
WIE DIE ANLEITUNG AUSSIEHT (06.10.2026, Etappe 1)
SIE PRUEFT NICHTS und meldet keinen Fehlschlag -- sie macht Bilder,
auf denen man nachsehen kann, und misst vier Dinge, die man auf
einem Bild schlecht sieht: waagerechtes Schieben, Beruehrziele unter
40 px, Fehler in der Browserkonsole und ob der Filter wirklich etwas
tut.
Deshalb `mess-` und nicht `pruef-`.
ZWEI BREITEN, und die kleinere ist die wichtigere: 412 px ist die
haeufigste Android-Breite. Am 06.09.2026 hat genau diese Breite im
Creator Workspace eine Ueberdeckung aufgedeckt, bei der ein Knopf
ueber einem anderen lag -- auf dem Computer war nichts zu sehen.
EIGENE WEGWERF-DATENBANK in einem mktemp-Ordner. In einem laufenden
System waeren das Testdaten, und die sind verboten.
Aufrufen mit: node server/mess-anleitung.mjs
===================================================================== */
import { mkdtempSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { request as httpAnfrage } from "node:http";
import { eigenerPort } from "./helfer-port.mjs";
const PORT = await eigenerPort(import.meta, "mess-anleitung");
const ordner = mkdtempSync(join(tmpdir(), "ws-anl-bild-"));
process.env.WORKSPACE_DB = join(ordner, "workspace.db");
process.env.PORT = String(PORT);
process.env.SITE_ACCESS_SECRET = "lokaler-test";
process.env.SITE_PUBLIC_LAUNCH_AT = "2020-01-01T00:00:00+01:00";
const express = (await import("express")).default;
const ec = express.response.cookie;
express.response.cookie = function (n, w, o) {
return ec.call(this, n, w, { ...(o || {}), secure: false });
};
import { notbremse } from "./helfer-notbremse.mjs";
await import("./index.js");
notbremse(240_000, "mess-anleitung");
await new Promise((r) => setTimeout(r, 900));
process.on("uncaughtException", (f) => { console.error("ABSTURZ:", f); process.exit(7); });
process.on("unhandledRejection", (f) => { console.error("ABSTURZ (Versprechen):", f); process.exit(7); });
/* ---------- Leute ----------------------------------------------------- */
const { DatabaseSync } = await import("node:sqlite");
const { scryptSync, randomBytes, createHmac } = await import("node:crypto");
const d = new DatabaseSync(process.env.WORKSPACE_DB);
const jetztIso = new Date().toISOString();
const kenn = randomBytes(32).toString("hex");
d.prepare("INSERT INTO einstellungen (schluessel, wert, geaendert, von)"
+ " VALUES (?,?,?,NULL) ON CONFLICT(schluessel) DO NOTHING")
.run("code_kennung_schluessel", kenn, jetztIso);
function anlegen(name, rolle, code) {
const salt = randomBytes(16).toString("hex");
const hash = scryptSync(code, salt, 64,
{ N: 32768, r: 8, p: 1, maxmem: 96 * 1024 * 1024 }).toString("hex");
d.prepare("INSERT INTO personen (name, rolle, code_hash, code_salt, code_n,"
+ " code_kennung, aktiv, erstellt) VALUES (?,?,?,?,?,?,1,?)")
.run(name, rolle, hash, salt, 32768,
createHmac("sha256", kenn).update(code).digest("hex"), jetztIso);
}
anlegen("Luna", "creator", "CODE-LUNA-0001");
anlegen("Filipe", "admin", "CODE-DOGI-0001");
d.close();
function anfrage(pfad, methode, koerper) {
return new Promise((fertig, schief) => {
const daten = koerper ? JSON.stringify(koerper) : null;
const a = httpAnfrage({
host: "127.0.0.1", port: PORT, path: pfad, method: methode,
headers: {
Origin: `http://127.0.0.1:${PORT}`,
...(daten ? { "Content-Type": "application/json",
"Content-Length": Buffer.byteLength(daten) } : {}),
},
}, (antwort) => {
let text = "";
antwort.on("data", (t) => { text += t; });
antwort.on("end", () => fertig({ code: antwort.statusCode, kopf: antwort.headers, text }));
});
a.on("error", schief);
if (daten) a.write(daten);
a.end();
});
}
async function keksFuer(rolle, code) {
const an = await anfrage("/workspace/api/anmelden", "POST", { rolle, code });
if (an.code !== 200) { console.log(`ABBRUCH: Anmeldung ${rolle} ${an.code}`); process.exit(2); }
return (an.kopf["set-cookie"] || []).map((x) => x.split(";")[0]).join("; ");
}
const keksCreator = await keksFuer("creator", "CODE-LUNA-0001");
const keksDogi = await keksFuer("admin", "CODE-DOGI-0001");
/* ---------- Bilder ---------------------------------------------------- */
const pw = await import(
"file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
const browser = await pw.chromium.launch();
const nachmessen = () => ({
schiebtQuer: document.documentElement.scrollWidth > window.innerWidth + 2,
zuKlein: [...document.querySelectorAll("button, a[href], summary")]
.filter((e) => {
const k = e.getBoundingClientRect();
return k.width > 0 && k.height > 0 && k.height < 40;
})
.map((e) => `${e.tagName.toLowerCase()}.${(e.className || "-")}: ${Math.round(e.getBoundingClientRect().height)}px`),
karten: document.querySelectorAll(".an-karte").length,
/* Je Stufe: wie viele Karten, und ist der Kasten offen? */
stufen: [...document.querySelectorAll(".an-stufe")].map((s) => ({
stufe: s.dataset.stufe,
zahl: s.querySelector(".an-stufe__zahl")?.textContent,
offen: !!s.querySelector(".an-stufe__falte")?.open,
sichtbar: !s.hidden,
})),
/* Tragen alle Karten den Ton ihrer Kachel? Eine ohne waere grau. */
ohneTon: [...document.querySelectorAll(".an-karte")]
.filter((k) => !k.dataset.ton)
.map((k) => k.querySelector(".an-karte__name")?.textContent),
schritte: document.querySelectorAll(".an-schritt").length,
saetze: document.querySelectorAll(".an-saetze__zeile").length,
nicht: document.querySelectorAll(".an-nicht__zeile").length,
takt: document.querySelectorAll(".an-takt__wann").length,
fragen: document.querySelectorAll(".an-frage").length,
ohne: document.getElementById("ohne-fassung")?.hidden === false
? document.getElementById("ohne-fassung").textContent.slice(0, 70) : null,
});
async function bild(name, keks, breite, hoehe, vorher) {
const kontext = await browser.newContext({
viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860,
});
await kontext.addCookies(keks.split("; ").map((k) => {
const [n, ...r] = k.split("=");
return { name: n, value: r.join("="), domain: "127.0.0.1", path: "/" };
}));
const seite = await kontext.newPage();
const konsole = [];
seite.on("console", (e) => {
if (e.type() === "error" && !/favicon|net::ERR/i.test(e.text())) konsole.push(e.text().slice(0, 160));
});
seite.on("pageerror", (e) => konsole.push("Absturz: " + e.message));
await seite.goto(`http://127.0.0.1:${PORT}/workspace/anleitung.html`,
{ waitUntil: "networkidle" });
await seite.waitForTimeout(1000);
if (vorher) await vorher(seite);
await seite.waitForTimeout(400);
const blick = await seite.evaluate(nachmessen);
await seite.screenshot({ path: `bild-anleitung-${name}.png`, fullPage: true });
console.log(`\n--- ${name} (${breite}px) ---`);
if (blick.ohne) console.log(` Ohne Fassung: ${blick.ohne}…`);
console.log(` Karten: ${blick.karten} Schritte: ${blick.schritte} `
+ `Saetze: ${blick.saetze} Nicht deins: ${blick.nicht} `
+ `Takt: ${blick.takt} Fragen: ${blick.fragen}`);
for (const s of blick.stufen) {
console.log(` ${String(s.stufe).padEnd(13)} ${String(s.zahl).padEnd(3)} `
+ `${s.offen ? "offen" : "zu "} ${s.sichtbar ? "" : "(ausgeblendet)"}`);
}
console.log(` Karten ohne Farbe: ${blick.ohneTon.length ? blick.ohneTon.join(", ") : "keine"}`);
console.log(` Quer schieben: ${blick.schiebtQuer ? "JA — Befund!" : "nein"}`);
console.log(` Zu kleine Ziele: ${blick.zuKlein.length ? blick.zuKlein.join(", ") : "keine"}`);
if (konsole.length) console.log(` KONSOLE: ${konsole.join(" | ")}`);
await kontext.close();
return blick;
}
await bild("creator-handy", keksCreator, 412, 950);
await bild("creator-rechner", keksCreator, 1440, 1000);
/* Der Filter muss etwas TUN. Auf einem Bild sieht man nur den
gedrueckten Knopf -- ob die anderen Kaesten verschwinden, nicht. */
await bild("creator-nur-muss", keksCreator, 412, 950, async (seite) => {
await seite.click('.an-filter__knopf[data-wert="muss"]');
});
/* DogFather ohne gewaehlte Sicht: Er bekommt keine Fassung, sondern
eine Auskunft. Das Bild zeigt, ob die wie eine Erklaerung aussieht
und nicht wie ein Fehler. */
await bild("dogfather-ohne-sicht", keksDogi, 412, 950);
await browser.close();
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
console.log("\nBilder geschrieben: bild-anleitung-*.png");
process.exit(0);
+394
View File
@@ -0,0 +1,394 @@
/* =====================================================================
DIE ANLEITUNG — stimmt sie mit den Kacheln ueberein? (Etappe 1)
=====================================================================
DIE EIGENTLICHE FRAGE DIESER DATEI steht im Bauplan gar nicht; sie
kam beim Nachmessen dazu, und sie ist der Grund, warum es diese
Pruefung ueberhaupt gibt:
Erklaert die Anleitung genau die Kacheln, die es gibt --
und zwar JEDE und KEINE DARUEBER HINAUS?
Beides kann lautlos kaputtgehen, und beides auf dieselbe Weise: Wer
eine Kachel hinzufuegt, vergisst die Karte -- dann steht auf der
Startseite etwas, das die Einweisung nicht kennt. Wer eine Kachel
entfernt, laesst die Karte stehen -- dann erklaert die Einweisung
etwas, das es nicht mehr gibt, mit einem Knopf, der ins Leere
fuehrt.
Der Bauplan sieht dafuer nur einen Hinweis in der Pflege-Ansicht vor
("Fuer diese Kachel fehlt ein Eintrag"). Der hilft nur, wenn jemand
hinsieht. Diese Pruefung sieht immer hin.
---------------------------------------------------------------------
WOHER DIE KACHELLISTE KOMMT
Aus `workspace/assets/js/bereiche.js`, und zwar indem die Datei
AUSGEFUEHRT wird -- nicht, indem jemand sie mit einem Muster
durchsucht. Ein Muster waere eine zweite, ungenaue Nachbildung der
Datei; sie wuerde bei der ersten ungewohnten Schreibweise still
danebenliegen und dann "alles in Ordnung" melden.
Der Server kennt diese Liste nicht (bereicheFuer gibt fuers
Agenturhaus `null` zurueck). Deshalb muss die Pruefung sie sich
selbst holen -- genau wie der Browser es tut.
===================================================================== */
import { mkdtempSync, rmSync, readFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import vm from "node:vm";
import { eigenerPort } from "./helfer-port.mjs";
const PORT = await eigenerPort(import.meta, "pruef-anleitung");
const ordner = mkdtempSync(join(tmpdir(), "ws-anl-"));
process.env.WORKSPACE_DB = join(ordner, "workspace.db");
process.env.PORT = String(PORT);
process.env.SITE_ACCESS_SECRET = "lokaler-test";
process.env.SITE_PUBLIC_LAUNCH_AT = "2020-01-01T00:00:00+01:00";
const express = (await import("express")).default;
const ec = express.response.cookie;
express.response.cookie = function (n, w, o) { return ec.call(this, n, w, { ...(o || {}), secure: false }); };
import { notbremse } from "./helfer-notbremse.mjs";
await import("./index.js");
notbremse(180_000, "pruef-anleitung");
await new Promise((r) => setTimeout(r, 800));
const BASIS = `http://127.0.0.1:${PORT}`;
let fehler = 0, geprueft = 0;
const melde = (t) => console.log(t);
const ok = (b, t) => { geprueft++; console.log((b ? " ok " : " FEHL ") + t); if (!b) fehler++; };
function braucht(bedingung, was) {
if (bedingung) return;
console.log(`\nABBRUCH: konnte nicht nachsehen — ${was}`);
console.log("Das ist KEIN Befund am Code. Die Pruefung konnte ihre");
console.log("Voraussetzung nicht herstellen und sagt das, statt zu schweigen.\n");
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
process.exit(2);
}
/* =====================================================================
DIE KACHELLISTE — bereiche.js wirklich ausfuehren
===================================================================== */
function bereicheLaden() {
const quelle = readFileSync(
new URL("../workspace/assets/js/bereiche.js", import.meta.url), "utf8");
const fenster = {};
const tot = () => ({ setAttribute() {}, append() {}, style: { setProperty() {} } });
const umgebung = { window: fenster, URLSearchParams,
document: { createElement: tot, createElementNS: tot } };
umgebung.globalThis = umgebung;
vm.createContext(umgebung);
vm.runInContext(quelle, umgebung, { filename: "bereiche.js" });
return fenster.Bereiche;
}
const B = bereicheLaden();
braucht(B && Array.isArray(B.GRUPPEN) && B.GRUPPEN.length > 0,
"bereiche.js liefert keine Kachelliste — ohne sie ist nichts zu vergleichen");
braucht(typeof B.schluesselVonZiel === "function",
"bereiche.js kennt schluesselVonZiel nicht");
melde("\n=== Der Kachel-Schluessel rechnet richtig ===");
const SCHLUESSEL_PROBEN = [
["uebersicht.html", "uebersicht"],
["bereich.html?b=live", "bereich:live"],
["bereich.html?b=agentur", "bereich:agentur"],
["profil.html", "profil"],
["chat.html?raum=treff", "chat"],
["", ""],
];
for (const [ziel, erwartet] of SCHLUESSEL_PROBEN) {
const ist = B.schluesselVonZiel(ziel);
ok(ist === erwartet, `"${ziel || "(leer)"}" -> "${ist}" (erwartet "${erwartet}")`);
}
/* GEGENPROBE: Die Rechnung muss auch TRENNEN koennen. Lieferte sie fuer
alles dasselbe, waeren die sechs Zeilen oben trotzdem teils gruen. */
ok(B.schluesselVonZiel("bereich.html?b=live")
!== B.schluesselVonZiel("bereich.html?b=technik"),
"Gegenprobe: zwei Bereiche derselben Seite bekommen verschiedene Schluessel");
function kachelnFuer(rolle) {
const nach = new Map();
for (const g of B.GRUPPEN) {
for (const k of (g.bereiche || [])) {
if (Array.isArray(k.rollen) && !k.rollen.includes(rolle)) continue;
const s = B.schluesselVonZiel(k.ziel);
if (s) nach.set(s, k);
}
}
return nach;
}
/* =====================================================================
LEUTE UND ANMELDUNG
===================================================================== */
const { DatabaseSync } = await import("node:sqlite");
const { scryptSync, randomBytes, createHmac } = await import("node:crypto");
const d = new DatabaseSync(process.env.WORKSPACE_DB);
const jetztIso = new Date().toISOString();
const kennSchluessel = randomBytes(32).toString("hex");
d.prepare("INSERT INTO einstellungen (schluessel, wert, geaendert, von)"
+ " VALUES (?,?,?,NULL) ON CONFLICT(schluessel) DO NOTHING")
.run("code_kennung_schluessel", kennSchluessel, jetztIso);
function anlegen(name, rolle, code) {
const salt = randomBytes(16).toString("hex");
const hash = scryptSync(code, salt, 64,
{ N: 32768, r: 8, p: 1, maxmem: 96 * 1024 * 1024 }).toString("hex");
d.prepare("INSERT INTO personen (name, rolle, code_hash, code_salt, code_n,"
+ " code_kennung, aktiv, erstellt) VALUES (?,?,?,?,?,?,1,?)")
.run(name, rolle, hash, salt, 32768,
createHmac("sha256", kennSchluessel).update(code).digest("hex"), jetztIso);
return d.prepare("SELECT last_insert_rowid() AS id").get().id;
}
const ROLLEN = [["admin", "Filipe"], ["spicy", "Spicy Media"], ["manager", "Patrick"],
["scout", "Kevin"], ["creator", "Luna"], ["modi", "Miss"], ["hand", "VanVan"]];
const CODES = {};
for (const [i, [rolle, name]] of ROLLEN.entries()) {
CODES[rolle] = `CODE-A${String(i).padStart(2, "0")}-000001`;
anlegen(name, rolle, CODES[rolle]);
}
/* Wie viele Zeilen hat die Erstbefuellung angelegt? Direkt in der
Datenbank nachgezaehlt und nicht ueber die Schnittstelle: Sonst
pruefte man die Schnittstelle mit sich selbst. */
const inDb = d.prepare(
"SELECT COUNT(*) n FROM anl_karte WHERE haus = 'agentur' AND rolle = 'creator'").get().n;
d.close();
const { request } = await import("node:http");
const CREW_HOST = "crew.dogfather-universe.com";
function roh(pfad, host, koerper, keks) {
return new Promise((fertig, schief) => {
const daten = koerper ? JSON.stringify(koerper) : null;
const a = request({
host: "127.0.0.1", port: PORT, path: pfad,
method: daten ? "POST" : "GET",
headers: {
...(host ? { Host: host } : {}),
Origin: host ? `https://${host}` : BASIS,
...(keks ? { Cookie: keks } : {}),
...(daten ? { "Content-Type": "application/json",
"Content-Length": Buffer.byteLength(daten) } : {}),
},
}, (antwort) => {
let text = "";
antwort.on("data", (t) => { text += t; });
antwort.on("end", () => fertig({ code: antwort.statusCode, kopf: antwort.headers, text }));
});
a.on("error", schief);
if (daten) a.write(daten);
a.end();
});
}
async function anmelden(rolle, host = null) {
const r = await roh("/workspace/api/anmelden", host, { rolle, code: CODES[rolle] });
if (r.code !== 200) return null;
return [].concat(r.kopf["set-cookie"] || []).map((z) => z.split(";")[0]).join("; ") || null;
}
melde("\n=== Alle Rollen kommen herein ===");
const kekse = {};
for (const [rolle] of ROLLEN) {
const haus = (rolle === "modi" || rolle === "hand") ? CREW_HOST : null;
kekse[rolle] = await anmelden(rolle, haus);
ok(!!kekse[rolle], `${rolle}: angemeldet`);
}
braucht(Object.values(kekse).every(Boolean), "nicht alle Rollen konnten sich anmelden");
const holen = async (rolle, host = null) => {
const r = await roh("/workspace/api/anleitung", host, null, kekse[rolle]);
let j = null;
try { j = JSON.parse(r.text); } catch { /* bleibt null */ }
return { code: r.code, j };
};
/* =====================================================================
DIE ERSTBEFUELLUNG
===================================================================== */
melde("\n=== Die Inhalte sind eingespielt ===");
ok(inDb === 18, `Creator hat 18 Karten in der Datenbank (${inDb})`);
const creator = await holen("creator");
ok(creator.code === 200, `Creator bekommt die Anleitung (HTTP ${creator.code})`);
braucht(creator.code === 200 && creator.j, "die Schnittstelle antwortet dem Creator nicht");
ok(creator.j.hat_fassung === true, "Creator hat eine eigene Fassung");
ok(creator.j.anzahl === 18, `18 Karten ueber die Schnittstelle (${creator.j.anzahl})`);
ok((creator.j.saetze || []).length === 3, `drei Saetze „In 60 Sekunden" (${(creator.j.saetze || []).length})`);
ok((creator.j.schritte || []).length === 5, `fuenf Erste Schritte (${(creator.j.schritte || []).length})`);
ok((creator.j.nicht || []).length === 5, `fuenf Zeilen „Nicht deins" (${(creator.j.nicht || []).length})`);
ok((creator.j.takt || []).length === 4, `vier Rhythmus-Zeilen (${(creator.j.takt || []).length})`);
ok((creator.j.fragen || []).length === 4, `vier haeufige Fragen (${(creator.j.fragen || []).length})`);
ok(!!creator.j.leitgedanke && creator.j.leitgedanke.length > 40,
"der Leitgedanke steht da");
/* DIE ZAHLEN DER ABNAHMELISTE — GERECHNET, NICHT ABGESCHRIEBEN.
Der Bauplan nennt 5/6/7. Diese Zeile prueft nicht gegen die Zahl,
sondern gegen die Summe: Zusammen muessen es so viele sein, wie es
Karten gibt, und keine Karte darf eine unbekannte Stufe tragen. */
melde("\n=== Die Stufen ===");
const jeStufe = {};
for (const k of creator.j.karten) jeStufe[k.stufe] = (jeStufe[k.stufe] || 0) + 1;
const bekannt = new Set((creator.j.stufen || []).map((s) => s.schluessel));
ok([...Object.keys(jeStufe)].every((s) => bekannt.has(s)),
`jede Karte traegt eine bekannte Stufe (${Object.keys(jeStufe).join(", ")})`);
ok(Object.values(jeStufe).reduce((a, b) => a + b, 0) === creator.j.karten.length,
"die Stufen zusammen ergeben alle Karten");
ok(jeStufe.muss === 5 && jeStufe.regelmaessig === 6 && jeStufe.bedarf === 7,
`Verteilung 5/6/7 wie im Bauplan (${jeStufe.muss}/${jeStufe.regelmaessig}/${jeStufe.bedarf})`);
/* =====================================================================
DIE ZUORDNUNG — IN BEIDE RICHTUNGEN
===================================================================== */
melde("\n=== Jede Kachel hat eine Karte, jede Karte eine Kachel ===");
const kacheln = kachelnFuer("creator");
/* Die Anleitung selbst bekommt keine Karte. Eine Karte, die die Seite
erklaert, auf der man gerade steht, ist Fuellmaterial. */
kacheln.delete("anleitung");
braucht(kacheln.size > 0, "fuer den Creator findet sich keine einzige Kachel");
const habenKarte = new Set(creator.j.karten.map((k) => k.kachel));
const ohneKarte = [...kacheln.keys()].filter((s) => !habenKarte.has(s));
const ohneKachel = [...habenKarte].filter((s) => !kacheln.has(s));
ok(ohneKarte.length === 0 && kacheln.size > 0,
ohneKarte.length
? `${ohneKarte.length} Kacheln OHNE Karte: ${ohneKarte.join(", ")}`
: `alle ${kacheln.size} Kacheln des Creators haben eine Karte`);
ok(ohneKachel.length === 0 && habenKarte.size > 0,
ohneKachel.length
? `${ohneKachel.length} Karten OHNE Kachel: ${ohneKachel.join(", ")}`
: `alle ${habenKarte.size} Karten zeigen auf eine Kachel, die es gibt`);
/* GEGENPROBE. Beide Zeilen oben koennen "in Ordnung" sagen. Koennen sie
auch "nicht in Ordnung"? Ohne diesen Beweis waere eine leere Menge
auf beiden Seiten gruen -- und genau so sieht ein kaputter Abgleich
aus. */
const erfundeneKachel = new Set([...kacheln.keys(), "gibtesnicht"]);
ok([...erfundeneKachel].filter((s) => !habenKarte.has(s)).length === 1,
"Gegenprobe: eine Kachel ohne Karte wird gefunden");
const erfundeneKarte = new Set([...habenKarte, "auchnicht"]);
ok([...erfundeneKarte].filter((s) => !kacheln.has(s)).length === 1,
"Gegenprobe: eine Karte ohne Kachel wird gefunden");
/* Jede Karte muss alle drei Saetze haben. Eine halb gefuellte Karte
sieht aus wie ein Ladefehler. */
const luecken = creator.j.karten.filter((k) => !k.wozu || !k.tust || !k.merke);
ok(luecken.length === 0,
luecken.length ? `${luecken.length} Karten ohne vollstaendige drei Zeilen: `
+ luecken.map((k) => k.kachel).join(", ")
: "jede Karte hat Wozu, Was du hier tust und Merke");
/* Die Erste-Schritte-Ziele muessen Kacheln dieser Rolle sein -- oder
gar kein Ziel haben ("Installieren" ist ein Knopf, keine Seite).
Ein Sprung auf eine Seite, die ein Creator nicht oeffnen darf, waere
ein Knopf, der auf die Startseite zurueckwirft. */
const schrittFehler = (creator.j.schritte || [])
.filter((s) => s.ziel)
.filter((s) => !kachelnFuer("creator").has(B.schluesselVonZiel(s.ziel)));
ok(schrittFehler.length === 0,
schrittFehler.length
? `Erste Schritte zeigen ins Leere: ${schrittFehler.map((s) => s.ziel).join(", ")}`
: "jeder Erste Schritt mit Ziel fuehrt auf eine Kachel dieser Rolle");
/* =====================================================================
WER DARF, WER NICHT
===================================================================== */
melde("\n=== Die drei Schranken ===");
const admin = await holen("admin");
ok(admin.code === 200 && admin.j?.hat_fassung === false,
`DogFather bekommt keine Fassung, sondern eine Auskunft (HTTP ${admin.code}, `
+ `hat_fassung ${admin.j?.hat_fassung})`);
ok(!!admin.j?.satz && admin.j.satz.length > 30,
"…und die Auskunft sagt ihm, wie er trotzdem hineinsieht");
ok(admin.j?.darf_pflegen === true, "DogFather darf pflegen");
const spicy = await holen("spicy");
ok(spicy.code === 200, `Spicy Media bekommt eine Antwort (HTTP ${spicy.code})`);
ok(spicy.j?.darf_pflegen === true,
"Spicy Media darf pflegen (Entscheidung 06.10.2026, wie bei den Manager-Zielen)");
/* Etappe 1 bringt nur den Creator. Scout, Manager und Spicy haben noch
keine Inhalte -- das ist der Stand der Arbeit und kein Fehler. Es
wird aber AUSGESPROCHEN, nicht uebersprungen. */
melde(` -- Scout, Manager und Spicy Media haben noch keine Inhalte `
+ `(Etappe 3) — Spicy meldet ${spicy.j?.anzahl ?? 0} Karten`);
const creatorPflege = creator.j.darf_pflegen;
ok(creatorPflege === false, "ein Creator darf NICHT pflegen");
const modi = await holen("modi", CREW_HOST);
ok(modi.code === 404,
`ein Modi bekommt die Anleitung nicht (HTTP ${modi.code}, erwartet 404)`);
const hand = await holen("hand", CREW_HOST);
ok(hand.code === 404,
`die rechte Hand bekommt sie auf der Crew-Adresse nicht (HTTP ${hand.code}, erwartet 404)`);
/* Die Seite selbst, nicht nur die Schnittstelle.
=====================================================================
GEPRUEFT WIRD DAS ZIEL, NICHT NUR DIE 302.
Das Haus beantwortet "darfst du nicht" mit einer Umleitung und nicht
mit 403 (workspace.js, bei `darfSeite`) -- ausdruecklich, damit es
auf "nein" nur EINE Antwort gibt und niemand aus dem Unterschied
etwas ablesen kann.
Genau deshalb reicht hier "Status ist 302" nicht: NICHT ANGEMELDET
gibt ebenfalls 302. Eine Pruefung auf die blosse Zahl waere auch
dann gruen, wenn die Sitzung des Modi gar nicht erkannt wuerde --
sie haette dann die Anmeldung gemessen und nicht die Schranke.
Unterscheidbar sind die beiden nur am Ziel:
nicht angemeldet -> /workspace/
angemeldet, aber gesperrt -> /workspace/start.html
===================================================================== */
const seiteCreator = await roh("/workspace/anleitung.html", null, null, kekse.creator);
ok(seiteCreator.code === 200, `anleitung.html oeffnet fuer den Creator (${seiteCreator.code})`);
const seiteModi = await roh("/workspace/anleitung.html", CREW_HOST, null, kekse.modi);
ok(seiteModi.code === 302 && seiteModi.kopf.location === "/workspace/start.html",
`ein angemeldeter Modi wird zur Startseite umgeleitet `
+ `(${seiteModi.code} -> ${seiteModi.kopf.location})`);
const seiteOhne = await roh("/workspace/anleitung.html", null, null, null);
ok(seiteOhne.code === 302 && seiteOhne.kopf.location === "/workspace/",
`ohne Anmeldung zur Anmeldung, nicht zur Startseite `
+ `(${seiteOhne.code} -> ${seiteOhne.kopf.location})`);
/* GEGENPROBE ZU DEN BEIDEN: Sie unterscheiden wirklich. Zeigten beide
Umleitungen auf dasselbe, waeren die Zeilen oben zusammen trotzdem
gruen zu bekommen -- und die Schranke waere ungeprueft. */
ok(seiteModi.kopf.location !== seiteOhne.kopf.location,
"Gegenprobe: gesperrt und nicht angemeldet fuehren an verschiedene Orte");
/* =====================================================================
DIE ERSTBEFUELLUNG DARF NICHTS UEBERSCHREIBEN
=====================================================================
Die wichtigste Zeile in anleitung-tabellen.js: Eingespielt wird nur,
wenn fuer eine Rolle noch gar nichts da ist. Liefe sie bei jedem
Start, waere jede Aenderung aus der Pflege-Ansicht beim naechsten
Neustart weg -- lautlos, und man merkte es Wochen spaeter. */
melde("\n=== Ein zweiter Lauf laesst Aenderungen in Ruhe ===");
const d2 = new DatabaseSync(process.env.WORKSPACE_DB);
d2.prepare("UPDATE anl_karte SET merke = ? WHERE haus='agentur' AND rolle='creator' AND kachel='chat'")
.run("VON HAND GEAENDERT");
const { anleitungTabellen } = await import("./anleitung-tabellen.js");
anleitungTabellen(d2);
const nachher = d2.prepare(
"SELECT merke FROM anl_karte WHERE haus='agentur' AND rolle='creator' AND kachel='chat'").get();
const anzahlNachher = d2.prepare(
"SELECT COUNT(*) n FROM anl_karte WHERE haus='agentur' AND rolle='creator'").get().n;
d2.close();
ok(nachher?.merke === "VON HAND GEAENDERT",
`der geaenderte Text steht noch da ("${(nachher?.merke || "").slice(0, 24)}")`);
ok(anzahlNachher === 18, `und es sind keine Karten dazugekommen (${anzahlNachher})`);
/* ---------- Abschluss ------------------------------------------------ */
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
console.log(`\n${fehler ? "FEHLER: " + fehler : "Alles in Ordnung"} — ${geprueft} Prüfungen`);
process.exit(fehler ? 1 : 0);
+19
View File
@@ -178,11 +178,30 @@ d.close();
/* ---------- Der Rundgang ------------------------------------------------ */ /* ---------- Der Rundgang ------------------------------------------------ */
/* ZWEI SEITEN FEHLTEN HIER (06.10.2026).
`manager-ziele.html` (seit 02.10.) und `anleitung.html` (seit heute)
standen nicht in dieser Liste. Ganz ungeprueft waren sie nicht -- der
Kachel-Durchgang weiter unten oeffnet jede Kachel jeder Rolle und
haette gemerkt, wenn eine ins Leere fuehrt. Er prueft aber nur, WO
man landet. Die eigentliche Arbeit dieser Liste -- Fehler in der
Browserkonsole, 4xx-Antworten vom Server, tote Verweise, leere
Seiten, waagerechtes Ueberstehen -- lief fuer beide nie.
Das ist dieselbe Sorte Luecke wie am 28.08.2026 bei RunOne: Der Lauf
war gruen, und acht Pruefungen je Geraet fielen still weg. Hier
waren es zwei Seiten mal acht Rollen.
Eine abgeschriebene Liste bleibt es trotzdem, und sie wird wieder
veralten. Richtig waere, sie aus `rechte.js` abzuleiten -- dort
steht jede Seite des Hauses genau einmal. Das ist ein eigener
Umbau; bis dahin gilt: Wer eine Seite anlegt, traegt sie hier ein. */
const SEITEN = [ const SEITEN = [
"start.html", "uebersicht.html", "aufgaben.html", "kalender.html", "calls.html", "start.html", "uebersicht.html", "aufgaben.html", "kalender.html", "calls.html",
"content.html", "bereich.html?b=live", "dateien.html", "personen.html", "content.html", "bereich.html?b=live", "dateien.html", "personen.html",
"scouting.html", "steckbrief.html", "profil.html", "report.html", "scouting.html", "steckbrief.html", "profil.html", "report.html",
"wissen.html", "startcheck.html", "automation.html", "wissen.html", "startcheck.html", "automation.html",
"manager-ziele.html", "anleitung.html",
]; ];
/* Fünf Durchgänge, nicht vier. /* Fünf Durchgänge, nicht vier.
+26
View File
@@ -203,6 +203,32 @@ export const SEITEN = {
ihre Daten offen zu lassen waere dieselbe Luecke wie am ihre Daten offen zu lassen waere dieselbe Luecke wie am
11.09.2026 bei content.html, nur andersherum. */ 11.09.2026 bei content.html, nur andersherum. */
"/workspace/manager-ziele.html": ["spicy", "admin", "manager", "scout"], "/workspace/manager-ziele.html": ["spicy", "admin", "manager", "scout"],
/* ====================================================================
DIE ANLEITUNG -- MIT 'admin', OBWOHL DOGFATHER KEINE KACHEL HAT
(06.10.2026)
Das sieht nach einem Widerspruch zu bereiche.js aus, wo 'admin'
bei der Kachel fehlt, und ist keiner. Zwei verschiedene Fragen:
bereiche.js -- WAS WIRD ANGEBOTEN. DogFather bekommt keine
Einweisung (so der Bauplan), also keine Kachel.
hier -- WER DARF HEREIN, wenn er die Adresse kennt.
Er muss herein duerfen: Ab Etappe 4 oeffnet dieselbe Adresse fuer
ihn die Pflege-Ansicht, und schon vorher muss er nachsehen koennen,
was seine Leute zu lesen bekommen -- sonst pflegt er blind.
DIE CREW BLEIBT DRAUSSEN. 'hand', 'modi', 'linke' und 'gast' stehen
nicht in dieser Zeile und bekommen damit 403. Die Anleitung ist
eine Sache des Agenturhauses; Team Dogi bekommt spaeter eine
eigene oder keine (Entscheidung 06.10.2026: erst einmal keine,
aber die Daten sind haus-bewusst angelegt).
UND SIE IST NICHT DIE EINZIGE SCHRANKE: workspace-anleitung.js
prueft Haus und Rolle noch einmal selbst, und die Hinweise tun es
ein drittes Mal. Am 15.09.2026 ist genau dort ein Weg fuer die
Community durchgerutscht, der in dieser Tafel sauber gesperrt war. */
"/workspace/anleitung.html": ["spicy", "admin", "manager", "scout", "creator"],
/* NUR DogFather (02.09.2026). Die Rollenauswahl verspricht das seit /* NUR DogFather (02.09.2026). Die Rollenauswahl verspricht das seit
jeher ("Manager -- dieselben Rechte, ausser der jeher ("Manager -- dieselben Rechte, ausser der
Personenverwaltung"), die Schranke hielt sich nur nicht daran. Personenverwaltung"), die Schranke hielt sich nur nicht daran.
+133
View File
@@ -0,0 +1,133 @@
/* =====================================================================
workspace-anleitung.js — die Einweisung je Rolle (Etappe 1)
Bauplan: „Kachel Anleitung", Stand 06.10.2026, geprueft in
`02 Projekte/Anleitung-Kachel – Bauplan.md`.
---------------------------------------------------------------------
WAS DIESE SCHNITTSTELLE LIEFERT UND WAS NICHT
Sie liefert die TEXTE und die STUFE je Kachel. Sie liefert NICHT den
Namen, das Symbol, die Farbe oder die Adresse einer Kachel — die
stehen in `workspace/assets/js/bereiche.js`, und nur dort. Die Seite
verbindet beides ueber den Kachel-Schluessel
(`window.Bereiche.schluesselVonZiel`).
Das ist Absicht und der Grund, warum diese Datei so kurz ist: Der
Server kennt die Kacheln des Agenturhauses gar nicht. `bereicheFuer`
gibt dort `null` zurueck — „nimm die Liste aus dem Browser". Haette
ich sie hier noch einmal hingeschrieben, um „alles an einer Stelle"
zu haben, waere genau das die zweite Liste, die beim naechsten Umbau
veraltet und dann eine Kachel erklaert, die es nicht mehr gibt.
---------------------------------------------------------------------
DREI SCHRANKEN, NICHT EINE
1. `rechte.js` sperrt die Seite fuer die Crew.
2. Diese Datei prueft Haus und Rolle noch einmal selbst.
3. Die Hinweise (ab Etappe 2) pruefen es ein drittes Mal.
Am 15.09.2026 ist ein Weg fuer die Community genau durch Luecke 3
gerutscht, obwohl Tafel und Seite sauber gesperrt waren. Die
Hinweise sind eine eigene Tuer.
===================================================================== */
import express from "express";
import { db, sitzungLesen } from "./workspace.js";
import {
STUFEN, FASSUNGEN, PFLEGE_ROLLEN,
} from "./anleitung-tabellen.js";
export const anleitungRouter = express.Router();
const HAUS = "agentur";
function angemeldet(req, res, next) {
const person = sitzungLesen(req);
if (!person) return res.status(401).json({ fehler: "nicht_angemeldet" });
req.person = person;
next();
}
anleitungRouter.use("/workspace/api/anleitung", angemeldet);
/** Wessen Fassung wird gezeigt?
*
* `req.sicht` ist der HAUSEIGENE Umschalter: DogFather kann die Sicht
* eines anderen einnehmen, und dann zeigt jede Seite das, was dieser
* andere sieht. Hier gilt dasselbe — und genau deshalb braucht die
* Anleitung keine eigene „Vorschau": Die gibt es schon, sie heisst
* „Meine Sicht" und steht in der Kopfleiste.
*
* Ohne gewaehlte Sicht ist DogFather `admin`, und fuer `admin` gibt es
* keine Fassung (Bauplan, Kapitel 11). Dann sagt die Seite das, statt
* ihm irgendeine fremde Rolle unterzuschieben. */
function fassungFuer(req) {
const person = req.sicht || req.person;
return { person, rolle: String(person?.rolle || "") };
}
anleitungRouter.get("/workspace/api/anleitung", (req, res) => {
try {
const { person, rolle } = fassungFuer(req);
/* DIE CREW HAT HIER NICHTS ZU SUCHEN. 404 und nicht 403: Auf der
Crew-Adresse gibt es diese Seite nicht, und „gibt es nicht" ist
die richtige Auskunft — 403 waere der Hinweis, dass es sie
woanders doch gibt. */
if (person?.haus === "crew") return res.status(404).json({ fehler: "nicht_hier" });
const d = db();
const darfPflegen = PFLEGE_ROLLEN.includes(String(req.person?.rolle || ""));
if (!FASSUNGEN.includes(rolle)) {
/* DogFather ohne gewaehlte Sicht. Kein Fehler, sondern eine
Auskunft: Er bekommt keine Einweisung, kann aber jede ansehen.
Die Rollen stehen MIT Namen dabei, damit die Seite keine
zweite Rollenliste braucht. */
return res.json({
rolle, hat_fassung: false, darf_pflegen: darfPflegen,
fassungen: FASSUNGEN,
satz: "Für dich gibt es keine Einweisung – du kennst den Laden. "
+ "Wähle oben unter „Meine Sicht“ eine Rolle, dann siehst du genau das, "
+ "was diese Person zu lesen bekommt.",
});
}
const kopf = d.prepare(
"SELECT leitgedanke FROM anl_rolle WHERE haus = ? AND rolle = ?").get(HAUS, rolle);
const karten = d.prepare(
`SELECT kachel, stufe, wozu, tust, merke, reihe, geaendert
FROM anl_karte WHERE haus = ? AND rolle = ?
ORDER BY reihe, id`).all(HAUS, rolle);
const zeilen = d.prepare(
`SELECT art, titel, text, ziel, reihe
FROM anl_zeile WHERE haus = ? AND rolle = ?
ORDER BY art, reihe, id`).all(HAUS, rolle);
const nachArt = (art) => zeilen.filter((z) => z.art === art);
/* DIE ZAHL GEHOERT IN DIE ANTWORT, nicht nur in die Liste. Die
Seite kann damit sagen „18 Karten" — und eine Pruefung kann
nachrechnen, ohne die Liste selbst zu zaehlen. */
res.json({
rolle,
hat_fassung: true,
darf_pflegen: darfPflegen,
leitgedanke: kopf?.leitgedanke || "",
stufen: STUFEN,
saetze: nachArt("satz").map((z) => z.text),
schritte: nachArt("schritt").map((z) => ({ titel: z.titel, text: z.text, ziel: z.ziel })),
karten,
nicht: nachArt("nicht").map((z) => ({ titel: z.titel, text: z.text })),
takt: nachArt("takt").map((z) => ({ titel: z.titel, text: z.text })),
fragen: nachArt("frage").map((z) => ({ titel: z.titel, text: z.text })),
anzahl: karten.length,
});
} catch (fehler) {
console.error("[workspace] Anleitung:", fehler?.message);
res.status(500).json({ fehler: "serverfehler" });
}
});
+6
View File
@@ -36,6 +36,7 @@ import { hilfeTabellen } from "./hilfe-tabellen.js";
import { supportTabellen } from "./support-tabellen.js"; import { supportTabellen } from "./support-tabellen.js";
import { notizTabellen } from "./notiz-tabellen.js"; import { notizTabellen } from "./notiz-tabellen.js";
import { managerZieleTabellen } from "./manager-ziele-tabellen.js"; import { managerZieleTabellen } from "./manager-ziele-tabellen.js";
import { anleitungTabellen } from "./anleitung-tabellen.js";
import { reaktionTabellen } from "./reaktion-tabellen.js"; import { reaktionTabellen } from "./reaktion-tabellen.js";
import { spendenTabellen } from "./spenden-tabellen.js"; import { spendenTabellen } from "./spenden-tabellen.js";
import { unterstuetzungTabellen } from "./unterstuetzung-tabellen.js"; import { unterstuetzungTabellen } from "./unterstuetzung-tabellen.js";
@@ -6448,6 +6449,11 @@ export function db() {
muss diese Zeile danach kommen. Stünde sie davor, legte SQLite muss diese Zeile danach kommen. Stünde sie davor, legte SQLite
die Fremdschlüssel auf eine Tabelle an, die es noch nicht gibt. */ die Fremdschlüssel auf eine Tabelle an, die es noch nicht gibt. */
managerZieleTabellen(d); managerZieleTabellen(d);
/* DIE ANLEITUNG nach den Personen -- sie verweist mit
`geaendert_von` darauf. Dieselbe Begruendung wie eine Zeile
hoeher: Stuende sie davor, legte SQLite den Fremdschluessel
auf eine Tabelle, die es noch nicht gibt. */
anleitungTabellen(d);
reaktionTabellen(d); reaktionTabellen(d);
spendenTabellen(d); spendenTabellen(d);
/* Die Wege zum Unterstützen (24.09.2026). Sie hängen an personen /* Die Wege zum Unterstützen (24.09.2026). Sie hängen an personen
+153
View File
@@ -0,0 +1,153 @@
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>Anleitung · Creator Workspace</title>
<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=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/anleitung.css?v=202610061325" />
<!-- module.css an VORLETZTER, haus.css an LETZTER Stelle. Die
Reihenfolge ist keine Geschmacksfrage: haus.css setzt nur
Variablen, und bei Variablen entscheidet allein, wer zuletzt
kommt. pruef-css-klassen.mjs misst genau dieses Paar nach. -->
<link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head>
<body class="start">
<div class="schleier" aria-hidden="true"></div>
<header class="kopfleiste">
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
<path d="M14.5 5.5 8 12l6.5 6.5" />
</svg>
<span class="zurueck-knopf__text">Zurück</span>
</button>
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Creator&nbsp;Workspace</a> · Anleitung</span></p>
<div class="kopfleiste__rechts">
<span class="wer" id="wer">…</span>
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
</div>
</header>
<main class="inhalt inhalt--breit an-seite">
<section class="kopf-zeile">
<div>
<p class="marke">Einweisung</p>
<h1 class="titel" id="seiten-titel">Anleitung</h1>
<p class="unterzeile">
Was du brauchst und was nicht. Fang oben an – der Rest ist
zugeklappt, bis du ihn brauchst.
</p>
</div>
</section>
<p class="ladefehler" id="ladefehler" hidden>
<span class="ladefehler__satz">Die Seite konnte nicht geladen werden.</span>
<span class="ladefehler__grund" id="ladefehler-grund"></span>
<button type="button" class="ladefehler__knopf" id="nochmal">Erneut versuchen</button>
</p>
<!-- ==================================================================
OHNE EIGENE FASSUNG (DogFather)
Er bekommt keine Einweisung, kann aber jede ansehen – über den
Sicht-Umschalter, den es in der Kopfleiste ohnehin gibt. Eine
zweite Rollenauswahl hier wäre dieselbe Funktion ein zweites
Mal, an einer Stelle, an der sie niemand sucht.
================================================================== -->
<p class="an-ohne" id="ohne-fassung" hidden></p>
<div id="fassung" hidden>
<!-- ---------- IN 60 SEKUNDEN -------------------------------------
Steht VOR allem anderen und ist nicht zuklappbar: Drei Sätze
sind kürzer als der Knopf, mit dem man sie aufklappen würde. -->
<section class="an-block an-block--kopf">
<h2 class="an-block__titel">In 60 Sekunden</h2>
<p class="an-leit" id="leitgedanke"></p>
<ul class="an-saetze" id="saetze"></ul>
</section>
<!-- ---------- ERSTE SCHRITTE ------------------------------------- -->
<section class="an-block">
<h2 class="an-block__titel">Erste Schritte: deine ersten 10 Minuten</h2>
<ol class="an-schritte" id="schritte"></ol>
</section>
<!-- ==================================================================
DER STUFEN-FILTER
Er steht ÜBER den Stufen und nicht in der Kopfzeile: Dort wäre
er ein Bedienelement ohne sichtbare Wirkung – man sieht erst
beim Scrollen, was er getan hat. Hier steht er auf derselben
Höhe wie das, was er filtert.
================================================================== -->
<div class="an-filter" role="group" aria-label="Nach Stufe filtern" id="filter"></div>
<!-- Die drei Stufenblöcke werden gebaut, nicht geschrieben: Welche
Stufen es gibt, sagt der Server (STUFEN in
anleitung-tabellen.js). Stünden sie hier noch einmal, wären es
zwei Listen, von denen eine veraltet. -->
<div id="stufen" aria-live="polite"></div>
<!-- ---------- NICHT DEINS ---------------------------------------- -->
<section class="an-block" id="nicht-block" hidden>
<h2 class="an-block__titel">Das kannst du liegen lassen</h2>
<ul class="an-nicht" id="nicht"></ul>
</section>
<!-- ---------- RHYTHMUS -------------------------------------------- -->
<section class="an-block" id="takt-block" hidden>
<h2 class="an-block__titel">Dein Rhythmus</h2>
<dl class="an-takt" id="takt"></dl>
</section>
<!-- ---------- FRAGEN ---------------------------------------------- -->
<section class="an-block" id="fragen-block" hidden>
<h2 class="an-block__titel">Häufige Fragen</h2>
<div class="an-fragen" id="fragen"></div>
</section>
<!-- ---------- HILFE ------------------------------------------------
Zuletzt und ohne Überschrift in Großbuchstaben: Wer bis hierher
liest, hat seine Antwort nicht gefunden. -->
<p class="an-hilfe">
Nichts dabei? Schreib deiner Betreuung im
<a href="chat.html">Chat</a> – oder melde einen Fehler an der Seite
über <a href="support.html">Support</a>.
</p>
</div>
</main>
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und
kopf.js liest daraus die Leitungsrollen. Ohne sie stürzt jede
Seite ab, und zwar nur in der Browserkonsole -- die Kopfleiste
kommt trotzdem.
Und anleitung.js braucht es doppelt: Symbol, Farbe, Name und
Adresse jeder Karte kommen von dort, nicht vom Server. -->
<script src="assets/js/bereiche.js?v=202610061325" defer></script>
<!-- wahl.js gehört zu kopf.js: Der Sicht-Umschalter baut daraus seine
Liste. pruef-css-klassen setzt das durch, und zwar auch die
Reihenfolge -- kopf.js fragt beim Aufbau nach dem fertigen
Bedienelement. -->
<script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/anleitung.js?v=202610061325" defer></script>
</body>
</html>
+5 -5
View File
@@ -16,8 +16,8 @@
verdeckt. Gefunden hat es pruef-struktur. verdeckt. Gefunden hat es pruef-struktur.
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
<!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als <!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als
Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet
ausserhalb der App -- auf einer Seite, die genau erklaeren soll, ausserhalb der App -- auf einer Seite, die genau erklaeren soll,
@@ -33,7 +33,7 @@
schreibt jede Seite app.webmanifest -- auch die hier. --> schreibt jede Seite app.webmanifest -- auch die hier. -->
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<style> <style>
/* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite /* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite
soll auch dann noch etwas anzeigen, wenn genau das schiefgeht, soll auch dann noch etwas anzeigen, wenn genau das schiefgeht,
@@ -135,7 +135,7 @@
<script src="assets/js/anruf-probe.js?v=202610061028" defer></script> <script src="assets/js/anruf-probe.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+4 -4
View File
@@ -23,25 +23,25 @@
}, },
"icons": [ "icons": [
{ {
"src": "/assets/img/app-symbole/workspace-192.png?v=202610061028", "src": "/assets/img/app-symbole/workspace-192.png?v=202610061325",
"sizes": "192x192", "sizes": "192x192",
"type": "image/png", "type": "image/png",
"purpose": "any" "purpose": "any"
}, },
{ {
"src": "/assets/img/app-symbole/workspace-512.png?v=202610061028", "src": "/assets/img/app-symbole/workspace-512.png?v=202610061325",
"sizes": "512x512", "sizes": "512x512",
"type": "image/png", "type": "image/png",
"purpose": "any" "purpose": "any"
}, },
{ {
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202610061028", "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202610061325",
"sizes": "192x192", "sizes": "192x192",
"type": "image/png", "type": "image/png",
"purpose": "maskable" "purpose": "maskable"
}, },
{ {
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202610061028", "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202610061325",
"sizes": "512x512", "sizes": "512x512",
"type": "image/png", "type": "image/png",
"purpose": "maskable" "purpose": "maskable"
+474
View File
@@ -0,0 +1,474 @@
/* =====================================================================
anleitung.css — die Einweisung je Rolle (06.10.2026)
=====================================================================
VIER REGELN, DIE HIER ÜBERALL GELTEN:
1. KEINE EIGENEN FARBEN. Jede Karte trägt den Ton ihrer echten
Kachel (`data-ton`, gesetzt von anleitung.js). Eine eigene
Farbwelt hier wäre eine zweite Wahrheit über dieselben Kacheln --
und man würde die Anleitung nicht mehr mit der Startseite
zusammenlesen können.
2. DIE STUFE IST EIN WORT. Sie steht an jeder Karte als Text, nicht
nur als Farbe. Ein Mensch, der Farben schlecht unterscheidet,
läse die Seite sonst ohne ihre einzige Ordnung.
3. MOBILE FIRST ALS REGEL, NICHT ALS ZAHL. Das Kartengitter bricht
über `auto-fill` um, nicht über eine Schwelle in Pixeln. Eine
feste Zahl ist eine Rechnung von gestern und wird beim nächsten
zusätzlichen Element still falsch.
4. NICHTS UNTER 11,5 PIXELN. Hausregel seit dem 01.09.2026,
nachgemessen von pruef-css-klassen. Kleinster Wert hier: .78rem.
===================================================================== */
.an-seite {
/* Der Abstand zwischen den großen Blöcken -- einmal gesetzt, überall
benutzt. Drei verschiedene Abstände sind der Grund, warum eine
Seite „unruhig" aussieht, ohne dass man sagen kann, woran es liegt. */
--an-luft: 26px;
}
/* =====================================================================
OHNE EIGENE FASSUNG (DogFather)
===================================================================== */
.an-ohne {
margin: 18px 0 0;
padding: 16px 18px;
border: 1px solid var(--rand);
border-radius: var(--radius-klein, 12px);
background: var(--flaeche);
color: var(--text-still);
font-size: .95rem;
line-height: 1.6;
max-width: 62ch;
}
/* =====================================================================
BLÖCKE
=====================================================================
JEDER TEXTBLOCK BEKOMMT EINE FLÄCHE (06.10.2026, nach dem ersten Bild).
Der erste Entwurf setzte „In 60 Sekunden", „Erste Schritte",
„Nicht deins" und „Dein Rhythmus" ohne Hintergrund auf die Seite.
Auf dem Bild bei 412 px lief der Satz „Fast alles andere füllt deine
Betreuung für dich" quer über das helle Wasserzeichen des
Hintergrundbildes und war dort kaum zu lesen.
Das ist kein Schönheitsfehler, sondern der Grund, warum im Haus
JEDER Textträger `--flaeche` hat (`rgba(9,13,22,.89)`, also fast
deckend): Die Startseite hat ein Foto im Hintergrund, und wie hell
es an einer bestimmten Stelle ist, weiß niemand vorher. Ein
Kontrast, der vom Bildausschnitt abhängt, ist kein Kontrast.
Die Fase (`--fase`) statt eines Radius: dieselbe Form wie `.mz-kopf`
und die übrigen großen Träger im Haus. */
.an-block {
margin-top: var(--an-luft);
padding: 16px 18px;
border: 1px solid var(--rand);
background: var(--flaeche);
clip-path: polygon(var(--fase, 18px) 0, 100% 0, 100% 100%, 0 100%, 0 var(--fase, 18px));
}
.an-block__titel {
margin: 0 0 10px;
font-size: 1.05rem;
font-weight: 700;
letter-spacing: .01em;
color: var(--text);
}
.an-leit {
margin: 0 0 12px;
font-size: 1rem;
line-height: 1.6;
color: var(--text);
max-width: 68ch;
}
.an-saetze { margin: 0; padding: 0; list-style: none; }
.an-saetze__zeile {
position: relative;
padding-left: 20px;
margin-bottom: 7px;
font-size: .95rem;
line-height: 1.55;
color: var(--text-leise);
max-width: 68ch;
}
/* Ein Punkt statt eines Aufzählungszeichens: Die drei Sätze sind keine
Liste von Dingen, sondern drei Aussagen. Der Punkt gliedert, ohne zu
zählen. */
.an-saetze__zeile::before {
content: "";
position: absolute;
left: 4px; top: .62em;
width: 6px; height: 6px;
border-radius: 50%;
background: var(--akzent);
opacity: .75;
}
/* =====================================================================
ERSTE SCHRITTE
===================================================================== */
.an-schritte {
margin: 0;
padding: 0 0 0 1.35em;
display: grid;
gap: 9px;
}
.an-schritt { max-width: 68ch; }
/* DIE GANZE ZEILE IST DAS ZIEL, nicht nur das Stichwort.
Gemessen am 06.10.2026: Der Verweis war 20 px hoch -- die halbe
Hausgröße für etwas, das ein Daumen treffen soll. 44 px ist die
Zahl, die im Haus für Berührziele gilt, und sie steht hier als
Mindesthöhe und nicht als feste: Zwei Zeilen Text dürfen wachsen. */
.an-schritt__rumpf {
display: block;
min-height: 44px;
padding: 8px 10px;
margin-left: -10px;
border-radius: var(--radius-klein, 12px);
font-size: .95rem;
line-height: 1.55;
color: var(--text-leise);
text-decoration: none;
transition: background var(--tempo, .18s);
}
a.an-schritt__rumpf:hover {
background: color-mix(in srgb, var(--akzent) 10%, transparent);
}
a.an-schritt__rumpf:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
.an-schritt__name {
font-weight: 700;
color: var(--text);
margin-right: .4em;
}
a.an-schritt__rumpf .an-schritt__name { color: var(--akzent); }
a.an-schritt__rumpf:hover .an-schritt__name { text-decoration: underline; }
/* =====================================================================
DER STUFEN-FILTER
===================================================================== */
.an-filter {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: var(--an-luft);
}
.an-filter__knopf {
font: inherit;
font-size: .85rem;
font-weight: 650;
/* 40 Pixel hoch: Die Hausgröße für etwas, das ein Daumen trifft. */
min-height: 40px;
padding: 0 15px;
border-radius: 999px;
border: 1px solid var(--rand);
/* NICHT durchsichtig: Der Filter steht zwischen zwei Flaechen und
damit direkt auf dem Hintergrundbild. Ein durchsichtiger Knopf ist
genau so gut lesbar, wie der Bildausschnitt es zulaesst -- und das
weiss niemand vorher. */
background: var(--flaeche);
color: var(--text-still);
cursor: pointer;
transition: background var(--tempo, .18s), color var(--tempo, .18s),
border-color var(--tempo, .18s);
}
.an-filter__knopf:hover { border-color: var(--rand-hell, var(--rand)); color: var(--text); }
.an-filter__knopf:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
/* DER GEWÄHLTE ZUSTAND HÄNGT AN `aria-pressed`, NICHT AN EINER KLASSE.
Damit ist er für Vorleseprogramme und fürs Auge dieselbe Tatsache --
eine Klasse daneben wäre die, die beim nächsten Umbau vergessen
wird, und dann sagt der Knopf etwas anderes, als er aussieht. */
.an-filter__knopf[aria-pressed="true"] {
/* Auf die FLAECHE gemischt und nicht auf `transparent`: Sonst waere
ausgerechnet der gewaehlte Knopf der durchsichtigste von allen. */
background: color-mix(in srgb, var(--akzent) 22%, var(--flaeche));
border-color: color-mix(in srgb, var(--akzent) 45%, transparent);
color: var(--text);
}
/* =====================================================================
EIN STUFENBLOCK
===================================================================== */
.an-stufe { margin-top: var(--an-luft); }
.an-stufe__falte {
border: 1px solid var(--rand);
border-radius: var(--radius-klein, 12px);
background: var(--flaeche);
overflow: hidden;
}
.an-stufe__griff {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
cursor: pointer;
list-style: none;
user-select: none;
}
.an-stufe__griff::-webkit-details-marker { display: none; }
.an-stufe__griff:focus-visible { outline: 2px solid var(--akzent); outline-offset: -2px; }
/* Das Dreieck selbst gebaut, weil das eingebaute je nach Browser
woanders sitzt und sich nicht färben lässt. */
.an-stufe__griff::before {
content: "";
flex: none;
width: 8px; height: 8px;
border-right: 2px solid var(--text-still);
border-bottom: 2px solid var(--text-still);
transform: rotate(-45deg);
transition: transform var(--tempo, .18s);
}
.an-stufe__falte[open] > .an-stufe__griff::before { transform: rotate(45deg); }
.an-stufe__titel {
flex: 1 1 auto;
font-size: 1.02rem;
font-weight: 700;
color: var(--text);
}
.an-stufe__zahl {
flex: none;
min-width: 26px;
padding: 2px 8px;
border-radius: 999px;
background: color-mix(in srgb, var(--text-still) 16%, transparent);
color: var(--text-still);
font-size: .8rem;
font-weight: 700;
text-align: center;
font-variant-numeric: tabular-nums;
}
.an-stufe__unter {
margin: 0;
padding: 0 16px 4px;
font-size: .85rem;
color: var(--text-still);
}
/* DAS GITTER MISST, STATT ZU RECHNEN. `auto-fill` mit einer
Mindestbreite bricht genau dann um, wenn der Platz nicht reicht --
auf einem 320er Telefon einspaltig, auf einem breiten Bildschirm
dreispaltig, ohne eine einzige Schwelle in Pixeln. */
.an-stufe__gitter {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
gap: 12px;
padding: 12px 16px 16px;
}
/* =====================================================================
EINE KARTE
===================================================================== */
.an-karte {
display: flex;
flex-direction: column;
gap: 10px;
padding: 14px;
border: 1px solid var(--rand);
border-radius: var(--radius-klein, 12px);
background: var(--flaeche);
/* Der Ton der echten Kachel, als schmaler Streifen links. Nicht als
Fläche: Achtzehn volle Farbflächen untereinander sind ein
Jahrmarkt, und augenschonend ist etwas anderes. */
border-left: 3px solid var(--ton, var(--rand));
}
.an-karte__kopf { display: flex; align-items: center; gap: 10px; }
.an-karte__zeichen {
flex: none;
display: grid;
place-items: center;
width: 38px; height: 38px;
border-radius: 10px;
background: color-mix(in srgb, var(--ton, var(--akzent)) 14%, transparent);
}
.an-karte__svg { width: 24px; height: 24px; }
.an-karte__namen {
display: flex;
flex-wrap: wrap;
align-items: baseline;
gap: 4px 8px;
min-width: 0;
}
.an-karte__name {
margin: 0;
font-size: .98rem;
font-weight: 700;
color: var(--text);
}
.an-karte__stufe {
font-size: .78rem;
font-weight: 700;
letter-spacing: .05em;
text-transform: uppercase;
color: var(--ton, var(--text-still));
}
.an-karte__zeilen { margin: 0; display: grid; gap: 2px; }
.an-karte__schild {
font-size: .78rem;
font-weight: 700;
letter-spacing: .05em;
text-transform: uppercase;
color: var(--text-still);
}
.an-karte__text {
margin: 0 0 6px;
font-size: .9rem;
line-height: 1.5;
color: var(--text-leise);
}
.an-karte__text:last-child { margin-bottom: 0; }
.an-karte__weg {
align-self: flex-start;
margin-top: auto;
/* 40 Pixel: dieselbe Daumenhöhe wie der Filter. */
min-height: 40px;
display: inline-flex;
align-items: center;
padding: 0 14px;
border-radius: 999px;
border: 1px solid color-mix(in srgb, var(--ton, var(--akzent)) 40%, transparent);
color: var(--ton, var(--akzent));
font-size: .85rem;
font-weight: 650;
text-decoration: none;
transition: background var(--tempo, .18s);
}
.an-karte__weg:hover { background: color-mix(in srgb, var(--ton, var(--akzent)) 14%, transparent); }
.an-karte__weg:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
/* =====================================================================
NICHT DEINS
===================================================================== */
.an-nicht { margin: 0; padding: 0; list-style: none; display: grid; gap: 8px; }
.an-nicht__zeile {
display: flex;
flex-wrap: wrap;
gap: 2px 8px;
padding: 10px 14px;
border: 1px dashed var(--rand);
border-radius: var(--radius-klein, 12px);
font-size: .92rem;
line-height: 1.5;
}
/* Gestrichelt und nicht durchgestrichen: Durchgestrichener Text ist
schlecht lesbar, und „nicht deins" heißt nicht „erledigt". */
.an-nicht__was { font-weight: 650; color: var(--text-still); }
.an-nicht__wer { color: var(--text-leise); }
/* =====================================================================
RHYTHMUS
===================================================================== */
.an-takt {
margin: 0;
display: grid;
/* Erste Spalte so breit wie ihr längster Eintrag, nicht breiter --
„Vor und nach dem LIVE" soll nicht umbrechen, und „Täglich" soll
keine halbe Zeile Leerraum erzeugen. */
grid-template-columns: max-content 1fr;
gap: 6px 16px;
align-items: baseline;
}
.an-takt__wann {
font-size: .85rem;
font-weight: 700;
color: var(--text);
}
.an-takt__was {
margin: 0;
font-size: .92rem;
line-height: 1.5;
color: var(--text-leise);
}
/* Auf schmalen Geräten untereinander: Zwei Spalten mit „Vor und nach
dem LIVE" links lassen rechts vier Wörter übrig. Die Regel misst
nicht, deshalb hier doch eine Schwelle -- und sie steht direkt an
dem, was sie betrifft. */
@media (max-width: 460px) {
.an-takt { grid-template-columns: 1fr; gap: 2px; }
.an-takt__was { margin-bottom: 8px; }
}
/* =====================================================================
FRAGEN
===================================================================== */
.an-fragen { display: grid; gap: 8px; }
.an-frage {
border: 1px solid var(--rand);
border-radius: var(--radius-klein, 12px);
background: var(--flaeche);
overflow: hidden;
}
.an-frage__frage {
padding: 12px 14px;
cursor: pointer;
list-style: none;
font-size: .94rem;
font-weight: 650;
color: var(--text);
}
.an-frage__frage::-webkit-details-marker { display: none; }
.an-frage__frage:focus-visible { outline: 2px solid var(--akzent); outline-offset: -2px; }
.an-frage__antwort {
margin: 0;
padding: 0 14px 13px;
font-size: .92rem;
line-height: 1.6;
color: var(--text-leise);
max-width: 68ch;
}
/* =====================================================================
HILFE
===================================================================== */
.an-hilfe {
margin: var(--an-luft) 0 0;
/* Dieselbe Flaeche wie die Bloecke darueber, aus demselben Grund --
nur leiser: kein Titel, kleinere Schrift. Ein Schlusssatz soll
lesbar sein, ohne sich wie ein weiterer Abschnitt aufzufuehren. */
padding: 14px 18px;
border: 1px solid var(--rand);
background: var(--flaeche);
clip-path: polygon(var(--fase, 18px) 0, 100% 0, 100% 100%, 0 100%, 0 var(--fase, 18px));
font-size: .9rem;
line-height: 1.6;
color: var(--text-still);
}
.an-hilfe a { color: var(--akzent); }
/* =====================================================================
WENIGER BEWEGUNG, WENN JEMAND DAS SO EINGESTELLT HAT
===================================================================== */
@media (prefers-reduced-motion: reduce) {
.an-filter__knopf,
.an-schritt__rumpf,
.an-stufe__griff::before,
.an-karte__weg { transition: none; }
}
+46
View File
@@ -1198,6 +1198,52 @@ body.start > main { position: relative; z-index: 1; }
maximiert DANN den Abstand. Wer den 48. hinzufuegt, sollte wissen, maximiert DANN den Abstand. Wer den 48. hinzufuegt, sollte wissen,
dass es eng wird, und notfalls einen alten verschieben. */ dass es eng wird, und notfalls einen alten verschieben. */
[data-ton="47"] { --ton: #7368ff; } /* Manager-Ziele (gerechnet 02.10.2026) */ [data-ton="47"] { --ton: #7368ff; } /* Manager-Ziele (gerechnet 02.10.2026) */
/* ======================================================================
TON 48 -- UND WARUM ER NICHT VOM HAUSWERKZEUG STAMMT (06.10.2026)
Der Kommentar bei Ton 47 sagt: "Wer den 48. hinzufuegt, sollte wissen,
dass es eng wird, und notfalls einen alten verschieben." Genau das ist
eingetreten, und die Loesung war eine dritte.
`node tools/kachel-farbe-einzeln.mjs 48` schlug #b0ec0a vor:
Abstand zum naechsten Ton ueberhaupt 0,0793
davon zur naechsten AGENTUR-Kachel 0,0815 (Ton 17, "Agentur")
Kontrast 13,28:1, Buntheit 0,220
Beides war unbefriedigend. 0,0815 waere der engste Abstand im Haus
gewesen, und der Nachbar waere ausgerechnet eine Kachel, die ein
Creator direkt daneben sieht -- zwei Gelbgruen nebeneinander. Dazu
13,28:1 auf dunklem Grund: Von 47 Toenen sind nur zwei heller.
WAS DAS WERKZEUG NICHT WEISS: Es rechnet gegen ALLE 47 Toene. Die
Haelfte davon gehoert aber zum anderen Haus (Team Dogi) und erscheint
nie auf demselben Bildschirm. Es optimiert damit gegen Nachbarn, die
es gar nicht gibt, und verschenkt dabei den Platz, der zwischen den
Kacheln liegt, die man WIRKLICH zusammen sieht.
Nachgerechnet gegen die 24 Toene des Agenturhauses, mit einer
Obergrenze beim Kontrast (11:1, damit nichts blendet) und der
Buntheits-Untergrenze, die im Haus tatsaechlich vorkommt (0,125 --
darunter liegt nur Ton 44):
#ff7eed
Abstand zur naechsten AGENTUR-Kachel 0,1168 (Ton 6) -- 43 % mehr
Abstand zur naechsten Crew-Kachel 0,0656
Kontrast 8,46:1 (Hausmedian 6,95)
Buntheit 0,202
Der Abstand zum anderen Haus ist kleiner, und das ist der bewusste
Tausch: Dort sitzt niemand, der beide zugleich sieht. Innerhalb des
Agenturhauses ist dieser Ton weiter von allem entfernt als jedes Paar,
das heute schon im Haus steht (engstes Paar: 0,0899).
ACHTUNG BEIM NAECHSTEN MAL: `kachel-farbe-einzeln.mjs 48 --schreiben`
wuerde diesen Wert durch #b0ec0a ERSETZEN. Das Werkzeug kennt die
Haeuser nicht. Wer es laufen laesst, macht den Ton schlechter, ohne
es zu merken -- entweder das Werkzeug haus-bewusst nachruesten oder
Ton 48 auslassen.
====================================================================== */
[data-ton="48"] { --ton: #ff7eed; } /* Anleitung (gerechnet 06.10.2026, siehe oben) */
/* WARUM ES KEINEN TON 46 GIBT (25.09.2026) /* WARUM ES KEINEN TON 46 GIBT (25.09.2026)
Die Tuer ins andere Haus trug bis heute Ton 40 -- dieselbe Nummer Die Tuer ins andere Haus trug bis heute Ton 40 -- dieselbe Nummer
+281
View File
@@ -0,0 +1,281 @@
/* =====================================================================
anleitung.js — die Einweisung je Rolle (Etappe 1)
---------------------------------------------------------------------
DIE KARTEN ENTSTEHEN AUS ZWEI QUELLEN, UND DAS IST DER PUNKT
Der Server liefert je Kachel die STUFE und drei Sätze. Name, Symbol,
Farbe und Adresse kommen aus `window.Bereiche` — derselben Liste, aus
der die Startseite ihre Kacheln baut.
Deshalb sieht eine Karte hier aus wie die echte Kachel, und zwar
dauerhaft: Wird eine Kachel umbenannt oder bekommt sie eine andere
Farbe, ändert sich die Karte mit. Stünde der Name in der Datenbank,
wäre die Anleitung ab diesem Tag eine Beschreibung von etwas, das es
nicht mehr gibt — und niemandem würde es auffallen.
Verbunden wird über `Bereiche.schluesselVonZiel`.
===================================================================== */
(() => {
'use strict';
const BASIS = '/workspace/api/anleitung';
const el = (tag, klasse, text) => {
const k = document.createElement(tag);
if (klasse) k.className = klasse;
if (text !== undefined) k.textContent = text;
return k;
};
const $ = (id) => document.getElementById(id);
async function hole(pfad, einst = {}) {
const a = await fetch(pfad, { credentials: 'same-origin', ...einst });
/* Abgemeldet heißt zurück zur Anmeldung — nicht eine leere Seite
mit einer Fehlermeldung, die niemand einordnen kann. */
if (a.status === 401) { location.assign('/workspace/'); throw new Error('abgemeldet'); }
return a;
}
/* =====================================================================
DIE KACHELN DIESER ROLLE — abgeleitet, nicht abgeschrieben
===================================================================== */
function kachelnFuer(rolle) {
const B = window.Bereiche;
const nach = new Map();
if (!B || !Array.isArray(B.GRUPPEN)) return nach;
for (const gruppe of B.GRUPPEN) {
for (const k of (gruppe.bereiche || [])) {
if (Array.isArray(k.rollen) && !k.rollen.includes(rolle)) continue;
const schluessel = B.schluesselVonZiel(k.ziel);
if (schluessel) nach.set(schluessel, k);
}
}
return nach;
}
/* =====================================================================
EINE KARTE
===================================================================== */
function karteBauen(eintrag, kachel, stufe) {
const karte = el('article', 'an-karte');
if (kachel.ton !== undefined && kachel.ton !== null) {
karte.dataset.ton = String(kachel.ton);
}
const kopf = el('div', 'an-karte__kopf');
const zeichen = el('span', 'an-karte__zeichen');
zeichen.append(window.Bereiche.zeichenBauen(kachel.zeichen, 'an-karte__svg'));
kopf.append(zeichen);
const namen = el('div', 'an-karte__namen');
namen.append(el('h3', 'an-karte__name', kachel.name));
/* DIE STUFE STEHT ALS WORT DA, nicht nur als Farbe. Wer Farben
schlecht unterscheidet, läse sonst eine Karte ohne Stufe — und
die Stufe ist das Einzige, was diese Seite überhaupt sortiert. */
namen.append(el('span', 'an-karte__stufe', stufe.name));
kopf.append(namen);
karte.append(kopf);
const zeilen = el('dl', 'an-karte__zeilen');
const zeile = (schild, text) => {
if (!text) return;
zeilen.append(el('dt', 'an-karte__schild', schild));
zeilen.append(el('dd', 'an-karte__text', text));
};
zeile('Wozu', eintrag.wozu);
zeile('Was du hier tust', eintrag.tust);
zeile('Merke', eintrag.merke);
karte.append(zeilen);
const weg = el('a', 'an-karte__weg', 'Zur Kachel');
/* MIT dem Zusatz hinter dem Fragezeichen. `bereich.html?b=live` und
`bereich.html?b=technik` sind dieselbe Seite und verschiedene
Kacheln; ohne den Zusatz landeten fünf Karten am selben Ort. */
weg.href = kachel.ziel;
karte.append(weg);
return karte;
}
/* =====================================================================
EIN STUFENBLOCK — aufklappbar, Muss offen
===================================================================== */
function stufeBauen(stufe, eintraege, kacheln) {
const block = el('section', 'an-stufe');
block.dataset.stufe = stufe.schluessel;
/* <details> und kein nachgebautes Aufklappen: Es bringt Tastatur,
Vorlesen und die Suche des Browsers mit. Jeder Nachbau vergisst
davon mindestens eines. */
const falte = el('details', 'an-stufe__falte');
falte.open = !!stufe.offen;
const griff = el('summary', 'an-stufe__griff');
griff.append(el('span', 'an-stufe__titel', stufe.titel));
griff.append(el('span', 'an-stufe__zahl', String(eintraege.length)));
falte.append(griff);
if (stufe.unter) falte.append(el('p', 'an-stufe__unter', stufe.unter));
const gitter = el('div', 'an-stufe__gitter');
let gebaut = 0;
for (const e of eintraege) {
const kachel = kacheln.get(e.kachel);
/* EINE KARTE OHNE KACHEL WIRD NICHT GEZEIGT.
Sie hätte keinen Namen, kein Symbol und keinen Weg — ein
Kasten, der nichts tut. Dass das überhaupt nicht vorkommen
darf, prüft pruef-anleitung.mjs in beide Richtungen; hier
still zu übergehen ist die richtige Vorsicht, nicht die
Prüfung. */
if (!kachel) continue;
gitter.append(karteBauen(e, kachel, stufe));
gebaut++;
}
/* Die Zahl am Griff muss das zeigen, was wirklich dasteht. */
griff.lastChild.textContent = String(gebaut);
if (!gebaut) return null;
falte.append(gitter);
block.append(falte);
return block;
}
/* =====================================================================
DER FILTER
===================================================================== */
function filterBauen(stufen, auswahl) {
const leiste = $('filter');
leiste.replaceChildren();
const machen = (wert, text) => {
const knopf = el('button', 'an-filter__knopf', text);
knopf.type = 'button';
knopf.dataset.wert = wert;
knopf.setAttribute('aria-pressed', String(auswahl === wert));
knopf.addEventListener('click', () => setzen(wert));
leiste.append(knopf);
};
machen('alle', 'Alles');
for (const s of stufen) machen(s.schluessel, s.name);
function setzen(wert) {
for (const k of leiste.querySelectorAll('.an-filter__knopf')) {
k.setAttribute('aria-pressed', String(k.dataset.wert === wert));
}
for (const b of $('stufen').querySelectorAll('.an-stufe')) {
const dran = wert === 'alle' || b.dataset.stufe === wert;
b.hidden = !dran;
/* EINE GEFILTERTE STUFE WIRD AUFGEKLAPPT. Wer auf „Muss"
drückt und dann einen zugeklappten Kasten sieht, hat einen
Knopf gedrückt, der scheinbar nichts getan hat. */
if (dran && wert !== 'alle') {
const f = b.querySelector('.an-stufe__falte');
if (f) f.open = true;
}
}
}
}
/* =====================================================================
AUFBAUEN
===================================================================== */
function zeigen(d) {
$('ohne-fassung').hidden = true;
$('fassung').hidden = false;
$('leitgedanke').textContent = d.leitgedanke || '';
$('leitgedanke').hidden = !d.leitgedanke;
$('saetze').replaceChildren(
...(d.saetze || []).map((t) => el('li', 'an-saetze__zeile', t)));
/* ==================================================================
DIE GANZE ZEILE IST DER KNOPF, NICHT NUR DAS WORT (06.10.2026)
Zuerst war nur der Name verlinkt. Gemessen mit
mess-anleitung.mjs bei 412 px: 20 Pixel hoch — die halbe
Hausgröße für etwas, das ein Daumen treffen soll, und das
ausgerechnet auf der Seite, die für Leute gebaut ist, die zum
ersten Mal hier sind und auf dem Handy sitzen.
Jetzt umschließt der Verweis Name UND Text. Das ist auch die
ehrlichere Form: Der ganze Schritt ist eine Sache, nicht ein
Stichwort mit Erklärung daneben.
Ohne Ziel bleibt es ein `div` — „Installieren“ ist ein Knopf in
der Kopfleiste, keine Seite. Ein Verweis ohne Ziel wäre genau
der tote Knopf, den der Rollen-Rundgang sucht.
================================================================== */
$('schritte').replaceChildren(
...(d.schritte || []).map((s) => {
const li = el('li', 'an-schritt');
const rumpf = s.ziel ? el('a', 'an-schritt__rumpf') : el('div', 'an-schritt__rumpf');
if (s.ziel) rumpf.href = s.ziel;
rumpf.append(el('span', 'an-schritt__name', s.titel));
rumpf.append(el('span', 'an-schritt__text', s.text));
li.append(rumpf);
return li;
}));
const kacheln = kachelnFuer(d.rolle);
const stufen = $('stufen');
stufen.replaceChildren();
for (const s of (d.stufen || [])) {
const eintraege = (d.karten || []).filter((k) => k.stufe === s.schluessel);
const block = stufeBauen(s, eintraege, kacheln);
if (block) stufen.append(block);
}
filterBauen(d.stufen || [], 'alle');
const liste = (id, blockId, zeilen, bau) => {
const ziel = $(id);
ziel.replaceChildren(...zeilen.map(bau));
$(blockId).hidden = !zeilen.length;
};
liste('nicht', 'nicht-block', d.nicht || [], (z) => {
const li = el('li', 'an-nicht__zeile');
li.append(el('span', 'an-nicht__was', z.titel));
li.append(el('span', 'an-nicht__wer', z.text));
return li;
});
liste('takt', 'takt-block', d.takt || [], (z) => {
const teil = document.createDocumentFragment();
teil.append(el('dt', 'an-takt__wann', z.titel));
teil.append(el('dd', 'an-takt__was', z.text));
return teil;
});
liste('fragen', 'fragen-block', d.fragen || [], (z) => {
const falte = el('details', 'an-frage');
falte.append(el('summary', 'an-frage__frage', z.titel));
falte.append(el('p', 'an-frage__antwort', z.text));
return falte;
});
}
function ohneFassung(d) {
$('fassung').hidden = true;
const p = $('ohne-fassung');
p.textContent = d.satz || 'Für diese Rolle gibt es keine Einweisung.';
p.hidden = false;
}
function melde(grund) {
$('ladefehler-grund').textContent = grund || '';
$('ladefehler').hidden = false;
}
async function laden() {
$('ladefehler').hidden = true;
let a;
try { a = await hole(BASIS); } catch { melde('Keine Verbindung.'); return; }
if (a.status === 404) {
melde('Diese Seite gibt es auf dieser Adresse nicht.');
return;
}
if (!a.ok) { melde('Der Server hat nicht geantwortet.'); return; }
const d = await a.json();
if (!d.hat_fassung) { ohneFassung(d); return; }
zeigen(d);
}
$('nochmal').addEventListener('click', () => { laden().catch(() => {}); });
laden().catch(() => melde('Unerwarteter Fehler.'));
})();
+80
View File
@@ -123,6 +123,16 @@
'M4 5h6.4c.9 0 1.6.7 1.6 1.6V19c0-.9-.7-1.6-1.6-1.6H4z', 'M4 5h6.4c.9 0 1.6.7 1.6 1.6V19c0-.9-.7-1.6-1.6-1.6H4z',
'M20 5h-6.4c-.9 0-1.6.7-1.6 1.6V19c0-.9.7-1.6 1.6-1.6H20z' 'M20 5h-6.4c-.9 0-1.6.7-1.6 1.6V19c0-.9.7-1.6 1.6-1.6H20z'
], ],
/* WEGWEISER, KEIN BUCH (06.10.2026). Die Anleitung steht direkt
neben der Wissens-Bibliothek, und die ist schon ein Buch. Ein
zweites daneben waere dieselbe Aussage zweimal -- und die
Anleitung sagt etwas anderes: nicht "hier steht alles", sondern
"da lang, das andere kannst du liegen lassen". Zwei Schilder in
verschiedene Richtungen sind genau das. */
anleitung: [
'M4.5 5.5h12l2.5 2-2.5 2h-12z',
'M19.5 12h-12L5 14l2.5 2h12z'
],
automation: [ automation: [
'M13.2 3.2 6 13.4h5.2l-.8 7.4 7.6-10.6h-5.2z' 'M13.2 3.2 6 13.4h5.2l-.8 7.4 7.6-10.6h-5.2z'
], ],
@@ -299,6 +309,17 @@
linien: ['M4 5h6.4c.9 0 1.6.7 1.6 1.6V19c0-.9-.7-1.6-1.6-1.6H4z', linien: ['M4 5h6.4c.9 0 1.6.7 1.6 1.6V19c0-.9-.7-1.6-1.6-1.6H4z',
'M20 5h-6.4c-.9 0-1.6.7-1.6 1.6V19c0-.9.7-1.6 1.6-1.6H20z'], 'M20 5h-6.4c-.9 0-1.6.7-1.6 1.6V19c0-.9.7-1.6 1.6-1.6H20z'],
}, },
anleitung: {
/* Der Pfosten steht in den Linien und NICHT im Koerper: Die drei
versetzten Tiefenlagen machen aus einer Flaeche eine Seitenwand
-- bei einem 1,5 Punkt breiten Pfosten waere daraus ein Klumpen
geworden. Die Schilder tragen die Tiefe, der Pfosten nur den
Strich. */
fuellung: ['M4.5 5.5h12l2.5 2-2.5 2h-12z'],
linien: ['M12 4.5V20',
'M4.5 5.5h12l2.5 2-2.5 2h-12z',
'M19.5 12h-12L5 14l2.5 2h12z'],
},
automation: { automation: {
fuellung: ['M13.2 3.2 6 13.4h5.2l-.8 7.4 7.6-10.6h-5.2z'], fuellung: ['M13.2 3.2 6 13.4h5.2l-.8 7.4 7.6-10.6h-5.2z'],
linien: ['M13.2 3.2 6 13.4h5.2l-.8 7.4 7.6-10.6h-5.2z'], linien: ['M13.2 3.2 6 13.4h5.2l-.8 7.4 7.6-10.6h-5.2z'],
@@ -670,6 +691,31 @@
nameCreator: 'Wissen', nameCreator: 'Wissen',
unterCreator: 'Nachschlagen, wenn du etwas brauchst', unterCreator: 'Nachschlagen, wenn du etwas brauchst',
bereiche: [ bereiche: [
/* ============================================================
DIE ANLEITUNG STEHT GANZ VORN (06.10.2026)
Sie ist die einzige Kachel dieser Gruppe, die fuer JEDE der
vier Rollen "Muss" ist -- und die einzige, die man braucht,
bevor man die anderen versteht. Haette sie ihren Platz nach
dem Alphabet oder nach Alter, stuende die Einweisung hinter
den Dingen, in die sie einweisen soll.
Fuer einen Creator heisst die Gruppe "Wissen" (siehe
nameCreator darueber); dort steht sie damit vor der
Wissens-Bibliothek, so wie es der Bauplan verlangt.
OHNE 'admin'. DogFather bekommt keine Einweisung -- bei ihm
oeffnet dieselbe Adresse spaeter die Pflege-Ansicht
(Etappe 4). Bis die steht, hat er die Kachel nicht: Eine
Kachel, die auf eine Seite fuehrt, die es fuer ihn noch
nicht gibt, ist ein Knopf, der nichts tut.
Ton 48 gerechnet am 06.10.2026 gegen die 24 Toene DIESES
Hauses -- die Herleitung steht in start.css bei [data-ton="48"]. */
{ name: 'Anleitung', unter: 'Was du brauchst und was nicht',
zeichen: 'anleitung', ton: 48,
rollen: ['spicy', 'manager', 'scout', 'creator'],
ziel: 'anleitung.html', szene: 'halle' },
/* NUR DogFather (02.09.2026, Wunsch: "die manager sollen diese /* NUR DogFather (02.09.2026, Wunsch: "die manager sollen diese
kategorien garnicht sehen"). kategorien garnicht sehen").
@@ -1240,8 +1286,42 @@
return [...nach].map(([titel, leute]) => ({ titel, rolle: leute[0].rolle, leute })); return [...nach].map(([titel, leute]) => ({ titel, rolle: leute[0].rolle, leute }));
} }
/* =====================================================================
DER KACHEL-SCHLUESSEL (06.10.2026, fuer die Anleitung)
Die Anleitung speichert je Rolle und Kachel drei Saetze. Verbunden
wird ueber diesen Schluessel, und er wird ABGELEITET statt
vergeben:
uebersicht.html -> uebersicht
bereich.html?b=live -> bereich:live
Zwei Faelle zwingen dazu. `bereich.html` ist FUENF Kacheln (live,
community, technik, schutz, agentur) -- ueber die Seite allein
waeren sie eine, und fuenf Karten landeten uebereinander. Und
`profil.html` heisst beim Creator "Mein Profil" und beim Manager
"Creator-Profile"; die trennt die Rolle, nicht die Adresse.
NUR `b=` zaehlt. Ein Parameter, der nur an eine Stelle derselben
Seite springt, unterscheidet keine Kachel.
Sie steht HIER und nicht im Server: Die Kachelliste liegt in
dieser Datei, der Server kennt sie nicht (bereicheFuer gibt fuers
Agenturhaus `null` zurueck -- "nimm die Liste aus dem Browser").
Eine zweite Fassung dort haette nichts zu rechnen gehabt. */
function schluesselVonZiel(ziel) {
const roh = String(ziel || '').trim();
if (!roh) return '';
const teile = roh.split('?');
const name = teile[0].replace(/\.html$/i, '');
if (!teile[1]) return name;
const b = new URLSearchParams(teile[1]).get('b');
return b ? name + ':' + b : name;
}
window.Bereiche = { window.Bereiche = {
ZEICHEN, GRUPPEN, zuSeite, zeichenBauen, merkzeichenBauen, ZEICHEN, GRUPPEN, zuSeite, zeichenBauen, merkzeichenBauen,
LEITUNG, ROLLENFOLGE, ROLLEN_NAME, ROLLEN_GRUPPE, gruppieren, LEITUNG, ROLLENFOLGE, ROLLEN_NAME, ROLLEN_GRUPPE, gruppieren,
schluesselVonZiel,
}; };
})(); })();
+19 -19
View File
@@ -12,19 +12,19 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -430,22 +430,22 @@
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach <!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne `window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. --> Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
<script src="assets/js/textform.js?v=202610061028"></script> <script src="assets/js/textform.js?v=202610061325"></script>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/hochladen.js?v=202610061028" defer></script> <script src="assets/js/hochladen.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/zuteilung.js?v=202610061028" defer></script> <script src="assets/js/zuteilung.js?v=202610061325" defer></script>
<!-- Der Vorlagenkatalog stand bis zum 23.09.2026 mitten in <!-- Der Vorlagenkatalog stand bis zum 23.09.2026 mitten in
aufgaben.js. Er bedient jetzt zwei Seiten und hat deshalb eine aufgaben.js. Er bedient jetzt zwei Seiten und hat deshalb eine
eigene Datei; hier zeigt er den Creator-Katalog. eigene Datei; hier zeigt er den Creator-Katalog.
Vor aufgaben.js, weil die Seite ihn beim Start einrichtet. --> Vor aufgaben.js, weil die Seite ihn beim Start einrichtet. -->
<script src="assets/js/vorlagenbrett.js?v=202610061028" defer></script> <script src="assets/js/vorlagenbrett.js?v=202610061325" defer></script>
<script src="assets/js/aufgaben.js?v=202610061028" defer></script> <script src="assets/js/aufgaben.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/automation.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/automation.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -168,15 +168,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/automation.js?v=202610061028" defer></script> <script src="assets/js/automation.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/entwicklung.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -197,16 +197,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/holen.js?v=202610061028" defer></script> <script src="assets/js/holen.js?v=202610061325" defer></script>
<script src="assets/js/befinden.js?v=202610061028" defer></script> <script src="assets/js/befinden.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+22 -22
View File
@@ -12,24 +12,24 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/bereich.css?v=202610061325" />
<!-- Wegen des Blocks „Willst du dazugehoeren?" auf dem Brett <!-- Wegen des Blocks „Willst du dazugehoeren?" auf dem Brett
„Mitmachen". Eine eigene Kopie der Regel hier waere die zweite „Mitmachen". Eine eigene Kopie der Regel hier waere die zweite
Stelle, an der dieselbe Sache anders aussieht. --> Stelle, an der dieselbe Sache anders aussieht. -->
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/bewerbung.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -318,19 +318,19 @@
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach <!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne `window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. --> Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
<script src="assets/js/textform.js?v=202610061028"></script> <script src="assets/js/textform.js?v=202610061325"></script>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/checkliste.js?v=202610061028" defer></script> <script src="assets/js/checkliste.js?v=202610061325" defer></script>
<script src="assets/js/ampel.js?v=202610061028" defer></script> <script src="assets/js/ampel.js?v=202610061325" defer></script>
<script src="assets/js/schulung.js?v=202610061028" defer></script> <script src="assets/js/schulung.js?v=202610061325" defer></script>
<script src="assets/js/holen.js?v=202610061028" defer></script> <script src="assets/js/holen.js?v=202610061325" defer></script>
<script src="assets/js/bereich.js?v=202610061028" defer></script> <script src="assets/js/bereich.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+19 -19
View File
@@ -7,17 +7,17 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/bereich.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/treff.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/treff.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/bewerbung.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. --> <!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -108,15 +108,15 @@
</main> </main>
<!-- Der Fuß gehört zu jeder Seite - siehe pruef-css-klassen. --> <!-- Der Fuß gehört zu jeder Seite - siehe pruef-css-klassen. -->
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/auskunft.js?v=202610061028" defer></script> <script src="assets/js/auskunft.js?v=202610061325" defer></script>
<script src="assets/js/bewerben.js?v=202610061028" defer></script> <script src="assets/js/bewerben.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -7,16 +7,16 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/entwicklung.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/bewerbung.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. --> <!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -80,16 +80,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/auskunft.js?v=202610061028" defer></script> <script src="assets/js/auskunft.js?v=202610061325" defer></script>
<script src="assets/js/bewerbungen.js?v=202610061028" defer></script> <script src="assets/js/bewerbungen.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+3 -3
View File
@@ -59,11 +59,11 @@
<!-- DIE WERBEEINBLENDUNG. Dieselbe Datei wie in der Reaction-Seite: <!-- DIE WERBEEINBLENDUNG. Dieselbe Datei wie in der Reaction-Seite:
Zwei Fassungen altern unterschiedlich, und dann sieht der Stream Zwei Fassungen altern unterschiedlich, und dann sieht der Stream
anders aus als das, worueber geredet wird. --> anders aus als das, worueber geredet wird. -->
<link rel="stylesheet" href="assets/css/werbung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/werbung.css?v=202610061325" />
</head> </head>
<body class="obs-buehne"> <body class="obs-buehne">
<div id="platz"></div> <div id="platz"></div>
<script src="assets/js/werbung.js?v=202610061028" defer></script> <script src="assets/js/werbung.js?v=202610061325" defer></script>
<script src="assets/js/buehne.js?v=202610061028" defer></script> <script src="assets/js/buehne.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/calls.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/calls.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -89,15 +89,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/ki.js?v=202610061028" defer></script> <script src="assets/js/ki.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/calls.js?v=202610061028" defer></script> <script src="assets/js/calls.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+20 -20
View File
@@ -12,26 +12,26 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<!-- aufgaben.css bringt die Dialog- und Formularstile mit (.dialog, <!-- aufgaben.css bringt die Dialog- und Formularstile mit (.dialog,
.neu__zeile, .dialog__knoepfe). Sie stehen dort seit dem .neu__zeile, .dialog__knoepfe). Sie stehen dort seit dem
Aufgabenbrett; sie hierher zu kopieren hiesse, sie an zwei Stellen Aufgabenbrett; sie hierher zu kopieren hiesse, sie an zwei Stellen
zu pflegen. Dieselbe Lösung nutzen kalender.html und content.html. zu pflegen. Dieselbe Lösung nutzen kalender.html und content.html.
Gemeldet von pruef-css-klassen.mjs, bevor jemand einen ungestylten Gemeldet von pruef-css-klassen.mjs, bevor jemand einen ungestylten
Dialog zu sehen bekam. --> Dialog zu sehen bekam. -->
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/chat.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/chat.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -739,24 +739,24 @@
</form> </form>
</dialog> </dialog>
<script src="assets/js/bereiche.js?v=202610061028"></script> <script src="assets/js/bereiche.js?v=202610061325"></script>
<!-- TEXTFORM VOR ALLEM ANDEREN (21.09.2026): chat.js und bereich.js <!-- TEXTFORM VOR ALLEM ANDEREN (21.09.2026): chat.js und bereich.js
fragen beim Zeichnen nach `window.Textform`. Kaeme sie spaeter, fragen beim Zeichnen nach `window.Textform`. Kaeme sie spaeter,
waere die erste gezeichnete Nachricht ohne Gestaltung -- und das waere die erste gezeichnete Nachricht ohne Gestaltung -- und das
faellt nur dem auf, der genau hinsieht. KEIN `defer`, damit sie faellt nur dem auf, der genau hinsieht. KEIN `defer`, damit sie
wirklich vor den anderen dasteht. --> wirklich vor den anderen dasteht. -->
<script src="assets/js/textform.js?v=202610061028"></script> <script src="assets/js/textform.js?v=202610061325"></script>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/hochladen.js?v=202610061028" defer></script> <script src="assets/js/hochladen.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028"></script> <script src="assets/js/kopf.js?v=202610061325"></script>
<script src="assets/js/glocke.js?v=202610061028"></script> <script src="assets/js/glocke.js?v=202610061325"></script>
<!-- ANRUF VOR CHAT (18.09.2026): anruf.js stellt `window.anrufStarten` <!-- ANRUF VOR CHAT (18.09.2026): anruf.js stellt `window.anrufStarten`
bereit, und chat.js baut die Knoepfe nur, wenn es das gibt. bereit, und chat.js baut die Knoepfe nur, wenn es das gibt.
Andersherum waere die Reihenfolge eine stille Abhaengigkeit -- Andersherum waere die Reihenfolge eine stille Abhaengigkeit --
die Knoepfe fehlten, und niemand wuesste warum. --> die Knoepfe fehlten, und niemand wuesste warum. -->
<script src="assets/js/anruf.js?v=202610061028"></script> <script src="assets/js/anruf.js?v=202610061325"></script>
<!-- DIE BILDSCHAU (25.09.2026). Eigene Datei, weil sie nichts vom <!-- DIE BILDSCHAU (25.09.2026). Eigene Datei, weil sie nichts vom
Chat weiss: Sie bekommt einen Weg und einen Namen und zeigt ein Chat weiss: Sie bekommt einen Weg und einen Namen und zeigt ein
Bild. Jede andere Seite mit Fotos kann sie ebenso benutzen, ohne Bild. Jede andere Seite mit Fotos kann sie ebenso benutzen, ohne
@@ -767,8 +767,8 @@
sie beim ersten Foto noch nicht da -- und der erste Klick ginge sie beim ersten Foto noch nicht da -- und der erste Klick ginge
wie frueher in den Tab. Ein Fehler, der nur beim ERSTEN Mal wie frueher in den Tab. Ein Fehler, der nur beim ERSTEN Mal
auftritt, ist der, den man nie nachstellen kann. --> auftritt, ist der, den man nie nachstellen kann. -->
<script src="assets/js/bildschau.js?v=202610061028"></script> <script src="assets/js/bildschau.js?v=202610061325"></script>
<script src="assets/js/chat.js?v=202610061028"></script> <script src="assets/js/chat.js?v=202610061325"></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/content.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/content.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -179,15 +179,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/checkliste.js?v=202610061028" defer></script> <script src="assets/js/checkliste.js?v=202610061325" defer></script>
<script src="assets/js/content.js?v=202610061028" defer></script> <script src="assets/js/content.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+6 -6
View File
@@ -36,15 +36,15 @@
<link rel="preload" as="image" href="assets/img/buehne/crew-gate-hoch-580.webp" <link rel="preload" as="image" href="assets/img/buehne/crew-gate-hoch-580.webp"
type="image/webp" media="(max-width: 899px)" /> type="image/webp" media="(max-width: 899px)" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<!-- Diese Wand steht NUR auf der Adresse von Team Dogi (ueberall sonst <!-- Diese Wand steht NUR auf der Adresse von Team Dogi (ueberall sonst
404, siehe crewWeiche). Sie darf das Haus deshalb direkt nennen 404, siehe crewWeiche). Sie darf das Haus deshalb direkt nennen
statt ueber den Platzhalter haus.css zu gehen -- und sie MUSS es: statt ueber den Platzhalter haus.css zu gehen -- und sie MUSS es:
Eine Zugangswand, die sich erst nach dem Umbiegen faerbt, waere Eine Zugangswand, die sich erst nach dem Umbiegen faerbt, waere
die eine Seite, auf der man das Umfaerben sieht. --> die eine Seite, auf der man das Umfaerben sieht. -->
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/crew-haus.css?v=202610061325" />
</head> </head>
<body class="gate gate--crew"> <body class="gate gate--crew">
@@ -459,7 +459,7 @@
<script src="assets/js/gate.js?v=202610061028" defer></script> <script src="assets/js/gate.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+4 -4
View File
@@ -23,25 +23,25 @@
}, },
"icons": [ "icons": [
{ {
"src": "/assets/img/app-symbole/crew-192.png?v=202610061028", "src": "/assets/img/app-symbole/crew-192.png?v=202610061325",
"sizes": "192x192", "sizes": "192x192",
"type": "image/png", "type": "image/png",
"purpose": "any" "purpose": "any"
}, },
{ {
"src": "/assets/img/app-symbole/crew-512.png?v=202610061028", "src": "/assets/img/app-symbole/crew-512.png?v=202610061325",
"sizes": "512x512", "sizes": "512x512",
"type": "image/png", "type": "image/png",
"purpose": "any" "purpose": "any"
}, },
{ {
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202610061028", "src": "/assets/img/app-symbole/crew-192-maskable.png?v=202610061325",
"sizes": "192x192", "sizes": "192x192",
"type": "image/png", "type": "image/png",
"purpose": "maskable" "purpose": "maskable"
}, },
{ {
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202610061028", "src": "/assets/img/app-symbole/crew-512-maskable.png?v=202610061325",
"sizes": "512x512", "sizes": "512x512",
"type": "image/png", "type": "image/png",
"purpose": "maskable" "purpose": "maskable"
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/dateien.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/dateien.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -108,15 +108,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/hochladen.js?v=202610061028" defer></script> <script src="assets/js/hochladen.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/dateien.js?v=202610061028" defer></script> <script src="assets/js/dateien.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/entwicklung.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -306,20 +306,20 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/holen.js?v=202610061028" defer></script> <script src="assets/js/holen.js?v=202610061325" defer></script>
<!-- VOR entwicklung.js: Die Seite richtet den Katalog beim Start ein, <!-- VOR entwicklung.js: Die Seite richtet den Katalog beim Start ein,
also muss es ihn zu dem Zeitpunkt geben. Mit "defer" laufen beide also muss es ihn zu dem Zeitpunkt geben. Mit "defer" laufen beide
in Dokumentreihenfolge. --> in Dokumentreihenfolge. -->
<script src="assets/js/vorlagenbrett.js?v=202610061028" defer></script> <script src="assets/js/vorlagenbrett.js?v=202610061325" defer></script>
<script src="assets/js/entwicklung.js?v=202610061028" defer></script> <script src="assets/js/entwicklung.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+15 -15
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/hilfe.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/hilfe.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -146,14 +146,14 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/hilfe.js?v=202610061028" defer></script> <script src="assets/js/hilfe.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+5 -5
View File
@@ -30,9 +30,9 @@
<link rel="preload" as="image" href="assets/img/buehne/gate-hoch-580.webp" <link rel="preload" as="image" href="assets/img/buehne/gate-hoch-580.webp"
type="image/webp" media="(max-width: 899px)" /> type="image/webp" media="(max-width: 899px)" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
</head> </head>
<body class="gate"> <body class="gate">
@@ -427,7 +427,7 @@
<script src="assets/js/gate.js?v=202610061028" defer></script> <script src="assets/js/gate.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/kalender.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/kalender.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -383,15 +383,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/kalender.js?v=202610061028" defer></script> <script src="assets/js/kalender.js?v=202610061325" defer></script>
<script src="assets/js/kalender-abo.js?v=202610061028" defer></script> <script src="assets/js/kalender-abo.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/leistung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/leistung.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -444,13 +444,13 @@
</form> </form>
</dialog> </dialog>
<script src="assets/js/meldung.js?v=202610061028"></script> <script src="assets/js/meldung.js?v=202610061325"></script>
<script src="assets/js/nachfrage.js?v=202610061028"></script> <script src="assets/js/nachfrage.js?v=202610061325"></script>
<script src="assets/js/wahl.js?v=202610061028"></script> <script src="assets/js/wahl.js?v=202610061325"></script>
<script src="assets/js/bereiche.js?v=202610061028"></script> <script src="assets/js/bereiche.js?v=202610061325"></script>
<script src="assets/js/kopf.js?v=202610061028"></script> <script src="assets/js/kopf.js?v=202610061325"></script>
<script src="assets/js/glocke.js?v=202610061028"></script> <script src="assets/js/glocke.js?v=202610061325"></script>
<script src="assets/js/leistung.js?v=202610061028"></script> <script src="assets/js/leistung.js?v=202610061325"></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+14 -14
View File
@@ -7,17 +7,17 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/manager-ziele.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/manager-ziele.css?v=202610061325" />
<!-- module.css an VORLETZTER, haus.css an LETZTER Stelle. Die <!-- module.css an VORLETZTER, haus.css an LETZTER Stelle. Die
Reihenfolge ist keine Geschmacksfrage: haus.css setzt nur Reihenfolge ist keine Geschmacksfrage: haus.css setzt nur
Variablen, und bei Variablen entscheidet allein, wer zuletzt Variablen, und bei Variablen entscheidet allein, wer zuletzt
kommt. pruef-css-klassen.mjs misst genau dieses Paar nach. --> kommt. pruef-css-klassen.mjs misst genau dieses Paar nach. -->
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -218,16 +218,16 @@
kopf.js liest daraus die Leitungsrollen. Ohne sie stürzt jede kopf.js liest daraus die Leitungsrollen. Ohne sie stürzt jede
Seite ab, und zwar nur in der Browserkonsole -- die Kopfleiste Seite ab, und zwar nur in der Browserkonsole -- die Kopfleiste
kommt trotzdem. --> kommt trotzdem. -->
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<!-- wahl.js gehört zu kopf.js: Der Sicht-Umschalter baut daraus seine <!-- wahl.js gehört zu kopf.js: Der Sicht-Umschalter baut daraus seine
Liste. pruef-css-klassen setzt das durch, und zwar auch die Liste. pruef-css-klassen setzt das durch, und zwar auch die
Reihenfolge -- kopf.js fragt beim Aufbau nach dem fertigen Reihenfolge -- kopf.js fragt beim Aufbau nach dem fertigen
Bedienelement. --> Bedienelement. -->
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/manager-ziele.js?v=202610061028" defer></script> <script src="assets/js/manager-ziele.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,13 +12,13 @@
vergessen wird. --> vergessen wird. -->
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/material.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/material.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start" data-ton="42" data-buehne="studio"> <body class="start" data-ton="42" data-buehne="studio">
@@ -138,14 +138,14 @@
<p class="m-laedt" id="laedt">Einen Moment …</p> <p class="m-laedt" id="laedt">Einen Moment …</p>
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/hochladen.js?v=202610061028" defer></script> <script src="assets/js/hochladen.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/material.js?v=202610061028" defer></script> <script src="assets/js/material.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+14 -14
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/notizen.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/notizen.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start" data-ton="46"> <body class="start" data-ton="46">
@@ -181,12 +181,12 @@
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js <!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
liest daraus die Leitungsrollen. --> liest daraus die Leitungsrollen. -->
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/notizen.js?v=202610061028" defer></script> <script src="assets/js/notizen.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/personen.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/personen.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -453,14 +453,14 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/personen.js?v=202610061028" defer></script> <script src="assets/js/personen.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/profil.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/profil.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -214,16 +214,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/hochladen.js?v=202610061028" defer></script> <script src="assets/js/hochladen.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/steckbrief.js?v=202610061028" defer></script> <script src="assets/js/steckbrief.js?v=202610061325" defer></script>
<script src="assets/js/profil.js?v=202610061028" defer></script> <script src="assets/js/profil.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+19 -19
View File
@@ -7,15 +7,15 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/reaktion.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/reaktion.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/werbung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/werbung.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start reaktion-seite" data-stand="laedt"> <body class="start reaktion-seite" data-stand="laedt">
@@ -905,15 +905,15 @@
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js <!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
liest daraus die Leitungsrollen. --> liest daraus die Leitungsrollen. -->
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/spendenkarte.js?v=202610061028" defer></script> <script src="assets/js/spendenkarte.js?v=202610061325" defer></script>
<script src="assets/js/werbung.js?v=202610061028" defer></script> <script src="assets/js/werbung.js?v=202610061325" defer></script>
<script src="assets/js/reaktion.js?v=202610061028" defer></script> <script src="assets/js/reaktion.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/treff.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/treff.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -134,14 +134,14 @@
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen, Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
die seit dem 07.09. jede Seite danach absucht. --> die seit dem 07.09. jede Seite danach absucht. -->
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/holen.js?v=202610061028" defer></script> <script src="assets/js/holen.js?v=202610061325" defer></script>
<script src="assets/js/rechte.js?v=202610061028" defer></script> <script src="assets/js/rechte.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/report.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/report.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -106,17 +106,17 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/ki.js?v=202610061028" defer></script> <script src="assets/js/ki.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/holen.js?v=202610061028" defer></script> <script src="assets/js/holen.js?v=202610061325" defer></script>
<script src="assets/js/report.js?v=202610061028" defer></script> <script src="assets/js/report.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/scouting.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/scouting.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -173,14 +173,14 @@
</div> </div>
</div> </div>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/scouting.js?v=202610061028" defer></script> <script src="assets/js/scouting.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,21 +12,21 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<!-- Nur die Startseite: Begrüßungskachel, Uhr, Glockenmulde. Siehe <!-- Nur die Startseite: Begrüßungskachel, Uhr, Glockenmulde. Siehe
den Hinweis in start.css -- dort stand es bis zum 07.09.2026. --> den Hinweis in start.css -- dort stand es bis zum 07.09.2026. -->
<link rel="stylesheet" href="assets/css/heim.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/heim.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -751,16 +751,16 @@
</p> </p>
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/live.js?v=202610061028" defer></script> <script src="assets/js/live.js?v=202610061325" defer></script>
<script src="assets/js/start.js?v=202610061028" defer></script> <script src="assets/js/start.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/startcheck.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/startcheck.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -85,16 +85,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/ki.js?v=202610061028" defer></script> <script src="assets/js/ki.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/startcheck.js?v=202610061028" defer></script> <script src="assets/js/startcheck.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/profil.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/profil.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -150,16 +150,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/hochladen.js?v=202610061028" defer></script> <script src="assets/js/hochladen.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/auskunft.js?v=202610061028" defer></script> <script src="assets/js/auskunft.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/steckbrief.js?v=202610061028" defer></script> <script src="assets/js/steckbrief.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+14 -14
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/support.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/support.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -154,16 +154,16 @@
(reading 'LEITUNG')" ab -- gemessen am 24.09.2026, als diese (reading 'LEITUNG')" ab -- gemessen am 24.09.2026, als diese
Zeile beim Anlegen der Seite fehlte. Die Kopfleiste kam Zeile beim Anlegen der Seite fehlte. Die Kopfleiste kam
trotzdem, deshalb sah man es nur in der Browserkonsole. --> trotzdem, deshalb sah man es nur in der Browserkonsole. -->
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<!-- wahl.js gehoert zu kopf.js: Der Sicht-Umschalter in der <!-- wahl.js gehoert zu kopf.js: Der Sicht-Umschalter in der
Kopfleiste baut daraus seine Liste. pruef-css-klassen setzt das Kopfleiste baut daraus seine Liste. pruef-css-klassen setzt das
seit dem 07.09.2026 durch -- damals fehlte es auf chat.html und seit dem 07.09.2026 durch -- damals fehlte es auf chat.html und
uebersicht.html, und heute hier. --> uebersicht.html, und heute hier. -->
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/support.js?v=202610061028" defer></script> <script src="assets/js/support.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+3 -3
View File
@@ -23,7 +23,7 @@
„Eigenes CSS" leer lassen (der Grund ist schon „Eigenes CSS" leer lassen (der Grund ist schon
durchsichtig). durchsichtig).
====================================================================== --> ====================================================================== -->
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610061325" />
<style> <style>
/* DURCHSICHTIG BIS AUF DIE KARTEN. OBS legt die Quelle über das /* DURCHSICHTIG BIS AUF DIE KARTEN. OBS legt die Quelle über das
Bild; jede Fläche, die hier steht, deckt dort etwas zu. */ Bild; jede Fläche, die hier steht, deckt dort etwas zu. */
@@ -80,7 +80,7 @@
<body> <body>
<div class="obs-tafel spendentafel" id="tafel" aria-live="polite"></div> <div class="obs-tafel spendentafel" id="tafel" aria-live="polite"></div>
<script src="assets/js/spendenkarte.js?v=202610061028" defer></script> <script src="assets/js/spendenkarte.js?v=202610061325" defer></script>
<script src="assets/js/tafel.js?v=202610061028" defer></script> <script src="assets/js/tafel.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -7,18 +7,18 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/entwicklung.css?v=202610061325" />
<!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie <!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie
der Regel hier waere die zweite Stelle, an der dieselbe Sache der Regel hier waere die zweite Stelle, an der dieselbe Sache
anders aussieht. --> anders aussieht. -->
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/bewerbung.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -111,15 +111,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/holen.js?v=202610061028" defer></script> <script src="assets/js/holen.js?v=202610061325" defer></script>
<script src="assets/js/talente.js?v=202610061028" defer></script> <script src="assets/js/talente.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -7,20 +7,20 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/team.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/team.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -110,15 +110,15 @@
</main> </main>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/holen.js?v=202610061028" defer></script> <script src="assets/js/holen.js?v=202610061325" defer></script>
<script src="assets/js/team.js?v=202610061028" defer></script> <script src="assets/js/team.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -7,20 +7,20 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/team.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/team.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu <!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu
@@ -84,15 +84,15 @@
Kaputt ist dabei nichts -- er funktioniert. Genau deshalb faellt Kaputt ist dabei nichts -- er funktioniert. Genau deshalb faellt
es niemandem auf, und deshalb prueft pruef-css-klassen die es niemandem auf, und deshalb prueft pruef-css-klassen die
ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. --> ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. -->
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/holen.js?v=202610061028" defer></script> <script src="assets/js/holen.js?v=202610061325" defer></script>
<script src="assets/js/teamlage.js?v=202610061028" defer></script> <script src="assets/js/teamlage.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+15 -15
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/bereich.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -112,15 +112,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/teilen.js?v=202610061028" defer></script> <script src="assets/js/teilen.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/treff.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/treff.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -126,14 +126,14 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/treff-moderation.js?v=202610061028" defer></script> <script src="assets/js/treff-moderation.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -7,18 +7,18 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/treff.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/treff.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des <!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des
Rudels biegt der Server genau diesen Dateinamen auf crew-haus.css Rudels biegt der Server genau diesen Dateinamen auf crew-haus.css
um, und die Seite kommt schon beim ERSTEN Abruf in Lila und um, und die Seite kommt schon beim ERSTEN Abruf in Lila und
Babyblau an -- ohne Umfaerben im Browser, ohne Flackern. --> Babyblau an -- ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -248,14 +248,14 @@
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen, Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
die seit dem 07.09. jede Seite danach absucht. --> die seit dem 07.09. jede Seite danach absucht. -->
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/auskunft.js?v=202610061028" defer></script> <script src="assets/js/auskunft.js?v=202610061325" defer></script>
<script src="assets/js/treff-regeln.js?v=202610061028" defer></script> <script src="assets/js/treff-regeln.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,22 +12,22 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der <!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
Dialog "Creator anlegen". --> Dialog "Creator anlegen". -->
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/uebersicht.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -149,16 +149,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/uebersicht.js?v=202610061028" defer></script> <script src="assets/js/uebersicht.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+15 -15
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -335,14 +335,14 @@
</main> </main>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/live.js?v=202610061028" defer></script> <script src="assets/js/live.js?v=202610061325" defer></script>
<script src="assets/js/unsere-seiten.js?v=202610061028" defer></script> <script src="assets/js/unsere-seiten.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -106,17 +106,17 @@
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js <!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
liest daraus die Leitungsrollen. Ohne sie stürzt jede Seite mit liest daraus die Leitungsrollen. Ohne sie stürzt jede Seite mit
„Cannot read properties of undefined (reading 'LEITUNG')" ab. --> „Cannot read properties of undefined (reading 'LEITUNG')" ab. -->
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/holen.js?v=202610061028" defer></script> <script src="assets/js/holen.js?v=202610061325" defer></script>
<!-- Die Satz-Tafel. Ohne sie stand auf dieser Seite das Maschinenwort <!-- Die Satz-Tafel. Ohne sie stand auf dieser Seite das Maschinenwort
des Servers (z.B. "nicht_gefunden") statt eines Satzes -- gemeldet des Servers (z.B. "nicht_gefunden") statt eines Satzes -- gemeldet
von pruef-meldungen, nicht beim Ansehen. --> von pruef-meldungen, nicht beim Ansehen. -->
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/unterstuetzen.js?v=202610061028" defer></script> <script src="assets/js/unterstuetzen.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -7,15 +7,15 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/entwicklung.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/werdegang.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/werdegang.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -144,14 +144,14 @@
</main> </main>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/werdegang.js?v=202610061028" defer></script> <script src="assets/js/werdegang.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+15 -15
View File
@@ -12,13 +12,13 @@
vergessen wird. --> vergessen wird. -->
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/willkommen.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/willkommen.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<!-- KOERPERKLASSE "start", NICHT "gate" (berichtigt 21.09.2026). <!-- KOERPERKLASSE "start", NICHT "gate" (berichtigt 21.09.2026).
`body.gate` ist die Anmeldewand: `display:flex; align-items:center`, `body.gate` ist die Anmeldewand: `display:flex; align-items:center`,
@@ -75,13 +75,13 @@
<p class="fehler" id="fehler" hidden></p> <p class="fehler" id="fehler" hidden></p>
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/willkommen.js?v=202610061028" defer></script> <script src="assets/js/willkommen.js?v=202610061325" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061028" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610061325" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061028" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610061325" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/start.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/start.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/wissen.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/wissen.css?v=202610061325" />
<link rel="stylesheet" href="assets/css/module.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/module.css?v=202610061325" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610061028" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610061325" />
</head> </head>
<body class="start"> <body class="start">
@@ -190,15 +190,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610061028" defer></script> <script src="assets/js/meldung.js?v=202610061325" defer></script>
<script src="assets/js/hochladen.js?v=202610061028" defer></script> <script src="assets/js/hochladen.js?v=202610061325" defer></script>
<script src="assets/js/nachfrage.js?v=202610061028" defer></script> <script src="assets/js/nachfrage.js?v=202610061325" defer></script>
<script src="assets/js/wahl.js?v=202610061028" defer></script> <script src="assets/js/wahl.js?v=202610061325" defer></script>
<script src="assets/js/bereiche.js?v=202610061028" defer></script> <script src="assets/js/bereiche.js?v=202610061325" defer></script>
<script src="assets/js/installieren.js?v=202610061028" defer></script> <script src="assets/js/installieren.js?v=202610061325" defer></script>
<script src="assets/js/kopf.js?v=202610061028" defer></script> <script src="assets/js/kopf.js?v=202610061325" defer></script>
<script src="assets/js/glocke.js?v=202610061028" defer></script> <script src="assets/js/glocke.js?v=202610061325" defer></script>
<script src="assets/js/wissen.js?v=202610061028" defer></script> <script src="assets/js/wissen.js?v=202610061325" defer></script>
</body> </body>
</html> </html>