Files
dogfather-universe/workspace/assets/css/unsere-seiten.css
T
DogFatherGitandClaude Opus 5 f62ade3573 Vertraulicher Meldeweg, klappbare Abschnitte, lila Stunden, Logos
Eine Nacht voller Auftraege von Filipe. Der Reihe nach:

1. VERTRAULICH MELDEN -- der groesste neue Teil.

"es soll auch eine kategorie also eine hauptkachel geben wo die
community leute sich anonym melden koennen wenn sie probleme haben ...
rechte hand und dogfather sollen zugriff auf diese anonyme nachrichten
haben. also anonym fuer die anderen."

WICHTIG, UND ES STEHT SO AUF DER SEITE: "anonym" heisst hier
VERTRAULICH. DogFather und die rechte Hand sehen den Namen -- so
bestellt und auch richtig, ohne Namen kann man niemandem helfen.
Anonym ist es gegenueber allen anderen: kein Modi, kein anderes
Mitglied. Wer glaubt, er schreibe unerkannt, schreibt anders und fuehlt
sich hinterher getaeuscht -- deshalb steht der Satz im Formular, bevor
jemand tippt.

Der strikte Wechsel (melden -> warten -> antworten -> warten) ist im
SERVER erzwungen, nicht nur im Knopf. Ein ausgegrauter Knopf ist keine
Regel. Geschlossen wird nur von der Leitung; abgeschlossene Faelle
werden nach 90 Tagen samt Nachrichten geloescht -- hier stehen die
empfindlichsten Texte des Hauses.

Modis sind ausdruecklich AUSSEN VOR: Sehr oft geht es in diesen
Meldungen um eine Moderationsentscheidung.

2. JEDE KATEGORIE LAESST SICH ZUKLAPPEN.

"man soll auf dieser seite jede kategorie auf und zu klappen koennen
mit einem button ... ueberall wo so eine liste entstehen kann."

Das Muster gab es auf der Startseite schon; es steht jetzt als
`abschnittKlappbar` in kopf.js und wird von den Brettern und dem
Zeitstrahl benutzt. Die Koepfe sind echte <button> (fuer die Tastatur),
der Zustand haelt in localStorage, und er haengt je Brett UND Art --
sonst waere "Regel zugeklappt" ueberall gleichzeitig zu.

3. DIE SPRUNGLEISTE SIEHT AUS WIE ETWAS ZUM ANFASSEN.

Vorher unterstrichene Woerter, die aussahen wie eine Fusszeile. Jetzt
Marken mit Rahmen in einem eigenen Block.

4. DIE STUNDEN SIND LILA.

UMGERECHNET, NICHT NEU GEWAEHLT: Jeder der fuenf Verlaufsstopps wurde
nach OKLCH zerlegt, der Farbton auf 303 Grad gedreht, zurueckgerechnet.
Helligkeit und Buntheit blieben gleich -- eine frei gegriffene Palette
waere heller oder bunter geworden, und die Uhr damit unruhiger.

5. DIE KARTEN "UNSERE SEITEN": babyblau und lila, mit schwebenden Logos.

Beide Logos wurden zu MASKEN gerechnet (tools/logo-maske.mjs): Die PNG
tragen nur Alpha, die Farbe kommt aus dem CSS. Dadurch passt dasselbe
Logo in jede Kachel, egal welchen Ton sie hat -- und VanVans 378-KB-
Logo wurde dabei zu 109 KB. Vier Stueck je Karte, verschieden gross,
zwei Bahnen, 26 bis 41 Sekunden Umlauf. Der erste Versuch war mit 5-9 %
Deckkraft praktisch unsichtbar; jetzt 10-16 %.

6. "ENTWICKLUNG" HEISST JETZT "EURE AUFGABEN".

Filipe hat recht: Die Kachel fuehrt seit dem 11.09. auf den Katalog --
eine Aufgabenliste. Der Name blieb stehen, weil beim Umhaengen des
Ziels niemand ihn angefasst hat. Der Name "Entwicklung" ist damit frei
fuer das, was er darunter versteht (Auswertung je Person mit Verlauf
und Text) -- das ist noch NICHT gebaut.

DREI PRUEFUNGEN, DIE ZUFAELLIG GRUEN WAREN, sind nebenbei aufgefallen:
- pruef-kachelraster wartete feste 500 ms auf eine gestaffelte
  Einblendung und mass vier Reihen, wo drei sind. Jetzt reducedMotion.
- pruef-start-ansicht scrollte 600 px und nahm an, danach liege keine
  Kachel mehr unter dem Zeiger.
- pruef-wege-nach-draussen zaehlte das Kachelraster ueber ALLE Gruppen
  statt je Gruppe.

GEMESSEN: pruef-hilfe (neu) 55/0, pruef-wege-nach-draussen 64/0,
pruef-jeder-hat-eine-seite 65/0, pruef-community-sicht 10/0,
pruef-bereiche-lesend, pruef-steckbrief, pruef-start-ansicht,
pruef-kachelraster alle gruen.

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

428 lines
13 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.
/* =====================================================================
UNSERE SEITEN (19.09.2026)
Zwei Karten, die aus dem Treff hinausführen: die Website und
VanVans Shop.
WARUM SIE ANDERS AUSSEHEN ALS DIE BRETTER-KACHELN: Sie tun etwas
anderes. Eine Brett-Kachel öffnet eine Liste im selben Fenster; diese
hier verlassen den Treff. Dass man das vorher sieht, ist kein
Schmuck, sondern die Ansage — deshalb der eigene Zuschnitt, der
deutlich sichtbare Adressname und der Pfeil nach außen.
AUGENSCHONEND, WIE ÜBERALL IM HAUS: Die Farbe liegt im Verlauf und
im Rand, nie in einer leuchtenden Fläche hinter Text. Bewegung gibt
es nur beim Darüberfahren, und `prefers-reduced-motion` schaltet sie
ganz ab.
===================================================================== */
.seiten-gitter {
display: grid;
gap: 1.1rem;
/* EINE REGEL STATT EINER ZAHL. Zwei Spalten, sobald zweimal 21rem
plus Abstand hineinpassen — und sonst eine. Kommt eine dritte
Karte dazu, ordnet sich das von selbst, ohne dass jemand eine
Schwelle nachziehen muss. */
grid-template-columns: repeat(auto-fit, minmax(min(21rem, 100%), 1fr));
margin: 1.4rem 0 0;
}
.aussen {
position: relative;
isolation: isolate;
overflow: hidden;
display: flex;
flex-direction: column;
gap: .75rem;
padding: 1.35rem 1.35rem 1.2rem;
border-radius: 1.1rem;
border: 1px solid color-mix(in srgb, var(--aussen-ton) 42%, transparent);
/* DREI LAGEN STATT ZWEI (19.09.2026). Filipe: "auch der hintegrrund
der kacheln, ich will es viel spezieller".
Vorher lag der Ton mit 7 % auf der Flaeche -- auf einem dunklen
Bildschirm sieht man davon fast nichts, die Kachel wirkte grau.
Jetzt: ein heller Bogen oben links (woher das Licht kommt), ein
zweiter, schwacher unten rechts (damit die Flaeche nicht flach
kippt) und ein Grundverlauf, der den Ton wirklich traegt.
Nach oben begrenzt bleibt es trotzdem: Der hellste Punkt liegt bei
28 %, und Text steht nie darauf -- er hat seine eigene Lage. */
background:
radial-gradient(120% 95% at 6% -5%,
color-mix(in srgb, var(--aussen-ton) 28%, transparent), transparent 58%),
radial-gradient(90% 80% at 105% 110%,
color-mix(in srgb, var(--aussen-ton) 16%, transparent), transparent 62%),
linear-gradient(158deg,
color-mix(in srgb, var(--aussen-ton) 14%, #0c1420),
#090f1a 72%);
box-shadow:
0 18px 38px -20px color-mix(in srgb, var(--aussen-ton) 85%, transparent),
inset 0 1px 0 color-mix(in srgb, var(--aussen-ton) 22%, transparent);
cursor: pointer;
transition: transform .22s ease, border-color .22s ease, box-shadow .22s ease;
}
/* Die Töne der beiden Karten. Sie stehen hier und nicht im HTML,
damit eine dritte Karte eine Zeile braucht und nicht zehn.
BABYBLAU UND LILA seit dem 19.09.2026 (Filipe: „die linke kachel soll
babyblau sein und rechte lila").
Babyblau ist im Haus schon vergeben — es ist der Ton der Sekunde auf
der Uhr (#7ec8f2), und dieselbe Farbe zweimal anders zu treffen wäre
schlampig. Also derselbe Wert.
Das Lila ist dasselbe, in das an diesem Tag die Stunden der Uhr
umgerechnet wurden (OKLCH-Farbton 303°). Beide Kacheln sprechen
damit die Sprache, die die Startseite ohnehin spricht.
`--logo` nennt die Maske. Sie steht an der Karte und nicht am
Logofeld, damit eine dritte Karte nur diese zwei Zeilen braucht. */
.aussen--dogi {
--aussen-ton: #7ec8f2;
--logo: url("/assets/img/marke/maske-dogi.png");
}
.aussen--shop {
--aussen-ton: #b284ec;
--logo: url("/assets/img/marke/maske-vanvan.png");
}
/* ---- DIE SCHWEBENDEN LOGOS ------------------------------------------
Vier Stück je Karte, verschieden groß, verschieden schnell, mit
verschiedener Verzögerung. Gleich wäre Tapete.
SIE LIEGEN UNTER ALLEM (`z-index: 0` im eigenen Kontext, Text
darüber). Die Deckkraft liegt zwischen 10 und 16 Prozent — der erste
Versuch mit 5 bis 9 war auf dem Bildschirmfoto praktisch unsichtbar,
und „soll mega aussehen" heißt nicht „soll man erahnen können".
Nach oben ist trotzdem eine Grenze: Ab etwa 25 Prozent fängt das
Logo an, mit der Überschrift zu konkurrieren, und der Text wird
mühsam. Was hier entstehen soll, ist Tiefe, kein zweiter Titel.
`mask-image` statt `background-image`: Die PNG-Dateien tragen nur
Alpha. Die Farbe ist `currentColor` der Karte — dadurch ist das
Logo automatisch babyblau bzw. lila, ohne zweite Datei. */
.logo-feld {
position: absolute;
inset: 0;
z-index: 0;
overflow: hidden;
border-radius: inherit;
pointer-events: none;
}
.logo-feld__stueck {
position: absolute;
background-color: var(--aussen-ton);
-webkit-mask-image: var(--logo);
mask-image: var(--logo);
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-size: contain;
mask-size: contain;
-webkit-mask-position: center;
mask-position: center;
will-change: transform;
}
/* Die vier Lagen. Die Zahlen sind gesetzt, nicht gerechnet — ein
Zufallsgenerator würde bei jedem Laden anders aussehen, und dann
fällt niemandem mehr auf, wenn eines daneben liegt. */
.logo-feld__stueck[data-n="1"] {
width: 15rem; height: 15rem; right: -4.5rem; top: -3.5rem;
opacity: .16;
animation: logo-schweben-a 26s ease-in-out infinite;
}
.logo-feld__stueck[data-n="2"] {
width: 8rem; height: 8rem; right: 4.5rem; bottom: -1.5rem;
opacity: .13;
animation: logo-schweben-b 34s ease-in-out infinite;
animation-delay: -6s;
}
.logo-feld__stueck[data-n="3"] {
width: 5rem; height: 5rem; right: 12rem; top: 35%;
opacity: .105;
animation: logo-schweben-a 41s ease-in-out infinite;
animation-delay: -15s;
}
.logo-feld__stueck[data-n="4"] {
width: 3.4rem; height: 3.4rem; right: 2rem; top: 18%;
opacity: .14;
animation: logo-schweben-b 29s ease-in-out infinite;
animation-delay: -21s;
}
/* ZWEI BAHNEN, NICHT EINE. Mit nur einer bewegten sich alle vier
gleich — das sieht aus, als wackle die ganze Kachel. Die zweite
läuft andersherum, dadurch entsteht der Eindruck, dass sie
unabhängig voneinander treiben.
SEHR KLEINE WEGE (unter 14 px) und sehr lange Dauern (26–41 s). Was
man beim Hinsehen als Bewegung erkennt, lenkt beim Lesen ab. Das hier
merkt man erst, wenn man zweimal hinschaut — und genau das ist
gemeint mit „ganz leicht bewegen". */
@keyframes logo-schweben-a {
0% { transform: translate3d(0, 0, 0) rotate(0deg); }
33% { transform: translate3d(-9px, -11px, 0) rotate(2.5deg); }
66% { transform: translate3d(7px, -5px, 0) rotate(-1.8deg); }
100% { transform: translate3d(0, 0, 0) rotate(0deg); }
}
@keyframes logo-schweben-b {
0% { transform: translate3d(0, 0, 0) rotate(0deg); }
40% { transform: translate3d(8px, 9px, 0) rotate(-3deg); }
75% { transform: translate3d(-6px, 4px, 0) rotate(1.5deg); }
100% { transform: translate3d(0, 0, 0) rotate(0deg); }
}
/* Wer weniger Bewegung will, bekommt die Logos trotzdem — nur still.
Sie ganz zu entfernen wäre falsch: Sie sind Gestaltung, nicht
Animation. */
@media (prefers-reduced-motion: reduce) {
.logo-feld__stueck { animation: none; }
}
/* Der stille Schein im Hintergrund. Liegt UNTER allem (`z-index: -1`)
und ist so schwach, dass er bei Tageslicht kaum auffällt — er soll
Tiefe geben, nicht leuchten. */
.aussen__schein {
position: absolute;
inset: -40% -20% auto -20%;
height: 78%;
z-index: -1;
background: radial-gradient(60% 60% at 50% 50%,
color-mix(in srgb, var(--aussen-ton) 34%, transparent), transparent 70%);
filter: blur(30px);
opacity: .7;
pointer-events: none;
}
.aussen:hover,
.aussen:focus-within {
transform: translateY(-3px);
border-color: color-mix(in srgb, var(--aussen-ton) 52%, transparent);
box-shadow: 0 22px 40px -20px color-mix(in srgb, var(--aussen-ton) 85%, transparent);
}
/* ALLES, WAS MAN LIEST, LIEGT ÜBER DEN LOGOS. Ohne diese Zeile wandert
der Text unter das Logofeld, sobald es eine eigene Ebene bekommt —
die Karte sähe dann leer aus, und man sucht den Fehler beim Text. */
.aussen > *:not(.logo-feld):not(.aussen__schein) {
position: relative;
z-index: 1;
}
.aussen__kopf {
display: flex;
align-items: center;
gap: .85rem;
}
.aussen__zeichen {
flex: 0 0 auto;
display: grid;
place-items: center;
width: 3rem;
height: 3rem;
border-radius: .8rem;
border: 1px solid color-mix(in srgb, var(--aussen-ton) 38%, transparent);
background: linear-gradient(150deg,
color-mix(in srgb, var(--aussen-ton) 20%, transparent), transparent 74%);
}
.aussen__zeichen svg {
width: 1.65rem;
height: 1.65rem;
fill: none;
stroke: color-mix(in srgb, var(--aussen-ton) 78%, #dceaf8);
stroke-width: 1.6;
stroke-linecap: round;
stroke-linejoin: round;
}
.aussen__marke {
margin: 0 0 .1rem;
font-size: .74rem;
letter-spacing: .12em;
text-transform: uppercase;
color: color-mix(in srgb, var(--aussen-ton) 55%, #9fb4c9);
}
.aussen__titel {
margin: 0;
font-size: 1.32rem;
line-height: 1.2;
/* Text bleibt hell und ruhig. Die Farbe steckt im Rahmen, nicht in
der Schrift — farbige Überschriften auf dunklem Grund sind der
schnellste Weg zu müden Augen. */
color: #e9f2fb;
}
.aussen__satz {
margin: 0;
color: var(--text-leise, #93a7bd);
font-size: .95rem;
line-height: 1.5;
}
/* Was es auf der Seite gibt. Ruhig gesetzt: Der Punkt links ist ein
kleiner Strich in der Kartenfarbe, kein Aufzählungszeichen — vier
bunte Punkte untereinander wären mehr Unruhe als Information. */
.aussen__liste {
margin: .1rem 0 .2rem;
padding: 0;
list-style: none;
display: grid;
gap: .42rem;
}
.aussen__liste li {
position: relative;
padding-left: 1.05rem;
font-size: .89rem;
line-height: 1.45;
color: var(--text-leise, #93a7bd);
}
.aussen__liste li::before {
content: "";
position: absolute;
left: 0;
top: .62em;
width: .5rem;
height: 1px;
background: color-mix(in srgb, var(--aussen-ton) 60%, transparent);
}
.aussen__weg {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: .6rem;
margin: auto 0 0;
padding-top: .35rem;
}
.aussen__adresse {
font-size: .82rem;
color: color-mix(in srgb, var(--aussen-ton) 45%, #8ea3b9);
word-break: break-all;
}
.aussen__knopf {
flex: 0 0 auto;
display: inline-block;
padding: .55rem 1rem;
border-radius: .6rem;
border: 1px solid color-mix(in srgb, var(--aussen-ton) 45%, transparent);
background: color-mix(in srgb, var(--aussen-ton) 14%, transparent);
color: #eaf3fc;
font-weight: 600;
font-size: .92rem;
text-decoration: none;
/* 44 px hoch, damit ein Daumen ihn trifft. */
min-height: 2.75rem;
display: inline-flex;
align-items: center;
transition: background-color .18s ease, border-color .18s ease;
}
.aussen__knopf:hover,
.aussen__knopf:focus-visible {
background: color-mix(in srgb, var(--aussen-ton) 26%, transparent);
border-color: color-mix(in srgb, var(--aussen-ton) 68%, transparent);
}
/* ---- DER GUTSCHEIN ---------------------------------------------------
Sieht aus wie ein abgerissener Abschnitt, weil genau das gemeint
ist: etwas zum Mitnehmen. Die gestrichelte Linie ist das einzige
Stilmittel — sie sagt "hier abtrennen", ohne ein Wort dafür zu
brauchen. */
.gutschein {
margin: .2rem 0 .1rem;
padding: .9rem 1rem 1rem;
border-radius: .8rem;
border: 1px dashed color-mix(in srgb, var(--aussen-ton) 42%, transparent);
background: color-mix(in srgb, var(--aussen-ton) 8%, transparent);
}
.gutschein__zeile {
display: flex;
align-items: baseline;
gap: .55rem;
margin: 0 0 .6rem;
}
.gutschein__prozent {
font-size: 1.5rem;
font-weight: 700;
line-height: 1;
color: #f2f7fc;
}
.gutschein__wofuer {
font-size: .88rem;
color: var(--text-leise, #93a7bd);
}
.gutschein__code {
display: flex;
align-items: center;
justify-content: space-between;
gap: .7rem;
width: 100%;
min-height: 3rem;
padding: .6rem .9rem;
border-radius: .6rem;
border: 1px solid color-mix(in srgb, var(--aussen-ton) 50%, transparent);
background: rgba(255, 255, 255, .04);
color: #f2f7fc;
cursor: pointer;
text-align: left;
transition: background-color .18s ease, border-color .18s ease;
}
.gutschein__code:hover,
.gutschein__code:focus-visible {
background: rgba(255, 255, 255, .08);
border-color: color-mix(in srgb, var(--aussen-ton) 72%, transparent);
}
.gutschein__wort {
font-family: ui-monospace, "SFMono-Regular", "Cascadia Code", monospace;
font-size: 1.22rem;
font-weight: 700;
letter-spacing: .1em;
}
.gutschein__hinweis {
font-size: .78rem;
color: var(--text-leise, #93a7bd);
text-align: right;
}
/* Nach dem Kopieren steht dort die Bestätigung — in Grün, aber in
einem gedeckten, das auf Dunkel nicht sticht. */
.gutschein__code[data-kopiert="ja"] .gutschein__hinweis { color: #74c79a; }
.gutschein__klein {
margin: .6rem 0 0;
font-size: .78rem;
line-height: 1.45;
color: var(--text-leise, #93a7bd);
}
.seiten-fuss {
margin: 1.4rem 0 0;
font-size: .85rem;
color: var(--text-leise, #93a7bd);
}
/* Wer Bewegung ausgeschaltet hat, bekommt keine. Die Karte bleibt
trotzdem erkennbar bedienbar — über Rand und Schatten. */
@media (prefers-reduced-motion: reduce) {
.aussen,
.aussen__knopf,
.gutschein__code { transition: none; }
.aussen:hover,
.aussen:focus-within { transform: none; }
}