diff --git a/server/workspace.js b/server/workspace.js index 1e49d30e..ada43c9e 100644 --- a/server/workspace.js +++ b/server/workspace.js @@ -1443,14 +1443,20 @@ const GESCHUETZT = { die Seite nicht öffnen dürfte, könnte auch nicht antworten, und genau das Antworten ist der Zweck. */ "/workspace/chat.html": null, - /* Zahlen (06.09.2026): jede Rolle. WESSEN Zahlen jemand sieht, - entscheidet sichtbareCreatorIds() -- ein Creator sieht genau seine - eigenen. Ihn von der Seite auszusperren waere auch inhaltlich - falsch: Es sind SEINE Zahlen, und ohne sie ist jedes Ziel, das mit - ihm vereinbart wird, eine Behauptung. EINTRAGEN darf er sie - trotzdem nicht (darfEintragen() in workspace-leistung.js) -- eine - Zahl, die man sich selbst gibt, ist keine Messung. */ - "/workspace/leistung.html": null, + /* NUR DogFather (07.09.2026). Wunsch Filipe: "nimm die kategorie + zahlen bei jedem weg, nur die rolle dogfather soll die sehen." + + Bis heute stand hier `null` -- jede Rolle durfte die Seite oeffnen, + und WESSEN Zahlen jemand sah, entschied sichtbareCreatorIds(). + Die Begruendung dafuer war gut (es sind SEINE Zahlen), sie ist + jetzt aber nicht mehr meine Entscheidung. + + WICHTIG: Die Kachel wegzunehmen haette NICHT gereicht. Eine Kachel + ist ein Weg, keine Schranke -- wer die Adresse kennt oder ein altes + Lesezeichen hat, waere weiterhin hineingekommen. Beides gehoert + zusammen: bereiche.js zeigt sie nur noch DogFather, diese Zeile + laesst nur ihn hinein. */ + "/workspace/leistung.html": ["admin"], /* NUR DogFather (02.09.2026). Die Rollenauswahl verspricht das seit jeher ("Manager -- dieselben Rechte, ausser der Personenverwaltung"), die Schranke hielt sich nur nicht daran. diff --git a/tools/gate-bauen.mjs b/tools/gate-bauen.mjs index 67bbffd1..5da5f2a3 100644 --- a/tools/gate-bauen.mjs +++ b/tools/gate-bauen.mjs @@ -386,11 +386,38 @@ const BILD_WERKZEUG = ` g.globalAlpha = 1; g.globalCompositeOperation = "source-over"; } + + /* S-Kurve auf der Helligkeit. staerke 0 = nichts, 0.15 = deutlich. */ + function tiefe(g, c, staerke) { + if (staerke <= 0) return; + const d = g.getImageData(0, 0, c.width, c.height); + const D = d.data; + /* Nachschlagetabelle statt Rechnung je Bildpunkt: 256 Werte einmal, + statt drei Millionen Mal dieselbe Formel. */ + const t = new Uint8Array(256); + for (let i = 0; i < 256; i++) { + const x = i / 255; + /* Glatte S-Kurve (smoothstep), gemischt mit dem Original. */ + const s = x * x * (3 - 2 * x); + const v = x + (s - x) * staerke * 3; + t[i] = Math.max(0, Math.min(255, Math.round(v * 255))); + } + for (let i = 0; i < D.length; i += 4) { + const max = Math.max(D[i], D[i + 1], D[i + 2]); + if (max === 0) continue; + /* Ein Faktor fuer alle drei Kanaele -- der Farbton bleibt. */ + const f = t[max] / max; + D[i] = Math.min(255, D[i] * f); + D[i + 1] = Math.min(255, D[i + 1] * f); + D[i + 2] = Math.min(255, D[i + 2] * f); + } + g.putImageData(d, 0, 0); + } `; async function bauen({ quelle, ziel, breite, ausschnitt = null, dunkel = 0, guete = 0.82, - seitenverhaeltnis = null, kontrast = 1.08, saettigung = 1.1, vignette = 0.34, - schaerfe = 0.9, glanzStaerke = 0.34 }) { + seitenverhaeltnis = null, kontrast = 1.14, saettigung = 1.26, vignette = 0.34, + schaerfe = 1.05, glanzStaerke = 0.46, tiefe = 0.10 }) { const webp = await seite.evaluate(async (a) => { const i = new Image(); i.src = a.daten; await i.decode(); @@ -438,7 +465,24 @@ async function bauen({ quelle, ziel, breite, ausschnitt = null, dunkel = 0, guet /* 5: GLANZ. Nach dem Schaerfen, damit das Licht die geschaerften Kanten umspielt und nicht umgekehrt der Glanz mitgeschaerft wird (das gaebe harte Lichtsaeume statt weichem Strahlen). */ - glanz(g, c, a.glanzStaerke, 176, Math.max(3, zb / 190)); + glanz(g, c, a.glanzStaerke, 172, Math.max(3, zb / 190)); + + /* 6: TIEFE. Die dunkelsten Stellen werden noch etwas dunkler, die + hellsten noch etwas heller -- eine S-Kurve, wie sie jeder + Bildbearbeiter als Erstes zieht. + + Das ist NICHT dasselbe wie mehr Kontrast: Kontrast dehnt alles + gleichmaessig und frisst dabei Zeichnung in den Lichtern. Die + S-Kurve laesst die MITTE in Ruhe (dort sitzt das Motiv) und + arbeitet nur an den Enden. Genau daran erkennt man ein poliertes + Bild -- der schwarze Stein ist wirklich schwarz, das Neon wirklich + hell, und dazwischen bleibt alles lesbar. + + Gerechnet auf dem Maximum der drei Kanaele, nicht je Kanal + einzeln: Je Kanal wuerde die Kurve die FARBE verschieben (ein + dunkles Rot wird sonst braun). So bleibt der Farbton, nur die + Helligkeit wandert. */ + tiefe(g, c, a.tiefe); /* 3: Die Vignette. Elliptisch ueber die ganze Flaeche, in der Mitte voellig klar, zu den Ecken hin dunkel. Der weiche Verlauf ist @@ -462,7 +506,8 @@ async function bauen({ quelle, ziel, breite, ausschnitt = null, dunkel = 0, guet } return c.toDataURL("image/webp", a.guete); }, { daten: alsDatenAdresse(quelle), breite, ausschnitt, dunkel, guete, seitenverhaeltnis, - kontrast, saettigung, vignette, schaerfe, glanzStaerke, werkzeug: BILD_WERKZEUG }); + kontrast, saettigung, vignette, schaerfe, glanzStaerke, tiefe, + werkzeug: BILD_WERKZEUG }); const puffer = Buffer.from(webp.split(",")[1], "base64"); writeFileSync(ziel, puffer); diff --git a/workspace/assets/css/gate.css b/workspace/assets/css/gate.css index c843f20e..87c93636 100644 --- a/workspace/assets/css/gate.css +++ b/workspace/assets/css/gate.css @@ -1750,3 +1750,34 @@ body.gate { @media (forced-colors: active) { .teilen { border: 1px solid ButtonText; background: ButtonFace; color: ButtonText; } } + +/* ===================================================================== + „SpicyMedia × DogFather" im Kopf der Anmeldekarte (07.09.2026) + + Zwei Marken und ein Zeichen dazwischen. Drei gleich laute Wörter + nebeneinander liest niemand als Paar -- das Kreuz muss kleiner und + leiser sein als die Namen, sonst wird aus einer Kooperation eine + Aufzählung. + + Das Zeichen ist ein echtes Multiplikationszeichen (×, U+00D7), kein + kleines x: Das x einer Schrift steht auf der Grundlinie und sitzt + dadurch optisch zu tief zwischen zwei Versalien. + + Die Farben nehmen die beiden Seiten des Neonrahmens auf, in dem die + Karte steckt: Spicy Media rot, DogFather blau. Beide gedeckt und + gegen den dunklen Grund gemessen -- augenschonend bleibt Vorgabe. + ===================================================================== */ +.marke--paar { + display: flex; align-items: baseline; gap: .42em; + flex-wrap: wrap; +} +.marke--paar .marke__spicy { color: #e9848c; } +.marke--paar .marke__dogi { color: #63b8ee; } +.marke--paar .marke__x { + /* Kleiner, leiser, und mit etwas Luft -- es verbindet, es benennt + nicht. */ + font-size: .82em; + font-weight: 500; + color: var(--text-still); + transform: translateY(-.02em); +} diff --git a/workspace/assets/css/start.css b/workspace/assets/css/start.css index f3389ea4..c23092e8 100644 --- a/workspace/assets/css/start.css +++ b/workspace/assets/css/start.css @@ -4004,93 +4004,41 @@ body[data-fremde-sicht="ja"]::after { } /* ===================================================================== - LEUCHTKASTEN — der zweite Anlauf, und diesmal ein anderes Ding - (07.09.2026, abends) + ZWEITER ANLAUF: MATTGLAS RAUS (07.09.2026) - Filipe zum ersten Anlauf: "das ist genau das gleiche ... ich wollte - eine krasse aenderung ... es muss einzigartig sein und der seite - angepasst." Und zum Hintergrund: "die sollen nicht durch die kacheln - gehen ... vielleicht ganz ganz ganz leicht durch zu sehen sein." + Die Kacheln lagen hinter `backdrop-filter: blur(16px)`. Auf einer + Seite mit siebzehn Kacheln heisst das: Der groesste Teil des + Hintergrundbildes ist verwaschen -- man sieht ein unscharfes Bild und + haelt das Bild fuer unscharf. Genau das hat Filipe gemeldet ("sehen + die sogar leicht verschwommen aus"), und ich hatte es selbst + eingebaut, mit der Begruendung, Kachel und Bild sollten + "zusammengehoeren". Sie gehoeren auch zusammen, wenn die Kachel ein + eigener Gegenstand ist; Mattglas war die falsche Antwort auf die + richtige Frage. - Er hat in beidem recht, und der zweite Satz erklaert den ersten. - - DAS MATTGLAS WAR DER FEHLER. 16 px Weichzeichner hinter jeder Kachel - heisst: Unter jeder Kachel liegt eine verschwommene Fläche. Auf einer - Seite mit siebzehn Kacheln ist damit der grösste Teil des Bildes - verwaschen -- man sieht ein unscharfes Bild und hält das Bild für - unscharf. Genau das hat er gemeldet ("sehen die sogar leicht - verschwommen aus"), und ich hatte es selbst eingebaut, mit der - Begründung, Kachel und Bild sollten "zusammengehören". Sie gehören - auch zusammen, wenn die Kachel ein eigener Gegenstand ist -- Mattglas - war die falsche Antwort auf die richtige Frage. - - WAS JETZT DA STEHT, IST EIN ANDERES DING, KEIN AUFGEHÜBSCHTES: - - Die Kachel ist eine dunkle Platte, die in einer LEUCHTSCHIENE - steckt. Die Schiene ist die Farbe der Kategorie. Sie leuchtet nicht - nur am Rand -- sie WIRFT LICHT in die Platte hinein, das nach - rechts ausläuft. Deshalb ist die linke Kante scharf (dort sitzt sie - in der Schiene) und die rechte rund (dort ist sie frei). - - Das ist der Unterschied zu vorher: Die Farbe war ein Strich AN der - Kachel; jetzt ist sie die Lichtquelle DER Kachel. Jede Kategorie - leuchtet in ihrem eigenen Licht, und man erkennt sie aus drei Metern - Entfernung, ohne ein Wort zu lesen. - - Dazu drei Dinge, die eine Fläche zu einem Gegenstand machen und die - bleiben, weil sie richtig waren: Gewicht (zwei Schatten), Material- - stärke (Licht oben, Schatten unten) und Körnung. Neu dazu kommt der - GLANZ, der beim Überfahren über die Platte WANDERT -- so verhält sich - eine lackierte Oberfläche, wenn man den Kopf bewegt. - - DURCHSICHT: 6 Prozent, und SCHARF. Genau das, worum er gebeten hat -- - das Bild schimmert durch, ohne dass irgendwo etwas verwischt wird. + Seitdem: deckende Platte mit 6 % Durchsicht, und die SCHARF. Die + Form, die daraus wurde, steht weiter unten unter MODULKARTEN -- der + Entwurf von hier (Querformat mit Schiene links) hat nur einen + Nachmittag gehalten und ist dort vollstaendig ersetzt. ===================================================================== */ -.kachel { - /* Links scharf, rechts rund. Das ist die Silhouette, an der man diese - Oberfläche wiedererkennt -- und der einzige Teil des Entwurfs, der - schon aus zehn Metern wirkt. */ - border-radius: 4px 20px 20px 4px; - /* DREI SCHICHTEN, von oben nach unten: - 1. das Licht der Schiene, das nach rechts ausläuft - 2. die Platte selbst, leicht von oben links beleuchtet - 3. 6 % Durchsicht (die Farbe ist nicht ganz deckend) - Kein backdrop-filter mehr -- nichts wird verwischt. */ - background: - /* STEILER ABFALL, nicht flächig. Beim ersten Anlauf reichte das - Licht bis 68 % -- damit war die Kachel eingefärbt statt - beleuchtet, und eingefärbt sieht billig aus. Licht nimmt mit dem - Quadrat der Entfernung ab; die Stufen bilden das nach: satt an - der Schiene, nach einem Fünftel schon deutlich weniger, nach - einem Drittel nur noch ein Hauch. Das ist der Unterschied - zwischen "farbige Kachel" und "Kachel, auf die Licht fällt". */ - linear-gradient(90deg, - color-mix(in srgb, var(--ton) 40%, transparent) 0%, - color-mix(in srgb, var(--ton) 15%, transparent) 9%, - color-mix(in srgb, var(--ton) 5%, transparent) 22%, - color-mix(in srgb, var(--ton) 1.5%, transparent) 38%, - transparent 52%), - linear-gradient(163deg, - rgba(23, 31, 45, .95) 0%, - rgba(11, 15, 24, .95) 58%, - rgba(8, 11, 18, .95) 100%); +/* WAS VON DIESEM ENTWURF BLEIBT (aufgeraeumt 07.09.2026). + + Form, Flaeche, Schienenrichtung und Schatten stehen jetzt weiter + unten im Abschnitt MODULKARTEN -- die Kachel ist vom Quer- ins + Hochformat gewandert, und dabei hat sich jede einzelne dieser + Angaben geaendert. + + Die alten Regeln hier stehen zu lassen waere doppelt schaedlich + gewesen: Sie kosten Bytes auf jeder Seite (die Datei lief in die + 200-KB-Grenze von pruef-struktur), und vor allem waeren es ZWEI + Stellen, an denen dieselbe Kachel beschrieben wird. Genau daran + scheitert der Naechste, der etwas aendert: Er trifft die falsche. + + Es bleibt, was der neue Entwurf NICHT selbst setzt. */ +.kachel { backdrop-filter: none; -webkit-backdrop-filter: none; - - /* MATERIALSTÄRKE: Licht oben, Schatten unten -- beide innen. - GEWICHT: zwei Schatten, ein enger dunkler direkt darunter und ein - weiter weicher. Ein einzelner Schatten sieht immer nach Aufkleber - aus; erst die Kombination liest sich als "liegt auf etwas". - Dazu innen links ein farbiger Saum: das Licht der Schiene, das auf - die Schnittkante der Platte fällt. */ - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, .10), - inset 0 -1px 0 rgba(0, 0, 0, .50), - inset 2px 0 0 -1px color-mix(in srgb, var(--ton) 30%, transparent), - 0 2px 5px -2px rgba(0, 0, 0, .55), - 0 16px 34px -20px rgba(0, 0, 0, .88); - border-color: color-mix(in srgb, var(--ton) 18%, rgba(150, 186, 220, .13)); transition: border-color var(--tempo), transform var(--tempo), box-shadow var(--tempo); } @@ -4140,23 +4088,16 @@ body[data-fremde-sicht="ja"]::after { transition: opacity var(--tempo), background-position .55s cubic-bezier(.35, 0, .2, 1); } -/* DIE LEUCHTSCHIENE. Kein Strich am Rand mehr, sondern eine Lichtquelle: - ein heller Kern, darüber ein Schein, der nach beiden Seiten austritt. - Oben am hellsten -- Leuchtstoff altert nach unten, und genau diese - Ungleichmäßigkeit macht den Unterschied zu einem gemalten Balken. */ +/* Die Leuchtschiene und der wandernde Glanz stehen im Abschnitt + MODULKARTEN weiter unten -- dort liegt die Schiene OBEN statt links, + weil die Kachel hochkant ist. Hier bleibt nur, was der neue Entwurf + nicht selbst setzt: die Grunddeckkraft des Glanzes und seine + Ueberblendung. */ +.kachel::after { + opacity: .58; + transition: opacity var(--tempo), background-position .55s cubic-bezier(.35, 0, .2, 1); +} .kachel::before { - width: 4px; - border-radius: 4px 0 0 4px; - background: - linear-gradient(180deg, - color-mix(in srgb, var(--ton) 55%, #fff) 0%, - var(--ton) 26%, - color-mix(in srgb, var(--ton) 82%, transparent) 72%, - color-mix(in srgb, var(--ton) 46%, transparent) 100%); - box-shadow: - 0 0 9px 0 color-mix(in srgb, var(--ton) 55%, transparent), - 3px 0 20px -3px color-mix(in srgb, var(--ton) 42%, transparent); - opacity: .92; transition: opacity var(--tempo), width var(--tempo), box-shadow var(--tempo); } @@ -4519,3 +4460,257 @@ body[data-fremde-sicht="ja"]::after { .uhr { background: Canvas; box-shadow: none; border: 1px solid CanvasText; } .uhr__skala, .uhr__glas { display: none; } } + + +/* ===================================================================== + MODULKARTEN — die Kacheln werden ein Raster, keine Liste + (07.09.2026, dritter Anlauf) + + Filipe zum zweiten Anlauf: "sorry aber ich glaub du verstehst nicht + was ich meine, ich sag ja ich will eine komplette änderung von den + kacheln, viel übersichtlicher ... es soll ganz anders aussehen wie + jetzt." + + --------------------------------------------------------------------- + ER HAT RECHT, UND ICH WEISS JETZT WARUM + + Zweimal habe ich die OBERFLÄCHE geändert -- Mattglas, dann + Leuchtschiene -- und beide Male blieb die FORM gleich: eine breite + Zeile, Zeichen links, Text daneben, Pfeil rechts. Drei davon passen + nebeneinander, siebzehn ergeben sechs Reihen. Wer eine Zeile + umlackiert, bekommt eine lackierte Zeile. + + Was sich ändern musste, ist die Form: + + AUS DREI BREITEN ZEILEN WIRD EIN RASTER AUS SECHS KARTEN. + + Das ist der eigentliche Punkt hinter "übersichtlicher". Eine breite + Zeile zwingt das Auge, von links nach rechts zu LESEN -- siebzehnmal. + Eine kompakte Karte erkennt man an ihrer Form und ihrem Zeichen, + ohne ein Wort zu lesen; das Auge springt statt zu wandern. Bei + 1380 px passen jetzt sechs Karten nebeneinander statt drei: Der + ganze Arbeitsbereich steht auf einem Bildschirm, ohne zu scrollen. + + --------------------------------------------------------------------- + WAS SICH IM EINZELNEN ÄNDERT + + FORM Hochformat statt Querformat. Zeichen oben, Name unten -- + die Leserichtung eines Menschen, der etwas SUCHT (erst + das Bild, dann der Name), nicht eines, der liest. + + SCHIENE Sie wandert von links nach OBEN. An einer hochkanten + Karte ist die lange Seite senkrecht; ein Lichtbalken + dort würde die Karte optisch halbieren. Oben liegt er + wie eine beschriftete Kante an einem Gerät. + + ZEICHEN Größer und in einer eigenen, beleuchteten Mulde. Es ist + jetzt das erste, was man sieht, und trägt deshalb mehr + Gewicht als vorher. + + ZAHL Nach oben rechts, als eigene Marke. Vorher stand sie in + derselben Zeile wie der Name und hat ihn gekürzt. + + WASSER- Größer und weiter unten -- sie füllt jetzt die untere + ZEICHEN Hälfte der Karte und gibt jeder Kachel eine eigene + Silhouette. Bei sechs Karten nebeneinander ist genau das + der Unterschied zwischen "Raster" und "Sammlung". + + GROSSE `data-gross="ja"` nimmt zwei Spalten und bekommt das + KACHEL Querformat von früher -- so hebt sie sich WIRKLICH ab, + statt nur breiter zu sein. + + Material, Farben und Verhalten bleiben: beleuchtete Platte, Körnung, + Anheben statt Aufleuchten, jede Kategorie in ihrer Farbe. Das war + nicht das Problem. + ===================================================================== */ + +.kacheln { + /* 214 px ist gemessen, nicht geraten: Bei 1380 px Inhaltsbreite und + 12 px Abstand ergeben sich damit genau sechs Spalten (6 x 214 + + 5 x 12 = 1344). Darunter greift auto-fill von selbst auf fünf, + vier, drei -- ohne eine einzige Umbruchschwelle, die man beim + nächsten Element nachziehen müsste. */ + grid-template-columns: repeat(auto-fill, minmax(min(214px, 100%), 1fr)); + gap: 12px; +} + +.kachel { + border-radius: 16px; + /* Die Schiene liegt jetzt oben -- also gehört die Lichtkante des + Materials mit nach oben und der farbige Saum weg von links. */ + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, .10), + inset 0 -1px 0 rgba(0, 0, 0, .50), + 0 2px 5px -2px rgba(0, 0, 0, .55), + 0 16px 34px -20px rgba(0, 0, 0, .88); + background: + /* Das Licht der Schiene fällt jetzt von OBEN in die Platte. */ + linear-gradient(180deg, + color-mix(in srgb, var(--ton) 30%, transparent) 0%, + color-mix(in srgb, var(--ton) 11%, transparent) 12%, + color-mix(in srgb, var(--ton) 3%, transparent) 30%, + transparent 58%), + linear-gradient(163deg, + rgba(23, 31, 45, .95) 0%, + rgba(11, 15, 24, .95) 58%, + rgba(8, 11, 18, .95) 100%); +} + +/* DIE SCHIENE OBEN. Volle Breite, hell in der Mitte, zu den Ecken + auslaufend -- so sieht eine beleuchtete Kante aus, wenn die Lampe + dahinter mittig sitzt. Ein gleichmäßiger Balken sähe aufgeklebt aus. */ +.kachel::before { + left: 0; right: 0; top: 0; bottom: auto; + width: auto; height: 3px; + border-radius: 16px 16px 0 0; + background: linear-gradient(90deg, + color-mix(in srgb, var(--ton) 30%, transparent) 0%, + color-mix(in srgb, var(--ton) 55%, #fff) 34%, + var(--ton) 62%, + color-mix(in srgb, var(--ton) 34%, transparent) 100%); + box-shadow: + 0 0 9px 0 color-mix(in srgb, var(--ton) 45%, transparent), + 0 3px 20px -3px color-mix(in srgb, var(--ton) 38%, transparent); + opacity: .85; +} +.kachel:hover::before { + opacity: 1; + box-shadow: + 0 0 14px 0 color-mix(in srgb, var(--ton) 70%, transparent), + 0 5px 32px -3px color-mix(in srgb, var(--ton) 55%, transparent); +} + +/* Der Glanz zieht jetzt von oben links nach unten rechts -- an einer + hochkanten Fläche ist das die Richtung, in der Licht fällt. */ +.kachel::after { + background: + linear-gradient(148deg, + transparent 24%, + rgba(255, 255, 255, .05) 38%, + rgba(255, 255, 255, .10) 46%, + rgba(255, 255, 255, .03) 54%, + transparent 70%), + radial-gradient(130% 120% at var(--mx) var(--my), + color-mix(in srgb, var(--ton) 24%, transparent), transparent 62%); + background-size: 100% 240%, 100% 100%; + background-position: 0 -30%, 0 0; +} +.kachel:hover::after { background-position: 0 130%, 0 0; } + +/* ---------- Der Aufbau der Karte ------------------------------------- */ +.kachel__link { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 0; + padding: 15px 15px 14px; + /* Feste Mindesthöhe, damit alle Karten einer Reihe gleich hoch sind, + auch wenn eine Unterzeile fehlt. Ohne sie entsteht genau der + zerfranste Rand, den "übersichtlich" ausschließt. */ + min-height: 152px; +} + +.kachel__zeichen { + width: 46px; height: 46px; + margin: 0 0 auto; /* schiebt den Text nach unten */ + border-radius: 14px; +} +.kachel__svg { width: 25px; height: 25px; } + +.kachel__text { + width: 100%; + margin-top: 14px; + gap: 2px; +} +.kachel__name { + font-size: 1rem; font-weight: 700; letter-spacing: -.012em; + /* Zwei Zeilen erlaubt: "Calls & Protokolle" passt in einer Spalte von + 214 px nicht in eine Zeile, und ein abgeschnittener Name ist auf + einer Übersichtsseite das Gegenteil von übersichtlich. */ + white-space: normal; + display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; + overflow: hidden; +} +.kachel__unter { + font-size: .765rem; line-height: 1.35; + color: var(--text-leise); + white-space: normal; + display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; + overflow: hidden; +} + +/* Die Zahl als Marke oben rechts -- neben dem Zeichen, nicht im Text. + Vorher stand sie in derselben Zeile wie der Name und hat ihn gekürzt. */ +.kachel__zahl { + position: absolute; top: 13px; right: 13px; + margin: 0; z-index: 2; + min-width: 28px; padding: 4px 9px; + font-size: .84rem; +} +/* Der Pfeil rückt in die untere rechte Ecke: Er ist die leiseste + Angabe der Karte und darf keinem Text im Weg stehen. */ +.kachel__pfeil { + position: absolute; right: 14px; bottom: 13px; + margin: 0; z-index: 2; + font-size: .95rem; line-height: 1; + color: color-mix(in srgb, var(--ton) 55%, var(--text-still)); + transition: transform var(--tempo), color var(--tempo); +} +.kachel:hover .kachel__pfeil { + transform: translateX(3px); + color: color-mix(in srgb, var(--ton) 80%, #ffffff); +} +/* Das Merk-Zeichen (angepinnt) sitzt links neben der Zahl. */ +.kachel__merk { position: absolute; top: 15px; right: 52px; margin: 0; z-index: 2; } + +/* Das Wasserzeichen füllt die untere Hälfte -- es ist bei sechs Karten + nebeneinander das, was jede von ihnen unterscheidbar macht. */ +.kachel__wasserzeichen { + right: -20px; bottom: -20px; + width: 118px; height: 118px; + opacity: .085; +} +.kachel:hover .kachel__wasserzeichen { + opacity: .15; + transform: rotate(-8deg) translate(-3px, -3px) scale(1.05); +} + +/* ---------- Die große Kachel ----------------------------------------- */ +/* Sie behält das Querformat von früher. Dadurch hebt sie sich WIRKLICH + ab: nicht "dieselbe Karte, nur breiter", sondern eine andere Form. */ +.kachel[data-gross="ja"] { + grid-column: span 2; +} +.kachel[data-gross="ja"] .kachel__link { + flex-direction: row; + align-items: center; + gap: 16px; + padding: 18px 18px 18px 20px; + min-height: 152px; +} +.kachel[data-gross="ja"] .kachel__zeichen { + width: 62px; height: 62px; margin: 0; border-radius: 18px; +} +.kachel[data-gross="ja"] .kachel__svg { width: 32px; height: 32px; } +.kachel[data-gross="ja"] .kachel__text { margin-top: 0; } +.kachel[data-gross="ja"] .kachel__name { font-size: 1.22rem; -webkit-line-clamp: 1; } +.kachel[data-gross="ja"] .kachel__unter { font-size: .84rem; -webkit-line-clamp: 1; } +.kachel[data-gross="ja"] .kachel__wasserzeichen { + width: 158px; height: 158px; right: -24px; bottom: -30px; +} + +@media (max-width: 560px) { + /* Auf dem Handy zwei Spalten. Eine einzige wäre wieder eine Liste -- + und genau davon kommen wir gerade weg. Zwei Karten je Reihe passen + bei 390 px (2 x 172 + 12), und der Name bleibt zweizeilig lesbar. */ + .kacheln { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } + .kachel__link { min-height: 138px; padding: 13px 13px 12px; } + .kachel[data-gross="ja"] { grid-column: span 2; } + .kachel[data-gross="ja"] .kachel__link { flex-direction: row; min-height: 96px; } + .kachel[data-gross="ja"] .kachel__zeichen { width: 48px; height: 48px; } + .kachel__zeichen { width: 40px; height: 40px; border-radius: 12px; } + .kachel__svg { width: 22px; height: 22px; } + .kachel__name { font-size: .93rem; } + .kachel__unter { font-size: .72rem; } + .kachel__wasserzeichen { width: 96px; height: 96px; } +} diff --git a/workspace/assets/img/buehne-arena-breit.webp b/workspace/assets/img/buehne-arena-breit.webp index fc628905..ec507dc2 100644 Binary files a/workspace/assets/img/buehne-arena-breit.webp and b/workspace/assets/img/buehne-arena-breit.webp differ diff --git a/workspace/assets/img/buehne-arena-schmal.webp b/workspace/assets/img/buehne-arena-schmal.webp index e1e73077..777755f7 100644 Binary files a/workspace/assets/img/buehne-arena-schmal.webp and b/workspace/assets/img/buehne-arena-schmal.webp differ diff --git a/workspace/assets/img/buehne-arena-uhd.webp b/workspace/assets/img/buehne-arena-uhd.webp index 5e7e4c97..fc8003a8 100644 Binary files a/workspace/assets/img/buehne-arena-uhd.webp and b/workspace/assets/img/buehne-arena-uhd.webp differ diff --git a/workspace/assets/img/buehne-garage-breit.webp b/workspace/assets/img/buehne-garage-breit.webp index 89e93607..e4c74a30 100644 Binary files a/workspace/assets/img/buehne-garage-breit.webp and b/workspace/assets/img/buehne-garage-breit.webp differ diff --git a/workspace/assets/img/buehne-garage-schmal.webp b/workspace/assets/img/buehne-garage-schmal.webp index 7b5a3042..41703be0 100644 Binary files a/workspace/assets/img/buehne-garage-schmal.webp and b/workspace/assets/img/buehne-garage-schmal.webp differ diff --git a/workspace/assets/img/buehne-garage-uhd.webp b/workspace/assets/img/buehne-garage-uhd.webp index 6bf92274..358ffc82 100644 Binary files a/workspace/assets/img/buehne-garage-uhd.webp and b/workspace/assets/img/buehne-garage-uhd.webp differ diff --git a/workspace/assets/img/buehne-halle-breit.webp b/workspace/assets/img/buehne-halle-breit.webp index fc628905..ec507dc2 100644 Binary files a/workspace/assets/img/buehne-halle-breit.webp and b/workspace/assets/img/buehne-halle-breit.webp differ diff --git a/workspace/assets/img/buehne-halle-schmal.webp b/workspace/assets/img/buehne-halle-schmal.webp index e1e73077..777755f7 100644 Binary files a/workspace/assets/img/buehne-halle-schmal.webp and b/workspace/assets/img/buehne-halle-schmal.webp differ diff --git a/workspace/assets/img/buehne-halle-uhd.webp b/workspace/assets/img/buehne-halle-uhd.webp index 5e7e4c97..fc8003a8 100644 Binary files a/workspace/assets/img/buehne-halle-uhd.webp and b/workspace/assets/img/buehne-halle-uhd.webp differ diff --git a/workspace/assets/img/buehne-lounge-breit.webp b/workspace/assets/img/buehne-lounge-breit.webp index 820bcb7a..16620e60 100644 Binary files a/workspace/assets/img/buehne-lounge-breit.webp and b/workspace/assets/img/buehne-lounge-breit.webp differ diff --git a/workspace/assets/img/buehne-lounge-schmal.webp b/workspace/assets/img/buehne-lounge-schmal.webp index 6269f207..f2d0c5af 100644 Binary files a/workspace/assets/img/buehne-lounge-schmal.webp and b/workspace/assets/img/buehne-lounge-schmal.webp differ diff --git a/workspace/assets/img/buehne-lounge-uhd.webp b/workspace/assets/img/buehne-lounge-uhd.webp index 0122a0aa..200cada3 100644 Binary files a/workspace/assets/img/buehne-lounge-uhd.webp and b/workspace/assets/img/buehne-lounge-uhd.webp differ diff --git a/workspace/assets/img/buehne-portal-breit.webp b/workspace/assets/img/buehne-portal-breit.webp index 912fece4..24abdd71 100644 Binary files a/workspace/assets/img/buehne-portal-breit.webp and b/workspace/assets/img/buehne-portal-breit.webp differ diff --git a/workspace/assets/img/buehne-portal-schmal.webp b/workspace/assets/img/buehne-portal-schmal.webp index f78e877f..111ac376 100644 Binary files a/workspace/assets/img/buehne-portal-schmal.webp and b/workspace/assets/img/buehne-portal-schmal.webp differ diff --git a/workspace/assets/img/buehne-portal-uhd.webp b/workspace/assets/img/buehne-portal-uhd.webp index 6b25c48e..33507519 100644 Binary files a/workspace/assets/img/buehne-portal-uhd.webp and b/workspace/assets/img/buehne-portal-uhd.webp differ diff --git a/workspace/assets/img/buehne-showbuehne-breit.webp b/workspace/assets/img/buehne-showbuehne-breit.webp index a9b18cbf..59d70b74 100644 Binary files a/workspace/assets/img/buehne-showbuehne-breit.webp and b/workspace/assets/img/buehne-showbuehne-breit.webp differ diff --git a/workspace/assets/img/buehne-showbuehne-schmal.webp b/workspace/assets/img/buehne-showbuehne-schmal.webp index 63973a1e..74a50cde 100644 Binary files a/workspace/assets/img/buehne-showbuehne-schmal.webp and b/workspace/assets/img/buehne-showbuehne-schmal.webp differ diff --git a/workspace/assets/img/buehne-showbuehne-uhd.webp b/workspace/assets/img/buehne-showbuehne-uhd.webp index e10cfa93..a419f33c 100644 Binary files a/workspace/assets/img/buehne-showbuehne-uhd.webp and b/workspace/assets/img/buehne-showbuehne-uhd.webp differ diff --git a/workspace/assets/img/buehne-skyline-breit.webp b/workspace/assets/img/buehne-skyline-breit.webp index 820bcb7a..16620e60 100644 Binary files a/workspace/assets/img/buehne-skyline-breit.webp and b/workspace/assets/img/buehne-skyline-breit.webp differ diff --git a/workspace/assets/img/buehne-skyline-schmal.webp b/workspace/assets/img/buehne-skyline-schmal.webp index 6269f207..f2d0c5af 100644 Binary files a/workspace/assets/img/buehne-skyline-schmal.webp and b/workspace/assets/img/buehne-skyline-schmal.webp differ diff --git a/workspace/assets/img/buehne-skyline-uhd.webp b/workspace/assets/img/buehne-skyline-uhd.webp index 0122a0aa..200cada3 100644 Binary files a/workspace/assets/img/buehne-skyline-uhd.webp and b/workspace/assets/img/buehne-skyline-uhd.webp differ diff --git a/workspace/assets/img/buehne-studio-breit.webp b/workspace/assets/img/buehne-studio-breit.webp index 099c77ef..1de38766 100644 Binary files a/workspace/assets/img/buehne-studio-breit.webp and b/workspace/assets/img/buehne-studio-breit.webp differ diff --git a/workspace/assets/img/buehne-studio-schmal.webp b/workspace/assets/img/buehne-studio-schmal.webp index 9b9d3ce8..d42ed3cd 100644 Binary files a/workspace/assets/img/buehne-studio-schmal.webp and b/workspace/assets/img/buehne-studio-schmal.webp differ diff --git a/workspace/assets/img/buehne-studio-uhd.webp b/workspace/assets/img/buehne-studio-uhd.webp index 5a51ae4a..f3077ae7 100644 Binary files a/workspace/assets/img/buehne-studio-uhd.webp and b/workspace/assets/img/buehne-studio-uhd.webp differ diff --git a/workspace/assets/img/buehne-wald-breit.webp b/workspace/assets/img/buehne-wald-breit.webp index d74abff5..8a7dbfc4 100644 Binary files a/workspace/assets/img/buehne-wald-breit.webp and b/workspace/assets/img/buehne-wald-breit.webp differ diff --git a/workspace/assets/img/buehne-wald-schmal.webp b/workspace/assets/img/buehne-wald-schmal.webp index cbb5b866..8be7f9d9 100644 Binary files a/workspace/assets/img/buehne-wald-schmal.webp and b/workspace/assets/img/buehne-wald-schmal.webp differ diff --git a/workspace/assets/img/buehne-wald-uhd.webp b/workspace/assets/img/buehne-wald-uhd.webp index e224fca4..9fcab29e 100644 Binary files a/workspace/assets/img/buehne-wald-uhd.webp and b/workspace/assets/img/buehne-wald-uhd.webp differ diff --git a/workspace/assets/img/buehne/gate-1280.webp b/workspace/assets/img/buehne/gate-1280.webp index 7469d925..10f34838 100644 Binary files a/workspace/assets/img/buehne/gate-1280.webp and b/workspace/assets/img/buehne/gate-1280.webp differ diff --git a/workspace/assets/img/buehne/gate-1600.webp b/workspace/assets/img/buehne/gate-1600.webp index 627ad641..58b09d27 100644 Binary files a/workspace/assets/img/buehne/gate-1600.webp and b/workspace/assets/img/buehne/gate-1600.webp differ diff --git a/workspace/assets/img/buehne/gate-1920.webp b/workspace/assets/img/buehne/gate-1920.webp index 6fef7455..61c435ad 100644 Binary files a/workspace/assets/img/buehne/gate-1920.webp and b/workspace/assets/img/buehne/gate-1920.webp differ diff --git a/workspace/assets/img/buehne/gate-2560.webp b/workspace/assets/img/buehne/gate-2560.webp index 842525e0..6d366fda 100644 Binary files a/workspace/assets/img/buehne/gate-2560.webp and b/workspace/assets/img/buehne/gate-2560.webp differ diff --git a/workspace/assets/img/buehne/gate-960.webp b/workspace/assets/img/buehne/gate-960.webp index 69bf28de..349d2b23 100644 Binary files a/workspace/assets/img/buehne/gate-960.webp and b/workspace/assets/img/buehne/gate-960.webp differ diff --git a/workspace/assets/img/buehne/gate-hoch-440.webp b/workspace/assets/img/buehne/gate-hoch-440.webp index 68100842..8e1265de 100644 Binary files a/workspace/assets/img/buehne/gate-hoch-440.webp and b/workspace/assets/img/buehne/gate-hoch-440.webp differ diff --git a/workspace/assets/img/buehne/gate-hoch-580.webp b/workspace/assets/img/buehne/gate-hoch-580.webp index a93a4528..8016637e 100644 Binary files a/workspace/assets/img/buehne/gate-hoch-580.webp and b/workspace/assets/img/buehne/gate-hoch-580.webp differ diff --git a/workspace/assets/img/buehne/gate-hoch-900.webp b/workspace/assets/img/buehne/gate-hoch-900.webp index 7b5c8995..859b3a1c 100644 Binary files a/workspace/assets/img/buehne/gate-hoch-900.webp and b/workspace/assets/img/buehne/gate-hoch-900.webp differ diff --git a/workspace/assets/js/bereiche.js b/workspace/assets/js/bereiche.js index 53f1985d..b4f9aeb0 100644 --- a/workspace/assets/js/bereiche.js +++ b/workspace/assets/js/bereiche.js @@ -381,8 +381,15 @@ die Frage, welcher der richtige ist. */ { name: 'Mein Profil', unter: 'Dein Bild, deine Ziele und Pläne', zeichen: 'profil', ton: 20, rollen: ['creator'], ziel: 'profil.html', szene: 'halle' }, + /* NUR DOGFATHER (07.09.2026, Wunsch Filipe: "nimm die kategorie + zahlen bei jedem weg, nur die rolle dogfather soll die + sehen"). Die Kachel verschwindet damit fuer Manager, Scouts + und Creator -- die SEITE bleibt fuer sie gesperrt, das regelt + weiterhin die Rechteliste in workspace.js. Eine Kachel + wegzunehmen, ohne die Seite zu schliessen, waere nur ein + versteckter Weg und keine Regel. */ { name: 'Zahlen', unter: 'Diamanten, LIVE-Tage, Verweildauer', zeichen: 'zahlen', ton: 2, - rollen: ['admin', 'manager', 'creator', 'scout'], ziel: 'leistung.html', szene: 'arena' }, + rollen: ['admin'], ziel: 'leistung.html', szene: 'arena' }, { name: 'Start-Check', unter: 'Erstanalyse, 16 Punkte', zeichen: 'startcheck', ton: 16, rollen: ['admin', 'manager', 'creator', 'scout'], ziel: 'startcheck.html', szene: 'wald' }, { name: 'LIVE-Analyse', unter: 'Vorher, während, danach', zeichen: 'live', ton: 3, diff --git a/workspace/aufgaben.html b/workspace/aufgaben.html index ad663fa4..8b47e7cd 100644 --- a/workspace/aufgaben.html +++ b/workspace/aufgaben.html @@ -9,9 +9,9 @@ - - - + + + @@ -211,10 +211,10 @@ - - - - - + + + + + diff --git a/workspace/automation.html b/workspace/automation.html index a90558bd..7e006aed 100644 --- a/workspace/automation.html +++ b/workspace/automation.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -134,10 +134,10 @@ - - - - - + + + + + diff --git a/workspace/bereich.html b/workspace/bereich.html index 2dcd8d81..8db587b0 100644 --- a/workspace/bereich.html +++ b/workspace/bereich.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -143,14 +143,14 @@ - - - - - - - - - + + + + + + + + + diff --git a/workspace/calls.html b/workspace/calls.html index 6ccbae68..f071238d 100644 --- a/workspace/calls.html +++ b/workspace/calls.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -76,11 +76,11 @@ - - - - - - + + + + + + diff --git a/workspace/chat.html b/workspace/chat.html index 875f4432..bb40306a 100644 --- a/workspace/chat.html +++ b/workspace/chat.html @@ -9,16 +9,16 @@ - - + + - - + + @@ -154,9 +154,9 @@ - - - - + + + + diff --git a/workspace/content.html b/workspace/content.html index 3db4f087..8f47529d 100644 --- a/workspace/content.html +++ b/workspace/content.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -166,12 +166,12 @@ - - - - - - - + + + + + + + diff --git a/workspace/dateien.html b/workspace/dateien.html index ebb1ef41..8f32df5f 100644 --- a/workspace/dateien.html +++ b/workspace/dateien.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -95,10 +95,10 @@ - - - - - + + + + + diff --git a/workspace/index.html b/workspace/index.html index 465048ab..826219a8 100644 --- a/workspace/index.html +++ b/workspace/index.html @@ -27,7 +27,7 @@ - + @@ -79,10 +79,23 @@
+
-

Dogfather Universe

+

+ SpicyMedia + × + DogFather +

Creator Workspace

-

Privater Bereich für Creator, Scouts und DogFather.

+

Privater Bereich für die Manager, Scouts und Creator von Spicy Media.

@@ -173,6 +186,6 @@
- + diff --git a/workspace/kalender.html b/workspace/kalender.html index 2385e3f6..34d1fc7e 100644 --- a/workspace/kalender.html +++ b/workspace/kalender.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -257,11 +257,11 @@ - - - - - - + + + + + + diff --git a/workspace/leistung.html b/workspace/leistung.html index fe7a3501..b8df6247 100644 --- a/workspace/leistung.html +++ b/workspace/leistung.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -211,10 +211,10 @@ - - - - - + + + + + diff --git a/workspace/personen.html b/workspace/personen.html index f3446405..7066791e 100644 --- a/workspace/personen.html +++ b/workspace/personen.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -123,10 +123,10 @@ - - - - - + + + + + diff --git a/workspace/profil.html b/workspace/profil.html index af5cb926..40a78f1e 100644 --- a/workspace/profil.html +++ b/workspace/profil.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -201,11 +201,11 @@ - - - - - - + + + + + + diff --git a/workspace/report.html b/workspace/report.html index 0960292f..399c9eab 100644 --- a/workspace/report.html +++ b/workspace/report.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -93,11 +93,11 @@ - - - - - - + + + + + + diff --git a/workspace/scouting.html b/workspace/scouting.html index 229b594d..6fa45570 100644 --- a/workspace/scouting.html +++ b/workspace/scouting.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -126,10 +126,10 @@ - - - - - + + + + + diff --git a/workspace/start.html b/workspace/start.html index a725c6dd..cd322527 100644 --- a/workspace/start.html +++ b/workspace/start.html @@ -9,8 +9,8 @@ - - + + @@ -187,10 +187,10 @@

- - - - - + + + + + diff --git a/workspace/startcheck.html b/workspace/startcheck.html index 4e4b067d..a2274c5b 100644 --- a/workspace/startcheck.html +++ b/workspace/startcheck.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -72,11 +72,11 @@ - - - - - - + + + + + + diff --git a/workspace/steckbrief.html b/workspace/steckbrief.html index ca7ea8fa..07ca894f 100644 --- a/workspace/steckbrief.html +++ b/workspace/steckbrief.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -113,10 +113,10 @@ - - - - - + + + + + diff --git a/workspace/uebersicht.html b/workspace/uebersicht.html index 9e338d26..9fa88a79 100644 --- a/workspace/uebersicht.html +++ b/workspace/uebersicht.html @@ -9,9 +9,9 @@ - - - + + + @@ -82,10 +82,10 @@ - + - - - + + + diff --git a/workspace/wissen.html b/workspace/wissen.html index d2f20127..e72593d7 100644 --- a/workspace/wissen.html +++ b/workspace/wissen.html @@ -9,10 +9,10 @@ - - - - + + + + @@ -177,10 +177,10 @@ - - - - - + + + + +