Workspace: keine Kachel mehr ohne Ziel -- Automationen bekommen ihren Ort

Filipe: "da sind aber noch zwei kategorien zu". Er hat recht, und es
waren zwei VERSCHIEDENE Fehler.

1) "DASHBOARD" war eine Kachel, die man nicht oeffnen kann -- man steht
   ja schon darauf. Sie stand seit dem ersten Tag als Platzhalter da.
   Ein Eintrag, der nirgendwohin fuehrt, sieht aus wie etwas Unfertiges.
   Entfernt.

2) "AUTOMATIONEN" trug noch "Phase 4", obwohl die Automationen laengst
   liefen -- sie waren nur verteilt (Hinweise auf der Uebersicht, Suche
   ueberall, KI-Vorschlaege an drei Stellen) und hatten keinen Ort.
   Jetzt haben sie einen.

DIE SEITE FUEHRT BEWUSST NICHTS EIGENES. Was dort steht, kommt aus den
Bereichen selbst -- eine Seite, die Automationen doppelt abbildet, waere
die naechste Stelle, die irgendwann etwas anderes behauptet als die
Wirklichkeit. Vier Abschnitte:

- Die lokale KI mit Zustand, Modell, Ort, Kosten und Grenzen -- und dem
  einzigen Schalter der Seite. Sie ist die einzige Automation, die
  Rechenzeit kostet, die der Website gehoert.
- "Was gerade anliegt": dieselben Hinweise wie auf der Uebersicht, hier
  vollstaendig statt gekuerzt.
- "Laeuft dauerhaft im Hintergrund": sieben Regeln im Klartext. Jede
  beschreibt etwas, das tatsaechlich im Code steht.
- "Zuletzt automatisch passiert": aus dem Protokoll, gefiltert auf das,
  was ohne Zutun geschah.

DER KI-SCHALTER WIRD AN ZWEI STELLEN GEPRUEFT: beim Anzeigen der
Knoepfe UND in jedem Endpunkt. Eine Oberflaeche, die etwas versteckt,
ist keine Sperre. Geprueft: abgeschaltet liefert der Endpunkt 403, ein
Creator darf gar nicht schalten (403), die Einstellung ueberdauert einen
Neustart (eigene Tabelle, damit sie dieselbe Sicherung bekommt wie alles
andere).

NEBENBEI DERSELBE FEHLER WIE FRUEHER: Der Schalter-Baustein lag in
wissen.css und fehlte prompt auf der neuen Seite -- dort erschien er als
nacktes Kaestchen. Wie damals bei .knopf-still. Liegt jetzt in gate.css.

Geprueft: 17 Kacheln, KEINE mehr ohne Ziel. Creator wird von der Seite
weggeleitet (302). Handy ohne Ueberlauf, 0 Konsolenfehler.
This commit is contained in:
2026-08-31 12:46:22 +02:00
parent 63aea61f39
commit eb87e4a484
21 changed files with 644 additions and 134 deletions
+123
View File
@@ -0,0 +1,123 @@
/* ===================================================================
Automationen.
Ein Zustandsbild, keine Bedienoberflaeche: Der einzige Schalter ist
der fuer die KI, weil sie als einzige Rechenzeit kostet, die der
Website gehoert. Alles andere laeuft und wird hier nur gezeigt.
=================================================================== */
.block { margin-bottom: 34px; }
.block__kopf { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.block__titel {
margin: 0; font-size: .78rem; font-weight: 700;
letter-spacing: .08em; text-transform: uppercase; color: var(--akzent);
}
.block__zahl {
min-width: 22px; padding: 1px 8px; text-align: center;
font-size: .74rem; font-weight: 700; color: var(--text-still);
background: rgba(255, 255, 255, .06); border-radius: 999px;
}
.block__frage { margin: 0 0 14px; font-size: .85rem; color: var(--text-still); max-width: 76ch; }
/* ---------- KI ------------------------------------------------------------ */
.ki-kasten {
margin-bottom: 34px; padding: 20px 22px;
border: 1px solid var(--rand); border-radius: var(--radius);
background: rgba(255, 255, 255, .028);
}
.ki-kasten[data-zustand="laeuft"] {
border-color: rgba(138, 118, 255, .34);
background: rgba(138, 118, 255, .05);
}
.ki-kasten[data-zustand="weg"] {
border-color: rgba(255, 154, 162, .3);
background: rgba(255, 154, 162, .045);
}
.ki-kasten__kopf {
display: flex; gap: 20px; align-items: flex-start;
justify-content: space-between; flex-wrap: wrap;
}
.ki-kasten__titel { margin: 2px 0 6px; font-size: 1.1rem; font-weight: 700; }
.ki-kasten__text { margin: 0; font-size: .88rem; color: var(--text-leise); max-width: 62ch; }
.ki-kasten__daten {
display: grid; gap: 7px; margin: 18px 0 0; padding: 16px 0 0; list-style: none;
border-top: 1px solid var(--rand);
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
.ki-kasten__daten li { display: flex; gap: 10px; font-size: .83rem; color: var(--text-leise); }
.ki-kasten__schild {
flex: none; min-width: 74px;
font-size: .7rem; font-weight: 700; letter-spacing: .07em;
text-transform: uppercase; color: var(--text-still); padding-top: 2px;
}
/* ---------- Hinweise ------------------------------------------------------- */
.hinweise { display: grid; gap: 7px; }
.hinweis {
position: relative; display: flex; align-items: center; gap: 12px;
padding: 11px 15px 11px 18px;
text-decoration: none; color: var(--text); font-size: .89rem;
border: 1px solid var(--rand); border-radius: var(--radius-klein);
background: rgba(255, 255, 255, .028);
transition: border-color .18s ease, background .18s ease;
}
.hinweis::before {
content: ""; position: absolute; left: 0; top: 9px; bottom: 9px; width: 2px;
border-radius: 0 2px 2px 0; background: var(--rand);
}
.hinweis[data-stufe="warnung"] {
border-color: rgba(255, 154, 162, .3); background: rgba(255, 154, 162, .05);
}
.hinweis[data-stufe="warnung"]::before { background: var(--warn); }
.hinweis[data-stufe="offen"]::before { background: var(--akzent); opacity: .7; }
.hinweis[data-stufe="ruhig"] { opacity: .8; }
.hinweis:hover { border-color: rgba(255, 255, 255, .2); background: rgba(255, 255, 255, .05); }
.hinweis__zahl {
flex: none; min-width: 30px; text-align: center;
font-size: 1.05rem; font-weight: 700;
}
.hinweis[data-stufe="warnung"] .hinweis__zahl { color: var(--warn); }
.hinweis__text { flex: 1; color: var(--text-leise); }
.hinweis__pfeil { color: var(--text-still); }
.hinweis:hover .hinweis__pfeil { color: var(--akzent); }
/* ---------- Regeln --------------------------------------------------------- */
.regeln {
display: grid; gap: 10px;
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
}
.regel {
padding: 15px 17px;
border: 1px solid var(--rand); border-radius: var(--radius-klein);
background: rgba(255, 255, 255, .025);
}
.regel__name { margin: 0 0 5px; font-size: .93rem; font-weight: 650; }
.regel__text { margin: 0; font-size: .83rem; color: var(--text-still); line-height: 1.55; }
/* ---------- Verlauf -------------------------------------------------------- */
.verlauf { display: grid; gap: 2px; }
.verlauf__zeile {
display: grid; gap: 12px; align-items: baseline;
grid-template-columns: 96px minmax(0, 1fr) minmax(0, 1.2fr);
padding: 8px 12px; border-radius: var(--radius-klein);
font-size: .82rem;
}
.verlauf__zeile:nth-child(odd) { background: rgba(255, 255, 255, .022); }
.verlauf__zeit { color: var(--text-still); font-variant-numeric: tabular-nums; }
.verlauf__was { color: var(--text); }
.verlauf__wer { color: var(--text-still); overflow: hidden; text-overflow: ellipsis; }
.leer-hinweis {
padding: 26px; text-align: center; color: var(--text-still); font-size: .9rem;
border: 1px dashed var(--rand); border-radius: var(--radius);
}
@media (max-width: 700px) {
.verlauf__zeile { grid-template-columns: 1fr; gap: 2px; }
}
@media (prefers-reduced-motion: reduce) { .hinweis { transition: none; } }
+51
View File
@@ -784,3 +784,54 @@ body.suche-offen { overflow: hidden; }
@media (prefers-reduced-motion: reduce) {
.wahl2__knopf, .wahl2__pfeil { transition: none; }
}
/* ===================================================================
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: rgba(255, 255, 255, .022);
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; }
-42
View File
@@ -242,48 +242,6 @@
.pdf-ablage__text strong { color: var(--akzent); }
.pdf-ablage__klein { margin: 0; font-size: .77rem; color: var(--text-still); }
/* ---------- 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: rgba(255, 255, 255, .022);
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; }
.tag-vorschlag { display: flex; gap: 5px; flex-wrap: wrap; margin-top: 8px; }
.tag-knopf {