Eine neue Form fuer jedes Modul -- und der Kalender zeigt nur noch, was einen angeht

Filipe: "DU HAST WIEDER EINE KLEINE AENDERUNG UEBERALL GEMACHT ANSTATT
EINE RIESEN AENDERUNG." Er hatte recht, und der Grund war jedes Mal
derselbe: Ich habe das MATERIAL getauscht (Mattglas, Leuchtschiene,
Verlauf) und die FORM gelassen. Ein abgerundetes Rechteck bleibt ein
abgerundetes Rechteck -- und die Silhouette ist das Einzige, was man aus
fuenf Metern erkennt.

Jetzt ist die Form eine andere: abgeschnittene Ecke oben links
(clip-path, echte Silhouette), ein Kantenlicht in der Kategoriefarbe
darauf, Eckwinkel unten rechts, ein feines Raster statt Koernung.
35 Bauteile auf allen 18 Seiten, in einer eigenen Datei (module.css).

DREI DINGE, DIE DABEI SCHIEFGINGEN UND JETZT ABGESICHERT SIND

1. Die Regeln standen in :where() -- Spezifitaet null, also gewann jede
   aeltere .kachel::before-Regel. Jetzt :is().
2. module.css stand an DRITTER Stelle im Ladeweg. Auf Calls,
   Automationen, Bereich und Dateien hat sie damit gar nichts bewirkt:
   Die Seitendateien setzen dort selbst border-radius und box-shadow und
   kommen spaeter. Genau das ergab wieder "ueberall ein bisschen". Sie
   wird jetzt als LETZTE geladen, geprueft auf allen 18 Seiten.
3. Die Klassenliste steht siebenmal in der Datei (CSS kennt keine
   Variable fuer Selektoren). Eine vergessene Kopie faellt niemandem
   auf -- pruef-css-klassen vergleicht sie deshalb alle, mit Gegenprobe.

DER KALENDER: NUR NOCH, WAS EINEN ANGEHT

Filipe: "calls oder termine soll jeder nur sehen die er selber macht
oder jeden betrifft." Das gilt auch fuer DogFather, und das ist die
eigentliche Aenderung -- er bekam bisher 1=1. "Jeden betrifft" heisst:
ohne Gegenueber und ohne Teilnehmerliste. Wer niemanden eintraegt, meint
alle. Die Rollenfrage entfaellt im Kalender damit vollstaendig.

SECHS PRUEFUNGEN, DIE EINE WELT GEMESSEN HABEN, DIE ES NICHT MEHR GIBT

Alle sechs wurden auf die neue Regel umgeschrieben, keine geloescht --
loeschen haette die Zahl gesenkt und den neuen Weg ungeprueft gelassen:
ics, serien, sicht, spicy, teilnehmer, tagesblick, team.

UND VIER ECHTE FUNDE, DIE DABEI HERAUSFIELEN

* pruef-workspace-seiten war seit dem Bildumbau von heute Frueh auf
  ALLEN 32 Seiten rot: Sie verlangte noch das eine Motiv. Die neue
  Bedingung ist schaerfer als beide alten -- das geladene Bild muss zu
  dem Merkmal passen, das die Seite selbst traegt. Und die Meldung sagt
  jetzt, WELCHE Bedingung gefallen ist.
* pruef-leistung-optik hat sich selbst ausgesperrt (meldete sich als
  Manager an, der die Zahlen seit Filipes Anweisung nicht mehr sehen
  darf) und stuerzte danach ab: 2 Pruefungen statt 56. Der Absturz hat
  verdeckt, dass sie sieben Fingerziele als "zu klein" meldete -- es
  waren die unsichtbaren Knoepfe der zugeklappten Woche, 0x0.
* personen.html beim Manager: Der Erklaersatz ("Codes, Sperren und das
  Protokoll bleiben bei DogFather") kam nie an -- das Element gab es
  nicht, und das && davor hat den Fehlgriff verschluckt. Die Liste stand
  ausserdem dauerhaft auf aria-busy="true": fuer einen Screenreader lud
  die Seite fuer immer.
* pruef-schranke hielt personen.html noch fuer DogFather-only. Die Seite
  wechselt jetzt die Erwartung, statt aus der Pruefung zu verschwinden:
  Seite auf fuer die Leitung, Verwaltungsdaten dahinter weiterhin zu.

Die Anmeldeseite wurde nicht angefasst (nur ihr Versionsstempel).

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-07 07:12:48 +02:00
co-authored by Claude Opus 5
parent e8478c9cae
commit 4eab64bd20
37 changed files with 997 additions and 563 deletions
+199
View File
@@ -0,0 +1,199 @@
/* =====================================================================
module.css — DIE FORM ALLER MODULE
Herausgeloest aus start.css am 07.09.2026. Diese Datei beschreibt die
SILHOUETTE der ganzen Anwendung: die abgeschnittene Ecke, das
Kantenlicht, die Eckwinkel und das Raster.
Sie wird von JEDER Seite geladen -- ausser von der Anmeldeseite
(index.html), die unangetastet bleibt.
SIE WIRD ALS LETZTE GELADEN, und das ist keine Kosmetik. Bis zum
07.09.2026 stand sie an dritter Stelle, VOR den Seitendateien. Dort
hat sie auf vier Seiten schlicht nichts bewirkt: `.call` in
calls.css, `.regel`/`.zustand`/`.ki-kasten` in automation.css,
`.unterweisung` in bereich.css und `.fortschritt` in dateien.css
setzen alle selbst `border-radius` und `box-shadow` -- gleiche
Spezifitaet, spaeter im Ladeweg, also gewinnen sie. Ergebnis war
genau das, was Filipe zu Recht bemaengelt hat: die neue Form auf
manchen Seiten, die alte auf anderen, "ueberall ein bisschen".
Als letzte Datei gewinnt die Form ueberall.
WER EINE NEUE KARTE BAUT, traegt ihren Klassennamen in die Listen
unten ein. Die Liste steht siebenmal in dieser Datei (Grundform,
Kantenlicht, Raster, Handy und dreimal Kontrastmodus) -- das ist die
schwache Stelle dieser Bauart, denn eine vergessene Kopie faellt
niemandem auf. Deshalb steht vor jeder Kopie die Marke
MODULLISTE, und `pruef-css-klassen.mjs` vergleicht alle sieben
Vorkommen miteinander: Weicht eines ab, wird die Pruefung rot.
===================================================================== */
/* =====================================================================
HUD-MODULE — die FORM ändert sich, nicht der Lack (07.09.2026)
Filipe: "DU HAST WIEDER EINE KLEINE ÄNDERUNG ÜBERALL GEMACHT ANSTATT
EINE RIESEN ÄNDERUNG."
---------------------------------------------------------------------
ER HAT RECHT, UND DER GRUND WAR IMMER DERSELBE
Ich habe dreimal das MATERIAL getauscht -- Mattglas, Leuchtschiene,
Verlauf mit Schatten -- und dreimal die FORM gelassen. Ein
abgerundetes Rechteck bleibt ein abgerundetes Rechteck. Die
Silhouette ist aber das Einzige, was man aus fünf Metern erkennt;
deshalb sah jede Änderung "wie vorher" aus.
DIE NEUE FORM:
1. DIE ECKE OBEN LINKS IST ABGESCHNITTEN. Eine Schräge statt einer
Rundung -- eine andere geometrische Klasse, und genau deshalb
fällt sie auf. Gebaut mit `clip-path`, also eine echte
Silhouette und kein aufgemalter Fleck.
2. EIN LICHT LÄUFT AUF DER KANTE, oben und über die Schräge, in der
Farbe der Kategorie -- nicht ein Rahmen rundherum (das wäre
wieder ein Kasten), sondern eine beleuchtete Oberkante.
3. ECKWINKEL UNTEN RECHTS. Zwei kurze Striche, die eine Ecke
andeuten, ohne sie zu zeichnen -- die Sprache von Peilung und
Zielmarke.
4. EIN FEINES RASTER statt Körnung. Körnung sagt "Papier", ein
Raster sagt "Messgerät".
---------------------------------------------------------------------
DREI DINGE, DIE BEIM ERSTEN ANLAUF SCHIEFGINGEN
`clip-path` SCHNEIDET DEN SCHLAGSCHATTEN AB. Deshalb liegt die Höhe
hier in `filter: drop-shadow()` und nicht in `box-shadow`: drop-shadow
folgt der WIRKLICHEN Form, box-shadow immer dem Rechteck -- er würde
einen Schatten für eine Ecke zeichnen, die es nicht mehr gibt.
DIE REGELN STANDEN IN `:where()`. Das hat Spezifität NULL, also
gewann jede ältere `.kachel::before`-Regel. Die Silhouette kam durch
(die setzt sonst niemand), das Kantenlicht nicht -- heraus kam ein
Zwitter aus neuer Form und alter Kante. Jetzt steht hier `:is()`:
Das übernimmt die Spezifität seines stärksten Arguments, also die
einer einzelnen Klasse. Damit liegt die Form gleichauf mit
`.kachel` und gewinnt über den Ladeweg -- deshalb muss diese Datei
zuletzt kommen (siehe oben).
UND SIE STAND ZU FRÜH IM LADEWEG. Siehe der Absatz ganz oben; das
war derselbe Fehler noch einmal, nur eine Ebene höher.
===================================================================== */
:root {
/* Die Schräge steht als Größe da, damit Silhouette, Kantenlicht und
Eckwinkel garantiert dieselbe benutzen. */
--fase: 18px;
--raster:
repeating-linear-gradient(0deg, rgba(150, 186, 220, .26) 0 1px, transparent 1px 26px),
repeating-linear-gradient(90deg, rgba(150, 186, 220, .26) 0 1px, transparent 1px 26px);
}
/* MODULLISTE */
:is(.eintrag-karte, .call, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .k-ansicht, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .unterweisung, .warnkarte, .kachel, .willkommen, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu) {
position: relative;
clip-path: polygon(var(--fase) 0, 100% 0, 100% 100%, 0 100%, 0 var(--fase));
border-radius: 0;
border: 0;
box-shadow: none;
filter:
drop-shadow(0 2px 3px rgba(0, 0, 0, .55))
drop-shadow(0 12px 22px rgba(0, 0, 0, .55));
}
/* DAS KANTENLICHT. Ein Layer mit derselben Silhouette, 1,6 px kleiner --
was übrig bleibt, ist eine Linie, die exakt der Form folgt, Schräge
inklusive. Ein `border` könnte das nicht: Er folgt dem Rechteck. */
/* MODULLISTE */
:is(.eintrag-karte, .call, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .k-ansicht, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .unterweisung, .warnkarte, .kachel, .willkommen, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu)::before {
content: "";
position: absolute; inset: 0;
pointer-events: none;
z-index: 2;
width: auto; height: auto;
opacity: 1;
background: linear-gradient(158deg,
color-mix(in srgb, var(--ton, var(--akzent)) 90%, #ffffff) 0%,
color-mix(in srgb, var(--ton, var(--akzent)) 60%, transparent) 15%,
rgba(150, 186, 220, .20) 45%,
rgba(150, 186, 220, .07) 100%);
clip-path: polygon(
var(--fase) 0, 100% 0, 100% 100%, 0 100%, 0 var(--fase),
1.6px calc(var(--fase) + 0.7px), 1.6px calc(100% - 1.6px),
calc(100% - 1.6px) calc(100% - 1.6px), calc(100% - 1.6px) 1.6px,
calc(var(--fase) + 0.7px) 1.6px, 1.6px calc(var(--fase) + 0.7px),
0 var(--fase));
}
/* RASTER UND ECKWINKEL. Beides auf ::after -- ein drittes Element gibt
es nicht, und beides ist reine Optik ohne Klicks. */
/* MODULLISTE */
:is(.eintrag-karte, .call, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .k-ansicht, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .unterweisung, .warnkarte, .kachel, .willkommen, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu)::after {
content: "";
position: absolute; inset: 0;
pointer-events: none;
z-index: 0;
background:
linear-gradient(var(--ton, var(--akzent)), var(--ton, var(--akzent))) no-repeat,
linear-gradient(var(--ton, var(--akzent)), var(--ton, var(--akzent))) no-repeat,
var(--raster);
background-size: 18px 1.5px, 1.5px 18px, 26px 26px, 26px 26px;
background-position: right 10px bottom 10px, right 10px bottom 10px, 0 0, 0 0;
/* .3 war zu laut: Das Raster soll man nicht LESEN, sondern spueren.
Bei 26 px Abstand und einem Viertel Deckkraft bleibt der Eindruck
"Messgeraet", ohne dass die Linien mit dem Text konkurrieren. */
opacity: .26;
transform: none;
}
/* Der Inhalt gehört ÜBER Raster und Kantenlicht. Ohne diese Zeile
liegt bei Karten ohne eigenen Stapelwert der Text unter dem Raster
und wird von ihm überzeichnet. */
:is(.eintrag-karte, .call, .datei, .kachel, .willkommen, .leer-hinweis,
.team-karte, .zahl, .k-listentag, .person, .creator) > * {
position: relative;
z-index: 1;
}
/* Beim Anfassen kommt das Modul NÄHER, es leuchtet nicht auf. */
:is(.kachel, .datei, .pdf, .creator, .person, .kk, .call, .team-karte):hover {
transform: translateY(-3px);
box-shadow: none;
filter:
drop-shadow(0 4px 6px rgba(0, 0, 0, .6))
drop-shadow(0 20px 34px rgba(0, 0, 0, .6))
drop-shadow(0 0 14px color-mix(in srgb, var(--ton, var(--akzent)) 30%, transparent));
}
:is(.kachel, .datei, .pdf, .creator, .person, .kk, .call, .team-karte) {
transition: transform var(--tempo), filter var(--tempo);
}
@media (max-width: 620px) {
/* Dieselbe Form, kleiner -- keine zweite Gestaltung. */
:root { --fase: 12px; }
/* MODULLISTE */
:is(.eintrag-karte, .call, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .k-ansicht, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .unterweisung, .warnkarte, .kachel, .willkommen, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu) {
filter: drop-shadow(0 3px 8px rgba(0, 0, 0, .7));
}
}
@media (prefers-reduced-motion: reduce) {
:is(.kachel, .datei, .pdf, .creator, .person, .kk, .call, .team-karte):hover {
transform: none;
}
}
@media (forced-colors: active) {
/* Im Kontrastmodus zählt die Kante, und die muss ein echter `border`
sein. Die Schräge bleibt: Sie ist Geometrie, keine Farbe. */
/* MODULLISTE */
:is(.eintrag-karte, .call, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .k-ansicht, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .unterweisung, .warnkarte, .kachel, .willkommen, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu) {
filter: none; border: 1px solid CanvasText;
}
/* MODULLISTE */
:is(.eintrag-karte, .call, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .k-ansicht, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .unterweisung, .warnkarte, .kachel, .willkommen, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu)::after {
display: none;
}
/* MODULLISTE */
:is(.eintrag-karte, .call, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .k-ansicht, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .unterweisung, .warnkarte, .kachel, .willkommen, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu)::before {
display: none;
}
}
+49 -233
View File
@@ -845,37 +845,15 @@ body.start > main { position: relative; z-index: 1; }
/* Die farbige Kante links. Sie ist das Einzige, was den Ton kräftig
zeigt -- drei Pixel reichen, um eine Kachel wiederzuerkennen. */
.kachel::before {
content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
background: linear-gradient(180deg, var(--ton), transparent 92%);
opacity: .55;
transition: opacity var(--tempo), width var(--tempo);
}
/* Die Kacheln bekommen Form, Kante und Schatten seit dem 07.09.2026 aus
dem Abschnitt HUD-MODULE am Ende dieser Datei. Was hier stand -- die
Leuchtschiene oben, der wandernde Glanz und der eigene Schatten -- ist
dort vollstaendig ersetzt und war ab dann nur noch Ballast: Bytes auf
jeder Seite und, schlimmer, eine zweite Stelle, an der dieselbe Kachel
beschrieben wird. Wer etwas an der Form aendert, sucht ab jetzt unten.
/* Das Licht. Es liegt schwach auf der Kachel und FOLGT beim Überfahren
dem Zeiger -- das ist die Kleinigkeit, die man nicht sieht, sondern
erst beim Benutzen merkt. Kein Blinken, keine Bewegung des Inhalts:
Es wird nur an einer anderen Stelle heller.
Es bleibt nur, was der neue Abschnitt NICHT selbst setzt. */
Ruhend sitzt es in der oberen linken Ecke (--my: 0%), damit die
Kacheln auch ohne Zeiger von einer Seite beleuchtet wirken. */
.kachel::after {
content: ""; position: absolute; inset: 0; pointer-events: none;
background: radial-gradient(130% 150% at var(--mx) var(--my),
color-mix(in srgb, var(--ton) 20%, transparent), transparent 60%);
opacity: .38;
transition: opacity var(--tempo);
}
.kachel:hover {
border-color: color-mix(in srgb, var(--ton) 45%, var(--rand));
transform: translateY(-2px);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, .09),
0 10px 26px -14px color-mix(in srgb, var(--ton) 55%, transparent);
}
.kachel:hover::before { opacity: 1; width: 4px; }
.kachel:hover::after { opacity: 1; }
.kachel:has(:focus-visible) { border-color: var(--ton); }
.kachel__link {
@@ -3342,29 +3320,10 @@ body[data-fremde-sicht="ja"]::after {
0 10px 26px -18px rgba(0, 0, 0, .9),
0 2px 6px -4px rgba(0, 0, 0, .5);
}
.kachel::after {
content: "";
position: absolute; top: 0; left: 14%; right: 14%; height: 1px;
background: linear-gradient(90deg,
transparent,
color-mix(in srgb, var(--ton) 75%, #fff) 50%,
transparent);
opacity: .5;
pointer-events: none;
z-index: 2;
transition: opacity var(--tempo);
}
.kachel:hover {
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, .07),
0 18px 40px -20px rgba(0, 0, 0, .95),
0 3px 10px -5px color-mix(in srgb, var(--ton) 45%, transparent);
}
.kachel:hover::after { opacity: .95; }
@media (forced-colors: active) {
.kachel::after { display: none; }
}
/* Lichtkante, Hover-Schatten und Kontrastmodus der Kachel stehen seit
dem 07.09.2026 im Abschnitt HUD-MODULE am Ende dieser Datei. Was hier
stand, war die aelteste von drei Generationen und wurde von jeder
Seite geladen, ohne je zu wirken. */
/* ---------- Der Benachrichtigungs-Knopf ------------------------------
Wunsch Filipe (05.09.2026): ein Knopf wie "Benachrichtigungen aus",
@@ -4237,66 +4196,17 @@ body[data-fremde-sicht="ja"]::after {
/* =====================================================================
MODULKARTEN — die Kacheln werden ein Raster, keine Liste
(07.09.2026, dritter Anlauf)
MODULKARTEN — die Kacheln sind ein Raster, keine Liste (07.09.2026)
Filipe zum zweiten Anlauf: "sorry aber ich glaub du verstehst nicht
was ich meine, ich sag ja ich will eine komplette änderung von den
kacheln, viel übersichtlicher ... es soll ganz anders aussehen wie
jetzt."
Aus drei breiten Zeilen wurde ein Raster aus sechs Karten. Eine
breite Zeile zwingt das Auge, siebzehnmal von links nach rechts zu
LESEN; eine kompakte Karte erkennt man an Form und Zeichen -- das
Auge springt, statt zu wandern.
---------------------------------------------------------------------
ER HAT RECHT, UND ICH WEISS JETZT WARUM
Zweimal habe ich die OBERFLÄCHE geändert -- Mattglas, dann
Leuchtschiene -- und beide Male blieb die FORM gleich: eine breite
Zeile, Zeichen links, Text daneben, Pfeil rechts. Drei davon passen
nebeneinander, siebzehn ergeben sechs Reihen. Wer eine Zeile
umlackiert, bekommt eine lackierte Zeile.
Was sich ändern musste, ist die Form:
AUS DREI BREITEN ZEILEN WIRD EIN RASTER AUS SECHS KARTEN.
Das ist der eigentliche Punkt hinter "übersichtlicher". Eine breite
Zeile zwingt das Auge, von links nach rechts zu LESEN -- siebzehnmal.
Eine kompakte Karte erkennt man an ihrer Form und ihrem Zeichen,
ohne ein Wort zu lesen; das Auge springt statt zu wandern. Bei
1380 px passen jetzt sechs Karten nebeneinander statt drei: Der
ganze Arbeitsbereich steht auf einem Bildschirm, ohne zu scrollen.
---------------------------------------------------------------------
WAS SICH IM EINZELNEN ÄNDERT
FORM Hochformat statt Querformat. Zeichen oben, Name unten --
die Leserichtung eines Menschen, der etwas SUCHT (erst
das Bild, dann der Name), nicht eines, der liest.
SCHIENE Sie wandert von links nach OBEN. An einer hochkanten
Karte ist die lange Seite senkrecht; ein Lichtbalken
dort würde die Karte optisch halbieren. Oben liegt er
wie eine beschriftete Kante an einem Gerät.
ZEICHEN Größer und in einer eigenen, beleuchteten Mulde. Es ist
jetzt das erste, was man sieht, und trägt deshalb mehr
Gewicht als vorher.
ZAHL Nach oben rechts, als eigene Marke. Vorher stand sie in
derselben Zeile wie der Name und hat ihn gekürzt.
WASSER- Größer und weiter unten -- sie füllt jetzt die untere
ZEICHEN Hälfte der Karte und gibt jeder Kachel eine eigene
Silhouette. Bei sechs Karten nebeneinander ist genau das
der Unterschied zwischen "Raster" und "Sammlung".
GROSSE `data-gross="ja"` nimmt zwei Spalten und bekommt das
KACHEL Querformat von früher -- so hebt sie sich WIRKLICH ab,
statt nur breiter zu sein.
Material, Farben und Verhalten bleiben: beleuchtete Platte, Körnung,
Anheben statt Aufleuchten, jede Kategorie in ihrer Farbe. Das war
nicht das Problem.
===================================================================== */
Die SILHOUETTE dieser Karten (Schraege, Kantenlicht, Eckwinkel) steht
im Abschnitt HUD-MODULE am Ende der Datei. Hier steht nur noch, wie
der Inhalt darin angeordnet ist.
=====================================================================
.kacheln {
/* 214 px ist gemessen, nicht geraten: Bei 1380 px Inhaltsbreite und
@@ -4330,46 +4240,7 @@ body[data-fremde-sicht="ja"]::after {
rgba(8, 11, 18, .95) 100%);
}
/* DIE SCHIENE OBEN. Volle Breite, hell in der Mitte, zu den Ecken
auslaufend -- so sieht eine beleuchtete Kante aus, wenn die Lampe
dahinter mittig sitzt. Ein gleichmäßiger Balken sähe aufgeklebt aus. */
.kachel::before {
left: 0; right: 0; top: 0; bottom: auto;
width: auto; height: 3px;
border-radius: 16px 16px 0 0;
background: linear-gradient(90deg,
color-mix(in srgb, var(--ton) 30%, transparent) 0%,
color-mix(in srgb, var(--ton) 55%, #fff) 34%,
var(--ton) 62%,
color-mix(in srgb, var(--ton) 34%, transparent) 100%);
box-shadow:
0 0 9px 0 color-mix(in srgb, var(--ton) 45%, transparent),
0 3px 20px -3px color-mix(in srgb, var(--ton) 38%, transparent);
opacity: .85;
}
.kachel:hover::before {
opacity: 1;
box-shadow:
0 0 14px 0 color-mix(in srgb, var(--ton) 70%, transparent),
0 5px 32px -3px color-mix(in srgb, var(--ton) 55%, transparent);
}
/* Der Glanz zieht jetzt von oben links nach unten rechts -- an einer
hochkanten Fläche ist das die Richtung, in der Licht fällt. */
.kachel::after {
background:
linear-gradient(148deg,
transparent 24%,
rgba(255, 255, 255, .05) 38%,
rgba(255, 255, 255, .10) 46%,
rgba(255, 255, 255, .03) 54%,
transparent 70%),
radial-gradient(130% 120% at var(--mx) var(--my),
color-mix(in srgb, var(--ton) 24%, transparent), transparent 62%);
background-size: 100% 240%, 100% 100%;
background-position: 0 -30%, 0 0;
}
.kachel:hover::after { background-position: 0 130%, 0 0; }
/* Schiene und Glanz stehen jetzt im Abschnitt HUD-MODULE.
/* ---------- Der Aufbau der Karte ------------------------------------- */
.kachel__link {
@@ -4551,58 +4422,20 @@ body[data-fremde-sicht="ja"]::after {
/* =====================================================================
EIN MATERIAL FÜR DIE GANZE WEBSITE (07.09.2026)
EIN MATERIAL FUER DIE GANZE WEBSITE (07.09.2026)
Filipe: "ICH WILL DASS DU DIE KACHELN DER KOMPLETTEN WEBSITE KOMPLETT
VERÄNDERST ... SEHR HOCHWERTIG UND EPISCH ... EINE EINZIGARTIGE
WEBSITE ... PERFEKT AUF DEM PC UND AUF DEM HANDY."
Fuenfundvierzig Stellen benutzten `var(--flaeche)` als Kartenflaeche
-- Seite fuer Seite nachzuziehen war der Grund, warum es nie fertig
wurde. Die Liste unten ist deshalb GEMESSEN und nicht erfunden: Es
sind genau diese Klassen.
---------------------------------------------------------------------
WARUM DAS BISHER NICHT GEKLAPPT HAT
`:where()` hat Spezifitaet null -- die Regel legt nur den Boden und
ueberschreibt nichts, was eine Seite selbst festlegt. Eine Warnkarte
bleibt rot, eine Spalte behaelt ihre Statusfarbe.
Die Startseite hat seit heute ein Material -- beleuchtete Platte,
Lichtkante, Schatten, Körnung. Die anderen sechzehn Seiten hatten
weiterhin `background: var(--flaeche)` und einen Rand: flache
Rechtecke. Man wechselte die Seite und fiel aus einer Oberfläche in
eine andere.
Ich habe das bisher Seite für Seite nachgezogen -- und genau deshalb
war es nie fertig. Bei fünfundvierzig Stellen ist das kein Weg.
---------------------------------------------------------------------
EINE STELLE, NICHT FÜNFUNDVIERZIG
Die Liste unten ist nicht erfunden, sie ist GEMESSEN: Es sind genau
die Klassen, die in den siebzehn Stildateien `var(--flaeche)` als
Kartenfläche benutzen. Wer eine neue Karte baut und diesen Token
nimmt, gehört dazu -- und sollte hier eingetragen werden.
`:where()` ist der entscheidende Kniff: Es hat SPEZIFITÄT NULL.
Dadurch überschreibt diese Regel nichts, was eine Seite selbst
festlegt -- eine Warnkarte bleibt rot, eine Spalte behält ihre
Statusfarbe, die Kacheln der Startseite ihre eigene Form. Sie legt nur
den Boden, auf dem alle stehen. Ohne `:where()` müsste ich an
dreißig Stellen `!important` schreiben oder Reihenfolgen sortieren --
beides Wege, die beim nächsten Umbau kippen.
---------------------------------------------------------------------
WAS DAS MATERIAL AUSMACHT
GEWICHT Zwei Schatten: ein enger, dunkler direkt darunter und
ein weiter, weicher. Ein einzelner sieht immer nach
Aufkleber aus.
MATERIALSTÄRKE Licht oben, Schatten unten -- beide innen. Nur die
obere Kante ergibt einen aufgeklebten Strich; erst
beide zusammen ergeben ein Blech.
TIEFE Ein Verlauf von oben nach unten. Eine einfarbige
Fläche ist Papier.
KÖRNUNG Auf einer eigenen Ebene mit `overlay` und 3 % --
genau der Fehler, den ich heute zweimal gemacht habe:
Körnung auf derselben Ebene wie ein Glanz erbt dessen
Deckkraft und wird zum grauen Schleier.
AUF DEM HANDY DASSELBE MATERIAL, nur flacher: Schatten kosten dort
Rechenzeit und bringen wenig, weil ohnehin nichts nebeneinander liegt.
FORM, KANTE UND SCHATTEN kommen dagegen aus dem Abschnitt HUD-MODULE
am Ende der Datei -- mit voller Spezifitaet, weil sie die aelteren
Regeln ABLOESEN sollen und nicht unter ihnen liegen.
===================================================================== */
:where(
@@ -4645,40 +4478,8 @@ body[data-fremde-sicht="ja"]::after {
0 12px 28px -18px rgba(0, 0, 0, .85);
}
/* Die Körnung. Eigene Ebene, `overlay`, 3 % -- und `pointer-events:
none`, sonst läge eine unsichtbare Fläche über jedem Knopf in jeder
Karte der ganzen Website. */
:where(
.eintrag-karte, .call, .datei, .ablage, .zahlkarte, .regel, .zustand,
.ki-kasten, .k-ansicht, .spalte, .balance, .saeulen-kasten, .neu,
.call-raum, .creator, .summe, .pdf, .person, .kk, .unterweisung
)::after {
content: "";
position: absolute; inset: 0;
pointer-events: none;
border-radius: inherit;
background-image: var(--koernung);
background-size: 140px 140px;
opacity: .03;
mix-blend-mode: overlay;
z-index: 0;
}
/* Karten, die man anklickt, kommen beim Zeigen NÄHER -- sie werden
nicht heller. So verhält sich ein Gegenstand, den man anhebt, und
deshalb wirkt es echt, ohne dass etwas blinkt. */
:where(a, button):where(.datei, .pdf, .creator, .person, .kk, .call):hover,
:where(.datei, .pdf, .creator, .person, .kk):hover {
transform: translateY(-2px);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, .10),
inset 0 -1px 0 rgba(0, 0, 0, .42),
0 4px 9px -4px rgba(0, 0, 0, .55),
0 18px 36px -20px rgba(0, 0, 0, .9);
}
:where(.datei, .pdf, .creator, .person, .kk) {
transition: transform var(--tempo), box-shadow var(--tempo), border-color var(--tempo);
}
/* Körnung, Anheben und Schatten stehen im Abschnitt HUD-MODULE am
Ende dieser Datei. Hier bleibt nur die Fläche selbst. */
@media (max-width: 620px) {
/* Flacher auf dem Handy: Nebeneinander liegt dort ohnehin nichts, und
@@ -4713,3 +4514,18 @@ body[data-fremde-sicht="ja"]::after {
.call-raum, .creator, .summe, .pdf, .person, .kk, .unterweisung
)::after { display: none; }
}
/* Die FORM aller Module -- abgeschnittene Ecke, Kantenlicht, Eckwinkel,
Raster -- steht seit dem 07.09.2026 in einer eigenen Datei:
assets/css/module.css.
Zwei Gruende. Erstens war start.css ueber 200 KB gewachsen und lief in
die Grenze von pruef-struktur -- zu Recht, sie ist ueber Wochen aus
Anbauten entstanden. Zweitens ist die Silhouette eine EIGENE Sache:
Sie gilt fuer jede Karte auf jeder Seite, unabhaengig davon, was die
Seite sonst tut. Wer an der Form etwas aendert, soll eine Datei
oeffnen und nicht in einer von 4900 Zeilen suchen.
module.css wird von JEDER Seite geladen (anders als heim.css, das nur
die Startseite braucht). */
+24 -2
View File
@@ -744,8 +744,30 @@
const nurAnlegen = ich.rolle !== 'admin';
if (nurAnlegen) {
document.body.dataset.nurAnlegen = 'ja';
$('unterzeile') && ($('unterzeile').textContent =
'Hier legst du neue Leute an. Codes, Sperren und das Protokoll bleiben bei DogFather.');
/* DER ERKLÄRSATZ. Er stand hier schon, kam aber nie an: Ein
Element mit der Kennung `unterzeile` gab es auf der Seite
nicht, und das `&&` davor hat den Fehlgriff verschluckt.
Gemessen im Browser als Manager -- die Seite bestand aus
Überschrift und Formular, ohne ein Wort dazu, warum hier so
wenig steht. Jetzt gibt es das Element (personen.html), und
der Satz wird auch sichtbar gemacht. */
const zeile = $('unterzeile');
if (zeile) {
zeile.textContent =
'Hier legst du neue Leute an. Codes, Sperren und das Protokoll bleiben bei DogFather.';
zeile.hidden = false;
}
/* UND DIE LISTE HÖRT AUF ZU LADEN. Sie steht mit
aria-busy="true" in der Seite, und `laden()` -- das es wieder
abschaltet -- wird für sie mit Absicht nie aufgerufen. Damit
meldete die Seite einem Screenreader dauerhaft "wird geladen",
und es kam nie etwas. Ein Ladehinweis, der nie endet, ist
schlimmer als keiner. */
const liste = $('liste');
if (liste) {
liste.setAttribute('aria-busy', 'false');
liste.textContent = '';
}
baueRollenwahl();
/* Das Formular steht offen da -- es ist der einzige Grund, warum
diese Seite fuer sie ueberhaupt aufgeht. Ein Knopf, der eine
+9 -8
View File
@@ -9,9 +9,10 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -211,10 +212,10 @@
</form>
</dialog>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/aufgaben.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/aufgaben.js?v=202609070620" defer></script>
</body>
</html>
+10 -9
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/automation.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/automation.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -134,10 +135,10 @@
</main>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/automation.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/automation.js?v=202609070620" defer></script>
</body>
</html>
+14 -13
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -143,14 +144,14 @@
</main>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/checkliste.js?v=202609070539" defer></script>
<script src="assets/js/ampel.js?v=202609070539" defer></script>
<script src="assets/js/schulung.js?v=202609070539" defer></script>
<script src="assets/js/vorlagen.js?v=202609070539" defer></script>
<script src="assets/js/bereich.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/checkliste.js?v=202609070620" defer></script>
<script src="assets/js/ampel.js?v=202609070620" defer></script>
<script src="assets/js/schulung.js?v=202609070620" defer></script>
<script src="assets/js/vorlagen.js?v=202609070620" defer></script>
<script src="assets/js/bereich.js?v=202609070620" defer></script>
</body>
</html>
+11 -10
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/calls.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/calls.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -76,11 +77,11 @@
</main>
<script src="assets/js/ki.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/calls.js?v=202609070539" defer></script>
<script src="assets/js/ki.js?v=202609070620" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/calls.js?v=202609070620" defer></script>
</body>
</html>
+9 -8
View File
@@ -9,16 +9,17 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<!-- 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=202609070539" />
<link rel="stylesheet" href="assets/css/chat.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/chat.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -154,9 +155,9 @@
</form>
</dialog>
<script src="assets/js/bereiche.js?v=202609070539"></script>
<script src="assets/js/kopf.js?v=202609070539"></script>
<script src="assets/js/glocke.js?v=202609070539"></script>
<script src="assets/js/chat.js?v=202609070539"></script>
<script src="assets/js/bereiche.js?v=202609070620"></script>
<script src="assets/js/kopf.js?v=202609070620"></script>
<script src="assets/js/glocke.js?v=202609070620"></script>
<script src="assets/js/chat.js?v=202609070620"></script>
</body>
</html>
+12 -11
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/content.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/content.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -166,12 +167,12 @@
</main>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/checkliste.js?v=202609070539" defer></script>
<script src="assets/js/vorlagen.js?v=202609070539" defer></script>
<script src="assets/js/content.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/checkliste.js?v=202609070620" defer></script>
<script src="assets/js/vorlagen.js?v=202609070620" defer></script>
<script src="assets/js/content.js?v=202609070620" defer></script>
</body>
</html>
+10 -9
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/dateien.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/dateien.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -95,10 +96,10 @@
</main>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/dateien.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/dateien.js?v=202609070620" defer></script>
</body>
</html>
+2 -2
View File
@@ -27,7 +27,7 @@
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
</head>
<body class="gate">
@@ -202,6 +202,6 @@
</main>
</div>
<script src="assets/js/gate.js?v=202609070539" defer></script>
<script src="assets/js/gate.js?v=202609070620" defer></script>
</body>
</html>
+11 -10
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/kalender.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/kalender.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -257,11 +258,11 @@
</main>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/kalender.js?v=202609070539" defer></script>
<script src="assets/js/kalender-abo.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/kalender.js?v=202609070620" defer></script>
<script src="assets/js/kalender-abo.js?v=202609070620" defer></script>
</body>
</html>
+10 -9
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/leistung.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/leistung.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -211,10 +212,10 @@
</form>
</dialog>
<script src="assets/js/wahl.js?v=202609070539"></script>
<script src="assets/js/bereiche.js?v=202609070539"></script>
<script src="assets/js/kopf.js?v=202609070539"></script>
<script src="assets/js/glocke.js?v=202609070539"></script>
<script src="assets/js/leistung.js?v=202609070539"></script>
<script src="assets/js/wahl.js?v=202609070620"></script>
<script src="assets/js/bereiche.js?v=202609070620"></script>
<script src="assets/js/kopf.js?v=202609070620"></script>
<script src="assets/js/glocke.js?v=202609070620"></script>
<script src="assets/js/leistung.js?v=202609070620"></script>
</body>
</html>
+18 -9
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/personen.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/personen.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -54,6 +55,14 @@
<div>
<p class="marke">Zugänge</p>
<h1 class="titel">Personen &amp; Zugangscodes</h1>
<!-- Der Satz gilt nur für Manager und Spicy Media: Sie sehen hier
allein das Anlegen. personen.js blendet ihn dafür ein.
Er stand vorher nur im Skript (`$('unterzeile')`), und dieses
Element gab es nie -- der Aufruf war mit `&&` abgesichert und
tat deshalb schweigend nichts. Eine abgesicherte Zeile, die
ins Leere greift, sieht auf Dauer aus wie eine, die
funktioniert. -->
<p class="leise" id="unterzeile" hidden></p>
</div>
<div class="kopf-knoepfe">
<!-- Standardmäßig steht hier nur DogFather. Alle anderen kommen auf
@@ -128,10 +137,10 @@
</main>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/personen.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/personen.js?v=202609070620" defer></script>
</body>
</html>
+11 -10
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -201,11 +202,11 @@
</main>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/steckbrief.js?v=202609070539" defer></script>
<script src="assets/js/profil.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/steckbrief.js?v=202609070620" defer></script>
<script src="assets/js/profil.js?v=202609070620" defer></script>
</body>
</html>
+11 -10
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/report.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/report.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -93,11 +94,11 @@
</main>
<script src="assets/js/ki.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/report.js?v=202609070539" defer></script>
<script src="assets/js/ki.js?v=202609070620" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/report.js?v=202609070620" defer></script>
</body>
</html>
+10 -9
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/scouting.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/scouting.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -126,10 +127,10 @@
</div>
</div>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/scouting.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/scouting.js?v=202609070620" defer></script>
</body>
</html>
+9 -8
View File
@@ -9,11 +9,12 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<!-- 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=202609070539" />
<link rel="stylesheet" href="assets/css/heim.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -263,10 +264,10 @@
</p>
</main>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/start.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/start.js?v=202609070620" defer></script>
</body>
</html>
+11 -10
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -72,11 +73,11 @@
</main>
<script src="assets/js/ki.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/startcheck.js?v=202609070539" defer></script>
<script src="assets/js/ki.js?v=202609070620" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/startcheck.js?v=202609070620" defer></script>
</body>
</html>
+10 -9
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -113,10 +114,10 @@
</main>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/steckbrief.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/steckbrief.js?v=202609070620" defer></script>
</body>
</html>
+9 -8
View File
@@ -9,12 +9,13 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
Dialog "Creator anlegen". -->
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -136,10 +137,10 @@
</main>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/uebersicht.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/uebersicht.js?v=202609070620" defer></script>
</body>
</html>
+10 -9
View File
@@ -9,10 +9,11 @@
<meta name="theme-color" content="#0674b9" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/wissen.css?v=202609070539" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/start.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/wissen.css?v=202609070620" />
<link rel="stylesheet" href="assets/css/module.css?v=202609070620" />
</head>
<body class="start">
@@ -177,10 +178,10 @@
</main>
<script src="assets/js/wahl.js?v=202609070539" defer></script>
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
<script src="assets/js/kopf.js?v=202609070539" defer></script>
<script src="assets/js/glocke.js?v=202609070539" defer></script>
<script src="assets/js/wissen.js?v=202609070539" defer></script>
<script src="assets/js/wahl.js?v=202609070620" defer></script>
<script src="assets/js/bereiche.js?v=202609070620" defer></script>
<script src="assets/js/kopf.js?v=202609070620" defer></script>
<script src="assets/js/glocke.js?v=202609070620" defer></script>
<script src="assets/js/wissen.js?v=202609070620" defer></script>
</body>
</html>