/* ===================================================================== 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; /* ==== DIE BEIDEN INSTRUMENTE SIND GLEICH GROSS ================== (09.09.2026, Wunsch Filipe: "die uhr und der [ring] sollen noch bissl groesser sein und ... dan auch am ende die selbe groesse haben bitte. sehr wichtig.") WARUM SIE ES VORHER NICHT WAREN: Der Ring stand in heim.css (232 / 220 / 190), die Uhr in start.css (164 / 118) -- zwei Dateien, zwei Zahlensaetze, und keine Stelle, an der jemand beide zugleich gesehen haette. Nachgemessen lagen sie am Rechner 68 px auseinander. Das war kein Versehen an einer Zahl, sondern die zwangslaeufige Folge davon, dass es zwei gab. Jetzt entscheidet EINE Variable ueber beide -- und ueber die Spalten des Rasters, in denen sie sitzen. Wer sie aendert, aendert alles drei gleichzeitig, und ein Auseinanderlaufen ist nicht mehr moeglich, sondern muesste absichtlich geschrieben werden. 248 statt 232: "bissl groesser" am oberen Ende, gemessen gegen die Kachelhoehe. Mehr geht nicht, ohne dass die Kachel waechst und die erste Kachelreihe darunter aus dem Bild rutscht -- genau die Rechnung, die weiter unten bei der Polsterung steht. */ --instrument: 248px; /* DIE SPALTE IST BREITER ALS DAS INSTRUMENT DARIN, und zwar genau um das, was daneben steht: die Knopfreihe (48 px) und der Abstand dazu (14 px). Nachgemessen, nachdem ich es zuerst falsch hatte: Mit einer Spalte von 248 px brauchte die rechte Seite 310 und die Uhr hing 32 px UEBER die Kachelkante hinaus. Die Seite liess sich trotzdem nicht seitlich schieben -- der Ueberstand lag innerhalb der Kachel, also hat keine der vorhandenen Pruefungen angeschlagen. Man sah es nur im Bild. BEIDE Aussenspalten bekommen dieselbe Breite, obwohl links keine Knoepfe stehen: Sonst saesse der Titel in der Mitte nicht mehr mittig. Der Ring wird in seiner Spalte zentriert. */ --instrument-knoepfe: 62px; --spalte: calc(var(--instrument) + var(--instrument-knoepfe)); position: relative; /* 20px oben/unten statt 26. JEDER PIXEL HIER SCHIEBT DIE KACHELN DARUNTER NACH UNTEN, und das ist keine Feinheit: Mit dem dreispaltigen Umbau wuchs diese Kachel von 244 auf 404 px. Die erste Kachelreihe rutschte dadurch von y=971 auf y=1131 -- auf einem 1200 px hohen Fenster war damit keine einzige Kachel mehr zu sehen, ohne zu rollen. Die Startseite BESTEHT aber aus diesen Kacheln. Zusammen mit der kleineren Anrede (siehe `.zgruss .titel`), dem engeren Zeilenabstand und der Titelgroesse sind es rund 60 px weniger. Die Kachel bleibt dem Vorbild treu -- VanVans Werktisch hat mit minmax(200px, 260px) sogar eine breitere Ringspalte als unsere 180-232 --, steht der Seite darunter aber nicht mehr im Weg. */ padding: 20px 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. */ /* NACHGERECHNET, NICHT NACH GEFUEHL VERTEILT (08.09.2026). Filipe: "der rand ... soll rot schwarz silber und babyblau sein, rot und babyblau soll man am meisten sehen." Die alte Fassung hatte alle vier Farben -- aber in der falschen Gewichtung. Jeden Stopp mit der Haelfte des Abstands zu seinen Nachbarn gewichtet ergab: Schwarz 37,5 %, Babyblau 27,5 %, Silber 22 %, ROT 13 %. Genau die beiden Farben, die man am meisten sehen sollte, kamen zusammen auf 40,5 % -- Silber allein hatte mehr Platz als Rot. Im Quelltext faellt das nicht auf: Man sieht neun silberne Stopps und denkt an Spitzlichter, nicht an ein Fuenftel der Flaeche. Jetzt: Babyblau 41,5 %, Rot 33 %, Schwarz 21,5 %, Silber 4 %. Rot und Babyblau zusammen 74,5 %, und sie liegen nur 8,5 Punkte auseinander. Silber ist auf das zurueckgenommen, was es sein soll: der Treffpunkt in der Mitte -- dieselbe Stelle, an der sich im Schriftzug oben Chili und Husky treffen. Dass Babyblau etwas vorne liegt, ist Absicht und keine Ungenauigkeit: Es ist der ruhigere der beiden Toene, und der Rand steht dauerhaft im Bild. Links Rot, rechts Babyblau -- wie beim Schriftzug. Deckend, nicht halbdurchsichtig (halbdurchsichtiges Metall ist graues Glas), und LINEAR laengs statt conic (ein Kegelverlauf trifft eine 1200 px breite Oberkante mit wenigen Grad und bewirkt nichts). */ background: linear-gradient(96deg, #20060b 0%, #c8323f 3%, #ff5f6d 10%, #ffd9dd 16%, /* Spitzlicht im Rot */ #ff5461 23%, #b3242f 31%, #4a0c13 38%, #0a0c12 43%, /* schwarze Fuge */ #8fa0b4 47%, #f4faff 51%, /* der silberne Treffpunkt -- Mitte der Kachel */ #8fa0b4 55%, #0a0c12 59%, /* schwarze Fuge */ #1d4a63 64%, #4f95bd 70%, #8fd8ff 76%, #dff2ff 81%, /* Spitzlicht im Babyblau */ #7ecdf5 87%, #3f7fa3 93%, #10222e 97%, #06080f 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. */ /* DIE INNENFORM STEHT EINMAL, NICHT ZWEIMAL. Sie wird von zwei Ebenen gebraucht (dem Innenglas hier und dem Universum darunter). Zwei getippte Polygone waeren zwei Gelegenheiten, dass eine Fase einen halben Pixel danebenliegt -- und genau diese Sorte Doppelung hat mich in dieser Datei heute schon zweimal Zeit gekostet. Ein Polygon passt in eine Variable, also gehoert es in eine. */ .willkommen { --k-innenform: 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))); } .willkommen::before { content: ""; position: absolute; inset: var(--k-rand); z-index: 0; pointer-events: none; clip-path: var(--k-innenform); /* 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. */ /* Alles ausser den beiden HINTERGRUND-Ebenen kommt ueber das Glas. `.zuniversum` gehoert dazu -- ohne die Ausnahme laege es mit z-index 1 UEBER dem Text, und die Anrede staende hinter fuenf Chilis. */ .willkommen > *:not(.licht, .zuniversum) { 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, var(--spalte)) minmax(0, 1fr) minmax(180px, var(--spalte)); gap: 26px; align-items: center; } .willkommen__text { min-width: 0; /* 7px statt 9: vier Luecken uebereinander, also 8 px weniger Hoehe. Siehe die Rechnung ueber `.willkommen`, warum jeder Pixel hier unten bei den Kacheln ankommt. */ display: flex; flex-direction: column; align-items: center; gap: 7px; 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: var(--instrument); 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; } /* IN DER MITTE STEHT SPICY MEDIA, NICHT DER DOGFATHER-KOPF. Das ist keine Stilfrage, sondern eine inhaltliche. Dieser Ring zeigt DAS TEAM -- ein Segment je Person. Der DogFather-Kopf in seiner Mitte haette Filipe bildlich ins Zentrum seines eigenen Teams gesetzt, mit allen anderen als Kranz darum herum. Genau das soll nicht sein (Anweisung 18.08.2026: nie hierarchisch ueber das Team stellen). Das Spicy-Media-Siegel steht fuer alle gleich -- es ist die Marke, unter der das ganze Team arbeitet, Filipe eingeschlossen. Optisch trifft es ausserdem genau, was ein Siegel hier braucht: Es ist von sich aus rund, mit hellem Doppelring auf dunklem Kern. Auf dem dunklen Untergrund des Workspace leuchtet der Ring ruhig, ohne zu blenden -- der Kern bleibt dunkel und zieht den Blick nicht von der Zahl darunter ab, um die es geht. VORGESCHICHTE, damit sie niemand zweimal macht: Hier stand `marke-husky.webp`, und in der Kopfleiste dieselbe Datei als Maske. Die Datei hatte zwar einen Alphakanal, der war aber RECHTECKIG -- als Maske ergab das einen Kasten mit einem Husky darin. Seit dem 08.09.2026 ist sie durch das echte, freigestellte Original ersetzt (`tools/marken-freistellen.mjs`, Ecken-Alpha nachgemessen 0/0/0/0), und die Kopfleiste ist damit ohne eine einzige geaenderte CSS-Zeile mitrepariert. `contain` statt der frueheren 128 %: Das Werkzeug gibt das Motiv bereits quadratisch gerahmt aus, ein Nachskalieren wuerde den Doppelring nur wieder anschneiden. */ .zring__siegel { width: 44px; height: 44px; margin-bottom: 5px; border-radius: 50%; /* 74 % statt `contain`: Bei voller Breite stiess die Chili an den Rand des Siegels und wirkte hineingezwaengt. Mit etwas Luft ringsum sitzt sie im Kreis, statt ihn auszufuellen. */ background: url("../img/marke-spicy.webp") center / 74% no-repeat, #0b1420; box-shadow: 0 0 0 1px rgba(180, 210, 240, .28), inset 0 0 12px rgba(0, 0, 0, .55); /* Nur leicht zurueckgenommen. Die alte Fassung stand auf saturate(.55) brightness(.92) -- das war fuer den schwarzweissen Husky gedacht. Dem Spicy-Siegel nimmt so viel Entsaettigung das Rot der Chili, also bleibt es bei einem sanften Daempfer: ruhig genug, um nicht mit der Zahl zu konkurrieren, farbig genug, um als Marke erkennbar zu sein. */ filter: saturate(.86) brightness(.95); } .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); } /* DIE ANREDE IST EINE PILLE, KEINE ZWEITE UEBERSCHRIFT. In der Pille steckt `