/* =================================================================== Creator Workspace - Anmeldeseite ------------------------------------------------------------------- Grundsatz: dunkel und ruhig. Die Farben stammen aus dem Motiv, sind aber bewusst entsättigt - Neon als Stimmung, nicht als Blendung. Kein reines Weiss auf Schwarz, keine harten Kanten, keine Blinker. =================================================================== */ :root { --tinte: #05070d; --glas: rgba(10, 14, 23, 0.74); --glas-tief: rgba(6, 9, 16, 0.86); /* Die Flaeche jeder Kachel, Karte und Spalte -- an EINER Stelle. Vorher stand in jeder Datei ein eigener Wert zwischen .02 und .032 WEISS, also praktisch durchsichtig. Solange der Hintergrund fast schwarz war, fiel das nicht auf. Seit die Buehnen hell sind, kam das Bild mitten durch den Text. Jetzt eine deckende dunkle Flaeche: Der Hintergrund bleibt sichtbar, aber DAZWISCHEN -- nicht hinter der Schrift. Genau das macht den Unterschied zwischen "hat einen Hintergrund" und "ist unlesbar". Wer die Kacheln durchsichtiger oder dichter will, aendert nur diese eine Zeile. */ --flaeche: rgba(9, 13, 22, 0.78); --rand: rgba(150, 186, 220, 0.16); --rand-hell: rgba(150, 186, 220, 0.30); --text: #dbe4ef; /* kein reines Weiss - schont die Augen */ --text-leise: #94a5bb; /* Von #6d7d92 auf #75859a angehoben (01.09.2026). Aufgefallen erst, als die Buehne im Hintergrund dazukam und der Kontrast an echten BILDPUNKTEN gemessen wurde statt an der Farbangabe: Der leiseste Grauton lag bei 4,43:1 -- knapp unter den geforderten 4,5:1. Das war schon vorher so, nur hatte es nie jemand nachgerechnet. Jetzt 4,95:1 auf dem hellsten Untergrund, 5,35:1 auf reiner Tinte. Immer noch deutlich leiser als der Haupttext, aber lesbar -- und das gilt jetzt fuer JEDE Seite, nicht nur fuer die mit dem Hintergrundbild. */ --text-still: #75859a; --akzent: #3fbdf5; /* aus dem Neon des Motivs, entsättigt */ --akzent-tief: #1f7fb0; --violett: #8a76ff; --warn: #ff9aa2; /* weiches Rot statt Signalrot */ --radius: 18px; --radius-klein: 12px; --schatten: 0 24px 60px -20px rgba(0, 0, 0, 0.75); --tempo: .22s cubic-bezier(.4, 0, .2, 1); } *, *::before, *::after { box-sizing: border-box; } /* `color-scheme: dark` ist der eigentliche Schalter für alles, was der Browser selbst zeichnet und was CSS nicht erreicht: die aufgeklappte Liste eines bleibt im Dokument -- es haelt den Wert und macht jedes vorhandene `feld.value` weiter richtig. Es wird nur unsichtbar gemacht; sichtbar ist der Knopf darueber. Bewusst NICHT display:none: Ein so verstecktes Feld faellt aus der Formularpruefung des Browsers heraus, und `required` wuerde stumm nicht mehr greifen. =================================================================== */ .wahl2 { position: relative; display: block; } .wahl2__echt { position: absolute; inset: 0; opacity: 0; pointer-events: none; /* Nur ein Pixel gross, damit ein Fehlerhinweis des Browsers noch am richtigen Ort erscheint. */ width: 1px; height: 1px; } .wahl2__knopf { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; padding: 10px 12px; cursor: pointer; background: linear-gradient(#141c28, #101722); border: 1px solid var(--rand); border-radius: var(--radius-klein); color: var(--text); font: inherit; text-align: left; transition: border-color .16s ease, background .16s ease; } .wahl2__knopf:hover:not([disabled]) { border-color: rgba(255, 255, 255, .24); background: linear-gradient(#18212f, #141b27); } .wahl2__knopf:focus-visible, .wahl2__knopf[aria-expanded="true"] { outline: none; border-color: rgba(63, 189, 245, .65); box-shadow: 0 0 0 3px rgba(63, 189, 245, .16); } .wahl2__knopf[disabled] { opacity: .5; cursor: default; } .wahl2__knopf[data-leer="ja"] .wahl2__text { color: var(--text-still); } .wahl2__text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .wahl2__pfeil { width: 16px; height: 16px; flex: none; fill: none; stroke: var(--text-still); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; transition: transform .18s ease; } .wahl2__knopf[aria-expanded="true"] .wahl2__pfeil { transform: rotate(180deg); } /* Die Liste haengt am Fenster, nicht am Elternelement -- in einer Karte mit overflow: hidden waere sie sonst abgeschnitten. */ .wahl2__liste { position: fixed; z-index: 90; min-width: 180px; max-width: min(420px, calc(100vw - 24px)); overflow-y: auto; padding: 5px; background: #0d1420; border: 1px solid rgba(63, 189, 245, .3); border-radius: 11px; box-shadow: 0 18px 44px -16px rgba(0, 0, 0, .85); } .wahl2__gruppe { margin: 7px 8px 3px; font-size: .68rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--akzent); } .wahl2__gruppe:first-child { margin-top: 3px; } .wahl2__eintrag { display: block; width: 100%; padding: 8px 11px; cursor: pointer; background: transparent; border: 0; border-radius: 7px; color: var(--text-leise); font: inherit; font-size: .88rem; text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .wahl2__eintrag:hover:not([disabled]) { background: rgba(255, 255, 255, .06); color: var(--text); } .wahl2__eintrag:focus-visible { outline: none; background: rgba(63, 189, 245, .16); color: #fff; } .wahl2__eintrag[data-an="ja"] { color: #fff; font-weight: 600; background: rgba(63, 189, 245, .12); } .wahl2__eintrag[disabled], .wahl2__eintrag[data-aus="ja"] { color: var(--text-still); cursor: default; } /* ---------- Suchen und selbst eintragen (02.09.2026) -------------------- Das Suchfeld sitzt fest oben in der Liste, die Eintraege scrollen darunter weg -- sonst waere es beim Scrollen weg, und man wuesste nicht mehr, wonach gerade gefiltert wird. */ .wahl2__suche { display: block; width: 100%; margin: 0 0 5px; padding: 8px 11px; box-sizing: border-box; background: rgba(255, 255, 255, .04); border: 1px solid var(--rand); border-radius: 8px; color: var(--text); font: inherit; font-size: .88rem; } .wahl2__suche::placeholder { color: var(--text-still); } .wahl2__suche:focus-visible { outline: none; border-color: rgba(63, 189, 245, .6); box-shadow: 0 0 0 3px rgba(63, 189, 245, .14); } /* Nur die Eintraege scrollen, nicht das Suchfeld mit. */ .wahl2__zeilen { max-height: min(46vh, 320px); overflow-y: auto; } /* Der getippte Name als eigener Eintrag. Gedeckt abgesetzt, nicht grell -- er ist eine Moeglichkeit, keine Warnung. */ .wahl2__eintrag--eigen { color: #e8c07a; border: 1px dashed rgba(216, 161, 58, .45); margin-bottom: 4px; } .wahl2__eintrag--eigen:hover:not([disabled]) { background: rgba(216, 161, 58, .12); color: #f4dcb0; } .wahl2__leer { margin: 0; padding: 9px 11px; color: var(--text-still); font-size: .82rem; } /* Steht ein freier Name im Feld, sagt der Rand es leise mit. */ .wahl2__knopf[data-extern="ja"] { border-color: color-mix(in srgb, #d8a13a 45%, var(--rand)); } .wahl2__hinweis { margin: 6px 0 0; font-size: .78rem; line-height: 1.45; color: var(--text-leise); } .wahl2__hinweis::before { content: "↯"; margin-right: 6px; color: #d8a13a; } @media (prefers-reduced-motion: reduce) { .wahl2__knopf, .wahl2__pfeil { transition: none; } } @media (forced-colors: active) { /* Ohne Farben traegt der gestrichelte Rand die Unterscheidung. */ .wahl2__eintrag--eigen { border: 1px dashed CanvasText; } .wahl2__knopf[data-extern="ja"] { border: 2px solid CanvasText; } } /* =================================================================== Schalter (31.08.2026). Lag zuerst in wissen.css -- und fehlte prompt auf der Automationen- Seite, wo er als nacktes Kaestchen erschien. Genau derselbe Fehler wie damals bei .knopf-still: Ein gemeinsamer Baustein in einer Seiten-Datei fehlt irgendwann dort, wo die Datei nicht geladen wird. =================================================================== */ /* ---------- Schalter „besonders wichtig“ --------------------------------- Ein Kästchen von 17 Pixeln ist auf dem Handy kaum zu treffen und sagt nicht, was passiert. Der Schalter ist groß, zeigt seinen Zustand und erklärt sich in einer Zeile. */ .schalter { display: flex; align-items: flex-start; gap: 14px; margin-top: 18px; padding: 14px 16px; cursor: pointer; border: 1px solid var(--rand); border-radius: var(--radius); background: var(--flaeche); transition: border-color .18s ease, background .18s ease; } .schalter:hover { border-color: rgba(255, 255, 255, .2); } .schalter input { position: absolute; opacity: 0; width: 0; height: 0; } .schalter__gleis { flex: none; position: relative; width: 42px; height: 24px; margin-top: 1px; border-radius: 999px; background: rgba(255, 255, 255, .1); border: 1px solid var(--rand); transition: background .2s ease, border-color .2s ease; } .schalter__punkt { position: absolute; left: 3px; top: 3px; width: 16px; height: 16px; border-radius: 50%; background: var(--text-still); transition: transform .2s ease, background .2s ease; } .schalter input:checked + .schalter__gleis { background: rgba(232, 192, 125, .3); border-color: rgba(232, 192, 125, .6); } .schalter input:checked + .schalter__gleis .schalter__punkt { transform: translateX(18px); background: #e8c07d; } .schalter input:focus-visible + .schalter__gleis { box-shadow: 0 0 0 3px rgba(232, 192, 125, .28); } .schalter:has(input:checked) { border-color: rgba(232, 192, 125, .35); background: rgba(232, 192, 125, .05); } .schalter__text { display: grid; gap: 2px; font-size: .88rem; } .schalter__text .leise { font-size: .79rem; } /* ===================================================================== MATERIAL — die ganze Oberfläche auf einer Sprache (03.09.2026) Die Kachelzeichen sind Körper geworden. Alles andere war noch flach, und das fiel dadurch erst richtig auf: ein plastisches Zeichen neben einem gemalten Knopf sieht nicht nach "teilweise gut" aus, sondern nach Versehen. Deshalb gelten ab hier für JEDES Bauteil dieselben drei Regeln -- dieselben, nach denen auch die Zeichen gebaut sind: 1. LICHT VON OBEN. Eine helle Kante an der Oberkante, in der Mitte am stärksten, nach aussen auslaufend. Echtes Licht auf einer Kante sieht so aus; eine durchgehend gleich helle Linie ist ein Strich. 2. TIEFE NACH UNTEN. Ein Schatten, der nach unten versetzt liegt -- wie bei jedem Gegenstand, der auf etwas liegt. Ohne ihn klebt ein Element auf der Seite, statt darauf zu liegen. 3. VERLAUF STATT FLÄCHE. Oben eine Spur heller als unten. Kaum zu sehen, aber ohne ihn bleibt jede Fläche tot. Und eine vierte, die nur für Bedienbares gilt: 4. WAS MAN DRÜCKT, GEHT HINEIN. Beim Klick kehrt sich die Wölbung um: Licht nach unten, Schatten nach oben. Das ist der Unterschied zwischen "es passiert etwas" und "ich habe etwas gedrückt". Alles bleibt gedeckt. Diese Bauteile stehen zu Dutzenden auf einer Seite -- was einzeln beeindruckt, blendet im Dutzend. ===================================================================== */ /* ---------- 1. Knöpfe: Körper statt Fläche ---------------------------- */ .knopf, .knopf-still, .schritt, .abmelden, .stufe-knopf, .suche-knopf, .suche-zu, .todo__weg, .karte__stift { box-shadow: inset 0 1px 0 rgba(255, 255, 255, .09), inset 0 -2px 5px -3px rgba(0, 0, 0, .6), 0 3px 8px -5px rgba(0, 0, 0, .8); } .knopf:hover, .knopf-still:hover, .schritt:hover:not([disabled]), .abmelden:hover, .stufe-knopf:hover, .suche-knopf:hover, .suche-zu:hover, .todo__weg:hover, .karte__stift:hover { box-shadow: inset 0 1px 0 rgba(255, 255, 255, .14), inset 0 -2px 5px -3px rgba(0, 0, 0, .6), 0 8px 20px -9px color-mix(in srgb, var(--f) 85%, transparent), inset 0 0 22px -14px var(--f); } /* Gedrückt: die Wölbung kehrt sich um. */ .knopf:active, .knopf-still:active, .schritt:active:not([disabled]), .abmelden:active, .stufe-knopf:active, .suche-knopf:active, .suche-zu:active, .todo__weg:active, .karte__stift:active { transform: translateY(1px); box-shadow: inset 0 2px 6px -2px rgba(0, 0, 0, .75), inset 0 -1px 0 rgba(255, 255, 255, .07); } /* ---------- 2. Eingabefelder: vertieft statt aufgesetzt ---------------- */ .neu input, .neu select, .neu textarea, .wahl2__knopf, .wahl2__suche, .betreuung__wahl, .code-feld { box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, .75), inset 0 1px 0 rgba(255, 255, 255, .05); } /* Ein Feld, in das man schreibt, ist eine Mulde -- kein Knopf. Deshalb liegt das Licht hier UNTEN und der Schatten oben: genau umgekehrt. */ .neu input:focus, .neu select:focus, .neu textarea:focus, .wahl2__suche:focus, .betreuung__wahl:focus { box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, .75), 0 0 0 3px rgba(63, 189, 245, .16); } /* ---------- 3. Marken und Zähler: kleine Plaketten --------------------- */ .marke, .marke-still, .marke-rolle, .marke-art, .marke-fehlt, .stufe__zahl, .gruppe__zahl, .k-chip, .kk__marken > * { box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 2px 5px -4px rgba(0, 0, 0, .9); } /* ---------- 4. Hinweisflächen: Licht auf der Oberkante ----------------- */ .leer-hinweis, .hinweis, .kk__notiz, .call-raum, .code-kasten { position: relative; box-shadow: inset 0 1px 0 rgba(255, 255, 255, .06), 0 8px 22px -16px rgba(0, 0, 0, .9); } .leer-hinweis::after, .call-raum::after, .code-kasten::after { content: ""; position: absolute; top: 0; left: 18%; right: 18%; height: 1px; background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--ton, var(--akzent)) 70%, #fff), transparent); opacity: .5; pointer-events: none; } /* ---------- 5. Überschriften: Gewicht statt Größe ---------------------- */ /* Ein sehr weicher dunkler Schatten unter der Schrift. Er ändert die Farbe nicht (die Kontrastprüfung misst weiter dasselbe), gibt der Zeile aber eine Kante gegen den Hintergrund -- Text auf einem Foto wirkt dadurch aufgelegt statt hineingemischt. */ .titel, .gruppe__name, .stufe__titel, .kk__name, h1, h2 { text-shadow: 0 1px 2px rgba(0, 0, 0, .55); } /* Die kleinen Schilder darüber: mehr Abstand zwischen den Buchstaben, damit sie als Beschriftung gelesen werden und nicht als Wort. */ .feldschild, .kk__schild, .gruppe__unter { text-shadow: 0 1px 1px rgba(0, 0, 0, .4); } @media (prefers-reduced-motion: reduce) { .knopf:active, .knopf-still:active, .schritt:active, .abmelden:active, .stufe-knopf:active { transform: none; } } @media (forced-colors: active) { /* Im Kontrastmodus trägt allein die Kante. Schatten und Lichtsäume würden dort zu grauen Flecken. */ .knopf, .knopf-still, .schritt, .abmelden, .stufe-knopf, .marke, .marke-rolle, .leer-hinweis, .hinweis, .code-kasten, .neu input, .neu select, .neu textarea, .wahl2__knopf { box-shadow: none; } .leer-hinweis::after, .call-raum::after, .code-kasten::after { display: none; } .titel, .gruppe__name, h1, h2, .feldschild { text-shadow: none; } }