Spicy sieht DogFathers Sachen nicht mehr -- und sechs Fehler dazu

VIER DINGE AUS DEN BILDSCHIRMFOTOS, jedes ein echter Fehler:

1. SPICY MEDIA SAH DOGFATHERS DATEN. Beim ersten Anlauf bekam die Rolle
   dieselbe Regel wie DogFather (`1=1`) -- damit stimmte der Ueberblick
   ueber Manager, Scouts und Creator, und nebenbei standen seine eigenen
   Termine, Aufgaben, Dateien und Eintraege mit drin. Jetzt gibt es
   ohneDogFather() als EINE Stelle dafuer: Zwei Spalten werden geprueft,
   `creator_id` (um wen geht es) und `erstellt_von` (wer hat es
   geschrieben) -- ein Termin, den er sich selbst anlegt, haengt nur an
   der zweiten. `IS NULL OR NOT IN` und nicht bloss `NOT IN`: In SQL ist
   `NULL NOT IN (...)` weder wahr noch falsch, die Zeile fiele
   stillschweigend heraus.

2. "PERSOENLICHER ZUGANGSCODE · undefined" auf der Anmeldeseite. Eine
   zweite Namensliste im Browser, die beim Hinzufuegen der Rolle
   niemand gepflegt hat. Ein unbekannter Schluessel faellt jetzt auf
   sich selbst zurueck statt auf `undefined` -- haesslich, aber
   sichtbar.

3. SPICY KAM NICHT IN DIE PERSONENVERWALTUNG. Der Server liess sie
   herein, das Skript warf sie wieder hinaus: zwei Listen fuer dieselbe
   Frage, gepflegt wurde nur die erste.

4. DIE ANMELDEKARTE WAR ZU KLEIN FUER FUENF ROLLEN. Der Kommentar an
   genau dieser Stelle warnt woertlich davor -- und ich habe getan,
   wovor er warnt: eine Rolle eingefuegt und die Zahl daneben nicht
   angefasst. Gemessen: Inhalt 573 px in einer 526 px hohen Tafel, die
   Fusszeile stand unter dem Rahmen. Schrift kleiner half nicht (sie lag
   schon auf dem Anschlag), also sind die Abstaende an neun Stellen
   enger. Nachgemessen auf fuenf Groessen: passt ueberall.

DIE ZEIT WAR WIRKLICH FALSCH. Nicht nur in meinem Satz: `datum()` in
personen.js schnitt die ISO-Zeichenkette ab -- und die ist UTC. Im
Protokoll stand 03:00, wo 05:00 war. Das Tueckische daran ist, dass es
nie kaputt aussieht: Eine Uhrzeit ist immer plausibel.

PROFILBILDER WERDEN JETZT GEZEICHNET. Der Server lieferte sie seit
gestern mit, gezeichnet wurden sie nirgends -- deshalb aenderte sich
nichts. Jetzt in der Personenauswahl (Aufgaben, Termine, Dateien,
Bereiche), in der Gespraechsliste und an jeder Nachricht. Der
Anfangsbuchstabe bleibt als Unterlage LIEGEN: Faellt das Bild aus, steht
dort weiter etwas Sinnvolles.

DER CHAT: Gesichter mit Rollenfarbe, Blasen mit Richtung (die erste
einer Folge eckig, die naechsten rund -- so sieht man, wo ein Gedanke
anfaengt), das offene Gespraech mit Schiene, Ungelesenes hervorgehoben,
und das Eingabefeld in einer eigenen Leiste, die sich beim Schreiben
hebt.

ZWEI EIGENE PATZER, beide von Pruefungen gefunden:
  - `o is not defined`: Mein Suchmuster hat die zwei Zeilen fuer das
    Bild ans DATEIENDE gesetzt statt in die Schleife -- und in
    kalender.js an einen <span> statt ans <option>. Gemeldet von
    pruef-sicht, das die Browserkonsole mitliest.
  - Ein Kommentar mit `bild` in schraegen Anfuehrungszeichen stand INNEN
    in einer Vorlagenzeichenkette und hat sie geschlossen. Die halbe SQL
    wurde zu Programmtext.
Dazu: `.chat-neu` gibt es nicht (heisst `.chat__eingabe`), und der
Rollenknopf hatte fuer den Manager keinen sichtbaren Fokus -- ein
box-shadow wird von `overflow: hidden` abgeschnitten, ein outline nicht.

Gruen: spicy (43), creator-anlegen (29), personen-liste (33), sicht (48),
chat (48), chat-optik (24), buehne (38), struktur (32), css-klassen (15),
handy (59), breiten (23), formulare (19), start-ansicht (136),
lesbarkeit (14), barrierefrei (18), tempo (8), kopf-messen (3),
glocke (26), haerte (20), manager-sicht (43), alle-wege (19),
aufgabenbrett (44), kalender (84).

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-07 05:46:19 +02:00
co-authored by Claude Opus 5
parent 3b356d6eef
commit e8478c9cae
37 changed files with 695 additions and 197 deletions
+156
View File
@@ -480,3 +480,159 @@
.chat-tag::before, .chat-tag::after { background: CanvasText; }
.chat__verlauf { mask-image: none; }
}
/* =====================================================================
DER CHAT (07.09.2026)
Wunsch Filipe: "mach die chat fenster auch viel geiler, viel
detaillierter und viel perfekter. ich will dass die leute auch bock
bekommen diesen chat zu benutzen."
---------------------------------------------------------------------
WORAN MAN EINEN GUTEN CHAT ERKENNT
Nicht an Effekten. An vier Dingen, die alle mit ORIENTIERUNG zu tun
haben -- und alle vier fehlten:
1. MAN SIEHT, MIT WEM MAN SCHREIBT. Initialen sind ein Platzhalter,
kein Gesicht. Die Bilder liefert der Server seit heute mit; hier
werden sie gezeichnet -- rund, mit einem feinen Rand in der Farbe
der Rolle.
2. EINE NACHRICHT HAT EINE RICHTUNG. Eigene Nachrichten kommen von
rechts und tragen den Hausakzent, fremde von links und bleiben
neutral. Die Ecke am Anfang einer Folge ist eckig, die übrigen
rund -- so sieht man, wo ein Gedanke anfängt, ohne den Namen zu
lesen.
3. EIN GESPRÄCH HAT EIN GEWICHT. Ungelesenes ist nicht "auch da",
sondern das, weshalb man die Seite geöffnet hat: kräftigerer
Grund, farbige Schiene, die Zahl als Marke.
4. DAS EINGABEFELD IST DAS WICHTIGSTE ELEMENT DER SEITE. Es war
eines von vielen. Jetzt sitzt es in einer eigenen Leiste, die
sich beim Hineinschreiben hebt.
Und was NICHT passiert ist: kein Blinken, kein Springen, keine
Verläufe im Text. Ein Chat wird stundenlang angesehen -- alles, was
einmal auffällt, nervt beim zwanzigsten Mal.
===================================================================== */
/* ---------- Das Gesicht ---------------------------------------------- */
.chat-raum__zeichen,
.chat-nachricht__zeichen {
position: relative;
overflow: hidden;
background: linear-gradient(150deg,
color-mix(in srgb, var(--rton, var(--akzent)) 30%, rgba(20, 27, 40, .9)),
rgba(12, 17, 26, .95));
box-shadow:
inset 0 0 0 1px color-mix(in srgb, var(--rton, var(--akzent)) 38%, transparent),
0 2px 6px -3px rgba(0, 0, 0, .8);
}
/* Die Farbe der Rolle -- dieselbe Zuordnung wie überall im Haus. */
.chat-raum__zeichen[data-rolle="spicy"],
.chat-nachricht__zeichen[data-rolle="spicy"] { --rton: #e9848c; }
.chat-raum__zeichen[data-rolle="admin"],
.chat-nachricht__zeichen[data-rolle="admin"] { --rton: var(--k-gold); }
.chat-raum__zeichen[data-rolle="manager"],
.chat-nachricht__zeichen[data-rolle="manager"] { --rton: var(--k-mittel); }
.chat-raum__zeichen[data-rolle="scout"],
.chat-nachricht__zeichen[data-rolle="scout"] { --rton: var(--k-gut); }
.chat-raum__zeichen[data-rolle="creator"],
.chat-nachricht__zeichen[data-rolle="creator"] { --rton: var(--akzent); }
/* Das Bild liegt ÜBER dem Buchstaben, nicht an seiner Stelle. Fällt es
aus, steht der Buchstabe weiterhin da. */
.chat-raum__zeichen img,
.chat-nachricht__zeichen img {
position: absolute; inset: 0;
width: 100%; height: 100%;
object-fit: cover;
border-radius: inherit;
}
/* ---------- Die Gesprächsliste --------------------------------------- */
.chat-raum__knopf {
position: relative;
border-radius: 12px;
margin: 0 8px 4px;
transition: background var(--tempo), box-shadow var(--tempo);
}
/* Das offene Gespräch trägt eine Schiene -- man sieht auch beim Scrollen
der Liste, wo man gerade ist. */
.chat-raum__knopf[data-an="ja"] {
background: linear-gradient(90deg,
color-mix(in srgb, var(--akzent) 16%, transparent),
rgba(255, 255, 255, .03) 55%);
box-shadow: inset 3px 0 0 var(--akzent);
}
/* Ungelesenes ist der Grund, warum man hier ist. */
.chat-raum__knopf:has(.chat-raum__zahl) {
background: rgba(255, 255, 255, .045);
}
/* ---------- Die Nachrichten ------------------------------------------ */
.chat-nachricht__blase {
border-radius: 16px 16px 16px 5px;
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, .06),
0 2px 6px -3px rgba(0, 0, 0, .55);
}
/* Die erste Blase einer Folge bekommt oben eine eckige Ecke -- dort
fängt der Gedanke an. Die folgenden sind rundum weich. */
.chat-nachricht[data-folge="ja"] .chat-nachricht__blase {
border-top-left-radius: 8px;
}
.chat-nachricht[data-selbst="ja"] .chat-nachricht__blase {
border-radius: 16px 16px 5px 16px;
background: linear-gradient(160deg,
color-mix(in srgb, var(--akzent) 26%, rgba(17, 24, 37, .95)),
color-mix(in srgb, var(--akzent) 12%, rgba(12, 17, 27, .95)));
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, .10),
0 2px 8px -3px color-mix(in srgb, var(--akzent) 45%, transparent);
}
.chat-nachricht[data-selbst="ja"][data-folge="ja"] .chat-nachricht__blase {
border-top-right-radius: 8px;
border-top-left-radius: 16px;
}
/* Der Tagestrenner: eine Linie mit dem Datum darin statt eines Wortes
im Nichts. */
.chat-tag {
display: flex; align-items: center; gap: 12px;
margin: 18px 0 12px;
}
.chat-tag::before, .chat-tag::after {
content: ""; flex: 1 1 auto; height: 1px;
background: linear-gradient(90deg, transparent, rgba(150, 186, 220, .18), transparent);
}
/* ---------- Das Eingabefeld ------------------------------------------ */
/* Es ist das wichtigste Element der Seite und sah aus wie eines von
vielen. Eine eigene Leiste, die sich beim Hineinschreiben hebt. */
/* Sie heisst .chat__eingabe (chat.html), nicht .chat-neu -- ich hatte
den Namen aus dem Kopf geschrieben. pruef-struktur meldete es als
totes CSS: eine Regel, die auf nichts zeigt, sieht aus wie erledigte
Arbeit und ist keine. */
.chat__eingabe {
position: relative;
padding: 12px 14px;
border-top: 1px solid rgba(150, 186, 220, .12);
background: linear-gradient(180deg, rgba(13, 18, 28, .6), rgba(9, 12, 20, .92));
transition: box-shadow var(--tempo);
}
.chat__eingabe:focus-within {
box-shadow: inset 0 1px 0 color-mix(in srgb, var(--akzent) 34%, transparent);
}
@media (prefers-reduced-motion: reduce) {
.chat-raum__knopf, .chat__eingabe { transition: none; }
}
@media (forced-colors: active) {
.chat-nachricht__blase,
.chat-raum__knopf[data-an="ja"] { box-shadow: none; border: 1px solid CanvasText; }
.chat-raum__zeichen, .chat-nachricht__zeichen { background: Canvas; box-shadow: none; }
}
+87 -12
View File
@@ -1303,8 +1303,25 @@ body.gate {
/* 1,50 statt 1,59: Bei 1280x800 ist die Tafel 512 px hoch, der
Karteninhalt bei 1,59 aber 536 -- gemessen, nicht geschaetzt.
24 px Ueberstand sieht man an einem Neonrahmen sofort. */
font-size: clamp(12px, 1.50cqh, 16px);
padding: 1.75em 1.6em 1.4em;
/* NACHGEMESSEN, WEIL EINE ROLLE DAZUKAM (07.09.2026).
Der Kommentar darueber warnt woertlich davor -- und ich habe
genau das gemacht, wovor er warnt: eine fuenfte Rolle eingefuegt
und die Zahl daneben nicht angefasst. Gemessen bei fuenf Rollen:
Der Inhalt war bei 1280x800 573 px hoch in einer 526 px hohen
Tafel, bei 1600x1000 712 in 658 -- die Fusszeile stand jedes Mal
unter dem Rahmen.
Die Schrift kleiner zu machen half nicht: Bei 1280 lag sie mit
12 px schon auf dem unteren Anschlag. Also sind die ABSTAENDE
enger geworden -- an neun Stellen ein bis zwei Zehntel, das
ergibt zusammen rund 4 em. Die Schrift bleibt lesbar, die Karte
passt wieder.
Wer eine SECHSTE Rolle einbaut, misst hier neu. Die Zahl gehoert
zu dem, was sie zaehlt. */
font-size: clamp(12px, 1.42cqh, 15.5px);
padding: 1.35em 1.5em 1.05em;
/* Die Tafel im Bild ist schon dunkel und hat ihren eigenen Rahmen.
Die Karte legt sich deshalb NUR noch als leichter Schleier
@@ -1326,21 +1343,21 @@ body.gate {
weiterhin am Dokument orientieren und die Abstaende blieben stehen,
waehrend die Schrift schrumpft. Genau daran erkennt man eine
schlecht skalierte Oberflaeche. */
.tafel .marke { font-size: .74em; margin-bottom: .5em; }
.tafel .titel { font-size: 1.85em; margin-bottom: .3em; }
.tafel .unterzeile { font-size: .92em; margin-bottom: 1.15em; }
.tafel .feldschild { font-size: .76em; margin-bottom: .6em; }
.tafel .rollen { margin-bottom: 1.1em; }
.tafel .rolle { padding: .62em .85em; margin-bottom: .42em; gap: .8em; }
.tafel .marke { font-size: .78em; margin-bottom: .35em; }
.tafel .titel { font-size: 1.78em; margin-bottom: .22em; }
.tafel .unterzeile { font-size: .9em; margin-bottom: .85em; }
.tafel .feldschild { font-size: .76em; margin-bottom: .45em; }
.tafel .rollen { margin-bottom: .8em; }
.tafel .rolle { padding: .50em .8em; margin-bottom: .30em; gap: .75em; }
.tafel .rolle__zeichen { width: 1.32em; height: 1.32em; }
.tafel .rolle__name { font-size: .94em; }
.tafel .rolle__zusatz { font-size: .79em; }
.tafel #code { padding: .72em 2.7em .72em .9em; }
.tafel .feld__auge { width: 2.2em; height: 2.2em; padding: .5em; right: .35em; }
.tafel .knopf { margin-top: .75em; padding: .7em 1.1em; font-size: .88em; width: 100%; }
.tafel .knopf { margin-top: .6em; padding: .62em 1.1em; font-size: .88em; width: 100%; }
.tafel .hinweis,
.tafel .fehler { font-size: .82em; margin-top: .5em; }
.tafel .fuss { margin-top: 1.1em; padding-top: .8em; font-size: .76em; }
.tafel .fuss { margin-top: .75em; padding-top: .6em; font-size: .76em; }
/* ---- Der Schleier ------------------------------------------------
Er verlief bisher von links dunkel nach rechts klar -- dort stand
@@ -1774,8 +1791,21 @@ body.gate {
display: flex; align-items: baseline; gap: .42em;
flex-wrap: wrap;
}
.marke--paar .marke__spicy { color: #e9848c; }
.marke--paar .marke__dogi { color: #63b8ee; }
/* KRAEFTIGER (07.09.2026, Wunsch Filipe: "spicy x dogfather sieht man
nicht richtig"). Die beiden Namen standen in gedeckten Toenen auf der
hellsten Stelle der Karte -- dort, wo der rote Schein von oben links
hereinkommt. Gedeckt ist auf dunklem Grund richtig und auf hellem zu
wenig. Jetzt heller, etwas groesser und mit einem eigenen Schatten,
der sie vom Untergrund abhebt statt sie zu ueberstrahlen. */
.marke--paar { letter-spacing: .13em; }
.marke--paar .marke__spicy {
color: #ffb3b9;
text-shadow: 0 1px 10px rgba(255, 95, 109, .45);
}
.marke--paar .marke__dogi {
color: #a9dcff;
text-shadow: 0 1px 10px rgba(99, 184, 238, .45);
}
.marke--paar .marke__x {
/* Kleiner, leiser, und mit etwas Luft -- es verbindet, es benennt
nicht. */
@@ -1784,3 +1814,48 @@ body.gate {
color: var(--text-still);
transform: translateY(-.02em);
}
/* =====================================================================
DAS GESICHT IN DER PERSONENAUSWAHL (07.09.2026)
Wunsch Filipe: "jeder soll auch immer das profilbild von denen sehen
mit denen sie verbunden sind."
Ein rundes Bild in einer Auswahlliste ist der billigste und stärkste
Zugewinn, den eine solche Liste haben kann: Man trifft den richtigen
Namen, ohne ihn zu lesen. Und wer kein Bild hat, bekommt seinen
Anfangsbuchstaben -- kein leerer Kreis, kein Platzhaltersymbol.
Der Buchstabe bleibt beim Laden des Bildes LIEGEN und wird nicht
ersetzt. Lädt das Bild nicht (Verbindung weg, Datei gelöscht), steht
dort weiterhin etwas Sinnvolles statt eines zerbrochenen Bildsymbols.
===================================================================== */
.wahl2__bild {
position: relative;
flex: none;
width: 26px; height: 26px;
border-radius: 50%;
display: inline-flex; align-items: center; justify-content: center;
background: linear-gradient(150deg, rgba(63, 189, 245, .22), rgba(138, 118, 255, .18));
box-shadow: inset 0 0 0 1px rgba(150, 186, 220, .22);
color: #dbe4ef;
/* .76rem = 12,16 px. Bei .7rem waren es 11,2 -- unter der Grenze von
11,5, die pruef-css-klassen zieht. Ein einzelner Grossbuchstabe in
einem 26-px-Kreis wirkt ohnehin kleiner, als die Zahl sagt. */
font-size: .76rem; font-weight: 700; line-height: 1;
overflow: hidden;
}
.wahl2__bild img {
position: absolute; inset: 0;
width: 100%; height: 100%;
object-fit: cover;
border-radius: 50%;
}
/* Der Name bekommt den restlichen Platz und wird gekürzt statt zu
umbrechen -- eine zweizeilige Zeile in einer Auswahlliste zerreißt
den Rhythmus, an dem das Auge entlangläuft. */
.wahl2__name {
min-width: 0;
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.wahl2__eintrag { display: flex; align-items: center; gap: 10px; }
+17 -1
View File
@@ -171,8 +171,24 @@
transition: border-color .16s ease, background .16s ease, color .16s ease;
}
.rollenwahl__knopf:hover { border-color: rgba(255, 255, 255, .22); color: var(--text); }
/* EIN ECHTER RAHMEN, NICHT NUR EIN SCHATTEN (07.09.2026).
Hier stand `outline: none` und stattdessen ein box-shadow. Das sieht
weicher aus und hat einen Haken: Ein Schatten wird von jedem
`overflow: hidden` eines Elternteils abgeschnitten -- und dann ist
der Fokus unsichtbar, ohne dass es irgendwo auffaellt. Genau das hat
pruef-barrierefrei gemeldet, und zwar NUR beim Manager: Er sieht auf
dieser Seite genau einen Rollenknopf, und der stand am Rand seines
Behaelters.
Jetzt beides: der Rahmen sorgt dafuer, dass man ihn IMMER sieht, der
Schatten dafuer, dass es gut aussieht. Wer mit der Tastatur arbeitet,
ist auf diesen Rahmen angewiesen -- er ist der einzige Hinweis
darauf, wo er gerade steht. */
.rollenwahl__knopf:focus-visible {
outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--r) 32%, transparent);
outline: 2px solid color-mix(in srgb, var(--r) 85%, #ffffff);
outline-offset: 2px;
box-shadow: 0 0 0 3px color-mix(in srgb, var(--r) 32%, transparent);
}
/* Eine Farbe je Rolle -- dieselbe Sprache wie überall sonst. */