Files
dogfather-universe/workspace/assets/css/unterstuetzen.css
T
DogFatherGitandClaude Opus 5 aa2e1a4ae2 Eine Kachel "Unterstuetzen" -- und die Gespraechsliste neu gebaut
=== 1. UNTERSTUETZEN (neue Kachel im Community-Bereich) ===

Filipe: "ich brauch auch noch eine kachel im community bereich. wo mein
paypal und meine amazon liste sein wird. wo die leute alle supporten
koennen auf andere art anstatt nur tiktok. jeder soll diese kachel sehen
aber nur dogfather soll sie veraendern koennen oder vieles mehr sehen."

Neu: unterstuetzen.html + css + js, server/workspace-unterstuetzung.js,
server/unterstuetzung-tabellen.js. Ton 45 (#7567fe) ist gerechnet, das
Kachelzeichen ist ein Herz ueber zwei offenen Haenden.

DIE WEGE STEHEN IN DER DATENBANK, nicht im Quelltext -- ein Recht, das
man nur ueber einen Entwickler ausueben kann, ist keines. DogFather
schreibt Titel, Text, Knopf und Adresse selbst, blendet Wege aus und
nimmt neue dazu.

DER PAYPAL-LINK STEHT LEER UND UNSICHTBAR DA. Filipe schrieb "mein
paypal kennst du ja schon" -- gesucht im ganzen Haus und im Vault,
nirgends gefunden. Eine Zahlungsadresse zu RATEN waere der
gefaehrlichste Fehler dieser Seite: Geld an einen Fremden, und niemand
merkt es. Also steht dort nichts, der Weg ist ausgeblendet, und die
Seite sagt genau EINER Person, dass er fehlt.

DREI ARTEN, UND DIE DRITTE IST DIE WICHTIGSTE: geld, geschenk, frei.
"Kostet nichts" bekommt dieselbe Kartenform und dieselbe Groesse.
Waeren die freien Wege kleiner oder weiter unten, waere die Aussage
"das ist zweite Wahl" -- und die Mehrheit derer, die hier lesen, waere
damit zweite Wahl.

DIE ZAEHLUNG IST ANONYM, UND ZWAR VON DER TABELLE HER. DogFather sieht,
wie oft ein Weg geoeffnet wurde (7/30 Tage/gesamt). Was er NICHT sieht,
ist WER -- weil es in unterstuetzung_striche keine Spalte dafuer gibt.
Geprueft wird das ueber PRAGMA table_info, nicht ueber eine Abfrage:
eine Abfrage liesse sich morgen erweitern, eine fehlende Spalte nicht.

Schreiben haengt an istDogFather, nicht an istLeitung -- die rechte Hand
fuehrt dieses Team mit und kommt trotzdem nicht an diesen Link. Jede
Adresse wird beim SCHREIBEN geprueft (nur https:// oder eine Seite
dieses Hauses); javascript:, data:, http:// und // werden abgewiesen.

Neu: server/pruef-unterstuetzung.mjs -- 70 Pruefungen, alle gruen.
Sie misst ueber die CREW-ADRESSE: Beim ersten Lauf waren vier Rollen
gruen und der Zuschauer rot, und es sah nach einem Rechtefehler aus.
Es war ein Messfehler -- ueber 127.0.0.1 landet man still im
Agenturhaus, und dort gibt es die Rolle "gast" gar nicht.

=== 2. DIE GESPRAECHSLISTE (screen1 + screen2) ===

Filipe: "ich will dass die komplette kachel viel krasser und geiler
aussieht. der hintergrund der kachel soll gleich bleiben."

Der Hintergrund ist unangetastet. Zwei echte Fehler auf seinem Bild:

  - Bei "Das Rudel" stand das "@" rechts oben und die orange "6" eine
    ZEILE TIEFER. Der Knopf ist ein Raster mit DREI Spalten und bekam
    VIER Kinder -- das vierte fiel um. Ausgerechnet die wichtigste
    Auskunft der Liste landete an der unauffaelligsten Stelle.
  - Jedes Gespraech mit Profilbild haengte das Bild ZWEIMAL ein: ein
    Block stand Zeichen fuer Zeichen doppelt da. Zu sehen war nichts,
    gekostet hat es die doppelte Ladelast bei jedem Neuzeichnen.

Und eine tote Regel: `.chat-raum__knopf[data-an="ja"]` beschrieb die
Schiene am offenen Gespraech -- gesetzt wird aber `data-offen` am <li>.
Die Regel griff nie, und daneben stand eine zweite, blassere Fassung
derselben Sache. Jetzt steht alles einmal, und die Schiene ist da.

Dazu: Zeilen als Karten, 44px-Gesichter, ein Zaehler neben "Gespraeche",
Suchfeld als Pille mit Lupe, runder Farbfleck statt Quadrat, und der
leere Raum rechts bekommt eine Mitte statt eines Satzes in der Ecke.

=== 3. VIER FUNDE NEBENBEI ===

  - supportAufraeumen() war exportiert und wurde NIRGENDS gerufen. Die
    Meldungen samt Bildschirmfotos waeren fuer immer liegen geblieben,
    obwohl "90 Tage" dokumentiert ist. Jetzt im Loeschkonzept.
  - aufgaben_zuteilung fehlte ebenfalls im Loeschkonzept (seit 21.09.).
    pruef-aufbewahrung ist damit wieder gruen.
  - pruef-start-ansicht war rot, seit "Aufgaben" am 23.09. die silberne
    Kachel bekam -- die ueberschreibt ihr --ton absichtlich. Die
    Pruefung nimmt sie jetzt aus UND prueft die Ausnahme selbst.
  - pruef-buehne meldete auf entwicklung.html 1,79:1 Kontrast bei "Wen
    gehst du durch?" -- die Ueberschrift lag direkt auf dem Foto. Sie
    steht jetzt auf einer deckenden Flaeche.

OFFEN: pruef-buehne meldet treff-regeln.html mal "0 von 40", mal "3 von
40" -- dieselbe Seite, verschiedene Antworten. Eine Pruefung, die
schwankt, ist schlimmer als eine rote. Nicht in diesem Zug behoben.

Gemessen: pruef-unterstuetzung 70, pruef-start-ansicht, pruef-buehne
(bis auf den Wackler), pruef-workspace-seiten, pruef-aufbewahrung 45,
pruef-rechtetafel 19, pruef-css-klassen, pruef-chatkachel 36,
pruef-chat-ausbau, pruef-entwicklung-kacheln 31 -- gruen.

Neu: server/mess-chat-liste.mjs (zeigt die Liste mit sieben Gespraechen
verschiedener Art, prueft nichts).

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-24 14:14:25 +02:00

296 lines
11 KiB
CSS

/* =====================================================================
UNTERSTÜTZEN (24.09.2026)
=====================================================================
Filipe: „ich brauch auch noch eine kachel im community bereich. wo
mein paypal und meine amazon liste sein wird. wo die leute alle
supporten können auf andere art anstatt nur tiktok. … mach das
richtig geil, übertrieben geil."
---------------------------------------------------------------------
DIE GESTALTUNG HAT EINE AUFGABE, UND DIE IST NICHT „SCHÖN"
Auf dieser Seite steht eine Bitte um Geld. Solche Seiten sehen
üblicherweise laut aus: große Knöpfe, Ausrufezeichen, ein Balken mit
einem Ziel. Das funktioniert einmal und fühlt sich danach unangenehm
an — für beide Seiten.
Deshalb hier das Gegenteil, und zwar konsequent:
DIE DREI ARTEN SIND GLEICH GROSS. „Kostet nichts" bekommt dieselbe
Kartenform wie PayPal. Wären die freien Wege kleiner oder weiter
unten, wäre die Aussage „das ist die zweite Wahl" — und die
Mehrheit derer, die hier lesen, wäre damit zweite Wahl.
DIE FARBE KOMMT VON DER KANTE, nicht von der Fläche. Ein Streifen
oben und ein Hauch Verlauf darunter; der Rest bleibt die ruhige
Hausfläche. Eine vollflächig eingefärbte Karte schreit, und diese
Seite soll nicht schreien.
KEIN ZÄHLER FÜR DIE COMMUNITY. Wie oft ein Weg benutzt wurde,
sieht nur DogFather. Eine öffentliche Zahl wäre Druck („erst 3 von
100") oder Beschämung — je nachdem, wie sie ausfällt.
AUGENSCHONEND (Hausregel): keine Leuchtkanten, kein Puls, keine
Bewegung außer einem kurzen Farbwechsel beim Überfahren.
===================================================================== */
/* ---- Die Gruppen ---------------------------------------------------- */
.u-gruppe { margin: 30px 0 0; }
/* DIE ÜBERSCHRIFT STEHT AUF EINER FLÄCHE, NICHT AUF DEM FOTO.
Gemessen am ersten Bildschirmfoto: Der Text lag direkt auf der Bühne
— und über einem Bild lässt sich Lesbarkeit nicht ausrechnen, weil
das Dahinter von Motiv zu Motiv wechselt. Das ist genau der Fall,
für den die Kontrastmessung des Hauses ihren dritten Ausgang hat
(„konnte nicht nachsehen").
Die Antwort darauf ist keine hellere Schrift, sondern eine deckende
Fläche. `--flaeche` ist die des Hauses und mehrfach nachgemessen. */
.u-gruppe__kopf {
display: inline-flex; flex-wrap: wrap; align-items: baseline; gap: 4px 11px;
margin: 0 0 13px;
padding: 7px 14px;
border: 1px solid var(--rand); border-radius: 999px;
background: var(--flaeche);
}
.u-gruppe__titel {
margin: 0;
font-size: .78rem; font-weight: 700; letter-spacing: .09em;
text-transform: uppercase; color: var(--text-leise);
}
.u-gruppe__satz { margin: 0; font-size: .82rem; color: var(--text-still); }
.u-gitter {
display: grid; gap: 14px;
/* Dieselbe Rechenweise wie bei den Personenkacheln: `auto-fill` legt
feste Spalten an, damit eine allein stehende Karte in der letzten
Zeile nicht auf die volle Breite wächst und dadurch wichtiger
aussieht als die anderen. */
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
}
/* ---- Eine Karte ----------------------------------------------------- */
.u-weg {
--wton: var(--akzent);
position: relative; overflow: hidden;
display: flex; flex-direction: column; gap: 9px;
min-width: 0;
padding: 20px 20px 18px;
border: 1px solid var(--rand);
border-radius: var(--radius, 18px);
background:
linear-gradient(180deg,
color-mix(in srgb, var(--wton) 9%, transparent), transparent 48%),
color-mix(in srgb, var(--tinte) 92%, #ffffff 8%);
transition: border-color .16s ease;
}
.u-weg:hover { border-color: color-mix(in srgb, var(--wton) 38%, var(--rand)); }
/* DIE KANTE IST DIE FARBE. Oben ein Streifen, der nach rechts
ausläuft — so bleibt die Fläche darunter ruhig lesbar. */
.u-weg::before {
content: ""; position: absolute; inset: 0 0 auto; height: 3px;
background: linear-gradient(90deg,
var(--wton), color-mix(in srgb, var(--wton) 30%, transparent) 55%, transparent);
}
/* Drei Arten, drei Töne. Sie stehen HIER und nicht in der Datenbank:
Eine Farbe ist Gestaltung, kein Inhalt — und aus der Datenbank
käme sie ungeprüft in ein Stilblatt. */
.u-weg[data-art="geld"] { --wton: #f0b25a; }
.u-weg[data-art="geschenk"] { --wton: #79d1c4; }
.u-weg[data-art="frei"] { --wton: var(--akzent); }
.u-weg__kopf { display: flex; align-items: center; gap: 13px; }
.u-weg__zeichen {
flex: none;
width: 46px; height: 46px; border-radius: 14px;
display: grid; place-items: center;
color: var(--wton);
background: color-mix(in srgb, var(--wton) 12%, transparent);
border: 1px solid color-mix(in srgb, var(--wton) 28%, transparent);
}
.u-weg__zeichen svg {
width: 24px; height: 24px;
fill: none; stroke: currentColor;
stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round;
}
.u-weg__zeichen svg .voll { fill: currentColor; stroke: none; }
.u-weg__namen { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.u-weg__titel {
margin: 0;
font-size: 1.06rem; font-weight: 650; color: var(--text);
overflow-wrap: anywhere;
}
.u-weg__marke {
align-self: flex-start;
font-size: .68rem; font-weight: 700; letter-spacing: .07em;
text-transform: uppercase;
padding: 2px 8px; border-radius: 999px;
color: color-mix(in srgb, var(--wton) 72%, #ffffff);
border: 1px solid color-mix(in srgb, var(--wton) 32%, transparent);
background: color-mix(in srgb, var(--wton) 8%, transparent);
}
.u-weg__text {
margin: 0;
font-size: .87rem; line-height: 1.62; color: var(--text-still);
}
/* Der Knopf steht UNTEN und auf einer Linie mit den Nachbarkarten —
`margin-top: auto` schiebt ihn ans Ende, egal wie lang der Text
darüber ist. Ohne das säße er bei jeder Karte auf einer anderen
Höhe, und das Auge müsste ihn jedes Mal neu suchen. */
.u-weg__knopf {
margin-top: auto;
align-self: flex-start;
display: inline-flex; align-items: center; gap: 8px;
/* 44px Höhe — die Fingergrenze des Hauses. Dieser Knopf führt zu
einer Zahlung; ihn zu verfehlen ist ärgerlicher als anderswo. */
min-height: 44px; padding: 10px 17px;
border-radius: 999px;
border: 1px solid color-mix(in srgb, var(--wton) 42%, transparent);
background: color-mix(in srgb, var(--wton) 14%, transparent);
color: color-mix(in srgb, var(--wton) 78%, #ffffff);
font: inherit; font-size: .88rem; font-weight: 620;
text-decoration: none; cursor: pointer;
transition: background .16s ease, border-color .16s ease;
}
.u-weg__knopf:hover {
background: color-mix(in srgb, var(--wton) 22%, transparent);
border-color: color-mix(in srgb, var(--wton) 62%, transparent);
}
.u-weg__knopf svg {
width: 15px; height: 15px; flex: none;
fill: none; stroke: currentColor; stroke-width: 1.8;
stroke-linecap: round; stroke-linejoin: round;
}
/* ---- Was nur DogFather sieht ---------------------------------------- */
.u-leitung {
margin: 22px 0 0; padding: 15px 17px;
border: 1px solid color-mix(in srgb, var(--akzent) 26%, var(--rand));
border-radius: var(--radius-klein, 12px);
background:
linear-gradient(180deg,
color-mix(in srgb, var(--akzent) 7%, transparent), transparent 60%),
color-mix(in srgb, var(--tinte) 90%, #ffffff 10%);
}
.u-leitung__kopf {
display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
}
.u-leitung__titel {
margin: 0; flex: 1 1 12rem;
font-size: .95rem; font-weight: 650; color: var(--text);
}
.u-leitung__satz {
margin: 7px 0 0; font-size: .83rem; line-height: 1.6; color: var(--text-still);
}
.u-leitung__satz[data-warnung="ja"] {
color: color-mix(in srgb, var(--warn) 50%, #ffffff); font-weight: 600;
}
.u-zahlen {
display: grid; gap: 8px; margin-top: 13px;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}
.u-zahl {
padding: 9px 12px;
border: 1px solid var(--rand); border-radius: 10px;
background: rgba(255, 255, 255, .03);
}
.u-zahl__n {
display: block;
font-size: 1.3rem; font-weight: 700; color: var(--text);
font-variant-numeric: tabular-nums;
}
.u-zahl__text { display: block; font-size: .75rem; color: var(--text-leise); }
/* Die Zeile an der Karte — nur im Änderungsmodus, nur für ihn. */
.u-weg__zahl {
font-size: .75rem; color: var(--text-leise);
font-variant-numeric: tabular-nums;
}
.u-weg[data-aus="ja"] { opacity: .62; }
.u-weg__aus {
align-self: flex-start;
font-size: .7rem; font-weight: 650;
padding: 2px 9px; border-radius: 999px;
color: var(--text-still);
border: 1px dashed var(--rand-hell);
}
/* ---- Der Änderungsmodus --------------------------------------------- */
/* Die Felder stehen IN der Karte, nicht in einem eigenen Fenster: Man
sieht beim Tippen, was dabei herauskommt. Ein Dialog über der Seite
hätte genau das verdeckt, was man gerade ändert. */
.u-form { display: flex; flex-direction: column; gap: 9px; }
.u-form label {
display: flex; flex-direction: column; gap: 4px;
font-size: .76rem; color: var(--text-leise);
}
.u-form input[type="text"],
.u-form input[type="url"],
.u-form textarea,
.u-form select { width: 100%; }
.u-form textarea { min-height: 76px; resize: vertical; }
.u-form__reihe { display: flex; flex-wrap: wrap; gap: 9px; align-items: center; }
.u-form__an {
display: inline-flex; align-items: center; gap: 7px;
font-size: .82rem; color: var(--text-still);
}
.u-form__knoepfe {
display: flex; flex-wrap: wrap; gap: 8px; margin-top: 2px;
}
.u-form__weg {
margin-left: auto;
color: color-mix(in srgb, var(--warn) 55%, #ffffff);
border-color: color-mix(in srgb, var(--warn) 32%, transparent);
}
.u-neu {
display: grid; place-items: center; gap: 8px;
min-height: 150px; padding: 20px;
border: 1px dashed var(--rand-hell); border-radius: var(--radius, 18px);
background: transparent;
color: var(--text-leise); font: inherit; font-size: .88rem;
cursor: pointer;
transition: border-color .16s ease, color .16s ease;
}
.u-neu:hover { border-color: var(--akzent); color: var(--text); }
.u-neu__plus { font-size: 1.6rem; line-height: 1; }
/* ---- Rand und Ränder ------------------------------------------------- */
.u-laedt { margin: 26px 0; font-size: .88rem; color: var(--text-still); }
/* Auch dieser Satz stand auf dem Foto — und er ist der wichtigste der
Seite: Er nimmt den Druck weg. Deshalb ebenfalls auf eine deckende
Flaeche, und nicht nur eine Trennlinie darueber. */
.u-fuss {
margin: 34px 0 6px; padding: 14px 17px;
border: 1px solid var(--rand); border-radius: var(--radius-klein, 12px);
background: var(--flaeche);
font-size: .84rem; line-height: 1.65; color: var(--text-still);
max-width: 68ch;
}
/* Am Handy eine Karte je Zeile — zwei nebeneinander wären hier keine
Übersicht, sondern zwei halbe Texte. Der Unterschied zur
Personenliste ist Absicht: Dort steht eine Zahl, hier ein Satz. */
@media (max-width: 620px) {
.u-gitter { grid-template-columns: 1fr; }
.u-weg { padding: 16px 16px 15px; }
.u-weg__titel { font-size: 1rem; }
}
@media (prefers-reduced-motion: reduce) {
.u-weg, .u-weg__knopf, .u-neu { transition: none; }
}
/* Im Kontrastmodus fällt `color-mix` weg — eine Markierung, die nur aus
einer Tönung besteht, verschwindet dort komplett. Deshalb echte
Rahmen, die jeden Farbmodus überleben. */
@media (forced-colors: active) {
.u-weg, .u-weg__zeichen, .u-weg__knopf, .u-weg__marke, .u-zahl {
border: 1px solid CanvasText;
}
}