Vorlagenbrett: was wartet, steht jetzt ganz oben -- quer ueber alle Kategorien

EIN LOCH, DAS ICH SELBST GEBAUT HABE
------------------------------------
Die Bewerbungen stehen an ihrer Karte, und das ist richtig: Man
entscheidet ueber eine bestimmte Aufgabe, und ihr Text ist die halbe
Auskunft.

Nur steht die Karte in EINER von vierzehn Kategorien. Bewirbt sich
Frida unter "Wachstum" und DogFather oeffnet wie immer
"Chat-Moderation", sieht er nichts -- die Bewerbung ist da, das Brett
ist offen, und trotzdem findet er sie nie.

Die Benachrichtigung von heute frueh hilft, aber sie ist ein Moment:
Wer sie wegwischt, hat keinen zweiten Weg mehr. Ein Brett, auf dem
etwas wartet, muss das selbst sagen koennen.

Jetzt steht ganz oben, ueber den Kategorie-Reitern: "Eine Bewerbung
wartet auf deine Antwort: Marina · Zehn Neue fragen, wie sie
hergefunden haben". Ein Tippen springt in die richtige Kategorie, zur
richtigen Karte, und hebt sie zwei Sekunden hervor.

DER SPRUNG STELLT AUCH DIE STUFE ZURUECK. Ohne das landet man in der
richtigen Kategorie und sieht trotzdem nichts, weil der Stufenfilter
die Karte gerade ausblendet -- eine Reise ins Nichts ist schlimmer als
kein Knopf.

ES DIENT BEIDEN SEITEN, und deshalb steht es nur einmal da: Wer
entscheidet, liest "wartet auf deine Antwort"; wer sich beworben hat,
liest "du hast dich beworben". Der Server schickt ohnehin jedem nur,
was ihn angeht.

UND WIEDER: ERST STAND DIE ABSICHT NUR IM KOMMENTAR
----------------------------------------------------
Im Kommentar stand "ES STEHT GANZ OBEN, ueber den Kategorie-Reitern".
Der Code haengte es darunter -- gesehen auf dem Bildschirmfoto, nicht
beim Lesen. Das ist heute das zweite Mal (nach "gleiche Mittel,
gleiche Staerke" bei den Handkarten). Ein Kommentar, der eine Absicht
beschreibt, erfuellt sie nicht; ich schreibe sie offenbar gern auf,
bevor ich sie baue.

VORHER GEMESSEN, NICHT VERMUTET
-------------------------------
Rundgang als Modi, 390 px, ueber alle 27 Kacheln der Startseite -- die
Liste aus den Kacheln GELESEN, nicht aufgeschrieben. Ergebnis: kein
Querscrollen, keine zu kleinen Ziele, kein Text auf Text, keine
Konsolenfehler. 27 von 27 sauber.

Dabei sah ich im Chat einen magentafarbenen Kasten ohne Beschriftung
und hielt ihn fuer kaputt. Nachgemessen mit echtem Finger
(hasTouch): 44x44-Knopf, 36x36-Farbprobe, quadratisch -- und am Laptop
30x30 / 22x22, ebenfalls quadratisch. Der schmale Balken entstand nur
in meinem Messaufbau (390 px OHNE Beruehrung), also in einer Lage, die
kein Geraet hat. Kein Fehler, und ich habe nichts "repariert", was
nicht kaputt war.

GEPRUEFT
--------
pruef-modi-katalog: 125 Pruefungen, 0 Fehler (vorher 116).

Gemessen wird genau der Fall, um den es geht: eine Bewerbung in einer
Kategorie, die gerade NICHT gewaehlt ist. Dazu der Sprung (landet auf
der richtigen Karte, und dort stehen Annehmen und Ablehnen), die
Daumengroesse (40 px) und der Wortlaut.

MIT GEGENPROBE, und die ist der Kern: Wartet nichts, steht auch nichts
da. Ohne sie bewiese alles darueber nur, dass das Band immer dasteht
-- und ein Hinweis, der immer da ist, wird ueberlesen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-23 11:32:25 +02:00
co-authored by Claude Opus 5
parent 1f2a4d335e
commit 036f30454c
42 changed files with 842 additions and 585 deletions
+76
View File
@@ -1036,9 +1036,85 @@
color: color-mix(in srgb, var(--akzent) 58%, #ffffff);
}
/* =====================================================================
WAS WARTET -- QUER ÜBER ALLE KATEGORIEN (23.09.2026)
Die Bewerbungen stehen an ihrer Karte, und die Karte steht in EINER
von vierzehn Kategorien. Ohne dieses Band sieht jemand, der eine
andere offen hat, gar nichts — das Brett ist offen, die Bewerbung
ist da, und trotzdem findet er sie nie.
ES STEHT GANZ OBEN, über den Kategorie-Reitern. Das ist die einzige
Stelle, an der es unabhängig davon steht, was gerade gewählt ist.
===================================================================== */
.vorlagenbrett__warten {
display: grid; gap: 8px;
margin: 0 0 14px;
padding: 12px 14px;
border: 1px solid color-mix(in srgb, var(--akzent) 42%, transparent);
border-radius: 12px;
background: linear-gradient(180deg,
color-mix(in srgb, var(--akzent) 12%, transparent),
transparent 70%),
rgba(4, 7, 12, .6);
}
.vorlagenbrett__warten-schild {
margin: 0;
font-size: .84rem; font-weight: 700;
color: color-mix(in srgb, var(--akzent) 62%, #ffffff);
}
.vorlagenbrett__warten-reihe {
display: flex; flex-wrap: wrap; gap: 8px;
}
.vorlagenbrett__warten-knopf {
display: inline-flex; align-items: baseline; gap: 7px;
/* 40 px hoch wie alles, was ein Daumen trifft. */
min-height: 40px;
padding: 6px 12px;
max-width: 100%;
border: 1px solid var(--rand);
border-radius: 999px;
background: rgba(255, 255, 255, .04);
color: var(--text);
font: inherit; font-size: .84rem;
text-align: left;
cursor: pointer;
}
.vorlagenbrett__warten-knopf:hover {
border-color: color-mix(in srgb, var(--akzent) 55%, transparent);
background: color-mix(in srgb, var(--akzent) 12%, transparent);
}
.vorlagenbrett__warten-knopf:focus-visible {
outline: 2px solid var(--akzent); outline-offset: 2px;
}
.vorlagenbrett__warten-wer { font-weight: 700; flex: none; }
/* Der Titel darf abgeschnitten werden, der Name nicht: Wer drei
Bitten untereinander sieht, unterscheidet sie am Namen. */
.vorlagenbrett__warten-was {
color: var(--text-leise);
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* ---- Die angesprungene Karte kurz hervorheben ----------------------
Wer auf einem Brett mit zwölf Karten landet, sucht sonst die, wegen
der er hergekommen ist. Zwei Sekunden reichen; ein dauerhaftes
Leuchten wäre beim nächsten Blick nur noch Zierde.
KEIN BLINKEN -- eine ruhige Kante, die wieder verschwindet. */
.vorlagenbrett__karte[data-hervor="ja"] {
border-color: var(--akzent);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--akzent) 22%, transparent);
transition: box-shadow var(--tempo, .2s) ease, border-color var(--tempo, .2s) ease;
}
@media (prefers-reduced-motion: reduce) {
.vorlagenbrett__karte[data-hervor="ja"] { transition: none; }
}
@media (forced-colors: active) {
.vorlagenbrett__karte[data-beworben="ja"] { border: 2px solid Highlight; }
.vorlagenbrett__bewerbungen { border-top: 1px solid CanvasText; }
.vorlagenbrett__warten { border: 1px solid CanvasText; }
.vorlagenbrett__karte[data-hervor="ja"] { border: 2px solid Highlight; }
}
/* ---- Wichtig ---------------------------------------------------------
+74
View File
@@ -1743,6 +1743,75 @@
koerper.id = 'vorlagenbrett-koerper';
ziel.append(koerper);
/* =====================================================================
WAS WARTET -- QUER ÜBER ALLE KATEGORIEN (23.09.2026)
=====================================================================
DAS HIER SCHLIESST EIN LOCH, das ich selbst gebaut habe. Die
Bewerbungen stehen an ihrer Karte, und das ist richtig: Man
entscheidet über eine bestimmte Aufgabe, und ihr Text ist die
halbe Auskunft.
Nur steht die Karte in EINER von vierzehn Kategorien. Bewirbt
sich Frida unter „Wachstum" und DogFather öffnet wie immer
„Chat-Moderation", sieht er nichts — die Bewerbung ist da, das
Brett ist offen, und trotzdem findet er sie nie.
Die Benachrichtigung hilft, aber sie ist ein Moment: Wer sie
wegwischt, hat keinen zweiten Weg mehr. Ein Brett, auf dem
etwas wartet, muss das selbst sagen können.
ES DIENT BEIDEN SEITEN, und deshalb steht es nur einmal hier:
Wer entscheidet, liest „wartet auf deine Antwort"; wer sich
beworben hat, liest „du hast dich beworben". Der Server schickt
ohnehin jedem nur, was ihn angeht (vorlagenBewerbungenFuer).
DER SPRUNG STELLT AUCH DIE STUFE ZURÜCK. Ohne das landet man in
der richtigen Kategorie und sieht trotzdem nichts, weil der
Stufenfilter die Karte gerade ausblendet — eine Reise ins
Nichts ist schlimmer als kein Knopf. */
if (bewerbungen.length) {
const band = el('div', 'vorlagenbrett__warten');
const fuerMich = darfEntscheidenV;
band.append(el('p', 'vorlagenbrett__warten-schild',
fuerMich
? (bewerbungen.length === 1
? 'Eine Bewerbung wartet auf deine Antwort:'
: `${bewerbungen.length} Bewerbungen warten auf deine Antwort:`)
: (bewerbungen.length === 1
? 'Du hast dich beworben — hier steht sie:'
: `Du hast dich ${bewerbungen.length}-mal beworben:`)));
const reihe = el('div', 'vorlagenbrett__warten-reihe');
for (const b2 of bewerbungen) {
const v2 = katalog.aufgaben.find((x) => x.schluessel === b2.vorlage);
const k2 = el('button', 'vorlagenbrett__warten-knopf');
k2.type = 'button';
/* WER UND WAS -- in dieser Reihenfolge. Bei drei Bitten
untereinander will man zuerst wissen, von wem. Steht man
selbst davor, ist der Name überflüssig: Man weiß, dass man
es war. */
if (fuerMich) k2.append(el('span', 'vorlagenbrett__warten-wer', b2.person_name));
k2.append(el('span', 'vorlagenbrett__warten-was', v2?.titel || b2.vorlage));
k2.addEventListener('click', () => {
if (v2) { kGruppe = v2.gruppe; kStufe = null; }
vorlagenbrettZeigen().then(() => {
const ziel = document.querySelector(
`.vorlagenbrett__karte[data-vorlage="${b2.vorlage}"]`);
if (!ziel) return;
ziel.scrollIntoView({ block: 'center', behavior: window.sanft?.() || 'auto' });
/* KURZ HERVORHEBEN. Wer auf einem Brett mit zwölf Karten
landet, sucht sonst die, wegen der er hergekommen ist. */
ziel.dataset.hervor = 'ja';
setTimeout(() => { delete ziel.dataset.hervor; }, 2400);
});
});
reihe.append(k2);
}
band.append(reihe);
koerper.append(band);
}
/* Die Etappen als Reihe -- mit der Zahl darin, damit man sieht, wo
etwas liegt, bevor man klickt. */
const reihe = el('div', 'stufenleiter');
@@ -1895,6 +1964,11 @@
const box = el('div', 'vorlagenbrett__liste');
for (const v of liste) {
const karte = el('div', 'vorlagenbrett__karte');
/* DIE KENNUNG AN DER KARTE, damit das Band oben sie
wiederfinden kann. Über den Titel zu suchen wäre die
naheliegende Abkürzung — und sie fällt um, sobald zwei
Vorlagen ähnlich heißen. */
karte.dataset.vorlage = v.schluessel;
const schon = schonDa.get(v.schluessel);
if (schon) karte.dataset.schon = 'ja';
karte.append(el('h3', 'vorlagenbrett__titel', v.titel));