Aufbau steht (Ring links, Titel mittig, Uhr rechts), aber pruef-start-ansicht meldet 3 Befunde am MAUS-LICHT der Kacheln. Gemessen: alter Stand 0 Befunde, dieser Stand 3 — kommt also von hier. Kein JS-Fehler (pageerror/console sind still), also Zeitverhalten: Die zusaetzliche Abfrage /api/zentrale verzoegert vermutlich den Aufbau der Kacheln ueber den Zeitpunkt hinaus, an dem kopf.js lichtFolgen ruft. Ausserdem offen: 2 Schriftgroessen unter 11,5 px (pruef-css-klassen). NICHT ausliefern.
1367 lines
61 KiB
CSS
1367 lines
61 KiB
CSS
/* =====================================================================
|
|
heim.css — was NUR die Startseite braucht.
|
|
|
|
Herausgeloest aus start.css am 07.09.2026: Jene Datei wird von
|
|
dreizehn Seiten geladen und lief mit ueber 200 KB in die Grenze von
|
|
pruef-struktur. Die Begruessungskachel, die Uhr und die Glockenmulde
|
|
darin gibt es aber nur hier.
|
|
|
|
Wer etwas an der Startseite aendert, sucht ab jetzt zuerst in dieser
|
|
Datei -- und wer eine dieser Klassen auf einer ANDEREN Seite benutzen
|
|
will, muss diese Datei dort einbinden. pruef-css-klassen meldet es,
|
|
wenn er es vergisst.
|
|
===================================================================== */
|
|
|
|
/* =====================================================================
|
|
DIE BEGRÜSSUNGSKACHEL — mit Uhr und Glocke (07.09.2026)
|
|
|
|
Wunsch Filipe: "ich will dass diese kacheln da auch übertrieben geil
|
|
gemacht wird, wirklich seeeeeehr hochwertig mit einer runden
|
|
digitalen uhr rechts in der kachel ... und der benachrichtigungs
|
|
button soll auch von der leiste in diese kachel gesetzt werden."
|
|
|
|
---------------------------------------------------------------------
|
|
WARUM DIE UHR HIER RICHTIG IST UND NICHT NUR SCHÖN
|
|
|
|
Eine Uhr ist die einzige Angabe auf dieser Seite, die sich ändert,
|
|
während man hinsieht. Genau das macht sie wertvoll: Sie sagt ohne ein
|
|
Wort, dass die Seite LEBT -- dass die Zahlen daneben von jetzt sind
|
|
und nicht von gestern Nacht. Eine Oberfläche, bei der man das nicht
|
|
weiß, prüft man ständig nach.
|
|
|
|
Und sie steht neben dem Datum, das ohnehin dort steht. Zwei Angaben
|
|
zur selben Frage gehören zusammen; das Datum oben und die Uhrzeit in
|
|
der Fußzeile wären zwei halbe Antworten.
|
|
|
|
---------------------------------------------------------------------
|
|
ZWEI RINGE, NICHT EINER
|
|
|
|
Der innere Ring füllt sich in einer Minute, der äußere in einer
|
|
Stunde. Das ist der Unterschied zwischen "eine Uhr, die tickt" und
|
|
"eine Uhr, an der man den Stand der Stunde sieht" -- man erkennt aus
|
|
dem Augenwinkel, ob die Stunde jung ist oder gleich vorbei.
|
|
|
|
Der Sekundenring läuft NICHT weich. Ein weicher Zeiger sieht teurer
|
|
aus, kostet aber eine Bildberechnung pro Bild statt einer pro
|
|
Sekunde, und auf einer Seite, die stundenlang offen steht, ist das
|
|
der Unterschied zwischen einem warmen und einem kalten Rechner.
|
|
Der Sprung ist außerdem ehrlicher: Die Anzeige ist digital.
|
|
===================================================================== */
|
|
|
|
/* =====================================================================
|
|
DIE KONSOLE — sie gehoert absichtlich NICHT zu den Modulen
|
|
(07.09.2026)
|
|
|
|
Filipe: "diese hauptkachel muss komplett aus der rolle fliegen im
|
|
gegenzug zu den anderen, VIEL SPEZIELLER AUFFAELLIGER UND KRASSER."
|
|
|
|
Hier stand vorher woertlich: "dasselbe Material wie die
|
|
Bereichskacheln, damit nicht zwei Oberflaechen nebeneinanderliegen."
|
|
Das war eine vernuenftige Regel -- und genau sie war das Problem.
|
|
Eine Flaeche, die sich an alle anderen anpasst, kann nicht
|
|
herausstechen. Die Begruessung ist aber keine Kachel unter Kacheln,
|
|
sondern der Anfang der Seite.
|
|
|
|
DREI DINGE MACHEN SIE ZU ETWAS ANDEREM, und alle drei sind FORM,
|
|
nicht Farbe -- das ist die Lehre aus den drei Anlaeufen, die Filipe
|
|
zu Recht als "wieder nur eine kleine Aenderung" bezeichnet hat:
|
|
|
|
1. SIE IST BREITER ALS DIE SEITE. Sie tritt links und rechts ueber
|
|
die Spalte hinaus, in der alle Kacheln stehen. Das ist
|
|
"aus der Reihe fliegen", woertlich genommen: Ihre Kante liegt
|
|
dort, wo bei allem anderen keine mehr ist.
|
|
2. SIE IST EIN ACHTECK. Die Module haben EINE abgeschnittene Ecke
|
|
oben links. Diese Flaeche hat VIER -- eine andere geometrische
|
|
Klasse, erkennbar aus fuenf Metern, ohne ein Wort zu lesen.
|
|
3. SIE HAT EINE METALLFASSUNG. Ein Kegelverlauf mit acht Stopps,
|
|
wie ihn VanVans Business-Hub fuer sein Medaillon benutzt: Hell,
|
|
dunkel, hell, dunkel rundherum -- so wirft gebuerstetes Metall
|
|
das Licht zurueck. Kein Rahmen, sondern ein Werkstoff.
|
|
|
|
Deshalb steht `.willkommen` seit heute NICHT mehr in der Modulliste
|
|
von module.css. Stuende sie dort, bekaeme sie dieselbe Silhouette wie
|
|
siebzehn andere Flaechen -- und module.css laedt nach dieser Datei,
|
|
haette also das letzte Wort. Sie herauszunehmen ist keine Auslassung,
|
|
sondern die Voraussetzung.
|
|
===================================================================== */
|
|
|
|
.willkommen {
|
|
/* Zwei Groessen, ein Ort. Die Fase steht als Variable da, damit
|
|
Silhouette, Fassung und Innenglas garantiert dieselbe benutzen --
|
|
drei getippte Zahlen waeren drei Gelegenheiten, dass die Kante
|
|
einen halben Pixel danebenliegt. */
|
|
--k-fase: 26px;
|
|
--k-rand: 4px;
|
|
|
|
position: relative;
|
|
padding: 26px 30px;
|
|
border: 0;
|
|
border-radius: 0;
|
|
|
|
/* SIE TRITT AUS DER SPALTE HERAUS -- ABER NIE UEBER DEN BILDRAND.
|
|
|
|
Der Wert ist an die Polsterung der Inhaltsspalte GEBUNDEN und
|
|
nicht danebengeschrieben: `.inhalt` hat
|
|
`padding: … clamp(16px, 4vw, 40px)`, also 40 px am Rechner und
|
|
nur 16 px auf dem Handy. Eine feste Zahl waere hier genau die
|
|
Sorte Fehler, die dieses Haus schon zweimal teuer bezahlt hat:
|
|
Bei 1600 px sieht 34 px gut aus, bei 412 px ragt die Flaeche
|
|
17 px aus dem Bildschirm und die Seite laesst sich seitlich
|
|
schieben.
|
|
|
|
`min(34px, 3.6vw)` bleibt an jeder Breite unter der Polsterung --
|
|
3,6 % sind immer weniger als 4 %, und bei den 13 px unter 380 px
|
|
Breite (eigene Regel in start.css) ebenfalls. Gedeckelt bei
|
|
34 px, weil der Ueberstand ein Hinweis sein soll und kein
|
|
Vorsprung.
|
|
|
|
Er steht in einer Variablen, weil ihn drei Regeln brauchen
|
|
(Breite, linker Rand, rechter Rand); drei getippte Zahlen waeren
|
|
drei Gelegenheiten, dass die Konsole schief steht. */
|
|
--k-ueber: min(34px, 3.6vw);
|
|
width: calc(100% + 2 * var(--k-ueber));
|
|
margin-left: calc(-1 * var(--k-ueber));
|
|
margin-right: calc(-1 * var(--k-ueber));
|
|
|
|
/* DIE FASSUNG: gebuerstetes Metall als Kegelverlauf. Acht Stopps,
|
|
nicht zwei -- ein Verlauf von hell nach dunkel ist eine Flaeche mit
|
|
Farbverlauf; erst der WECHSEL hell/dunkel/hell liest sich als
|
|
geschliffenes Metall. Dieselbe Bauart wie das Medaillon auf
|
|
VanVans Business-Hub, nur rechteckig gefasst und mit den beiden
|
|
Hausfarben statt reinem Silber. */
|
|
/* DIE FASSUNG: ROT, SCHWARZ, BABYBLAU -- laengs gebuerstet.
|
|
|
|
Wunsch Filipe: "der rand soll auch eine mischung von rot schwarz
|
|
und babyblau haben."
|
|
|
|
Vorher war sie Stahl mit je einem roten und blauen Tupfer. Jetzt
|
|
sind die drei Farben die Fassung SELBST: links die rote Haelfte,
|
|
rechts die babyblaue, dazwischen und an den Raendern Schwarz --
|
|
und ueberall dort, wo Metall das Licht bricht, die hellen
|
|
Spitzlichter. Es sind dieselben zwei Farben wie im Motiv und auf
|
|
der Anmeldekarte; die Konsole traegt damit die Handschrift des
|
|
Hauses statt einer dritten.
|
|
|
|
ZWEI FEHLER, DIE ICH HIER SCHON GEMACHT HABE und die deshalb im
|
|
Aufbau stecken: Die Farben sind DECKEND (halbdurchsichtiges Metall
|
|
ist kein Metall, es ist graues Glas), und der Verlauf ist LINEAR
|
|
und laeuft der Laenge nach (ein Kegelverlauf trifft auf einem
|
|
1200 px breiten Balken die ganze Oberkante mit wenigen Grad und
|
|
bewirkt nichts). Rund -> conic, lang -> linear. */
|
|
background:
|
|
linear-gradient(96deg,
|
|
#1a0509 0%,
|
|
#ff5f6d 4%,
|
|
#ffe1e4 8%,
|
|
#7a1620 12%,
|
|
#08090e 18%,
|
|
#8b9aad 24%,
|
|
#f6fbff 28%,
|
|
#0a0d14 35%,
|
|
#4d5c72 42%,
|
|
#e8f1fb 47%,
|
|
#06080d 54%,
|
|
#5d7a92 61%,
|
|
#8fd8ff 67%,
|
|
#e6f6ff 71%,
|
|
#123043 76%,
|
|
#070a10 82%,
|
|
#6f8298 88%,
|
|
#f2f8ff 92%,
|
|
#1a0509 100%);
|
|
clip-path: polygon(
|
|
var(--k-fase) 0, calc(100% - var(--k-fase)) 0,
|
|
100% var(--k-fase), 100% calc(100% - var(--k-fase)),
|
|
calc(100% - var(--k-fase)) 100%, var(--k-fase) 100%,
|
|
0 calc(100% - var(--k-fase)), 0 var(--k-fase));
|
|
|
|
/* Die Tiefe liegt im `filter`, nicht im `box-shadow`: Ein
|
|
box-shadow folgt immer dem Rechteck und zeichnete Schatten fuer
|
|
vier Ecken, die es nicht mehr gibt. */
|
|
filter:
|
|
drop-shadow(0 3px 5px rgba(0, 0, 0, .6))
|
|
drop-shadow(0 22px 44px rgba(0, 0, 0, .7));
|
|
}
|
|
|
|
/* DAS INNENGLAS mit dem Raster. Eigene Ebene, damit die Fassung
|
|
ringsum stehen bleibt -- genau wie bei der Uhr und beim Medaillon.
|
|
Der Horizont unten ist der einzige farbige Akzent: Rot links,
|
|
Babyblau rechts, beide weit unter der Blendschwelle.
|
|
|
|
DAS RASTER LIEGT SEIT DEM 07.09.2026 HIER und nicht mehr auf einer
|
|
eigenen halbdurchsichtigen Ebene. Grund: Auf dieser Ebene brauchen
|
|
die Nieten volle Deckkraft (siehe unten), und eine Ebene hat nur
|
|
EINE Deckkraft. Das Raster kommt deshalb als eigene Verlaufsschicht
|
|
mit eigener Alpha -- so ist es genauso leise wie vorher, aber die
|
|
Nieten sind es nicht. Derselbe Fehler wie mit der Koernung im
|
|
August: Wer zwei Dinge auf eine Ebene legt, gibt ihnen dieselbe
|
|
Lautstaerke. */
|
|
.willkommen::before {
|
|
content: ""; position: absolute; inset: var(--k-rand);
|
|
z-index: 0; pointer-events: none;
|
|
clip-path: polygon(
|
|
calc(var(--k-fase) - var(--k-rand)) 0, calc(100% - var(--k-fase) + var(--k-rand)) 0,
|
|
100% calc(var(--k-fase) - var(--k-rand)), 100% calc(100% - var(--k-fase) + var(--k-rand)),
|
|
calc(100% - var(--k-fase) + var(--k-rand)) 100%, calc(var(--k-fase) - var(--k-rand)) 100%,
|
|
0 calc(100% - var(--k-fase) + var(--k-rand)), 0 calc(var(--k-fase) - var(--k-rand)));
|
|
/* DER HINTERGRUND -- SECHS SCHICHTEN, VON OBEN NACH UNTEN GELESEN.
|
|
|
|
Wunsch Filipe: "die kachel selbst soll einen uebertrieben krank
|
|
geilen hintergrund haben ... die einzige kachel, die komplett aus
|
|
dem rudel faellt."
|
|
|
|
1 die Lichtkante ganz oben -- die Innenseite der Fassung
|
|
2 das KOHLEFASERGEWEBE: zwei gegenlaeufige Schraegen, die sich
|
|
zu einem Geflecht kreuzen. Bei drei Prozent sieht man kein
|
|
Muster, man sieht ein MATERIAL -- und genau darum geht es.
|
|
Ein Gewebe sagt "gebaut", ein Raster sagt "gezeichnet".
|
|
3 das feine Messraster (bleibt, es gehoert zur Sprache des Hauses)
|
|
4 DER HORIZONT: ein heller Strich im unteren Drittel mit einem
|
|
Schein darueber. Er gibt der Flaeche eine Tiefe, die kein
|
|
Verlauf allein herstellt -- das Auge liest ihn als Kante
|
|
zwischen "vorn" und "hinten".
|
|
5 die beiden Farbbecken: Rot links unten, Babyblau rechts unten
|
|
-- kraeftiger als bisher, weil sie jetzt gegen ein Material
|
|
arbeiten und nicht gegen eine leere Flaeche
|
|
6 der Grund: fast schwarz, mit einem Blauschimmer oben
|
|
|
|
ALLES WEIT UNTER DER BLENDSCHWELLE. Die Regel des Hauses gilt auch
|
|
fuer "krank geil": Es darf beeindrucken, es darf nicht blenden. */
|
|
background:
|
|
linear-gradient(180deg, rgba(255, 255, 255, .13) 0 1px, transparent 1px),
|
|
repeating-linear-gradient(58deg,
|
|
rgba(190, 215, 245, .030) 0 1px, transparent 1px 7px),
|
|
repeating-linear-gradient(-58deg,
|
|
rgba(190, 215, 245, .030) 0 1px, transparent 1px 7px),
|
|
repeating-linear-gradient(0deg, rgba(150, 186, 220, .075) 0 1px, transparent 1px 16px),
|
|
repeating-linear-gradient(90deg, rgba(150, 186, 220, .075) 0 1px, transparent 1px 16px),
|
|
linear-gradient(180deg, transparent 0 71%,
|
|
rgba(190, 220, 255, .16) 71% calc(71% + 1px), transparent calc(71% + 1px)),
|
|
radial-gradient(90% 34% at 50% 71%, rgba(150, 200, 255, .10), transparent 70%),
|
|
radial-gradient(120% 95% at 2% 112%, rgba(255, 78, 94, .26), transparent 54%),
|
|
radial-gradient(120% 95% at 98% 112%, rgba(120, 205, 255, .26), transparent 54%),
|
|
radial-gradient(140% 120% at 50% -30%, rgba(96, 140, 200, .16), transparent 62%),
|
|
linear-gradient(168deg, #0f1522 0%, #080c14 58%, #04060b 100%);
|
|
}
|
|
|
|
/* =====================================================================
|
|
STUFE 1: VIER NIETEN -- die Konsole ist MONTIERT (07.09.2026)
|
|
|
|
Filipe: "noch viel viel viel spezieller, setz noch eine drauf, und
|
|
dan noch eine drauf und dan noch eine drauf."
|
|
|
|
Das Einzige, was eine Flaeche endgueltig von einem Bildschirmkasten
|
|
zu einem GEGENSTAND macht, ist die Frage, wie sie befestigt ist.
|
|
Ein Gehaeuse haengt nicht in der Luft -- es ist verschraubt. Vier
|
|
Nieten in den vier Fasen beantworten diese Frage, und sie
|
|
beantworten sie an genau den Stellen, an denen ein Konstrukteur
|
|
sie auch setzen wuerde: dort, wo das Material am dicksten ist.
|
|
|
|
Jede Niete ist EIN Kegelverlauf (das gedrehte Metall des Kopfes) und
|
|
ein Radialverlauf darueber (die Woelbung: Licht oben links, Schatten
|
|
unten rechts). Acht Ebenen fuer vier Nieten, kein einziges Element
|
|
mehr im Baum.
|
|
===================================================================== */
|
|
.willkommen::after {
|
|
content: ""; position: absolute; inset: var(--k-rand);
|
|
z-index: 0; pointer-events: none;
|
|
clip-path: inherit;
|
|
/* RUND, UND ZWAR AUS SICH SELBST HERAUS.
|
|
|
|
Der erste Anlauf nahm einen Kegelverlauf fuer das Metall und
|
|
schnitt ihn mit `background-size` auf 9x9 Pixel zurecht. Das
|
|
Ergebnis waren vier graue QUADRATE: Eine Hintergrundebene laesst
|
|
sich nicht runden -- `border-radius` gilt fuer das Element, nicht
|
|
fuer eine ihrer Ebenen, und eine Maske haette alle acht Ebenen
|
|
zugleich getroffen.
|
|
|
|
Ein Radialverlauf dagegen IST rund: Wo sein letzter Stopp
|
|
durchsichtig wird, hoert die Form auf. Deshalb bestehen die
|
|
Nieten jetzt aus zwei Radialverlaeufen -- einer fuer den Kopf mit
|
|
Rand, einer fuer die Woelbung. `closest-side` sorgt dafuer, dass
|
|
100 % der Radius sind und nicht die weiteste Ecke; genau der
|
|
Fehler, der heute die Skala der Uhr unsichtbar gemacht hat. */
|
|
--niete-metall: radial-gradient(circle closest-side,
|
|
#e6eff9 0%, #b6c6d9 38%, #64758c 74%,
|
|
#39465a 90%, rgba(6, 10, 18, .95) 97%, transparent 100%);
|
|
--niete-woelbung: radial-gradient(circle closest-side at 34% 30%,
|
|
rgba(255, 255, 255, .8) 0%, rgba(255, 255, 255, 0) 46%,
|
|
rgba(0, 0, 0, .45) 88%, transparent 100%);
|
|
background:
|
|
var(--niete-woelbung), var(--niete-metall),
|
|
var(--niete-woelbung), var(--niete-metall),
|
|
var(--niete-woelbung), var(--niete-metall),
|
|
var(--niete-woelbung), var(--niete-metall);
|
|
background-repeat: no-repeat;
|
|
background-size: 11px 11px, 11px 11px, 11px 11px, 11px 11px,
|
|
11px 11px, 11px 11px, 11px 11px, 11px 11px;
|
|
/* In der Fase, nicht in der Ecke: Die Ecke gibt es nicht mehr. */
|
|
background-position:
|
|
left 8px top 8px, left 8px top 8px,
|
|
right 8px top 8px, right 8px top 8px,
|
|
right 8px bottom 8px, right 8px bottom 8px,
|
|
left 8px bottom 8px, left 8px bottom 8px;
|
|
}
|
|
|
|
/* `:not(.licht)` -- dieselbe Falle wie in module.css, und ich bin
|
|
heute schon einmal hineingelaufen: Das Lichtelement ist ein direktes
|
|
KIND der Flaeche. `position: relative` nimmt ihm sein `absolute` und
|
|
macht aus einer Flaeche ueber der ganzen Konsole einen leeren
|
|
Inline-Span. Eine Regel auf `> *` trifft eben auch das, was gar kein
|
|
Inhalt ist. */
|
|
.willkommen > *:not(.licht) { position: relative; z-index: 1; }
|
|
|
|
/* =====================================================================
|
|
DAS LICHT AUF DER KONSOLE IST EINE SPIEGELUNG, KEIN FARBSCHLEIER
|
|
|
|
Auf den Kacheln leuchtet das Licht in der Farbe der Kategorie -- dort
|
|
ist es ein Hinweis. Hier waere dasselbe falsch: Die Konsole gehoert
|
|
zu keiner Kategorie, und ein farbiger Schleier auf gebuerstetem
|
|
Metall sieht aus wie eine Folie darauf.
|
|
|
|
Metall zeigt seine Form ueber die SPIEGELUNG. Deshalb ist das Licht
|
|
hier weiss, schmal und hart an der Kante -- es wandert ueber die
|
|
Fassung wie ein Fenster, an dem man vorbeigeht. Erst dadurch sieht
|
|
man, dass die Fassung gewoelbt ist; ein Standbild kann das nicht.
|
|
===================================================================== */
|
|
.willkommen > .licht {
|
|
z-index: 2; /* ueber Glas und Nieten, unter dem Text */
|
|
clip-path: inherit;
|
|
}
|
|
/* Der weiche Schein auf der Glasflaeche -- sehr leise, er soll den Text
|
|
nicht anheben. */
|
|
.willkommen > .licht::before {
|
|
background: radial-gradient(340px circle at var(--mx, 50%) var(--my, 50%),
|
|
rgba(190, 220, 255, .085), transparent 62%);
|
|
}
|
|
/* Die eigentliche Spiegelung: ein enger, heller Fleck, den die Maske auf
|
|
die FASSUNG begrenzt -- also genau auf das Metall und nicht auf die
|
|
Flaeche daneben. */
|
|
.willkommen > .licht::after {
|
|
padding: var(--k-rand);
|
|
background: radial-gradient(230px circle at var(--mx, 50%) var(--my, 50%),
|
|
rgba(255, 255, 255, .95),
|
|
rgba(214, 232, 255, .42) 34%,
|
|
rgba(160, 190, 225, .12) 58%,
|
|
transparent 74%);
|
|
}
|
|
|
|
/* =====================================================================
|
|
DREI SPALTEN: RING — TEXT — UHR (08.09.2026)
|
|
|
|
Uebernommen von VanVans Werktisch im Business Hub, auf Wunsch Filipes
|
|
("das model da uebernehmen und es noch perfektionieren"). Vorher stand
|
|
hier eine FLEX-Zeile: Bild, Text, Zahlen, Uhr -- alles nebeneinander,
|
|
mit rund 300 px Leere in der Mitte. Das war eine Zeile mit einer
|
|
Luecke, keine Tafel.
|
|
|
|
`minmax(0, 1fr)` FUER DIE MITTE, nicht `1fr`. Das ist im Vorbild
|
|
ausdruecklich vermerkt, und der Grund ist nachlesenswert: `1fr` geht
|
|
nie unter die Mindestbreite seines Inhalts. Eine nicht umbrechende
|
|
Anrede und eine Zahlenreihe zwingen die Spalte damit auf 470 px -- auf
|
|
einem 390-px-Schirm. Die ganze Seite laesst sich dann seitlich
|
|
wegschieben. Mit `minmax(0, 1fr)` darf die Spalte schmaler werden als
|
|
ihr Inhalt, und der Inhalt bricht um, statt hinauszuragen.
|
|
|
|
Ich habe den Fehler nicht selbst gemacht, sondern die Begruendung
|
|
mituebernommen -- eine Loesung ohne ihren Grund haelt genau bis zum
|
|
naechsten Umbau. */
|
|
.willkommen__reihe {
|
|
display: grid;
|
|
grid-template-columns: minmax(180px, 232px) minmax(0, 1fr) minmax(180px, 232px);
|
|
gap: 26px; align-items: center;
|
|
}
|
|
.willkommen__text {
|
|
min-width: 0;
|
|
display: flex; flex-direction: column; align-items: center; gap: 9px;
|
|
text-align: center;
|
|
}
|
|
|
|
/* ---- Der Ring links ------------------------------------------------
|
|
Gleich gross wie die Uhr rechts. Im Vorbild steht dazu: "Beide Kreise
|
|
exakt gleich gross -- sie sind ein Paar, kein Haupt- und Nebenkreis."
|
|
Das ist der Grund, warum die Tafel ruhig wirkt: zwei gleiche Gewichte
|
|
links und rechts, dazwischen der Text. */
|
|
.zring {
|
|
position: relative; aspect-ratio: 1; width: 100%; max-width: 232px;
|
|
margin: 0 auto;
|
|
}
|
|
.zring__bild {
|
|
width: 100%; height: 100%; display: block;
|
|
/* Bei -90 Grad beginnt das erste Segment oben statt rechts -- so
|
|
liest man einen Fortschritt, seit es Uhren gibt. */
|
|
transform: rotate(-90deg);
|
|
}
|
|
.zring__mitte {
|
|
position: absolute; inset: 0;
|
|
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
|
gap: 2px; pointer-events: none;
|
|
}
|
|
/* DAS SIEGEL IST RUND -- und das ist eine Reparatur, keine Stilfrage.
|
|
|
|
Erst stand hier dieselbe Maske wie in der Kopfleiste:
|
|
-webkit-mask: url("../img/marke-husky.webp") ...
|
|
Im Nahaufnahme-Bildschirmfoto war das Ergebnis ein KASTEN mit einem
|
|
Husky darin, kein freigestellter Husky.
|
|
|
|
Nachgemessen: Die Datei hat einen Alphakanal (VP8X mit ALPH-Chunk,
|
|
Alpha-Flag gesetzt) -- er ist nur RECHTECKIG. Das Bild ist nicht
|
|
freigestellt. Als Maske taugt es damit nicht, egal wie richtig die
|
|
CSS-Zeile ist.
|
|
|
|
BEFUND FUER SPAETER: Dasselbe gilt fuer `.kopfleiste .marke::before`
|
|
in start.css -- dort ist es bei 22 px nur nicht aufgefallen. Wer das
|
|
Logo einmal freistellt, repariert beide Stellen auf einmal.
|
|
|
|
Hier wird es deshalb als BILD gezeigt und rund beschnitten, mit
|
|
einem feinen Ring darum. Das ist naeher am Vorbild als die Maske es
|
|
je war: VanVans Werktisch traegt in der Mitte ein rundes Siegel, kein
|
|
ausgeschnittenes Zeichen. */
|
|
.zring__siegel {
|
|
width: 44px; height: 44px; margin-bottom: 5px;
|
|
border-radius: 50%;
|
|
background: url("../img/marke-husky.webp") center / 128% no-repeat, #0b1420;
|
|
box-shadow:
|
|
0 0 0 1px rgba(180, 210, 240, .28),
|
|
inset 0 0 12px rgba(0, 0, 0, .55);
|
|
/* Etwas entsaettigt und abgedunkelt: Das Siegel ist der ruhige Kern
|
|
des Rings, nicht sein hellster Punkt -- sonst zieht es den Blick von
|
|
der Zahl darunter ab, um die es geht. */
|
|
filter: saturate(.55) brightness(.92);
|
|
}
|
|
.zring__prozent {
|
|
font-size: 1.85rem; font-weight: 700; line-height: 1;
|
|
font-variant-numeric: tabular-nums;
|
|
color: #dfeaf6;
|
|
text-shadow: 0 0 16px rgba(127, 196, 242, .3);
|
|
}
|
|
/* ZWEIZEILIG, UND DAS IST GEWOLLT.
|
|
|
|
Erst stand hier `max-width: 78%` bei .68rem. In der Nahaufnahme lief
|
|
"DES TEAMS VERSORGT" als eine Zeile quer ueber die Segmentbahn -- der
|
|
Ring war dahinter durchgestrichen.
|
|
|
|
Der innere Segmentring liegt bei Radius 106 von 150, also auf 71 % der
|
|
Breite. Alles darunter muss schmaler bleiben als das, sonst kreuzt es
|
|
ihn. 58 % lassen dem Text Luft und zwingen ihn in zwei Zeilen -- genau
|
|
wie im Vorbild, wo "DEINER PRODUKTAKTEN" ebenfalls umbricht.
|
|
|
|
.72rem statt .68rem, weil 10,9 px unter meiner eigenen Untergrenze von
|
|
11,5 px lagen. Die Regel gilt auch fuer Text, den man nur ueberfliegt. */
|
|
.zring__unter {
|
|
font-size: .72rem; letter-spacing: .06em; text-transform: uppercase;
|
|
color: rgba(168, 192, 218, .66);
|
|
max-width: 58%; text-align: center; line-height: 1.25;
|
|
text-wrap: balance; /* zwei gleich lange Zeilen statt 4+1 Woertern */
|
|
}
|
|
|
|
/* ---- Die Anrede in eigener Fassung -------------------------------- */
|
|
.zgruss {
|
|
display: inline-flex; align-items: center; gap: 11px;
|
|
padding: 7px 15px 7px 8px;
|
|
border-radius: 999px;
|
|
background: linear-gradient(178deg, rgba(10, 18, 30, .62), rgba(6, 12, 21, .48));
|
|
box-shadow:
|
|
inset 0 1px 0 rgba(160, 195, 230, .13),
|
|
0 1px 10px rgba(0, 0, 0, .3);
|
|
max-width: 100%;
|
|
}
|
|
.zgruss__bild {
|
|
width: 42px; height: 42px; flex: 0 0 auto;
|
|
border-radius: 50%;
|
|
background-size: cover; background-position: center;
|
|
background-color: rgba(120, 160, 200, .16);
|
|
box-shadow: 0 0 0 1px rgba(180, 210, 240, .22), inset 0 0 14px rgba(0, 0, 0, .5);
|
|
display: grid; place-items: center;
|
|
font-weight: 700; color: #cfe2f5;
|
|
}
|
|
.zgruss__text { display: flex; flex-direction: column; gap: 1px; min-width: 0; text-align: left; }
|
|
.zgruss__datum { font-size: .78rem; color: rgba(168, 192, 218, .72); }
|
|
.zgruss__rolle {
|
|
flex: 0 0 auto;
|
|
padding: 4px 11px; border-radius: 999px;
|
|
font-size: .66rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
|
|
color: #e6c88a;
|
|
border: 1px solid rgba(227, 179, 65, .34);
|
|
background: rgba(227, 179, 65, .09);
|
|
}
|
|
|
|
/* ---- Zierzeile und Titel ------------------------------------------ */
|
|
.zmarke {
|
|
display: inline-flex; align-items: center; gap: 11px;
|
|
font-size: .68rem; font-weight: 600; letter-spacing: .24em; text-transform: uppercase;
|
|
color: rgba(196, 214, 234, .6);
|
|
margin-top: 3px;
|
|
}
|
|
/* Die Raute ist ein ELEMENT, kein Schriftzeichen. Ein ◆ aus der
|
|
Schriftart sitzt nie auf der Grundlinie und sieht auf jedem Geraet
|
|
anders aus -- im Vorbild steht dieselbe Ueberlegung. */
|
|
.zraute {
|
|
width: 5px; height: 5px; flex: 0 0 auto;
|
|
transform: rotate(45deg);
|
|
background: rgba(227, 179, 65, .62);
|
|
}
|
|
/* ZWEI STUFEN, wie im Vorbild -- nicht eine.
|
|
|
|
Bei mittlerer Breite fehlt zuerst der Platz fuer DREI Spalten, aber
|
|
noch lange nicht fuer zwei: Der Ring bleibt links neben dem Text, die
|
|
Uhr rutscht darunter und in die Mitte. Erst wenn auch das nicht mehr
|
|
reicht, steht alles untereinander.
|
|
|
|
Die Zahlen 1180 und 780 sind aus dem Vorbild uebernommen, wo sie an
|
|
echten Geraeten entstanden sind. Sie stehen hier zusammen mit dem,
|
|
was sie zaehlen -- wer eine vierte Spalte hinzufuegt, muss sie neu
|
|
messen. Genau das ist im September einmal vergessen worden, und der
|
|
Sicht-Umschalter lag danach ueber dem Chat-Knopf. */
|
|
@media (max-width: 1180px) {
|
|
.willkommen__reihe { grid-template-columns: minmax(170px, 220px) minmax(0, 1fr); }
|
|
.willkommen__rechts { grid-column: 1 / -1; justify-content: center; margin-left: 0; }
|
|
}
|
|
@media (max-width: 780px) {
|
|
.willkommen__reihe { grid-template-columns: minmax(0, 1fr); gap: 20px; }
|
|
.zring { max-width: 190px; }
|
|
.zgruss { flex-wrap: wrap; justify-content: center; }
|
|
.zgruss__text { text-align: center; align-items: center; }
|
|
}
|
|
|
|
/* Der Satz unter dem Titel bekommt Fliesstextgroesse und darf umbrechen.
|
|
|
|
Im Vorbild stehen dort drei Zeilen ("Ich habe deine 253 Produkte
|
|
durchgesehen und 1561 von 1720 Angaben schon eingetragen ..."), und
|
|
genau die machen aus einer Anzeigetafel eine Ansprache. Bei mir ist
|
|
der Satz kuerzer -- er kommt aus derselben Zaehlung wie die Hinweise
|
|
darunter und wird nicht zweimal gerechnet -- aber er soll denselben
|
|
Raum bekommen statt als Kleingedrucktes am Titel zu kleben.
|
|
|
|
`text-wrap: balance` verteilt die Zeilen gleichmaessig, statt die
|
|
letzte mit einem einzelnen Wort enden zu lassen. */
|
|
.willkommen__reihe .unterzeile {
|
|
font-size: 1rem; line-height: 1.55;
|
|
max-width: 46ch; margin: 2px auto 0;
|
|
text-wrap: balance;
|
|
}
|
|
|
|
.ztitel {
|
|
margin: 0;
|
|
font-size: clamp(1.9rem, 3.6vw, 2.9rem);
|
|
font-weight: 700; line-height: 1.06; letter-spacing: -.01em;
|
|
color: #dce9f6;
|
|
/* Ein Verlauf statt einer Volltonfarbe: Der Titel bekommt oben Licht
|
|
und unten Schatten, wie ein gefraester Schriftzug auf Metall. */
|
|
background: linear-gradient(178deg, #eef5fc 8%, #b9cee2 58%, #7f95ad 100%);
|
|
-webkit-background-clip: text; background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
}
|
|
|
|
/* Rechts: Glocke neben der Uhr, beide rechtsbündig. `margin-left: auto`
|
|
statt `justify-content: space-between` am Elternteil -- so bleibt die
|
|
Gruppe auch dann rechts, wenn der Text davor kurz ist. */
|
|
/* =====================================================================
|
|
STUFE 2: EINE GEFRAESTE NUT trennt Text von Instrumenten.
|
|
|
|
Auf einer echten Konsole liegen Anzeige und Beschriftung nicht auf
|
|
derselben Flaeche -- dazwischen laeuft eine Nut. Sie ist keine Linie,
|
|
sondern eine VERTIEFUNG, und daran erkennt man sie: dunkel auf der
|
|
Lichtseite, hell auf der Schattenseite. Genau umgekehrt zu einer
|
|
aufgemalten Trennlinie, und genau deshalb sieht sie nach Material
|
|
aus statt nach Dekoration.
|
|
|
|
STUFE 3: DIE UHR SITZT IN EINER MULDE.
|
|
|
|
Sie lag bisher AUF der Konsole. Ein Instrument wird aber in eine
|
|
Fraesung eingesetzt: eine runde Vertiefung, etwas groesser als das
|
|
Gehaeuse, mit Schatten oben (dort faellt kein Licht mehr hinein) und
|
|
einem hellen Bogen unten (dort trifft es die gegenueberliegende
|
|
Wand). Beides zusammen macht aus "davor" ein "darin".
|
|
===================================================================== */
|
|
.willkommen__rechts { position: relative; }
|
|
|
|
/* Die Nut. */
|
|
.willkommen__rechts::before {
|
|
content: ""; position: absolute;
|
|
left: -18px; top: -14px; bottom: -14px; width: 2px;
|
|
pointer-events: none; z-index: 0;
|
|
background: linear-gradient(90deg,
|
|
rgba(0, 0, 0, .75) 0 1px,
|
|
rgba(255, 255, 255, .13) 1px 2px);
|
|
border-radius: 1px;
|
|
}
|
|
|
|
/* DIE INSTRUMENTE LIEGEN UEBER DER MULDE -- und das muss ausdruecklich
|
|
dastehen. `::after` wird NACH allen Kindern gezeichnet; bei gleichem
|
|
Stapelwert gewinnt das spaetere Element. Die Mulde lag deshalb OBEN
|
|
und hat die Luenette der Uhr von poliertem Stahl zu mattem Grau
|
|
gedaempft -- im Bildschirmfoto gesehen, im Vergleich mit der Aufnahme
|
|
von vorhin. Ein Stapelwert von 1 stellt die Reihenfolge her, die der
|
|
Name schon behauptet. */
|
|
.willkommen__rechts > * { position: relative; z-index: 1; }
|
|
|
|
/* DIE MULDE HAENGT AN DER UHR, NICHT AM KASTEN DANEBEN.
|
|
|
|
Der erste Anlauf setzte sie als eigene Flaeche in die rechte Haelfte
|
|
der Konsole, ausgerichtet an deren rechtem Rand. Am Rechner passte
|
|
das; auf dem Handy steht die Uhr MITTIG, und die Mulde lag als
|
|
dunkle Scheibe daneben. Im Bildschirmfoto bei 412 px gesehen.
|
|
|
|
Jetzt entsteht sie aus zwei Schattenringen der Uhr selbst (siehe
|
|
`.uhr` weiter oben): Sie ist damit automatisch konzentrisch, bei
|
|
jeder Groesse und an jedem Ort. Das ist die bessere Bauart, nicht
|
|
nur die reparierte -- eine Fassung, die man ausrichten MUSS, richtet
|
|
irgendwann jemand falsch aus.
|
|
|
|
Die Nut daneben bleibt am Kasten: Sie trennt zwei BEREICHE, nicht
|
|
zwei Bauteile. Auf dem Handy gibt es diese Trennung nicht mehr
|
|
(dort steht alles untereinander), deshalb faellt sie dort weg. */
|
|
|
|
/* =====================================================================
|
|
DIE MITTE DER KONSOLE: DREI EINGELASSENE ABLESUNGEN
|
|
|
|
Gemessen, nicht geschaetzt: Auf 1440 px lagen zwischen dem Ende des
|
|
Textes und der Uhr rund 300 px Leere. Auf einer Konsole ist eine
|
|
leere Flaeche keine Ruhe, sondern ein fehlendes Bauteil.
|
|
|
|
Sie sind EINGELASSEN, nicht aufgesetzt -- dieselbe Bauart wie die
|
|
Uhrmulde daneben, damit die Kachel EIN Stueck bleibt und nicht in
|
|
zwei Stile zerfaellt:
|
|
- dunkler Grund (in einer Fraesung faellt weniger Licht an)
|
|
- Schatten oben INNEN, heller Bogen unten INNEN (die
|
|
gegenueberliegende Wand faengt das Licht)
|
|
- haarfeine helle Kante aussen unten (die Oberkante der Fraesung)
|
|
Ein `box-shadow: inset` allein reicht dafuer nicht: Es macht eine
|
|
Delle, aber keinen Rand. Erst die zweite, helle Kante macht daraus
|
|
ein Loch mit Wand.
|
|
|
|
`flex: 0 1 auto` und `flex-wrap` am Elternteil: Wird der Platz eng,
|
|
RUTSCHT die Gruppe unter den Text, statt sich zu quetschen. Das ist
|
|
Absicht und ersetzt eine feste Umbruchbreite -- eine Zahl, die zaehlt,
|
|
was daneben steht, wird beim naechsten hinzugefuegten Element falsch,
|
|
und zwar still. Genau so lag im September der Sicht-Umschalter ueber
|
|
dem Chat-Knopf. */
|
|
/* EINE FASSUNG, DREI FELDER -- nicht drei Kaestchen nebeneinander.
|
|
|
|
Der erste Anlauf gab jedem Wert eine eigene Fraesung. Im Bild sah das
|
|
aus wie drei aufgeklebte Plaettchen: Ein Instrumentenblock auf einer
|
|
Konsole ist EIN eingelassenes Feld, in dem STEGE die Ablesungen
|
|
trennen. Der Unterschied ist nicht Geschmack, sondern Bauweise -- und
|
|
man sieht ihn sofort, weil das Licht nur einmal ueber eine Kante
|
|
laeuft statt sechsmal.
|
|
|
|
Der Steg ist zwei Linien breit, nie eine: dunkel auf der Lichtseite,
|
|
hell auf der Schattenseite. Eine einzelne Linie ist ein Strich, zwei
|
|
sind eine Kante. Dieselbe Regel wie bei der Nut daneben. */
|
|
.willkommen__stand {
|
|
display: flex; align-items: stretch;
|
|
margin-left: auto; flex: 0 1 auto;
|
|
padding: 3px;
|
|
border-radius: 13px;
|
|
background:
|
|
linear-gradient(178deg, rgba(3, 8, 15, .78), rgba(10, 18, 29, .54));
|
|
box-shadow:
|
|
inset 0 4px 9px rgba(0, 0, 0, .66), /* Schatten der Oberkante */
|
|
inset 0 -1px 0 rgba(150, 185, 220, .17), /* Licht auf der Gegenwand */
|
|
0 1px 0 rgba(170, 200, 235, .10); /* Kante der Fraesung */
|
|
}
|
|
.stand {
|
|
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
|
gap: 4px;
|
|
min-width: 86px; padding: 10px 15px 9px;
|
|
position: relative;
|
|
}
|
|
/* Der Steg zwischen zwei Feldern -- am zweiten und dritten, nicht am
|
|
ersten. `::before` statt `border-left`, weil eine Kante aus zwei
|
|
Farben besteht. */
|
|
.stand + .stand::before {
|
|
content: ""; position: absolute; left: 0; top: 14%; bottom: 14%;
|
|
width: 2px;
|
|
background: linear-gradient(90deg,
|
|
rgba(0, 0, 0, .5) 0 1px, rgba(160, 195, 230, .13) 1px 2px);
|
|
}
|
|
.stand__wert {
|
|
font-size: 1.55rem; font-weight: 700; line-height: 1;
|
|
font-variant-numeric: tabular-nums; /* springt nicht beim Zaehlen */
|
|
letter-spacing: .01em;
|
|
color: var(--stand-farbe, #cfe2f5);
|
|
/* Ein Hauch Eigenlicht -- so viel, dass die Ziffer in der Fraesung
|
|
leuchtet, so wenig, dass sie scharf bleibt. Kein blur() auf der
|
|
Schrift selbst; das war beim ersten Uhr-Anlauf der Vorwurf. */
|
|
text-shadow: 0 0 12px color-mix(in srgb, var(--stand-farbe, #cfe2f5) 34%, transparent);
|
|
}
|
|
/* 11,5 px IST DIE UNTERGRENZE, auch fuer ein Schildchen (08.09.2026).
|
|
|
|
Hier stand `.58rem` -- 9,3 px. pruef-css-klassen hat es gemeldet, und
|
|
zwar nicht als Geschmacksfrage: Die Zahl der Stellen unter 11,5 px war
|
|
um genau eine gestiegen. Gesperrte Grossbuchstaben in 9 px liest man
|
|
nicht, man erraet sie -- und "augenschonend" gilt ueberall, nicht nur
|
|
dort, wo es auffaellt.
|
|
|
|
Die Sperrung faellt dafuer etwas kleiner aus: Was groesser wird, darf
|
|
nicht auch noch breiter werden, sonst passen drei Schilder bei 320 px
|
|
nicht mehr nebeneinander. Nachgemessen, nicht geschaetzt. */
|
|
.stand__schild {
|
|
font-size: .72rem; font-weight: 600; letter-spacing: .09em;
|
|
text-transform: uppercase;
|
|
color: rgba(168, 192, 218, .62);
|
|
white-space: nowrap;
|
|
}
|
|
/* Eine Farbe je Ablesung -- dieselbe Idee wie bei den Terminarten:
|
|
Die Farbe gehoert zur Sache. Babyblau fuer den Tag, Bernstein fuer
|
|
das Naechste, und Offen wechselt mit der Lage. */
|
|
.stand[data-stand="heute"] { --stand-farbe: #7fc4f2; }
|
|
.stand[data-stand="naechster"] { --stand-farbe: #e3b341; }
|
|
.stand[data-stand="offen"] { --stand-farbe: #8fb3cf; }
|
|
.stand[data-stand="offen"][data-stufe="offen"] { --stand-farbe: #e3b341; }
|
|
.stand[data-stand="offen"][data-stufe="warnung"] { --stand-farbe: #ff6b74; }
|
|
/* Ruhig heisst ruhig: kein Grasgruen in einer Konsole, die sonst aus
|
|
Blau und Rot besteht -- ein gedaempftes Petrol sagt dasselbe, ohne
|
|
die Augen zu stechen (augenschonend gilt ueberall). */
|
|
.stand[data-stand="offen"][data-stufe="ruhig"] { --stand-farbe: #57b89b; }
|
|
|
|
/* `margin-left: auto` BLEIBT HIER, obwohl der Stand daneben es auch hat.
|
|
|
|
Beim Bauen hatte ich es weggenommen -- der Stand schiebe die Uhr ja
|
|
schon nach rechts. Er tut das nur, solange er DA ist: Bis die erste
|
|
Abfrage zurueck ist, steht er auf `hidden`, und in dieser Sekunde
|
|
waere die Uhr an den Text geklebt und dann sichtbar weggesprungen.
|
|
|
|
Zwei `auto` nebeneinander sind kein Widerspruch: Das erste nimmt den
|
|
freien Platz, das zweite bekommt keinen mehr. Ergebnis ist in BEIDEN
|
|
Faellen dasselbe -- Instrumente rechts, Text links. */
|
|
.willkommen__rechts {
|
|
display: flex; align-items: center; gap: 14px;
|
|
margin-left: auto; flex: 0 0 auto;
|
|
}
|
|
/* DER PLATZ WIRD RESERVIERT, NICHT NACHTRÄGLICH GENOMMEN.
|
|
|
|
Hier stand `:empty { display: none }` -- und das ist genau der Fehler,
|
|
den die Kachel darunter schon einmal gemacht hat: Die Glocke wird
|
|
erst nach der ersten Abfrage eingehängt, und bis dahin war der Platz
|
|
0 px breit. In dem Moment, in dem sie erscheint, wächst die Zeile,
|
|
und alles darunter rutscht.
|
|
|
|
Ein Sprung ist kein Schönheitsfehler, sondern der Grund, warum man
|
|
auf den falschen Knopf drückt: Man zielt auf etwas, und im Moment des
|
|
Klicks rutscht es weg. Gemessen von pruef-tempo-workspace.
|
|
|
|
Also 46 px, immer -- ob die Glocke kommt oder nicht. Auf Geräten, auf
|
|
denen es sie gar nicht gibt (iPhone im Browser), bleibt ein leerer
|
|
Streifen neben der Uhr; das ist der Preis, und er ist niedriger als
|
|
ein springendes Bild. */
|
|
.glocke-platz { width: 46px; height: 46px; flex: none; }
|
|
|
|
/* ---------- Die Uhr --------------------------------------------------
|
|
ROT x BABYBLAU (07.09.2026, zweiter Entwurf).
|
|
|
|
Filipe: "die uhr rechts soll auch viel viel viel viel viel viel viel
|
|
spezieller noch sein und soll eine mischung von rot und babyblau
|
|
haben."
|
|
|
|
WAS EINE UHR TEUER AUSSEHEN LAESST, IST NICHT DIE FARBE, SONDERN DAS
|
|
GEHAEUSE. Bei einer echten Uhr sieht man drei Dinge übereinander:
|
|
einen METALLRAND, der das Licht von oben fängt; eine VERTIEFTE
|
|
Scheibe darin; und ein GLAS darüber, das spiegelt. Genau diese drei
|
|
Schichten sind hier gebaut -- und sie sind der Grund, warum das Ding
|
|
jetzt wie ein Gegenstand aussieht und nicht wie ein Kreis mit Zahlen.
|
|
|
|
Die Farben kommen aus dem Haus, nicht aus dem Farbkasten: Rot ist
|
|
Spicy Media, Babyblau ist DogFather. Dieselben zwei stehen im Kopf
|
|
der Anmeldekarte nebeneinander und bilden im Motiv den Neonrahmen.
|
|
|
|
Beide Verlaeufe stehen im SVG (siehe start.html) und laufen
|
|
GEGENEINANDER -- der Stundenring rot -> blau, der Sekundenring blau
|
|
-> rot. Wo der eine warm ist, ist der andere kuehl; so bleiben sie
|
|
auseinanderzuhalten, wo sie sich ueberlagern.
|
|
-------------------------------------------------------------------- */
|
|
/* =====================================================================
|
|
DIE UHR — ein Instrument, keine Anzeige (07.09.2026, zweiter Anlauf)
|
|
|
|
Filipe: "AUCH MIT DER UHR RECHTS; DAS IST VIEL ZU EINFACH; ICH WILL
|
|
SIE NOCH VIEEEEEEL KRASSER; WIE IN DER BUISNESS HUB SEITE VON VANVAN,
|
|
WIE DIE UHR BEI IHR ABER NOCH KRASSER UND SPEZIELLER."
|
|
|
|
NACHGESEHEN, NICHT GERATEN. Auf VanVans Business-Hub gibt es keine
|
|
Uhr -- gemeint ist das `gate-medaillon` auf der Anmeldeseite: ein
|
|
runder Kegelverlauf, der wie gebuerstetes Metall aussieht, gefasst in
|
|
zwei eingelassenen Ringen. Genau diese Bauart steht jetzt hier, in
|
|
drei Punkten weitergetrieben:
|
|
|
|
1. FASSUNG STATT RAND. Der Kegelverlauf laeuft rundherum durch
|
|
hell/dunkel/hell -- deshalb sieht die Fassung gedreht aus und
|
|
nicht bemalt. Sie ist 5 px breit statt 3; darunter liegt ein
|
|
zweiter, dunkler Ring, der sie einlaesst.
|
|
2. AUFGESETZTE STUNDENMARKEN. Zwoelf kraeftige Striche aus einem
|
|
einzigen sich wiederholenden Kegelverlauf, dazu sechzig feine.
|
|
Sechzig Elemente im HTML waeren dieselbe Optik mit sechzig
|
|
Elementen mehr im Baum.
|
|
3. GLASKUPPE. Eine Spiegelung von oben links plus ein heller Bogen
|
|
an der Oberkante. Ohne den Bogen wirkt jede runde Flaeche flach.
|
|
|
|
UND SIE IST GROESSER: 164 statt 124 px. Das ist kein Detail --
|
|
"krasser" heisst bei einem Instrument zuerst "lesbar". Auf dem Handy
|
|
bleibt sie bei 118 px, dort steht sie unter dem Text statt daneben.
|
|
===================================================================== */
|
|
.uhr {
|
|
position: relative;
|
|
width: 164px; height: 164px; flex: none;
|
|
display: grid; place-items: center;
|
|
border-radius: 50%;
|
|
padding: 10px;
|
|
/* SCHICHT 1: DIE LUENETTE. Zehn Pixel breit und DECKEND.
|
|
Halbdurchsichtig war der Fehler des ersten Anlaufs: Metall, durch
|
|
das der Hintergrund scheint, sieht nicht nach Metall aus, sondern
|
|
nach grauem Glas -- im Bildschirmfoto gemessen, es las sich als
|
|
flacher grauer Ring. Echtes Metall ist undurchsichtig; sein
|
|
Aussehen entsteht allein daraus, WIE es das Licht zurueckwirft.
|
|
Deshalb hier volle Farben und ein harter Wechsel hell/dunkel. */
|
|
background:
|
|
conic-gradient(from 208deg,
|
|
#eaf2fb 0deg,
|
|
#8fa3bd 26deg,
|
|
#f6fbff 52deg,
|
|
#6f8299 84deg,
|
|
#dfe9f5 116deg,
|
|
#ff8a94 150deg,
|
|
#f4f9ff 176deg,
|
|
#5d6f87 214deg,
|
|
#e6eff9 246deg,
|
|
#8fd8ff 282deg,
|
|
#f8fcff 312deg,
|
|
#7c8ea6 340deg,
|
|
#eaf2fb 360deg);
|
|
box-shadow:
|
|
/* Der zweifarbige Schein nach aussen, weit unter der Blendschwelle. */
|
|
-4px -4px 26px -13px rgba(255, 95, 109, .6),
|
|
4px 4px 26px -13px rgba(143, 216, 255, .6),
|
|
0 14px 30px -14px rgba(0, 0, 0, .95),
|
|
/* DIE MULDE. Zwei Ringe aus Schatten mit Ausdehnung: aussen die
|
|
Fraesung selbst (dunkel, 11 px breit), darauf eine haarfeine
|
|
helle Kante -- dort trifft das Licht die gegenueberliegende Wand
|
|
der Vertiefung. Zusammen macht das aus "davor" ein "darin", und
|
|
zwar konzentrisch bei jeder Groesse. */
|
|
0 0 0 11px rgba(0, 0, 0, .5),
|
|
0 0 0 12px rgba(190, 208, 230, .12),
|
|
0 6px 14px 6px rgba(0, 0, 0, .45),
|
|
/* Und der dunkle Ring, der die Fassung einlaesst -- ohne ihn liegt
|
|
sie auf dem Zifferblatt statt darin. */
|
|
inset 0 0 0 1px rgba(6, 10, 18, .85);
|
|
}
|
|
/* SCHICHT 2: die vertiefte Scheibe. */
|
|
.uhr::before {
|
|
content: ""; position: absolute; inset: 10px; border-radius: 50%;
|
|
/* DAS GUILLOCHIERTE ZIFFERBLATT.
|
|
|
|
Guillochieren ist das Verfahren, mit dem seit zweihundert Jahren
|
|
hochwertige Zifferblaetter gemacht werden: Eine Maschine schneidet
|
|
ein feines, regelmaessiges Muster in das Metall, und weil jede
|
|
Rille das Licht in einem anderen Winkel zurueckwirft, LEBT die
|
|
Flaeche, wenn man den Kopf bewegt. Es ist der Unterschied zwischen
|
|
einem lackierten und einem bearbeiteten Blatt -- und der Grund,
|
|
warum ein teures Zifferblatt teuer AUSSIEHT, ohne dass eine
|
|
einzige Farbe daran teuer waere.
|
|
|
|
Hier aus zwei Ebenen: STRAHLEN vom Mittelpunkt (der Kegelverlauf,
|
|
240 Rillen) und RINGE um den Mittelpunkt (der wiederholte
|
|
Radialverlauf, alle 3 px). Beide extrem leise -- bei 4 Prozent
|
|
Deckkraft sieht man kein Muster, man sieht eine Oberflaeche. Wer
|
|
sie einzeln erkennt, hat sie zu laut gemacht.
|
|
|
|
`closest-side`, damit die Ringe im Radius rechnen und nicht in der
|
|
weitesten Ecke -- derselbe Fehler, der heute die Skala unsichtbar
|
|
gemacht hat. */
|
|
background:
|
|
repeating-conic-gradient(from 0deg,
|
|
rgba(255, 255, 255, .045) 0deg 0.75deg,
|
|
rgba(0, 0, 0, .05) 0.75deg 1.5deg),
|
|
repeating-radial-gradient(circle closest-side at 50% 50%,
|
|
rgba(255, 255, 255, .035) 0 1px,
|
|
rgba(0, 0, 0, .045) 1px 3px),
|
|
radial-gradient(circle at 50% 26%, rgba(255, 255, 255, .06), transparent 56%),
|
|
radial-gradient(circle at 50% 50%, #0c121e 56%, #04070d 100%);
|
|
box-shadow:
|
|
inset 0 2px 7px -2px rgba(0, 0, 0, .95),
|
|
inset 0 0 0 1px rgba(190, 205, 225, .16),
|
|
inset 0 -1px 0 rgba(255, 255, 255, .05);
|
|
}
|
|
/* DIE SKALA LIEGT AUF DER LUENETTE, NICHT AUF DEM ZIFFERBLATT.
|
|
|
|
Im ersten Anlauf lag sie bei 90 bis 99 Prozent des Radius -- und
|
|
genau dort laeuft der Sekundenring. Sie war vollstaendig verdeckt,
|
|
und zwar so, dass man es nicht merkt: Eine unsichtbare Skala sieht
|
|
aus wie gar keine, nicht wie ein Fehler. Im Bildschirmfoto gesehen,
|
|
nicht im Kopf ausgerechnet.
|
|
|
|
Jetzt sitzt sie dort, wo sie bei einer echten Uhr sitzt: eingraviert
|
|
in den Metallring. Deshalb sind die Striche DUNKEL -- eine Gravur ist
|
|
eine Vertiefung, in der Schatten steht, kein aufgemalter heller
|
|
Strich. Zwoelf kraeftige fuer die Stunden, sechzig feine dazwischen,
|
|
beide aus je EINEM sich wiederholenden Kegelverlauf. */
|
|
.uhr__skala {
|
|
position: absolute; inset: 0; border-radius: 50%;
|
|
/* NUR die zwoelf Stundenmarken -- lang und kraeftig. Die sechzig
|
|
feinen Minutenstriche liegen auf einer eigenen Ebene (.uhr::after),
|
|
weil sie eine ANDERE Laenge brauchen: Auf einer echten Luenette
|
|
reichen Stundenmarken durch den ganzen Ring, Minutenstriche nur
|
|
ein Stueck vom Rand herein. Zwei Laengen heissen zwei Masken, und
|
|
zwei Masken heissen zwei Ebenen -- eine Ebene kann nur eine haben.
|
|
|
|
Beim ersten Anlauf lagen beide hier, gleich lang: Aus der Skala
|
|
wurde ein Zahnkranz. Im Bildschirmfoto gesehen. */
|
|
background:
|
|
/* AUFGESETZTE INDIZES bei 3, 6 und 9 Uhr. Auf einer guten Luenette
|
|
sind die Viertelstunden keine Striche wie die anderen, sondern
|
|
eigene Marken -- breiter und HELL statt graviert, weil sie
|
|
aufgesetzt sind und deshalb Licht fangen statt Schatten zu
|
|
halten. Ein Kegelverlauf mit 90-Grad-Takt, um 90 Grad gedreht:
|
|
So trifft er 3, 6 und 9 und laesst die 12 der roten Marke. */
|
|
repeating-conic-gradient(from 88.6deg,
|
|
rgba(244, 250, 255, .92) 0deg 2.8deg,
|
|
transparent 2.8deg 90deg),
|
|
repeating-conic-gradient(from 0deg,
|
|
rgba(6, 10, 18, .85) 0deg 1.5deg,
|
|
transparent 1.5deg 30deg);
|
|
/* `closest-side` IST HIER PFLICHT, NICHT GESCHMACK.
|
|
|
|
Ohne Angabe rechnet ein `radial-gradient` seine Prozente auf die
|
|
WEITESTE ECKE des Kastens -- bei 164 px Kantenlaenge sind das
|
|
116 px, nicht die 82 px des Radius. "89 % bis 99,5 %" lag damit
|
|
bei 103 bis 115 px und komplett AUSSERHALB der runden Uhr: Die
|
|
Skala war unsichtbar, und zwar seit es sie gibt. Eine unsichtbare
|
|
Verzierung sieht aus wie gar keine, nicht wie ein Fehler -- genau
|
|
deshalb ist sie nie aufgefallen.
|
|
|
|
Mit `closest-side` sind 100 % der Radius, und die Prozente
|
|
bedeuten das, wonach sie aussehen. */
|
|
-webkit-mask: radial-gradient(circle closest-side, transparent 0 88%, #000 88% 99.5%, transparent 99.5%);
|
|
mask: radial-gradient(circle closest-side, transparent 0 88%, #000 88% 99.5%, transparent 99.5%);
|
|
pointer-events: none; z-index: 4;
|
|
}
|
|
/* Die sechzig feinen Minutenstriche -- kurz, vom Aussenrand herein,
|
|
und deutlich leiser als die Stundenmarken. Das Verhaeltnis der beiden
|
|
ist der ganze Unterschied zwischen "Skala" und "Zahnkranz". */
|
|
.uhr::after {
|
|
content: ""; position: absolute; inset: 0; border-radius: 50%;
|
|
z-index: 4; pointer-events: none;
|
|
background:
|
|
repeating-conic-gradient(from 0deg,
|
|
rgba(6, 10, 18, .42) 0deg 0.4deg,
|
|
transparent 0.4deg 6deg);
|
|
-webkit-mask: radial-gradient(circle closest-side, transparent 0 94%, #000 94% 99.5%, transparent 99.5%);
|
|
mask: radial-gradient(circle closest-side, transparent 0 94%, #000 94% 99.5%, transparent 99.5%);
|
|
}
|
|
|
|
/* DER AUFGESETZTE ZWOELF-INDEX. Ein Keil in Hausrot mit heller
|
|
Oberkante, gesetzt auf die Luenette. Er beantwortet die Frage "wo ist
|
|
oben" ohne eine einzige Ziffer -- und er ist der einzige farbige
|
|
Punkt auf dem Metall, also auch der Blickfang. */
|
|
.uhr__zwoelf {
|
|
position: absolute; top: 3px; left: 50%;
|
|
width: 7px; height: 13px; margin-left: -3.5px;
|
|
z-index: 5; pointer-events: none;
|
|
clip-path: polygon(50% 0, 100% 100%, 0 100%);
|
|
background: linear-gradient(180deg, #ffd9dc 0%, #ff5f6d 34%, #b3323e 100%);
|
|
filter: drop-shadow(0 1px 1px rgba(0, 0, 0, .8));
|
|
}
|
|
|
|
/* DIE PERLE. Ein Kasten in voller Groesse, der sich dreht -- die Perle
|
|
selbst sitzt oben auf dem Radius des Sekundenbogens. So braucht die
|
|
Drehung keine Rechnung mit Winkelfunktionen: Der Kasten dreht sich,
|
|
die Perle wird mitgenommen. */
|
|
.uhr__perle {
|
|
position: absolute; inset: 10px;
|
|
z-index: 5; pointer-events: none;
|
|
transform: rotate(0deg);
|
|
transition: transform .12s cubic-bezier(.34, 1.56, .64, 1);
|
|
}
|
|
.uhr__perle::before {
|
|
content: "";
|
|
position: absolute; top: 4.2%; left: 50%;
|
|
width: 7px; height: 7px; margin-left: -3.5px;
|
|
border-radius: 50%;
|
|
background:
|
|
radial-gradient(circle at 36% 32%, #fff 0%, #ff9aa2 38%, #ff2f42 72%, #8e1b26 100%);
|
|
box-shadow:
|
|
0 0 6px 1px rgba(255, 70, 90, .75),
|
|
0 0 14px 3px rgba(255, 70, 90, .35),
|
|
inset 0 0 0 .5px rgba(255, 255, 255, .5);
|
|
}
|
|
/* Die Kappen der beiden anderen Ringe. Sie sitzen auf DEREN Bahn --
|
|
der Abstand von der Mitte ist der einzige Unterschied, alles andere
|
|
erbt von der Perle. Die Farbe folgt dem Ring: Minute babyblau,
|
|
Stunde poliertes Silber. */
|
|
.uhr__perle--minute::before {
|
|
top: 12.6%;
|
|
width: 6px; height: 6px; margin-left: -3px;
|
|
background: radial-gradient(circle at 36% 32%, #fff 0%, #cfe9ff 36%, #4aa8f0 72%, #17527f 100%);
|
|
box-shadow:
|
|
0 0 5px 1px rgba(90, 180, 255, .7),
|
|
inset 0 0 0 .5px rgba(255, 255, 255, .55);
|
|
}
|
|
.uhr__perle--stunde::before {
|
|
top: 21.4%;
|
|
width: 5.4px; height: 5.4px; margin-left: -2.7px;
|
|
background: radial-gradient(circle at 34% 30%, #ffffff 0%, #dfe8f2 34%, #8b98a8 70%, #3d4653 100%);
|
|
box-shadow:
|
|
0 0 4px 1px rgba(220, 235, 255, .45),
|
|
inset 0 0 0 .5px rgba(255, 255, 255, .6);
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
/* Kein Nachfedern -- der Sprung bleibt, das Schwingen geht. */
|
|
.uhr__perle { transition: none; }
|
|
}
|
|
@media (forced-colors: active) {
|
|
.uhr__zwoelf, .uhr__perle { display: none; }
|
|
.uhr__schatten, .uhr__kante { display: none; }
|
|
}
|
|
|
|
/* SCHICHT 3: DAS GLAS -- ENTSPIEGELTES SAPHIRGLAS (07.09.2026)
|
|
|
|
Nachgelesen statt geraten. Eine Entspiegelung (Anti-Reflex) wird im
|
|
Vakuum aufgedampft und senkt die Spiegelung auf unter ein Prozent;
|
|
das Zifferblatt wirkt dadurch SCHAERFER, nicht milchiger. Und das
|
|
Erkennungszeichen einer guten Beschichtung ist kein weisser Schleier,
|
|
sondern ein **topasblauer Schimmer**, der je nach Lichteinfall ueber
|
|
das Glas laeuft -- daran sieht ein Kenner sofort, dass da Saphirglas
|
|
sitzt und kein Mineralglas.
|
|
|
|
Vorher lag hier genau das Gegenteil: ein breiter weisser Verlauf
|
|
ueber ein Fuenftel der Scheibe. Das ist die Spiegelung eines
|
|
UNBESCHICHTETEN Glases -- also ausgerechnet das Merkmal des
|
|
billigeren Materials.
|
|
|
|
Jetzt drei Dinge, jedes davon aus der Sache begruendet:
|
|
1. ein SCHMALER, harter Reflexbogen oben links -- die Kante der
|
|
Woelbung, das Einzige, was auch entspiegelt stehen bleibt
|
|
2. der topasblaue Schimmer, diagonal, sehr leise
|
|
3. die haarfeine helle Linie an der Oberkante -- die Schnittkante
|
|
des Glases selbst
|
|
|
|
Quellen zur Beschichtung: reservoir-watch.com und botta-design.de
|
|
(siehe Antwort im Verlauf). */
|
|
.uhr__glas {
|
|
position: absolute; inset: 10px; border-radius: 50%;
|
|
background:
|
|
linear-gradient(142deg,
|
|
rgba(255, 255, 255, .16) 0%,
|
|
rgba(255, 255, 255, .05) 7%,
|
|
transparent 15%),
|
|
linear-gradient(128deg,
|
|
transparent 30%,
|
|
rgba(120, 190, 255, .10) 44%,
|
|
rgba(150, 130, 255, .07) 52%,
|
|
transparent 64%);
|
|
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .22);
|
|
pointer-events: none; z-index: 3;
|
|
}
|
|
|
|
.uhr__ring {
|
|
position: absolute; inset: 10px; width: calc(100% - 20px); height: calc(100% - 20px);
|
|
/* Bei Null soll der Ring OBEN beginnen, nicht rechts. */
|
|
transform: rotate(-90deg);
|
|
z-index: 2;
|
|
overflow: visible;
|
|
}
|
|
/* DREI RINGE, ALLE SCHARF (07.09.2026).
|
|
|
|
Filipe: "die minuten blau, [die stunden] schwarzsilber glaenzend und
|
|
die sekunden rot ... soll null unscharf sein, sehr schoen praezise."
|
|
|
|
KEIN blur(), KEIN drop-shadow auf den Boegen. Ein Weichzeichner auf
|
|
einer Linie macht sie nicht edler, sondern unscharf -- genau das war
|
|
der Vorwurf, und er stimmte: An der alten Uhr lag ein blur(1.2px) auf
|
|
dem Schein und ein drop-shadow auf dem Sekundenbogen.
|
|
|
|
Der GLANZ entsteht stattdessen aus dem Verlauf selbst. Echtes Metall
|
|
glaenzt nicht, weil es leuchtet, sondern weil es das Licht an
|
|
verschiedenen Stellen verschieden zurueckwirft: hell, dunkel, hell,
|
|
dunkel. Genau das machen die fuenf Stopps des Silberverlaufs im SVG.
|
|
Ein zweifarbiger Verlauf waere ein Farbverlauf; erst der Wechsel ist
|
|
Metall.
|
|
|
|
Die Kappen sind BUTT und nicht rund. Eine runde Kappe steht ueber das
|
|
Ende hinaus -- bei "null Sekunden" saehe man dann trotzdem einen
|
|
Punkt, und die Anzeige waere um zwei Grad falsch. Praezise heisst
|
|
auch: nichts anzeigen, wo nichts ist. */
|
|
.uhr__bahn, .uhr__stunde, .uhr__minute, .uhr__sekunde {
|
|
fill: none;
|
|
stroke-linecap: butt;
|
|
}
|
|
/* DIE BAHN IST EINE GEFRAESTE RILLE, kein blasser Kreis.
|
|
|
|
Ein Zeiger laeuft bei einem guten Instrument IN einer Vertiefung,
|
|
nicht auf einer Flaeche. Eine Rille erkennt man an zweierlei: Sie ist
|
|
dunkler als ihre Umgebung, und an ihrer unteren Wand steht eine helle
|
|
Kante, wo das Licht von oben auftrifft. Beides steht hier -- die
|
|
Kante als zweiter, um ein Drittel nach unten versetzter Kreis.
|
|
|
|
Die Breite folgt dem Ring, der darin laeuft: aussen 3,4 fuer die
|
|
Sekunde, in der Mitte 3,8, innen 4,4. Eine Rille, die schmaler ist
|
|
als ihr Zeiger, ist keine. */
|
|
.uhr__bahn { stroke: rgba(4, 7, 13, .78); stroke-width: 4.4; }
|
|
.uhr__bahn:nth-of-type(1) { stroke-width: 3.6; }
|
|
.uhr__bahn:nth-of-type(2) { stroke-width: 4; }
|
|
.uhr__rillenkante circle {
|
|
fill: none;
|
|
stroke: rgba(190, 215, 245, .16);
|
|
stroke-width: 1;
|
|
}
|
|
|
|
/* AUSSEN: die SEKUNDE in Rot, auf der laengsten Bahn (07.09.2026
|
|
gedreht, Wunsch Filipe: "die minuten in der mitte und sekunden
|
|
aussen").
|
|
|
|
Das ist die Anordnung eines Chronographen und nicht die eines
|
|
Fortschrittsbalkens: Der schnellste Zeiger laeuft aussen, weil man
|
|
Bewegung dort am besten sieht -- und der langsamste innen, wo eine
|
|
kleine Drehung schon viel bedeutet.
|
|
|
|
DIE ZAHLEN GEHOEREN ZUM RADIUS. Ein vertauschter Ring ohne
|
|
vertauschte Umfaenge sieht aus wie eine haengende Uhr: Der Bogen
|
|
endet dann nie dort, wo er soll. U = 2 * pi * r, ausgerechnet und
|
|
nicht geschaetzt. */
|
|
.uhr__sekunde {
|
|
stroke: url(#uhr-rot);
|
|
stroke-width: 2.6;
|
|
stroke-dasharray: 285.88; /* r = 45.5 */
|
|
stroke-dashoffset: 285.88;
|
|
}
|
|
/* MITTE: die Minute in Blau. */
|
|
.uhr__minute {
|
|
stroke: url(#uhr-blau);
|
|
stroke-width: 3;
|
|
stroke-dasharray: 241.90; /* r = 38.5 */
|
|
stroke-dashoffset: 241.90;
|
|
}
|
|
/* INNEN: die STUNDE in Schwarzsilber. Am breitesten und am ruhigsten --
|
|
sie bewegt sich in fuenf Minuten um ein halbes Grad. */
|
|
.uhr__stunde {
|
|
stroke: url(#uhr-silber);
|
|
stroke-width: 3.6;
|
|
stroke-dasharray: 197.92; /* r = 31.5 */
|
|
stroke-dashoffset: 197.92;
|
|
}
|
|
|
|
/* DER SCHLAGSCHATTEN JEDES BOGENS. Dieselbe Bahn, schwarz, ein wenig
|
|
breiter -- und um ein halbes Rastermass nach unten geschoben (im
|
|
HTML). Er macht aus einem aufgemalten Strich einen Koerper, der
|
|
ueber dem Zifferblatt liegt. */
|
|
.uhr__schatten circle {
|
|
stroke: rgba(0, 0, 0, .62) !important;
|
|
stroke-width: 4.6;
|
|
}
|
|
.uhr__schatten .uhr__sekunde { stroke-width: 3.8; }
|
|
.uhr__schatten .uhr__minute { stroke-width: 4.2; }
|
|
|
|
/* DIE BELEUCHTETE OBERKANTE. Duenner, hell, nach oben versetzt: Sie
|
|
schaut oben hervor und verschwindet unten -- genau das tut eine
|
|
gewoelbte Kante bei Licht von oben. Das ist der ganze Unterschied
|
|
zwischen einem Strich und einem Ring aus Material. */
|
|
.uhr__kante circle {
|
|
stroke: rgba(255, 255, 255, .72) !important;
|
|
stroke-width: .9;
|
|
}
|
|
.uhr__kante .uhr__stunde { stroke: rgba(255, 255, 255, .5) !important; }
|
|
|
|
/* DIE ZIFFERNINSEL (07.09.2026).
|
|
|
|
Seit der Stundenring eine beleuchtete Oberkante hat, laeuft ein
|
|
heller Bogen hinter den Ziffern durch. pruef-buehne hat es sofort
|
|
gemeldet: schlechtester Kontrast 2,98:1 gegen rgb(125,147,165) --
|
|
knapp unter der Grenze von 3:1, und zwar genau bei der Uhrzeit, also
|
|
der wichtigsten Angabe der ganzen Flaeche.
|
|
|
|
Das ist kein Grund, die Kante wieder wegzunehmen. Auf einer echten
|
|
Uhr steht eine Anzeige, die ueber Zeigern liegt, auf einer eigenen
|
|
Flaeche -- einer vertieften Insel im Zifferblatt. Genau die steht
|
|
jetzt hier: dunkel in der Mitte, nach aussen weich auslaufend, damit
|
|
sie keine sichtbare Kante bekommt. Der Kontrast ist damit
|
|
unabhaengig davon, was hinter ihr vorbeilaeuft.
|
|
|
|
Die Lehre allgemein: Wenn eine neue Schicht einen Text unlesbar
|
|
macht, ist die Antwort selten "Schicht weg" -- meistens fehlt dem
|
|
Text sein Untergrund. */
|
|
.uhr__mitte {
|
|
position: relative; z-index: 4;
|
|
display: grid; justify-items: center; gap: 2px; line-height: 1;
|
|
padding: 6px 14px;
|
|
}
|
|
.uhr__mitte::before {
|
|
content: ""; position: absolute; inset: -6px -10px;
|
|
z-index: -1; pointer-events: none;
|
|
border-radius: 50%;
|
|
background:
|
|
radial-gradient(closest-side, rgba(4, 7, 13, .93) 0%,
|
|
rgba(4, 7, 13, .88) 52%, rgba(4, 7, 13, .55) 78%, transparent 100%);
|
|
}
|
|
.uhr__zeit {
|
|
font-size: 1.86rem; font-weight: 700; letter-spacing: -.015em;
|
|
/* Gleiche Zifferbreite: Ohne sie zappelt die Anzeige bei jedem
|
|
Minutenwechsel, weil die 1 schmaler ist als die 8. */
|
|
font-variant-numeric: tabular-nums;
|
|
color: #f2f8ff;
|
|
/* DIE MISCHUNG IM TEXT, ohne Verlaufsschrift: zwei Schatten, einer
|
|
rot von links, einer babyblau von rechts. Ein Verlauf IN der
|
|
Schrift (background-clip: text) wuerde im Windows-Kontrastmodus zu
|
|
unsichtbarer Schrift -- derselbe Grund, aus dem die Ueberschrift
|
|
daneben eine feste Farbe traegt. */
|
|
/* GRAVIERT STATT GEDRUCKT. Zwei zusaetzliche Schatten mit einem
|
|
halben Pixel Versatz: einer dunkel nach oben, einer hell nach
|
|
unten. Das ist genau das Lichtverhalten einer Vertiefung -- oben
|
|
faellt Schatten hinein, unten trifft das Licht die
|
|
gegenueberliegende Wand. Zusammen mit den beiden farbigen Scheinen
|
|
stehen die Ziffern damit IM Blatt statt darauf. */
|
|
text-shadow:
|
|
0 -.5px 0 rgba(0, 0, 0, .85),
|
|
0 .5px 0 rgba(255, 255, 255, .22),
|
|
-6px 0 16px rgba(255, 95, 109, .38),
|
|
6px 0 16px rgba(143, 216, 255, .42);
|
|
}
|
|
.uhr__sek {
|
|
/* .74rem = 11,84 px. Bei .68rem waren es 10,88 -- unter der Grenze von
|
|
11,5, die pruef-css-klassen zieht, und sie hat recht: Diese Ziffern
|
|
stehen gesperrt und in Versalhöhe, dadurch wirken sie noch kleiner
|
|
als die Zahl sagt. */
|
|
font-size: .74rem; font-weight: 700;
|
|
font-variant-numeric: tabular-nums;
|
|
letter-spacing: .18em; text-indent: .18em;
|
|
/* EIN EINGELASSENES FENSTER, kein Etikett.
|
|
|
|
Auf einer Uhr sitzt eine Zusatzanzeige in einer AUSSPARUNG des
|
|
Zifferblatts -- man sieht durch das Blatt hindurch auf die Scheibe
|
|
darunter. Das erkennt man an zwei Dingen: der Schatten faellt oben
|
|
hinein, und unten steht eine helle Kante, wo das Licht die
|
|
gegenueberliegende Wand trifft. Genau diese beiden Schatten stehen
|
|
hier. Die abgeschnittene Ecke nimmt die Sprache der Kacheln auf. */
|
|
padding: 1px 7px 1px 8px;
|
|
border-radius: 0;
|
|
clip-path: polygon(4px 0, 100% 0, 100% 100%, 0 100%, 0 4px);
|
|
color: #d8ecfb;
|
|
background:
|
|
linear-gradient(180deg, #05080e 0%, #0a1018 100%);
|
|
box-shadow:
|
|
inset 0 2px 3px -1px rgba(0, 0, 0, .95),
|
|
inset 0 -1px 0 rgba(190, 215, 240, .28),
|
|
0 1px 0 rgba(255, 255, 255, .05);
|
|
box-shadow: inset 0 0 0 1px rgba(143, 216, 255, .16);
|
|
}
|
|
|
|
/* Die Glocke in der Kachel wird in start.css gestaltet und nicht hier.
|
|
|
|
Grund (07.09.2026, gefunden von pruef-css-klassen): `glocke.js` laeuft
|
|
auf ALLEN siebzehn Seiten und setzt die Klasse `glocke--kachel`,
|
|
sobald es einen Platz dafuer gibt. Heute gibt es den nur hier -- aber
|
|
die Regel gehoert dorthin, wo das Skript sie brauchen KANN, nicht
|
|
dorthin, wo es sie heute zufaellig braucht. Sonst sieht die Glocke
|
|
auf der naechsten Seite, die einen Platz bekommt, falsch aus, und
|
|
niemand sucht den Fehler in der Aufteilung der Stildateien.
|
|
|
|
Die Pruefung hat genau das gemeldet: "gestaltet, aber nicht auf ihrer
|
|
Seite -- fehlt auf 17 Seiten". */
|
|
|
|
@media (max-width: 620px) {
|
|
/* Die Nut trennt Text von Instrumenten -- nebeneinander. Untereinander
|
|
traennte sie nichts und stuende quer im Bild. */
|
|
.willkommen__rechts::before { display: none; }
|
|
/* Auf dem Handy rückt die Gruppe unter den Gruß und die Uhr wird
|
|
kleiner -- 108 px neben einer Überschrift lassen für den Namen
|
|
keine Zeile mehr übrig. */
|
|
.willkommen { padding: 18px 16px; }
|
|
.willkommen__rechts { margin-left: 0; width: 100%; justify-content: flex-start; }
|
|
/* DER STAND RICHTET SICH NACH DER UHR, NICHT NACH DEM RAND.
|
|
|
|
Am Rechner sitzt er rechts, weil dort auch die Uhr rechts sitzt.
|
|
Auf dem Handy rutscht die Uhr nach LINKS (Zeile darueber) -- der
|
|
Stand blieb dabei rechtsbuendig und stand als einziges Bauteil auf
|
|
der falschen Seite. Im Bildschirmfoto bei 412 px gesehen, nicht
|
|
hergeleitet.
|
|
|
|
`align-self` statt `margin-left: 0`: Der Kasten soll auf die volle
|
|
Breite gehen duerfen, wenn drei Felder nebeneinander nicht mehr
|
|
passen -- dann verteilen sie sich, statt sich zu stauchen. */
|
|
.willkommen__stand {
|
|
margin-left: 0; width: 100%;
|
|
justify-content: space-around;
|
|
}
|
|
.stand { min-width: 0; flex: 1 1 0; padding: 10px 8px 9px; }
|
|
.uhr { width: 118px; height: 118px; padding: 4px; }
|
|
.uhr__zeit { font-size: 1.3rem; }
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
/* Die Uhr springt ohnehin -- hier gibt es nichts abzuschalten. Die
|
|
Zeile steht trotzdem da, damit der nächste, der einen weichen
|
|
Zeiger einbaut, sie findet. */
|
|
.uhr__stunde, .uhr__minute, .uhr__sekunde { transition: none; }
|
|
}
|
|
@media (forced-colors: active) {
|
|
.uhr { background: Canvas; box-shadow: none; border: 1px solid CanvasText; }
|
|
.uhr__skala, .uhr__glas { display: none; }
|
|
}
|
|
|
|
/* =====================================================================
|
|
GRUPPEN LASSEN SICH ZUKLAPPEN (07.09.2026)
|
|
|
|
Wunsch Filipe: "diese kategorien soll man auch zu und aufmachen
|
|
koennen so wie es einem lieb ist gerade."
|
|
|
|
DIE UEBERSCHRIFT IST DER SCHALTER. Ein kleines Dreieck daneben waere
|
|
ein Ziel von 14 Pixeln; die ganze Zeile ist eines von 40. Deshalb ist
|
|
der Kopf ein <button> und nicht ein <div> mit einem Knopf darin --
|
|
damit kommt auch die Tastaturbedienung geschenkt.
|
|
|
|
Ein Knopf bringt allerdings die Vorgaben des Browsers mit (eigene
|
|
Schrift, eigener Rand, zentrierter Text). Die muessen alle
|
|
zurueckgesetzt werden, sonst sieht die Ueberschrift wie eine
|
|
Schaltflaeche aus -- und genau das soll sie NICHT: Sie soll aussehen
|
|
wie vorher und sich nur anders anfuehlen.
|
|
===================================================================== */
|
|
.gruppe__kopf {
|
|
/* Alles, was ein <button> mitbringt, wieder aus. */
|
|
appearance: none; -webkit-appearance: none;
|
|
width: 100%;
|
|
font: inherit; color: inherit; text-align: left;
|
|
border: 0; background: none;
|
|
cursor: pointer;
|
|
/* Und der Aufbau von vorher. */
|
|
position: relative;
|
|
display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
|
|
margin-bottom: 14px; padding: 6px 4px 10px;
|
|
border-radius: 10px;
|
|
transition: background var(--tempo);
|
|
}
|
|
.gruppe__kopf:hover { background: rgba(255, 255, 255, .035); }
|
|
.gruppe__kopf:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; }
|
|
|
|
/* Die Zahl sagt, was hinter einer zugeklappten Gruppe steckt. Sie steht
|
|
ganz rechts, direkt vor dem Pfeil -- dort sucht man sie. */
|
|
.gruppe__zahl {
|
|
margin-left: auto;
|
|
min-width: 22px; padding: 1px 8px;
|
|
border-radius: 999px;
|
|
background: rgba(255, 255, 255, .06);
|
|
color: var(--text-still);
|
|
font-size: .74rem; font-weight: 700;
|
|
font-variant-numeric: tabular-nums;
|
|
text-align: center;
|
|
}
|
|
.gruppe__pfeil {
|
|
width: 16px; height: 16px; flex: none;
|
|
color: var(--text-still);
|
|
transition: transform var(--tempo), color var(--tempo);
|
|
}
|
|
.gruppe__kopf:hover .gruppe__pfeil { color: var(--text); }
|
|
/* Zugeklappt zeigt der Pfeil nach rechts -- die Richtung, in die es
|
|
geht, wenn man drueckt. */
|
|
.gruppe[data-zu="ja"] .gruppe__pfeil { transform: rotate(-90deg); }
|
|
|
|
/* Eine zugeklappte Gruppe rueckt zusammen: Der Abstand, den die Kacheln
|
|
gebraucht haben, gehoert ihnen und nicht der Ueberschrift. */
|
|
.gruppe[data-zu="ja"] { margin-bottom: 10px; }
|
|
.gruppe[data-zu="ja"] .gruppe__kopf { margin-bottom: 0; }
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.gruppe__kopf, .gruppe__pfeil { transition: none; }
|
|
}
|
|
@media (forced-colors: active) {
|
|
.gruppe__kopf { border: 1px solid CanvasText; }
|
|
}
|