Files
dogfather-universe/workspace/assets/css/spendenkarte.css
T
DogFatherGitandClaude Opus 5 96bdd79a91 Die Dogen-Muenzen: drei Saetze zu je drei Stufen
Filipe, 28.09.2026: "ich werde die drei varianten schicken fuer
niedrige spenden. mittlere und hohe spenden. alle drei varianten will
ich drauf so dass ich sie aussuchen kann wie ich will. aber pass sie
sofort diesen 3 kategorien an."

DIE ZUORDNUNG IST GELESEN, NICHT GERATEN

In allen drei Saetzen geht es nacktes Metall -> Steinkranz ->
Vollbesatz; Filipes Dateinummern (01/02/03) und die Uhrzeiten seiner
Entwuerfe laufen genau mit. Klassik: Palladium, Gold mit Saphir,
Diamant. Amethyst: Stahl, Rosegold, Vollbesatz. Neon: Chrom auf
Schwarz, Steinkranz, Vollbesatz.

AUS 25 MB WURDEN 443 KB

Je Bild 320 px WebP statt 1254 px PNG, Faktor 58. Die Zahl ist
gemessen: Groesster Fall in der Seite 110 px (Karte, hoechste Stufe),
auf der OBS-Tafel 189 px, bei doppelter Bildschirmdichte rund 220.
Drei Megabyte fuer ein 24-Pixel-Zeichen waeren ein Ladebalken mitten
in der Sendung -- wer auf dem Handy zusieht, bekaeme die Karte, wenn
sie schon wieder weg ist. Die Originale liegen neben den
Datenbanksicherungen, nicht im Repo: 26 MB, die bei jedem Klon
mitkaemen und die niemand ausliefert.

WELCHE MUENZE WANN -- ABGELEITET STATT GEPFLEGT

"Niedrig, mittel, hoch" gibt es im Haus schon: die Stufenleiter. Zwei
eigene Grenzen daneben waeren eine zweite Antwort auf dieselbe Frage,
und spaetestens beim Verschieben einer Stufe zeigte die Muenze etwas
anderes an als der Name auf der Karte. Die Leiter wird deshalb in
DRITTEL geteilt -- bei den drei Werksstufen genau eine je Muenze, bei
sechs zwei je Muenze, bei einer einzigen ueberall die mittlere.

DIE MUENZE STEHT AUCH GROSS AUF DER KARTE

Sonst haette Filipe neun Bilder fuer ein 24-Pixel-Zeichen gezeichnet.
"dogen" ist dafuer eine neue Vorlage neben Herz, Welle und Krone --
und die drei Werksstufen bekommen sie EINMAL zugeteilt, nur wo noch
die Werksvorlage steht und kein eigenes Bild hochgeladen ist. Wer
danach ein Herz zurueckstellt, findet es morgen nicht wieder als
Muenze vor: Eine Einstellung, die sich gegen den Benutzer durchsetzt,
wird abgeschafft.

Und steht sie gross da, nimmt das Stilblatt die kleine neben der Zahl
weg -- dieselbe Muenze in zwei Groessen auf einer Karte sieht aus wie
ein Versehen.

AM BILDSCHIRMFOTO NACHGEBESSERT

Bei 0,92em blieb an den Spendenknoepfen ein 13,5-Pixel-Fleck uebrig;
bei einem flachen Symbol reicht das, bei einer Muenze mit Pfote,
Schriftzug und Steinen nicht. Jetzt 1,05em ueberall und 1,6em auf den
Knoepfen. In der Auswahl sahen "Amethyst" und "Neon" bei 40 px
praktisch gleich aus -- und genau sie auseinanderzuhalten ist der
Zweck dieser Liste. Jetzt 56/64/72 px. Und was gewaehlt ist, steht
als WORT da: Neben neun glaenzenden Muenzen geht ein ruhiger Rahmen
unter, und wer Farben schlecht unterscheidet, sieht ihn gar nicht.

EIN SATZWECHSEL ERREICHT ALLE

Die Karten trugen ihren Satz immer selbst mit und waren richtig. Die
Muenzen an den Spendenknoepfen und beim eigenen Stand aber nicht --
die holt eine Seite nur bei einer Spende neu. Eine Einstellung, die
nur dort ankommt, wo sie gemacht wurde, ist keine Einstellung des
Hauses.

ZWEI BEFUNDE GEGEN DIE PRUEFUNG SELBST

1. Sie verlangte "erste Grenze ECHT kleiner als zweite". Bei genau
   zwei Stufen fallen beide absichtlich zusammen -- sie meldete einen
   Fehler, wo das Verhalten richtig ist.
2. Sie prueft die Muenzverteilung jetzt auf einer FRISCHEN Datenbank.
   Vorher lief sie auf der, die ein frueherer Abschnitt umgebaut
   hatte: Eine Pruefung, die den eigenen Kollateralschaden misst,
   misst sich selbst. Dazu eine Gegenprobe, dass eine selbst
   gewaehlte Vorlage NICHT ueberschrieben wird.

UND DREI AN DER MESSUNG

Sie suchte noch die gezeichnete Muenze (svg), wo jetzt ein Bild
liegt. Umgestellt nicht auf "ist ein img da", sondern auf
`naturalWidth > 0` -- ob es etwas ZEIGT. Ein img, das 404 antwortet,
steht genauso im Dokument wie eines, das laedt; auf dem Bildschirm
ist an seiner Stelle nichts. Und beim Satzwechsel las sie die vorige
Karte, die noch acht Sekunden stand: Die Karten laufen in einer
Schlange, also wird auf das Merkmal gewartet, das nur die neue hat.

pruef-spenden 167/0 (vorher 136) - pruef-reaktion 321/0 -
pruef-css-klassen ok - pruef-tippziele 11/0 -
mess-reaktion und mess-buehne ohne Beanstandung

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-28 19:36:05 +02:00

194 lines
7.7 KiB
CSS

/* =====================================================================
DIE SPENDENKARTE (28.09.2026)
Eigenes Stilblatt, weil dieselbe Karte an zwei Orten laeuft: in der
Reaction-Seite und -- spaeter -- als eigene Seite fuer OBS und
TikTok Studio. Zweimal gestaltet hiesse: Bei der naechsten
Aenderung sieht sie an einem der beiden Orte anders aus, und man
merkt es erst im Livestream.
SIE IST GROSS, KURZ UND WEG. Wer etwas gibt, soll es sehen; wer
zusieht, soll das Video nicht verlieren. Deshalb kommt sie von der
Seite, steht ein paar Sekunden am Rand und geht wieder -- sie
deckt nie die Mitte zu.
===================================================================== */
.spendentafel {
position: absolute;
left: 0; right: 0; bottom: 84px;
z-index: 45;
display: grid; gap: 10px;
justify-items: start;
padding: 0 18px;
pointer-events: none;
}
/* ==== DIE GROESSE ==================================================
Filipe: „auch so dass ich das anders gestalten kann oder die
größe verändern kann."
EINE SCHRIFTGRÖSSE UND NICHT ZEHN EINZELWERTE. Die Karte setzt
ihre eigene Grundgröße aus `--sp-gross`, und alles darin rechnet
in `em` — Abstände, Rundungen, das Zeichen, jede Schrift. Ein
Faktor, und die ganze Karte wächst gleichmäßig mit.
Der naheliegende Weg wäre `transform: scale()` gewesen. Der geht
hier nicht: Die Karte kommt mit `transform: translateX()` herein,
und zwei `transform` an derselben Stelle schließen einander aus —
entweder die Größe oder die Bewegung. Außerdem skaliert `scale()`
auch die Schriftglättung mit, und Text wird dabei sichtbar
matschig. Eine Schriftgröße tut das nicht. */
.spendenkarte {
--sp-farbe: #8ec9ff;
--sp-gross: 1;
font-size: calc(1rem * var(--sp-gross));
display: flex; align-items: center; gap: .875em;
max-width: min(30em, 78%);
padding: .8125em 1.25em .8125em .875em;
border-radius: 1.125em;
background:
linear-gradient(90deg,
color-mix(in srgb, var(--sp-farbe) 26%, rgba(10, 8, 16, .92)),
rgba(10, 8, 16, .92) 58%);
border: 1px solid color-mix(in srgb, var(--sp-farbe) 55%, transparent);
box-shadow:
0 0 40px -14px var(--sp-farbe),
0 24px 50px -22px #000,
inset 0 1px 0 color-mix(in srgb, var(--sp-farbe) 40%, transparent);
backdrop-filter: blur(14px) saturate(1.25);
-webkit-backdrop-filter: blur(14px) saturate(1.25);
/* Die Karte kommt von links herein. `translate` und `opacity`
rechnet der Browser auf der Grafikkarte -- alles andere
(Breite, Rand, Abstand) laesst das Bild ruckeln, und ein
ruckelnder Dank ist schlimmer als keiner. */
opacity: 0;
transform: translateX(-28px) scale(.96);
transition: opacity .45s ease, transform .45s cubic-bezier(.22, 1, .3, 1);
}
.spendenkarte[data-da="ja"] { opacity: 1; transform: none; }
.spendenkarte__bild {
flex: none;
width: 3.375em; height: 3.375em;
display: grid; place-items: center;
}
.spendenkarte__bild svg { width: 100%; height: 100%; }
.spendenkarte__bild img {
width: 100%; height: 100%;
/* `contain` und nicht `cover`: Ein hochgeladenes Zeichen soll ganz
zu sehen sein. Wer sein Logo hochlädt, will es nicht beschnitten
wiederfinden. */
object-fit: contain;
border-radius: .625em;
}
.spendenkarte__text { display: grid; gap: 1px; min-width: 0; }
.spendenkarte__wer {
font-size: .8em; font-weight: 700;
letter-spacing: .03em;
color: color-mix(in srgb, var(--sp-farbe) 30%, #ffffff);
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.spendenkarte__betrag {
font-size: 1.62em; font-weight: 900;
letter-spacing: -.02em; line-height: 1.05;
color: #ffffff;
/* Der Betrag ist das, worum es geht -- er bekommt als Einziges
einen eigenen Schein. */
text-shadow: 0 0 22px color-mix(in srgb, var(--sp-farbe) 60%, transparent);
}
/* ==== ZAHL, ZEICHEN UND WORT GEHOEREN ZUSAMMEN =====================
Filipe: „man soll nie die summe sehen sondern die dogen auch mit
dem symbol."
Das Stueck steht auf der Karte, in den Listen im Pult, an den
Knoepfen und beim eigenen Stand -- und ueberall gleich. Es rechnet
in `em`, damit es die Groesse seiner Umgebung annimmt: auf der
Karte gross, in einer Liste klein, ohne eine einzige zweite Zahl.
`baseline` UND NICHT `center`: Das Zeichen sitzt sonst optisch zu
hoch neben einer Ziffer mit Oberlaenge. */
.dogen {
display: inline-flex; align-items: baseline; gap: .28em;
white-space: nowrap;
}
.dogen__zeichen {
/* 1,05em und nicht 0,92: Seit dem 28.09. ist das Zeichen eine
GEZEICHNETE MUENZE mit Pfote, Schriftzug und Steinen -- kein
flaches Symbol mehr. Bei 0,92em neben einer kleinen Zahl war
davon ein Fleck uebrig. Gemessen am Bildschirmfoto: 13,5 px an
den Spendenknoepfen. Ein Zeichen, das man nicht erkennt, ist
keins. */
width: 1.05em; height: 1.05em;
flex: none;
/* Selbst ausrichten, weil `baseline` ein Bild an seine Unterkante
setzt und es damit zu tief haengt. */
align-self: center;
object-fit: contain;
}
.dogen__zahl { font-variant-numeric: tabular-nums; }
/* Das Wort steht kleiner und ruhiger daneben -- die ZAHL ist die
Aussage, „Dogen" ist nur die Einheit. Ein gleich grosses Wort
nimmt der Zahl die Haelfte ihrer Wirkung. */
.dogen__wort {
/* ==== `max()` UND NICHT NUR `em` ==============================
0,52em ist neben der grossen Zahl auf der Karte genau richtig
(rund 13 px) -- in einer Liste im Pult waeren daraus 8 px
geworden. Das Haus hat eine Untergrenze von 11,5 px, und sie
ist kein Geschmack: Darunter liest es niemand mehr, und
`pruef-css-klassen` misst es.
`max()` loest beides mit einer Regel statt mit zwei: Auf der
Karte gewinnt das `em` und waechst mit, in einer Liste gewinnt
der feste Wert. Zwei Regeln fuer dieselbe Frage waeren wieder
die Gelegenheit, dass eine davon irgendwo falsch gewinnt. */
font-size: max(.72rem, .52em);
font-weight: 800;
letter-spacing: .1em; text-transform: uppercase;
opacity: .72;
}
/* An den Spendenknoepfen steht das Wort viermal untereinander --
einmal je Knopf. Das ist kein Zusatz mehr, sondern Rauschen. */
.dogen--nurzahl .dogen__wort { display: none; }
/* ==== DIESELBE MUENZE NICHT ZWEIMAL AUF EINER KARTE ================
Traegt die Karte die Muenze schon gross (das ist ab dem 28.09. die
Vorgabe der drei Stufen), dann steht neben der Zahl keine zweite
in klein. Dieselbe Muenze in zwei Groessen nebeneinander sieht aus
wie ein Versehen -- und die grosse gewinnt ohnehin.
Laedt das Bild nicht, nimmt das Programm die Markierung zurueck,
und die kleine ist wieder da. */
.spendenkarte[data-muenze="ja"] .dogen__zeichen { display: none; }
.spendenkarte__stufe {
font-size: .72em; font-weight: 800;
letter-spacing: .12em; text-transform: uppercase;
color: color-mix(in srgb, var(--sp-farbe) 22%, #ffffff);
}
.spendenkarte__gruss {
margin: .3125em 0 0;
font-size: .86em; line-height: 1.4;
color: #e9e6f2;
/* Hoechstens drei Zeilen. Ein langer Gruss darf das Bild nicht
zuwachsen -- und wer mehr schreiben will, schreibt in den Chat. */
display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical;
overflow: hidden;
}
/* Wer weniger Bewegung eingestellt hat, bekommt die Karte trotzdem --
sie steht dann einfach da. Die Aussage ist wichtiger als der Weg. */
@media (prefers-reduced-motion: reduce) {
.spendenkarte { transition: opacity .2s linear; transform: none; }
}
@media (max-width: 860px) {
.spendentafel { bottom: 12px; padding: 0 10px; }
.spendenkarte {
max-width: 92%;
gap: .625em; padding: .625em .875em .625em .625em;
}
.spendenkarte__bild { width: 2.625em; height: 2.625em; }
.spendenkarte__betrag { font-size: 1.3em; }
}