Files
dogfather-universe/workspace/assets/css/team.css
T
DogFatherGitandClaude Opus 5 449fe35c0a Der Eingang: Mitglieder-Kachel, drei Stufen -- und lesbar statt leer
Zwei Auftraege in einem Zug: "mach weiter" (Blueprint Kapitel 4/4.1)
und, zum Bildschirmfoto der Seite, "das muss viel krasser sein".

KAPITEL 4 -- DIE MITGLIEDER-KACHEL
Der Blueprint nennt: "Name & Foto · Rolle(n)/Kategorie(n) · Status
(aktiv/pausiert) · Anzahl offener Aufgaben · Datum 'Modi seit' ·
Schnellaktionen". Name, Foto und Zahlen standen schon; Status, "dabei
seit", Stufe und ein Knopf zum Schreiben kommen dazu.

KAPITEL 4.1 -- DIE DREI STUFEN
Probe, Standard, Senior. Sie sind eine ARBEITSEINTEILUNG, keine
Rechtegrenze -- was ein Modi darf, haengt an der Rolle; die Stufe sagt,
wo er im Team steht. Gesetzt werden sie nur von DogFather: Der
Blueprint gibt der rechten Hand den gleichen UEBERBLICK, aber
"Verwaltungsrechte optional durch Owner freischaltbar", also aus.
NULL heisst "Probe" und nicht "unbekannt" -- ein dritter Zustand waere
eine Frage, die niemand beantworten kann.

ZWEI ECHTE FEHLER, BEIDE VON DER NEUEN PRUEFUNG GEFUNDEN

1. PAUSIERTE VERSCHWANDEN KOMPLETT. In der Abfrage stand `AND aktiv =
   1`. Wer jemanden pausierte, bei dem verschwand er samt seiner
   OFFENEN RUECKMELDUNGEN aus dem Eingang -- die warteten weiter auf
   eine Antwort, nur sah sie niemand mehr.

2. DER EINGANG HAETTE AUF FRISCHER ANLAGE 503 GELIEFERT. Die
   Checklisten-Tabellen entstehen beim ersten Aufruf einer Checkliste;
   diese Seite liest sie aber auch. Wer sie oeffnete, bevor je jemand
   eine Checkliste angesehen hatte, bekam einen Fehler ohne Erklaerung
   -- auf einer neuen Anlage also beim allerersten Blick. Das Schema
   hat jetzt einen Besitzer, der es herausgibt; ein zweites CREATE
   TABLE waere der Anfang von zwei Schemata gewesen.

"VIEL KRASSER" -- UND ZWAR MIT INFORMATION, NICHT MIT LAERM

  * ZWEI REIHEN STATT EINER. Alle fuenf Kaesten lagen in EINEM Raster
    mit 150 px Mindestbreite: Im Bildschirmfoto stand "Community 12
    von" -- abgeschnitten mitten in der Zahl -- und die laengste Liste
    machte die ganze Reihe so hoch wie sich selbst. Jetzt oben, was
    eine Antwort braucht, darunter das Team; 300 px Mindestbreite.
  * DIE KARTE WAR FAHL, und das war ein Fehler: `--r` fiel auf ein
    helles Grau zurueck, aus dem das Kantenlicht einen Nebel ueber die
    ganze Karte legte. Sie traegt jetzt die Farbe der Stufe -- kein
    Nebel, und man sieht am Rand, wer wo steht.
  * SECHS ZAHLENKAESTEN WURDEN DREI BALKEN. "40 offen" beantwortet
    nicht, wie weit man ist: 40 von 40 ist etwas anderes als 40 von
    100. Gruen (in Ordnung) und Bernstein (zu besprechen) fuellen den
    Balken; die ganze Zeile ist der Weg dorthin.
  * DIE DREI ZAHLEN DER SEITE stehen oben als Zahlen statt in einem
    Satz. Die Warnfarbe erscheint NUR, wenn wirklich etwas wartet --
    eine Null in Bernstein waere ein Alarm ohne Anlass, und ab dem
    dritten Mal sieht man ihn nicht mehr.

GEMESSEN
pruef-team-stufen (neu)  24, mit Gegenprobe: hoch- und zurueckstufen,
                         und dieselbe Stufe zweimal zu setzen darf
                         keine zweite Protokollzeile erzeugen
pruef-rollen            274   pruef-modi-checkliste  59
pruef-zwischenspeicher   21
Ansicht: Rechner 1440 und Handy 412 -- keine Skriptfehler, nichts
ragt seitlich heraus (0 px).

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-10 16:27:44 +02:00

567 lines
22 KiB
CSS

/* =====================================================================
team.css — die Arbeitslage von Managern und Scouts.
Wunsch Filipe, 09.09.2026: "so eine kategorie wie über die creator
will ich dass nur für die spicy und dogfather rolle auch über manager
und scouts gibt ... ich will dass es so ultra krass gut ist."
DIE GESTALTUNG FOLGT EINER ENTSCHEIDUNG, NICHT EINEM GESCHMACK:
Diese Seite zeigt Zahlen über Kollegen. Sie darf deshalb NICHT
aussehen wie ein Cockpit mit Warnleuchten. Rot gibt es genau dort,
wo etwas liegengeblieben ist -- und sonst nirgends. Alles andere ist
ruhig, damit die wenigen roten Stellen auch etwas heißen.
===================================================================== */
/* =====================================================================
DER KOPF IST EINE KACHEL, IM TON DER KATEGORIE (09.09.2026)
Filipe: "perfektionnir das in einer kachel in der farbe von der
kategorie bitte."
`.t-kachel` steht in der Modulliste von module.css und bekommt damit
die Form des Hauses: gefraeste Fase, Kantenlicht, Eckwinkel, Raster.
Sie braucht hier nur noch zweierlei -- eine FLAECHE (die Modulliste
gibt nur die Fassung, den Grund bringt jedes Bauteil selbst mit) und
den TON.
DER TON IST NICHT ABGESCHRIEBEN. Die Kachel traegt `data-ton="22"`,
und die Regel dazu steht in start.css -- dieselbe, aus der die
Kachel auf der Startseite ihre Farbe zieht. Es gibt damit weiterhin
genau EINE Stelle, an der die Farbe dieser Kategorie steht; wer sie
dort aendert, aendert beides. Eine zweite Hexzahl hier waere die
naechste, die auseinanderlaeuft.
===================================================================== */
.t-kachel {
margin: 0 0 18px;
padding: 20px 22px;
background:
var(--raster),
linear-gradient(150deg,
color-mix(in srgb, var(--ton) 13%, transparent),
transparent 46%),
linear-gradient(178deg, rgba(9, 13, 20, .955), rgba(4, 7, 12, .985));
}
/* ---------- Der Kopf --------------------------------------------------- */
.t-kopf {
display: flex; align-items: flex-start; justify-content: space-between;
gap: 20px; flex-wrap: wrap;
}
.t-kopf__titel {
margin: 4px 0 6px;
font-size: clamp(1.5rem, 3.4vw, 2.1rem); font-weight: 700;
color: var(--text);
letter-spacing: -.01em;
}
.t-kopf__unter { margin: 0; font-size: .96rem; color: var(--text-leise); }
/* Der Satz über die Grenzen steht in einem eigenen Kasten und nicht als
Fußnote. Er ist die wichtigste Zeile der Seite: Ohne ihn wird eine
Arbeitslage als Überwachung gelesen -- und dann arbeitet niemand mehr
offen damit. */
.t-kopf__grenze {
flex: 1 1 300px; max-width: 44ch;
margin: 0; padding: 12px 15px;
/* Im Ton der Kategorie und nicht mehr in Gruen: In einer Kachel, die
schon eine Farbe hat, ist eine zweite Farbe daneben eine zweite
Aussage -- und dieser Kasten sagt dasselbe wie die Kachel, nur
genauer. */
border-left: 3px solid color-mix(in srgb, var(--ton) 60%, transparent);
border-radius: 0 10px 10px 0;
background:
linear-gradient(color-mix(in srgb, var(--ton) 9%, transparent),
color-mix(in srgb, var(--ton) 9%, transparent)),
rgba(7, 10, 17, .8);
font-size: .87rem; line-height: 1.55; color: var(--text-leise);
}
.t-kopf__grenze strong { color: var(--text); }
/* ---------- Die Lücken ------------------------------------------------- */
.t-luecken {
display: grid; gap: 12px;
grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr));
margin: 0 0 18px;
}
/* EINE UNDURCHSICHTIGE FLAECHE, KEIN SCHLEIER.
Die Lektion vom Vorlagenbrett heute Mittag, hier gleich mitgenommen:
Eine Karte mit 7 Prozent Farbe auf transparentem Grund laesst das
Buehnenfoto durchscheinen -- und dann haengt die Lesbarkeit davon ab,
ob hinter dem Text gerade eine helle oder eine dunkle Stelle liegt.
Dort hat es 3,61:1 ergeben, wo 4,5 noetig sind.
Deshalb hier von vornherein ein eigener, deckender Grund. Der rote
Ton liegt darauf, nicht darin. */
.tl {
/* Auch eine Kachel -- mit dem Warnton als --ton, damit Kantenlicht
und Eckwinkel rot leuchten. Der Grund bleibt DECKEND: Die Lektion
vom Vorlagenbrett gilt weiter, eine Karte mit sieben Prozent Farbe
auf durchsichtigem Grund laesst das Buehnenfoto durch. */
--ton: #ff9aa2;
padding: 16px 18px;
background:
var(--raster),
linear-gradient(150deg, rgba(255, 154, 162, .11), transparent 50%),
rgba(7, 10, 17, .95);
}
.tl__titel {
margin: 0 0 4px; font-size: .98rem; font-weight: 700;
color: color-mix(in srgb, var(--warn, #ff9aa2) 78%, #ffffff);
}
.tl__satz { margin: 0 0 8px; font-size: .84rem; color: var(--text-leise); line-height: 1.5; }
.tl__namen {
margin: 0; font-size: .86rem; color: var(--text); line-height: 1.6;
overflow-wrap: anywhere;
}
/* Keine Lücke ist auch eine Auskunft -- und dann grün statt rot. */
.tl[data-gut="ja"] {
--ton: var(--scout-haupt);
background:
var(--raster),
linear-gradient(150deg, rgba(95, 201, 154, .11), transparent 50%),
rgba(7, 10, 17, .95);
}
.tl[data-gut="ja"] .tl__titel { color: var(--scout-haupt); }
/* ---------- Die Lage in Zahlen ----------------------------------------- */
.t-lage {
display: grid; gap: 10px;
grid-template-columns: repeat(auto-fit, minmax(min(150px, 100%), 1fr));
margin: 0 0 22px;
}
/* ---------- Eine Kennzahl ---------------------------------------------- */
/* Die Kennzahlen bleiben SCHLICHT -- und das ist eine Entscheidung.
Sie stehen zu acht in einer Karte; jede davon mit Fase, Kantenlicht
und Eckwinkel waere ein Schaufenster voller Rahmen und keine
Auskunft mehr. Eine Kachel in der Kachel in der Kachel liest
niemand.
Was sie bekommen: eine abgeschnittene Ecke aus derselben Formel wie
die Kacheln (clip-path mit --fase), damit sie erkennbar zur selben
Familie gehoeren -- nur eben als Beschlagteil, nicht als Kachel. */
.tz {
display: grid; gap: 2px; align-content: start;
padding: 11px 13px;
border: 1px solid var(--rand);
border-radius: 0;
clip-path: polygon(9px 0, 100% 0, 100% 100%, 0 100%, 0 9px);
/* Deckend -- eine Kennzahl auf einem Foto ist keine Kennzahl,
sondern ein Ratespiel. */
background:
linear-gradient(rgba(255, 255, 255, .034), rgba(255, 255, 255, .034)),
rgba(9, 12, 19, .92);
}
.tz__wert {
font-size: 1.28rem; font-weight: 700; color: var(--text);
font-variant-numeric: tabular-nums; line-height: 1.15;
}
.tz__schild {
font-size: .74rem; color: var(--text-leise); line-height: 1.35;
}
/* Rot NUR, wo etwas liegengeblieben ist. */
.tz[data-art="warn"] {
border-color: color-mix(in srgb, var(--warn, #ff9aa2) 45%, transparent);
/* Auch hier deckend. Diese Zeile stand zuerst mit einem einzelnen
rgba-Wert da und hat damit den undurchsichtigen Grund von oben
wieder aufgehoben -- ausgerechnet an den Karten, auf die es
ankommt. Zwei Regeln fuer denselben Grund, und die spaetere
gewinnt: derselbe Fehler wie so oft in diesem Haus. */
background:
linear-gradient(rgba(255, 154, 162, .09), rgba(255, 154, 162, .09)),
rgba(7, 10, 17, .9);
}
.tz[data-art="warn"] .tz__wert { color: color-mix(in srgb, var(--warn, #ff9aa2) 72%, #ffffff); }
/* Und grün, wenn eine Null eine gute Nachricht ist -- eine Null ohne
Farbe liest sich wie ein fehlender Wert. */
.tz[data-art="gut"] { border-color: color-mix(in srgb, var(--scout-haupt) 30%, transparent); }
.tz[data-art="gut"] .tz__wert { color: var(--scout-haupt); }
/* ---------- Die Leute --------------------------------------------------- */
.t-gruppe { margin: 0 0 26px; }
.t-gruppe .feldschild { margin: 0 0 10px; }
.t-liste {
display: grid; gap: 14px;
grid-template-columns: repeat(auto-fit, minmax(min(420px, 100%), 1fr));
}
/* =====================================================================
DIE KARTEN UNTEN SIND JETZT AUCH KACHELN (09.09.2026)
Filipe: "und die kacheln unten in der seite auch perfektionnieren und
geil machen bitte."
Sie waren abgerundete Rechtecke mit einem Streifen links -- richtig,
aber eben nicht die Sprache dieses Hauses. `.tperson` und `.tl`
stehen jetzt in der Modulliste und bekommen damit Fase, Kantenlicht,
Eckwinkel und Raster wie jede andere Kachel.
DIE FARBE KOMMT AUS DER ROLLE, und zwar ueber `--ton`. Das ist die
Variable, aus der module.css das Kantenlicht und die Eckwinkel
zieht. Ein Manager-Kasten leuchtet damit lila, ein Scout-Kasten
gruen -- ohne dass hier eine einzige Farbe ausgeschrieben stehen
muss.
DER STREIFEN IST WEG, und das ist kein Verlust: module.css belegt
::before und ::after selbst (Kantenlicht und Eckwinkel) und laedt
NACH dieser Datei -- ein eigenes ::after waere wirkungslos gewesen.
Das Kantenlicht traegt die Rollenfarbe jetzt ohnehin, und zwar rund
um die ganze Karte statt auf drei Pixeln links. */
.tperson {
--r: var(--text-still);
--ton: var(--r);
position: relative;
padding: 17px 19px 19px;
background:
var(--raster),
linear-gradient(155deg,
color-mix(in srgb, var(--r) 11%, transparent),
transparent 52%),
linear-gradient(178deg, rgba(10, 14, 22, .95), rgba(5, 8, 14, .98));
}
.tperson[data-rolle="manager"] { --r: var(--manager-haupt); }
.tperson[data-rolle="scout"] { --r: var(--scout-haupt); }
.tperson[data-gesperrt="ja"] { opacity: .6; }
.tperson__kopf {
display: flex; align-items: center; gap: 12px;
margin-bottom: 14px; flex-wrap: wrap;
}
.tperson__bild {
width: 44px; height: 44px; border-radius: 50%; object-fit: cover;
border: 1px solid color-mix(in srgb, var(--r) 40%, transparent);
flex: none;
}
.tperson__zeichen {
width: 44px; height: 44px; border-radius: 50%;
display: grid; place-items: center; flex: none;
font-size: 1.05rem; font-weight: 700;
color: color-mix(in srgb, var(--r) 75%, #ffffff);
background: color-mix(in srgb, var(--r) 16%, #070a11);
border: 1px solid color-mix(in srgb, var(--r) 34%, transparent);
}
.tperson__text { flex: 1; min-width: 0; }
/* LANGE NAMEN BRECHEN UM, statt abgeschnitten zu werden.
"Patrick-Maximilian" braucht 90 px, bei 320 px Bildschirm stehen 56
zur Verfuegung -- gemeldet von pruef-handy. Ein Name, den man nicht
lesen kann, ist auf einer Seite ueber Personen der schlechteste
Platz zum Sparen. */
.tperson__name {
margin: 0; font-size: 1.06rem; font-weight: 650; color: var(--text);
overflow-wrap: anywhere; hyphens: auto;
}
.tperson__unter {
margin: 2px 0 0; font-size: .82rem; color: var(--text-leise); line-height: 1.45;
overflow-wrap: anywhere;
}
.tperson__zuletzt {
flex: none;
padding: 4px 10px; border-radius: 999px;
font-size: .74rem; font-weight: 600;
color: var(--text-leise);
background: rgba(255, 255, 255, .05);
border: 1px solid var(--rand);
}
.tperson__zuletzt[data-warn="ja"] {
color: color-mix(in srgb, var(--warn, #ff9aa2) 72%, #ffffff);
border-color: color-mix(in srgb, var(--warn, #ff9aa2) 40%, transparent);
background: rgba(255, 154, 162, .1);
}
.tperson__zahlen {
display: grid; gap: 8px;
grid-template-columns: repeat(auto-fit, minmax(min(130px, 100%), 1fr));
}
/* ---------- Die Pipeline ------------------------------------------------ */
.tpipe {
margin-top: 14px; padding-top: 13px;
border-top: 1px solid var(--rand);
}
.tpipe__schild {
margin: 0 0 8px;
font-size: .72rem; font-weight: 700; letter-spacing: .1em;
text-transform: uppercase; color: var(--text-still);
}
.tpipe__reihe {
display: grid; gap: 8px;
grid-template-columns: repeat(auto-fit, minmax(min(120px, 100%), 1fr));
}
/* ---------- Wen genau --------------------------------------------------- */
.tperson__wer { margin-top: 12px; }
.tperson__wer summary {
cursor: pointer; font-size: .82rem; color: var(--text-leise);
padding: 4px 0;
}
.tperson__wer summary:hover { color: var(--text); }
.tperson__wer summary:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
.tperson__namen {
margin: 6px 0 0; font-size: .84rem; color: var(--text-leise); line-height: 1.65;
}
@media (max-width: 620px) {
.t-kopf { flex-direction: column; gap: 14px; }
/* `flex: 1 1 300px` ist am Rechner richtig -- dort ist die Hauptachse
WAAGERECHT und der Kasten teilt sich die Breite mit dem Titel.
In einer Spalte ist die Hauptachse aber SENKRECHT, und derselbe
Wert laesst ihn in die HOEHE wachsen: Auf dem Bildschirmfoto stand
danach die halbe Kachel leer.
Ein Flexwert gilt fuer eine Richtung, nicht fuer ein Element. Wer
die Richtung dreht, muss ihn mitdrehen. */
.t-kopf__grenze { flex: 0 0 auto; max-width: none; }
.tperson { padding: 14px 15px 16px; }
}
@media (forced-colors: active) {
.tz, .tl, .tperson { border: 1px solid CanvasText; }
.tperson::after { background: CanvasText; }
}
/* =======================================================================
DIE MITGLIEDER-KACHEL AUS KAPITEL 4 (10.09.2026)
Der Blueprint verlangt dort neben Name, Foto und Zahlen auch Status
(aktiv/pausiert), das Datum "dabei seit" und -- nach 4.1 -- die
Stufe. Drei kurze Angaben, die zusammen in eine Zeile gehoeren:
Einzeln untereinander waeren sie drei Zeilen fuer neun Woerter.
ALLE DREI IM SELBEN GEWAND wie `tperson__zuletzt` daneben (Pille,
999px, .74rem). Ein zweites Gewand fuer dieselbe Sorte Angabe waere
der Anfang davon, dass die Karte nach Baustelle aussieht.
==================================================================== */
.tperson__merkmale {
display: flex; flex-wrap: wrap; gap: 6px;
margin-top: 10px;
}
.tmerkmal {
padding: 4px 10px; border-radius: 999px;
font-size: .74rem; font-weight: 600;
color: var(--text-leise);
background: rgba(255, 255, 255, .05);
border: 1px solid var(--rand);
}
/* "dabei seit" ist die leiseste der drei -- sie beantwortet keine
Frage, sie gibt nur Zusammenhang. */
.tmerkmal--leise { opacity: .78; }
/* PAUSIERT FAELLT AUF, aber warm und nicht alarmierend: Eine Pause ist
kein Fehler. Derselbe Ton wie die Warnung daneben, nur ruhiger --
sonst liest man "pausiert" als "kaputt". */
.tmerkmal--pause {
color: color-mix(in srgb, var(--warn, #ff9aa2) 70%, #ffffff);
border-color: color-mix(in srgb, var(--warn, #ff9aa2) 38%, transparent);
background: rgba(255, 154, 162, .1);
}
/* DIE DREI STUFEN steigern sich sichtbar, ohne dass eine davon nach
Rang aussieht: gleiche Form, nur mehr Farbe. Probe bleibt bewusst
das ruhigste Schild -- wer neu ist, soll nicht markiert wirken. */
.tmerkmal--probe {
color: color-mix(in srgb, #9fb6c6 82%, #ffffff);
border-color: rgba(159, 182, 198, .3);
background: rgba(159, 182, 198, .08);
}
.tmerkmal--standard {
color: color-mix(in srgb, #7fc4e8 82%, #ffffff);
border-color: rgba(127, 196, 232, .34);
background: rgba(127, 196, 232, .1);
}
.tmerkmal--senior {
color: color-mix(in srgb, #8fd6a6 84%, #ffffff);
border-color: rgba(143, 214, 166, .38);
background: rgba(143, 214, 166, .12);
}
/* ---------- Die Stufe setzen (nur DogFather) --------------------------- */
.tstufen {
display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
margin-top: 12px; padding-top: 11px;
border-top: 1px solid var(--rand);
}
/* DAS SCHILD NIMMT DIE GANZE ZEILE.
Ohne `flex-basis: 100%` teilt es sich die erste Zeile mit der ersten
Stufe -- im Bildschirmfoto stand "STUFE Probe" oben und darunter
"Standard Senior". Drei gleichwertige Knoepfe, ungleich verteilt:
Man liest sie dann als zwei Gruppen statt als eine Reihe. */
.tstufen__schild {
flex-basis: 100%;
margin-bottom: 2px;
font-size: .72rem; font-weight: 700; letter-spacing: .1em;
text-transform: uppercase; color: var(--text-still);
}
.tstufen__knopf {
padding: 6px 12px; border-radius: 999px;
font: inherit; font-size: .78rem; font-weight: 600;
color: var(--text-leise);
background: rgba(255, 255, 255, .04);
border: 1px solid var(--rand);
cursor: pointer;
transition: background .15s ease, color .15s ease, border-color .15s ease;
}
.tstufen__knopf:hover:not([disabled]) {
color: var(--text); background: rgba(255, 255, 255, .08);
}
.tstufen__knopf:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
/* Die gewaehlte Stufe ist gefuellt, nicht bloss umrandet: Bei drei
gleich aussehenden Pillen erkennt man einen Rahmenwechsel zu
langsam, gerade auf einem hellen Bildschirm. */
.tstufen__knopf[data-an="ja"] {
color: #0a121e;
background: color-mix(in srgb, var(--akzent, #7fc4e8) 82%, #ffffff);
border-color: transparent;
}
.tstufen__knopf[disabled] { opacity: .55; cursor: default; }
@media (prefers-reduced-motion: reduce) { .tstufen__knopf { transition: none; } }
/* =======================================================================
DER EINGANG WIRD LESBAR STATT LEER (10.09.2026)
Filipe zum Bildschirmfoto: "das muss viel krasser sein."
Er hatte recht, und der Grund war nicht Geschmack: Auf der Seite
standen drei gleich hohe Spalten, von denen zwei leer waren und
trotzdem ueber den halben Bildschirm gingen. Die einzige Karte mit
Inhalt lag darin wie ein Zettel in einem Umzugskarton -- und war
ausserdem fahl, weil ihre Rollenfarbe auf ein helles Grau zurueckfiel.
Vier Aenderungen, und jede loest etwas Konkretes:
1. Leere Spalten schrumpfen (`align-items: start`).
2. Die Karte traegt die Farbe der Stufe -- kein Nebel mehr, und
man sieht am Rand, wer wo steht.
3. Aus sechs Zahlenkaesten je Person werden drei Balken: "wie
weit" statt "wie viele offen".
4. Die drei Zahlen der Seite stehen oben als Zahlen, nicht in
einem Satz.
==================================================================== */
/* 1. ZWEI REIHEN, UND LEERE KAESTEN SCHRUMPFEN.
`.t-lage` war ein Raster mit `auto-fit, minmax(150px, 1fr)` fuer
ALLES: die zwei Wartelisten und jede Person. Bei fuenf Kaesten
nebeneinander blieben rund 150 px je Spalte, und im
Bildschirmfoto stand "Community 12 von" -- abgeschnitten mitten
in der Zahl. Ausserdem machte die laengste Liste die ganze Reihe
so hoch wie sich selbst.
Jetzt untereinander: erst was eine Antwort braucht, dann das
Team. `align-items: start` haelt leere Kaesten kurz -- `stretch`
ist die Vorgabe und zieht sonst jeden auf die Hoehe des
hoechsten. */
.t-lage {
display: grid; gap: 18px;
grid-template-columns: 1fr;
align-items: start;
}
/* 300 px ist nachgemessen und nicht geraten: Darunter bricht
"Community" von der Zahl daneben ab, und die Stufenknoepfe fallen in
drei Zeilen. Auf einem Handy bleibt es bei einer Spalte. */
.t-wartet, .t-leute {
display: grid; gap: 12px;
grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr));
align-items: start;
}
/* 2. DIE STUFE ALS FARBE DER KARTE.
Dieselben drei Toene wie die Schilder darin -- ein vierter waere
eine zweite Sprache fuer dieselbe Sache. */
.tperson[data-stufe="probe"] { --r: #9fb6c6; }
.tperson[data-stufe="standard"] { --r: #7fc4e8; }
.tperson[data-stufe="senior"] { --r: #8fd6a6; }
/* Pausiert wird leiser, nicht ausgegraut: 0,72 statt 0,6 (das ist der
Wert fuer GESPERRT). Eine Pause ist kein Entzug. */
.tperson[data-pause="ja"] { opacity: .72; }
/* 3. DIE BEREICHE ALS BALKEN --------------------------------------- */
.tfort {
display: grid; gap: 8px;
margin-top: 14px; padding-top: 13px;
border-top: 1px solid var(--rand);
}
.tfort__zeile {
display: grid; gap: 6px;
padding: 10px 12px; border-radius: 12px;
text-decoration: none; color: inherit;
background: rgba(255, 255, 255, .028);
border: 1px solid var(--rand);
transition: background .15s ease, border-color .15s ease;
}
.tfort__zeile:hover {
background: rgba(255, 255, 255, .06);
border-color: color-mix(in srgb, var(--r) 40%, transparent);
}
.tfort__zeile:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
.tfort__kopf {
display: flex; align-items: baseline; justify-content: space-between; gap: 10px;
}
.tfort__name { font-size: .88rem; font-weight: 650; color: var(--text); }
.tfort__zahl {
flex: none;
font-size: .78rem; font-weight: 700; color: var(--text-leise);
font-variant-numeric: tabular-nums;
}
/* DIE BAHN. 8 px hoch -- hoch genug, um die Farbe zu erkennen, flach
genug, um nicht wie ein Ladebalken zu wirken. Der leere Teil bleibt
sichtbar dunkel: Ein Balken ohne Bahn zeigt nur, was da ist, nicht
wie viel fehlt. */
.tfort__bahn {
display: flex; overflow: hidden;
height: 8px; border-radius: 999px;
background: rgba(255, 255, 255, .07);
}
.tfort__bahn > i { display: block; height: 100%; }
/* GRUEN = besprochen und in Ordnung. BERNSTEIN = besprochen, da ist
was. Beide fuellen den Balken, denn beide heissen "angesehen" --
der Unterschied liegt im Ergebnis, nicht im Fortschritt. */
.tfort__gut { background: color-mix(in srgb, #8fd6a6 78%, #5f8a9f); }
.tfort__verbessern { background: color-mix(in srgb, #ffc978 82%, #b07a3a); }
.tfort__unter {
font-size: .76rem; color: var(--text-still); line-height: 1.5;
}
/* 4. DIE DREI ZAHLEN DER SEITE -------------------------------------- */
.tkopfzahlen {
grid-column: 1 / -1; /* ueber die ganze Breite, keine vierte Spalte */
display: grid; gap: 10px;
grid-template-columns: repeat(auto-fit, minmax(min(190px, 100%), 1fr));
margin-bottom: 4px;
}
.tkz {
display: grid; gap: 3px; align-content: start;
padding: 15px 17px; border-radius: 14px;
background:
linear-gradient(160deg, rgba(127, 196, 232, .07), transparent 60%),
linear-gradient(178deg, rgba(10, 14, 22, .95), rgba(5, 8, 14, .98));
border: 1px solid var(--rand);
}
.tkz__wert {
font-size: clamp(1.6rem, 4vw, 2.2rem); font-weight: 750;
line-height: 1.05; color: var(--text);
font-variant-numeric: tabular-nums;
}
.tkz__schild {
font-size: .8rem; color: var(--text-leise); line-height: 1.4;
}
/* WAS WARTET, FAELLT AUF -- aber nur, wenn wirklich etwas wartet. Eine
Null in Warnfarbe waere ein Alarm ohne Anlass, und ab dem dritten Mal
sieht man ihn nicht mehr. */
.tkz[data-dran="ja"] {
border-color: color-mix(in srgb, #ffc978 42%, transparent);
background:
linear-gradient(160deg, rgba(255, 201, 120, .12), transparent 62%),
linear-gradient(178deg, rgba(10, 14, 22, .95), rgba(5, 8, 14, .98));
}
.tkz[data-dran="ja"] .tkz__wert { color: color-mix(in srgb, #ffc978 78%, #ffffff); }
.tkz__bahn {
display: block; overflow: hidden;
height: 8px; margin-top: 8px; border-radius: 999px;
background: rgba(255, 255, 255, .07);
}
.tkz__bahn > i {
display: block; height: 100%;
background: linear-gradient(90deg,
color-mix(in srgb, #5f8a9f 80%, #ffffff),
color-mix(in srgb, #8fd6a6 76%, #5f8a9f));
}
@media (prefers-reduced-motion: reduce) { .tfort__zeile { transition: none; } }