Bearbeiten geht jetzt -- und zwei Bedienelemente, die keine Kacheln sind

DER SERVER LIESS DAS AENDERN DIE GANZE ZEIT ZU. IM TAGESFENSTER FEHLTE
DER KNOPF.

Filipe: "ich hab die gemacht und kann sie nicht bearbeiten." Dort
standen nur "erledigt" und "loeschen". Ein Recht ohne Knopf ist kein
Recht. Jetzt oeffnet "bearbeiten" dasselbe Formular, gefuellt -- ein
Formular, zwei Wege (POST oder PATCH), statt eines zweiten, das genauso
aussieht und beim naechsten Feld auseinanderlaeuft.

Die Wiederholung bleibt beim Bearbeiten aussen vor: Sie ist eine REGEL
und wird unter "Laeuft von allein" geaendert, nicht an einer ihrer
Auspraegungen. Wer das zulaesst, bekommt einen Termin, der aus der
Reihe faellt, ohne dass jemand weiss warum.

UND DIE REGEL DAZU IM SERVER

Filipe: "nur diese person selber." Bis hierher durfte JEDER aendern,
der den Termin ueberhaupt sah -- bei einem Termin mit mehreren
Beteiligten also alle. Jetzt: die Leitung und wer ihn eingetragen hat.
Dieselbe Regel wie beim Loeschen, die dort schon richtig stand.

AUSNAHME "erledigt": Ein Haken, dass ein Gespraech stattgefunden hat,
ist keine Aenderung am Termin, sondern eine Rueckmeldung dazu -- sonst
muesste jeder Beteiligte den Anleger bitten, den eigenen Call
abzuhaken.

Gemessen in pruef-teilnehmer, mit allen drei Faellen. Beim Bauen der
Pruefung ist mir ein Aufbaufehler unterlaufen (Bea statt Pat als
zweite Teilnehmerin -- Luna darf Bea gar nicht einladen), und die
Pruefung hat ihn korrekt als 404 statt 403 gemeldet. Der Fehler lag im
Aufbau, nicht im Code.

DER ANSICHTS-UMSCHALTER WAR VIER KACHELN

`.k-ansicht` stand in der Modulliste. Jeder der vier Knoepfe bekam
damit die volle Behandlung einer Kachel: Fase, Kantenlicht, Eckwinkel,
Raster. Auf 90 mal 32 Pixeln ist das kein Modul, sondern Gedraenge --
vier Fasen und sechzehn Eckwinkel nebeneinander.

Die Modulform ist fuer FLAECHEN gedacht, die etwas enthalten. Ein
Umschalter enthaelt nichts, er waehlt aus, und die richtige Form dafuer
ist die SCHIENE: eine vertiefte Bahn, in der ein erhabenes Stueck aus
gebuerstetem Metall sitzt. Man sieht auf einen Blick, dass die vier
zusammengehoeren und genau eines gewaehlt ist.

DIE GRUPPENKOEPFE AUF DER CALLS-SEITE

Vorher eine Textzeile mit Pfeil, und die Karten darunter begannen ohne
Uebergang -- aufgeklappt sah man nicht, wo eine Gruppe aufhoert. Jetzt
ist der Kopf ein Schalter mit Zustand, die Zahl ein gefasstes Schild,
und die Karten stehen aufgeklappt in einer eigenen vertieften Bahn mit
Farbschiene links.

14 Pruefungen gelaufen, alle gruen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-07 17:05:28 +02:00
co-authored by Claude Opus 5
parent dd1f561f3b
commit 09a0c17237
25 changed files with 449 additions and 223 deletions
+79 -9
View File
@@ -420,20 +420,74 @@
/* Der Kopf ist der Schalter -- <button>, also muessen die Vorgaben des
Browsers zurueck (eigene Schrift, Rand, zentrierter Text). */
/* =====================================================================
DIE GRUPPENKOEPFE SIND SCHALTER AN EINEM GERAET (07.09.2026)
Filipe: "das soll besser viel besser geregelt sein, weil wenn man die
aufmachst sieht das so beschissen aus, mach es im insgesamten viel
krasser besser und geiler."
Vorher war der Kopf eine Textzeile mit einem Pfeil daneben, und die
Karten darunter begannen ohne Uebergang. Aufgeklappt sah man deshalb
nicht, wo eine Gruppe aufhoert und die naechste anfaengt -- drei
Ueberschriften und dazwischen eine Wand.
Jetzt ist der Kopf ein SCHALTER mit Zustand:
ZU eine flache Leiste, dunkel
AUF die Leiste sitzt in einer Fassung, die Zahl wird zum
gefassten Schild, und die Karten darunter stehen in einer
eigenen, leicht vertieften Bahn mit einer Farbschiene
links -- man sieht auf einen Blick, was zu welcher
Gruppe gehoert
Die abgeschnittene Ecke oben links nimmt die Sprache der Module auf,
ohne dass der Kopf ein Modul waere: Er ist ein Bedienelement, und
deshalb hat er keine Eckwinkel und kein Raster. */
.call-brett .stufe__kopf {
appearance: none; -webkit-appearance: none;
width: 100%;
font: inherit; color: inherit; text-align: left;
border: 0; background: none; cursor: pointer;
display: flex; align-items: center; gap: 10px;
padding: 12px 2px;
border-radius: 10px;
transition: background var(--tempo);
border: 0; cursor: pointer;
display: flex; align-items: center; gap: 11px;
padding: 11px 14px 11px 15px;
border-radius: 0;
clip-path: polygon(11px 0, 100% 0, 100% 100%, 0 100%, 0 11px);
background:
linear-gradient(90deg,
color-mix(in srgb, var(--c, var(--akzent)) 22%, transparent) 0%,
transparent 42%),
linear-gradient(180deg, #101724, #0a0f18);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, .07),
0 1px 0 rgba(0, 0, 0, .6);
transition: background var(--tempo), box-shadow var(--tempo);
}
.call-brett .stufe__kopf:hover {
background:
linear-gradient(90deg,
color-mix(in srgb, var(--c, var(--akzent)) 30%, transparent) 0%,
transparent 46%),
linear-gradient(180deg, #141d2d, #0c121c);
}
.call-brett .stufe__kopf:hover { background: rgba(255, 255, 255, .04); }
.call-brett .stufe__kopf:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
.call-brett .stufe__titel { margin: 0; }
.call-brett .stufe__zahl { margin-left: auto; }
.call-brett .stufe__titel { margin: 0; color: var(--c, var(--akzent)); }
/* Die Zahl als gefasstes Schild -- dieselbe Bauart wie auf den Kacheln
und in der Tageskachel. Eine Oberflaeche, eine Sprache. */
.call-brett .stufe__zahl {
margin-left: auto;
min-width: 26px; padding: 2px 8px;
border-radius: 0;
clip-path: polygon(5px 0, 100% 0, 100% 100%, 0 100%, 0 5px);
color: var(--c, var(--akzent));
background:
linear-gradient(150deg, rgba(255, 255, 255, .12) 0%, transparent 52%),
linear-gradient(color-mix(in srgb, var(--c, var(--akzent)) 12%, #080d15),
color-mix(in srgb, var(--c, var(--akzent)) 5%, #080d15));
box-shadow: 0 0 0 1px rgba(190, 215, 245, .18);
}
.call-brett .gruppe__pfeil {
width: 16px; height: 16px; flex: none;
color: var(--text-still);
@@ -441,7 +495,23 @@
}
.call-brett .gruppe[data-zu="ja"] .gruppe__pfeil { transform: rotate(-90deg); }
.call-brett .gruppe[data-zu="ja"] { padding-bottom: 4px; }
.call-brett .gruppe__karten { margin-top: 0; }
/* AUFGEKLAPPT: die Karten stehen in einer eigenen Bahn. Das ist der
Teil, der gefehlt hat -- ohne ihn hoerte die Gruppe optisch beim
Kopf auf, und darunter lagen einfach Karten im Nichts. */
.call-brett .gruppe:not([data-zu="ja"]) .gruppe__karten {
margin-top: 0;
padding: 12px 12px 12px 14px;
background:
linear-gradient(90deg,
color-mix(in srgb, var(--c, var(--akzent)) 10%, transparent) 0 3px,
transparent 3px),
linear-gradient(180deg, rgba(255, 255, 255, .022), rgba(255, 255, 255, .006));
box-shadow:
inset 0 1px 0 rgba(0, 0, 0, .5),
inset 3px 0 0 -1px color-mix(in srgb, var(--c, var(--akzent)) 55%, transparent);
}
/* Die Karten stehen jetzt IN einer Tafel -- sie brauchen keine zweite
schwere Flaeche, sonst liegt Kasten in Kasten. Leichter Grund, gleiche
Schiene. */