Kategorie-Kanaele und angeheftete Ankuendigungen (Kapitel 7.2)
Die vier Saetze aus dem Anforderungsdokument, der Reihe nach: Team- Gruppenchat, Kategorie-Kanaele mit Zugriff fuer Owner und rechte Hand, private 1:1-Chats OHNE diesen Zugriff, und Pin-Nachrichten an alle. EIN KANAL IST KEINE VIERTE TABELLE, sondern eine dritte Art Raum (`art = 'kanal'` neben 'direkt' und 'gruppe'). Damit gilt fuer ihn ohne eine einzige neue Zeile alles, was schon da ist: Verlauf, Anhaenge, Suche, Ungelesen-Zaehler, Live-Strom, Wegraeumen. Eine eigene Tabelle haette all das ein zweites Mal gebraucht -- und die zweite Fassung waere die gewesen, in der die Zugriffsregel fehlt. Welche Zustaendigkeit, kommt aus MODI_KATEGORIEN -- derselben Liste, aus der auch die Aufgaben ihre Kategorie nehmen. Der NAME kommt aus der Kategorie und ist kein freies Feld: "Clipping" neben "Clipping-Team" waeren zwei halbe Verlaeufe, und man merkt es erst, wenn jemand die Antwort im falschen sucht. Ein eindeutiger Teilindex haelt das auch dann fest, wenn zwei Anfragen im selben Augenblick ankommen. DIE ZUGRIFFSREGEL STEHT IN istDrin() -- der Funktion, durch die alle sieben lesenden und schreibenden Wege gehen. In den Routen stuende sie in sechs davon und in der siebten nicht. Sie gilt AUSDRUECKLICH nur fuer 'kanal': Zweier-Gespraeche bleiben zu, auch fuer DogFather (so steht es im Dokument), und Gruppen ebenfalls -- wer eine Gruppe aufmacht, hat sich fuer einen geschlossenen Kreis entschieden, und den nachtraeglich still zu oeffnen waere das Gegenteil dessen, was er getan hat. Wenn Filipe das anders will, ist es eine Zeile -- aber es waere seine Entscheidung und muesste fuer die Beteiligten SICHTBAR sein. istDrin() nimmt dafuer die PERSON statt ihrer Nummer und wirft bei einer Nummer einen Fehler, statt stillschweigend "nein" zu antworten. HOECHSTENS DREI ANKUENDIGUNGEN je Raum. Nicht eine (Regeln, Live-Plan und Frist muessen gleichzeitig oben stehen koennen) und nicht beliebig viele -- eine Pinnwand, die scrollt, ist ein zweiter Verlauf. Der Aushang hat eine EIGENE Abfrage, weil der Verlauf nur 200 Zeilen liefert: Eine Ansage von vorletzter Woche waere sonst genau dann weg, wenn sie am laengsten oben stehen sollte. Wird die Nachricht zurueckgenommen, faellt sie ab UND gibt den Platz frei. DREI DINGE, DIE ERST DAS HINSEHEN GEZEIGT HAT: Der frisch angelegte Kanal hatte zwei Leute statt vier. Die Personenauswahl zeichnete nach der Rollenfolge aus bereiche.js -- wer dort nicht steht, wurde NICHT GEZEICHNET. Team Dogi steht dort nicht und darf es auch nicht (der Rollenname gehoert in keine Datei, die jeder herunterlaedt). Folge: DogFather konnte ueber die Auswahl niemandem aus seinem Team schreiben. Der Server schickt die Ueberschrift jetzt mit; der Browser braucht dafuer keinen Rollennamen. Der Kommentar, der genau davor warnte, stand die ganze Zeit darueber. Dieser Fehler war nebenbei ein Netz: Was nicht gezeichnet wird, kann auch nicht falsch gezeichnet werden. Deshalb ist jetzt gemessen, dass ein Manager und Spicy Media Team Dogi gar nicht erst geschickt bekommen -- und dabei fiel auf, dass Spicy Media in der EIGENEN Auswahl stand: Sobald es jemanden zu verbergen gibt, schreibt ohneVerborgene() aus "sieht alles" eine echte Liste, und darin steckt man selbst. Am Fuss jeder Nachricht stehen jetzt vier Handgriffe statt drei. Bei 390 px -- der haeufigsten Handybreite -- stand "kopieren" 18 px ueber der Blase, bei 320 px 75. Behoben mit `flex-wrap: wrap` und nicht mit einer Schwelle: Eine Regel, die misst, bleibt beim fuenften Handgriff richtig; eine Zahl nicht. pruef-chat-optik misst es ab jetzt. NACHGEZOGEN, was pruef-css-klassen an MEINEM letzten Commit fand: teamlage.html lud kopf.js ohne wahl.js (der Sicht-Umschalter sah aus wie aus einem anderen Programm -- kaputt war nichts, und genau deshalb faellt es niemandem auf), und .tampel__tag stand auf 11,2 px. Beides war schon gepusht, weil ich die Pruefung nicht laufen liess. pruef-chat-kanaele 73 (neu) · pruef-chat 48 · pruef-chat-ausbau 64 · pruef-chat-anhaenge 60 · pruef-chat-optik 24 -> 26 · pruef-css-klassen gruen · pruef-rollen 274 · pruef-modi-verborgen 78 · pruef-team-ampel 28 · pruef-start-ansicht gruen · pruef-modi-wortleck 5 · pruef-zwischenspeicher 21. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -13,25 +13,25 @@
|
||||
"theme_color": "#06090f",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609101807",
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202609102008",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609101807",
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202609102008",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609101807",
|
||||
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609102008",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609101807",
|
||||
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609102008",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
@@ -340,8 +340,27 @@
|
||||
Die Kinder erben sie (color: inherit). Vier eigene Farbangaben wären
|
||||
vier Stellen, die beim nächsten Mal auseinanderlaufen -- der Fehler,
|
||||
der in diesem Haus am häufigsten vorkommt. */
|
||||
/* VIER HANDGRIFFE PASSEN NICHT IN EINE ZEILE (10.09.2026).
|
||||
|
||||
Hier stand `display: flex` ohne Umbruch. Mit drei Eintraegen (Zeit,
|
||||
antworten, kopieren) ging die Rechnung auf. Seit "anheften"
|
||||
danebensteht, geht sie nicht mehr: Gemessen an echten Bildpunkten
|
||||
stand "kopieren" bei 390 px -- der haeufigsten Handybreite -- 18 px
|
||||
ueber der Blase, bei 320 px waren es 75. Die Zeile lief einfach
|
||||
weiter, ueber ihren eigenen Rand hinaus.
|
||||
|
||||
DIE LEHRE IST NICHT "eine Schwelle einbauen". Das waere derselbe
|
||||
Fehler wie in der Kopfleiste am 06.09., nur mit einer anderen Zahl
|
||||
-- und beim fuenften Eintrag stuende sie wieder falsch da.
|
||||
`flex-wrap: wrap` ist eine REGEL statt einer Rechnung: Sie bricht
|
||||
genau dann um, wenn der Platz nicht reicht, und zwar unabhaengig
|
||||
davon, wie viele Handgriffe es einmal sein werden.
|
||||
|
||||
`row-gap` kleiner als `column-gap`: Zwei Zeilen Fusstext sollen wie
|
||||
ein Block wirken, nicht wie zwei Absaetze. */
|
||||
.chat-nachricht__fuss {
|
||||
display: flex; align-items: center; gap: 9px;
|
||||
display: flex; align-items: center; flex-wrap: wrap;
|
||||
column-gap: 9px; row-gap: 2px;
|
||||
margin-top: 4px;
|
||||
color: var(--text-leise);
|
||||
}
|
||||
@@ -1080,3 +1099,159 @@
|
||||
@media (forced-colors: active) {
|
||||
.chat-datei, .chat__ablage { border: 1px solid CanvasText; }
|
||||
}
|
||||
|
||||
/* =====================================================================
|
||||
KATEGORIE-KANÄLE UND ANGEHEFTETE ANKÜNDIGUNGEN (10.09.2026)
|
||||
|
||||
Kapitel 7.2 des Anforderungsdokuments: "Kategorie-Kanäle" und
|
||||
"Ankündigungs-Funktion: Pin-Nachrichten von Owner/rechte Hand an
|
||||
alle."
|
||||
|
||||
DER TON IST GEDÄMPFTES BERNSTEIN, nicht Signalgelb. Eine Ankündigung
|
||||
steht dauerhaft oben im Bild – sie ist das Element, das am längsten
|
||||
im Blick liegt, und genau deshalb darf es nicht das lauteste sein.
|
||||
Auffallen soll sie durch ihre POSITION, nicht durch ihre Farbe.
|
||||
===================================================================== */
|
||||
|
||||
.chat {
|
||||
/* Bernstein, entsättigt. Auf dem dunklen Grund der Seite kommt es
|
||||
als warmes Signal an, ohne zu blenden. */
|
||||
--pin: #d9ae62;
|
||||
}
|
||||
|
||||
/* ---- Ein Kanal in der Gesprächsliste -------------------------------- */
|
||||
/* Die Raute statt einer Zahl oder Initiale: Ein Kanal hat keine feste
|
||||
Größe (es kommen Leute dazu) und keinen Menschen dahinter. Eckiger
|
||||
als ein Kreis, runder als eine Gruppe -- so sind die drei Arten auch
|
||||
ohne Farbe auseinanderzuhalten. */
|
||||
.chat-raum__zeichen[data-kanal="ja"] {
|
||||
--r: var(--pin);
|
||||
border-radius: 10px;
|
||||
font-size: 1.05rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* ---- Die Pinnwand über dem Verlauf ---------------------------------- */
|
||||
.chat-pins {
|
||||
flex: none;
|
||||
display: flex; flex-direction: column; gap: 6px;
|
||||
padding: 8px 12px;
|
||||
border-bottom: 1px solid var(--rand);
|
||||
background: color-mix(in srgb, var(--pin) 6%, transparent);
|
||||
}
|
||||
/* Drei Aushänge sind das Höchste (PIN_MAX im Server). Selbst dann
|
||||
bleibt die Wand niedrig genug, dass der Verlauf die Seite behält --
|
||||
mehr als ein Drittel der Höhe darf sie nie nehmen. */
|
||||
.chat-pin {
|
||||
display: flex; align-items: stretch; gap: 8px;
|
||||
border: 1px solid color-mix(in srgb, var(--pin) 26%, transparent);
|
||||
border-radius: 10px;
|
||||
background: rgba(255, 255, 255, .025);
|
||||
}
|
||||
.chat-pin__auf {
|
||||
flex: 1; min-width: 0;
|
||||
display: block; text-align: left;
|
||||
appearance: none; border: 0; background: none;
|
||||
padding: 7px 10px;
|
||||
font: inherit; color: inherit; cursor: pointer;
|
||||
border-radius: 10px 0 0 10px;
|
||||
}
|
||||
.chat-pin__auf:hover { background: rgba(255, 255, 255, .03); }
|
||||
.chat-pin__auf:focus-visible { outline: 2px solid var(--akzent); outline-offset: -2px; }
|
||||
|
||||
.chat-pin__kopf {
|
||||
display: flex; align-items: center; gap: 6px;
|
||||
font-size: .72rem; line-height: 1.2;
|
||||
}
|
||||
.chat-pin__nadel { flex: none; width: 13px; height: 13px; color: var(--pin); }
|
||||
.chat-pin__von { font-weight: 700; color: var(--pin); }
|
||||
/* Wer angeheftet hat, steht daneben und nicht darunter: Es ist eine
|
||||
Randnotiz, keine zweite Zeile. Am Handy fällt sie weg -- dort zählt
|
||||
der Text der Ankündigung, nicht ihre Herkunft. */
|
||||
/* .72rem und nicht .68 (10.09.2026, gefunden von pruef-css-klassen).
|
||||
Unter 11,5 px wird Text auf einem Handy zur Zumutung -- und diese
|
||||
Zeile steht dauerhaft im Bild. Sie soll leiser sein als der Text
|
||||
daneben; das macht die FARBE, nicht die Groesse. */
|
||||
.chat-pin__wer { color: var(--text-still); font-size: .72rem; }
|
||||
.chat-pin__text {
|
||||
display: block; margin-top: 2px;
|
||||
font-size: .8rem; color: var(--text-leise);
|
||||
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
||||
}
|
||||
.chat-pin__los {
|
||||
flex: none;
|
||||
appearance: none; border: 0; border-left: 1px solid color-mix(in srgb, var(--pin) 20%, transparent);
|
||||
background: none; padding: 0 10px;
|
||||
font: inherit; font-size: .72rem;
|
||||
color: var(--text-still); cursor: pointer;
|
||||
border-radius: 0 10px 10px 0;
|
||||
}
|
||||
.chat-pin__los:hover { color: var(--text); background: rgba(255, 255, 255, .04); }
|
||||
.chat-pin__los:focus-visible { outline: 2px solid var(--akzent); outline-offset: -2px; }
|
||||
|
||||
@media (max-width: 560px) {
|
||||
.chat-pin__wer { display: none; }
|
||||
}
|
||||
|
||||
/* ---- Die angeheftete Nachricht im Verlauf --------------------------- */
|
||||
/* Ein schmaler Streifen an der Blase, mehr nicht. Wer im Verlauf
|
||||
zurückrollt, soll erkennen, dass genau DIESE Zeile oben hängt --
|
||||
ohne dass sie sich wie eine andere Sorte Nachricht liest. */
|
||||
.chat-nachricht[data-angeheftet="ja"] .chat-nachricht__blase {
|
||||
box-shadow: inset 3px 0 0 color-mix(in srgb, var(--pin) 70%, transparent);
|
||||
}
|
||||
|
||||
/* Der Anheften-Knopf sieht aus wie "antworten" daneben -- dieselbe
|
||||
Sorte Handgriff, dieselbe Zeile, dieselbe Lautstärke. */
|
||||
.chat-nachricht__pin-knopf {
|
||||
appearance: none; border: 0; background: none; padding: 0;
|
||||
font: inherit; font-size: .72rem; font-weight: 600;
|
||||
color: inherit; cursor: pointer;
|
||||
text-decoration: underline; text-underline-offset: 2px;
|
||||
}
|
||||
.chat-nachricht__pin-knopf:hover { color: var(--pin); }
|
||||
.chat-nachricht__pin-knopf:focus-visible {
|
||||
outline: 2px solid var(--akzent); outline-offset: 2px; border-radius: 4px;
|
||||
}
|
||||
|
||||
/* ---- Wer ist im Kanal ----------------------------------------------- */
|
||||
/* Derselbe Knopf wie das Wegräumen, nur wird er beim Darüberfahren
|
||||
nicht rot: Leute hinzuzunehmen ist keine gefährliche Handlung. */
|
||||
.chat__leute { margin-left: auto; }
|
||||
.chat__leute + .chat__weg { margin-left: 6px; }
|
||||
.chat__leute:hover {
|
||||
color: var(--pin);
|
||||
border-color: color-mix(in srgb, var(--pin) 45%, transparent);
|
||||
}
|
||||
|
||||
/* ---- Die zwei Arten im Neu-Dialog ----------------------------------- */
|
||||
.neu__art {
|
||||
display: flex; gap: 6px;
|
||||
margin: 0 0 14px;
|
||||
padding: 4px;
|
||||
border: 1px solid var(--rand); border-radius: 12px;
|
||||
background: rgba(255, 255, 255, .02);
|
||||
}
|
||||
.neu__art button {
|
||||
flex: 1;
|
||||
appearance: none; border: 0; border-radius: 9px;
|
||||
padding: 8px 10px;
|
||||
background: none;
|
||||
font: inherit; font-size: .82rem; font-weight: 600;
|
||||
color: var(--text-still); cursor: pointer;
|
||||
transition: color var(--tempo), background var(--tempo);
|
||||
}
|
||||
.neu__art button[data-an="ja"] {
|
||||
background: color-mix(in srgb, var(--akzent) 14%, transparent);
|
||||
color: var(--text);
|
||||
}
|
||||
.neu__art button:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
|
||||
|
||||
.neu__hinweis {
|
||||
margin: 6px 0 0;
|
||||
font-size: .78rem; color: var(--text-still);
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.chat-pin__auf, .chat-pin__los, .neu__art button { transition: none; }
|
||||
}
|
||||
|
||||
@@ -601,10 +601,16 @@
|
||||
display: grid; gap: 4px;
|
||||
grid-template-columns: repeat(7, 1fr);
|
||||
}
|
||||
/* .72rem und nicht .7 (10.09.2026, nachgezogen).
|
||||
In den sieben Feldern steht die Zahl der Termine -- klein, aber es
|
||||
ist die Auskunft, wegen der die Ampel da ist. Unter 11,5 px gilt im
|
||||
Haus als zu klein; .7rem waren 11,2. Gefunden hat es
|
||||
pruef-css-klassen, EINEN Commit zu spaet: Die Ampel war schon
|
||||
gepusht, weil ich diese Pruefung nicht laufen liess. */
|
||||
.tampel__tag {
|
||||
display: grid; place-items: center;
|
||||
padding: 7px 0 6px; border-radius: 8px;
|
||||
font-size: .7rem; font-weight: 700; letter-spacing: .02em;
|
||||
font-size: .72rem; font-weight: 700; letter-spacing: .02em;
|
||||
cursor: default;
|
||||
border: 1px solid var(--rand);
|
||||
}
|
||||
|
||||
+288
-16
@@ -48,6 +48,19 @@
|
||||
let strom = null; // die EventSource
|
||||
let gewaehlt = new Set(); // im Neu-Dialog
|
||||
|
||||
/* KANAELE UND ANGEHEFTETES (10.09.2026, Kapitel 7.2).
|
||||
|
||||
`darfKanal` und `darfAnheftenHier` kommen vom SERVER, nicht aus
|
||||
einem Rollenvergleich hier. Diese Datei bekommt jeder, der die
|
||||
Seite oeffnet -- ein `rolle === 'admin'` darin waere eine Auskunft
|
||||
ueber den Aufbau des Hauses an alle. Ein Ja/Nein ist keine. */
|
||||
let angeheftet = [];
|
||||
let darfAnheftenHier = false;
|
||||
let darfKanal = false;
|
||||
let kanalFrei = [];
|
||||
let neuArt = 'gespraech'; // 'gespraech' | 'kanal'
|
||||
let kanalUmbau = null; // Raumnummer, wenn die Besetzung geaendert wird
|
||||
|
||||
/* ---------- Kleinkram ---------------------------------------------------- */
|
||||
|
||||
async function hole(weg, einst) {
|
||||
@@ -104,7 +117,15 @@
|
||||
try {
|
||||
const a = await hole('/workspace/api/chat/raeume');
|
||||
if (!a.ok) return;
|
||||
raeume = (await a.json()).raeume || [];
|
||||
const daten = await a.json();
|
||||
raeume = daten.raeume || [];
|
||||
darfKanal = !!daten.darf_kanal;
|
||||
kanalFrei = daten.kanal_frei || [];
|
||||
/* Der Knopf erscheint nur, wenn der Server etwas zu bieten hat.
|
||||
Ein Knopf, der beim Druecken "darfst du nicht" sagt, ist eine
|
||||
Enttaeuschung mit Ansage. */
|
||||
$('neu-art').hidden = !darfKanal;
|
||||
if (!darfKanal) neuArt = 'gespraech';
|
||||
} catch { return; }
|
||||
raeumeZeichnen();
|
||||
ungelesenMelden();
|
||||
@@ -141,7 +162,12 @@
|
||||
|
||||
const zeichen = el('span', 'chat-raum__zeichen');
|
||||
zeichen.setAttribute('aria-hidden', 'true');
|
||||
if (r.art === 'gruppe') {
|
||||
if (r.art === 'kanal') {
|
||||
/* Das Rautenzeichen ist die Schreibweise, die jeder aus
|
||||
anderen Messengern kennt -- es muss nicht erklaert werden. */
|
||||
zeichen.dataset.kanal = 'ja';
|
||||
zeichen.textContent = '#';
|
||||
} else if (r.art === 'gruppe') {
|
||||
zeichen.dataset.gruppe = 'ja';
|
||||
zeichen.textContent = String(r.teilnehmer.length);
|
||||
} else {
|
||||
@@ -167,7 +193,12 @@
|
||||
|
||||
const vorschau = el('span', 'chat-raum__vorschau');
|
||||
if (r.letzte) {
|
||||
const wer = r.letzte.von === ich.name ? 'Du: ' : (r.art === 'gruppe' ? `${r.letzte.von}: ` : '');
|
||||
/* Wer geschrieben hat, gehoert ueberall dorthin, wo mehr als
|
||||
zwei Leute schreiben koennen -- in einer Gruppe wie in einem
|
||||
Kanal. Hier stand `=== 'gruppe'`, und ein Kanal waere damit
|
||||
die einzige Stelle ohne Absender in der Vorschau gewesen. */
|
||||
const wer = r.letzte.von === ich.name ? 'Du: '
|
||||
: (r.art !== 'direkt' ? `${r.letzte.von}: ` : '');
|
||||
vorschau.textContent = r.letzte.zurueckgenommen
|
||||
? `${wer}Nachricht zurückgenommen`
|
||||
: wer + r.letzte.text;
|
||||
@@ -271,6 +302,8 @@
|
||||
const daten = await a.json();
|
||||
offen = daten.raum;
|
||||
nachrichten = daten.nachrichten;
|
||||
angeheftet = daten.angeheftet || [];
|
||||
darfAnheftenHier = !!daten.darf_anheften;
|
||||
/* DER STAND VON VORHIN, nicht der von jetzt. `gelesenMelden()`
|
||||
weiter unten setzt ihn gleich auf die letzte Nachricht -- die
|
||||
Linie muss also aus dem Wert gezogen werden, der beim OEFFNEN
|
||||
@@ -280,9 +313,15 @@
|
||||
} catch { return; }
|
||||
|
||||
$('verlauf-titel').textContent = offen.name;
|
||||
$('verlauf-unter').textContent = offen.art === 'gruppe'
|
||||
/* Bei allem, was mehr als zwei Leute hat, stehen die Namen darunter
|
||||
-- bei einem Zweier-Gespraech die Rolle des Gegenuebers. */
|
||||
$('verlauf-unter').textContent = offen.art !== 'direkt'
|
||||
? offen.teilnehmer.map((t) => t.name).join(' · ')
|
||||
: (ROLLENKURZ[offen.teilnehmer.find((t) => t.id !== ich.id)?.rolle] || '');
|
||||
/* Die Besetzung aendern kann nur, wer Kanaele fuehrt -- und nur in
|
||||
einem Kanal. In einer Gruppe waere es ein Eingriff in fremde
|
||||
Runden; siehe die Route dazu im Server. */
|
||||
$('kanal-leute').hidden = !(darfKanal && offen.art === 'kanal');
|
||||
$('schreiben').hidden = false;
|
||||
$('verlauf-leer').hidden = true;
|
||||
$('chat').dataset.ansicht = 'verlauf';
|
||||
@@ -292,6 +331,7 @@
|
||||
/* Ein frisch geoeffnetes Gespraech steht immer am Ende -- man will
|
||||
das Letzte sehen, nicht das Erste. */
|
||||
unten = true; neuUnten = 0;
|
||||
pinsZeichnen();
|
||||
verlaufZeichnen();
|
||||
/* Der Entwurf von vorhin, falls einer da ist. */
|
||||
$('text').value = entwurfHolen(id);
|
||||
@@ -306,6 +346,79 @@
|
||||
raeumeZeichnen();
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
DIE ANGEHEFTETEN (10.09.2026, Kapitel 7.2)
|
||||
|
||||
Sie stehen UEBER dem Verlauf und rollen nicht mit. Eine Ankuendigung,
|
||||
die man erst suchen muss, ist keine.
|
||||
|
||||
Jeder Aushang fuehrt zu seiner Stelle im Verlauf. Ohne das waere er
|
||||
ein Bild von einer Nachricht: Man liest den Anfang und kann nicht
|
||||
nachsehen, was darauf geantwortet wurde.
|
||||
======================================================================= */
|
||||
function pinNadel() {
|
||||
const raum = 'http://www.w3.org/2000/svg';
|
||||
const s = document.createElementNS(raum, 'svg');
|
||||
s.setAttribute('viewBox', '0 0 24 24');
|
||||
s.setAttribute('aria-hidden', 'true');
|
||||
s.setAttribute('class', 'chat-pin__nadel');
|
||||
const pfad = document.createElementNS(raum, 'path');
|
||||
pfad.setAttribute('d', 'M9 3h6l-1 5 3 3v2h-5v6l-1 2-1-2v-6H5v-2l3-3z');
|
||||
pfad.setAttribute('fill', 'currentColor');
|
||||
s.append(pfad);
|
||||
return s;
|
||||
}
|
||||
|
||||
function pinsZeichnen() {
|
||||
const ziel = $('pins');
|
||||
ziel.textContent = '';
|
||||
ziel.hidden = !angeheftet.length;
|
||||
if (!angeheftet.length) return;
|
||||
|
||||
for (const a of angeheftet) {
|
||||
const kasten = el('div', 'chat-pin');
|
||||
|
||||
const auf = el('button', 'chat-pin__auf');
|
||||
auf.type = 'button';
|
||||
auf.title = 'Zur Nachricht springen';
|
||||
const kopf = el('span', 'chat-pin__kopf');
|
||||
kopf.append(pinNadel());
|
||||
kopf.append(el('span', 'chat-pin__von', a.von));
|
||||
if (a.heftete) kopf.append(el('span', 'chat-pin__wer', `angeheftet von ${a.heftete}`));
|
||||
auf.append(kopf);
|
||||
auf.append(el('span', 'chat-pin__text', a.text || 'Ohne Text'));
|
||||
auf.addEventListener('click', () => zurStelle(a.id));
|
||||
kasten.append(auf);
|
||||
|
||||
if (darfAnheftenHier) {
|
||||
const los = el('button', 'chat-pin__los', 'lösen');
|
||||
los.type = 'button';
|
||||
los.setAttribute('aria-label', `„${(a.text || '').slice(0, 40)}“ lösen`);
|
||||
los.addEventListener('click', () => anheften(a.id, false));
|
||||
kasten.append(los);
|
||||
}
|
||||
ziel.append(kasten);
|
||||
}
|
||||
}
|
||||
|
||||
async function anheften(id, an) {
|
||||
try {
|
||||
const a = await hole(`/workspace/api/chat/nachrichten/${id}/anheften`, {
|
||||
method: 'PUT', headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ an }),
|
||||
});
|
||||
if (!a.ok) {
|
||||
melde((await a.json().catch(() => ({}))).fehler || 'Ging nicht.');
|
||||
return;
|
||||
}
|
||||
/* Neu holen statt hier nachzurechnen: Der Server kennt die Grenze
|
||||
von drei, das Abfallen zurueckgenommener Nachrichten und die
|
||||
Reihenfolge. Zwei Rechnungen darueber liefen irgendwann
|
||||
auseinander. */
|
||||
if (offen) await raumOeffnen(offen.id, { sanft: true });
|
||||
} catch { /* umgeleitet */ }
|
||||
}
|
||||
|
||||
function verlaufZeichnen() {
|
||||
const ziel = $('verlauf');
|
||||
/* NUR DIE NACHRICHTEN WEG — NICHT DER GANZE KASTEN.
|
||||
@@ -396,8 +509,10 @@
|
||||
zeile.append(z);
|
||||
}
|
||||
|
||||
if (n.angeheftet) zeile.dataset.angeheftet = 'ja';
|
||||
|
||||
const blase = el('div', 'chat-nachricht__blase');
|
||||
if (!gleicheFolge && !n.selbst && offen.art === 'gruppe') {
|
||||
if (!gleicheFolge && !n.selbst && offen.art !== 'direkt') {
|
||||
blase.append(el('p', 'chat-nachricht__von', n.von));
|
||||
}
|
||||
|
||||
@@ -456,6 +571,18 @@
|
||||
weg.addEventListener('click', () => zuruecknehmen(n.id));
|
||||
fuss.append(weg);
|
||||
}
|
||||
/* ANHEFTEN steht an derselben Stelle wie "antworten" -- dieselbe
|
||||
Sorte Handgriff, dieselbe Zeile. Nur fuer die, die es duerfen,
|
||||
und nie an einer zurueckgenommenen oder noch unterwegs
|
||||
befindlichen Nachricht (`n.id > 0`): Die haette noch keine
|
||||
Nummer, unter der man sie anheften koennte. */
|
||||
if (darfAnheftenHier && !n.zurueckgenommen && n.id > 0) {
|
||||
const pin = el('button', 'chat-nachricht__pin-knopf',
|
||||
n.angeheftet ? 'lösen' : 'anheften');
|
||||
pin.type = 'button';
|
||||
pin.addEventListener('click', () => anheften(n.id, !n.angeheftet));
|
||||
fuss.append(pin);
|
||||
}
|
||||
/* KOPIEREN. Eine Adresse, ein Code, eine Uhrzeit -- man will sie
|
||||
weitergeben, nicht abtippen. Der Knopf bestaetigt sich selbst
|
||||
und faellt danach zurueck; eine Meldung anderswo waere ein
|
||||
@@ -869,6 +996,15 @@
|
||||
raeumeLaden();
|
||||
});
|
||||
|
||||
/* ANGEHEFTET ODER GELOEST -- alle im Raum sehen es sofort.
|
||||
Betroffen ist nur, wer denselben Raum offen hat; sonst genuegt
|
||||
die Liste. */
|
||||
strom.addEventListener('pin', (e) => {
|
||||
let n;
|
||||
try { n = JSON.parse(e.data); } catch { return; }
|
||||
if (offen && n.raum_id === offen.id) raumOeffnen(offen.id, { sanft: true });
|
||||
});
|
||||
|
||||
/* Bei einem Abriss verbindet EventSource von selbst neu. Wir holen
|
||||
danach den Verlauf nach -- sonst fehlte, was während der Pause
|
||||
geschrieben wurde. */
|
||||
@@ -880,10 +1016,10 @@
|
||||
|
||||
/* ---------- Neues Gespräch ----------------------------------------------- */
|
||||
|
||||
async function partnerLaden() {
|
||||
async function partnerLaden(vorbelegt = []) {
|
||||
const ziel = $('partner');
|
||||
ziel.textContent = '';
|
||||
gewaehlt = new Set();
|
||||
gewaehlt = new Set(vorbelegt);
|
||||
$('gruppenname-zeile').hidden = true;
|
||||
$('neu-los').disabled = true;
|
||||
$('neu-fehler').textContent = '';
|
||||
@@ -906,17 +1042,13 @@
|
||||
fehlte 'spicy' -- und wer nicht in der Schleife vorkommt, taucht
|
||||
in der Gesprächsliste gar nicht auf. Kein Fehler, nur eine
|
||||
Person, die es fuer die Anderen nicht gibt. */
|
||||
for (const rolle of window.Bereiche.ROLLENFOLGE) {
|
||||
const leute = personen.filter((p) => p.rolle === rolle);
|
||||
if (!leute.length) continue;
|
||||
|
||||
function gruppeBauen(schluessel, ueberschrift, leute) {
|
||||
const gruppe = el('div', 'chat-wahl__gruppe');
|
||||
gruppe.dataset.rolle = rolle;
|
||||
gruppe.dataset.rolle = schluessel;
|
||||
const titel = el('p', 'chat-wahl__titel');
|
||||
const punkt = el('span', 'chat-wahl__punkt');
|
||||
punkt.setAttribute('aria-hidden', 'true');
|
||||
titel.append(punkt, document.createTextNode(
|
||||
window.Bereiche.ROLLEN_GRUPPE[rolle]));
|
||||
titel.append(punkt, document.createTextNode(ueberschrift));
|
||||
gruppe.append(titel);
|
||||
|
||||
const liste = el('div', 'chat-wahl__liste');
|
||||
@@ -926,7 +1058,8 @@
|
||||
b.type = 'button';
|
||||
b.dataset.id = String(p.id);
|
||||
b.dataset.rolle = p.rolle;
|
||||
b.setAttribute('aria-pressed', 'false');
|
||||
if (gewaehlt.has(p.id)) { b.dataset.an = 'ja'; }
|
||||
b.setAttribute('aria-pressed', gewaehlt.has(p.id) ? 'true' : 'false');
|
||||
|
||||
const z = el('span', 'chat-wahl__zeichen', initialen(p.name));
|
||||
z.setAttribute('aria-hidden', 'true');
|
||||
@@ -943,10 +1076,89 @@
|
||||
gruppe.append(liste);
|
||||
ziel.append(gruppe);
|
||||
}
|
||||
|
||||
const gezeichnet = new Set();
|
||||
for (const rolle of window.Bereiche.ROLLENFOLGE) {
|
||||
const leute = personen.filter((p) => p.rolle === rolle);
|
||||
gezeichnet.add(rolle);
|
||||
if (!leute.length) continue;
|
||||
gruppeBauen(rolle, window.Bereiche.ROLLEN_GRUPPE[rolle], leute);
|
||||
}
|
||||
|
||||
/* UND DANN ALLE UEBRIGEN (10.09.2026).
|
||||
|
||||
Genau die Lücke, vor der der Kommentar oben warnt -- sie war
|
||||
offen. `ROLLENFOLGE` hat fünf Einträge; wer eine sechste Rolle
|
||||
hat, wurde von der Schleife darüber nie erfasst und verschwand
|
||||
lautlos aus der Auswahl. Der Server schickte ihn mit, der
|
||||
Browser zeichnete ihn nicht, und niemand konnte sehen, dass
|
||||
etwas fehlt.
|
||||
|
||||
Aufgefallen ist es beim HINSEHEN, nicht beim Lesen: Ein frisch
|
||||
angelegter Kanal hatte hinterher zwei Leute statt vier.
|
||||
|
||||
Die Überschrift kommt vom Server -- so kann hier auch eine Rolle
|
||||
stehen, deren Namen diese Datei gar nicht kennen darf. Nach
|
||||
Überschrift gruppiert und nicht nach Rolle: Wer einen Menschen
|
||||
sucht, sucht ihn in einer Liste, nicht in einer Rangordnung. */
|
||||
const uebrig = personen.filter((p) => !gezeichnet.has(p.rolle));
|
||||
const nachTitel = new Map();
|
||||
for (const p of uebrig) {
|
||||
const t = p.gruppe || 'Weitere';
|
||||
if (!nachTitel.has(t)) nachTitel.set(t, []);
|
||||
nachTitel.get(t).push(p);
|
||||
}
|
||||
for (const [titel, leute] of nachTitel) gruppeBauen(leute[0].rolle, titel, leute);
|
||||
|
||||
wahlGeaendert();
|
||||
}
|
||||
|
||||
/* Welche Zustaendigkeiten noch keinen Kanal haben. Die Liste kommt vom
|
||||
Server; steht nichts darin, gibt es alle schon. */
|
||||
function kanalWahlFuellen() {
|
||||
const feld = $('kanal-kategorie');
|
||||
feld.textContent = '';
|
||||
for (const k of kanalFrei) {
|
||||
const o = document.createElement('option');
|
||||
o.value = k.wert; o.textContent = k.name;
|
||||
feld.append(o);
|
||||
}
|
||||
$('kanal-alle').hidden = kanalFrei.length > 0;
|
||||
feld.hidden = kanalFrei.length === 0;
|
||||
}
|
||||
|
||||
/* Umschalten zwischen "Gespräch" und "Kanal". Ein zweiter Dialog
|
||||
waere dieselbe Personenwahl ein zweites Mal -- und die zweite
|
||||
Fassung waere die, in der eine Regel fehlt. */
|
||||
function neuArtSetzen(art) {
|
||||
neuArt = art;
|
||||
for (const b of document.querySelectorAll('#neu-art [data-art]')) {
|
||||
const an = b.dataset.art === art;
|
||||
b.dataset.an = an ? 'ja' : '';
|
||||
b.setAttribute('aria-pressed', an ? 'true' : 'false');
|
||||
}
|
||||
$('kanal-zeile').hidden = art !== 'kanal' || !!kanalUmbau;
|
||||
$('neu-titel').textContent = kanalUmbau ? 'Wer ist im Kanal?'
|
||||
: art === 'kanal' ? 'Neuer Kanal' : 'Neues Gespräch';
|
||||
$('neu-unter').textContent = kanalUmbau
|
||||
? 'Antippen, um jemanden hinein- oder herauszunehmen. Die Leitung bleibt immer dabei.'
|
||||
: art === 'kanal'
|
||||
? 'Ein Kanal je Zuständigkeit. Der Name kommt aus der Kategorie – so gibt es ihn nur einmal.'
|
||||
: 'Eine Person antippen, um ihr zu schreiben. Mehrere auswählen ergibt eine Gruppe.';
|
||||
wahlGeaendert();
|
||||
}
|
||||
|
||||
function wahlGeaendert() {
|
||||
const n = gewaehlt.size;
|
||||
if (neuArt === 'kanal') {
|
||||
/* Ein Kanal braucht keinen Namen (er kommt aus der Kategorie) und
|
||||
auch niemanden -- man legt ihn an und fuellt ihn spaeter. Nur
|
||||
eine Kategorie muss es geben, sonst gibt es nichts anzulegen. */
|
||||
$('gruppenname-zeile').hidden = true;
|
||||
$('neu-los').disabled = !kanalUmbau && !$('kanal-kategorie').value;
|
||||
$('neu-los').textContent = kanalUmbau ? 'Übernehmen' : 'Kanal anlegen';
|
||||
return;
|
||||
}
|
||||
/* Ab zwei ist es eine Gruppe -- und die braucht einen Namen. */
|
||||
$('gruppenname-zeile').hidden = n < 2;
|
||||
$('neu-los').disabled = n === 0;
|
||||
@@ -956,8 +1168,48 @@
|
||||
async function neuAbschicken(e) {
|
||||
e.preventDefault();
|
||||
const ids = [...gewaehlt];
|
||||
if (!ids.length) return;
|
||||
const knopf = $('neu-los');
|
||||
|
||||
/* KANAL: anlegen oder umbesetzen. Steht zuerst, weil hier auch eine
|
||||
LEERE Auswahl erlaubt ist -- ein Kanal ohne Leute ist ein
|
||||
gueltiger Zwischenstand, ein Gespraech ohne Gegenueber nicht. */
|
||||
if (neuArt === 'kanal') {
|
||||
knopf.disabled = true;
|
||||
try {
|
||||
if (kanalUmbau) {
|
||||
const a = await hole(`/workspace/api/chat/kanal/${kanalUmbau}/mitglieder`, {
|
||||
method: 'PUT', headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ mit: ids }),
|
||||
});
|
||||
if (!a.ok) {
|
||||
$('neu-fehler').textContent = (await a.json().catch(() => ({}))).fehler || 'Ging nicht.';
|
||||
return;
|
||||
}
|
||||
const raumId = kanalUmbau;
|
||||
$('neu-dialog').close();
|
||||
await raeumeLaden();
|
||||
await raumOeffnen(raumId, { sanft: true });
|
||||
return;
|
||||
}
|
||||
const kategorie = $('kanal-kategorie').value;
|
||||
if (!kategorie) { $('neu-fehler').textContent = 'Wähle eine Kategorie.'; return; }
|
||||
const a = await hole('/workspace/api/chat/kanal', {
|
||||
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ kategorie, mit: ids }),
|
||||
});
|
||||
if (!a.ok) {
|
||||
$('neu-fehler').textContent = (await a.json().catch(() => ({}))).fehler || 'Ging nicht.';
|
||||
return;
|
||||
}
|
||||
const raumId = (await a.json()).raum_id;
|
||||
$('neu-dialog').close();
|
||||
await raeumeLaden();
|
||||
await raumOeffnen(raumId);
|
||||
} catch { /* umgeleitet */ } finally { knopf.disabled = false; }
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ids.length) return;
|
||||
knopf.disabled = true;
|
||||
|
||||
try {
|
||||
@@ -1194,9 +1446,29 @@
|
||||
|
||||
$('suche').addEventListener('input', () => { raeumeZeichnen(); nachrichtenSuchen(); });
|
||||
$('neu-oeffnen').addEventListener('click', async () => {
|
||||
kanalUmbau = null;
|
||||
kanalWahlFuellen();
|
||||
neuArtSetzen('gespraech');
|
||||
await partnerLaden();
|
||||
$('neu-dialog').showModal();
|
||||
});
|
||||
|
||||
for (const b of document.querySelectorAll('#neu-art [data-art]')) {
|
||||
b.addEventListener('click', () => neuArtSetzen(b.dataset.art));
|
||||
}
|
||||
$('kanal-kategorie').addEventListener('change', wahlGeaendert);
|
||||
|
||||
/* WER IST IM KANAL. Derselbe Dialog, vorbelegt mit denen, die schon
|
||||
drin sind -- so sieht man beim Oeffnen den Stand und muss ihn nicht
|
||||
erst aus der Kopfzeile abschreiben. */
|
||||
$('kanal-leute').addEventListener('click', async () => {
|
||||
if (!offen || offen.art !== 'kanal') return;
|
||||
kanalUmbau = offen.id;
|
||||
kanalWahlFuellen();
|
||||
neuArtSetzen('kanal');
|
||||
await partnerLaden(offen.teilnehmer.map((t) => t.id));
|
||||
$('neu-dialog').showModal();
|
||||
});
|
||||
$('neu-zu').addEventListener('click', () => $('neu-dialog').close());
|
||||
$('neu-form').addEventListener('submit', neuAbschicken);
|
||||
$('zur-liste').addEventListener('click', () => {
|
||||
|
||||
+11
-11
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -245,10 +245,10 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -140,10 +140,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -157,14 +157,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -82,11 +82,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+49
-14
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<!-- 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=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -117,6 +117,18 @@
|
||||
Es verschwindet nur bei DIR -- das Gegenüber behält seinen
|
||||
Verlauf. Der Knopf steht erst da, wenn auch ein Gespräch
|
||||
offen ist; sonst wäre er ein Angebot ohne Gegenstand. -->
|
||||
<!-- WER IST IM KANAL (10.09.2026, Kapitel 7.2).
|
||||
Steht nur in einem Kanal da und nur bei der Teamleitung --
|
||||
der Server entscheidet das, nicht diese Datei. -->
|
||||
<button type="button" class="chat__weg chat__leute" id="kanal-leute" hidden
|
||||
aria-label="Wer ist in diesem Kanal?"
|
||||
title="Wer ist in diesem Kanal?">
|
||||
<svg viewBox="0 0 24 24" aria-hidden="true">
|
||||
<circle cx="9" cy="8.5" r="3" />
|
||||
<path d="M3.5 19c0-3 2.5-5 5.5-5s5.5 2 5.5 5" />
|
||||
<path d="M16 6.2a3 3 0 0 1 0 5.6M17.5 14.4c2 .7 3.3 2.4 3.3 4.6" />
|
||||
</svg>
|
||||
</button>
|
||||
<button type="button" class="chat__weg" id="gespraech-weg" hidden
|
||||
aria-label="Dieses Gespräch wegräumen"
|
||||
title="Gespräch wegräumen – nur bei dir">
|
||||
@@ -140,6 +152,12 @@
|
||||
<div class="chat__ablage" id="ablage" hidden aria-hidden="true">
|
||||
<span>Loslassen – Foto oder PDF schicken</span>
|
||||
</div>
|
||||
<!-- ANGEHEFTETE ANKÜNDIGUNGEN (10.09.2026, Kapitel 7.2).
|
||||
Sie stehen ÜBER dem Verlauf und rollen nicht mit: Eine
|
||||
Ankündigung, die man erst suchen muss, ist keine. Leer bleibt
|
||||
der Kasten verborgen – ein leerer Rahmen wäre jeden Tag im
|
||||
Weg für den Fall, dass irgendwann etwas darin steht. -->
|
||||
<div class="chat-pins" id="pins" hidden aria-label="Angeheftet"></div>
|
||||
<div class="chat__verlauf" id="verlauf" role="log" aria-live="polite" aria-relevant="additions">
|
||||
<p class="chat__leer" id="verlauf-leer">
|
||||
Links ein Gespräch auswählen – oder mit <strong>Neu</strong> eines anfangen.
|
||||
@@ -223,12 +241,29 @@
|
||||
eigentliche Absicht gestellt. -->
|
||||
<dialog class="dialog" id="neu-dialog">
|
||||
<form method="dialog" id="neu-form" class="neu neu--blank">
|
||||
<h2 class="dialog__titel">Neues Gespräch</h2>
|
||||
<p class="dialog__unter">
|
||||
<h2 class="dialog__titel" id="neu-titel">Neues Gespräch</h2>
|
||||
<p class="dialog__unter" id="neu-unter">
|
||||
Eine Person antippen, um ihr zu schreiben. Mehrere auswählen ergibt
|
||||
eine Gruppe.
|
||||
</p>
|
||||
|
||||
<!-- ZWEI ARTEN, EIN DIALOG (10.09.2026, Kapitel 7.2).
|
||||
Ein zweiter Dialog wäre dieselbe Personenwahl ein zweites Mal –
|
||||
und die zweite Fassung wäre die, in der eine Regel fehlt.
|
||||
Sichtbar nur, wenn der Server sagt, dass Kanäle erlaubt sind. -->
|
||||
<div class="neu__art" id="neu-art" role="group" aria-label="Was soll es werden?" hidden>
|
||||
<button type="button" data-art="gespraech" data-an="ja" aria-pressed="true">Gespräch</button>
|
||||
<button type="button" data-art="kanal" aria-pressed="false">Kanal</button>
|
||||
</div>
|
||||
|
||||
<div class="neu__zeile" id="kanal-zeile" hidden>
|
||||
<label class="feld-schild" for="kanal-kategorie">Zuständigkeit</label>
|
||||
<select id="kanal-kategorie"></select>
|
||||
<p class="neu__hinweis" id="kanal-alle" hidden>
|
||||
Für jede Zuständigkeit gibt es schon einen Kanal.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="chat-wahl" id="partner"></div>
|
||||
|
||||
<!-- Erscheint erst ab zwei Ausgewählten -- vorher wäre ein
|
||||
@@ -247,10 +282,10 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609101807"></script>
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807"></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807"></script>
|
||||
<script src="assets/js/chat.js?v=202609101807"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008"></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008"></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008"></script>
|
||||
<script src="assets/js/chat.js?v=202609102008"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -172,12 +172,12 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/content.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/content.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -30,9 +30,9 @@
|
||||
<link rel="preload" as="image" href="assets/img/buehne/crew-gate-hoch-580.webp"
|
||||
type="image/webp" media="(max-width: 899px)" />
|
||||
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="gate gate--crew">
|
||||
@@ -246,6 +246,6 @@
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/gate.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -13,25 +13,25 @@
|
||||
"theme_color": "#06090f",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609101807",
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202609102008",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609101807",
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202609102008",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609101807",
|
||||
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609102008",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609101807",
|
||||
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609102008",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
+12
-12
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -101,10 +101,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -30,9 +30,9 @@
|
||||
<link rel="preload" as="image" href="assets/img/buehne/gate-hoch-580.webp"
|
||||
type="image/webp" media="(max-width: 899px)" />
|
||||
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="gate">
|
||||
@@ -401,6 +401,6 @@
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/gate.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -370,11 +370,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -217,10 +217,10 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807"></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807"></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807"></script>
|
||||
<script src="assets/js/leistung.js?v=202609101807"></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008"></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008"></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008"></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008"></script>
|
||||
<script src="assets/js/leistung.js?v=202609102008"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -364,10 +364,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -207,11 +207,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -99,11 +99,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/report.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/report.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -132,10 +132,10 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+11
-11
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<!-- 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=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/heim.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -667,10 +667,10 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/start.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/start.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+13
-13
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -78,11 +78,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -119,10 +119,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -103,10 +103,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/team.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/team.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-10
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu
|
||||
@@ -71,8 +71,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609101807" defer></script>
|
||||
<!-- wahl.js VOR kopf.js (nachgetragen 10.09.2026).
|
||||
kopf.js baut den Sicht-Umschalter; ohne wahl.js sieht er aus wie
|
||||
ein blankes Browser-Auswahlfeld statt wie der Rest des Hauses.
|
||||
Kaputt ist dabei nichts -- er funktioniert. Genau deshalb faellt
|
||||
es niemandem auf, und deshalb prueft pruef-css-klassen die
|
||||
ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. -->
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -142,11 +142,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-12
@@ -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=202609101807" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609101807" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609101807" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609102008" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609102008" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609102008" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -183,10 +183,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609101807" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609102008" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609102008" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user