Files
dogfather-universe/workspace/assets/css/entwicklung.css
T
DogFatherGitandClaude Opus 5 bba3642664 Aus der Probe wird ein Zugang - und die Seite sagt nicht mehr "Agentur"
Die drei offenen Punkte aus Abschnitt 9 des Plans, plus Filipes zweite
Ansage: "auf dieser seite soll nichts stehen von agentur, diese seite
hier ist nur fuer mich meine modis und meine community."

1. PROBE -> ZUGANG (ein Knopf statt eines Satzes)

Auf der Stufe "Probe" stand bisher "Zugang in Personen & Zugaenge
anlegen, Rolle Modi" - und wer das vergass, hatte eine Karte auf "Im
Team" und keinen Menschen darin. Jetzt haengt das Anlegen am Schritt
selbst.

Ueber DENSELBEN Weg wie in "Personen & Zugaenge", nicht ueber einen
zweiten: POST /workspace/api/verwaltung/personen, mit ihrer
Rechtepruefung, ihrem Protokolleintrag und ihrem genau einmal
angezeigten Code. Der Talente-Server legt selbst keinen einzigen Zugang
an, und die Pruefung zaehlt nach, dass es bei einem Weg bleibt.

Der Code steht im gleichen Kasten wie dort - die Gestaltung ist aus
personen.css nach start.css umgezogen, weil talente.html sie sonst nicht
laedt. Ein Geheimnis sieht im ganzen Haus gleich aus. Er steht
ausserhalb der Liste, sonst waere er in dem Moment weg, in dem er
entsteht: wenn die Karte auf "Im Team" springt.

Die rechte Hand bekommt an dieser Stelle KEINEN Knopf, sondern einen
Satz. Ein Knopf, der ihr jedes Mal "darfst du nicht" antwortet, waere
schlechter als gar keiner - er verspricht etwas.

2. DIE EIGENE KARTE (Abschnitt "Deine Karte")

Wer beschrieben wird, darf es lesen - aber erst, wenn ALLE gesetzt
haben (sonst waere die erste Einschaetzung eine Vorgabe fuer die
zweite), und ohne Namen und ohne Anlasstext. Gemessen in beide
Richtungen: vorher nicht sichtbar, nachher sichtbar.

3. DER VORLAGENTEXT

Gebaut aus den angeklickten Merkmalen, in einem Feld zum Aendern, nicht
zum Abschicken. Ohne Merkmale steht auch keines drin.

4. "GILT FUER" SAGT DER SERVER

In bereich.js stand woertlich "Agentur" - richtig auf der
Agenturadresse, falsch auf jeder anderen. Jetzt liefert der Server
`gehoert` ("Der Treff" / "Team Dogi" / "Agentur"); gemessen mit einem
einzigen Menschen auf zwei Adressen.

PRUEFUNGEN: treff 58 -> 66, nachwuchs 69 -> 109, neue-seiten 70 -> 93.
Die Katalogseiten werden jetzt auch mit den Augen der rechten Hand
angesehen - ohne das waere "Deine Karte" nie auf einem Bildschirm
gewesen. Und pruef-neue-seiten wartet nicht mehr 900 ms, sondern bis
sich der Text nicht mehr aendert: Die Karte stand da und wurde
trotzdem als fehlend gemeldet, weil zu frueh gelesen wurde.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-11 23:13:50 +02:00

430 lines
18 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* =====================================================================
Entwicklung & Nachwuchs — die zwei Katalogseiten (11.09.2026)
Zwei Seiten, ein Stil: Auf beiden klickt man kurze Aussagen an,
beide zeigen daneben eine Zahl, die etwas über UNS sagt (wie alt die
Einschätzung ist, wie lange eine Karte liegt).
---------------------------------------------------------------------
DIE WICHTIGSTE ENTSCHEIDUNG IST EINE FARBE, DIE NICHT VORKOMMT
Es gibt hier kein Rot. „Da hakt es" ist eine Beobachtung, kein Alarm;
ein Warnzeichen an einem Kandidaten ist ein Grund hinzusehen, kein
Nein. Rot würde in beiden Fällen mehr sagen als die Sache — und aus
einem Gesprächsanlass ein Urteil machen.
Stattdessen: warm (Bernstein) für „hakt" und für Warnzeichen, kühl
für „läuft", babyblau für „wächst", grau für „kann ich nicht sagen".
Vier unterscheidbare Töne, keiner davon laut. Das ist auch die
Hausregel — augenschonend, gedeckt, dunkles Schema.
---------------------------------------------------------------------
UND EINE, DIE MAN NICHT SIEHT: ES GIBT KEINEN BALKEN
Kein Fortschrittsbalken je Person, kein Prozentwert, keine Punktzahl.
Eine Zahl über einem Menschen wird gelesen, verglichen und
weitererzählt. Was hier gebraucht wird, ist ein Gesprächsanlass.
===================================================================== */
/* ---------------------------------------------------------------------
Gemeinsam
------------------------------------------------------------------- */
.e-abschnitt {
margin: 26px 0 12px;
font-size: .82rem;
font-weight: 650;
letter-spacing: .09em;
text-transform: uppercase;
color: var(--text-still);
}
/* ---------------------------------------------------------------------
Die Ampel
Sie steht ganz oben und ist absichtlich die einzige Fläche auf der
Seite, die eine Farbe trägt. Unter 34 Beobachtungen hätte sie
niemand je gelesen.
------------------------------------------------------------------- */
.e-ampel {
margin: 0 0 22px;
padding: 14px 18px;
border: 1px solid var(--rand);
border-left: 3px solid var(--rand-hell);
background: color-mix(in srgb, var(--tinte) 94%, #ffffff 6%);
}
.e-ampel[data-lage="jemand"] { border-left-color: #cc9451; }
.e-ampel[data-lage="mehrere"] { border-left-color: #cc7a51; }
.e-ampel[data-lage="ruhig"] { border-left-color: #668e6e; }
.e-ampel__satz { margin: 0; font-size: .93rem; line-height: 1.6; color: var(--text); }
.e-ampel__zusatz {
margin: 7px 0 0; font-size: .8rem; line-height: 1.55; color: var(--text-still);
}
/* ---------------------------------------------------------------------
Die Personenreihe
------------------------------------------------------------------- */
.e-personen { display: flex; flex-wrap: wrap; gap: 10px; }
.e-person {
display: flex; flex-direction: column; gap: 3px;
min-width: 210px; flex: 1 1 210px;
padding: 13px 15px; text-align: left; cursor: pointer;
font: inherit;
background: color-mix(in srgb, var(--tinte) 94%, #ffffff 6%);
border: 1px solid var(--rand);
transition: border-color .16s ease;
}
.e-person:hover, .e-person:focus-visible {
border-color: color-mix(in srgb, var(--akzent) 45%, transparent);
}
.e-person__name { font-size: .98rem; font-weight: 640; color: var(--text); }
.e-person__rolle { font-size: .78rem; color: var(--text-still); }
.e-person__zahlen { display: flex; flex-wrap: wrap; gap: 5px 10px; margin-top: 6px; }
.e-person__zahl { font-size: .77rem; color: var(--text-leise); }
/* Die Abweichung ist das Ergebnis dieser Seite — sie darf als Einzige
auffallen. */
.e-person__zahl--wichtig { color: var(--text); font-weight: 620; }
.e-person__zahl--alt { color: var(--text-still); }
/* ---------------------------------------------------------------------
Die Karte
------------------------------------------------------------------- */
.e-karte { margin: 26px 0 0; }
.e-karte__kopf {
display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px;
padding-bottom: 10px; margin-bottom: 16px;
border-bottom: 1px solid var(--rand-hell);
}
.e-karte__name { margin: 0; font-size: 1.22rem; font-weight: 660; color: var(--text); }
.e-karte__rolle { font-size: .82rem; color: var(--text-still); }
.e-karte__stand { font-size: .8rem; color: var(--text-leise); margin-left: auto; }
.e-karte__brett { text-decoration: none; }
/* Die Abweichungen. Sie stehen oben und bekommen als Einzige einen
Rahmen, der auffällt — sie sind der Grund, warum zwei Leute getrennt
klicken. */
.e-abweichung {
margin: 0 0 22px; padding: 15px 18px;
border: 1px solid color-mix(in srgb, var(--akzent) 32%, transparent);
background: color-mix(in srgb, var(--akzent) 7%, var(--tinte));
}
.e-abweichung__titel { margin: 0 0 5px; font-size: 1rem; font-weight: 650; color: var(--text); }
.e-abweichung__satz { margin: 0 0 10px; font-size: .85rem; color: var(--text-leise); }
.e-abweichung__liste { margin: 0; padding-left: 1.1em; }
.e-abweichung__liste li { margin-bottom: 6px; }
.e-abweichung__punkt { display: block; font-size: .88rem; color: var(--text); }
.e-abweichung__gegen { display: block; font-size: .8rem; color: var(--text-leise); }
/* ---------------------------------------------------------------------
Ein Block und seine Punkte
------------------------------------------------------------------- */
.e-block { margin: 0 0 26px; }
.e-block__titel { margin: 0 0 4px; font-size: 1.02rem; font-weight: 650; color: var(--text); }
.e-block__satz {
margin: 0 0 12px; max-width: 64ch;
font-size: .85rem; line-height: 1.6; color: var(--text-leise);
}
.e-punkt {
margin: 0 0 9px; padding: 12px 15px;
background: color-mix(in srgb, var(--tinte) 94%, #ffffff 6%);
border: 1px solid var(--rand);
/* Der linke Balken trägt die Antwort. Er ist die einzige Stelle, an
der man beim Überfliegen sieht, wie eine Zeile steht — ohne dass
die ganze Karte einfärbt. */
border-left: 3px solid transparent;
}
.e-punkt[data-stufe="laeuft"] { border-left-color: #668e6e; }
.e-punkt[data-stufe="waechst"] { border-left-color: #8ec9ff; }
.e-punkt[data-stufe="hakt"] { border-left-color: #cc9451; }
.e-punkt[data-stufe="unklar"] { border-left-color: var(--rand-hell); }
/* Verblasst: die Zeile tritt zurück, verschwindet aber nicht. Eine
Akte, die heimlich vergisst, wäre schlimmer als eine, die alles
behält. */
.e-punkt[data-verblasst="ja"] { opacity: .68; }
.e-punkt__kopf { display: flex; flex-wrap: wrap; align-items: baseline; gap: 9px; }
.e-punkt__titel { margin: 0; font-size: .95rem; font-weight: 620; color: var(--text); }
.e-punkt__erwartung {
/* .75rem = 12 px und nicht .7rem = 11,2 px.
pruef-css-klassen zaehlt die Stellen unter 11,5 px gegen eine
Grundlinie und meldet JEDE neue -- hier war es eine. Elf Pixel in
Grossbuchstaben mit Sperrung liest man auf einem Handy nicht mehr,
man erkennt sie hoechstens wieder. Und das hier ist keine Zierde,
sondern die Angabe, ab wann etwas ueberhaupt erwartet wird. */
font-size: .75rem; letter-spacing: .04em; text-transform: uppercase;
padding: 2px 7px; border: 1px solid var(--rand-hell); border-radius: 999px;
color: var(--text-still);
}
/* Die Erwartungsstufe ist KEINE Note — deshalb drei fast gleiche Töne
und kein Ampelverlauf. Sie sagt, ab wann etwas erwartet wird, nicht
wie gut jemand ist. */
.e-punkt__erwartung[data-erwartung="senior"] { color: var(--text-leise); }
.e-punkt__text {
margin: 5px 0 10px; max-width: 66ch;
font-size: .83rem; line-height: 1.6; color: var(--text-leise);
}
.e-wahl { display: flex; flex-wrap: wrap; gap: 6px; }
.e-wahl__knopf {
display: inline-flex; align-items: center; gap: 6px;
font: inherit; font-size: .8rem; font-weight: 600;
padding: 6px 12px; border-radius: 999px; cursor: pointer;
color: var(--text-leise);
background: transparent;
border: 1px solid var(--rand-hell);
transition: background .16s ease, color .16s ease, border-color .16s ease;
}
.e-wahl__zeichen { font-size: .9rem; line-height: 1; }
.e-wahl__knopf:hover:not(:disabled) { color: var(--text); }
.e-wahl__knopf[aria-pressed="true"] { color: var(--text); }
.e-wahl__knopf[data-stufe="laeuft"][aria-pressed="true"] {
background: color-mix(in srgb, #668e6e 22%, transparent);
border-color: color-mix(in srgb, #668e6e 55%, transparent);
}
.e-wahl__knopf[data-stufe="waechst"][aria-pressed="true"] {
background: color-mix(in srgb, #8ec9ff 18%, transparent);
border-color: color-mix(in srgb, #8ec9ff 50%, transparent);
}
.e-wahl__knopf[data-stufe="hakt"][aria-pressed="true"] {
background: color-mix(in srgb, #cc9451 20%, transparent);
border-color: color-mix(in srgb, #cc9451 55%, transparent);
}
.e-wahl__knopf[data-stufe="unklar"][aria-pressed="true"] {
background: rgba(255, 255, 255, .06);
border-color: var(--rand-hell);
}
.e-punkt__anlass {
display: block; width: 100%; margin: 9px 0 0;
font: inherit; font-size: .84rem; line-height: 1.5;
padding: 8px 10px; resize: vertical;
color: var(--text);
background: rgba(0, 0, 0, .28);
border: 1px solid var(--rand);
}
.e-punkt__anlass::placeholder { color: var(--text-still); }
.e-punkt__andere, .e-punkt__verdeckt, .e-punkt__wann {
margin: 8px 0 0; font-size: .78rem; line-height: 1.5; color: var(--text-still);
}
.e-punkt__andere { color: var(--text-leise); }
/* Der verdeckte Stand: sichtbar, dass es ihn gibt — unsichtbar, was er
ist. Ohne diese Zeile sähen „noch niemand" und „du darfst es noch
nicht sehen" gleich aus, und das erste ist eine Auskunft, das zweite
eine Täuschung. */
.e-punkt__verdeckt { font-style: italic; }
/* Die eigenen sechs Fragen. Sie stehen ganz unten und tragen als
Einzige eine eigene Umrandung — sie gehören nicht in dieselbe Liste
wie das, was über andere gesagt wird. */
.e-meins {
margin: 34px 0 0; padding: 20px 22px;
border: 1px solid color-mix(in srgb, var(--akzent) 26%, transparent);
background: color-mix(in srgb, var(--tinte) 94%, #ffffff 6%);
}
.e-meins__satz {
margin: 0 0 16px; max-width: 62ch;
font-size: .88rem; line-height: 1.65; color: var(--text-leise);
}
.e-punkt--meins { background: rgba(0, 0, 0, .2); }
/* ---------------------------------------------------------------------
Talente — der Trichter
------------------------------------------------------------------- */
.t-trichter { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 24px; }
.t-stufe {
display: flex; flex-direction: column; gap: 1px;
flex: 1 1 130px; padding: 11px 14px;
background: color-mix(in srgb, var(--tinte) 94%, #ffffff 6%);
border: 1px solid var(--rand);
/* Der Trichter wird nach hinten leiser — nicht bunter. Fünf Farben
für fünf Stufen wären fünf Bedeutungen, die keine sind. */
border-top: 2px solid color-mix(in srgb, var(--akzent) 40%, transparent);
}
.t-stufe[data-stufe="probe"] { border-top-color: color-mix(in srgb, var(--akzent) 65%, transparent); }
.t-stufe[data-stufe="imteam"] { border-top-color: #668e6e; }
.t-stufe__zahl { font-size: 1.5rem; font-weight: 660; color: var(--text); line-height: 1.1; }
.t-stufe__name { font-size: .79rem; color: var(--text-leise); }
.t-stufe__liegt { font-size: .74rem; color: #cc9451; margin-top: 3px; }
.t-liste { display: block; }
.t-karte {
margin: 0 0 14px; padding: 16px 18px;
background: color-mix(in srgb, var(--tinte) 94%, #ffffff 6%);
border: 1px solid var(--rand);
border-left: 3px solid transparent;
}
.t-karte[data-liegt="ja"] { border-left-color: #cc9451; }
.t-karte__kopf { display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px; }
.t-karte__titel { margin: 0; font-size: 1.05rem; font-weight: 650; color: var(--text); }
.t-karte__stufe {
font-size: .74rem; letter-spacing: .05em; text-transform: uppercase;
padding: 2px 8px; border-radius: 999px;
border: 1px solid color-mix(in srgb, var(--akzent) 40%, transparent);
color: var(--text-leise);
}
.t-karte__zeit { font-size: .78rem; color: var(--text-still); }
.t-karte__warn {
font-size: .76rem; color: #cc9451; margin-left: auto;
}
.t-karte__wo, .t-karte__text {
margin: 8px 0 0; max-width: 66ch;
font-size: .85rem; line-height: 1.6; color: var(--text-leise);
}
.t-karte__wo { color: var(--text-still); font-size: .8rem; }
.t-schritt {
display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
margin: 13px 0 0; padding: 11px 13px;
background: rgba(0, 0, 0, .24);
border: 1px solid var(--rand);
}
.t-schritt__satz { margin: 0; flex: 1 1 220px; font-size: .86rem; color: var(--text); }
.t-schritt__liegt { margin: 0; flex: 1 1 100%; font-size: .79rem; color: #cc9451; }
.t-karte__auf {
margin: 12px 0 0; font: inherit; font-size: .8rem;
padding: 5px 0; cursor: pointer;
background: none; border: 0; border-bottom: 1px solid var(--rand-hell);
color: var(--text-leise);
}
.t-karte__auf:hover { color: var(--text); }
.t-gruppe { margin: 16px 0 0; }
.t-gruppe__titel { margin: 0 0 3px; font-size: .9rem; font-weight: 640; color: var(--text); }
.t-gruppe__satz {
margin: 0 0 8px; max-width: 64ch;
font-size: .8rem; line-height: 1.55; color: var(--text-still);
}
.t-merkmale { display: flex; flex-wrap: wrap; gap: 6px; }
.t-merkmal {
display: inline-flex; align-items: center; gap: 7px;
font: inherit; font-size: .8rem; text-align: left;
padding: 6px 12px; border-radius: 999px; cursor: pointer;
color: var(--text-leise);
background: transparent;
border: 1px solid var(--rand-hell);
transition: background .16s ease, color .16s ease, border-color .16s ease;
}
.t-merkmal__haken { font-size: .85rem; line-height: 1; color: var(--text-still); }
.t-merkmal:hover:not(:disabled) { color: var(--text); }
.t-merkmal[aria-pressed="true"] {
color: var(--text);
background: color-mix(in srgb, var(--akzent) 14%, transparent);
border-color: color-mix(in srgb, var(--akzent) 42%, transparent);
}
.t-merkmal[aria-pressed="true"] .t-merkmal__haken { color: var(--akzent); }
/* Warnzeichen: warm, nicht rot. Keines davon ist ein Nein. */
.t-merkmal[data-warnung="ja"][aria-pressed="true"] {
background: color-mix(in srgb, #cc9451 20%, transparent);
border-color: color-mix(in srgb, #cc9451 55%, transparent);
}
.t-merkmal[data-warnung="ja"][aria-pressed="true"] .t-merkmal__haken { color: #cc9451; }
.t-gruppe--warn .t-gruppe__titel { color: #cc9451; }
.t-leer {
padding: 22px; text-align: center;
border: 1px dashed var(--rand-hell);
color: var(--text-leise);
}
.t-leer p { margin: 0 0 12px; max-width: 54ch; margin-inline: auto; font-size: .88rem; line-height: 1.6; }
.t-leer .schritt { text-decoration: none; }
/* DIE FUSSZEILE BRAUCHT DENSELBEN GRUND WIE ALLES ANDERE.
Sie stand als einziger Text der Seite direkt auf der Bühne — dem
Spicy-Media-Motiv mit Neonlicht und Chilischoten. Lesbar war es
knapp; gemessen war es gar nicht, weil die Kontrastprüfung
Elemente mit Kindern überspringt und hier ein Link darin steht.
Das ist derselbe Befund wie am Nachmittag bei der Rechtetafel, nur
eine Ecke weiter — und der Grund, warum in diesem Haus jede Fläche
mit Text eine deckende Unterlage bekommt statt einer
halbdurchsichtigen. */
.t-fuss {
margin: 18px 0 0; padding: 11px 14px;
font-size: .8rem; line-height: 1.55; color: var(--text-still);
background: color-mix(in srgb, var(--tinte) 94%, #ffffff 6%);
border: 1px solid var(--rand);
}
.t-fuss a { color: var(--text-leise); }
@media (prefers-reduced-motion: reduce) {
.e-person, .e-wahl__knopf, .t-merkmal { transition: none; }
}
@media (max-width: 620px) {
.e-karte__stand { margin-left: 0; }
.t-karte__warn { margin-left: 0; }
.e-punkt__text, .e-block__satz { font-size: .88rem; }
}
/* =====================================================================
DER VORLAGENTEXT UND DIE EIGENE KARTE (11.09.2026)
===================================================================== */
.t-text {
margin: 14px 0 0; padding: 15px 17px;
background: rgba(0, 0, 0, .3);
border: 1px solid var(--rand-hell);
}
.t-text__titel { margin: 0 0 5px; font-size: .95rem; font-weight: 640; color: var(--text); }
.t-text__satz {
margin: 0 0 11px; max-width: 62ch;
font-size: .82rem; line-height: 1.6; color: var(--text-leise);
}
.t-text__feld {
display: block; width: 100%;
font: inherit; font-size: .86rem; line-height: 1.65;
padding: 11px 13px; resize: vertical;
color: var(--text);
background: rgba(0, 0, 0, .35);
border: 1px solid var(--rand);
}
.t-text__knoepfe { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 11px; }
/* Zwei, die seit dem Bau der Seite ohne eigene Regel dastanden: der
Knopf am naechsten Schritt und die Beschriftung eines Merkmals. Sie
sahen richtig aus, weil .schritt und .t-merkmal sie getragen haben --
aber wer eines davon umbaut, merkt es hier nicht. */
.t-schritt__knopf { margin-top: 2px; }
.t-schritt__text { margin-top: 2px; }
.t-merkmal__titel { text-align: left; line-height: 1.35; }
/* DIE EIGENE KARTE HAT KEINE KNOEPFE. Hier wird nichts gesetzt, hier
wird gelesen -- deshalb ein anderer Grund als auf der Karte, auf der
man klickt, und kein einziges anklickbares Feld darin. */
.e-meine {
margin: 30px 0 0; padding: 20px 22px;
border: 1px solid var(--rand);
background: color-mix(in srgb, var(--tinte) 94%, #ffffff 6%);
}
.e-meine__satz {
margin: 0 0 16px; max-width: 64ch;
font-size: .88rem; line-height: 1.65; color: var(--text-leise);
}
.e-punkt--meine { background: rgba(0, 0, 0, .2); }
.e-meine__antworten { display: flex; flex-wrap: wrap; gap: 7px; align-items: center; }
.e-meine__antwort {
font-size: .8rem; font-weight: 600; padding: 4px 11px; border-radius: 999px;
color: var(--text-leise);
border: 1px solid var(--rand-hell);
}
.e-meine__antwort[data-stufe="laeuft"] {
color: var(--text); border-color: color-mix(in srgb, #668e6e 55%, transparent);
}
.e-meine__antwort[data-stufe="waechst"] {
color: var(--text); border-color: color-mix(in srgb, #8ec9ff 50%, transparent);
}
.e-meine__antwort[data-stufe="hakt"] {
color: var(--text); border-color: color-mix(in srgb, #cc9451 55%, transparent);
}
/* „Darüber seid ihr euch nicht einig“ ist keine Warnung, sondern eine
Einladung zu fragen – deshalb leise und ohne Farbe. */
.e-meine__uneinig { font-size: .78rem; color: var(--text-still); font-style: italic; }