Der Rollenname stand in zwei Dateien, die jeder bekommt

SELBST EINGEBAUT, EINE STUNDE VORHER. Beim Bau der Kategorien habe ich
SECHS Vergleiche und VIER Kommentare mit dem Rollennamen nach
assets/js/aufgaben.js und assets/js/start.js geschrieben -- waehrend ich
an anderer Stelle penibel darauf achtete, ihn herauszuhalten.

Alles unter workspace/ geht an JEDEN, der die Seite oeffnet. Ein Blick in
den Quelltext, und der ganze verborgene Zugang waere gefunden gewesen:
nicht wer ein Modi ist, aber dass es die Rolle ueberhaupt gibt -- und
genau das war Filipes Bedingung ("damit die von der workspace auch nicht
mal sehen dass die modis von mir einen eigenen zugang haben").

Gefunden habe ich es durch Nachsehen, nicht durch Nachdenken. Nachgedacht
hatte ich vorher schon, und zwar richtig -- beim Anzeigenamen und bei der
Rollenauswahl habe ich es sauber ueber den Server geloest. Eine Stunde
spaeter habe ich dieselbe Regel dreimal gebrochen, ohne es zu merken.

WAS AN DIE STELLE TRITT, dreimal derselbe Gedanke:

  * Das Vorlagenbrett: /workspace/api/vorlagen liefert den Katalog jetzt
    schlicht nicht an die Betroffenen. `if (!vorlagen) return` laesst das
    Brett dann verborgen -- dieselbe Wirkung, ohne eine Zeile, die
    verraet, fuer wen sie gilt.
  * Das Kategorie-Feld: statt `ich.rolle === '...'` kommt vom Server
    `kategorie_fuer` -- NUMMERN statt eines Rollennamens. Aus Nummern
    laesst sich nichts schliessen; wer keine bekommt, sieht eine leere
    Liste, und eine leere Liste sagt nichts. `null` heisst "gilt immer"
    und muss `null` bleiben: Ein `|| []` daraus zu machen waere der
    stille Fehler, aus "gilt immer" wuerde "gilt nie".
  * Die Kommentare sagen jetzt, WAS gilt, ohne zu sagen, FUER WEN.

UND EINE SPERRE DAGEGEN: pruef-modi-wortleck durchsucht alle 73
ausgelieferten Dateien nach dem Rollennamen. Die Regel ist damit kein
Vorsatz mehr, sondern ein Werkzeug -- wer ihn dort hineinschreibt,
bekommt einen roten Lauf statt eines erhobenen Zeigefingers im Kommentar.
Mit Gegenprobe in beide Richtungen: Eine eingebaute Fundstelle MUSS
erkannt werden, und "modifiziert", "Modul", "Modus" duerfen NICHT
anschlagen -- eine Pruefung, die staendig Fehlalarm gibt, wird
abgeschaltet und faengt dann auch den echten Fall nicht mehr.

Die Dateizahl steht in der Bedingung, nicht nur im Meldetext: Faende die
Suche keine einzige Datei, waere sonst alles gruen, ohne dass etwas
angesehen wurde.

AUSSERDEM BELEGT statt behauptet: Dass das Kategorie-Feld bei DogFather
nur erscheint, wenn er wirklich einen Modi eintraegt, steht jetzt in der
Pruefung -- erst ein Creator (Feld bleibt weg), dann ein Modi (Feld
kommt). Ohne den zweiten Schritt waere "bleibt weg" auch dann gruen,
wenn es NIE kaeme.

GEPRUEFT: pruef-modi-wortleck (4, neu), pruef-modi-kategorien (25),
pruef-modi-verborgen (57), pruef-vorlagen, pruef-aufgabenbrett.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-10 01:05:01 +02:00
co-authored by Claude Opus 5
parent 114a00eed5
commit ede34fe386
28 changed files with 484 additions and 284 deletions
+38
View File
@@ -284,6 +284,44 @@ console.log("\n=== 5. Das Feld im echten Formular ===\n");
await kontext.close();
}
/* DOGFATHER: das Feld folgt der gewaehlten Person.
Er sieht die Kategorien -- aber an einer Creator-Aufgabe haben
sie nichts zu suchen. Ohne diesen Abschnitt waere "nur bei den
Modis" eine Behauptung: Das Feld koennte bei ihm dauerhaft
dastehen, und oben waere trotzdem alles gruen. */
{
const { kontext, seite } = await formular("admin", "CODE-DOGI-0001");
const start = await seite.evaluate(() => {
const h = document.getElementById("feld-kategorie");
return !!h && !h.hidden;
});
ok(!start, "bei DogFather steht das Feld zunaechst nicht da");
/* Einen Creator eintragen -- es muss weg bleiben. */
const mitCreator = await seite.evaluate((id) => {
const f = document.getElementById("f-verant");
f.value = String(id);
f.dispatchEvent(new Event("change", { bubbles: true }));
const h = document.getElementById("feld-kategorie");
return !!h && !h.hidden;
}, idCreat);
ok(!mitCreator, "auch nicht, wenn er einen Creator eintraegt");
/* Und jetzt einen Modi -- jetzt muss es kommen. Das ist die
Gegenprobe zu den beiden Zeilen darueber: Ohne sie waere "steht
nicht da" auch dann gruen, wenn es NIE kaeme. */
const mitModi = await seite.evaluate((id) => {
const f = document.getElementById("f-verant");
f.value = String(id);
f.dispatchEvent(new Event("change", { bubbles: true }));
const h = document.getElementById("feld-kategorie");
return !!h && !h.hidden;
}, idModi);
ok(mitModi, "sobald er einen Modi eintraegt, erscheint es");
await kontext.close();
}
/* GEGENPROBE ZUM BROWSERTEIL: Findet die Suche die Namen ueberhaupt,
wenn sie dastehen? Ohne diesen Schritt bewiese der Haken oben
nichts -- er waere auch gruen, wenn innerText leer waere. */
+105
View File
@@ -0,0 +1,105 @@
/* =====================================================================
STEHT DAS WORT IN EINER DATEI, DIE JEDER BEKOMMT?
Der verborgene Zugang haelt genau so lange, wie niemand den
Rollennamen im Quelltext findet. Alles unter workspace/ wird an JEDEN
ausgeliefert, der die Seite oeffnet -- an jeden Manager, jeden Scout,
jeden Creator. Ein einziges `if (ich.rolle === '...')` dort, und der
ganze Aufwand darueber ist umsonst.
WARUM ES DIESE PRUEFUNG GIBT: Weil genau das passiert ist. Am
10.09.2026 habe ich beim Bau der Kategorien SECHS Vergleiche und VIER
Kommentare mit dem Rollennamen in zwei ausgelieferte Dateien
geschrieben -- waehrend ich an anderer Stelle penibel darauf achtete,
ihn herauszuhalten. Gefunden habe ich es durch Nachsehen, nicht durch
Nachdenken. Nachdenken hatte ich vorher schon getan.
Die Regel ist deshalb ab jetzt keine Absicht mehr, sondern ein
Werkzeug: Wer den Namen dort hineinschreibt, bekommt einen roten
Lauf, keinen erhobenen Zeigefinger im Kommentar.
NICHT BETROFFEN ist die oeffentliche Seite (team-modis.html und
Verwandte). Dort steht das Modi-Team seit jeher offen -- das ist
gewollt. Verborgen ist nicht das TEAM, sondern dass es einen eigenen
Zugang zum Workspace hat.
===================================================================== */
import { readdirSync, readFileSync, statSync } from "node:fs";
import { join, dirname, extname, relative } from "node:path";
import { fileURLToPath } from "node:url";
const HIER = dirname(fileURLToPath(import.meta.url));
const ORDNER = join(HIER, "..", "workspace");
let fehler = 0;
let geprueft = 0;
const ok = (b, t) => { geprueft++; console.log((b ? " ok " : " FEHL ") + t); if (!b) fehler++; };
/* Alles, was der Server aus diesem Ordner herausgibt. Bewusst eine
Liste von Endungen und kein "alles ausser": Kaeme morgen eine neue
Art Datei dazu, faellt sie hier auf, statt stillschweigend
ungeprueft zu bleiben. */
const ENDUNGEN = new Set([".js", ".html", ".css", ".webmanifest", ".json", ".svg", ".txt"]);
/* `\bmodi\b` und nicht `modi`: "modifiziert", "Modul" und "Modus"
sollen nicht anschlagen -- eine Pruefung, die staendig Fehlalarm gibt,
wird abgeschaltet, und dann faengt sie auch den echten Fall nicht
mehr. Nachgemessen: Keines der drei Woerter passt auf dieses Muster,
weil nach "modi" dort ein Buchstabe folgt. */
const MUSTER = /\bmodi\b/i;
function dateien(pfad, aus = []) {
for (const name of readdirSync(pfad)) {
const voll = join(pfad, name);
if (statSync(voll).isDirectory()) { dateien(voll, aus); continue; }
if (ENDUNGEN.has(extname(name).toLowerCase())) aus.push(voll);
}
return aus;
}
console.log("\n=== Der Rollenname darf in keiner ausgelieferten Datei stehen ===\n");
const alle = dateien(ORDNER);
/* DIE ZAHL GEHOERT IN DIE BEDINGUNG. Faende die Suche keine einzige
Datei -- verschobener Ordner, andere Endungen --, waere unten alles
gruen, ohne dass irgendetwas angesehen wurde. Genau diese Sorte
gruener Haken ist im Haus schon zweimal aufgefallen. */
ok(alle.length >= 30, `${alle.length} ausgelieferte Dateien durchsucht`);
const treffer = [];
for (const datei of alle) {
const text = readFileSync(datei, "utf8");
const zeilen = text.split("\n");
for (let i = 0; i < zeilen.length; i++) {
if (MUSTER.test(zeilen[i])) {
treffer.push(`${relative(ORDNER, datei)}:${i + 1} ${zeilen[i].trim().slice(0, 70)}`);
}
}
}
ok(treffer.length === 0, treffer.length
? `${treffer.length} Fundstelle(n) -- der verborgene Zugang waere damit auffindbar:\n `
+ treffer.slice(0, 12).join("\n ")
: "keine einzige Fundstelle");
/* ---------- Gegenprobe ------------------------------------------------
Findet dieselbe Suche den Namen ueberhaupt, wenn er dasteht? Ohne
diesen Schritt bewiese der Haken oben nichts: Er waere auch gruen,
wenn das Muster kaputt oder die Dateiliste leer waere.
Auf einem Text im Speicher, nicht auf einer echten Datei -- eine
Pruefung, die zum Beweisen etwas anlegt, hinterlaesst irgendwann
etwas. */
console.log("\n=== Gegenprobe: schlaegt die Suche ueberhaupt an? ===\n");
{
const probe = " if (ich.rolle === 'modi') { ziel.hidden = true; return; }";
ok(MUSTER.test(probe), "eine eingebaute Fundstelle wird erkannt");
/* Und die drei Woerter, die NICHT anschlagen duerfen -- sonst waere
die Pruefung nach dem ersten Fehlalarm abgeschaltet. */
const harmlos = ["const modifiziert = true;", "/* Modul */", "prefers-reduced-motion",
"let modus = 'hell';"];
ok(harmlos.every((z) => !MUSTER.test(z)),
`und "modifiziert", "Modul", "motion", "Modus" schlagen nicht an`);
}
console.log(`\n${fehler ? "FEHLGESCHLAGEN" : "BESTANDEN"} -- ${geprueft} geprueft, ${fehler} Fehler`);
process.exit(fehler ? 1 : 0);
+5 -1
View File
@@ -12,7 +12,7 @@ import express from "express";
import {
db, protokolliere, echteIp, sitzungLesen, betreutWo, istLeitung, ohneDogFather, heuteLokal, ROLLEN_SORTIERUNG, betreuteIds,
externPruefen, externSql, sichtbarePersonenIds, sichtbareCreatorIds,
MODI_KATEGORIEN, kategorienFuer,
MODI_KATEGORIEN, kategorienFuer, kategoriePersonen,
} from "./workspace.js";
export const aufgabenRouter = express.Router();
@@ -219,6 +219,10 @@ aufgabenRouter.get("/workspace/api/aufgaben", (req, res) => {
kann. Wer sie nicht benutzen darf, bekommt eine leere Liste --
und die Oberflaeche zeigt dann gar kein Feld. */
kategorien: kategorienFuer(req.person),
/* Fuer wessen Aufgaben sie gilt -- als Nummern, nicht als
Rollenname. Im Browser darf nichts stehen, woraus sich auf eine
verborgene Rolle schliessen laesst. */
kategorie_fuer: kategoriePersonen(req.person),
});
} catch (fehler) {
console.error("[workspace] Aufgaben lesen:", fehler?.message);
+22 -1
View File
@@ -1099,13 +1099,34 @@ export const AUFGABEN_VORLAGEN_FLACH = Object.entries(AUFGABEN_VORLAGEN)
vorlagenRouter.use("/workspace/api/vorlagen", angemeldet);
vorlagenRouter.get("/workspace/api/vorlagen", (req, res) => {
/* =====================================================================
WER DIESEN KATALOG NICHT BEKOMMT (10.09.2026)
`AUFGABEN_VORLAGEN` sind 80 Aufgaben fuer den Aufbau eines KANALS --
Ton einstellen, Sendeplan festlegen, Verweildauer vergleichen. Wer
moderiert, statt zu senden, kann damit nichts anfangen; ein
Vorschlag, der nicht passt, ist schlimmer als keiner.
WARUM DIE ENTSCHEIDUNG HIER FAELLT UND NICHT IM BROWSER: Beim
ersten Anlauf stand im Browser `if (ich.rolle === 'modi')`. Das ist
zwar richtig gedacht, steht aber in assets/js/aufgaben.js -- einer
Datei, die JEDER bekommt, der die Seite oeffnet. Ein Blick in den
Quelltext, und die verborgene Rolle waere gefunden gewesen. Ich
habe mir das selbst eingebaut und beim Nachsehen gefunden; seither
wacht pruef-modi-wortleck darueber, dass das Wort in keiner
ausgelieferten Datei steht.
`null` statt einer leeren Liste: Die Oberflaeche prueft `if
(!vorlagen) return;` und laesst das Brett dann verborgen -- ohne
eine einzige Zeile, die verraet, fuer wen. */
const ohneKatalog = req.person?.rolle === "modi";
res.json({
content: CONTENT_IDEEN,
live: LIVE_PUNKTE,
community: COMMUNITY_PUNKTE,
technik: TECHNIK_PUNKTE,
calls: CALL_LEITFAEDEN,
aufgaben: AUFGABEN_VORLAGEN,
aufgaben: ohneKatalog ? null : AUFGABEN_VORLAGEN,
});
});
+30
View File
@@ -345,6 +345,36 @@ export function kategorienFuer(person) {
return person.rolle === "modi" || person.rolle === "admin" ? MODI_KATEGORIEN : [];
}
/**
* FUER WESSEN AUFGABEN gilt die Kategorie? (10.09.2026)
*
* null -> fuer alle eigenen; die Oberflaeche zeigt das Feld immer
* [Nummern] -> nur wenn eine dieser Personen gewaehlt ist
* [] -> nie
*
* WARUM DAS DER SERVER BEANTWORTET UND NICHT DER BROWSER: Die
* Oberflaeche muesste sonst `p.rolle === 'modi'` vergleichen -- und
* assets/js/aufgaben.js bekommt JEDER, der die Seite oeffnet. Genau so
* stand es beim ersten Anlauf da, an sechs Stellen. Mit Nummern statt
* einem Rollennamen steht im Browser nichts, woraus sich etwas
* schliessen laesst: Wer keine bekommt, sieht eine leere Liste, und
* eine leere Liste sagt nichts.
*/
export function kategoriePersonen(person) {
if (!person) return [];
/* Ein Modi arbeitet ausschliesslich an eigenen Aufgaben -- dort gilt
sie immer, unabhaengig davon, wen er eintraegt. */
if (person.rolle === "modi") return null;
if (person.rolle !== "admin") return [];
try {
return db().prepare(
"SELECT id FROM personen WHERE rolle = 'modi' AND aktiv = 1").all().map((z) => z.id);
} catch {
/* Ohne Datenbank lieber kein Feld als ein falsches. */
return [];
}
}
export function rollentextFuer(person) {
return person?.rolle === "modi" ? MODI_ROLLENTEXT : null;
}
+4 -4
View File
@@ -13,25 +13,25 @@
"theme_color": "#06090f",
"icons": [
{
"src": "/assets/img/app-symbole/workspace-192.png?v=202609100051",
"src": "/assets/img/app-symbole/workspace-192.png?v=202609100105",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/assets/img/app-symbole/workspace-512.png?v=202609100051",
"src": "/assets/img/app-symbole/workspace-512.png?v=202609100105",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609100051",
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609100105",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609100051",
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609100105",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
+34 -34
View File
@@ -699,10 +699,18 @@
die Frage auf, fuer wen sie da ist. Genau die soll niemand stellen.
===================================================================== */
let kategorien = [];
/* Wer ein Modi ist -- gefuellt aus der Personenliste, die ohnehin
geladen wird. Sie enthaelt Modis nur fuer den, der sie sehen darf;
fuer alle anderen bleibt diese Menge leer. */
const modis = new Set();
/* FUER WESSEN AUFGABEN die Kategorie gilt. Kommt fertig vom Server:
null -> fuer alle eigenen (das Feld steht immer da)
[Nummern] -> nur wenn eine dieser Personen gewaehlt ist
[] -> nie
ALS NUMMERN UND NICHT ALS ROLLENNAME, und das ist kein Zufall: Beim
ersten Anlauf stand hier ein Vergleich auf einen Rollennamen -- in
einer Datei, die JEDER bekommt, der die Seite oeffnet. Aus Nummern
laesst sich nichts schliessen; wer keine bekommt, sieht eine leere
Liste, und eine leere Liste sagt nichts. */
let kategorieFuer = [];
function kategorienEinsetzen() {
if (!kategorien.length) return;
@@ -718,22 +726,24 @@
}
}
/* Gehoert diese Aufgabe zu einem Modi?
/* Braucht diese Aufgabe eine Kategorie?
Fuer einen Modi immer (es sind seine eigenen). Fuer die
DogFather-Rolle nur dann, wenn die gewaehlte Person eine ist --
sonst stuende das Feld auch an jeder Creator-Aufgabe, und genau das
wollte Filipe nicht ("nur bei den Modis"). */
function gehoertModi(creatorId, verantId) {
if (ich?.rolle === 'modi') return true;
return modis.has(Number(creatorId)) || modis.has(Number(verantId));
`null` heisst "immer" -- dann arbeitet die angemeldete Person
ausschliesslich an eigenen Aufgaben, und dort gilt sie unabhaengig
davon, wen sie eintraegt. Sonst entscheidet die gewaehlte Person.
Wer eine leere Liste bekommt, sieht das Feld nie. */
function kategorieNoetig(creatorId, verantId) {
if (kategorieFuer === null) return true;
if (!Array.isArray(kategorieFuer) || !kategorieFuer.length) return false;
return kategorieFuer.includes(Number(creatorId))
|| kategorieFuer.includes(Number(verantId));
}
function kategorieFeldZeigen(praefix) {
const huelle = $(praefix === 'f' ? 'feld-kategorie' : 'b-feld-kategorie');
if (!huelle) return;
const zeigen = kategorien.length
&& gehoertModi($(`${praefix}-creator`)?.value, $(`${praefix}-verant`)?.value);
&& kategorieNoetig($(`${praefix}-creator`)?.value, $(`${praefix}-verant`)?.value);
huelle.hidden = !zeigen;
/* Verborgen heisst auch: nichts mitschicken. Ein Wert, der in einem
unsichtbaren Feld stehenbleibt, wandert sonst beim naechsten
@@ -748,6 +758,10 @@
const daten = await antwort.json();
alleAufgaben = daten.aufgaben || [];
kategorien = daten.kategorien || [];
/* `null` muss `null` BLEIBEN -- ein `|| []` daraus zu machen waere
der stille Fehler: Aus "gilt immer" wuerde "gilt nie", und das
Feld verschwaende fuer genau die, die es brauchen. */
kategorieFuer = daten.kategorie_fuer === undefined ? [] : daten.kategorie_fuer;
kategorienEinsetzen();
kategorieFeldZeigen('f');
lageZeigen(alleAufgaben);
@@ -905,11 +919,6 @@ Das laesst sich nicht rueckgaengig machen. Erledigte Aufgaben sollten normalerwe
try {
const { personen } = await (await hole('/workspace/api/personen')).json();
for (const p of personen) {
/* Wer ein Modi ist, entscheidet spaeter, ob das Kategorie-Feld
ueberhaupt erscheint. Die Liste enthaelt Modis nur fuer den,
der sie sehen darf -- fuer alle anderen bleibt die Menge
leer, und das Feld bleibt weg. */
if (p.rolle === 'modi') modis.add(Number(p.id));
for (const ziel of ['f-creator', 'f-verant', 'b-creator', 'b-verant']) {
const o = el('option', null, `${p.name} (${p.rolle})`);
o.value = String(p.id);
@@ -1010,23 +1019,14 @@ Das laesst sich nicht rueckgaengig machen. Erledigte Aufgaben sollten normalerwe
async function vorlagenbrettZeigen() {
const ziel = $('vorlagenbrett');
if (!ziel || !ich) return;
/* NICHT FUER EINEN MODI (10.09.2026).
/* WER DIESEN KATALOG BEKOMMT, ENTSCHEIDET DER SERVER.
Das Vorlagenbrett haelt 80 fertige Aufgaben in vier Bereichen und
vier Stufen bereit -- den Begleitplan fuer einen CREATOR, von
"Ton aufnehmen und anhoeren" bis "Monatsbericht mit drei festen
Zahlen". Fuer einen Modi ist davon nichts gedacht: Er moderiert,
er baut keinen Kanal auf.
Aufgefallen ist das auf dem Bildschirmfoto der Browserpruefung,
nicht im Code -- die Kachel laedt fehlerfrei, sie zeigt nur das
Falsche. Ein Vorschlag, der nicht passt, ist schlimmer als
keiner: Man raeumt ihn nicht weg, man arbeitet um ihn herum.
SEIN Katalog steht in Teil 2 des Anforderungsdokuments (die 60+
Aufgaben aus Phase 1 bis 6). Bis der da ist, steht hier nichts --
das ist ehrlicher als etwas Fremdes. */
if (ich.rolle === 'modi') { ziel.hidden = true; return; }
Hier stand kurzzeitig ein Vergleich auf einen Rollennamen -- in
einer Datei, die JEDER bekommt, der die Seite oeffnet. Jetzt
liefert /workspace/api/vorlagen fuer die Betroffenen schlicht
nichts, und `if (!vorlagen) return` weiter unten laesst das Brett
verborgen. Dieselbe Wirkung, ohne eine Zeile, die verraet, fuer
wen sie gilt. */
if (!vorlagen) {
try {
const a = await hole('/workspace/api/vorlagen');
+5 -3
View File
@@ -722,9 +722,11 @@
fuenf bekannten Rollen nichts. */
/* DIE ZIERZEILE UEBER DEM TITEL (10.09.2026).
Sie nennt den Betrieb -- fest "Spicy Media" in start.html. Fuer
einen Modi stimmt das nicht, er gehoert zu Team Dogi; der Server
schickt dann den passenden Namen mit.
Sie nennt den Betrieb -- fest "Spicy Media" in start.html. Das
stimmt nicht fuer jeden, der hier arbeitet; wo es nicht stimmt,
schickt der Server den passenden Namen mit. WER das ist, steht
ausdruecklich nicht in dieser Datei: Sie bekommt jeder, der die
Seite oeffnet.
ERSETZT WIRD NUR DER TEXTKNOTEN, nicht der ganze Inhalt: In dem
Element sitzen zwei <i class="zraute"> als Zierrauten links und
+11 -11
View File
@@ -12,12 +12,12 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -245,10 +245,10 @@
</form>
</dialog>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/aufgaben.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/aufgaben.js?v=202609100105" defer></script>
</body>
</html>
+12 -12
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/automation.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/automation.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -140,10 +140,10 @@
</main>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/automation.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/automation.js?v=202609100105" defer></script>
</body>
</html>
+16 -16
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -149,14 +149,14 @@
</main>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/checkliste.js?v=202609100051" defer></script>
<script src="assets/js/ampel.js?v=202609100051" defer></script>
<script src="assets/js/schulung.js?v=202609100051" defer></script>
<script src="assets/js/vorlagen.js?v=202609100051" defer></script>
<script src="assets/js/bereich.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/checkliste.js?v=202609100105" defer></script>
<script src="assets/js/ampel.js?v=202609100105" defer></script>
<script src="assets/js/schulung.js?v=202609100105" defer></script>
<script src="assets/js/vorlagen.js?v=202609100105" defer></script>
<script src="assets/js/bereich.js?v=202609100105" defer></script>
</body>
</html>
+13 -13
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/calls.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/calls.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -82,11 +82,11 @@
</main>
<script src="assets/js/ki.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/calls.js?v=202609100051" defer></script>
<script src="assets/js/ki.js?v=202609100105" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/calls.js?v=202609100105" defer></script>
</body>
</html>
+12 -12
View File
@@ -12,19 +12,19 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<!-- aufgaben.css bringt die Dialog- und Formularstile mit (.dialog,
.neu__zeile, .dialog__knoepfe). Sie stehen dort seit dem
Aufgabenbrett; sie hierher zu kopieren hiesse, sie an zwei Stellen
zu pflegen. Dieselbe Lösung nutzen kalender.html und content.html.
Gemeldet von pruef-css-klassen.mjs, bevor jemand einen ungestylten
Dialog zu sehen bekam. -->
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/chat.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/chat.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -247,10 +247,10 @@
</form>
</dialog>
<script src="assets/js/bereiche.js?v=202609100051"></script>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051"></script>
<script src="assets/js/glocke.js?v=202609100051"></script>
<script src="assets/js/chat.js?v=202609100051"></script>
<script src="assets/js/bereiche.js?v=202609100105"></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105"></script>
<script src="assets/js/glocke.js?v=202609100105"></script>
<script src="assets/js/chat.js?v=202609100105"></script>
</body>
</html>
+14 -14
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/content.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/content.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -172,12 +172,12 @@
</main>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/checkliste.js?v=202609100051" defer></script>
<script src="assets/js/vorlagen.js?v=202609100051" defer></script>
<script src="assets/js/content.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/checkliste.js?v=202609100105" defer></script>
<script src="assets/js/vorlagen.js?v=202609100105" defer></script>
<script src="assets/js/content.js?v=202609100105" defer></script>
</body>
</html>
+12 -12
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/dateien.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/dateien.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -101,10 +101,10 @@
</main>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/dateien.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/dateien.js?v=202609100105" defer></script>
</body>
</html>
+4 -4
View File
@@ -30,9 +30,9 @@
<link rel="preload" as="image" href="assets/img/buehne/gate-hoch-580.webp"
type="image/webp" media="(max-width: 899px)" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
</head>
<body class="gate">
@@ -401,6 +401,6 @@
</main>
</div>
<script src="assets/js/gate.js?v=202609100051" defer></script>
<script src="assets/js/gate.js?v=202609100105" defer></script>
</body>
</html>
+13 -13
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/kalender.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/kalender.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -370,11 +370,11 @@
</main>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/kalender.js?v=202609100051" defer></script>
<script src="assets/js/kalender-abo.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/kalender.js?v=202609100105" defer></script>
<script src="assets/js/kalender-abo.js?v=202609100105" defer></script>
</body>
</html>
+12 -12
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/leistung.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/leistung.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -217,10 +217,10 @@
</form>
</dialog>
<script src="assets/js/wahl.js?v=202609100051"></script>
<script src="assets/js/bereiche.js?v=202609100051"></script>
<script src="assets/js/kopf.js?v=202609100051"></script>
<script src="assets/js/glocke.js?v=202609100051"></script>
<script src="assets/js/leistung.js?v=202609100051"></script>
<script src="assets/js/wahl.js?v=202609100105"></script>
<script src="assets/js/bereiche.js?v=202609100105"></script>
<script src="assets/js/kopf.js?v=202609100105"></script>
<script src="assets/js/glocke.js?v=202609100105"></script>
<script src="assets/js/leistung.js?v=202609100105"></script>
</body>
</html>
+12 -12
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/personen.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/personen.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -335,10 +335,10 @@
</main>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/personen.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/personen.js?v=202609100105" defer></script>
</body>
</html>
+13 -13
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -207,11 +207,11 @@
</main>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/steckbrief.js?v=202609100051" defer></script>
<script src="assets/js/profil.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/steckbrief.js?v=202609100105" defer></script>
<script src="assets/js/profil.js?v=202609100105" defer></script>
</body>
</html>
+13 -13
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/report.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/report.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -99,11 +99,11 @@
</main>
<script src="assets/js/ki.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/report.js?v=202609100051" defer></script>
<script src="assets/js/ki.js?v=202609100105" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/report.js?v=202609100105" defer></script>
</body>
</html>
+12 -12
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/scouting.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/scouting.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -132,10 +132,10 @@
</div>
</div>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/scouting.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/scouting.js?v=202609100105" defer></script>
</body>
</html>
+11 -11
View File
@@ -12,14 +12,14 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<!-- Nur die Startseite: Begrüßungskachel, Uhr, Glockenmulde. Siehe
den Hinweis in start.css -- dort stand es bis zum 07.09.2026. -->
<link rel="stylesheet" href="assets/css/heim.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/heim.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -667,10 +667,10 @@
</p>
</main>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/start.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/start.js?v=202609100105" defer></script>
</body>
</html>
+13 -13
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -78,11 +78,11 @@
</main>
<script src="assets/js/ki.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/startcheck.js?v=202609100051" defer></script>
<script src="assets/js/ki.js?v=202609100105" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/startcheck.js?v=202609100105" defer></script>
</body>
</html>
+12 -12
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -119,10 +119,10 @@
</main>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/steckbrief.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/steckbrief.js?v=202609100105" defer></script>
</body>
</html>
+12 -12
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/team.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/team.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -103,10 +103,10 @@
</main>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/team.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/team.js?v=202609100105" defer></script>
</body>
</html>
+12 -12
View File
@@ -12,15 +12,15 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
Dialog "Creator anlegen". -->
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -142,11 +142,11 @@
</main>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/uebersicht.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/uebersicht.js?v=202609100105" defer></script>
</body>
</html>
+12 -12
View File
@@ -12,13 +12,13 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100051" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100051" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/wissen.css?v=202609100051" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100051" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/wissen.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</head>
<body class="start">
@@ -183,10 +183,10 @@
</main>
<script src="assets/js/wahl.js?v=202609100051" defer></script>
<script src="assets/js/bereiche.js?v=202609100051" defer></script>
<script src="assets/js/kopf.js?v=202609100051" defer></script>
<script src="assets/js/glocke.js?v=202609100051" defer></script>
<script src="assets/js/wissen.js?v=202609100051" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/wissen.js?v=202609100105" defer></script>
</body>
</html>