/* cf-werkbank.css — die Werkbank des Bereichs Intelligenz (2026-07-31).
 *
 * WARUM ES DIESE DATEI GIBT: Scheibe 1 hat die Werkzeuge VERLINKT — jede Kachel war ein
 * <a target="_blank"> auf einen fremden Auftritt. Der Operator hat das zurueckgewiesen:
 * „ich will keinen link, ich will das alles im callfluence haben im callfluence design".
 * Also arbeiten die Werkzeuge jetzt IN der Konsole: Eingabe, Lauf und Ergebnis sind
 * Callfluence-Oberflaeche, die fremden Dienste liefern nur noch JSON dahinter.
 *
 * WAS DAS FUER DAS DESIGN HEISST: kein fremdes Stylesheet, kein iframe, keine fremde Marke.
 * Jede Zahl, jede Zeile, jeder Chip kommt aus den Theme-Variablen dieser Konsole und traegt
 * dieselben Kanten, Radien und Abstaende wie der Rest. Ein Ergebnis muss aussehen, als waere
 * es hier entstanden — denn hier wird es auch gelesen.
 *
 * ABSTANDS-VERTRAG (Erbe von cf-intel.css, von docs/guard-werkbank.mjs gemessen):
 *   Sektionskopf .ig-sec bleibt die Klammer; Werkbank-Leiste 20 px Innenmass, Ergebnis-
 *   Bloecke 22-24 px Polster, Raster-Gap 18 px — dieselben Zahlen wie die Kachelraster,
 *   damit ein Ergebnis kein Fremdkoerper zwischen zwei Kachelgruppen ist. */

/* ---------- Werkbank-Leiste: Domain rein, Lauf raus ----------
   Die Leiste ist der Arbeitsplatz, nicht ein Formular am Rand: sie steht ueber dem
   Werkzeugraster, traegt die Domain fuer ALLE Werkzeuge der Ansicht und sagt im Ruhezustand,
   was passiert, wenn man sie benutzt. */
.wb-bar{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;padding:20px 22px;margin-top:4px}
.wb-bar-f{flex:1 1 320px;min-width:0;display:flex;flex-direction:column;gap:7px}
.wb-bar-lbl{font-size:.78rem;font-weight:800;letter-spacing:.04em;color:var(--ink-soft)}
.wb-bar-hint{font-size:.84rem;color:var(--ink-faint);line-height:1.45;flex:1 1 100%;margin-top:2px}
.wb-inp{width:100%;padding:11px 14px;border-radius:var(--r-sm);border:1px solid var(--line-strong);
  background:var(--surface-2);color:var(--ink);font:inherit;font-size:.95rem;min-width:0}
.wb-inp:focus{outline:2px solid var(--lime);outline-offset:1px;border-color:var(--lime)}
.wb-inp.fehlt{border-color:var(--warn);border-style:dashed}
/* flex:none WAERE hier falsch, und zwar messbar: die Knopfreihe behielt damit ihre
   Inhaltsbreite (443 px), das flex-wrap darunter kam nie zum Zug, und bei 360 px schob sie
   die ganze Seite auf 486 px auf. Geometrie im Raster blieb dabei gruen — der Querlauf
   entsteht ausserhalb der gemessenen Kachelflaeche. Deshalb: schrumpfen duerfen (1 1 auto),
   min-width:0 gegen den Auto-Mindestbreiten-Boden, und unter 520 px stehen die Knoepfe
   nebeneinander in voller Breite statt sich hinauszudruecken. */
.wb-bar-acts{display:flex;gap:10px;flex-wrap:wrap;flex:1 1 auto;min-width:0}
@media(max-width:520px){
  .wb-bar-acts{width:100%}
  .wb-bar-acts .btn{flex:1 1 100%;justify-content:center}
}
/* Die Leiste steht ZWISCHEN Sektionskopf und Werkzeugraster. Damit sie als Teil derselben
   Gruppe liest und nicht als eigener Absatz, traegt sie zum Raster denselben Abstand wie
   zwei Kacheln zueinander (18 px) — gemessen von docs/guard-intelligenz.mjs, nicht behauptet. */
.wb-bar+.ig-grid{margin-top:18px}

/* ---------- Werkzeug-Kachel ----------
   Erbt .ig-tile (Flaeche, Polster, Anhebung) und ergaenzt, was ein LAUFENDES Werkzeug
   braucht: Zustandszeile unten statt „oeffnen"-Fussnote, und eine Kante, die den zuletzt
   gelaufenen Stand markiert. Immer <button>, nie <a> — die Wache prueft genau das. */
.wb-tool{position:relative}
.wb-tool[data-zustand="laeuft"]{border-color:var(--lime)}
.wb-tool[data-zustand="fertig"]{border-color:var(--good)}
.wb-tool[data-zustand="fehler"]{border-color:var(--bad)}
.wb-t-fuss{margin-top:auto;padding-top:10px;display:flex;align-items:center;gap:7px;
  font-size:.82rem;font-weight:700;color:var(--ink-soft)}
.wb-tool:hover .wb-t-fuss{color:var(--ink)}
.wb-t-fuss .ic{width:15px;height:15px;flex:none}
.wb-t-fuss.f-fehler{color:var(--bad)}
.wb-t-fuss.f-fertig{color:var(--good)}

/* Laufanzeige: ein Balken, der laeuft, ist ehrlicher als ein Prozentwert, den niemand misst */
.wb-puls{position:absolute;left:0;right:0;bottom:0;height:2px;overflow:hidden;border-radius:0 0 var(--r-lg) var(--r-lg)}
.wb-puls i{position:absolute;inset:0;background:var(--lime);transform:translateX(-100%);
  animation:wbPuls 1.1s var(--ease) infinite}
@keyframes wbPuls{to{transform:translateX(100%)}}
@media(prefers-reduced-motion:reduce){.wb-puls i{animation:none;transform:none;opacity:.5}}

/* ---------- Ergebnis-Flaeche ----------
   Ein Ergebnis ist kein Rohtext-Auswurf: es hat einen Kopf (welches Werkzeug, welche Domain,
   wann), Bloecke mit Ueberschrift, und am Fuss den Weg weiter (Befunde uebernehmen). */
.wb-erg{display:flex;flex-direction:column;gap:16px;margin-top:22px}
.wb-e{padding:24px;min-width:0}
.wb-e-kopf{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap;
  padding-bottom:16px;margin-bottom:18px;border-bottom:1px solid var(--line)}
.wb-e-kopf-l{display:flex;gap:13px;align-items:flex-start;min-width:0}
.wb-e-kopf h3{font-size:1.08rem;font-weight:800;letter-spacing:-.01em;margin:0}
.wb-e-meta{font-size:.82rem;color:var(--ink-faint);margin-top:3px;word-break:break-word}
.wb-e-acts{display:flex;gap:8px;flex-wrap:wrap;flex:none}

/* Block: Ueberschrift + Inhalt. Kein Kasten im Kasten — nur eine Linie und Raum. */
.wb-b{margin-top:20px}
.wb-b:first-child{margin-top:0}
.wb-b-h{font-size:.72rem;font-weight:900;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink-faint);margin-bottom:11px}
.wb-b-sub{font-size:.86rem;color:var(--ink-soft);line-height:1.5;margin:-5px 0 11px}

/* Kennzahlen-Reihe im Ergebnis — kleiner als die grossen KPI-Karten der Ansicht,
   damit ein Werkzeug-Ergebnis die Ansicht nicht optisch uebernimmt. */
.wb-kpis{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.wb-kpi{padding:14px 16px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);min-width:0}
.wb-kpi-l{font-size:.72rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint)}
.wb-kpi-v{font-size:1.35rem;font-weight:900;letter-spacing:-.02em;margin-top:5px;word-break:break-word}
.wb-kpi-s{font-size:.8rem;color:var(--ink-soft);margin-top:4px;line-height:1.4}

/* ---------- Herkunfts-Traeger im Ergebnis ----------
   .mw ist global `inline-flex`, weil dort Zahl und Etikett NEBENEINANDER stehen. Im Ergebnis
   tragen die Werte die Grundlage "gemessen" — die hat kein Etikett, es gibt also nichts
   nebeneinanderzustellen. inline-flex wuerde hier nur schaden: ein laengerer Wert (ein
   Seitentitel, eine Beschreibung, eine Zertifikatskette) steckt dann in einem Flex-Kasten
   und bricht anders um als der Text daneben — die bekannte Falle, in der Geometrie gruen
   meldet und der Satz trotzdem falsch aussieht. Deshalb im Ergebnis zurueck in den Textfluss;
   nur wo doch ein Etikett danebensteht, bleibt der Flex-Kasten. */
.wb-e .mw{display:inline}
.wb-e .mw:has(.mw-b){display:inline-flex}

/* Note als Flaeche: A-F bekommt Farbe, nicht nur eine Zahl */
.wb-note{display:inline-flex;align-items:center;justify-content:center;min-width:38px;height:38px;
  padding:0 10px;border-radius:11px;font-family:var(--disp);font-size:1.25rem;font-weight:900}
.wb-note.n-gut{background:var(--good-bg);color:var(--good)}
.wb-note.n-mittel{background:var(--warn-bg);color:var(--warn)}
.wb-note.n-schlecht{background:var(--bad-bg);color:var(--bad)}

/* Schluessel-Wert-Liste — zweispaltig, bricht auf schmal einspaltig um */
.wb-kv{display:grid;grid-template-columns:minmax(120px,auto) 1fr;gap:9px 18px;font-size:.89rem;min-width:0}
.wb-kv dt{color:var(--ink-faint);font-weight:700;min-width:0}
.wb-kv dd{margin:0;color:var(--ink);min-width:0;overflow-wrap:anywhere}
.wb-kv dd.leer{color:var(--ink-faint);font-style:normal}
@media(max-width:560px){.wb-kv{grid-template-columns:1fr;gap:2px 0}.wb-kv dd{margin-bottom:9px}}

/* Pruefzeilen: bestanden / Hinweis / durchgefallen — die Ampel gehoert an den Anfang der Zeile */
.wb-checks{display:flex;flex-direction:column;gap:1px;border-radius:var(--r-md);overflow:hidden;border:1px solid var(--line)}
.wb-ck{display:flex;gap:12px;align-items:flex-start;padding:12px 15px;background:var(--surface-2);min-width:0}
.wb-ck+.wb-ck{border-top:1px solid var(--line)}
.wb-ck-i{width:20px;height:20px;border-radius:6px;display:grid;place-items:center;flex:none;margin-top:1px}
.wb-ck-i .ic{width:12px;height:12px}
.wb-ck.c-pass .wb-ck-i{background:var(--good-bg);color:var(--good)}
.wb-ck.c-warn .wb-ck-i{background:var(--warn-bg);color:var(--warn)}
.wb-ck.c-fail .wb-ck-i{background:var(--bad-bg);color:var(--bad)}
.wb-ck-t{min-width:0;display:flex;flex-direction:column;gap:2px}
.wb-ck-t b{font-size:.89rem;font-weight:700}
.wb-ck-t span{font-size:.84rem;color:var(--ink-soft);line-height:1.45;overflow-wrap:anywhere}

/* Chip-Wolke fuer erkannte Technik, Kategorien, Bots */
.wb-chips{display:flex;flex-wrap:wrap;gap:8px}
.wb-chip{display:inline-flex;align-items:center;gap:6px;font-size:.79rem;font-weight:700;
  padding:5px 11px;border-radius:20px;background:var(--surface-3);color:var(--ink-soft);max-width:100%}
.wb-chip.c-an{background:var(--good-bg);color:var(--good)}
.wb-chip.c-aus{background:var(--surface-3);color:var(--ink-faint)}
.wb-chip .ic{width:13px;height:13px;flex:none}
.wb-chip b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:800}

/* Arbeitspaket-Zeile: Prioritaet, Titel, „fertig wenn", Kosten, Weg ins Vorhaben */
.wb-pak{display:flex;flex-direction:column;gap:10px}
.wb-p{display:flex;gap:14px;align-items:flex-start;padding:16px 18px;border:1px solid var(--line);
  border-radius:var(--r-md);background:var(--surface-2);min-width:0}
.wb-p-pr{flex:none;font-size:.68rem;font-weight:900;letter-spacing:.08em;text-transform:uppercase;
  padding:4px 9px;border-radius:7px;white-space:nowrap}
.wb-p-pr.p-critical{background:var(--bad-bg);color:var(--bad)}
.wb-p-pr.p-high{background:var(--warn-bg);color:var(--warn)}
.wb-p-pr.p-medium{background:var(--info-bg);color:var(--info)}
.wb-p-pr.p-low{background:var(--surface-3);color:var(--ink-faint)}
.wb-p-m{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}
.wb-p-m b{font-size:.94rem;letter-spacing:-.01em}
.wb-p-m span{font-size:.85rem;color:var(--ink-soft);line-height:1.45;overflow-wrap:anywhere}
.wb-p-m .wb-p-dw{color:var(--ink-faint);font-size:.82rem}
.wb-p-a{flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:8px}
@media(max-width:640px){.wb-p{flex-wrap:wrap}.wb-p-a{width:100%;flex-direction:row;justify-content:flex-end;align-items:center}}

/* Listen mit vielen gleichartigen Zeilen (Seitenverzeichnis, Shops, Anzeigen) — gedeckelt
   und mit ehrlicher Restangabe, nie stumm abgeschnitten. */
.wb-liste{display:flex;flex-direction:column;gap:1px;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.wb-li{display:flex;gap:12px;align-items:center;padding:10px 14px;background:var(--surface-2);
  font-size:.86rem;min-width:0}
.wb-li+.wb-li{border-top:1px solid var(--line)}
.wb-li b{font-weight:700;flex:none}
.wb-li span{color:var(--ink-soft);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wb-li .wb-li-r{margin-left:auto;flex:none;color:var(--ink-faint);font-size:.8rem}
.wb-rest{padding:11px 14px;font-size:.83rem;color:var(--ink-faint);background:var(--surface-3);text-align:center}

/* Zustandsflaechen: laeuft / leer / Fehler. Ein Fehler ist eine Aussage, kein Verschwinden. */
.wb-zust{display:flex;gap:13px;align-items:flex-start;padding:20px 22px;border-radius:var(--r-md);
  border:1px dashed var(--line-strong);color:var(--ink-soft);font-size:.9rem;line-height:1.5}
.wb-zust .ic{width:19px;height:19px;flex:none;margin-top:1px;color:var(--ink-faint)}
.wb-zust.z-fehler{border-style:solid;border-color:var(--bad);background:var(--bad-bg);color:var(--bad)}
.wb-zust.z-fehler .ic{color:var(--bad)}
.wb-zust b{display:block;color:inherit;margin-bottom:3px}
.wb-zust-t{min-width:0;overflow-wrap:anywhere}

/* Skelett waehrend eines Laufs — Flaeche haelt die Hoehe, damit nichts springt */
.wb-skel{display:flex;flex-direction:column;gap:11px}
.wb-skel i{display:block;height:13px;border-radius:6px;background:var(--surface-3);
  animation:wbSkel 1.4s var(--ease) infinite}
.wb-skel i:nth-child(2){width:78%;animation-delay:.12s}
.wb-skel i:nth-child(3){width:56%;animation-delay:.24s}
@keyframes wbSkel{0%,100%{opacity:.55}50%{opacity:1}}
@media(prefers-reduced-motion:reduce){.wb-skel i{animation:none;opacity:.7}}

/* Vergleich eigen gegen fremd — zwei Spalten, die Differenz traegt die Farbe */
.wb-vgl{width:100%;border-collapse:collapse;font-size:.88rem}
.wb-vgl th,.wb-vgl td{padding:11px 13px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}
.wb-vgl th{font-size:.72rem;font-weight:900;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}
.wb-vgl td.wb-v-d{font-weight:800;white-space:nowrap}
.wb-vgl td.wb-v-d.d-plus{color:var(--good)}
.wb-vgl td.wb-v-d.d-minus{color:var(--bad)}
.wb-vgl td.wb-v-d.d-null{color:var(--ink-faint)}
.wb-vgl-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-md)}
