/* DHS NEXUS — Marken-Stil (Dark + Lime)
   ─────────────────────────────────────────────────────────────────────
   EIN Token-Block. Bis v3.54 gab es einen zweiten :root weiter unten
   (Zeile ~297), der --r und --r-sm still ueberschrieben hat: geaendert
   wurde oben, gewirkt hat unten. Beide sind hier zusammengefuehrt.
   Wer Werte aendert, aendert sie ab jetzt an genau einer Stelle.

   Lime ist ein Signal, kein Dekor: Primaeraktion, aktive Navigation,
   Fokus, echter Erfolg, neue Leads. Sonst nie.                        */
:root{
  /* Flaechen */
  --bg:#0A0D0B; --bg-2:#0F1411; --bg-card:#131A14; --bg-elev:#182019;
  --bg-3:#11160F; --bg-hover:#1A211A; --panel:#131A14;

  /* Nex Motion-System (V13.19 §46/§47): wenige konsistente Dauern + Kurven,
     statt beliebiger Werte überall. fast = Mikro-Reaktion, normal = UI-Wechsel,
     state = Zustandswechsel des Wesens (bewusst länger, organischer). */
  --nex-fast:.14s; --nex-normal:.28s; --nex-state:.55s;
  --nex-ease:cubic-bezier(.2,.7,.2,1);        /* ruhiges Eintreten */
  --nex-ease-out:cubic-bezier(.16,1,.3,1);    /* hochwertiges Ausschwingen */

  /* Linien tragen die Hierarchie — nicht Flaechen, nicht Schatten */
  --line:rgba(237,234,221,.13); --line-soft:rgba(237,234,221,.07);
  --line-strong:rgba(237,234,221,.20);
  --line-lime:rgba(184,232,52,.45);        /* nur aktive/primaere Kante */

  /* Marke */
  --lime:#B8E834; --lime-soft:rgba(184,232,52,.13); --lime-deep:#C8F454;
  --lime-glow:rgba(184,232,52,.35);        /* nur noch Fokusring */

  /* Text — --muted-2 lag mit #6F786F bei 3.87:1 auf Kartenflaeche und
     damit unter den 4.5:1, die WCAG AA fuer Fliesstext verlangt. Es traegt
     Gruppentitel, Platzhalter und Zaehler, also lesbaren Text. */
  --ink:#EDEADD; --muted:#ABAE9F; --muted-2:#B6B9AA;

  /* Semantik: je eine Farbe, keine Zwischentoene.

     v5: --ok war woertlich --lime. Damit waren Marke und Erfolg
     dieselbe Farbe — und weil Lime ausserdem Primaeraktion, aktive
     Navigation und Fokusring traegt, hiess Lime am Ende gar nichts
     mehr. In der Kundenliste waren Status, Paket, Primaerknopf und
     Ansichtsumschalter gleichzeitig lime; vier Lautsprecher, kein
     Signal. Erfolg bekommt einen eigenen, ruhigeren Ton. Lime bleibt
     der Marke, der aktiven Position und der Handlung. */
  --danger:#E85D4F; --danger-bg:rgba(232,93,79,.14);
  --warn:#F0B429; --info:#5B9BF2; --ok:#57CC8B;
  /* Orange = primaere AKTION + LIVE (nur Uebersicht/[00], siehe app-dashboard.js) */
  --orange:#FF8A1F; --orange-soft:rgba(255,138,31,.15);
  --neutral:#ABAE9F;                       /* Bestand ohne Wertung  */
  /* --unknown stand auf #6E776E und lag damit bei 4,21:1 auf --bg und
     3,82:1 auf Kartenflaeche — unter den 4,5:1, die WCAG AA fuer
     Fliesstext verlangt. Genau der Fehler, vor dem der Kommentar zu
     --muted-2 drei Zeilen weiter oben warnt, nur eine Farbe spaeter
     wiederholt. Gemessen: jetzt 4,98 auf --bg und 4,52 auf Karte.
     Bleibt sichtbar dunkler als --muted, damit "nicht gemessen"
     weiterhin leiser wirkt als eine Angabe, die es gibt. */
  --unknown:#7E857A;                       /* nicht gemessen        */

  --display:'Anton','Impact',sans-serif; --body:'Inter',system-ui,sans-serif; --serif:'Fraunces',Georgia,serif;

  /* Abstaende: eine Skala statt Einzelwerte an der Fundstelle. Vorher
     gab es hier keine einzige Variable — jeder Abstand war eine eigene
     Entscheidung, und entsprechend standen 13, 17, 22 und 27 px
     nebeneinander. */
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px;
  --s-5:24px; --s-6:32px; --s-7:48px; --s-8:64px;

  /* Lautstaerke: die zentrale Regel dieser Oberflaeche.
     Pro Bildschirm genau EIN Signal, darunter EINE Arbeitsliste,
     darunter alles Uebrige leise. Belege sind Belege, keine Aussagen. */
  --laut-1:var(--ink);       /* Signal, Betraege, Namen           */
  --laut-2:var(--muted);     /* Grund, Kontext, Zwischenzeile     */
  --laut-3:var(--muted-2);   /* Beleg, Feldname, Zaehler          */

  /* Lesebreite fuer Fliesstext. Die Arbeitsbreite steht schon weiter
     unten als --maxw (1280px) und wird von .content getragen — ein
     zweiter Wert dafuer waere eine zweite Wahrheit. */
  --maxw-lesen:78ch;

  /* Radius: vier Rollen statt 16 freier Werte.
     --r/--r-sm behalten ihre Namen, damit ~50 bestehende Regeln
     unveraendert weiterlaufen — nur die Werte werden ruhiger. */
  --r-control:8px;              /* Chips, kleine Marker      */
  --r-sm:10px;                  /* Buttons, Inputs           */
  --r:12px;                     /* Karten, Listeneintraege   */
  --r-lg:16px;                  /* Dialoge, Drawer           */

  /* Typo-Skala: acht Stufen. Bestehende freie rem-Werte werden
     schrittweise hierauf gezogen, nicht per !important erzwungen. */
  --t-micro:11px; --t-small:12px; --t-body:14px; --t-lead:15px;
  --t-h3:17px; --t-h2:21px; --t-h1:27px; --t-num:32px;

  /* EIN Schatten, nur fuer echte Ebenen (Modal, Drawer, Popover).
     Karten liegen nicht "ueber" der Seite — sie stehen darin. */
  --shadow-card:0 1px 2px rgba(0,0,0,.40), 0 4px 16px -8px rgba(0,0,0,.55);
  --shadow-lift:0 4px 10px rgba(0,0,0,.45), 0 20px 40px -14px rgba(0,0,0,.62);
  --shadow-panel:0 30px 70px -28px rgba(0,0,0,.72);

  --ease:cubic-bezier(.2,0,0,1);
  --maxw:1280px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--ink);font-family:var(--body);-webkit-font-smoothing:antialiased}
button{font-family:inherit;cursor:pointer}
a{color:var(--lime);text-decoration:none}
/* `.small` stand auf .82rem und ergab damit 13,1 px — eine Groesse, die
   in der Typo-Skala nicht vorkommt. Gemessen: 21 Elemente allein auf dem
   Morgenblick. Eine Utility-Klasse, die an der Skala vorbeirechnet, zieht
   die halbe Oberflaeche mit. Sie zeigt jetzt auf die Stufe, die sie
   ohnehin meinte. */
.muted{color:var(--muted)} .small{font-size:var(--t-small)} .center{text-align:center} .pad{padding:28px}

/* layout */
.app{display:flex;min-height:100vh}
/* Flaeche statt Verlauf: die Sidebar ist eine Ebene, kein Lichteinfall. */
.sidebar{width:248px;flex:0 0 248px;background:var(--bg-2);border-right:1px solid var(--line);
  padding:20px 16px;display:flex;flex-direction:column;gap:8px;position:sticky;top:0;height:100vh}
/* flex:0 0 auto ist hier kein Detail: die Sidebar ist eine Flex-Spalte mit
   fester Hoehe. Ohne die Sperre schrumpft die Marke, sobald der Platz eng
   wird — auf 320x568 gemessen 50px Inhalt in 44px Kasten, und
   .brand{overflow:hidden} hat die obere Zeile der Wortmarke abgeschnitten.
   Genau der Fehler, den 10a8bcd fuer den Desktop behoben hat, nur eine
   Etage tiefer. Schrumpfen darf die Navigation, die scrollt. */
.brand{display:flex;align-items:center;gap:11px;padding:8px 8px 22px;flex:0 0 auto;
  position:relative;isolation:isolate}
.brand::after{content:"";position:absolute;left:9px;right:8px;bottom:7px;height:1px;
  background:linear-gradient(90deg,rgba(184,232,52,.32),rgba(184,232,52,.05) 58%,transparent)}
.brand-copy{min-width:0;position:relative;z-index:1;padding-top:1px}
.side-foot{flex:0 0 auto}
.brand-name{font-family:var(--display);font-size:1.45rem;letter-spacing:.5px;line-height:1}
.brand-sub{margin-top:5px;font-size:.58rem;font-weight:700;letter-spacing:2.2px;text-transform:uppercase;color:#8C9874}

/* Native 360°-Marke. Die räumliche Wirkung entsteht aus versetzten
   Lichtflächen und echten Vektorbahnen, nicht aus einem unscharfen Bild
   in einer zusätzlichen Box. */
.brand-mark{--brand-mark-size:48px;width:var(--brand-mark-size);height:var(--brand-mark-size);
  display:inline-grid;place-items:center;position:relative;flex:0 0 auto;
  filter:drop-shadow(0 10px 18px rgba(0,0,0,.52));perspective:240px}
.brand-mark::before{content:"";position:absolute;inset:18%;border-radius:50%;
  background:rgba(184,232,52,.32);filter:blur(12px);transform:translate3d(2px,3px,-1px)}
.brand-mark svg{width:100%;height:100%;overflow:visible;position:relative;z-index:1;
  transform:rotate(-8deg) rotateX(10deg);transition:transform var(--nex-normal) var(--nex-ease-out),filter var(--nex-normal) var(--nex-ease)}
.brand:hover .brand-mark svg,.anm-marke:hover .brand-mark svg{transform:rotate(-3deg) rotateX(4deg) scale(1.045);filter:brightness(1.08)}
.brand-mark-depth{fill:#0D130E;stroke:rgba(184,232,52,.2);stroke-width:1}
.brand-mark-orbit{fill:none;stroke:url(#dhs-ring);stroke-width:1.4;stroke-linecap:round}
.brand-mark-orbit-a{transform:rotate(-17deg);transform-origin:36px 36px}
.brand-mark-orbit-b{transform:rotate(28deg);transform-origin:36px 36px;opacity:.58;stroke-width:.9}
.brand-mark-sphere{fill:url(#dhs-orb);stroke:#D7FF61;stroke-width:.65}
.brand-mark-glint{fill:none;stroke:rgba(255,255,255,.82);stroke-width:1.15;stroke-linecap:round}
.brand-mark-node{fill:#D7FF61;stroke:#11190C;stroke-width:1.1}
.brand-mark-shine{position:absolute;z-index:2;inset:9% 20% 55% 22%;border-radius:50%;
  background:linear-gradient(135deg,rgba(255,255,255,.22),transparent 64%);filter:blur(1px);pointer-events:none}
/* Navigation: gruppiert statt 17 gleichrangige Zeilen.
   .nav traegt den Scroll, damit lange Menues die Sidebar nicht sprengen
   und der Demo-Button unten stehen bleibt. */
.nav{display:flex;flex-direction:column;gap:2px;margin-top:4px;
  flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain}
.nav-group{display:flex;flex-direction:column;gap:2px}
.nav-group + .nav-group{margin-top:var(--s-3)}
/* Die Gruppenzeile ist Beschriftung UND Schalter: klein, ruhig, nie Lime.
   Der Marker verschwindet, weil er in dieser Groesse nur Krach macht —
   den Zustand traegt das Zeichen rechts. */
.nav-group-label{font-size:var(--t-micro);font-weight:700;letter-spacing:.9px;text-transform:uppercase;
  color:var(--muted-2);padding:var(--s-2) var(--s-3);display:flex;align-items:center;
  gap:var(--s-2);cursor:pointer;border-radius:var(--r-sm);list-style:none;
  min-height:30px;user-select:none}
.nav-group-label::-webkit-details-marker{display:none}
.nav-group-label:hover{color:var(--muted);background:var(--bg-card)}
.nav-group-label::after{content:"";margin-left:auto;width:6px;height:6px;flex:0 0 auto;
  border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;
  transform:rotate(-45deg) translate(-1px,1px);opacity:.6;
  transition:transform .16s var(--ease)}
.nav-group[open] > .nav-group-label::after{transform:rotate(45deg) translate(-2px,-2px)}
/* Zaehler an der zugeklappten Gruppe: sie darf nichts verschlucken.
   Ruhiger als der Zaehler am Eintrag — Gruppe ist Uebersicht, nicht Ziel. */
.nav-dot-gruppe{margin-left:0;background:none;color:var(--muted);
  border:1px solid var(--line-strong);padding:0 6px;font-weight:600}
.nav-group[open] > .nav-group-label .nav-dot-gruppe{opacity:0;pointer-events:none}
@media(prefers-reduced-motion:reduce){.nav-group-label::after{transition:none}}
.nav-item{display:flex;align-items:center;gap:12px;background:transparent;border:0;color:var(--muted);
  padding:10px 12px;min-height:44px;border-radius:var(--r-sm);font-size:var(--t-lead);text-align:left;position:relative}
.nav-item svg{flex:0 0 18px;opacity:.85}
.nav-item:hover{background:var(--bg-card);color:var(--ink)}
.nav-item.active svg{color:var(--lime);opacity:1}
.nav-dot{margin-left:auto;background:var(--lime);color:#0A0D0B;font-size:.72rem;font-weight:700;border-radius:99px;padding:1px 8px;min-width:20px;text-align:center}
.side-foot{margin-top:auto;padding:10px 8px 0}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{display:flex;align-items:center;gap:14px;padding:14px 26px;border-bottom:1px solid var(--line-soft);
  position:sticky;top:0;background:rgba(10,13,11,.86);backdrop-filter:blur(10px);z-index:20;
  padding-top:calc(14px + env(safe-area-inset-top))}
.top-mrr{display:flex;flex-direction:column;line-height:1.1}.top-mrr strong{font-size:1.1rem}
.global-alarm-button{position:relative;display:inline-flex;align-items:center;gap:7px;min-height:44px;padding:0 11px;border:1px solid var(--line-soft);border-radius:var(--r-control);background:var(--bg-2);color:var(--muted);font-size:.76rem;font-weight:700}
.global-alarm-button svg{width:17px;height:17px}.global-alarm-button strong{display:grid;place-items:center;min-width:20px;height:20px;padding:0 5px;border-radius:99px;background:var(--danger);color:#24100e;font-size:.68rem}
.global-alarm-button i{width:7px;height:7px;border-radius:50%;background:var(--ok)}
.global-alarm-button.has-alerts{border-color:rgba(224,114,106,.38);color:var(--ink)}
.global-alarm-button:hover{border-color:var(--line-lime);color:var(--ink)}.global-alarm-button:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
.top-spacer{flex:1}
.burger{display:none;background:transparent;border:1px solid var(--line);color:var(--ink);border-radius:var(--r-control);
  padding:0;font-size:1.1rem;min-width:44px;min-height:44px;align-items:center;justify-content:center}
.content{padding:28px;max-width:var(--maxw);width:100%;margin:0 auto}

/* headings */
.view-head{margin-bottom:22px}
.view-head h1{font-family:var(--display);font-weight:400;font-size:2.1rem;letter-spacing:.5px;margin:0}
.view-head p{margin:4px 0 0}
.row-between{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}

/* stats */
.stat-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:14px}
.stat{background:var(--bg-card);border:1px solid var(--line-soft);border-radius:var(--r);padding:16px 18px}
/* Hervorgehobene Kennzahl: eine kraeftigere Kante reicht. Der Doppel-Glow
   (Ring + 30px Lime-Schein) liess die Kachel leuchten statt fuehren. */
.stat-accent{border-color:var(--line-lime)}
.stat-label{font-size:.78rem;color:var(--muted);text-transform:uppercase;letter-spacing:.6px}
.stat-value{font-family:var(--serif);font-style:italic;font-size:1.7rem;margin-top:6px;line-height:1}
.stat-accent .stat-value{color:var(--lime)}
.stat-sub{font-size:.8rem;color:var(--muted-2);margin-top:6px}

/* Vertriebs-Dashboard: schnell erfassbar, aber ohne dekorative Fantasiedaten. */
.sales-control-grid{align-items:start;margin-bottom:14px}
.sales-funnel-fallback{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:18px 0}
.sales-funnel-fallback>div{display:flex;flex-direction:column;gap:4px;padding:14px;border:1px solid var(--line-soft);border-radius:var(--r-sm)}
.sales-funnel-fallback b{font:italic 1.55rem/1 var(--serif);color:var(--lime)}
.sales-funnel-fallback span,.sales-source small,.sales-due-row small{color:var(--muted);font-size:.78rem}
.sales-due-list{display:flex;flex-direction:column}
.sales-due-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:12px;width:100%;padding:11px 0;border:0;border-bottom:1px solid var(--line-soft);background:transparent;color:var(--ink);text-align:left;cursor:pointer}
.sales-due-row>span{display:flex;min-width:0;flex-direction:column;gap:3px}.sales-due-row time{font-size:.8rem;color:var(--muted)}
.sales-sources{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.sales-source{position:relative;overflow:hidden;min-height:64px;padding:12px 14px;border:1px solid var(--line-soft);border-radius:var(--r-sm)}
.sales-source>span{position:relative;z-index:1;display:flex;justify-content:space-between;gap:12px}.sales-source i{position:absolute;left:0;bottom:0;height:3px;background:var(--lime)}
.sales-passive-note{display:flex;align-items:flex-start;gap:12px;margin-top:14px;padding:14px 16px;border:1px solid var(--line-soft);border-radius:var(--r-sm);color:var(--muted);font-size:.88rem}.sales-passive-note strong{display:block;color:var(--ink);margin-bottom:2px}
@media(max-width:720px){.sales-sources{grid-template-columns:1fr}.sales-funnel-fallback{grid-template-columns:1fr}.sales-due-row{grid-template-columns:minmax(0,1fr) auto}.sales-due-row>svg{display:none}}

/* Alarmzentrale: Alarme zuerst, Messhistorie ruhig und vergleichbar darunter. */
.ops-control-strip{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px;padding:12px 15px;border:1px solid var(--line-soft);border-radius:var(--r-sm);font-size:.86rem;color:var(--muted)}
.ops-live-dot{width:9px;height:9px;border-radius:50%;background:var(--lime);box-shadow:0 0 0 5px color-mix(in srgb,var(--lime) 12%,transparent)}
.ops-last{margin-left:auto}.ops-control-grid{align-items:start;margin-top:14px}.ops-alert-list,.ops-check-list{display:flex;flex-direction:column;gap:8px}
.ops-alert{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;padding:13px 14px;border:1px solid var(--line-soft);border-radius:var(--r-sm);background:var(--bg-elev)}
.ops-alert-critical{border-color:rgba(224,114,106,.48)}.ops-alert-warning{border-color:rgba(230,200,74,.35)}.ops-alert p{margin:4px 0;color:var(--muted);font-size:.86rem}.ops-alert small,.ops-check-row small,.ops-resolved small{display:block;color:var(--muted);margin-top:3px}
.ops-alert-icon{color:var(--danger,#e0726a)}.ops-all-good{display:flex;align-items:flex-start;gap:12px;padding:20px 4px}.ops-all-good>svg{color:var(--lime)}.ops-all-good p{margin:4px 0 0}
.ops-alert-action{min-height:36px;margin-top:9px;padding:0 10px;border:1px solid var(--line);border-radius:7px;background:transparent;color:var(--lime);font-size:.74rem;font-weight:700}
.ops-alert-action:hover{background:var(--lime-soft);color:var(--ink)}.ops-alert-action:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
.ops-check-card{margin-top:0}
.ops-check-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line-soft)}.ops-check-row:last-child{border-bottom:0}.ops-check-state{padding:4px 8px;border-radius:99px;background:var(--bg-elev);font-size:.73rem}.ops-check-row time{font-size:.73rem;color:var(--muted)}
.ops-resolved{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.ops-resolved>div{display:flex;align-items:flex-start;gap:9px;padding:10px;border:1px solid var(--line-soft);border-radius:var(--r-sm)}.ops-resolved svg{color:var(--lime)}
@media(max-width:720px){.ops-last{width:100%;margin-left:19px}.ops-check-row{grid-template-columns:auto minmax(0,1fr) auto}.ops-check-row time{grid-column:2/4}.ops-resolved{grid-template-columns:1fr}.ops-alert-action{min-height:44px}}

/* ---- Jarvis: Hinweis, Begruendung, Entscheidung ----------------------
   Bewusst KEINE eigene Farbwelt. Die Prioritaet traegt der Badge (Farbe
   kommt aus app-jarvis.js, gemischt von U.Badge), die Karte bleibt eine
   Karte. Ein Bildschirm, ein Signal — Lime ist hier fuer nichts
   zustaendig ausser dem einen Primaerknopf im Kopf. */
.jv-liste{display:flex;flex-direction:column;gap:10px}
.jv-karte{border:1px solid var(--line-soft);border-left-width:3px;border-radius:var(--r-sm);padding:12px 14px;background:var(--bg-elev)}
.jv-karte.jv-bad{border-left-color:var(--danger)}
.jv-karte.jv-warn{border-left-color:var(--warn)}
.jv-karte.jv-neutral{border-left-color:var(--line-strong)}
.jv-kopf{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:6px}
.jv-kopf h3{margin:0;font-size:.98rem;flex:1 1 auto;min-width:0}
.jv-konf{font-size:.73rem;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.jv-warum{margin:0 0 6px;font-size:.86rem;color:var(--muted-2);line-height:1.5}
.jv-beleg{margin:0 0 8px}
.jv-zahlen,.jv-text{margin:8px 0;padding:10px;background:var(--bg-2);border:1px solid var(--line-soft);border-radius:var(--r-control);font-size:.8rem;white-space:pre-wrap;overflow-x:auto;max-height:340px}
.jv-sperre{margin:8px 0;padding:10px 12px;border-left:3px solid var(--warn);background:var(--bg-2);border-radius:var(--r-control)}
.jv-sperre p{margin:4px 0 0;color:var(--muted-2)}
.jv-knoepfe{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.jv-zeilen{display:flex;flex-direction:column}
.jv-zeile{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:8px 0;border-bottom:1px solid var(--line-soft);font-size:.86rem}
.jv-zeile:last-child{border-bottom:0}
.jv-zeile>span{color:var(--muted)}
.jv-luecke{margin-top:10px;font-size:.84rem}
.jv-luecke summary{cursor:pointer;color:var(--muted);min-height:44px;display:flex;align-items:center}
.jv-luecke p{margin:4px 0 0;line-height:1.5}
/* ---- Jarvis: der Assistent ------------------------------------------
   Dieselbe Karte, dieselben Linien, dieselben Knoepfe wie der Rest von
   Jarvis. Keine eigene Farbwelt: ein Assistent, der optisch danebensteht,
   sieht aus wie ein zweites Produkt — und genau das soll er nicht sein.
   Semantik kommt sparsam ueber die vorhandenen Statusfarben. */
.jv-assistent .card-count{font-variant-numeric:tabular-nums}
.jv-ki-hinweis{border:1px solid var(--line-soft);border-left:3px solid var(--warn);border-radius:var(--r-sm);padding:12px 14px;margin:0 0 14px;background:var(--bg-2)}
.jv-ki-hinweis strong{display:flex;align-items:center;gap:8px;font-size:.9rem}
.jv-ki-hinweis strong>svg{flex:0 0 18px;color:var(--warn)}
.jv-ki-hinweis p{margin:6px 0 0;font-size:.85rem;color:var(--muted-2);line-height:1.55}
.jv-eingabe{display:block;margin:0 0 12px}
.jv-eingabe .inp{margin-top:5px;width:100%;resize:vertical}
.jv-ablage{border:1px dashed var(--line-strong);border-radius:var(--r-sm);padding:16px;text-align:center;background:var(--bg-2);transition:border-color var(--nex-fast),background var(--nex-fast)}
.jv-ablage.ist-ueber{border-color:var(--warn);background:var(--bg-elev)}
.jv-ablage p{margin:0 0 12px}
.jv-ablage .jv-knoepfe{justify-content:center;margin-top:0}
/* Laeuft eine Aufnahme, muss das ohne Farbe erkennbar bleiben. */
.jv-nimmt-auf{border-color:var(--danger);color:var(--danger)}
.jv-nimmt-auf::before{content:"";width:9px;height:9px;border-radius:50%;background:var(--danger);margin-right:2px;animation:jvPuls 1.4s ease-in-out infinite}
@keyframes jvPuls{0%,100%{opacity:1}50%{opacity:.25}}
@media(prefers-reduced-motion:reduce){.jv-nimmt-auf::before{animation:none}}

.jv-bilder{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.jv-bild{position:relative;display:flex;flex-direction:column;gap:4px;align-items:center}
.jv-bild img{max-width:132px;max-height:200px;border-radius:var(--r-control);border:1px solid var(--line-soft);display:block}
.jv-weg{position:absolute;top:-10px;right:-10px;width:32px;height:32px;border-radius:99px;border:1px solid var(--line-strong);background:var(--bg-elev);color:var(--ink);font-size:1rem;line-height:1;cursor:pointer}

.jv-tonspuren{display:flex;flex-direction:column;gap:10px;margin-top:12px}
.jv-tonspur{position:relative;border:1px solid var(--line-soft);border-left:3px solid var(--line-strong);border-radius:var(--r-sm);padding:12px 14px;background:var(--bg-2)}
.jv-tonspur.ist-laeuft{border-left-color:var(--muted)}
.jv-tonspur.ist-fehler{border-left-color:var(--danger)}
.jv-tonspur-kopf{display:flex;align-items:center;gap:8px;margin-bottom:8px;padding-right:34px}
.jv-tonspur-kopf>svg{flex:0 0 18px;color:var(--muted)}
.jv-tonspur-name{font-weight:600;font-size:.88rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jv-tonspur .jv-weg{top:8px;right:8px}
.jv-tonspur-status{margin:0;font-size:.88rem}
.jv-tonspur.ist-fehler .jv-tonspur-status{color:var(--danger)}
/* Abgeschrieben, nicht mitgelesen — die Kursive sagt: hier hat eine
   Maschine gehoert, das ist kein Zitat. */
.jv-transkript{margin:0 0 12px;white-space:pre-wrap;line-height:1.6;font-size:.9rem;font-style:italic;color:var(--muted-2)}

.jv-aktionsleiste{margin-top:14px}
.jv-denkt{margin:10px 0 0;font-size:.88rem;line-height:1.55}
.jv-ergebnis{margin-top:18px;border-top:1px solid var(--line-soft);padding-top:16px}
.jv-ergebnis h4{font-family:var(--body);font-weight:700;font-size:.9rem;margin:0 0 8px;letter-spacing:.3px}
.jv-ergebnis h4+h4,.jv-zuordnung+p+h4,.jv-zuordnung+h4{margin-top:18px}
.jv-zuordnung{margin:10px 0}
.jv-ton{font-size:.73rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);flex:1 1 auto}
/* overflow:hidden, weil die Hoehe aus dem Inhalt kommt — eine
   Bildlaufleiste im Feld hiesse, dass etwas verborgen bleibt. */
.jv-entwurfsfeld{width:100%;resize:vertical;font-size:.92rem;line-height:1.55;overflow:hidden;min-height:4.5em}
.jv-karte.jv-verworfen{opacity:.55}

/* Mobil: die Knopfreihe bricht um, jeder Knopf bleibt greifbar. Ohne das
   schrumpfen fuenf Knoepfe auf 320px zu 28px-Zielen zusammen. */
@media(max-width:720px){.jv-knoepfe .btn{flex:1 1 calc(50% - 4px);min-height:44px;justify-content:center}.jv-zeile{flex-direction:column;gap:2px}.jv-kopf h3{flex:1 1 100%;order:3}
  .jv-bild img{max-width:104px}
  /* 44 px, nicht 40: das ist die Vorgabe fuer Trefferflaechen, und der
     Entfernen-Knopf ist der kleinste Knopf im Bereich. */
  .jv-weg{width:44px;height:44px}
  .jv-ablage .jv-knoepfe .btn{flex:1 1 100%}
  /* Der laengste Knopf bekommt die ganze Zeile — sonst bricht seine
     Beschriftung auf 375 px auf drei Zeilen um. */
  .jv-karte .jv-knoepfe .btn-primary{flex:1 1 100%}}

/* cards / grids */
.card{background:var(--bg-card);border:1px solid var(--line-soft);border-radius:var(--r);padding:18px 20px;margin-bottom:16px}
.card h3{font-family:var(--body);font-weight:700;font-size:.95rem;margin:0 0 14px;letter-spacing:.3px}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}

/* bars */
.bar-row{display:flex;align-items:center;gap:12px;margin:9px 0}
.bar-label{flex:0 0 96px;font-size:.85rem;color:var(--muted)}
.bar-track{flex:1;height:9px;background:var(--bg-elev);border-radius:99px;overflow:hidden}
/* Die Breiten-Transition ist raus.

   Sie widersprach dem eigenen Motion-Vertrag ("keine Breiten-Animation
   wo transform reicht") — und gemessen ist sie ohnehin nie gelaufen:
   vier Balken im DOM, null transitionrun-Ereignisse fuer `width`.
   React setzt den Inline-Wert beim Mount direkt, es gibt keinen
   Uebergang von alt nach neu.

   Sie zu entfernen ist kleiner als drei Aufrufer auf scaleX
   umzustellen, und nimmt ein Versprechen weg, das der Code nicht
   einloest. Sollen die Balken spaeter wirklich animieren, ist
   transform:scaleX() mit transform-origin:left der Weg — width
   loest bei jedem Frame ein Layout aus. */
.bar-fill{height:100%;border-radius:99px}
.bar-num{flex:0 0 auto;font-size:.85rem;min-width:38px;text-align:right}

/* list lines */
.list-line{display:flex;align-items:center;justify-content:space-between;gap:10px 12px;padding:9px 0;border-bottom:1px solid var(--line-soft);font-size:.9rem;flex-wrap:wrap}
.list-line:last-child{border-bottom:0}
.list-line .chk-row{flex:1 1 60%;min-width:0}
.list-line .chk-row span{overflow-wrap:anywhere;word-break:break-word}
.list-line .muted{font-size:.82rem;text-align:right;flex:0 1 auto;max-width:100%;overflow-wrap:anywhere}

/* badges & chips */
.badge{display:inline-flex;align-items:center;font-size:.74rem;font-weight:600;padding:2px 9px;border-radius:99px;border:1px solid;white-space:nowrap}
.chip-row{display:flex;flex-wrap:wrap;gap:8px}
.chip{background:var(--bg-elev);border:1px solid var(--line-soft);color:var(--muted);font-size:.8rem;padding:6px 11px;border-radius:99px}
.chip-on{background:var(--lime-glow);border-color:var(--line);color:var(--ink)}
.chip-static{cursor:default}

/* toolbar */
.toolbar{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap}
.search{flex:1;min-width:200px}

/* table */
.table-wrap{background:var(--bg-card);border:1px solid var(--line-soft);border-radius:var(--r);overflow:hidden}
.tbl{width:100%;border-collapse:collapse}
.tbl th{text-align:left;font-size:.74rem;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);padding:13px 16px;border-bottom:1px solid var(--line-soft);background:var(--bg-2)}
.tbl td{padding:13px 16px;border-bottom:1px solid var(--line-soft);font-size:.9rem;vertical-align:top}
.tbl tr:last-child td{border-bottom:0}
/* Anklickbare Zeilen sind Tippziele: mindestens 44px hoch. Tabellenzeilen
   erreichen das ueber die Zellen-Innenabstaende, Listen- und Inline-Zeilen
   brauchen die Untergrenze ausdruecklich. */
.row-click{cursor:pointer;transition:background .12s var(--ease)}
.row-click:hover td{background:var(--lime-glow)}
.list-line.row-click{min-height:44px}
span.row-click{display:inline-flex;align-items:center;gap:6px;min-height:44px}

/* forms */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.field{display:flex;flex-direction:column;gap:6px}
.field-full{grid-column:1/-1}
.field-label{font-size:.78rem;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
.inp{background:var(--bg-2);border:1px solid var(--line-soft);color:var(--ink);border-radius:var(--r-sm);padding:10px 12px;font-size:.92rem;width:100%;font-family:inherit}
.inp:focus{outline:none;border-color:var(--lime);box-shadow:0 0 0 3px var(--lime-glow)}
textarea.inp{resize:vertical}
/* Dropdowns ans App-Design anpassen (statt nativem Windows-Look) */
select.inp{
  -webkit-appearance:none;-moz-appearance:none;appearance:none;
  padding-right:38px;cursor:pointer;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23B8E834' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>");
  background-repeat:no-repeat;background-position:right 12px center;
  color-scheme:dark; accent-color:var(--lime);
}
select.inp:hover{border-color:var(--lime)}
/* aufgeklappte Optionsliste (moderne Browser respektieren diese Farben) */
select.inp option{background:var(--bg-elev,#141a14);color:var(--ink);padding:10px}
select.inp option:checked{background:var(--lime);color:#0A0D0B}
.form-actions{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:6px}

/* ---- Buttons: EINE Definition ----------------------------------------
   Frueher stand hier die Basis und ~200 Zeilen tiefer eine zweite
   .btn-Regel mit Verlauf und Lift, die sie teilweise ueberschrieb.
   Beide sind jetzt hier zusammengefuehrt. Vier Rollen:

     .btn-primary     eine pro Bereich, Lime, kein Verlauf
     .btn (Standard)  Secondary — neutrale Flaeche mit Kante
     .btn-ghost       Inline-Aktion ohne Flaeche
     .btn-danger      destruktiv, wird erst beim Hover deutlich

   44px Mindesthoehe, damit Touch und Maus dasselbe Ziel treffen.      */
/* ===================================================================
   NEX BUTTON SYSTEM (V15.1) — eine Familie, Material statt Browser-Default.
   Kein harter Rahmen: die Kante entsteht aus einem inneren Lichtsaum
   (inset) über transluzentem Nex-Material, darunter ein weicher Schatten.
   Weiche Soft-Rectangle-Form (12px). Primary trägt kontrollierte Lime-
   Energie mit innerem Highlight. Physische Motion (Heben/Drücken).
   Trefferfläche immer ≥44px (Touch = Maus).
   =================================================================== */
.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;
  min-height:46px;padding:0 18px;border:0;border-radius:12px;isolation:isolate;cursor:pointer;
  font-family:var(--body);font-size:var(--t-body);font-weight:650;letter-spacing:.005em;
  color:var(--ink);
  /* Sekundär-Default: transluzentes Material, Lichtsaum oben, feine Kante. */
  background:linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,.015));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10), inset 0 0 0 1px rgba(255,255,255,.06),
    0 2px 6px rgba(0,0,0,.34);
  transition:transform .12s var(--nex-ease,cubic-bezier(.2,.7,.2,1)),
    box-shadow .16s var(--nex-ease,cubic-bezier(.2,.7,.2,1)),
    background .16s var(--nex-ease,cubic-bezier(.2,.7,.2,1)), filter .16s ease, color .14s ease}
.btn svg{width:17px;height:17px;flex:0 0 auto}
.btn:hover{transform:translateY(-1px);
  background:linear-gradient(180deg, rgba(255,255,255,.085), rgba(255,255,255,.025));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.13), inset 0 0 0 1px rgba(255,255,255,.10),
    0 8px 22px rgba(0,0,0,.42)}
.btn:active{transform:translateY(1px) scale(.99);
  box-shadow:inset 0 2px 5px rgba(0,0,0,.35), inset 0 0 0 1px rgba(255,255,255,.06),
    0 1px 3px rgba(0,0,0,.4)}
.btn:focus-visible{outline:none;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10), 0 0 0 2px var(--bg,#0A0D0B), 0 0 0 4px rgba(184,232,52,.6)}

/* PRIMARY — premium Lime-CTA: Materialverlauf, innerer Highlight, Tiefe. */
.btn-primary{color:#0A140A;
  background:linear-gradient(180deg, #CFF356 0%, var(--lime,#B8E834) 48%, #A4D62B 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.55), inset 0 -7px 14px rgba(70,100,8,.28),
    0 4px 14px rgba(184,232,52,.30), 0 2px 6px rgba(0,0,0,.28)}
.btn-primary:hover{transform:translateY(-1px);filter:brightness(1.03);
  background:linear-gradient(180deg, #D6F86A 0%, var(--lime,#B8E834) 46%, #A9DC33 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.6), inset 0 -7px 14px rgba(70,100,8,.28),
    0 10px 28px rgba(184,232,52,.4), 0 2px 6px rgba(0,0,0,.28)}
.btn-primary:active{transform:translateY(1px) scale(.99);filter:brightness(.97);
  box-shadow:inset 0 2px 6px rgba(70,100,8,.45), 0 1px 3px rgba(0,0,0,.34)}

/* GHOST — fast rahmenlos; Material entsteht erst bei Hover/Focus. */
.btn-ghost{background:transparent;box-shadow:none;color:var(--muted)}
.btn-ghost:hover{color:var(--ink);transform:translateY(-1px);
  background:linear-gradient(180deg, rgba(255,255,255,.055), rgba(255,255,255,.015));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08), inset 0 0 0 1px rgba(255,255,255,.06), 0 6px 16px rgba(0,0,0,.3)}
.btn-ghost:active{transform:translateY(0) scale(.99);box-shadow:inset 0 1px 3px rgba(0,0,0,.3)}

/* DESTRUCTIVE — Nex-Dark-Material, Rot NUR als Signal (Text + Kante/Glow). */
.btn-danger,.btn-danger-ghost{color:#EE8B83;background:transparent;box-shadow:none;font-weight:600}
.btn-danger:hover,.btn-danger-ghost:hover{color:#F4A69F;transform:translateY(-1px);
  background:linear-gradient(180deg, rgba(224,114,106,.14), rgba(224,114,106,.04));
  box-shadow:inset 0 0 0 1px rgba(224,114,106,.42), 0 6px 16px rgba(224,114,106,.16)}
.btn-danger:active,.btn-danger-ghost:active{transform:translateY(0) scale(.99)}

/* COMPACT — kleiner in Schrift/Padding, NICHT in der Trefferfläche (≥44px). */
.btn-sm{min-height:44px;padding:0 14px;font-size:var(--t-small)}
.btn-mini{min-height:44px;min-width:44px;padding:0 12px;font-size:var(--t-small);border-radius:11px}

.btn[disabled],.btn:disabled{opacity:.5;cursor:not-allowed;transform:none;filter:saturate(.5)}
.btn[disabled]:hover,.btn:disabled:hover{transform:none;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10), inset 0 0 0 1px rgba(255,255,255,.06), 0 2px 6px rgba(0,0,0,.34)}

/* ICON BUTTON — Soft-Square, Material bei Hover, ≥44px Trefferfläche. */
.icon-btn{background:transparent;border:0;color:var(--muted);padding:0;border-radius:12px;
  min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
  transition:background .14s var(--nex-ease,ease), color .14s ease, transform .12s var(--nex-ease,ease), box-shadow .14s ease}
.icon-btn svg{width:18px;height:18px}
.icon-btn:hover{color:var(--ink);transform:translateY(-1px);
  background:linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,.02));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08), inset 0 0 0 1px rgba(255,255,255,.06)}
.icon-btn:active{transform:translateY(0) scale(.94)}
.icon-btn:focus-visible{outline:none;box-shadow:0 0 0 2px var(--bg,#0A0D0B), 0 0 0 4px rgba(184,232,52,.55)}
@media (prefers-reduced-motion:reduce){
  .btn,.icon-btn{transition:box-shadow .14s ease, background .14s ease, color .14s ease}
  .btn:hover,.btn:active,.btn-primary:hover,.btn-primary:active,.btn-ghost:hover,.btn-danger:hover,.icon-btn:hover,.icon-btn:active{transform:none}
}
.row{display:flex;align-items:center;gap:10px}.row.wrap{flex-wrap:wrap}.full{width:100%}

/* modal */
/* Der Hintergrund beginnt rechts neben der Sidebar, damit die Navigation
   sichtbar bleibt. Die Grenze steht hier in CSS statt wie bisher als in JS
   berechneter Inline-Wert — der wurde beim Rendern EINMAL gesetzt und
   stimmte nach dem Verkleinern des Fensters nicht mehr. */
.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:248px;z-index:200;
  background:rgba(5,7,6,.82);backdrop-filter:blur(6px);
  display:flex;flex-direction:column;padding:0;overflow:hidden}
@media(max-width:860px){.modal-backdrop{left:0}}
/* Der Dialog ist eine Vollflaeche neben der Sidebar — EINE Definition.
   Bis v3.54 waren es drei uebereinander (Basis, "weiter/ruhiger",
   Vollbild), die dritte hat die ersten beiden mit 15 !important
   ueberstimmt, und zusaetzlich setzte app-ui.js dieselben Werte noch
   einmal als Inline-Style, "um jede gecachte CSS zu schlagen".
   Ein Dialog, drei Wahrheiten. Jetzt eine. */
.modal{position:relative;flex:1 1 auto;display:flex;flex-direction:column;min-height:0;
  width:100%;max-width:100%;margin:0;
  background:var(--bg-card);border:0;border-radius:0;box-shadow:none}
.modal-head{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;
  gap:12px;padding:18px 28px;border-bottom:1px solid var(--line-soft)}
.modal-head h3{margin:0;font-family:var(--display);font-weight:400;font-size:var(--t-h1);letter-spacing:.4px}
.modal-body{flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:24px 28px}
.modal-foot{flex:0 0 auto;padding:18px 28px;border-top:1px solid var(--line-soft);
  display:flex;gap:10px;justify-content:flex-end}

/* detail */
.detail-badges{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:6px}
.detail-block{margin-top:18px;padding-top:14px;border-top:1px solid var(--line-soft)}
.detail-block p{margin:8px 0 0;line-height:1.55}

/* inquiries */
.inq-list{display:flex;flex-direction:column;gap:12px}
.inq-card{background:var(--bg-card);border:1px solid var(--line-soft);border-radius:var(--r);padding:16px 18px}
.inq-top{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.inq-msg{margin:10px 0;line-height:1.55;color:#d9d4cb}
.lead-mail-proof{margin:12px 0 14px;padding:12px 14px;border-left:3px solid var(--lime);border-radius:0 10px 10px 0;background:rgba(184,232,52,.06)}
.lead-mail-proof strong{display:block;margin-bottom:5px}.lead-mail-proof p{margin:3px 0}
.inq-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.inq-actions{display:flex;gap:8px;flex-wrap:wrap}

/* kanban */
.kanban{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;align-items:start}
/* Spalte = eingelassene Wanne (recessed): dunkler, ohne harte Kante, mit
   Innen-Schatten oben. Die Karten sitzen sichtbar darin. */
.kanban-col{background:linear-gradient(180deg,rgba(0,0,0,.14),transparent 40%), var(--bg-2);
  border-radius:var(--r);padding:12px;min-height:120px;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.28)}
.kanban-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
/* Karte = gehobene Materialfläche wie .card: Oberlicht-Gradient, weiche
   Haarlinie, Lift beim Hover (die Karte ist ein Button, sie darf schweben). */
.proj-card{background:linear-gradient(180deg,rgba(255,255,255,.022),transparent), var(--bg-card);
  border:1px solid var(--line-soft);border-radius:var(--r-sm);padding:12px;margin-bottom:10px;cursor:pointer;
  box-shadow:var(--shadow-card);transition:transform .15s, box-shadow .15s, border-color .15s}
.proj-card:hover{transform:translateY(-1px);box-shadow:var(--shadow-lift);border-color:var(--line)}
.proj-card strong{font-size:.9rem;display:block;margin-bottom:4px}
.prog{height:5px;background:var(--bg-elev);border-radius:99px;overflow:hidden;margin-top:8px}
.prog-fill{height:100%;background:var(--lime);border-radius:99px}

/* scrim (mobile) */
.scrim{display:none}

/* responsive */
@media(max-width:1080px){.stat-row{grid-template-columns:repeat(2,1fr)}.kanban{grid-template-columns:repeat(2,1fr)}}
@media(max-width:860px){
  .sidebar{position:fixed;left:0;top:0;z-index:60;transform:translateX(-100%);transition:transform .25s}
  .sidebar.open{transform:translateX(0)}
  .burger{display:inline-flex}
  .grid-2,.detail-grid,.form-grid{grid-template-columns:1fr}
  .scrim{display:block;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:55}
  .content{padding:18px}
}
@media(max-width:520px){.stat-row{grid-template-columns:1fr}.kanban{grid-template-columns:1fr}}

/* ===== v2: Hebel-Analyse / Dokumente / Versicherung ===== */
.banner{padding:12px 16px;border-radius:var(--r);margin-bottom:16px;font-size:.92rem;line-height:1.5}
.banner-warn{background:rgba(230,200,74,.12);border:1px solid rgba(230,200,74,.35);color:#E6C84A}
.banner-alert{background:rgba(224,114,106,.12);border:1px solid rgba(224,114,106,.4);color:#F0A39C;display:flex;flex-direction:column;gap:4px}
.banner-alert a{color:#fff;font-weight:700;text-decoration:underline}

/* Skill Intelligence · auffällig, aber nur bei tatsächlichem Handlungsbedarf. */
.dash-skill-alert{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:14px;margin:14px 0;padding:16px 18px;border:1px solid rgba(180,239,35,.28);border-left:4px solid var(--lime);border-radius:12px;background:linear-gradient(100deg,rgba(180,239,35,.1),rgba(255,255,255,.018));box-shadow:0 14px 38px rgba(0,0,0,.18)}
.dash-skill-alert.is-important{border-color:rgba(224,114,106,.46);border-left-color:var(--danger);background:linear-gradient(100deg,rgba(224,114,106,.13),rgba(255,255,255,.018))}.dash-skill-alert-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:50%;background:rgba(180,239,35,.1);color:var(--lime)}.dash-skill-alert.is-important .dash-skill-alert-icon{background:rgba(224,114,106,.13);color:var(--danger)}.dash-skill-alert-copy{min-width:0}.dash-skill-alert-copy strong{display:block;margin:3px 0;color:var(--ink);font-size:1rem}.dash-skill-alert-copy p{margin:0;color:var(--muted);font-size:.84rem;line-height:1.5}
.skillintel-page{display:grid;gap:22px;max-width:1240px;margin:0 auto;padding:4px}.skillintel-head{padding:24px 0 4px}.skillintel-head h1{margin:7px 0 8px;font-family:Anton,Inter,sans-serif;font-size:clamp(2rem,5vw,4.2rem);font-weight:400;letter-spacing:.01em;line-height:1}.skillintel-head p{max-width:720px;margin:0;color:var(--muted);line-height:1.6}.skillintel-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.skillintel-stat{display:grid;grid-template-columns:auto 1fr;gap:3px 11px;align-items:center;min-height:104px;padding:16px;border:1px solid var(--line-soft);border-radius:12px;background:var(--bg-elev)}.skillintel-stat>span{grid-row:1/3;color:var(--lime)}.skillintel-stat strong{font-size:1.75rem;font-variant-numeric:tabular-nums}.skillintel-stat small{color:var(--muted)}.skillintel-stat.important{border-color:rgba(224,114,106,.38)}.skillintel-stat.important>span{color:var(--danger)}.skillintel-groups{display:grid;gap:18px}.skillintel-group{overflow:hidden;border:1px solid var(--line-soft);border-radius:14px;background:rgba(255,255,255,.012)}.skillintel-group>header{display:flex;align-items:end;justify-content:space-between;gap:16px;padding:18px 20px;border-bottom:1px solid var(--line-soft)}.skillintel-group h2{margin:4px 0 0;font-size:1.12rem}.skillintel-count{padding:5px 9px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:.75rem}.skillintel-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--line-soft)}.skillintel-item{min-width:0;padding:18px 20px;background:var(--bg-1)}.skillintel-item.important{box-shadow:inset 3px 0 var(--danger)}.skillintel-item.review{box-shadow:inset 3px 0 var(--lime)}.skillintel-item-top,.skillintel-item-foot{display:flex;align-items:center;justify-content:space-between;gap:12px}.skillintel-severity{color:var(--lime);font-size:.7rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.skillintel-item.important .skillintel-severity{color:var(--danger)}.skillintel-source,.skillintel-item-foot small{overflow:hidden;color:var(--muted);font-size:.72rem;text-overflow:ellipsis;white-space:nowrap}.skillintel-item h3{margin:11px 0 7px;font-size:1rem;line-height:1.35}.skillintel-item p{margin:0 0 16px;color:var(--muted);font-size:.84rem;line-height:1.55}.skillintel-item a{flex:0 0 auto;color:var(--lime);font-size:.78rem;font-weight:700}.skillintel-ok,.skillintel-empty{display:flex;align-items:flex-start;gap:12px;padding:22px;border:1px solid rgba(180,239,35,.24);border-radius:14px;background:rgba(180,239,35,.06)}.skillintel-ok>svg,.skillintel-empty>svg{color:var(--lime)}.skillintel-ok p,.skillintel-empty p{margin:4px 0 0;color:var(--muted)}
@media(max-width:780px){.dash-skill-alert{grid-template-columns:auto minmax(0,1fr);padding:15px}.dash-skill-alert .btn{grid-column:1/3;width:100%;min-height:48px}.skillintel-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.skillintel-list{grid-template-columns:1fr}.skillintel-item-foot{align-items:flex-start;flex-direction:column}.skillintel-item a{display:flex;align-items:center;min-height:44px}.skillintel-group>header{align-items:flex-start}.skillintel-page{gap:16px}}
@media(max-width:420px){.skillintel-summary{grid-template-columns:1fr 1fr}.skillintel-stat{min-height:92px;padding:13px}.skillintel-head{padding-top:12px}}
@media(prefers-reduced-motion:reduce){.dash-skill-alert,.skillintel-item{scroll-behavior:auto}}

.hebel-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.hebel-bar .inp{flex:1;min-width:220px}
.deep-toggle{display:flex;align-items:center;gap:10px;color:var(--ink);font-size:.9rem;white-space:nowrap;min-height:44px;cursor:pointer}
.deep-toggle input[type=checkbox]{width:22px;height:22px;flex:0 0 22px;accent-color:var(--lime)}
.hebel-status{margin-top:12px;padding:9px 13px;border-radius:var(--r-sm);font-size:.9rem}
.hebel-load{background:rgba(127,179,255,.12);color:#A9CBFF}
.hebel-ok{background:rgba(143,176,46,.16);color:#C4E86A}
.hebel-warn{background:rgba(230,200,74,.14);color:#E6C84A}
.hebel-err{background:rgba(224,114,106,.14);color:#F0A39C}
.hebel-result .hebel-summary{font-size:1rem;line-height:1.55;margin:4px 0 14px}
.hebel-fields{margin-bottom:6px}
.hebel-item{padding:11px 0;border-top:1px solid rgba(255,255,255,.07)}
.hebel-item:first-of-type{border-top:none}
/* Diese vier Kanten (hebel-ansprache, ci-output, akq-tipp, akq-warn)
   standen als einzige im System auf 3 px. Gemessen tragen sie
   tatsaechlich Information: die getoenten Flaechen dieser Bloecke
   liegen bei 1,08 bis 1,15 Kontrast zum Hintergrund und sind damit
   praktisch unsichtbar — bei akq-tipp und akq-warn sogar mit exakt
   demselben Wert. Die Kante ist dort die EINZIGE Unterscheidung
   zwischen Tipp und Warnung. Sie bleibt deshalb; nur die Staerke
   folgt jetzt dem System (2 px wie ueberall sonst). */
.hebel-ansprache{font-style:italic;color:var(--ink,#F5EFE6);background:rgba(255,255,255,.04);padding:11px 14px;border-radius:var(--r-sm);border-left:2px solid var(--lime,#B8E834)}
.tight-list{margin:4px 0 0;padding-left:18px}
.tight-list li{margin:3px 0;color:var(--ink,#F5EFE6)}

.doc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin-top:10px}
.doc-card{background:var(--bg-elev,#182019);border:1px solid rgba(255,255,255,.08);border-radius:var(--r);padding:13px 14px;display:flex;flex-direction:column;gap:9px;justify-content:space-between}
.doc-pick{display:flex;gap:8px;align-items:stretch}
.doc-pick .inp{flex:1}
.doc-pick .dd{flex:1 1 auto;min-width:0}
.doc-pick .btn{flex:0 0 auto;white-space:nowrap}
.more-docs{margin-top:14px}
.more-docs summary{cursor:pointer;color:var(--lime-soft,#8FB02E);font-size:.9rem}

.tier-pick{max-height:300px;overflow:auto;border:1px solid rgba(255,255,255,.08);border-radius:var(--r-sm);margin-top:6px}
.tier-row{display:flex;align-items:center;gap:10px;padding:8px 12px;border-bottom:1px solid rgba(255,255,255,.05);cursor:pointer;font-size:.9rem}
.tier-row:last-child{border-bottom:none}
.tier-row.on{background:rgba(143,176,46,.12)}
.tier-name{flex:1}
.tier-price{color:var(--lime-soft,#8FB02E);font-weight:600;white-space:nowrap}
.rech-row{display:flex;gap:8px;margin-bottom:8px}
.rech-row .inp{flex:1}
/* .rech-row .inp setzt flex:1 — hier zaehlt die Reihenfolge, nicht ein
   !important: die spezifischere Regel steht jetzt danach. */
.rech-row .inp-sm,.add-bar .inp-sm{max-width:90px;flex:0 0 auto}

/* Sechs Spalten plus Aktionsknoepfe: breiter als der Inhaltsbereich,
   sobald das Fenster unter ~1100 px faellt. Bis v5 schob die Tabelle die
   GANZE Seite auseinander — bei 1024 px gemessene 36 px waagerechter
   Dokument-Scroll, Kopfzeile und Navigation wanderten mit. Eine
   Scrollregel gab es nur unterhalb 680 px; dazwischen war niemand
   zustaendig. Sie scrollt jetzt im eigenen Kasten, auf jeder Breite. */
.tbl-mini{display:block;overflow-x:auto;max-width:100%;min-width:100%;
  font-size:.88rem;margin-top:6px}
.tbl-mini td{padding:5px 8px;border-bottom:1px solid rgba(255,255,255,.06)}
.linklike{background:none;border:none;color:var(--lime-soft,#8FB02E);cursor:pointer;font-size:.82rem;padding:0}
.linklike.danger{color:#E0726A}
.row-click{cursor:pointer}

/* login */
.login-box{margin-top:14px;padding-top:14px;border-top:1px solid rgba(255,255,255,.08)}
.login-row{display:flex;gap:8px;flex-wrap:wrap}
.login-row .inp{flex:1;min-width:140px}

/* Cockpit Intelligence */
.ci-card{border:1px solid rgba(184,232,52,.25)}
.ci-output{white-space:pre-wrap;margin-top:12px;padding:14px 16px;background:rgba(184,232,52,.06);border-radius:var(--r);border-left:2px solid var(--lime,#B8E834);line-height:1.6;font-size:.94rem;color:var(--ink,#F5EFE6)}
.chip-static{background:var(--bg-elev,#182019);border:1px solid rgba(255,255,255,.1);padding:4px 10px;border-radius:99px;font-size:.82rem;color:var(--ink,#F5EFE6)}

/* ===== v3.2: dynamik, mobil, 2FA ===== */
/* animiertes Logo */
@keyframes spin360{from{transform:rotate(0)}to{transform:rotate(360deg)}}
.spin-logo{animation:spin360 14s linear infinite;transform-origin:50% 50%}
@media(prefers-reduced-motion:reduce){.spin-logo{animation:none}}

/* sanfter Ansichtswechsel */
@keyframes fadeUp{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
.view-fade{animation:fadeUp .22s ease both}

/* Checkbox-Zeile */
/* Angeklickt wird das Label, nicht das Kaestchen — die Trefferflaeche ist
   deshalb die Zeile. Das Kaestchen selbst bleibt klein genug, um in einer
   Aufgabenliste nicht zu dominieren. */
.chk-row{display:inline-flex;align-items:center;gap:10px;cursor:pointer;min-height:44px}
.chk-row input{width:22px;height:22px;flex:0 0 22px;accent-color:var(--lime)}

/* TOTP-Secret-Box */
.totp-secret{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:1.05rem;letter-spacing:2px;background:var(--bg-elev,#182019);border:1px dashed var(--lime,#B8E834);border-radius:var(--r-sm);padding:12px 14px;margin:8px 0;word-break:break-all;user-select:all}

/* App-Sperre */
.lock-wrap{min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(1200px 600px at 50% -10%,rgba(184,232,52,.08),transparent),var(--bg,#0A0D0B)}
.lock-card{width:100%;max-width:360px;background:var(--bg-card,#131A14);border:1px solid var(--line,rgba(255,255,255,.08));border-radius:var(--r-lg);padding:30px 24px;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.lock-card .brand-mark{margin-inline:auto}
.lock-card h2{margin:16px 0 4px}
.lock-input{text-align:center;font-size:1.6rem;letter-spacing:8px;font-family:ui-monospace,monospace;margin:14px 0 6px}
.lock-err{color:#ff8080;font-size:.9rem;margin:4px 0}
.btn-block{width:100%;justify-content:center;margin-top:8px}

/* Bottom-Nav (mobil) */
.bottomnav{display:none}
@media(max-width:860px){
  .bottomnav{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:50;
    background:rgba(19,26,20,.96);backdrop-filter:blur(8px);border-top:1px solid var(--line,rgba(255,255,255,.08));
    padding:6px 4px calc(6px + env(safe-area-inset-bottom));justify-content:space-around}
  /* min-width:0 hebt die Flexbox-Vorgabe min-width:auto auf. Ohne sie
     schrumpfen die Punkte nicht unter ihre Textbreite, und ein langes
     Label sprengt die Leiste statt sich zu kuerzen. */
  .bn-item{flex:1;min-width:0;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
    background:none;border:0;color:var(--muted);min-height:48px;
    font-size:var(--t-micro);padding:6px 2px;border-radius:var(--r-sm);cursor:pointer}
  .bn-item svg{width:20px;height:20px}
  .bn-item span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .bn-item.active{color:var(--lime)}
  /* Zaehler sitzt am Icon, nicht in der Zeile — sonst bricht das Label um. */
  .bn-item .nav-dot{position:absolute;top:2px;left:50%;margin-left:4px;
    font-size:10px;line-height:16px;padding:0 5px;min-width:16px}
}
@media(max-width:520px){.hide-phone{display:none!important}}
/* Auf Telefonen stehen sechs reine Icon-Aktionen in der Kopfleiste. Der
   Desktop-Abstand von 14px drueckte den Abmelden-Knopf bei 390px um 11px aus
   dem Viewport. Engerer Rhythmus statt Abschneiden oder horizontalem Scroll. */
@media(max-width:520px){
  .topbar{gap:6px;padding-left:calc(8px + env(safe-area-inset-left));padding-right:calc(8px + env(safe-area-inset-right))}
}

/* Tabellen auf schmal scrollbar */
@media(max-width:680px){
  .tbl{display:block;overflow-x:auto;white-space:nowrap}
  .rech-row{flex-wrap:wrap}
  .rech-row .inp{min-width:120px}
  .topbar .top-mrr{font-size:.9rem}
}
/* Tap-Ziele mobil: 44px ist das Minimum, nicht das Maximum.
   Diese Regel setzte frueher 40px und hat die 44px aus der Button-Sektion
   auf genau den Geraeten unterboten, fuer die sie gedacht war. */
@media(max-width:860px){.btn,.nav-item{min-height:44px}}

/* ============================================================
   v3.4 — Design-Layer: mehr Raum, Tiefe, Bewegung
   ============================================================ */
/* Der zweite :root stand hier und hat den ersten ueberschrieben —
   aufgeloest, alle Werte sind jetzt oben. Nichts ersetzt ihn. */

/* Ruhiger Grund statt zweier Lime-Lichtquellen: Der Verlauf faerbte die
   gesamte Flaeche leicht gruen und liess jede Karte darauf schweben.
   Ein CRM ist Arbeitsflaeche, kein Hero. */
body{background:var(--bg)}

/* ---- Eingabefelder: größer, fühlbarer ---- */
.inp{padding:13px 16px;font-size:1rem;border-radius:var(--r);min-height:48px;line-height:1.3;
  transition:border-color .18s, box-shadow .18s, background .18s}
textarea.inp{min-height:96px}
select.inp{cursor:pointer}
.inp:hover{border-color:var(--line)}
.inp:focus{border-color:var(--lime);box-shadow:0 0 0 3px var(--lime-glow);background:var(--bg-elev)}
.inp::placeholder{color:var(--muted-2,#6f7a6f)}
/* Kompakt heisst schmaler und leiser, nicht schwerer zu treffen: 42px lag
   knapp unter der 44px-Grenze — genau in den engen Erfassungszeilen. */
.inp-sm{min-height:44px;padding:9px 12px;font-size:.92rem}
.field-label{font-size:.74rem;font-weight:600}
.field-label-icon{display:inline-flex;align-items:center;gap:7px;min-height:22px;color:var(--muted)}
.field-label-icon svg{width:15px;height:15px;flex:0 0 15px;color:var(--lime);opacity:.9}
.dd-trigger>svg{width:16px;height:16px;flex:0 0 16px;color:var(--lime)}
.dd-item{display:flex;align-items:center;gap:9px;text-align:left}
.dd-item>svg{width:16px;height:16px;flex:0 0 16px;color:var(--lime);opacity:.82}
.form-grid{gap:18px}

/* Die zweite und dritte .modal-Definition standen hier und weiter unten.
   Beide sind in der einen Definition oben aufgegangen. */
@keyframes modalPop{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
.modal{animation:modalPop .22s var(--ease) both}
@media(prefers-reduced-motion:reduce){.modal{animation:none}}

/* Die zweite .btn-Definition (Gradient, Lift, Press) stand hier und ist
   jetzt oben in der einen Button-Sektion aufgegangen. */
.btn-block{width:100%;justify-content:center}

/* ---- Cards: Tiefe + Hover-Lift + Einblendung ---- */
.card{background:linear-gradient(180deg,rgba(255,255,255,.018),transparent), var(--bg-card);
  border-radius:var(--r);padding:22px 24px;box-shadow:var(--shadow-card);
  transition:transform .2s, box-shadow .2s, border-color .2s;animation:fadeUp .3s ease both}
.card:hover{box-shadow:var(--shadow-lift);border-color:var(--line)}
.card h3{font-size:1rem;letter-spacing:.2px;margin-bottom:16px}
/* gestaffelte Einblendung */
.content .card:nth-child(2){animation-delay:.04s}
.content .card:nth-child(3){animation-delay:.08s}
.content .card:nth-child(4){animation-delay:.12s}
.content .card:nth-child(5){animation-delay:.16s}

/* ---- Stat-Kacheln: größer, Akzentlinie, Lift ---- */
.stat-row{gap:16px}
.stat{position:relative;padding:20px 20px 18px;border-radius:var(--r);overflow:hidden;
  background:linear-gradient(180deg,rgba(255,255,255,.02),transparent), var(--bg-card);
  box-shadow:var(--shadow-card);transition:transform .2s, box-shadow .2s}
.stat::before{content:"";position:absolute;left:0;top:0;height:3px;width:100%;
  background:linear-gradient(90deg,var(--lime),transparent);opacity:.25}
/* Kennzahlen schweben nicht. Sie sind Anzeigen, keine Buttons — eine
   Hover-Bewegung verspricht eine Interaktion, die es nicht gibt. */
.stat:hover{border-color:var(--line-strong)}
.stat-accent::before{opacity:1}
.stat-value{font-size:2rem}
.stat-label{font-size:.72rem;font-weight:600}

/* ---- Navigation ----
   Der Hover-Versatz (translateX 2px) ist raus: 17 Zeilen, die beim
   Ueberfahren wandern, sind Unruhe ohne Information.
   Aktiver Punkt: EINE Definition (die zweite stand frueher oben und hat
   sich mit dieser gestritten). Lime nur als 2px-Kante — aktive Navigation
   ist einer der erlaubten Lime-Faelle, aber sie muss nicht leuchten. */
.nav-item{transition:background .16s var(--ease), color .16s var(--ease)}
.nav-item.active{background:var(--bg-elev);color:var(--ink);box-shadow:inset 2px 0 0 var(--lime)}

/* ---- Topbar: sticky + blur ---- */
.topbar{position:sticky;top:0;z-index:30;background:rgba(15,20,17,.72);backdrop-filter:blur(10px);
  padding-top:calc(14px + env(safe-area-inset-top))}
.top-mrr strong{font-family:var(--serif);font-style:italic;font-size:1.15rem;color:var(--lime)}

/* ---- view-head: größere Headline ---- */
.view-head h1{font-size:2.5rem}
.view-head p{font-size:1rem}

/* ---- Tabellen: Hover, Rundung ---- */
.tbl tbody tr{transition:background .14s}
.tbl tbody tr:hover td{background:rgba(184,232,52,.05)}
.tbl-mini td{padding:11px 12px}

/* ---- Chips ---- */
.chip{transition:background .16s, border-color .16s, transform .12s;cursor:default}
button.chip,.chip[onclick]{cursor:pointer}
button.chip:hover{background:var(--bg-hover)}

/* ---- Badges leicht leuchtend ---- */
.badge{box-shadow:0 0 0 1px rgba(255,255,255,.04)}

/* ---- Scrollbars ---- */
*{scrollbar-width:thin;scrollbar-color:rgba(184,232,52,.3) transparent}
*::-webkit-scrollbar{width:10px;height:10px}
*::-webkit-scrollbar-thumb{background:rgba(184,232,52,.25);border-radius:99px;border:2px solid transparent;background-clip:content-box}
*::-webkit-scrollbar-thumb:hover{background:rgba(184,232,52,.45);background-clip:content-box}

.brand-name{font-size:1.35rem}

/* ---- kleine Helfer ---- */
.linklike{background:none;border:0;color:var(--lime);cursor:pointer;font:inherit;padding:0}
.linklike:hover{text-decoration:underline}
.linklike.danger{color:var(--danger,#E0726A)}
/* In Tabellenzellen ist der Link das einzige Ziel — die Zelle selbst ist
   nicht klickbar. Ein 17px hoher Textlink ist auf dem Handy kaum zu
   treffen, deshalb fuellt er hier die Zeilenhoehe aus. Optisch aendert
   sich nichts: der Text bleibt stehen, nur die Flaeche waechst. */
td>.linklike{display:inline-flex;align-items:center;min-height:44px}

/* ---- größere Tap-Ziele/Abstände auf großen Screens ---- */
@media(min-width:861px){.content{padding:32px 36px}}

/* ===== Diagnose-Punkte ===== */
.diag-dot{display:inline-block;width:11px;height:11px;border-radius:50%;box-shadow:0 0 0 3px rgba(255,255,255,.04)}
/* Ohne 10px-Schein. Die Punkte stehen seit dem Umbau prominent im
   Dashboard, im Statusband und in jeder Meldezeile — leuchtende Punkte
   an jeder dieser Stellen sind genau die Optik, gegen die der Umbau geht.
   Die Farbe traegt die Aussage, der Schein trug nichts. */
.diag-ok{background:var(--lime-soft)}
.diag-warn{background:var(--warn)}
.diag-fail{background:var(--danger)}

/* ===== Dokumente: aufgeräumt ===== */
.doc-search{display:flex;align-items:center;gap:10px;background:var(--bg-card);border:1px solid var(--line-soft);
  border-radius:var(--r-lg);padding:6px 12px 6px 14px;margin-bottom:18px;box-shadow:var(--shadow-card)}
.doc-search-ic{display:flex;color:var(--lime);opacity:.8}
.doc-search-ic svg{width:18px;height:18px}
.doc-search .inp{border:0;background:transparent;box-shadow:none;min-height:44px;padding-left:0}
.doc-search .inp:focus{box-shadow:none}
.doc-count{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:20px;margin-left:8px;
  padding:0 7px;border-radius:99px;background:var(--lime-glow);color:var(--lime);font-size:.72rem;font-weight:700;vertical-align:middle}
.doc-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.doc-card{padding:16px;gap:14px;transition:transform .16s, box-shadow .16s, border-color .16s}
.doc-card:hover{border-color:var(--line-strong)}
.doc-card-top{display:flex;align-items:flex-start;gap:12px}
.doc-card-meta strong{display:block;line-height:1.25}
.doc-icon{flex:0 0 40px;width:40px;height:40px;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;
  background:var(--bg-2);border:1px solid var(--line-soft);color:var(--lime-soft)}
.doc-icon svg{width:19px;height:19px}
/* Flaeche statt Verlauf — auch am Icon-Kachelchen. */
.doc-icon-mkt{color:var(--info);background:var(--bg-2)}
.doc-pick{gap:8px}
.doc-pick .inp{min-height:42px}
.doc-pick .btn{white-space:nowrap}

/* ===== v3.12: Bearbeiten-/Detail-Fenster = komplette Seite + Scrollfix =====
   Der Block bestand aus 15 !important, mit denen die dritte .modal-Regel
   die ersten beiden ueberstimmt hat. Alles davon steht jetzt EINMAL in
   der Dialog-Sektion weiter oben — ohne !important, weil es dort nichts
   mehr zu ueberstimmen gibt. Geblieben ist, was wirklich hierher gehoert. */
/* Inhalt im Vollbild angenehm breit, aber nicht endlos gestreckt */
.modal-body > *{max-width:1400px; margin-left:auto; margin-right:auto}
.modal-body .form-grid{gap:18px 22px}

/* ===== v3.9: aufgeräumte Sektionen (Finanzen u.a.) ===== */
.card h3 svg{width:18px;height:18px;vertical-align:-3px;color:var(--lime);opacity:.9;margin-right:2px}
.card-sub{color:var(--muted);font-size:.86rem;margin:-6px 0 16px}
/* Zugeklapptes Erfassungsformular. Zu ist der Normalfall: die Daten
   darunter liest man taeglich, angelegt wird seltener. */
.add-bar{background:var(--bg-2);border:1px solid var(--line-soft);border-radius:var(--r-lg);
  padding:var(--s-3) var(--s-4);margin-bottom:var(--s-4)}
.add-bar .sec-label{display:flex;align-items:center;gap:var(--s-2);
  font-size:var(--t-micro);font-weight:700;letter-spacing:.6px;text-transform:uppercase;
  color:var(--muted);margin-bottom:0;cursor:pointer;list-style:none;min-height:24px}
.add-bar .sec-label::-webkit-details-marker{display:none}
.add-bar .sec-label::before{content:"+";font-size:var(--t-body);line-height:1;
  color:var(--muted-2);font-weight:400}
.add-bar[open] .sec-label{margin-bottom:var(--s-3)}
.add-bar[open] .sec-label::before{content:"−"}
.add-bar .sec-label:hover{color:var(--ink)}
.add-bar .rech-row{margin:0}
/* "Nicht gemessen" ist eine Randnotiz, kein Fehler.

   Bis v5 war jeder Leerzustand ein gestrichelter Kasten ueber die
   volle Breite, zentriert. Auf "Systeme & Integrationen" standen sechs
   davon untereinander — 2470 px Seite, deren Aussage sechsmal "hier
   ist nichts" war, und die Seite sah aus wie ein Formular voller
   Fehlermeldungen. Dabei ist "noch nicht eingerichtet" ein neutraler,
   voellig richtiger Zustand.

   Jetzt: eine ruhige Zeile mit Einzug, linksbuendig. Sie belegt Platz
   nach Bedeutung, nicht nach Rahmen. Wirkt in Systemen, Historie,
   Recovery und Marketing zugleich — eine Regel, vier Bildschirme. */
.empty-hint{margin:var(--s-1) 0 0;padding:var(--s-2) 0 var(--s-2) var(--s-3);
  border-left:1px solid var(--line-soft);text-align:left;line-height:1.5;
  max-width:var(--maxw-lesen)}
.status-line{margin-top:12px;padding-top:10px;border-top:1px solid var(--line-soft)}
.tbl-mini thead th{font-size:.68rem;letter-spacing:.5px;text-transform:uppercase;color:var(--muted);padding:6px 12px;border-bottom:1px solid var(--line-soft)}
.rech-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.rech-row .inp{flex:1;min-width:130px}
.rech-row .btn{flex:0 0 auto}

/* ===== v3.17: globale Suche + Aufgaben + Cockpit-Block ===== */
.gsearch{position:relative;flex:1;max-width:520px;margin:0 8px}
.gsearch-in{display:flex;align-items:center;gap:8px;background:var(--bg-2);border:1px solid var(--line-soft);
  border-radius:var(--r);padding:0 12px}
.gsearch-in svg{width:16px;height:16px;color:var(--muted);flex:0 0 auto}
.gsearch-in .inp{border:0;background:transparent;box-shadow:none;min-height:44px;padding:8px 0}
.gsearch-in .inp:focus{box-shadow:none}
.gsearch-pop{position:absolute;top:48px;left:0;right:0;z-index:120;background:var(--bg-card);
  border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:0 24px 60px -24px #000;padding:8px;max-height:60vh;overflow:auto}
.gs-h{font-size:.68rem;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--muted);padding:8px 10px 4px}
.gs-item{padding:9px 10px;border-radius:var(--r-control);cursor:pointer}
.gs-item:hover{background:var(--lime-glow)}
.gs-empty{padding:14px;text-align:center}
@media(max-width:860px){.gsearch{display:none}}

/* ===== v3.21: 2FA QR-Code ===== */
.twofa-setup{max-width:520px}
.qr-box{display:inline-block;padding:12px;background:#fff;border-radius:var(--r-lg);margin:6px 0 12px;
  box-shadow:0 8px 30px -12px #000}
.qr-box img{display:block;border-radius:4px}
.totp-secret{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:1.05rem;letter-spacing:1px;
  background:var(--bg-2);border:1px solid var(--line-soft);border-radius:var(--r-sm);padding:10px 14px;
  display:inline-block;margin:4px 0 2px;color:var(--lime)}

/* ===== v3.22: Recovery-Code, Sync-Status, Nav-Badge ===== */
.recovery-box{margin:6px 0 4px;padding:12px 14px;background:rgba(224,162,58,.08);
  border:1px solid rgba(224,162,58,.35);border-radius:var(--r)}
.recovery-code{font-size:1.15rem;letter-spacing:2px;color:#E0A23A}
/* Ohne !important: der Selektor ist jetzt spezifisch genug, weil .nav-dot
   und .nav-dot-bad immer gemeinsam am selben Element stehen. */
.nav-dot.nav-dot-bad{background:var(--danger);color:#2A1614}

/* ===== v3.25: App-konformes Dropdown ===== */
.dd{position:relative}
.dd-flex{flex:1}
.dd-trigger{display:flex;align-items:center;justify-content:space-between;gap:10px;text-align:left;cursor:pointer;white-space:nowrap;overflow:hidden}
.dd-trigger > span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dd-trigger.dd-open{border-color:var(--lime);box-shadow:0 0 0 3px var(--lime-glow)}
.dd-placeholder{color:var(--muted)}
.dd-arrow{display:inline-flex;color:var(--lime);transition:transform .18s ease}
.dd-arrow-up{transform:rotate(180deg)}
.dd-menu{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:200;
  background:#11160F;border:1px solid rgba(184,232,52,.28);border-radius:var(--r);
  padding:6px;box-shadow:0 24px 60px -12px rgba(0,0,0,.85);max-height:300px;overflow-y:auto;
  animation:ddIn .14s ease}
@keyframes ddIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.dd-item{display:flex;align-items:center;justify-content:space-between;width:100%;text-align:left;
  background:none;border:0;color:var(--ink);padding:10px 12px;min-height:44px;border-radius:var(--r-control);
  font-size:.92rem;font-family:inherit;cursor:pointer;line-height:1.3}
.dd-item:hover{background:rgba(184,232,52,.14)}
.dd-item-active{color:var(--lime);font-weight:600}
.dd-item-active::after{content:"✓";color:var(--lime);margin-left:10px}
.dd-item-active:hover{background:rgba(184,232,52,.14)}
.dd-value{color:var(--ink)}
/* kompaktes Dropdown für Toolbar-/Rech-Zeilen (wie inp-sm) */
.dd-sm{flex:0 0 auto}
.dd-sm .dd-trigger{padding:9px 12px;font-size:.92rem;min-height:44px}
.dd-sm .dd-menu{min-width:200px}
.rech-row .dd,.toolbar .dd{flex:1;min-width:150px}
.rech-row .dd-sm,.toolbar .dd-sm{flex:1;min-width:150px}

/* ===== v3.26: Datumsfelder ans App-Design ===== */
input[type=date].inp{
  color-scheme:dark;                 /* nativer Kalender-Popup in Dunkel */
  position:relative;cursor:pointer;
}
input[type=date].inp::-webkit-calendar-picker-indicator{
  filter:invert(82%) sepia(38%) saturate(700%) hue-rotate(38deg) brightness(98%) contrast(92%);
  cursor:pointer;opacity:.9;
}
input[type=date].inp::-webkit-calendar-picker-indicator:hover{opacity:1}
input[type=date].inp:focus{outline:none;border-color:var(--lime);box-shadow:0 0 0 3px var(--lime-glow)}
input[type=date].inp::-webkit-datetime-edit{color:var(--ink)}
input[type=date].inp::-webkit-datetime-edit-fields-wrapper{color:var(--ink)}

/* ===== v3.28: Wortmarke „DreiHundertSechzig" (wie Website) ===== */
.wortmarke{font-family:var(--body);font-weight:800;letter-spacing:-.2px;white-space:nowrap;display:inline}
.wortmarke .wm-1{color:inherit}
.wortmarke .wm-2{color:var(--lime);font-style:italic;font-weight:800}
/* in der Sidebar: kleiner + nicht über den Sidebar-Rand laufen lassen */
.brand{overflow:visible}
.brand > div{min-width:0}
/* Wortmarke in der Sidebar: zweizeilig statt abgeschnitten.
   Vorher lief sie mit 157px in ein 145px breites Feld und wurde vom
   overflow:hidden gekappt — sichtbar war "DreiHundertSechz…".
   Umbrechen konnte sie nicht, weil .wortmarke global white-space:nowrap
   und display:inline setzt (Zeile ~605) — das ist fuer Fliesstext auch
   richtig und bleibt. Hier, und nur hier, wird der Umbruch erlaubt und
   ueber die beiden vorhandenen Spans gefuehrt: "DreiHundert" ueber
   "Sechzig". Kein !important noetig, .brand-name .wortmarke ist bereits
   der spezifischere Selektor. */
.brand-name{overflow:hidden}
.brand-name .wortmarke{font-size:1.05rem;letter-spacing:-.2px;
  display:block;white-space:normal}
.brand-name .wm-1,.brand-name .wm-2{display:block;line-height:1.08}
.brand-name .wm-1{font-weight:740;letter-spacing:-.35px}
.brand-name .wm-2{margin-top:-1px;text-shadow:0 0 18px rgba(184,232,52,.16)}
.lock-card h2 .wortmarke{font-weight:800}

/* ===== v3.29: Liquidität, Kleinunternehmer-Ampel, Mahnungen ===== */
/* minmax(0,…) statt 1fr: sonst diktiert der Zelleninhalt die Spaltenbreite
   und die Dreierreihe sprengt auf 320px die Seite. */
.liq-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(140px,100%),1fr));gap:12px;margin:6px 0 14px}
.liq-cell{background:var(--bg-elev,#141a14);border:1px solid var(--line-soft);border-radius:var(--r);padding:14px 16px;text-align:center}
.liq-net{font-family:var(--serif);font-style:italic;font-size:1.45rem;color:var(--lime);margin:4px 0;line-height:1}
.liq-net.liq-neg{color:#E0726A}
.klein-box{margin:8px 0 4px;padding:14px 16px;background:var(--bg-elev,#141a14);border:1px solid var(--line-soft);border-radius:var(--r)}
.klein-head{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:.9rem;margin-bottom:8px;flex-wrap:wrap}
.klein-ok{color:var(--lime)}
.klein-warn{color:#E0A23A}
.klein-over{color:#E0726A}
.klein-track{height:10px;background:rgba(255,255,255,.06);border-radius:99px;overflow:hidden}
/* Gleiche Lage wie .bar-fill: Wert wird beim Mount gesetzt, die
   Transition lief nie. */
.klein-fill{height:100%;border-radius:99px}
.klein-fill-ok{background:var(--lime)}
.klein-fill-warn{background:#E0A23A}
.klein-fill-over{background:#E0726A}
.dun-box{margin-top:14px;padding-top:12px;border-top:1px solid var(--line-soft)}
.dun-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.05);flex-wrap:wrap}
.dun-row:last-child{border-bottom:0}
.bk-box{margin-top:14px;padding-top:14px;border-top:1px solid var(--line-soft)}
.bk-head{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:.9rem;margin-bottom:6px;flex-wrap:wrap}

/* ===== v3.29: DocConfig mit PDF-Vorschau ===== */
.doc-config-layout{display:grid;grid-template-columns:minmax(320px,440px) 1fr;gap:22px;align-items:start;min-height:0}
.doc-config-form{min-width:0}
.doc-config-preview{position:sticky;top:0;min-height:60vh;height:100%;background:var(--bg-elev,#141a14);border:1px solid var(--line-soft);border-radius:var(--r-lg);overflow:hidden;display:flex}
.doc-pdf-frame{width:100%;height:100%;min-height:60vh;border:0;background:#525659}
.doc-preview-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center;padding:30px;color:var(--muted)}
.doc-preview-empty svg{width:42px;height:42px;opacity:.5}
.doc-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;flex-wrap:wrap}
.doc-foot-actions{display:flex;gap:10px}
@media (max-width:860px){
  .doc-config-layout{grid-template-columns:1fr}
  .doc-config-preview{min-height:50vh;order:2}
  .doc-pdf-frame{min-height:50vh}
}

/* ===== v3.31: Kontakt-Historie Typen + Mail-Vorlagen ===== */
/* Der Grundwert traegt jetzt eine Farbe: Eintraege mit unbekanntem Typ
   (englische Altwerte wie "note") hatten sonst einen unsichtbaren Punkt. */
.act-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:9px;vertical-align:middle;background:var(--muted-2)}
.act-anruf{background:#5BA8E0}
.act-mail{background:var(--info)}
.act-termin{background:#E0A23A}
.act-notiz,.act-note,.act-contact,.act-status{background:var(--muted-2)}
/* Der Eingang ist der Ursprung des Leads — einer der erlaubten Lime-Faelle. */
.act-eingang{background:var(--lime)}

/* ===== v3.31: Kunden-Pipeline + Ansicht-Umschalter =====
   Umbenannt von .lead-* zu .pipe-*: seit es eine echte Lead-Inbox gibt,
   waren zwei Dinge mit demselben Praefix zwei verschiedene Sachen. */
/* Vier Segmente passen bei 320px nicht nebeneinander. Umbrechen statt
   ueberlaufen — scrollen waere hier schlechter, weil die hinteren
   Segmente dann unsichtbar waeren. */
.seg{display:inline-flex;flex-wrap:wrap;max-width:100%;background:var(--bg-2);border:1px solid var(--line-soft);border-radius:var(--r-sm);padding:3px;gap:2px}
.seg-btn{display:inline-flex;align-items:center;gap:6px;background:none;border:0;color:var(--muted);
  padding:8px 12px;min-height:44px;border-radius:var(--r-control);font-size:var(--t-small);font-family:inherit;cursor:pointer;
  transition:background .14s var(--ease),color .14s var(--ease)}
.seg-btn svg{width:15px;height:15px}
.seg-btn:hover{color:var(--ink)}
/* v5: der Umschalter sagt, WO man ist — er ist keine Handlung. Bis
   hierher war er vollflaechig lime und stand damit direkt neben dem
   lime "Neuer Kunde": zwei gleich laute Signale, von denen nur eines
   etwas ausloest. Jetzt traegt er die gewaehlte Seite als Flaeche und
   Lime nur noch als Kante. */
.seg-btn.on{background:var(--bg-elev);color:var(--ink);font-weight:600;
  box-shadow:inset 0 -2px 0 var(--lime)}
.seg-btn:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
.pipe-card{background:var(--bg-2);border:1px solid var(--line-soft);border-radius:var(--r-sm);padding:10px 12px;margin-bottom:8px}
.pipe-card .row-click{cursor:pointer}
.pipe-move{display:flex;justify-content:space-between;margin-top:8px;gap:6px}
.pipe-arrow{flex:1;background:var(--bg-elev);border:1px solid var(--line-soft);color:var(--muted);
  border-radius:var(--r-control);padding:4px 0;min-height:44px;font-size:1.1rem;line-height:1;cursor:pointer}
.pipe-arrow:hover{background:var(--bg-hover);color:var(--ink)}
.pipe-arrow:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
.pipe-arrow-spacer{flex:1}

/* ===== v3.32: Kundendetail-Layout sauber ===== */
.detail-edit-bar{display:flex;justify-content:flex-end;margin-bottom:12px}
.contact-add{display:flex;gap:8px;align-items:center;margin-top:8px;flex-wrap:wrap}
.contact-add .contact-type{flex:0 0 130px}
.contact-add .contact-note{flex:1 1 200px;min-width:0;max-width:none}
.contact-add .btn{flex:0 0 auto;white-space:nowrap}
/* Datumsfelder breit genug, damit TT.MM.JJJJ nicht abschneidet */
input[type=date].inp{min-width:150px}
input[type=date].inp-sm{min-width:140px}
/* Detail-Grid auf schmalen Modals umbrechen */
@media (max-width:760px){
  .detail-grid{grid-template-columns:1fr}
  .contact-add .contact-type{flex:1 1 100%}
}

/* ===== v3.34: Akquise-Playbook ===== */
.akq-layout{display:grid;grid-template-columns:240px 1fr;gap:22px;align-items:start}
.akq-nav{display:flex;flex-direction:column;gap:4px;position:sticky;top:90px}
.akq-nav-item{display:flex;align-items:center;gap:10px;background:var(--bg-2);border:1px solid var(--line-soft);color:var(--ink);text-align:left;padding:10px 12px;min-height:44px;border-radius:var(--r-sm);cursor:pointer;font-family:inherit;font-size:.9rem;transition:background .15s var(--ease),border-color .15s var(--ease)}
.akq-nav-item:hover{border-color:var(--lime-soft)}
/* Wie die Hauptnavigation: Flaeche plus 2px-Kante. Der Lime-Verlauf war
   derselbe Effekt, den .nav-item.active in P2 abgelegt hat — zwei
   Navigationen im selben Produkt duerfen nicht verschieden aussehen. */
.akq-nav-item.on{background:var(--bg-elev);border-color:var(--line);box-shadow:inset 2px 0 0 var(--lime)}
.akq-nav-nr{font-family:var(--serif);font-style:italic;color:var(--lime);font-size:.95rem;flex:0 0 auto}
.akq-nav-label{min-width:0}
.akq-content{min-width:0;display:flex;flex-direction:column;gap:16px}
.akq-chapter-head{display:flex;gap:16px;align-items:flex-start;padding-bottom:8px;border-bottom:1px solid var(--line-soft)}
.akq-chapter-nr{font-family:var(--serif);font-style:italic;font-size:2.2rem;color:var(--lime);line-height:1;flex:0 0 auto}
.akq-chapter-title{margin:0;font-family:var(--display);font-weight:400;font-size:1.5rem;letter-spacing:.3px}
.akq-text{line-height:1.6;color:var(--ink);margin:0}
.akq-h4{margin:0 0 10px;font-size:1rem;color:var(--lime-soft);letter-spacing:.3px}
.akq-block{background:var(--bg-2);border:1px solid var(--line-soft);border-radius:var(--r);padding:16px 18px}
.akq-principles{display:flex;flex-direction:column;gap:10px}
.akq-principle{display:flex;flex-direction:column;gap:2px}
.akq-principle strong{color:var(--ink)}
.akq-tbl th{font-size:.78rem;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}
.akq-tbl .akq-td-key{font-weight:600;color:var(--lime-soft);white-space:nowrap;vertical-align:top}
.akq-tbl td{vertical-align:top;line-height:1.5}
.akq-tipp{background:rgba(184,232,52,.08);border-left:2px solid var(--lime);border-radius:var(--r-control);padding:12px 16px;line-height:1.55}
.akq-warn{background:rgba(224,162,58,.1);border-left:2px solid #E0A23A;border-radius:var(--r-control);padding:12px 16px;line-height:1.55}
.akq-script{background:#0c100d;border:1px solid var(--line-soft);border-radius:var(--r);padding:16px 18px}
.akq-script-title{display:flex;align-items:center;gap:8px;color:var(--lime);font-weight:600;margin-bottom:10px;font-size:.92rem}
.akq-script-title svg{width:15px;height:15px}
.akq-script-body{display:flex;flex-direction:column;gap:6px}
.akq-script-line{line-height:1.55;padding-left:12px;border-left:2px solid rgba(184,232,52,.25)}
.akq-script-note{color:var(--muted);font-style:italic;border-left-color:transparent}
@media (max-width:860px){
  .akq-layout{grid-template-columns:1fr}
  .akq-nav{position:static;flex-direction:row;flex-wrap:nowrap;overflow-x:auto;gap:6px;padding-bottom:6px;-webkit-overflow-scrolling:touch}
  .akq-nav-item{flex:0 0 auto;font-size:.82rem;padding:8px 12px}
  .akq-chapter-nr{font-size:1.7rem}
  .akq-chapter-title{font-size:1.25rem}
}

/* ===== v3.35: Akquise USP-Grid ===== */
.akq-usp-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
/* Verlauf plus dicke Lime-Kante an einer Karte ist genau die Optik, gegen
   die dieser Umbau angeht. Die Karte traegt Text, kein Signal. */
.akq-usp-card{background:var(--bg-2);border:1px solid var(--line-soft);
  border-radius:var(--r-sm);padding:12px 14px;display:flex;flex-direction:column;gap:3px}
.akq-usp-card strong{color:var(--ink)}
@media (max-width:860px){ .akq-usp-grid{grid-template-columns:1fr} }

/* ===== v3.37: E-Mail-Generator ===== */
.mailgen-layout{display:grid;grid-template-columns:1fr 1fr;gap:22px;align-items:start}
.mailgen-form{display:flex;flex-direction:column;gap:16px;min-width:0}
.mailgen-body{font-family:var(--body);line-height:1.5;resize:vertical;min-height:240px}
.mailgen-preview{position:sticky;top:90px;min-width:0}
.mail-preview-card{background:#0c100d}
.mail-preview-head{display:flex;flex-direction:column;align-items:flex-start;gap:3px;margin-bottom:10px}
.mail-preview-head .muted{overflow-wrap:anywhere;word-break:break-word;max-width:100%}
.mail-preview-subject{font-weight:700;font-size:1.05rem;color:var(--ink);padding-bottom:10px;border-bottom:1px solid var(--line-soft);margin-bottom:12px}
.mail-preview-body{white-space:pre-wrap;line-height:1.6;color:var(--ink-soft);font-size:.92rem}
@media (max-width:860px){
  .mailgen-layout{grid-template-columns:1fr}
  .mailgen-preview{position:static}
}

/* ============================================================
   v3.40 — Ansprechpartner, Adresssuche, Dropdown-Portal,
   Zurück-Button, iPhone-Feinschliff, Politur
   ============================================================ */

/* Dropdown: Menü als Portal (fixed) — kann nie mehr überlagert werden */
.dd-menu-portal{position:fixed;right:auto}
.dd-group{font-size:.66rem;text-transform:uppercase;letter-spacing:.9px;color:var(--muted-2);
  padding:9px 12px 4px;font-weight:700;position:sticky;top:0;background:#11160F}
.dd-group:first-child{padding-top:4px}

/* Zurück-Button in der Topbar */
/* Auf dem Handy verschwindet die Beschriftung (.hide-phone) und uebrig
   bleibt das Pfeil-Icon — ohne Mindestbreite war das Ziel 38px breit. */
.btn-back{padding-left:8px;padding-right:12px;min-width:44px}
.btn-back svg{transform:rotate(90deg)}

/* Ansprechpartner — Editor im Formular */
.contacts-edit{display:flex;flex-direction:column;gap:12px}
.contact-row{background:var(--bg-2);border:1px solid var(--line-soft);border-radius:var(--r-sm);padding:12px;
  display:flex;flex-direction:column;gap:10px}
.contact-row-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.contact-row-actions{display:flex;align-items:center;justify-content:space-between;gap:8px}
.icon-btn.danger{color:#E0726A;border:1px solid transparent;background:transparent;cursor:pointer;
  border-radius:var(--r-control);padding:6px 8px;display:inline-flex;align-items:center}
.icon-btn.danger:hover{background:rgba(224,114,106,.12)}
@media(max-width:560px){.contact-row-grid{grid-template-columns:1fr}}

/* Ansprechpartner — Anzeige im Kundendetail */
.contact-list{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.contact-card{display:flex;align-items:center;justify-content:space-between;gap:10px;
  background:var(--bg-2);border:1px solid var(--line-soft);border-radius:var(--r-sm);padding:10px 12px}
.contact-card-main{display:flex;flex-direction:column;gap:3px;min-width:0}
/* mailto:/tel: sind Aktionen, keine Fussnoten — 16px hoch war zu wenig. */
.contact-link{display:inline-flex;align-items:center;gap:8px;color:var(--muted);font-size:.86rem;min-height:44px}
.contact-link:hover{color:var(--lime)}
.contact-link svg{width:14px;height:14px}
.contact-star{color:var(--lime)}

/* Adress-Autovervollständigung */
.addr-ac{position:relative}
.addr-ac-input{position:relative;display:flex;align-items:center}
.addr-ac-input .inp{padding-left:38px;width:100%}
.addr-ac-ico{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--muted);display:inline-flex;pointer-events:none}
.addr-ac-ico svg{width:16px;height:16px}
.addr-ac-busy{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--lime)}
.addr-ac-menu{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:60;background:#11160F;
  border:1px solid rgba(184,232,52,.28);border-radius:var(--r);padding:6px;max-height:280px;overflow-y:auto;
  box-shadow:0 24px 60px -12px rgba(0,0,0,.85)}
.addr-ac-item{display:flex;flex-direction:column;gap:2px;width:100%;text-align:left;background:none;border:0;
  color:var(--ink);padding:9px 11px;border-radius:var(--r-control);cursor:pointer;font-family:inherit}
.addr-ac-item:hover{background:rgba(184,232,52,.14)}
.addr-ac-line1{font-size:.9rem}
.addr-ac-empty{padding:10px 11px}

/* Anhang-Hinweis im E-Mail-Generator */
.attach-hint{display:flex;align-items:center;gap:12px;margin-top:14px;padding:12px 14px;
  background:var(--bg-2);border:1px dashed var(--line);border-radius:var(--r-sm)}
.attach-hint > svg{flex:0 0 auto;color:var(--lime);width:20px;height:20px}
.attach-hint > div{flex:1 1 auto;min-width:0}
.attach-hint .btn{flex:0 0 auto}
@media(max-width:560px){.attach-hint{flex-wrap:wrap}}

/* iPhone 17 Pro / Notch & Home-Indicator: seitliche Safe-Areas */
@media(max-width:860px){
  /* Eine Regel fuer den Innenabstand des Inhalts. Vorher standen zwei in
     derselben Breakpoint-Stufe und ueberboten sich mit !important. */
  .content{padding-left:calc(18px + env(safe-area-inset-left));
    padding-right:calc(18px + env(safe-area-inset-right));
    padding-bottom:calc(82px + env(safe-area-inset-bottom))}
  .bottomnav{padding-left:calc(4px + env(safe-area-inset-left));
    padding-right:calc(4px + env(safe-area-inset-right))}
  .topbar{padding-left:calc(16px + env(safe-area-inset-left));
    padding-right:calc(16px + env(safe-area-inset-right))}
}
/* Modale füllen Safe-Area sauber */
.modal-body{padding-left:max(26px,env(safe-area-inset-left));padding-right:max(26px,env(safe-area-inset-right))}

/* ============================================================
   v3.55 — Dashboard: "Heute" statt Kennzahl-Wand
   Zeilen, keine Kacheln: eine Zeile traegt Zahl, Sache und Grund
   nebeneinander und ist als Ganzes anklickbar. Kacheln haetten
   dieselben Nullen nur schoener verpackt.
   ============================================================ */
.today-list{display:flex;flex-direction:column;gap:2px;margin:0 -10px}
.today-row,.alarm-row{display:flex;align-items:center;gap:14px;width:100%;text-align:left;
  background:transparent;border:0;color:var(--ink);font-family:inherit;font-size:var(--t-body);
  padding:12px 10px;min-height:56px;border-radius:var(--r-sm);cursor:pointer;
  transition:background .14s var(--ease)}
.today-row:hover,.alarm-row:hover{background:var(--bg-elev)}
.today-row:focus-visible,.alarm-row:focus-visible{outline:2px solid var(--lime);outline-offset:-2px}
/* Die Zahl ist das erste, was gelesen wird — Ziffernbreite fix, damit
   die Beschriftungen darunter auf einer Kante stehen. */
.today-n{flex:0 0 auto;min-width:34px;text-align:center;font-family:var(--serif);font-style:italic;
  font-size:var(--t-h2);line-height:1.1;color:var(--ink);font-variant-numeric:tabular-nums}
.today-n-lime{color:var(--lime)}
.today-n-bad{color:var(--danger)}
.today-main{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 auto}
.today-main strong{font-weight:600;letter-spacing:-.005em}
.today-main .small{overflow-wrap:anywhere}
.today-go{flex:0 0 auto;color:var(--muted-2);display:inline-flex}
.today-go svg{width:16px;height:16px}
.today-row:hover .today-go,.alarm-row:hover .today-go{color:var(--ink)}
/* Alarm: eine Karte, rote Kante, kein Blinken, kein Verlauf. */
.card-alarm{border-color:rgba(224,114,106,.4);padding:8px 14px}
.alarm-row{gap:12px}
.alarm-row .diag-dot{flex:0 0 11px}
@media(max-width:520px){
  .today-row,.alarm-row{gap:10px;padding:10px 8px}
  .today-n{min-width:28px;font-size:var(--t-h3)}
}

/* ============================================================
   v3.55 — Lead-Inbox (Master-Detail)
   Links Liste, rechts Arbeitsflaeche. Unter 1024px ersetzt das
   Detail die Liste: nebeneinander bliebe fuer beides zu wenig.
   ============================================================ */
.lead-toolbar{align-items:center;gap:12px}
.lead-toolbar .search{max-width:340px}
.seg-n{margin-left:6px;font-size:var(--t-micro);opacity:.7;font-variant-numeric:tabular-nums}
.seg-btn.on .seg-n{opacity:.75}

/* ── Sales Queue (V5-Rollout) ────────────────────────────────────────
   Solange kein Lead gewaehlt ist, nimmt die Liste die volle Breite.
   Vorher stand rechts dauerhaft ein halber Bildschirm mit dem Satz
   "Lead links auswaehlen." — bei vier Leads war die Haelfte der Flaeche
   eine Aufforderung, statt Arbeitsflaeche zu sein. */
.lead-split{display:grid;grid-template-columns:1fr;gap:var(--s-5);align-items:start}
.lead-split:has(.lead-detail-pane){grid-template-columns:minmax(300px,400px) 1fr}
.lead-list{display:flex;flex-direction:column;min-width:0}

/* Zeile statt Karte — dieselbe Sprache wie die Kundenliste. Vier Karten
   mit Rahmen, Flaeche und Radius waren vier Objekte; eine Queue ist
   eine Liste. Anker links (Wartezeit), Aussage mittig, Zustand rechts. */
.lead-row{display:grid;grid-template-columns:5.5em 1fr auto;gap:2px var(--s-4);
  align-items:baseline;width:100%;text-align:left;
  background:none;border:0;border-top:1px solid var(--line-soft);
  padding:var(--s-3) var(--s-2);min-height:44px;
  color:var(--ink);font-family:inherit;font-size:var(--t-body);cursor:pointer;
  transition:background .12s var(--ease)}
.lead-row:first-child{border-top:0}
.lead-row:hover{background:var(--bg-hover)}
.lead-row.active{background:var(--bg-elev)}
.lead-row:focus-visible{outline:2px solid var(--lime);outline-offset:-2px}

/* Der Anker traegt die Zahl, die im Morgenblick als kritisch gilt. */
.lead-anker{grid-column:1;grid-row:1/3;align-self:center;display:flex;
  flex-direction:column;gap:1px;text-align:right;min-width:0}
.lead-wartet{font:700 var(--t-h3)/1.1 var(--body);font-variant-numeric:tabular-nums;
  letter-spacing:-.02em}
.lead-wartet-alt{color:var(--danger)}
.lead-anker-label{font-size:var(--t-micro);color:var(--laut-3)}

.lead-row-name{grid-column:2;grid-row:1;font-weight:600;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lead-row-sub{grid-column:2;grid-row:2;font-size:var(--t-small);color:var(--laut-2);
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lead-row-rechts{grid-column:3;grid-row:1/3;align-self:center;display:flex;
  flex-direction:column;align-items:flex-end;gap:3px;flex:0 0 auto}
.lead-row-fuss{grid-column:2/-1;grid-row:3;display:flex;flex-wrap:wrap;
  gap:2px var(--s-3);margin-top:2px;font-size:var(--t-small);min-width:0}
.lead-next{color:var(--laut-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lead-quelle{color:var(--laut-3)}

.lead-fu{display:inline-flex;align-items:center;gap:5px;font-size:var(--t-micro);
  color:var(--muted);white-space:nowrap}
.lead-fu svg{width:13px;height:13px}
.lead-fu-bad{color:var(--danger)}
.lead-fu-now{color:var(--warn)}
/* Ein Lead ohne Wiedervorlage ist eine Notiz, kein Lead — die Luecke
   steht da, aber leise. Der Regelmotor meldet sie ohnehin. */
.lead-fu-fehlt{color:var(--unknown);font-style:italic}

@media(max-width:720px){
  .lead-row{grid-template-columns:1fr;padding:var(--s-3) 0}
  .lead-anker{grid-column:1;grid-row:1;flex-direction:row;align-items:baseline;
    gap:var(--s-2);text-align:left}
  /* grid-column MUSS mitwandern. Die Basisregeln setzen Spalte 2 und 3;
     in einem einspaltigen Raster erzeugt das eine implizite zweite
     Spalte, und Name und Anliegen ruecken nach rechts aus dem Bild. */
  .lead-row-name{grid-column:1;grid-row:2}
  .lead-row-sub{grid-column:1;grid-row:3;white-space:normal}
  .lead-row-rechts{grid-column:1;grid-row:4;flex-direction:row;align-items:center;
    justify-content:flex-start;gap:var(--s-3);margin-top:var(--s-2)}
  .lead-row-fuss{grid-column:1;grid-row:5}
}

.lead-detail-pane{min-width:0}
.lead-detail{display:flex;flex-direction:column;gap:16px}
.lead-detail-head h2{margin:0;font-family:var(--display);font-weight:400;font-size:var(--t-h1);letter-spacing:.4px}
.lead-detail .detail-badges{margin:10px 0 0}
/* Der Chevron zeigt ungedreht nach unten, zurueck zur Liste geht aber nach
   links — gleiche Drehung wie beim Zurueck in der Topbar. */
.lead-back{display:none;margin-bottom:10px}
.lead-back svg{transform:rotate(90deg)}
.lead-contact{display:flex;flex-wrap:wrap;gap:16px}
.lead-contact .contact-link{font-size:var(--t-body)}
.lead-detail .card{margin-bottom:0}
.lead-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  min-height:220px;border:1px dashed var(--line-soft);border-radius:var(--r);text-align:center;padding:24px}
.lead-empty svg{width:26px;height:26px;opacity:.45}
.lead-empty p{margin:0}
/* Schnellaktionen: eine Reihe, gleiche Gewichtung. Keine davon ist die
   Primaeraktion — welche richtig ist, entscheidet der Lead, nicht das UI. */
.lead-actions{gap:8px}
.lead-timeline{margin-top:14px}
.lead-timeline .list-line:first-child{padding-top:0}

@media(max-width:1024px){
  /* Eine Spalte: entweder Liste oder Detail, nie beides gequetscht. */
  .lead-split{grid-template-columns:1fr}
  .lead-view-detail .lead-list{display:none}
  .lead-view:not(.lead-view-detail) .lead-detail-pane{display:none}
  .lead-back{display:inline-flex}
  .lead-toolbar{flex-direction:column;align-items:stretch}
  .lead-toolbar .seg{overflow-x:auto;max-width:100%}
  .lead-toolbar .search{max-width:none}
}

/* ============================================================
   v3.55 — ein Muster fuer Aufgaben, Kunden, Projekte
   Vorher: vier Leerzustaende, drei Arten Anzahl anzuzeigen, ein
   Emoji als Warnzeichen und eine hart notierte Rot-Farbe.
   ============================================================ */
/* flex-wrap und min-width:0 sind hier kein Detail: der Kopf traegt
   Titel UND Zusatz (Zaehler, URL, Knopf). Ohne beides schiebt ein
   langer Zusatz die Karte aus dem Schirm — gemessen mit den echten
   Marken-Fonts auf 320px: die URL in der SEO-Karte ergab 27px
   Overflow. In der Systemschrift war der Text schmal genug, um es zu
   verdecken. */
.card-head{display:flex;align-items:center;gap:4px 9px;flex-wrap:wrap;min-width:0}
.card-head > *{min-width:0;overflow-wrap:anywhere}
.card-head .diag-dot{flex:0 0 auto}
.card-count{margin-left:auto;font-size:var(--t-small);font-weight:600;color:var(--muted);
  font-variant-numeric:tabular-nums}
.result-count{white-space:nowrap;margin-left:auto;align-self:center}
.toolbar{align-items:center}
.toolbar .search{max-width:340px}
.empty-hint{color:var(--muted);margin:6px 0 0}
.kanban-empty{padding:14px 0;text-align:center}
/* Zustand einer Aufgabe als Klasse statt als Inline-Stil mit fester Farbe */
.is-overdue{color:var(--danger)}
.is-done{text-decoration:line-through;opacity:.55}
.row-actions{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.row-actions .btn-mini svg{width:14px;height:14px}
/* Projektkarte ist jetzt ein Button — Reset, damit sie wie vorher aussieht */
.proj-card{display:block;width:100%;text-align:left;font-family:inherit;font-size:var(--t-body);color:var(--ink)}
@media(max-width:560px){
  .result-count{margin-left:0}
  .toolbar .search{max-width:none}
  /* .row ist eine waagerechte Gruppe ohne Umbruch — auf schmalen Geraeten
     schiebt sie sonst ueber den Rand hinaus (gemessen: 329px auf 320px). */
  .row{flex-wrap:wrap}
}

/* Zwischenueberschrift in den Einstellungen: neun gleich aussehende
   Karten hintereinander sind kein Aufbau, sondern eine Halde. */
.settings-group{font-size:var(--t-micro);font-weight:700;letter-spacing:.9px;text-transform:uppercase;
  color:var(--muted-2);margin:26px 0 10px;padding-bottom:8px;border-bottom:1px solid var(--line-soft)}
.settings-group:first-of-type{margin-top:4px}
/* Aktionsspalte in Tabellen: Buttons statt Textlinks mit Trennpunkten */
.row-actions-cell{text-align:right;white-space:nowrap}
.row-actions-cell .row-actions{justify-content:flex-end}
/* Spaltenkopf, der nur fuer Screenreader existiert */
.sr-only-head{font-size:0!important;color:transparent}

/* ============================================================
   v3.55 — Zustaende sichtbar machen
   Offline, abgelaufene Anmeldung und fehlgeschlagene Sicherung
   liefen bisher stumm. Ein Band, eine Rangfolge, kein Blinken.
   ============================================================ */
.statusbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:11px 14px;margin-bottom:18px;border-radius:var(--r-sm);
  border:1px solid var(--line);background:var(--bg-card);font-size:var(--t-body)}
.statusbar .diag-dot{flex:0 0 auto}
.statusbar-text{flex:1 1 240px;min-width:0;line-height:1.45}
.statusbar-offline{border-color:rgba(230,200,74,.35)}
.statusbar-bad{border-color:rgba(224,114,106,.4)}
/* Rueckmeldung an Ort und Stelle statt alert(): ein modales Fenster
   reisst den Blick weg und verdeckt genau das Ergebnis, um das es geht. */
.inline-msg{display:flex;align-items:center;gap:10px;padding:10px 12px;margin-bottom:14px;
  border:1px solid var(--line-soft);border-radius:var(--r-sm);background:var(--bg-card);font-size:var(--t-body)}
.inline-msg span:nth-child(2){flex:1 1 auto;min-width:0}
.inline-msg-ok{border-color:var(--line-lime)}
.inline-msg-bad{border-color:rgba(224,114,106,.4)}
.inline-msg .btn-mini svg{width:14px;height:14px}
/* Pflichtfeld-Fehler am Feld. Der Rand traegt die Aussage nicht allein —
   daneben steht der Satz, der sagt, warum das Feld gebraucht wird. */
.inp-error{border-color:var(--danger)}
.inp-error:focus{border-color:var(--danger);box-shadow:0 0 0 3px rgba(224,114,106,.18)}
.field-error{display:block;margin-top:6px;color:var(--danger);font-size:var(--t-small);line-height:1.4}

/* ============================================================
   v3.55 — Tippziele: 44x44 als Untergrenze, ueberall
   Die Button-Sektion setzte 44px nur fuer .btn. Alles Kleinere —
   Filterchips, Mini-Buttons, kompakte Felder, Dropdown-Ausloeser,
   Burger, Zurueck, Checkboxen — lag zwischen 13 und 42px. Gemessen
   auf 390px: 63 Ziele unter 44px.
   Ausgenommen bleiben ausschliesslich Inline-Textlinks im Fliesstext
   (.linklike als Verweis, nicht als Aktion) — die sind laut WCAG 2.5.8
   ausgenommen und stehen nie allein fuer eine Aktion.
   ============================================================ */
/* Politur: Tap-Highlight aus */
*{ -webkit-tap-highlight-color:transparent }
.btn:focus-visible,.nav-item:focus-visible,.bn-item:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
/* sanftes Erscheinen der Detail-Karten */
.contact-card,.contact-row{animation:fadeUp .25s ease both}

/* ============================================================
   v3.55 — Bedienbarkeit ohne Maus und ohne Bewegung
   ============================================================ */

/* Sprungmarke: sichtbar erst beim Tabben. Ohne sie muss man sich mit der
   Tastatur durch 17 Navigationspunkte arbeiten, bevor der Inhalt kommt. */
.skip-link{position:absolute;left:-9999px;top:0;z-index:300;
  background:var(--lime);color:#0A0D0B;font-weight:700;padding:12px 18px;
  border-radius:0 0 var(--r-sm) 0}
.skip-link:focus{left:0}

/* Zwei Suchfelder hatten ihren Fokusring per box-shadow:none abgeschaltet,
   weil der Rahmen am umschliessenden Kasten haengt. Der Ring wandert
   deshalb dorthin, statt ersatzlos zu verschwinden. */
.doc-search:focus-within,.gsearch-in:focus-within{border-color:var(--lime);box-shadow:0 0 0 3px var(--lime-glow)}

/* Fokus bleibt auch dort sichtbar, wo Flaechen statt Rahmen gestaltet sind. */
.today-row:focus-visible,.alarm-row:focus-visible,.lead-row:focus-visible,
.proj-card:focus-visible,.row-click:focus-visible,
.seg-btn:focus-visible,.icon-btn:focus-visible,.linklike:focus-visible,
.chip:focus-visible,.gs-item:focus-visible,.dd-item:focus-visible,
.skip-link:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
/* Tabellenzeile: der Umriss wird an der Zelle sichtbar, nicht an <tr> */
tr.row-click:focus-visible{outline:none}
tr.row-click:focus-visible td{background:var(--bg-elev);box-shadow:inset 0 2px 0 var(--lime),inset 0 -2px 0 var(--lime)}
/* Geschlossene Sidebar liegt auf dem Handy nur verschoben da und blieb
   damit im Tab-Weg: man tabbte in ein unsichtbares Menue. */
@media(max-width:860px){
  .sidebar{visibility:hidden;transition:transform .25s var(--ease),visibility .25s}
  .sidebar.open{visibility:visible}
}

/* Reduzierte Bewegung: vorher galt das nur fuer das Logo und den Dialog.
   Wer Bewegung abbestellt hat, meint alle Bewegung — auch die 18
   Uebergaenge und die gestaffelte Karteneinblendung. */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important;scroll-behavior:auto!important}
  .view-fade,.card,.contact-card,.contact-row,.dd-menu,.modal{animation:none!important}
  .sidebar{transition:none!important}
}

/* ═══════════════ Command Center ═══════════════
   Ruhig gebaut: die Dringlichkeit steckt in einem kleinen Wort und
   einer schmalen Kante, nicht in Flaeche oder Farbe. Wer neun
   Abteilungen bunt einfaerbt, hat neun Alarme und keine Rangfolge. */
.reco{padding:14px 0;border-top:1px solid var(--line-soft)}
.reco:first-of-type{border-top:0}
.reco-kopf{display:flex;align-items:center;gap:10px;margin-bottom:5px}
.reco-sev{font:700 .7rem/1 var(--body,sans-serif);letter-spacing:.06em;text-transform:uppercase}
.reco-dept{font-size:.75rem;color:var(--muted)}
.reco-titel{margin:0 0 4px;font-size:1rem;line-height:1.35}
.reco-grund{margin:0 0 6px;font-size:.88rem;color:var(--muted);line-height:1.5}
.reco-wirkung{margin:0 0 8px;font-size:.88rem;line-height:1.5;
  padding-left:12px;border-left:2px solid var(--line)}
.reco-fuss{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.card-count-warn{background:rgba(224,114,106,.16);color:#E0726A}

/* Abteilungen: gleiche Groesse, gleiche Ruhe. Nur die Kante oben
   verraet, wo etwas liegt. */
.dept-grid{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(168px,1fr))}
.dept-kachel{display:flex;flex-direction:column;gap:2px;text-align:left;
  min-height:104px;padding:13px 14px;border:1px solid var(--line);
  border-radius:var(--r);background:var(--bg-card);color:var(--ink);
  cursor:pointer;border-top-width:2px;border-top-color:var(--line)}
.dept-kachel:hover{border-color:var(--line-strong)}
.dept-kritisch{border-top-color:#E0726A}
.dept-wichtig{border-top-color:#E0A23A}
.dept-hinweis{border-top-color:#6AA9E0}
.dept-name{font-size:.8rem;color:var(--muted)}
.dept-zahl{font:700 1.4rem/1.2 var(--body,sans-serif)}
.dept-label{font-size:.72rem}
.dept-next{margin-top:6px;font-size:.78rem;line-height:1.35;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

.brief-zahlen{display:grid;gap:6px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));margin-bottom:14px}
.entsch-ergebnis{margin-top:10px;padding:9px 12px;border-radius:var(--r-control);
  background:rgba(127,176,46,.1);font-size:.9rem}
/* Gesperrte Lizenz: gedaempft statt alarmrot — sie ist nicht kaputt,
   sie ist nur nicht von hier aus zu aendern. */
.lic-locked td{opacity:.75}

@media (max-width:520px){
  .dept-grid{grid-template-columns:repeat(2,1fr)}
  .reco-fuss .btn{flex:1 1 calc(50% - 4px)}
}

/* ═══════════ Newsletter-Herkunft ═══════════
   Der Trichter erklaert, warum aus 378 Zustimmungen 223 Abonnenten
   werden. Kein Diagramm, das man lesen lernen muss: vier Zahlen, ein
   Pfeil dazwischen. */
.funnel{display:flex;flex-wrap:wrap;gap:6px;align-items:stretch;margin:14px 0}
.funnel-stufe{position:relative;flex:1 1 150px;min-width:0;padding:12px 14px;
  border:1px solid var(--line);border-radius:var(--r);background:var(--bg-2);
  display:flex;flex-direction:column;gap:1px}
.funnel-zahl{font:700 1.5rem/1.15 var(--body,sans-serif);letter-spacing:-.01em}
.funnel-label{font-size:.85rem}
.funnel-sub{font-size:.74rem;line-height:1.3}
.funnel-pfeil{position:absolute;right:-10px;top:50%;transform:translateY(-50%);
  color:var(--muted);font-size:.9rem;z-index:1}
.funnel-stufe:last-child{border-color:var(--lime-soft)}

/* Statusband: eine Zeile, vier Anteile, breitenproportional. Klick
   filtert die Liste — Zahl und Liste sind dieselbe Wahrheit. */
.hb{display:flex;gap:3px;margin:14px 0 10px;min-height:52px}
.hb-seg{flex:1 1 0;min-width:60px;border:1px solid var(--line);border-radius:var(--r-control);
  background:var(--bg-2);color:var(--ink);cursor:pointer;padding:8px 6px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px}
.hb-seg:hover{border-color:var(--line-strong)}
.hb-seg.on{border-color:var(--lime);background:rgba(184,232,52,.1)}
.hb-n{font:700 1.05rem/1 var(--body,sans-serif)}
.hb-l{font-size:.7rem;color:var(--muted);text-align:center;line-height:1.2;
  overflow:hidden;text-overflow:ellipsis;max-width:100%}
/* Die Kategorien tragen ihre Bedeutung im Wort, nicht in der Farbe —
   nur der abgemeldete Anteil wird gedaempft, weil er inaktiv ist. */
.hb-ab{opacity:.6}

@media (max-width:520px){
  .funnel-pfeil{display:none}
  .funnel-stufe{flex:1 1 calc(50% - 3px)}
  .hb{flex-wrap:wrap}
  .hb-seg{flex:1 1 calc(50% - 2px)}
}


/* ═══════════════════════════════════════════════════════════════════
   DreiHundertSechzig OS V2 — Produkte · IT · Automationen · Ereignisse
   ───────────────────────────────────────────────────────────────────
   Keine neuen Tokens. Radien, Typostufen, Flaechen und die eine
   Akzentfarbe kommen aus dem :root ganz oben — dieser Block fuegt nur
   Anordnung hinzu, keine zweite Designsprache.

   Eine Regel traegt alles hier: ein ungemessener Wert sieht anders aus
   als eine Null. Deshalb .os-ungemessen — kursiv, gedaempft, ohne
   Zahlgewicht. Wer die Ansicht ueberfliegt, soll die Luecke sehen,
   bevor er sie liest.
   ═══════════════════════════════════════════════════════════════════ */
/* `.9em` rechnete relativ zum Elternteil und stapelte sich: in einem
   `.small` (jetzt 12 px) ergab das 10,8 px — unter der Lesbarkeitsgrenze,
   ausgerechnet bei dem Hinweis, der sagt, dass etwas NICHT gemessen ist.
   Eine feste Stufe kann sich nicht aufaddieren. */
.os-ungemessen{font-style:italic;color:var(--muted-2);font-size:var(--t-micro)}
.os-dot{display:inline-block;width:7px;height:7px;border-radius:50%;flex:0 0 auto;
  vertical-align:middle;margin-right:2px}
.os-warn{color:var(--warn)}
.os-fehler{color:var(--danger);margin-top:2px}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em}

/* ── Kennzahl mit Verlauf ─────────────────────────────────────────
   Die Linie ist Beiwerk, die Zahl ist die Aussage. Deshalb steht die
   Zahl gross rechts und die Sparkline darunter in Textgroesse — nicht
   umgekehrt wie in jedem Dashboard-Template. */
.os-reihen{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}
.os-reihe{border:1px solid var(--line);border-radius:var(--r);background:var(--bg-2);padding:14px 16px;
  display:flex;flex-direction:column;gap:6px;min-width:0}
.os-reihe-leer{opacity:.75}
.os-reihe-kopf{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.os-reihe-label{font-size:var(--t-small);color:var(--muted);letter-spacing:.3px}
.os-reihe-wert{font:700 var(--t-h2)/1 var(--body);letter-spacing:-.01em}
.os-reihe-fuss{display:flex;flex-wrap:wrap;gap:4px;align-items:baseline;font-size:var(--t-micro)}
.os-spark{display:block;overflow:visible}
.os-trend{font-weight:600}
.os-trend-gut{color:var(--ok)}
.os-trend-schlecht{color:var(--warn)}
.os-luecke{color:var(--muted-2)}

/* ── Produkte ─────────────────────────────────────────────────────
   Verkaufsprodukte bleiben im Überblick bewusst kompakt. Erst ein
   geöffneter Eintrag wird zur vollständigen Bestandsansicht. */
.os-prod-gruppe{margin-top:26px}
.os-prod-gruppe:first-of-type{margin-top:18px}
.os-prod-gruppe-kopf{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin:0 0 10px}
.os-prod-gruppe-kopf h2{margin:0 0 4px;font-size:var(--t-h2)}
.os-prod-gruppe-kopf p{margin:0}
.os-prod-anzahl{display:grid;place-items:center;min-width:34px;height:34px;padding:0 10px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:var(--t-small)}
.os-prod-liste{display:flex;flex-direction:column;gap:14px}
.os-prod-liste-sale{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:14px}
.os-prod{border:1px solid var(--line);border-radius:var(--r);background:var(--bg-card);padding:18px 20px}
.os-prod-sale{min-width:0;padding:14px;border-top:2px solid rgba(184,232,52,.62);transform:translateZ(0);
  transition:transform 240ms cubic-bezier(.23,1,.32,1),border-color 240ms cubic-bezier(.23,1,.32,1),box-shadow 240ms cubic-bezier(.23,1,.32,1)}
.os-prod-sale:hover{transform:translateY(-3px);border-color:rgba(184,232,52,.34);box-shadow:0 18px 42px rgba(0,0,0,.2)}
.os-prod-open{grid-column:1/-1;transform:none}
.os-prod-open:hover{transform:none}
.os-prod-visual{position:relative;overflow:hidden;height:164px;margin:-14px -14px 14px;
  border-radius:calc(var(--r) - 1px) calc(var(--r) - 1px) 0 0;border-bottom:1px solid var(--line);background:#0b0d0b}
.os-prod-visual::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(circle at 78% 24%,rgba(184,232,52,.09),transparent 24%),linear-gradient(90deg,rgba(7,9,7,.14),transparent 52%),linear-gradient(0deg,rgba(7,9,7,.4),transparent 45%)}
.os-prod-visual img{display:block;width:100%;height:100%;object-fit:cover;object-position:center 48%;filter:saturate(.92) contrast(1.04);
  transform:scale(1.035) translate3d(-.35%,0,0);animation:osProdDrift 11s ease-in-out infinite alternate;will-change:transform}
.os-prod-sale:nth-child(even) .os-prod-visual img{animation-delay:-5.5s;animation-direction:alternate-reverse}
.os-prod-sale:hover .os-prod-visual img{animation-play-state:paused;transform:scale(1.065) translate3d(0,-.5%,0)}
@keyframes osProdDrift{from{transform:scale(1.035) translate3d(-.35%,0,0)}to{transform:scale(1.065) translate3d(.55%,-.45%,0)}}
.os-prod-visual-label{position:absolute;left:16px;bottom:14px;z-index:1;padding:6px 10px;border:1px solid rgba(184,232,52,.26);
  border-radius:999px;background:rgba(7,9,7,.78);backdrop-filter:blur(10px);color:var(--lime);font-size:var(--t-micro);font-weight:700;letter-spacing:.06em;text-transform:uppercase}
.os-prod-locked{border-color:rgba(224,114,106,.35)}
.os-prod-kopf{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:8px}
.os-prod-titel{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}
.os-prod-titel h4{margin:0;font-size:var(--t-h3);font-weight:600}
.os-prod-hinweis{display:flex;gap:8px;align-items:flex-start;margin:10px 0 0;padding:8px 12px;
  border:1px solid var(--line);border-left:2px solid var(--warn);border-radius:var(--r-control);
  background:var(--bg-2);font-size:var(--t-small);color:var(--ink)}
.os-prod-hinweis svg{flex:0 0 auto;color:var(--warn);width:15px;height:15px;margin-top:1px}
.os-prod-story{margin:10px 0 0;max-width:900px}
.os-prod-story p{margin:0 0 5px;line-height:1.5}
.os-prod-sale:not(.os-prod-open) .os-prod-story > p:first-child{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.os-prod-sale:not(.os-prod-open) .os-prod-story > p:last-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.os-prod-kompakt{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line-soft)}
.os-prod-preis{display:flex;flex-direction:column;gap:2px;min-width:0}
.os-prod-preis strong{font-size:var(--t-body);white-space:nowrap}
.os-prod-toggle{flex:0 0 auto}
.os-prod-toggle-icon{display:inline-flex;transition:transform 220ms cubic-bezier(.23,1,.32,1);transform:rotate(-90deg)}
.os-prod-toggle-icon-up{transform:rotate(90deg)}
.os-prod-details{animation:osProdDetailsIn 260ms cubic-bezier(.23,1,.32,1) both}
@keyframes osProdDetailsIn{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}
.os-prod-pakete{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;margin:14px 0 4px}
.os-prod-paket{display:flex;flex-direction:column;gap:3px;padding:12px 13px;border:1px solid var(--line);border-radius:var(--r-control);background:var(--bg-2)}
.os-prod-paket strong{font-size:var(--t-body)}
.os-prod-paket span{font-weight:600;color:var(--ink)}
.os-prod-paket small{font-size:var(--t-small)}
.os-prod-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:2px 22px;margin:14px 0 0}
.os-prod-grid > div{display:flex;justify-content:space-between;gap:12px;
  padding:5px 0;border-bottom:1px solid var(--line-soft);min-width:0}
.os-k{color:var(--muted);font-size:var(--t-small);flex:0 0 auto}
.os-v{font-size:var(--t-small);text-align:right;min-width:0;overflow-wrap:anywhere}
.os-prod-fuss{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:14px}
.os-prod-vertrag{margin-top:14px;padding:12px 14px;border:1px solid rgba(184,232,52,.25);border-radius:12px;background:rgba(184,232,52,.05)}
.os-prod-vertrag>div{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px}.os-prod-vertrag p{margin:7px 0 0}
.os-prod-sperrsatz{flex:1 1 260px;line-height:1.45}

/* ── Reiter innerhalb einer Ansicht ───────────────────────────────
   Bewusst keine zweite Navigationsebene in der Sidebar: IT ist EIN
   Ort mit fuenf Sichten, nicht fuenf Menuepunkte. */
.os-tabs{display:flex;flex-wrap:wrap;gap:4px;margin:18px 0 16px;
  border-bottom:1px solid var(--line);padding-bottom:0}
.os-tab{background:transparent;border:0;border-bottom:2px solid transparent;color:var(--muted);
  padding:9px 14px;min-height:44px;font-size:var(--t-body);font-weight:500;
  display:inline-flex;align-items:center;gap:7px;transition:color .16s var(--ease)}
.os-tab:hover{color:var(--ink)}
.os-tab-on{color:var(--ink);border-bottom-color:var(--lime)}

.os-filter{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.os-filter-breit{margin:0 0 18px}
.os-filter-trenner{width:1px;height:20px;background:var(--line);margin:0 4px}

.os-setup .os-setup-zeile{padding:10px 0;border-bottom:1px solid var(--line-soft)}
.os-setup .os-setup-zeile:last-of-type{border-bottom:0}
.os-setup p{margin:2px 0 0;line-height:1.5}

.os-neu{margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--line-soft)}

/* ── Bugs und Schulden ────────────────────────────────────────────
   Die Schwere steht links als Kante, nicht als Farbflaeche. Eine rote
   Karte schreit auch dann, wenn man gerade etwas anderes sucht. */
.os-bug{border:1px solid var(--line);border-left:2px solid var(--muted-2);
  border-radius:var(--r-control);background:var(--bg-2);padding:12px 14px;margin-bottom:10px}
.os-bug-kritisch{border-left-color:var(--danger)}
.os-bug-wichtig{border-left-color:var(--warn)}
.os-bug-hinweis{border-left-color:var(--info)}
.os-bug p{margin:6px 0 0;line-height:1.5}
.os-beleg{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--t-small);
  color:var(--muted);overflow-wrap:anywhere}
.os-bug-fuss{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}

/* ── Automationen ─────────────────────────────────────────────────
   Aufklappbar statt Tabelle: die acht Detailfelder je Automation
   ergaeben eine Tabelle, die man seitlich schieben muss. */
.os-auto{border:1px solid var(--line);border-radius:var(--r-control);background:var(--bg-2);
  padding:12px 14px;margin-bottom:8px}
/* .os-auto-wichtig ist mit dem V5-Umbau zur toten Regel geworden:
   jede .os-auto liegt jetzt in einer .auto-gruppe, und die setzt
   border:0 mit hoeherer Spezifitaet. Gemessen 0px Kante an allen
   Eintraegen. Die Schwere steht ohnehin im farbigen Punkt vor dem
   Namen UND in der Gruppenzuordnung ("Braucht Aufmerksamkeit") —
   eine dritte Markierung derselben Sache, die nicht einmal mehr
   sichtbar war. */
.os-auto-kopf{display:flex;align-items:center;gap:10px;width:100%;background:transparent;border:0;
  color:var(--ink);text-align:left;padding:0;min-height:32px;font-size:var(--t-body)}
.os-auto-name{font-weight:600;flex:1 1 auto;min-width:0}
.os-auto-status{flex:0 0 auto}
.os-auto-chevron{flex:0 0 auto;color:var(--muted);display:inline-flex}
.os-auto-zweck{margin:6px 0 0;font-size:var(--t-small);line-height:1.5}
.os-auto p{margin:4px 0 0}
.os-auto-detail{margin-top:12px;padding-top:12px;border-top:1px solid var(--line-soft)}
.os-auto-verbot{display:flex;gap:8px;align-items:flex-start;margin-top:12px;padding:9px 12px;
  border:1px solid rgba(224,114,106,.3);border-radius:var(--r-control);
  background:var(--danger-bg);font-size:var(--t-small);line-height:1.5}
.os-auto-verbot svg{flex:0 0 auto;color:var(--danger);width:15px;height:15px;margin-top:1px}
.os-verboten{list-style:none;padding:0;margin:12px 0 0;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:6px 20px}
.os-verboten li{display:flex;gap:8px;align-items:center;font-size:var(--t-small);color:var(--muted)}
.os-verboten svg{flex:0 0 auto;width:14px;height:14px;color:var(--danger)}

/* ── Zeitleiste ───────────────────────────────────────────────────
   Ein Faden links, Zeit ganz aussen. Kein Karten-Stapel: 80 Karten
   untereinander sind 80 Raender, die alle gleich laut sind. */
.os-tl-tag{margin-bottom:22px}
.os-tl-datum{font-size:var(--t-micro);font-weight:700;letter-spacing:.9px;text-transform:uppercase;
  color:var(--muted-2);padding:0 0 8px;position:sticky;top:0;background:var(--bg);z-index:1}
.os-tl-item{display:flex;gap:12px;align-items:flex-start;padding:7px 0;
  border-left:1px solid var(--line);margin-left:44px;padding-left:16px;position:relative}
.os-tl-zeit{position:absolute;left:-60px;top:9px;width:44px;text-align:right;
  font-variant-numeric:tabular-nums}
.os-tl-punkt{position:absolute;left:-4px;top:12px;display:inline-flex}
.os-tl-text{min-width:0;flex:1 1 auto}
.os-tl-titel{font-size:var(--t-body);line-height:1.45;overflow-wrap:anywhere}
.os-tl-item .muted{line-height:1.45;overflow-wrap:anywhere}
.os-tl-kritisch .os-tl-titel{color:var(--danger)}

/* ── Wochenrueckblick ─────────────────────────────────────────────
   Zahl vor Wort. Wer den Rueckblick ueberfliegt, liest Zahlen. */
.os-woche-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:2px 24px}
.os-woche-zeile{display:flex;align-items:baseline;gap:10px;padding:7px 0;
  border-bottom:1px solid var(--line-soft)}
.os-woche-zahl{font:700 var(--t-h3)/1 var(--body);min-width:52px;font-variant-numeric:tabular-nums}
.os-woche-label{color:var(--muted);font-size:var(--t-small)}

.os-kamp .stat-row{margin:14px 0 10px}

/* ═══════════════════ COMMAND PALETTE ═══════════════════════════════
   Oben statt mittig: das Auge sucht Eingaben oben, und auf dem Telefon
   waere ein mittiger Dialog von der Tastatur halb verdeckt. */
.pal-backdrop{position:fixed;inset:0;background:rgba(4,7,5,.72);z-index:6000;
  display:flex;align-items:flex-start;justify-content:center;padding:10vh 16px 16px;
  animation:palIn .16s var(--ease)}
.pal{width:100%;max-width:600px;background:var(--bg-elev);border:1px solid var(--line-strong);
  border-radius:var(--r-lg);box-shadow:var(--shadow-panel);overflow:hidden;
  display:flex;flex-direction:column;max-height:min(70vh,560px)}
@keyframes palIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.pal-backdrop{animation:none}}
.pal-kopf{display:flex;align-items:center;gap:10px;padding:12px 14px;
  border-bottom:1px solid var(--line);flex:0 0 auto}
.pal-such-icon{color:var(--muted);display:inline-flex;flex:0 0 auto}
.pal-input{flex:1 1 auto;min-width:0;background:transparent;border:0;outline:none;
  color:var(--ink);font-family:var(--body);font-size:var(--t-lead);padding:6px 0}
.pal-input::placeholder{color:var(--muted-2)}
.pal-esc{background:transparent;border:1px solid var(--line);border-radius:var(--r-control);
  color:var(--muted);font-size:var(--t-micro);padding:4px 8px;min-height:28px;flex:0 0 auto}
.pal-liste{overflow-y:auto;overscroll-behavior:contain;padding:6px;flex:1 1 auto}
/* v5: die Gruppe bekommt eine Haarlinie statt nur Abstand. Bei zehn
   Treffern aus vier Bereichen sah die Liste vorher wie EIN langer Block
   aus — man las alles, statt zum richtigen Bereich zu springen. */
.pal-gruppe{font-size:var(--t-micro);font-weight:700;letter-spacing:.9px;text-transform:uppercase;
  color:var(--muted-2);padding:var(--s-3) var(--s-3) var(--s-1);margin-top:var(--s-1);
  border-top:1px solid var(--line-soft)}
.pal-liste > .pal-gruppe:first-child{border-top:0;margin-top:0;padding-top:var(--s-2)}
.pal-item{display:flex;align-items:center;gap:11px;width:100%;background:transparent;border:0;
  border-radius:var(--r-sm);color:var(--ink);text-align:left;padding:9px 10px;min-height:44px}
/* Die gewaehlte Zeile traegt eine lime Kante, nicht nur eine hellere
   Flaeche: auf dem Telefon war der Flaechenunterschied bei Sonnenlicht
   praktisch unsichtbar, und die Auswahl ist das einzige, was hier
   wirklich zaehlt. */
.pal-item-on{background:var(--bg-hover);box-shadow:inset 2px 0 0 var(--lime)}
.pal-item:hover{background:var(--bg-card)}
.pal-icon{color:var(--muted);display:inline-flex;flex:0 0 auto}
.pal-item-on .pal-icon{color:var(--lime)}
.pal-text{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1 1 auto}
.pal-titel{font-size:var(--t-body);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pal-unter{font-size:var(--t-micro);color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pal-enter{color:var(--lime);font-size:var(--t-small);flex:0 0 auto}
/* Die getroffene Stelle im Titel. `<mark>` bringt eine gelbe Flaeche mit
   — die wird hier zurueckgesetzt: in einer dunklen Oberflaeche ist
   Gewicht das ruhigere Signal als ein Leuchtmarker. */
.pal-treffer{background:none;color:var(--ink);font-weight:700}
.pal-item-on .pal-treffer{color:var(--lime)}
.pal-leer{padding:20px 12px;text-align:center}
.pal-fuss{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:9px 14px;border-top:1px solid var(--line);font-size:var(--t-micro);flex:0 0 auto}
/* 10px war der einzige Wert unter der Skala. Ein Tastenkuerzel ist
   kein Sonderfall, der eine eigene Groesse rechtfertigt. */
.pal-kbd{border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-size:var(--t-micro);
  color:var(--muted-2);font-family:var(--body);margin-left:2px}
.btn-pal{gap:6px}

@media(max-width:860px){
  .os-prod-liste-sale{grid-template-columns:1fr}
  .os-prod-open{grid-column:auto}
  .os-prod-grid{grid-template-columns:1fr;gap:0}
  .os-prod{padding:14px 15px}
  .os-prod-sale{padding:13px}
  .os-prod-visual{height:156px;margin:-13px -13px 13px}
  .os-tl-item{margin-left:0;padding-left:14px}
  .os-tl-zeit{position:static;width:auto;text-align:left;order:-1;margin-right:2px}
  .os-tl-punkt{left:-4px;top:10px}
  .os-tabs{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}
  .os-tabs::-webkit-scrollbar{display:none}
  .os-tab{flex:0 0 auto}
  .pal-backdrop{padding:6vh 10px 10px}
  .pal{max-height:min(78vh,600px)}
}
@media(max-width:520px){
  .os-reihen{grid-template-columns:1fr}
  .os-woche-grid{grid-template-columns:1fr}
  .os-verboten{grid-template-columns:1fr}
  .os-prod-fuss .btn{flex:1 1 100%}
  .os-prod-kompakt{align-items:stretch;flex-direction:column}
  .os-prod-toggle{width:100%;justify-content:center}
}
@media(prefers-reduced-motion:reduce){
  .os-prod-sale,.os-prod-visual img,.os-prod-toggle-icon,.os-prod-details{animation:none!important;transition:none!important;transform:none!important}
}
/* Kuenftige Fristen stehen in derselben Leiste wie Vergangenes — sonst
   braeuchte man zwei Orte fuer "was ist" und "was kommt". Damit sie
   sich nicht wie Geschehenes lesen, tragen sie ein Wort. */
.os-tl-kuenftig{margin-left:8px;font-weight:500;letter-spacing:0;text-transform:none;
  color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:1px 6px}

/* ── Tap-Ziele auf dem Telefon ────────────────────────────────────
   Die bestehende Regel weiter oben hebt .btn und .nav-item auf 44px,
   .chip aber nicht — gemessen 31px auf 320x568. Ein Chip ist kein
   Dekor: er filtert Listen und schaltet Ansichten um, also ist er ein
   Bedienelement wie jeder Knopf. Dasselbe gilt fuer die Kopfzeile
   einer Automation, die sich aufklappen laesst. */
@media(max-width:860px){
  .chip{min-height:44px;display:inline-flex;align-items:center}
  .os-auto-kopf{min-height:44px}
  .os-tab{min-height:44px}
  .icon-btn{min-height:44px;min-width:44px}
  /* Der Esc-Knopf der Palette ist auf dem Telefon der einzige sichtbare
     Weg heraus — dort gibt es keine Esc-Taste. */
  .pal-esc{min-height:44px;min-width:44px}
}

/* "Wochenrückblick" ist ein Wort und bei 27px 298 Pixel breit — auf
   320px passt es nicht und schob die ganze Seite um 2px zur Seite.
   Zwei Zeilen statt eines Querscrollbalkens. */
@media(max-width:520px){
  .view-head h1{font-size:var(--t-h2);overflow-wrap:break-word;hyphens:auto}
}

/* ═══════════════ COMMAND STRIP · RADAR · SYSTEME ═══════════════════
   Die Startseite antwortet von oben nach unten: was ist zu tun, was
   hat es bewegt, wie stehen die Bereiche, laeuft die Technik.
   Der Strip ist eine Zeile — nicht drei Kacheln, die dasselbe sagen. */
.cstrip{display:flex;flex-wrap:wrap;align-items:center;gap:10px 20px;
  padding:12px 16px;margin:0 0 20px;border:1px solid var(--line);
  border-radius:var(--r);background:var(--bg-2)}
.cstrip-marke{display:flex;align-items:baseline;gap:12px;flex:1 1 auto;min-width:0}
.cstrip-marke .wortmarke{font-size:1.05rem}
.cstrip-datum{white-space:nowrap}
.cstrip-zustand{display:flex;align-items:center;gap:6px;font-size:var(--t-small);
  white-space:nowrap;flex:0 0 auto}
.cstrip-sync{display:flex;flex-wrap:wrap;gap:4px 16px;flex:1 1 240px;min-width:0}
.cstrip-schnell{display:flex;gap:6px;flex:0 0 auto}

/* Radar: eine Zeile je Bereich. Kacheln haben neun gleich grosse
   Flaechen erzeugt, obwohl nur zwei davon etwas zu sagen hatten. */
.radar{display:flex;flex-direction:column}
.radar-zeile{display:grid;grid-template-columns:14px 150px 130px 1fr 72px;
  align-items:center;gap:12px;width:100%;background:transparent;border:0;
  border-bottom:1px solid var(--line-soft);color:var(--ink);text-align:left;
  padding:11px 8px;min-height:44px;transition:background .16s var(--ease)}
.radar-zeile:hover{background:var(--bg-hover)}
.radar-zeile:last-child{border-bottom:0}
.radar-punkt{display:inline-flex}
.radar-name{font-size:var(--t-body);font-weight:500;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.radar-zahl{font-size:var(--t-body);font-variant-numeric:tabular-nums;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.radar-signal{font-size:var(--t-small);color:var(--muted);min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.radar-kritisch .radar-signal{color:var(--danger)}
.radar-wichtig .radar-signal{color:var(--warn)}
.radar-trend{font-size:var(--t-small);text-align:right;color:var(--muted);
  font-variant-numeric:tabular-nums}

.sysliste{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:0 24px}
.sys-zeile{display:flex;align-items:center;gap:9px;padding:8px 0;
  border-bottom:1px solid var(--line-soft);min-width:0}
.sys-name{font-size:var(--t-small);flex:0 0 auto;min-width:130px}
/* Vorher: white-space:nowrap + ellipsis in einer Drittelspalte. Aus
   "nicht gemessen — Systembruecke ist nicht angebunden" wurde
   "nicht gemessen — Syste…", neunmal untereinander. Die Ursache ist
   nicht fehlendes overflow, sondern der erzwungene Einzeiler: eine
   Systemzeile darf zwei Zeilen hoch sein. Mit overflow:hidden haette
   man die Information nur unsichtbar gemacht statt lesbar. */
.sys-detail{flex:1 1 auto;min-width:0;text-align:right;
  overflow-wrap:anywhere;line-height:1.45}

.reco-zeit{margin-left:auto;white-space:nowrap}

@media(max-width:860px){
  .cstrip{gap:8px 14px;padding:11px 13px}
  /* "Mittwoch, 05. August" ist 123px breit und stand mit nowrap neben
     der Wortmarke — zusammen 334px auf einem 320px-Schirm. */
  .cstrip-marke{flex:1 1 100%;flex-wrap:wrap;gap:2px 12px}
  .cstrip-datum{white-space:normal}
  .cstrip-sync{flex:1 1 100%}
  /* Zahl und Trend fallen weg: auf 320px bleibt Platz fuer den Namen
     und das Signal — und das Signal ist das, was etwas verlangt. */
  .radar-zeile{grid-template-columns:14px 1fr auto;gap:9px;padding:9px 4px}
  .radar-zahl{text-align:right;font-size:var(--t-small);color:var(--muted)}
  .radar-signal{grid-column:2 / -1;white-space:normal;line-height:1.4}
  .radar-trend{display:none}
  .sysliste{grid-template-columns:1fr}
  .sys-name{min-width:0;flex:1 1 auto}
  .sys-detail{flex:0 1 auto;max-width:55%}
}

/* Befunde statt Punktzahl: ein Score von 82/100 sagt nicht, was zu tun
   ist — und die Zahl aendert sich, wenn jemand die Gewichtung anfasst,
   ohne dass sich die Website geaendert haette. */
.os-befunde{margin-top:16px;padding-top:14px;border-top:1px solid var(--line-soft)}
.os-befunde h4{margin:0 0 8px;font-size:var(--t-small);color:var(--warn);font-weight:600}
.os-befunde ul{margin:0;padding-left:18px}
.os-befunde li{font-size:var(--t-small);line-height:1.55;margin-bottom:3px}

/* ═══════════════════ MORGENBLICK · HEBEL · SPUR ════════════════════
   Keine neuen Tokens. Was hier dazukommt, ist Anordnung.

   Die eine Regel dieses Blocks: die Antwort ist groesser als die
   Frage. Ein Bildschirm, auf dem die Ueberschriften lauter sind als
   die Aussagen, liest sich wie ein Formular. */

.mb-liste{display:flex;flex-direction:column}
.mb-zeile{display:grid;grid-template-columns:1fr auto;grid-template-areas:"frage pfeil" "antwort pfeil";
  gap:2px 14px;width:100%;background:transparent;border:0;border-bottom:1px solid var(--line-soft);
  color:var(--ink);text-align:left;padding:14px 8px;min-height:44px;
  transition:background .16s var(--ease)}
.mb-zeile:hover{background:var(--bg-hover)}
.mb-zeile:last-child{border-bottom:0}
.mb-frage{grid-area:frage;font-size:var(--t-small);color:var(--muted)}
.mb-antwort{grid-area:antwort;display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;min-width:0}
.mb-wert{font:700 var(--t-h2)/1.1 var(--body);letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.mb-satz{font-size:var(--t-body);line-height:1.45;min-width:0;overflow-wrap:anywhere}
.mb-zeile-leer .mb-satz{color:var(--muted)}
.mb-pfeil{grid-area:pfeil;align-self:center;color:var(--muted-2);display:inline-flex}
.mb-zeile:hover .mb-pfeil{color:var(--lime)}
.mb-fuss{margin:14px 0 0;padding-top:12px;border-top:1px solid var(--line-soft);line-height:1.5}

/* Hebel: der Betrag steht links und traegt die Zeile. Wer die Liste
   ueberfliegt, liest Betraege — genau das ist der Zweck. */
.hebel-liste{display:flex;flex-direction:column}
.hebel-zeile{display:grid;grid-template-columns:118px 1fr auto;gap:16px;align-items:center;
  padding:13px 0;border-bottom:1px solid var(--line-soft);border-left:2px solid transparent;
  padding-left:12px}
.hebel-zeile:last-child{border-bottom:0}
.hebel-kritisch{border-left-color:var(--danger)}
.hebel-wichtig{border-left-color:var(--warn)}
.hebel-hinweis{border-left-color:var(--info)}
.hebel-wert{display:flex;flex-direction:column;gap:1px;min-width:0}
.hebel-euro{font:700 var(--t-h3)/1.1 var(--body);font-variant-numeric:tabular-nums}
.hebel-rate{font-variant-numeric:tabular-nums}
.hebel-text{min-width:0}
.hebel-kopf{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;margin-bottom:2px}
.hebel-sev{font-size:var(--t-micro);font-weight:700;letter-spacing:.7px;text-transform:uppercase}
.hebel-titel{font-size:var(--t-body);font-weight:500;line-height:1.4;overflow-wrap:anywhere}

/* Bereiche: eine Zeile je Bereich, aufklappbar. Kein Raster — neun
   gleich grosse Kacheln geben neun gleich wichtigen Dingen Platz,
   und meistens sind nur zwei wichtig. */
.ber-liste{display:flex;flex-direction:column}
.ber-block{border-bottom:1px solid var(--line-soft)}
.ber-block:last-child{border-bottom:0}
.ber-zeile{display:grid;grid-template-columns:14px 150px 96px 1fr 64px 18px;gap:12px;align-items:center;
  width:100%;background:transparent;border:0;color:var(--ink);text-align:left;padding:12px 6px;
  min-height:44px;transition:background .16s var(--ease)}
.ber-zeile:hover{background:var(--bg-hover)}
.ber-name{font-size:var(--t-body);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ber-zustand{font-size:var(--t-small)}
.ber-grund{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.ber-trend{text-align:right;font-variant-numeric:tabular-nums}
.ber-chevron{color:var(--muted);display:inline-flex}
.ber-offen .ber-chevron{transform:rotate(180deg)}
.ber-detail{padding:4px 6px 18px 40px}
.ber-detail p{margin:0 0 8px;line-height:1.55}
.ber-risiko{padding-left:10px;border-left:2px solid var(--danger);font-size:var(--t-small)}
.ber-chance{padding-left:10px;border-left:2px solid var(--ok);font-size:var(--t-small)}
.ber-handlung{margin-top:12px;padding:12px 14px;border:1px solid var(--line);
  border-radius:var(--r-control);background:var(--bg-2)}
.ber-handlung-titel{font-size:var(--t-body);font-weight:600;margin-bottom:4px}

/* Spur: eine senkrechte Kette. Die Linie ist das Argument — sie zeigt,
   dass die Stationen zusammenhaengen und nicht nur untereinander
   stehen. */
.spur-wahl{margin-bottom:20px}
.spur-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;max-height:132px;overflow-y:auto}
.spur-kopf{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;
  padding-bottom:16px;border-bottom:1px solid var(--line);margin-bottom:22px}
.spur-kopf h2{margin:0;font-size:var(--t-h2)}
.spur-zahlen{display:flex;gap:26px}
.spur-zahlen > div{display:flex;flex-direction:column}
.spur-zahl{font:700 var(--t-h3)/1.1 var(--body);font-variant-numeric:tabular-nums}
.spur-luecke{display:flex;gap:9px;align-items:flex-start;padding:11px 14px;margin:0 0 20px;
  border:1px solid var(--line);border-left:2px solid var(--warn);border-radius:var(--r-control);
  background:var(--bg-2);font-size:var(--t-small);line-height:1.5}
.spur-luecke svg{flex:0 0 auto;color:var(--warn);width:15px;height:15px;margin-top:1px}
.spur-kette{display:flex;flex-direction:column}
.spur-station{display:grid;grid-template-columns:20px 1fr;gap:14px}
.spur-marke{display:flex;flex-direction:column;align-items:center;padding-top:6px}
.spur-punkt{width:9px;height:9px;border-radius:50%;background:var(--muted-2);flex:0 0 auto}
.spur-offen .spur-punkt{background:var(--warn)}
.spur-linie{flex:1 1 auto;width:1px;background:var(--line);margin:4px 0 0}
.spur-inhalt{padding-bottom:20px;min-width:0}
.spur-meta{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}
.spur-beleg{color:var(--muted-2);font-size:var(--t-micro)}
.spur-titel{font-size:var(--t-body);font-weight:500;line-height:1.4;margin:1px 0 2px;overflow-wrap:anywhere}

@media(max-width:860px){
  .mb-zeile{grid-template-columns:1fr;grid-template-areas:"frage" "antwort";padding:13px 4px}
  .mb-pfeil{display:none}
  .mb-antwort{flex-direction:column;gap:3px;align-items:flex-start}
  .hebel-zeile{grid-template-columns:1fr;gap:8px;padding-left:10px}
  .hebel-wert{flex-direction:row;align-items:baseline;gap:10px}
  .hebel-zeile .btn{justify-self:stretch}
  /* Zustandswort und Trend fallen weg: auf 320px bleibt Platz fuer den
     Namen und den Grund — und der Grund ist das, was etwas sagt. */
  .ber-zeile{grid-template-columns:14px 1fr 18px;gap:10px}
  .ber-zustand{display:none}
  .ber-trend{display:none}
  .ber-grund{grid-column:2 / -1;white-space:normal}
  .ber-detail{padding-left:10px}
  .spur-kopf{flex-direction:column;align-items:flex-start;gap:12px}
  .spur-zahlen{gap:18px;flex-wrap:wrap}
}

/* ═══════════════════ KONTEXT IM ARBEITSABLAUF ══════════════════════
   Der Block sitzt IN einer Detailansicht, nicht daneben. Er darf sie
   deshalb nicht dominieren: eine Kante links, kein eigener Rahmen,
   keine Karte in der Karte. */
.kx{border-left:2px solid var(--line-strong);padding-left:14px;margin:0 0 18px}
.kx-kopf{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 12px;width:100%;
  background:transparent;border:0;color:var(--ink);text-align:left;padding:6px 0;min-height:44px}
.kx-kopf h4{margin:0;font-size:var(--t-body);font-weight:600}
.kx-herkunft{font-size:var(--t-small);color:var(--muted);min-width:0;overflow-wrap:anywhere}
.kx-badge{font-size:var(--t-micro);font-weight:600;color:var(--warn);
  border:1px solid rgba(230,200,74,.35);border-radius:var(--r-control);padding:1px 7px}
.kx-chevron{margin-left:auto;color:var(--muted);display:inline-flex}
.kx-koerper{padding:6px 0 4px}
.kx-leer{margin:4px 0 0;font-size:var(--t-small);color:var(--muted);line-height:1.5}

.kx-zahlen{display:flex;flex-wrap:wrap;gap:6px 24px;margin:0 0 16px}
.kx-zahl{display:flex;flex-direction:column}
.kx-zahl-wert{font:700 var(--t-h3)/1.1 var(--body);font-variant-numeric:tabular-nums}
.kx-zahl-label{font-size:var(--t-micro);color:var(--muted)}

/* Die Lesespur. Primaere Stationen tragen die Geschichte, sekundaere
   belegen sie — deshalb unterschiedliche Groesse, nicht nur Farbe. */
.kx-spur{display:flex;flex-direction:column;margin:0 0 16px}
.kx-station{display:grid;grid-template-columns:16px 1fr;gap:12px}
.kx-marke{display:flex;flex-direction:column;align-items:center;padding-top:5px}
.kx-punkt{width:7px;height:7px;border-radius:50%;background:var(--muted-2);flex:0 0 auto}
.kx-primaer .kx-punkt{width:9px;height:9px;background:var(--lime-soft)}
.kx-offen .kx-punkt{background:var(--warn)}
.kx-linie{flex:1 1 auto;width:1px;background:var(--line);margin:4px 0 0}
.kx-inhalt{padding-bottom:14px;min-width:0}
.kx-meta{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline;
  font-size:var(--t-micro);color:var(--muted)}
.kx-beleg{color:var(--muted-2)}
.kx-titel{font-size:var(--t-small);line-height:1.4;margin:1px 0;overflow-wrap:anywhere}
.kx-primaer .kx-titel{font-size:var(--t-body);font-weight:500}
.kx-detail{font-size:var(--t-micro);color:var(--muted);line-height:1.4}
/* "öffnen" ist Navigation, keine Handlung — Lime gehoert der Handlung.
   Bei vier Stationen standen vier lime Links untereinander und zogen
   den Blick von den Titeln weg, die die Geschichte erzaehlen. */
.kx-oeffnen{background:transparent;border:0;color:var(--laut-2);padding:3px 0 0;
  font-size:var(--t-micro);font-family:inherit;text-decoration:underline;
  text-underline-offset:2px;text-decoration-color:var(--line-strong)}
.kx-oeffnen:hover{color:var(--lime);text-decoration-color:currentColor}
/* Der Knopf gehoert unter die Spur, nicht in ihre Mitte: als Inline-Element
   in einem Flex-Container landete er zentriert und sah verloren aus. */
.kx-mehr{margin-left:28px;align-self:flex-start}

.kx-faeden h5{margin:0 0 6px;font-size:var(--t-micro);font-weight:700;letter-spacing:.8px;
  text-transform:uppercase;color:var(--muted-2)}
.kx-faden{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;width:100%;
  background:transparent;border:0;border-bottom:1px solid var(--line-soft);color:var(--ink);
  text-align:left;padding:9px 2px;min-height:44px}
.kx-faden:hover{background:var(--bg-hover)}
.kx-faden-titel{font-size:var(--t-small);flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.kx-faden-euro{font-size:var(--t-small);font-weight:600;font-variant-numeric:tabular-nums}
.kx-faden-beleg{font-size:var(--t-micro);color:var(--muted-2)}
.kx-ruhig{margin:0;font-size:var(--t-small);color:var(--muted)}

.kx-schritt{margin-top:14px;padding:12px 14px;border:1px solid var(--line);
  border-radius:var(--r-control);background:var(--bg-2)}
.kx-schritt-label{font-size:var(--t-micro);font-weight:700;letter-spacing:.8px;
  text-transform:uppercase;color:var(--muted-2)}
.kx-schritt-titel{font-size:var(--t-body);font-weight:600;margin:3px 0 4px;line-height:1.4}
.kx-schritt-meta{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:var(--t-micro);
  color:var(--muted);margin-bottom:10px}
.kx-luecken{margin-top:14px;padding-top:10px;border-top:1px solid var(--line-soft)}
.kx-luecke{font-size:var(--t-micro);color:var(--muted);line-height:1.5;margin-bottom:3px}

@media(max-width:860px){
  .kx{padding-left:11px}
  .kx-zahlen{gap:6px 18px}
  .kx-mehr{margin-left:0}
  .kx-faden{padding:10px 2px}
  /* Der "oeffnen"-Link war 17px hoch — als Textlink gedacht, auf Touch
     aber ein Bedienelement wie jedes andere. Gemessen auf 320x568. */
  .kx-oeffnen{min-height:44px;display:inline-flex;align-items:center;padding:0 2px 0 0}
}

/* Die Rechnungsnummer ist der Einstieg in den Zusammenhang — sie ist
   ohnehin das, worauf man zeigt, wenn man fragt "wo kam die her".
   Deshalb ein Knopf, der wie Text aussieht, aber greifbar ist. */
.inv-nr{background:transparent;border:0;color:inherit;font:inherit;padding:6px 0;
  min-height:44px;text-align:left;border-bottom:1px dotted var(--line-strong)}
.inv-nr:hover{color:var(--lime)}

/* Wirkungskette einer Kampagne: waagerecht, weil sie eine Richtung hat.
   Sechs Stufen untereinander saehen aus wie eine Liste, nicht wie ein
   Verlauf. Kein Pfeil-Ornament — der Abstand traegt die Leserichtung. */
.wk{margin:14px 0 6px}
.wk-stufen{display:flex;flex-wrap:wrap;gap:2px}
.wk-stufe{flex:1 1 108px;min-width:0;padding:10px 12px;border:1px solid var(--line);
  border-radius:var(--r-control);background:var(--bg-2);display:flex;flex-direction:column;gap:1px}
.wk-stufe + .wk-stufe{border-left-color:var(--line-strong)}
.wk-unmessbar{opacity:.7}
.wk-wert{font:700 var(--t-h3)/1.1 var(--body);font-variant-numeric:tabular-nums;
  overflow-wrap:anywhere}
.wk-unmessbar .wk-wert{font-size:var(--t-small);font-weight:400}
.wk-label{font-size:var(--t-small);color:var(--muted)}
.wk-beleg{font-size:var(--t-micro);color:var(--muted-2);overflow-wrap:anywhere}
.wk-hinweis{margin:10px 0 0;line-height:1.5}
@media(max-width:520px){ .wk-stufe{flex:1 1 calc(50% - 2px)} }

/* ═══════════════════ KONTEXTLEISTE ═══════════════════
   Eine Zeile über dem Inhalt, in jeder Detailansicht dieselbe. Kein
   Breadcrumb, keine zweite Navigation: sie sagt, WAS das hier ist,
   nicht wo man geklickt hat.

   Am Desktop genau eine Zeile. Sie darf nicht waagerecht scrollen —
   eine Leiste, die man schieben muss, liest niemand. Deshalb kürzt
   der Name mit Ellipse und die schwächsten Teile fallen zuerst weg. */
/* v5: die lime Flankenkante ist weg. Sie markierte nichts — kein
   Zustand, keine Handlung, keine Auswahl. Damit war sie genau das,
   was das Farbsystem dieser Oberflaeche verbietet: Lime als Dekor.
   Der Kasten traegt bereits Rahmen, Flaeche und Radius; eine vierte
   Auszeichnung obendrauf sagt nichts hinzu.
   Was hier wirklich Aufmerksamkeit braucht, faerbt `.kxl-offen-an`
   in --warn: die Zahl der offenen Faeden. Das ist die Stelle, an der
   Farbe eine Bedeutung hat. */
.kxl{display:flex;align-items:center;gap:0;margin:0 0 14px;padding:9px 14px;
  border:1px solid var(--line);
  border-radius:var(--r-control);background:var(--bg-2);min-width:0}
.kxl-zeile{display:flex;align-items:baseline;gap:6px 16px;width:100%;min-width:0;
  font-size:var(--t-small);line-height:1.45}
.kxl-name{font-weight:600;font-size:var(--t-body);color:var(--ink);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:15em;flex:0 1 auto}
.kxl-herkunft,.kxl-schritt{color:var(--muted);min-width:0;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:0 1 auto}
.kxl-offen{color:var(--muted);white-space:nowrap;flex:0 0 auto}
/* Zahl UND Wort: eine Farbe allein sagt nicht, was sie bedeutet, und
   fällt bei Farbfehlsichtigkeit ganz aus. */
.kxl-offen-an{color:var(--warn);font-weight:600}
.kxl-geld{white-space:nowrap;flex:0 0 auto;font-variant-numeric:tabular-nums}
.kxl-btn{margin-left:auto;flex:0 0 auto;background:transparent;border:1px solid var(--line);
  border-radius:var(--r-control);color:var(--ink);font:inherit;font-size:var(--t-small);
  padding:0 12px;min-height:36px;cursor:pointer}
.kxl-btn:hover{border-color:var(--line-lime);color:var(--lime)}
/* Der Umschalter existiert nur mobil — am Desktop passt alles in die
   Zeile, und ein Knopf ohne Wirkung wäre eine Lüge. */
.kxl-mehr{display:none}

@media(max-width:860px){
  /* Zwei kompakte Ebenen statt einer Zeile: Name und Zahl oben, der
     Rest erst auf Tippen. Reihenfolge über order, damit das Markup
     eine Leserichtung behält. */
  .kxl{padding:8px 12px;align-items:flex-start}
  .kxl-zeile{flex-wrap:wrap;gap:2px 12px;align-items:center}
  /* Schmale Basis, damit Name + Betrag + Chevron IMMER in die erste
     Zeile passen. Mit flex:1 1 auto nahm „Robens Sicherheitstechnik"
     die ganze Breite, der Chevron rutschte allein auf Zeile zwei und
     riss ein 44 px hohes Loch in die Leiste — im Bild sofort sichtbar,
     in der Overflow-Messung unsichtbar. */
  .kxl-name{flex:1 1 6em;min-width:0;max-width:100%;order:1}
  .kxl-geld{order:2}
  .kxl-mehr{display:inline-flex;align-items:center;justify-content:center;order:3;
    background:transparent;border:0;color:var(--muted);min-width:44px;min-height:44px;
    margin-left:auto;cursor:pointer}
  .kxl-mehr[aria-expanded="true"]{transform:rotate(180deg)}
  .kxl-offen{order:4;flex:1 1 100%}
  .kxl-herkunft,.kxl-schritt{display:none;order:5;flex:1 1 100%;white-space:normal}
  .kxl-btn{display:none;order:6;margin-left:0;min-height:44px}
  .kxl-auf .kxl-herkunft,.kxl-auf .kxl-schritt{display:block}
  .kxl-auf .kxl-btn{display:inline-flex;align-items:center}
}

/* Schnellaktionen — höchstens drei, alle reversibel. */
.kx-aktionen{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 14px}
.kx-aktion{min-height:36px}
.kx-aktion-hinweis{flex:1 1 100%;margin:0}
@media(max-width:860px){
  /* Volle Breite und links ausgerichtet: gestreckte Knöpfe mit
     zentrierter Beschriftung sahen aus, als wären sie zufällig
     verteilt. Eine Liste liest sich am Daumen besser als ein Raster. */
  .kx-aktion{min-height:44px;flex:1 1 100%;justify-content:flex-start}
}

/* ═══════════════════ TAGESPLAN ═══════════════════
   Höchstens fünf Punkte, jeder an einer Entität. Kein Karten-Raster:
   fünf Karten nebeneinander sind fünf gleich laute Ränder, und die
   Reihenfolge — das eigentliche Ergebnis — verschwindet. Eine Liste
   mit feinen Trennlinien behält sie. */
.tp-liste{display:flex;flex-direction:column}
.tp-punkt{padding:14px 0;border-top:1px solid var(--line-soft)}
.tp-punkt:first-child{border-top:0;padding-top:4px}
.tp-kopf{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.tp-euro{font:700 var(--t-h3)/1.1 var(--body);font-variant-numeric:tabular-nums;
  color:var(--ink);flex:0 0 auto}
.tp-sev{font-size:var(--t-micro);font-weight:700;letter-spacing:.6px;
  text-transform:uppercase;flex:0 0 auto}
.tp-titel{font-size:var(--t-body);font-weight:600;line-height:1.4;min-width:0;
  overflow-wrap:anywhere}
.tp-entitaet{display:flex;flex-wrap:wrap;gap:2px 12px;margin:5px 0 0;min-width:0}
.tp-name{font-size:var(--t-small);color:var(--ink)}
.tp-weg{overflow-wrap:anywhere}
.tp-schritt{margin:5px 0 0;line-height:1.5}
.tp-knoepfe{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
/* Nur die kritischen Punkte tragen eine Kante — trüge jeder eine,
   trüge sie keine Bedeutung mehr. */
.tp-kritisch{border-left:2px solid var(--danger);padding-left:12px;margin-left:-14px}
@media(max-width:860px){ .tp-knoepfe .btn{min-height:44px;flex:1 1 auto} }

/* ═══════════════════ MARKETING-ZENTRALE ═══════════════════ */
.mk-wirkt{display:flex;flex-direction:column}
.mk-aussage{display:flex;align-items:flex-start;gap:14px;width:100%;text-align:left;
  background:transparent;border:0;border-top:1px solid var(--line-soft);color:inherit;
  font:inherit;padding:13px 0;cursor:pointer;min-width:0}
.mk-aussage:first-child{border-top:0}
.mk-aussage:hover{color:var(--lime)}
.mk-wert{font:700 var(--t-h2)/1 var(--body);font-variant-numeric:tabular-nums;
  flex:0 0 auto;min-width:1.6em;color:var(--ink)}
.mk-text{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1 1 auto}
.mk-satz{font-size:var(--t-body);line-height:1.45;overflow-wrap:anywhere}
.mk-meta{display:flex;flex-wrap:wrap;gap:2px 12px}
.mk-beleg{color:var(--muted-2)}
.mk-pfeil{flex:0 0 auto;color:var(--muted);display:inline-flex;align-self:center}

.mk-kampagnen{display:flex;flex-direction:column}
.mk-kampagne{display:flex;align-items:baseline;gap:6px 16px;width:100%;text-align:left;
  background:transparent;border:0;border-top:1px solid var(--line-soft);color:inherit;
  font:inherit;padding:12px 0;min-height:44px;cursor:pointer;min-width:0;flex-wrap:wrap}
.mk-kampagne:first-child{border-top:0}
.mk-kampagne:hover,.mk-offen{color:var(--lime)}
.mk-k-titel{font-size:var(--t-body);font-weight:600;flex:1 1 12em;min-width:0;
  overflow-wrap:anywhere}
.mk-k-zeit{flex:0 1 auto;min-width:0}
.mk-k-zahl{font-variant-numeric:tabular-nums;font-weight:600;flex:0 0 auto}
.mk-k-status{font-size:var(--t-micro);color:var(--muted-2);flex:0 0 auto;
  text-transform:uppercase;letter-spacing:.6px}
.mk-aktiv .mk-k-status{color:var(--ok)}

.mk-detail h4{margin:18px 0 8px;font-size:var(--t-body);font-weight:600}
.mk-vorgaenge{margin-top:4px}
.mk-vorgang{display:flex;align-items:center;gap:12px;width:100%;text-align:left;
  background:transparent;border:0;border-top:1px solid var(--line-soft);color:inherit;
  font:inherit;padding:11px 0;min-height:44px;cursor:pointer;min-width:0;flex-wrap:wrap}
.mk-vorgang:hover{color:var(--lime)}
.mk-v-name{font-weight:600;flex:0 1 auto;min-width:0;overflow-wrap:anywhere}
.mk-v-zahlen{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.mk-lernen ul{margin:0;padding-left:18px}
.mk-lernen li{font-size:var(--t-small);line-height:1.6;margin-bottom:3px}
.mk-lernen p{margin:10px 0 0}
.mk-s-titel{font-size:var(--t-h3);font-weight:600;line-height:1.3;margin-bottom:4px}
.mk-s-fuss{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin-top:12px}
@media(max-width:860px){
  .mk-wert{font-size:var(--t-h3)}
  .mk-s-fuss .btn{min-height:44px}
}

/* Empfehlung im Lead-Detail. Eine Zeile, keine eigene Karte: sie ist
   eine Angabe wie Wiedervorlage oder nächste Aktion, kein Bereich. */
.lead-empfehlung{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;
  margin:0 0 14px;padding:10px 14px;border:1px solid var(--line-soft);
  border-radius:var(--r-control);background:var(--bg-2)}
.lead-empfehlung .field-label{flex:0 0 auto;margin:0}
.lead-empfehlung .inp-sm{flex:1 1 12em;min-width:0}
@media(max-width:860px){
  .lead-empfehlung{gap:6px}
  .lead-empfehlung .inp-sm{flex:1 1 100%;min-height:44px}
}

/* Auswahlfelder im Projektformular. Ohne min-width:0 zwingt der
   längste Projekttitel im <select> das ganze Raster breiter — gemessen
   237 px horizontaler Überlauf im Dialog. */
.form-grid select.inp,.modal select.inp{min-width:0;max-width:100%}
.modal .field{min-width:0}

/* ═══════════════ BEZIEHUNGEN UND FOLGEGESCHÄFT ═══════════════
   Drei Zeilen, kein Raster. Empfehlungen sind kein eigenes Fachgebiet
   mit Dashboard — sie sind drei Sätze über das Geschäft. Kein
   Netzwerkbild, keine Rangliste, keine Abzeichen. */
.bz-liste{display:flex;flex-direction:column}
.bz-zeile{display:flex;align-items:baseline;gap:8px 16px;width:100%;text-align:left;
  background:transparent;border:0;border-top:1px solid var(--line-soft);color:inherit;
  font:inherit;padding:13px 0;min-height:44px;cursor:pointer;min-width:0;flex-wrap:wrap}
.bz-zeile:first-child{border-top:0}
.bz-zeile:hover{color:var(--lime)}
.bz-titel{font-size:var(--t-body);font-weight:600;flex:0 0 9.5em;min-width:0}
.bz-teile{display:flex;flex-wrap:wrap;gap:2px 14px;flex:1 1 12em;min-width:0;
  font-size:var(--t-small);color:var(--muted);font-variant-numeric:tabular-nums}
.bz-teil{white-space:nowrap}
.bz-pfeil{flex:0 0 auto;color:var(--muted);display:inline-flex;align-self:center}
.bz-top{margin:12px 0 0}
.bz-fuss{margin:8px 0 0;line-height:1.55}
@media(max-width:860px){
  .bz-titel{flex:1 1 100%}
  .bz-teile{flex:1 1 100%}
  .bz-pfeil{display:none}
}

/* ═══════════════ BEZIEHUNGSBLOCK ═══════════════
   Kunde und Projekt zeigen dieselbe Form: Zeile, Betrag, Status,
   Beleg. Keine Karte je Beziehung — bei fünf Empfehlungen wären das
   fünf gleich laute Ränder, und die Reihenfolge verschwände. */
.bzb{margin:0 0 18px}
.bzb-teil + .bzb-teil{margin-top:18px}
.bzb h4{margin:0 0 6px;font-size:var(--t-small);font-weight:700;letter-spacing:.6px;
  text-transform:uppercase;color:var(--muted-2)}
.bzb-liste{display:flex;flex-direction:column}
.bzb-zeile{display:flex;align-items:baseline;gap:6px 14px;width:100%;text-align:left;
  background:transparent;border:0;border-top:1px solid var(--line-soft);color:inherit;
  font:inherit;padding:11px 0;min-height:44px;cursor:pointer;min-width:0;flex-wrap:wrap}
.bzb-zeile:first-child{border-top:0}
.bzb-zeile:hover{color:var(--lime)}
.bzb-name{font-size:var(--t-body);font-weight:600;flex:0 1 auto;min-width:0;
  overflow-wrap:anywhere}
.bzb-status{font-size:var(--t-micro);color:var(--muted-2);flex:0 0 auto;
  text-transform:uppercase;letter-spacing:.5px}
.bzb-meta{display:flex;flex-wrap:wrap;gap:2px 10px;flex:1 1 12em;min-width:0;
  font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.bzb-beleg{color:var(--muted-2)}
.bzb-pfeil{flex:0 0 auto;color:var(--muted);display:inline-flex;align-self:center}
.bzb-mehr{margin-top:8px}
.bzb-wirkung{margin:10px 0 0;font-size:var(--t-small);font-variant-numeric:tabular-nums}
@media(max-width:860px){
  .bzb-name{flex:1 1 100%}
  .bzb-meta{flex:1 1 100%}
  .bzb-pfeil{display:none}
}

/* ═══════════ TOUCH-BREITE ZWEIER SCHMALER ZIELE ═══════════
   Beide sind 44 px hoch, aber nur 42 bzw. 36 px breit: der
   Befehle-Knopf zeigt am Telefon nur sein Symbol, „öffnen" ist ein
   Textlink. Ein Ziel unter 44 px in EINER Richtung ist genauso schwer
   zu treffen wie eines, das in beiden zu klein ist.

   Bewusst nur diese zwei Regeln statt einer pauschalen Mindestbreite
   für alle Knöpfe: eine globale Regel würde jede Chip-Reihe und jede
   Werkzeugleiste auseinanderziehen, um zwei Elemente zu retten.

   Der zuvor gemeldete Höhenbefund war keiner — die Einblendanimation
   des Dialogs blieb im Prüfstand bei scale(0.97) stehen und hat jede
   Messung um drei Prozent verkleinert. Gemessen wird jetzt mit
   stillgelegten Animationen. */
@media(max-width:860px){
  .btn-pal{min-width:44px;justify-content:center}
  .kx-oeffnen{min-width:44px;justify-content:flex-start}
  /* Dieselbe Lage im Command-Strip: „Briefing", „Woche" und „Systeme"
     verlieren am Telefon ihre Beschriftung (.hide-phone) und schrumpfen
     auf ihr Symbol. */
  .cstrip-schnell .btn{min-width:44px;justify-content:center}
}

/* ═══════════════ PARALLELE HERKUNFT ═══════════════
   Quellen stehen NEBENEINANDER, ohne Pfeil dazwischen: ein Pfeil
   behauptet eine Reihenfolge, und die ist zwischen Kampagne und
   Empfehlung nicht belegt. Erst die Entwicklung darunter ist eine
   Kette — ihre Kanten stehen in Feldern. */
.hk{margin:0 0 16px}
.hk-teil + .hk-teil{margin-top:16px}
.hk h4{margin:0 0 6px;font-size:var(--t-small);font-weight:700;letter-spacing:.6px;
  text-transform:uppercase;color:var(--muted-2)}
.hk-quellen{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.hk-quelle{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 12px;min-width:0;
  padding-left:12px;border-left:1px solid var(--line)}
.hk-kette{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;
  align-items:baseline;gap:4px 6px}
.hk-station{display:flex;flex-direction:column;min-width:0}
/* Der Pfeil gehört NUR in die Entwicklung, nie zwischen die Quellen. */
.hk-station + .hk-station::before{content:"→";color:var(--muted-2);
  position:absolute;margin-left:-14px}
.hk-station + .hk-station{position:relative;padding-left:4px}
.hk-link{background:transparent;border:0;color:var(--ink);font:inherit;
  font-weight:600;padding:0;text-align:left;cursor:pointer;min-width:0;
  overflow-wrap:anywhere}
.hk-link:hover{color:var(--lime)}
.hk-detail,.hk-beleg{min-width:0;overflow-wrap:anywhere}
.hk-feld{margin-left:6px;color:var(--muted-2)}
.hk-hinweis{margin:8px 0 0;line-height:1.55}
.hk-mehr{margin-top:10px}
.mk-parallel{margin-top:18px}
@media(max-width:860px){
  .hk-quelle{flex-direction:column;gap:2px}
  .hk-kette{flex-direction:column;align-items:flex-start;gap:6px}
  .hk-station + .hk-station::before{position:static;margin:0 6px 0 0}
  .hk-station + .hk-station{padding-left:0;flex-direction:row;align-items:baseline;gap:6px}
  .hk-mehr{min-height:44px}
}

/* ═══ Phase 3C: Wochenwahl, Ziele, Entscheidungslage ═══
   Ruhige Arbeitslisten — keine Kartenwand, keine Effekte. */
.os-woche-wahl{display:flex;align-items:center;gap:4px;flex-wrap:wrap;
  border-bottom:1px solid var(--line);margin-bottom:14px}
.os-woche-frei{display:flex;gap:6px;margin-left:8px}
.inp-sm{padding:4px 8px;font-size:.85rem;width:auto;min-height:44px}
.os-woche-summe{font-size:1.02rem;line-height:1.5;max-width:70ch;margin:0 0 14px}
.ziel-stand{display:flex;flex-direction:column;gap:2px;margin:6px 0}
.ziel-zahl{font-size:1.25rem;font-weight:700;font-variant-numeric:tabular-nums}
.ziel-ok{color:var(--lime);font-weight:600;font-size:.9rem}
.ziel-aktionen,.entsch-aktionen{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.ziel-vorschlag{padding:8px 0;border-top:1px solid var(--line);gap:10px}
.ziel-vorschlag:first-of-type{border-top:0}
.entsch-abschnitt{display:flex;align-items:center;gap:8px;margin:22px 0 10px;
  font-size:.95rem;letter-spacing:.02em}
.entsch-warn{color:var(--warn,#E0A23A)}
.entsch-outcome{border-left:2px solid var(--line);padding-left:10px}
/* Touch: jede Aktionszeile bleibt über 44px greifbar. */
.ziel-aktionen .btn,.entsch-aktionen .btn{min-height:44px}
@media (max-width:480px){
  .os-woche-wahl{gap:0}
  .os-woche-frei{width:100%;margin:6px 0 8px}
  .os-woche-frei .inp-sm{flex:1;min-height:44px}
  .os-woche-wahl .os-tab{min-height:44px}
}

/* ═══ V4: Antworten — Frage/Antwort-Liste, kein Kachelfeld ═══ */
.aw-liste{display:flex;flex-direction:column}
.aw-zeile{display:flex;flex-direction:column;gap:2px;width:100%;text-align:left;
  background:transparent;border:0;border-top:1px solid var(--line);color:var(--ink);
  font:inherit;padding:12px 4px;cursor:pointer;min-height:44px}
.aw-zeile:first-child{border-top:0}
.aw-zeile:hover .aw-antwort{color:var(--lime)}
.aw-frage{font-size:.78rem;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
.aw-antwort{font-size:1.02rem;font-weight:600;line-height:1.45;max-width:75ch}
.aw-grund{line-height:1.4;max-width:75ch}
.aw-beleg{font-size:.72rem;opacity:.7}
.aw-ungemessen .aw-antwort{color:var(--muted);font-weight:500}
.aw-beobachtung .aw-antwort{color:var(--warn,#E0A23A)}
.aw-mehr{margin-top:8px;min-height:44px}

/* ═══ V4: Wissen ═══ */
.wissen-filter{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.wissen-typen{display:flex;flex-wrap:wrap;border-bottom:1px solid var(--line)}
.wissen-typen .os-tab{min-height:44px}
.wissen-eintrag{border-top:1px solid var(--line)}
.wissen-kopf{display:flex;flex-direction:column;gap:2px;width:100%;text-align:left;
  background:transparent;border:0;color:var(--ink);font:inherit;padding:12px 4px;
  cursor:pointer;min-height:44px}
.wissen-kopf:hover .wissen-titel{color:var(--lime)}
.wissen-titel{font-weight:600}
.wissen-inhalt{padding:0 4px 12px}
.wissen-text{white-space:pre-wrap;font-family:inherit;font-size:.92rem;line-height:1.5;
  border-left:2px solid var(--line);padding-left:12px;margin:0 0 10px;overflow-wrap:anywhere}

/* ═══ V4.1: Historische Ansichten ═══ */
.hist-wahl{margin-left:auto}
.hist-liste{display:flex;flex-direction:column}
.hist-zeile{display:grid;grid-template-columns:1fr auto auto auto auto;
  align-items:baseline;gap:8px 14px;padding:10px 0;border-top:1px solid var(--line)}
.hist-zeile:first-child{border-top:0}
.hist-titel{font-size:.85rem;color:var(--muted);letter-spacing:.02em}
.hist-zahl{font-size:1.15rem;font-weight:700;font-variant-numeric:tabular-nums}
.hist-vor,.hist-prozent{font-variant-numeric:tabular-nums}
.hist-delta{font-weight:600;font-variant-numeric:tabular-nums}
.hist-plus{color:var(--lime)}
.hist-minus{color:var(--warn,#E0A23A)}
.hist-qual{margin-top:12px;line-height:1.4}
.hist-hinweis{margin-top:10px}
.hist-fin-zeile{display:grid;grid-template-columns:1fr auto 2fr auto;gap:8px 14px;
  align-items:baseline;padding:8px 0;border-top:1px solid var(--line)}
.hist-fin-zeile:first-child{border-top:0}
.hist-fin-titel{font-size:.9rem}
.hist-fin-wert{font-weight:700;font-variant-numeric:tabular-nums}
.hist-fin-spark{color:var(--muted-2,#8fa08f)}
.hist-spark{vertical-align:middle}
.hist-auto-liste{display:flex;flex-direction:column}
.hist-auto-zeile{display:grid;grid-template-columns:1fr auto 2fr;gap:6px 14px;
  padding:8px 0;border-top:1px solid var(--line);align-items:baseline}
.hist-auto-zeile:first-child{border-top:0}
.hist-auto-quote{font-variant-numeric:tabular-nums;font-weight:600}
.hist-sys-liste{margin:0;padding-left:1.2rem;line-height:1.7}
.hist-deploys{margin-top:16px}
.hist-filter{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.hist-events{list-style:none;padding:0;margin:0;font-family:ui-monospace,monospace;font-size:.85rem}
.hist-events li{padding:4px 0;border-top:1px solid var(--line)}
.hist-events li:first-child{border-top:0}
.hist-ev-typ{font-weight:600}
.hist-pag{margin-top:10px;display:flex;gap:6px;align-items:center}
@media (max-width:520px){
  .hist-zeile{grid-template-columns:1fr auto;gap:2px 10px}
  .hist-zeile .hist-vor,.hist-zeile .hist-delta,.hist-zeile .hist-prozent{grid-column:2}
  .hist-fin-zeile{grid-template-columns:1fr auto;gap:2px 10px}
  .hist-fin-zeile .hist-fin-sub,.hist-fin-zeile .hist-fin-spark{grid-column:2}
  .hist-auto-zeile{grid-template-columns:1fr auto}
}

/* ═══ V4.2: Integrationszentrale ═══ */
.int-liste{display:flex;flex-direction:column}
.int-zeile{display:grid;grid-template-columns:1fr auto 2fr;gap:6px 14px;padding:10px 0;
  border-top:1px solid var(--line);align-items:baseline}
.int-zeile:first-child{border-top:0}
.int-titel{font-weight:600}
.int-badge{display:inline-flex;align-items:center;gap:6px;font-size:.9rem}
.int-mess{grid-column:1/-1;font-size:.85rem}
.int-vars{grid-column:1/-1;font-family:ui-monospace,monospace;font-size:.72rem;opacity:.6}
.int-web-liste,.int-ai-liste,.int-repo-liste,.int-dep-liste{margin:0;padding-left:1.2rem;line-height:1.7}
@media (min-width:640px){
  .int-zeile{grid-template-columns:1fr auto 2fr 2fr}
  .int-mess{grid-column:auto}
  .int-vars{grid-column:1/-1;padding-left:0}
}

/* ═══════════════════════════════════════════════════════════════════
   V5 · LAUTSTAERKE — das Grundgesetz dieser Oberflaeche
   ───────────────────────────────────────────────────────────────────
   Gemessen am 07.08.2026: der Morgenblick war 3194 px hoch, trug sechs
   gleich laute Karten und nannte dieselbe ueberfaellige Rechnung
   dreimal. Nichts davon war haesslich — alles war gleich laut, und
   deshalb sagte der Bildschirm nichts.

   Die Regel ab v5: pro Bildschirm EIN Signal, darunter EINE
   Arbeitsliste, darunter alles Uebrige leise. Drei Stufen, keine vier.
   Belege bleiben stehen, sie steigen nur nicht mehr zur Aussage auf.

   Neue Namen statt Ueberschreibungen: was hier steht, ergaenzt die
   bestehenden Bausteine, es kaempft nicht mit ihnen. Kein !important.
   ═══════════════════════════════════════════════════════════════════ */

/* ── Abschnitt statt Karte ──────────────────────────────────────────
   Eine Karte ist Flaeche + Rahmen + Radius + Polsterung. Sechs davon
   untereinander ergeben eine Kartenwand, in der keine mehr heraussticht.
   Ein Abschnitt traegt nur eine Haarlinie und Luft — Gruppierung ohne
   Kasten. Flaeche bekommt nur noch, was wirklich eine eigene Ebene ist. */
.sec{margin:0 0 var(--s-6)}
.sec + .sec{padding-top:var(--s-6);border-top:1px solid var(--line-soft)}
/* Der Zusatz gehoert an den Titel, nicht ans Zeilenende.

   Mit `space-between` sass er auf 1440 px ganz rechts aussen — bei
   "Integrationen … read-only, Werte nie sichtbar" lagen 1200 px
   zwischen Aussage und ihrer Einschraenkung, und man las beide als
   getrennte Dinge. Nur echte Bedienelemente (.sec-werkzeug) wandern
   nach rechts. */
.sec-kopf{display:flex;align-items:baseline;justify-content:flex-start;
  gap:var(--s-2) var(--s-4);flex-wrap:wrap;margin:0 0 var(--s-4)}
.sec-werkzeug{margin-left:auto}
.sec-titel{font:600 var(--t-h3)/1.25 var(--body);letter-spacing:-.01em;margin:0}
.sec-zusatz{font-size:var(--t-small);color:var(--laut-3)}
.sec-werkzeug{display:flex;gap:var(--s-2);flex:0 0 auto}
/* Ein zugeklappter Abschnitt muss sichtbar zugeklappt sein. Ohne
   Zeichen sieht er aus wie eine Ueberschrift ohne Inhalt — dann
   sucht niemand danach, und die sieben Morgenfragen waeren faktisch
   verschwunden statt eine Ebene tiefer. */
details.sec > .sec-kopf{cursor:pointer;list-style:none;margin-bottom:0;
  padding:var(--s-2) 0;border-radius:var(--r-sm)}
details.sec > .sec-kopf::-webkit-details-marker{display:none}
details.sec > .sec-kopf .sec-titel::after{content:"";display:inline-block;
  width:7px;height:7px;margin-left:var(--s-3);vertical-align:middle;
  border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);
  transform:rotate(45deg) translate(-2px,-2px);transition:transform .16s var(--ease)}
details.sec[open] > .sec-kopf{margin-bottom:var(--s-4)}
details.sec[open] > .sec-kopf .sec-titel::after{transform:rotate(-135deg) translate(-3px,-3px)}
details.sec > .sec-kopf:hover .sec-titel{color:var(--lime)}
@media(prefers-reduced-motion:reduce){
  details.sec > .sec-kopf .sec-titel::after{transition:none}
}
.sec-flaeche{background:var(--bg-card);border:1px solid var(--line-soft);
  border-radius:var(--r);padding:var(--s-4) var(--s-5)}

/* ── Signal: das eine, was heute zaehlt ─────────────────────────────
   Steht ganz oben und ist der einzige Ort der Seite mit Display-Schrift.
   Alles darunter ist leiser — daran erkennt man, dass es EIN Signal ist
   und nicht das erste von sechs. */
.sig{margin:0 0 var(--s-6);padding:0 0 var(--s-5);border-bottom:1px solid var(--line)}
.sig-oben{display:flex;align-items:center;gap:var(--s-2) var(--s-4);
  flex-wrap:wrap;margin:0 0 var(--s-4)}
.sig-datum{font-size:var(--t-small);color:var(--laut-2)}
.sig-zustand{display:inline-flex;align-items:center;gap:var(--s-2);
  font-size:var(--t-small);color:var(--laut-2)}
.sig-punkt{width:7px;height:7px;border-radius:50%;flex:0 0 auto}
/* Auf schmalen Viewports faellt die Beschriftung weg (.hide-phone) und
   der Knopf schrumpft auf die Icon-Breite — gemessen 42 px, also zwei
   zu wenig. Die Mindestbreite haelt ihn am Finger bedienbar. */
.sig-werkzeug{margin-left:auto;display:flex;gap:var(--s-2);flex-wrap:wrap}
.sig-werkzeug .btn{min-width:44px;justify-content:center}

.sig-kern{display:flex;align-items:baseline;gap:var(--s-3) var(--s-4);
  flex-wrap:wrap;margin:0 0 var(--s-2)}
/* Die einzige wirklich grosse Zahl der Seite. Anton ist bereits geladen —
   keine neue Schriftdatei, nur eine Rolle mehr. */
.sig-zahl{font:400 clamp(38px,4.4vw,58px)/1 var(--display);letter-spacing:.5px;
  color:var(--ink);font-variant-numeric:tabular-nums}
.sig-zahl-still{color:var(--laut-2)}
.sig-satz{font-size:var(--t-lead);line-height:1.45;color:var(--laut-1);
  max-width:var(--maxw-lesen);min-width:0}
.sig-grund{margin:0;font-size:var(--t-small);color:var(--laut-2);line-height:1.55;
  max-width:var(--maxw-lesen)}

/* Signalwerte: drei bis vier, kompakt, in EINER Zeile Rhythmus.
   Keine Kacheln — Kacheln waeren wieder vier gleich laute Kaesten. */
.sig-werte{display:flex;flex-wrap:wrap;gap:var(--s-4) var(--s-6);
  margin:var(--s-5) 0 0;padding:0;list-style:none}
/* Anklickbar, aber kein Knopf-Aussehen: der Wert IST das Ziel.
   Eine Unterkante beim Hover reicht als Angebot — vier gerahmte
   Schaltflaechen waeren die Kachelwand, die hier gerade verschwindet. */
.sig-wert{display:flex;flex-direction:column;gap:2px;min-width:0;
  background:none;border:0;padding:2px 0;text-align:left;color:inherit;
  font-family:inherit;border-bottom:1px solid transparent;
  transition:border-color .12s var(--ease)}
.sig-wert:hover{border-bottom-color:var(--line-strong)}
.sig-wert-zahl{font:700 var(--t-h2)/1.1 var(--body);letter-spacing:-.02em;
  font-variant-numeric:tabular-nums}
.sig-wert-label{font-size:var(--t-micro);color:var(--laut-3);letter-spacing:.4px}
.sig-wert-warn .sig-wert-zahl{color:var(--warn)}
.sig-wert-bad  .sig-wert-zahl{color:var(--danger)}
.sig-wert-leer .sig-wert-zahl{color:var(--unknown)}

/* Die eine naechste Handlung. Genau eine — eine Liste waere die
   Arbeitsliste darunter, und die gibt es schon. */
/* Die priorisierte Handlung des Tages ist die erste Zeile von "Heute".
   Sie braucht KEINE eigene Kante: sie traegt bereits den einzigen
   Primaerknopf des Bildschirms. Eine lime Kante daneben markierte
   dasselbe ein zweites Mal — und eine kraeftige Farbkante an der Flanke
   ist genau die Dekoration, die diese Oberflaeche loswerden wollte.
   Ein Marker pro Bedeutung. */
@media(max-width:520px){ .sig-werte{gap:var(--s-3) var(--s-5)} }

/* ── Arbeitsliste: eine Zeile, ein Blick ────────────────────────────
   Vorher war jeder Punkt ein Absatzblock mit zwei gleichwertigen
   Knoepfen; fuenf davon fuellten 475 px, ohne scanbar zu sein.
   Jetzt: Betrag/Schwere links als Anker, Titel als Aussage, Kontext
   leise darunter, EINE Primaerhandlung rechts. */
.q{display:flex;flex-direction:column}
.q-zeile{display:grid;grid-template-columns:6.5em 1fr auto;gap:2px var(--s-4);
  align-items:baseline;width:100%;text-align:left;padding:var(--s-3) var(--s-2);
  background:none;border:0;border-top:1px solid var(--line-soft);color:inherit;
  font-family:inherit;transition:background .12s var(--ease)}
.q-zeile:first-child{border-top:0}
.q-zeile:hover{background:var(--bg-hover)}
/* Jedes Kind bekommt Zeile UND Spalte genannt. Mit Auto-Platzierung
   rutschte der Titel in die dritte Spalte und der Knopf nach links —
   ein Raster, das nur zufaellig stimmt, stimmt beim naechsten Kind
   nicht mehr. */
.q-anker{grid-column:1;grid-row:1/3;align-self:center;display:flex;flex-direction:column;
  gap:2px;min-width:0;text-align:right}
.q-euro{font:700 var(--t-h3)/1.1 var(--body);font-variant-numeric:tabular-nums;
  letter-spacing:-.02em}
.q-sev{font-size:var(--t-micro);font-weight:700;letter-spacing:.6px;
  text-transform:uppercase}
.q-min{font-size:var(--t-micro);color:var(--laut-3);font-variant-numeric:tabular-nums}
.q-titel{grid-column:2;grid-row:1;font-size:var(--t-body);font-weight:600;line-height:1.4;
  min-width:0;overflow-wrap:anywhere}
.q-sub{grid-column:2;grid-row:2;font-size:var(--t-small);color:var(--laut-2);line-height:1.5;
  min-width:0;overflow-wrap:anywhere}
.q-beleg{color:var(--laut-3)}
/* Nebenhandlung im Fliesstext statt als zweiter Knopf: sie ist eine
   Rueckfrage zum Kontext, keine gleichwertige Alternative zum Hingehen. */
.q-kontext{background:none;border:0;padding:0 0 0 var(--s-2);color:var(--laut-2);
  font:inherit;font-size:var(--t-small);text-decoration:underline;
  text-underline-offset:2px;text-decoration-color:var(--line-strong)}
.q-kontext:hover{color:var(--lime);text-decoration-color:currentColor}
/* Am Zeigegeraet ist ein Textlink von 18 px Hoehe richtig; am Finger
   ist er ein Fehlklick. Die Trefferflaeche waechst, die Schrift nicht. */
@media(pointer:coarse),(max-width:720px){
  .q-kontext{display:inline-flex;align-items:center;min-height:44px;
    padding-left:var(--s-3);padding-right:var(--s-2)}
}
.q-tun{grid-column:3;grid-row:1/3;align-self:center;flex:0 0 auto;display:flex;gap:var(--s-2)}
/* Die Schwere faerbt den Anker, nicht die Zeile: eine rot hinterlegte
   Zeile schreit, ein rotes Wort informiert. */
.q-kritisch .q-sev{color:var(--danger)}
.q-wichtig  .q-sev{color:var(--warn)}
.q-hinweis  .q-sev{color:var(--info)}
/* Schmal: aus drei Spalten wird ein Stapel. Der Anker legt sich in die
   Waagerechte (Betrag neben Dauer), die Handlung wird zur vollen
   Tippbreite — auf dem Telefon ist "Hingehen" der Punkt, nicht eine
   Beigabe rechts aussen. */
@media(max-width:720px){
  .q-zeile{grid-template-columns:1fr;padding:var(--s-3) 0}
  .q-anker{grid-row:1;grid-column:1;flex-direction:row;align-items:baseline;
    gap:var(--s-3);text-align:left}
  .q-titel{grid-row:2;grid-column:1}
  .q-sub{grid-row:3;grid-column:1}
  .q-tun{grid-row:4;grid-column:1;margin-top:var(--s-2)}
  .q-tun .btn{min-height:44px;flex:1 1 auto;justify-content:center}
}

/* ── Belege zurueckstufen ───────────────────────────────────────────
   `customer.mrr` und `invoice.dueDate` sind Nachweise, keine Aussagen.
   Vorher standen sie in derselben Zeile und fast derselben Groesse wie
   der Grund, den sie belegen. */
.aw-beleg{font-size:var(--t-micro);color:var(--laut-3);opacity:.72}

/* ── Zahlen sind Produkt-Design ─────────────────────────────────────
   Ohne Ziffernsatz springen Betraege zwischen den Zeilen und die Spalte
   franst aus. Gilt fuer alles, was gerechnet wurde. */
.tbl td,.tbl th,.stat-value,.kl-mrr,.kd-zahl{font-variant-numeric:tabular-nums}
/* Kopf und Zelle brauchen dieselbe Kante, sonst steht die Beschriftung
   links und die Zahl rechts. `.tbl th` setzt text-align selbst — die
   Spaltenklasse muss deshalb gleich stark benannt werden. */
.num,.tbl th.num,.tbl td.num{font-variant-numeric:tabular-nums;text-align:right}

/* ── Kundenliste: Golden List Reference ─────────────────────────────
   Sie setzt die Sprache fuer jede spaetere Liste. Dicht am Desktop,
   gestapelt am Telefon — und nie horizontal scrollend. */
.kl .kl-firma{font-size:var(--t-body);font-weight:600;line-height:1.35}
.kl .kl-sub{margin-top:2px;font-size:var(--t-small);color:var(--laut-2);line-height:1.4}
.kl .kl-mrr strong{font-size:var(--t-body);font-weight:700}
.kl .kl-setup-offen{margin-top:2px;font-size:var(--t-micro);color:var(--warn);
  white-space:nowrap}
.kl .kl-punkt{max-width:26em}
.kl .kl-punkt-kritisch{color:var(--danger)}
.kl .kl-punkt-wichtig{color:var(--warn)}
.kl .kl-punkt-hinweis{color:var(--info)}
.kl .kl-zuletzt{font-size:var(--t-small);white-space:nowrap}
/* Eine Zeile mit offenem Punkt bekommt KEINE zusaetzliche Kante: die
   Spalte "Offener Punkt" nennt ihn im Klartext und faerbt ihn nach
   Schwere. Eine Flankenmarkierung daneben sagt dasselbe noch einmal,
   nur unspezifischer. */

/* Telefon: aus der Tabelle wird ein Stapel. Kein horizontaler Scroll,
   keine abgeschnittenen Betraege, keine 9-px-Beschriftung. */
@media(max-width:720px){
  .kl thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);
    clip-path:inset(50%);white-space:nowrap}
  /* `.tbl{white-space:nowrap}` gilt unterhalb 680 px fuer alle Tabellen,
     damit schmale Spalten scrollbar bleiben. Diese Liste scrollt aber
     nicht mehr, sie stapelt — ohne Umbruch stand der offene Punkt bei
     320 px auf halber Strecke abgeschnitten da. */
  .kl,.kl tbody,.kl tr,.kl td{display:block;width:100%;white-space:normal}
  .kl td.kl-leer{display:none}
  .kl tbody tr{padding:var(--s-3) 0;border-top:1px solid var(--line-soft)}
  .kl tbody tr:first-child{border-top:0}
  .kl td{border:0;padding:0}
  .kl td + td{margin-top:var(--s-2)}
  /* Gestapelt gibt es keine Spalte mehr, an der eine Zahl haengen
     koennte — rechtsbuendig stuende sie frei im Nichts. Muss
     `.tbl td.num` schlagen, deshalb dieselbe Nennung. */
  .kl .kl-mrr,.kl td.kl-mrr.num{text-align:left}
  .kl .kl-mrr strong{font-size:var(--t-h3)}
  /* Kein MRR, aber offener Setup-Betrag: die Zelle bleibt, der
     Gedankenstrich darin nicht. Gestapelt steht er sonst als eigene
     Zeile ueber der Angabe, die er verneint. */
  .kl .kl-mrr > .muted{display:none}
  .kl .kl-setup-offen{white-space:normal}
  .kl .kl-zuletzt{white-space:normal}
  .kl .kl-punkt{max-width:none}
}

/* ── Kundendetail: Golden Detail Reference ──────────────────────────
   Identitaet ist eine ruhige Zeile, kein Kachelfeld. Wer ist das, seit
   wann, in welchem Paket — das liest man einmal und dann nie wieder. */
.kd-ident{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2) var(--s-3);
  margin:0 0 var(--s-4)}
.kd-ident-teil{font-size:var(--t-small);color:var(--laut-2)}
.kd-ident-teil + .kd-ident-teil::before{content:"·";margin-right:var(--s-3);
  color:var(--laut-3)}
/* Werte im selben Rhythmus wie das Signal — eine Sprache fuer Zahlen in
   der ganzen App, statt vier gerahmter Kacheln je Ansicht. */
.kd-werte{margin:0 0 var(--s-5);padding-bottom:var(--s-4);
  border-bottom:1px solid var(--line-soft)}
.kd-werte .sig-wert{cursor:default}
.kd-werte .sig-wert:hover{border-bottom-color:transparent}

/* ── Detail-Bänder ──────────────────────────────────────────────────
   Jedes Band beantwortet EINE Frage und sagt das im Titel. Vorher lief
   die Ansicht ohne Ueberschrift durch: Handlungsknoepfe, Empfehlungen,
   Zahlen, Zusammenhang, Stammdaten — alles gleich laut, nichts benannt. */
.kd-band{margin:0 0 var(--s-5)}
.kd-band + .kd-band{padding-top:var(--s-5);border-top:1px solid var(--line-soft)}
.kd-band .sec-kopf{margin-bottom:var(--s-3)}
.kd-band-titel{margin:var(--s-5) 0 var(--s-3);padding-top:var(--s-5);
  border-top:1px solid var(--line-soft)}

/* Kunden-Preisberater: eine Arbeitsflaeche, kein weiteres Kartenraster.
   Lime markiert nur den empfohlenen Preis und die aktive Auswahl. */
.kd-price{margin:0 0 var(--s-5);padding:18px;border:1px solid rgba(184,232,52,.28);
  border-radius:var(--r);background:linear-gradient(145deg,rgba(184,232,52,.055),rgba(255,255,255,.015))}
.kd-price .sec-kopf{margin-bottom:14px}.kd-price .sec-titel{margin:3px 0 2px}
.kd-price-matches{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:16px}
.kd-price-match{display:grid;grid-template-columns:24px 1fr;gap:9px;align-items:start;text-align:left;
  padding:11px;border:1px solid var(--line);border-radius:var(--r-control);background:var(--bg-2);color:var(--ink);cursor:pointer}
.kd-price-match:hover,.kd-price-match.on{border-color:rgba(184,232,52,.58);background:rgba(184,232,52,.075)}
.kd-price-match small{display:block;margin-top:3px;color:var(--muted);line-height:1.35}
.kd-price-rank{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--bg-3);font-size:.7rem;color:var(--muted)}
.kd-price-match.on .kd-price-rank{background:var(--lime);color:#111;font-weight:700}
.kd-price-form{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:11px 13px;padding:14px 0;border-top:1px solid var(--line-soft)}
.kd-price-form .field{margin:0;min-width:0}.kd-price-form .inp,.kd-price-form select{width:100%;min-width:0}
.kd-price-own{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.kd-price-result{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(180px,.65fr);gap:10px;margin-top:4px}
.kd-price-main,.kd-price-plan{display:flex;flex-direction:column;gap:5px;padding:15px;border:1px solid var(--line);border-radius:var(--r-control);background:var(--bg-card)}
.kd-price-main>strong{font-size:clamp(1.55rem,4vw,2.25rem);letter-spacing:-.04em;color:var(--lime)}
.kd-price-main>strong small{font-size:.8rem;letter-spacing:0;color:var(--muted);font-weight:500}
.kd-price-main>span:not(.kd-price-model){font-weight:600}
.kd-price-model{align-self:flex-start;padding:4px 8px;border-radius:999px;font-size:.68rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase}
.kd-price-model.fixed{background:rgba(127,196,107,.14);color:var(--ok)}
.kd-price-model.scope{background:rgba(230,200,74,.14);color:var(--warn)}
.kd-price-plan{justify-content:center}.kd-price-plan>strong{font-size:1.45rem}
.kd-price-explain{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px;color:var(--muted);font-size:var(--t-small)}
.kd-price-explain>div{padding:12px;border-left:2px solid var(--line);background:rgba(255,255,255,.015)}
.kd-price-explain strong{color:var(--ink)}.kd-price-explain ul{margin:7px 0 0;padding-left:18px}.kd-price-explain li+li{margin-top:4px}
.kd-price-actions{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:13px;padding-top:12px;border-top:1px solid var(--line-soft)}
.kl-plan{margin-top:2px;color:var(--lime);font-size:.68rem;font-weight:600}

@media(max-width:760px){
  .kd-price{margin-inline:-4px;padding:14px}
  .kd-price-matches{grid-template-columns:1fr}
  .kd-price-form{grid-template-columns:1fr 1fr}
  .kd-price-result,.kd-price-explain{grid-template-columns:1fr}
  .kd-price-actions{align-items:stretch;flex-direction:column}.kd-price-actions .btn{width:100%}
}
@media(max-width:470px){.kd-price-form{grid-template-columns:1fr}.kd-price-own{grid-template-columns:1fr}}
/* Die Stammdaten sind jetzt eine Spalte statt zwei: die zweite trug nur
   MRR, Setup und Startdatum — alle drei stehen im Identitaetsband. */
.detail-grid-1{grid-template-columns:1fr}

/* Flache Kennzahlenreihe: derselbe Rhythmus wie das Signal, ohne
   Rahmen. Fuer Reihen, in denen alle Werte denselben Informationstyp
   tragen und Luecken normal sind — ein gerahmter Kasten um ein "—"
   macht aus einer Luecke ein Objekt. */
.stat-row-flach{display:flex;flex-wrap:wrap;gap:var(--s-4) var(--s-6);
  margin:0 0 var(--s-4)}
/* flex:0 0 auto ist hier kein Detail: ohne die Sperre schrumpfen die
   Eintraege unter ihre Textbreite, und die Beschriftungen wurden
   abgeschnitten ("ANFRAGEN GESAM1"). Ein Wert, der seinen eigenen
   Namen abschneidet, ist keine Kennzahl mehr. */
/* `flex:0 0 auto` allein genuegt NICHT: die Box richtet sich nach dem
   Wert ("129"), nicht nach dem laengeren Label ("ZUGESTELLT"). Das
   Label lief mit nowrap darueber hinaus und wurde vom Nachbarn
   ueberdeckt — "ZUGESTELL1", "bEARBEITE1". Derselbe Fehler wie in
   Phase 2, diesmal an der Wurzel: `width:max-content` laesst die Box
   auf den laengsten Inhalt wachsen. */
.stat-row-flach .stat{background:none;border:0;padding:0;flex:0 0 auto;
  width:max-content;min-width:0}
.stat-row-flach .stat::before{display:none}
.stat-row-flach .stat-label{font-size:var(--t-micro);color:var(--laut-3);
  letter-spacing:.4px;white-space:nowrap}
/* Am Telefon ist `nowrap` falsch: sechs Werte nebeneinander lassen
   keiner Box genug Breite, und das Label wird abgeschnitten
   ("ZUGESTELL1"). Ein umgebrochenes Label ist lesbar, ein
   abgeschnittenes nicht. */
@media(max-width:520px){
  .stat-row-flach{gap:var(--s-3) var(--s-4)}
  .stat-row-flach .stat{width:auto;flex:1 1 8.5em;min-width:0}
  .stat-row-flach .stat-label{white-space:normal;line-height:1.3}
}
.stat-row-flach .stat-value{font:700 var(--t-h2)/1.1 var(--body);font-style:normal;
  letter-spacing:-.02em;margin-top:2px}
.stat-row-flach .stat-accent .stat-value{color:var(--ink)}
.stat-row-flach .stat-sub{font-size:var(--t-micro);margin-top:1px}

/* ── Rechnungsliste am Telefon ───────────────────────────────────────
   Sechs Spalten samt Aktionsknoepfen passen auf 390 px nicht nebeneinander.
   Seit Phase 1 scrollt die Tabelle wenigstens im eigenen Kasten statt die
   Seite zu sprengen — aber eine Tabelle, die man schieben muss, liest
   niemand: gemessen waren Kundennamen abgeschnitten und Status wie
   Handlungsbedarf lagen ausserhalb des Bildes.

   Sie stapelt jetzt, nach demselben Muster wie die Kundenliste. Eine
   Rechnung ist damit in einem Blick erfassbar: Nummer, Kunde, Betrag,
   Status, Faelligkeit, Handlung. */
@media(max-width:720px){
  .rechnungsliste{display:block;overflow-x:visible;min-width:0}
  .rechnungsliste thead{position:absolute;width:1px;height:1px;overflow:hidden;
    clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
  .rechnungsliste,.rechnungsliste tbody,.rechnungsliste tr,.rechnungsliste td{
    display:block;width:100%;white-space:normal}
  .rechnungsliste tbody tr{padding:var(--s-3) 0;border-top:1px solid var(--line-soft)}
  .rechnungsliste tbody tr:first-child{border-top:0}
  .rechnungsliste td{border:0;padding:0}
  .rechnungsliste td + td{margin-top:var(--s-1)}
  /* Betrag und Nummer tragen die Zeile — sie duerfen nicht in der
     Reihenfolge untergehen, in der die Tabelle sie liefert. */
  .rechnungsliste td:nth-child(1){font-weight:600;font-size:var(--t-body)}
  .rechnungsliste td:nth-child(4){text-align:left;font-weight:700;
    font-size:var(--t-h3);font-variant-numeric:tabular-nums;margin-top:var(--s-2)}
  .rechnungsliste td:nth-child(3){font-size:var(--t-small);color:var(--laut-2)}
  .rechnungsliste .row-actions{margin-top:var(--s-2);flex-wrap:wrap}
  .rechnungsliste .row-actions .btn{min-height:44px}
}

/* ── Recovery-Bereitschaft: drei Ebenen, drei Antworten ──────────────
   Technisch bereit / betrieblich freigegeben / aktiv sind DREI Fragen.
   Vorher standen sie als Fliesstext-Absaetze untereinander und lasen
   sich wie eine einzige Statusmeldung.

   Der haeufigste korrekte Zustand ist: technisch bereit, Policy offen,
   Rotation aus. Deshalb traegt "wartet auf Entscheidung" NEUTRAL — eine
   Ampel, die bei jedem richtigen Zustand gelb steht, wird nach einer
   Woche ignoriert. Orange bleibt dem echten Handlungsbedarf. */
.rec{margin:var(--s-5) 0 0}
.rec-titel{font:600 var(--t-body)/1.3 var(--body);margin:0 0 var(--s-3);
  letter-spacing:-.01em}
.rec-ebenen{display:flex;flex-direction:column}
.rec-ebene{display:grid;grid-template-columns:10px 1fr;gap:2px var(--s-3);
  padding:var(--s-3) 0;border-top:1px solid var(--line-soft)}
.rec-ebene:first-child{border-top:0}
.rec-marke{grid-column:1;grid-row:1/4;width:8px;height:8px;border-radius:50%;
  margin-top:5px;background:var(--unknown)}
.rec-ok .rec-marke{background:var(--ok)}
.rec-wartet .rec-marke{background:var(--neutral)}
.rec-offen .rec-marke{background:var(--warn)}
.rec-kopf{grid-column:2;grid-row:1;display:flex;align-items:baseline;
  gap:var(--s-2) var(--s-3);flex-wrap:wrap}
.rec-name{font-size:var(--t-body);font-weight:600}
.rec-wert{font-size:var(--t-small);color:var(--laut-2);font-variant-numeric:tabular-nums}
.rec-satz{grid-column:2;grid-row:2;font-size:var(--t-small);color:var(--laut-2);
  line-height:1.5;max-width:var(--maxw-lesen)}
.rec-beleg{grid-column:2;grid-row:3;font-size:var(--t-micro);color:var(--laut-3);
  margin-top:2px}
.rec-fuss{margin:var(--s-3) 0 0}
.rec-ci-aktion{display:flex;align-items:center;gap:.65rem;flex-wrap:wrap;margin-top:.75rem}

/* Projektkarte: was sich bewegt hat, nicht nur was geplant war.
   `still` kommt aus updatedAt — ein Projekt, das seit zwei Wochen
   unberuehrt ist, faellt auf, ohne dass eine Regel es melden muss. */
.proj-meta{display:flex;flex-wrap:wrap;gap:2px var(--s-3);margin-top:var(--s-1);
  font-size:var(--t-micro);color:var(--laut-3)}
.proj-still{color:var(--warn)}
.proj-folge{color:var(--laut-2)}

/* ── Automationen: nach Aufmerksamkeit, nicht nach Stufe ─────────────
   Elf Automationen standen in vier Stufengruppen, neun davon mit
   Status "unbekannt", jede in einer eigenen Karte — ein Katalog, keine
   Lage. Jetzt drei Gruppen in der Reihenfolge der Aufmerksamkeit.

   Was laeuft, tritt zurueck: kein gruener Badge-Zirkus, nur weniger
   Kontrast. Die Freigabestufe bleibt an jeder Zeile — sie ist der
   Sicherheitsvertrag und darf nicht mit der Gruppierung verschwinden. */
.auto-gruppe .os-auto{background:none;border:0;border-top:1px solid var(--line-soft);
  border-radius:0;padding:var(--s-3) 0;margin:0}
.auto-gruppe .os-auto:first-of-type{border-top:0}
.os-auto-stufe{font-size:var(--t-micro);color:var(--laut-3);white-space:nowrap;
  margin-left:auto;padding-left:var(--s-3)}
/* Gesunde Automationen duerfen leiser sein — sie brauchen nichts. */
.auto-laeuft .os-auto-name{font-weight:500}
.auto-laeuft .os-auto-zweck{color:var(--laut-3)}
/* Schmal: der Kopf muss umbrechen duerfen, sonst schiebt
   `margin-left:auto` die Freigabestufe ueber den umgebrochenen Namen.
   Bei 320 px lagen "Newsletter-Versand" und "gesperrt · 4 · verboten"
   uebereinander — unlesbar. Der Name nimmt die erste Zeile allein,
   Status und Stufe folgen darunter. */
@media(max-width:640px){
  .os-auto-kopf{flex-wrap:wrap;align-items:baseline;gap:4px 10px}
  .os-auto-name{flex:1 1 100%}
  .os-auto-stufe{margin-left:0;padding-left:0}
  .os-auto-chevron{margin-left:auto}
}

/* ── Kampagnendetail: Aussage vor Zahlen ─────────────────────────────
   Der Titel war die groesste Information, darunter sechs gleich grosse
   Kacheln. Jetzt: eine Aussage aus `wirkung`, dann dieselben Zahlen
   flach. "—" (nicht gemessen) und "0" (gemessen, keiner) duerfen dabei
   nie gleich aussehen — das erledigt die bestehende .stat-Semantik. */
.mk-sig{margin-bottom:var(--s-6)}
.mk-sig .stat-row-flach{margin-top:var(--s-5)}
/* "Nicht messbar" ist eine Eigenschaft der Datenlage, kein Fehler:
   ruhig, linksbuendig, ohne Warnfarbe. */
.mk-grenzen-liste{margin:0;padding-left:1.15rem;line-height:1.6;
  font-size:var(--t-small);color:var(--laut-2);max-width:var(--maxw-lesen)}
.mk-grenzen-liste li + li{margin-top:var(--s-2)}

/* ═══════════════════ VOICE COPILOT ═══════════════════
   V5-Regeln gelten unveraendert: Lime nur fuer Marke, Handlung und
   Auswahl. Der einzige bewegte Punkt ist die Aufnahmeanzeige — sie ist
   die Rueckmeldung, ohne die niemand einer offenen Leitung trauen sollte,
   und deshalb keine Dekoration. */
.vo-huelle{position:fixed;inset:0;z-index:120;display:flex;justify-content:flex-end}
.vo-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.55)}
.vo-drawer{position:relative;display:flex;flex-direction:column;width:min(460px,100%);
  height:100%;background:var(--bg-card);border-left:1px solid var(--line);
  padding:var(--s-5) var(--s-5) calc(var(--s-4) + env(safe-area-inset-bottom));gap:var(--s-3)}
/* Nex ist im Gespräch eine räumliche Präsenz, keine Status-Illustration.
   Die Größe bleibt stabil; Zustand und echter Audiopegel verändern nur
   Transform, Opazität und Licht. So entsteht weder Layout-Jump noch ein
   erfundener Equalizer. */
.vo-presence{position:relative;isolation:isolate;display:grid;place-items:center;
  min-height:clamp(210px,31vh,310px);overflow:hidden;perspective:900px;
  border-radius:24px;background:radial-gradient(circle at 50% 44%,rgba(184,232,52,.065),transparent 48%)}
.vo-presence-grid{position:absolute;inset:13%;z-index:-1;border-radius:50%;opacity:.5;
  border:1px solid rgba(184,232,52,.10);transform:rotateX(66deg) rotateZ(0deg);
  box-shadow:0 0 0 26px rgba(184,232,52,.025),0 0 0 52px rgba(184,232,52,.018);
  animation:vo-raum-drift 18s linear infinite}
@media (prefers-reduced-motion:reduce){.vo-presence-grid{animation:none}.vo-presence>.nx-orb{animation:none!important}.vo-signal-bars i{transition:none}}
.vo-presence>.nx-orb{--nx-size:clamp(152px,20vw,218px);z-index:1;display:grid;
  filter:drop-shadow(0 22px 28px rgba(0,0,0,.48));animation:vo-schweben 4.8s var(--nex-ease,ease) infinite}
.vo-presence-hoert>.nx-orb,.vo-presence-antwortet>.nx-orb{filter:drop-shadow(0 22px 32px rgba(184,232,52,.14))}
.vo-presence-versteht .vo-presence-grid{animation-duration:6s;opacity:.78}
.vo-signal-bars{position:absolute;left:50%;bottom:44px;z-index:2;display:flex;align-items:center;
  justify-content:center;gap:5px;width:110px;height:24px;transform:translateX(-50%)}
.vo-signal-bars i{display:block;width:3px;height:20px;border-radius:999px;background:rgba(218,228,214,.2);
  transform-origin:center;transition:transform 90ms linear,background .16s var(--nex-ease,ease),opacity .16s linear}
.vo-signal-bars i.is-active{background:var(--lime);opacity:.9;box-shadow:0 0 9px rgba(184,232,52,.24)}
.vo-presence-copy{position:absolute;left:18px;right:18px;bottom:10px;display:flex;align-items:baseline;
  justify-content:center;gap:8px;text-align:center;pointer-events:none}
.vo-presence-copy strong{font-size:.82rem;color:var(--ink)}
.vo-presence-copy span{font-size:.72rem;color:var(--muted)}
.vo-hat-verlauf .vo-presence{min-height:154px}
.vo-hat-verlauf .vo-presence>.nx-orb{--nx-size:112px}
.vo-hat-verlauf .vo-signal-bars{bottom:33px;transform:translateX(-50%) scale(.82)}
.vo-hat-verlauf .vo-presence-copy{bottom:4px}
@keyframes vo-schweben{0%,100%{transform:translate3d(0,-3px,0) rotateZ(-.4deg)}50%{transform:translate3d(0,5px,0) rotateZ(.4deg)}}
@keyframes vo-raum-drift{to{transform:rotateX(66deg) rotateZ(360deg)}}
@media(min-width:701px){
  .vo-huelle{justify-content:center;align-items:center;padding:24px}
  .vo-huelle>.vo-drawer{width:min(760px,100%);height:min(860px,calc(100vh - 48px));
    border:1px solid rgba(184,232,52,.16);border-radius:24px;background:rgba(9,14,10,.96);
    box-shadow:0 32px 90px rgba(0,0,0,.66)}
}
.vo-kopf{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s-3)}
.vo-kopf-links{display:flex;flex-direction:column;gap:2px;min-width:0}
.vo-zustand{display:flex;align-items:center;gap:8px;font-weight:600;font-size:var(--t-h3)}
.vo-zustand.vo-laut{color:var(--lime)}
.vo-zustand.vo-warn{color:var(--warn)}
.vo-punkt{width:9px;height:9px;border-radius:50%;background:var(--lime);
  animation:vo-atem 1.4s ease-in-out infinite}
@keyframes vo-atem{0%,100%{opacity:1}50%{opacity:.25}}
@media (prefers-reduced-motion:reduce){.vo-punkt{animation:none}}

.vo-info{margin:0;line-height:1.5}
.vo-verlauf{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--s-3);
  padding-right:4px;min-height:0}
.vo-leer{padding:var(--s-4) 0}
.vo-vorschlaege{list-style:none;margin:var(--s-2) 0 0;padding:0;display:flex;
  flex-direction:column;gap:6px}
.vo-vorschlag{background:none;border:none;border-bottom:1px solid var(--line-soft);
  color:var(--ink);text-align:left;padding:8px 0;width:100%;cursor:pointer;font-size:var(--t-small)}
.vo-vorschlag:hover{color:var(--lime)}

.vo-zeile{display:grid;grid-template-columns:34px 1fr;gap:var(--s-2);align-items:start}
.vo-wer{font-size:.7rem;letter-spacing:.5px;text-transform:uppercase;color:var(--muted);
  padding-top:3px}
.vo-inhalt{min-width:0}
.vo-text{margin:0;line-height:1.5}
.vo-du .vo-text{color:var(--muted)}
.vo-teil .vo-text{opacity:.7}
.vo-gesperrt{color:var(--warn)}

.vo-belege{margin-top:var(--s-2);padding-top:var(--s-2);border-top:1px solid var(--line-soft)}
.vo-belege-titel{display:block;font-size:.68rem;letter-spacing:.6px;text-transform:uppercase;
  color:var(--muted);margin-bottom:6px}
.vo-beleg{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;padding:3px 0;font-size:var(--t-small)}
.vo-beleg-was{flex:1;min-width:0}
.vo-beleg-wert{font-weight:600;white-space:nowrap}
.vo-beleg-quelle{font-size:.68rem;color:var(--unknown);font-family:var(--mono,monospace)}
.vo-oeffnen{margin-top:var(--s-2)}

.vo-entwurf{border:1px solid var(--line);border-left:2px solid var(--warn);
  border-radius:var(--r-control);padding:var(--s-3);background:var(--bg-2)}
.vo-entwurf-titel{display:block;font-size:.68rem;letter-spacing:.6px;text-transform:uppercase;
  color:var(--warn);margin-bottom:4px}
.vo-entwurf-text{margin:0 0 2px;font-weight:600}
.vo-entwurf-knoepfe{display:flex;gap:8px;margin-top:var(--s-2);flex-wrap:wrap}

.vo-hinweis{margin:0;font-size:var(--t-small);color:var(--warn)}
.vo-fuss{border-top:1px solid var(--line-soft);padding-top:var(--s-3)}
.vo-form{display:flex;gap:8px}
.vo-feld{flex:1;min-width:0}
.vo-mic,.vo-stop{flex:0 0 auto;min-height:44px;min-width:44px}
.vo-knopf{display:inline-flex;align-items:center;gap:6px}

@media (max-width:640px){
  .vo-drawer{width:100%;height:auto;max-height:92vh;margin-top:auto;
    border-left:none;border-top:1px solid var(--line);
    border-radius:var(--r) var(--r) 0 0}
  .vo-huelle{align-items:flex-end}
  /* Das Eingabefeld darf nicht unter der Bildschirmtastatur verschwinden:
     der Verlauf gibt Hoehe ab, die Fusszeile bleibt stehen. */
  .vo-verlauf{max-height:46vh}
  .vo-knopf-text{display:none}
}

/* ═══════════════════ VISUELLE GRUNDFORMEN ═══════════════════
   Sechs Formen, gemeinsame Farbsprache mit dem Rest von V5:
   Lime bleibt Marke und Handlung, --ok/--warn/--danger tragen den
   Zustand, --unknown heisst "nicht gemessen" und nie "null". */
.vz-rail{display:flex;flex-direction:column;gap:var(--s-2)}
.vz-rail-bar,.vz-anteil-bar{display:flex;width:100%;height:10px;border-radius:99px;
  overflow:hidden;background:var(--bg-2)}
.vz-seg{display:block;height:100%}
.vz-neutral{background:var(--neutral,#5B6560)}
.vz-ok{background:var(--ok)}
.vz-warn{background:var(--warn)}
.vz-danger{background:var(--danger)}
.vz-unknown{background:var(--unknown)}
.vz-lime{background:var(--lime)}

.vz-rail-legende{display:flex;flex-wrap:wrap;gap:var(--s-1) var(--s-4)}
.vz-leg{display:flex;align-items:baseline;gap:6px;font-size:var(--t-small)}
.vz-leg b{font-weight:600}
.vz-leg-label{color:var(--muted)}
.vz-punkt{width:8px;height:8px;border-radius:50%;flex:0 0 auto;
  align-self:center;display:inline-block}

.vz-anteil{display:flex;flex-direction:column;gap:4px}
.vz-anteil-text{line-height:1.4}

.vz-spark{display:inline-block;width:72px;vertical-align:middle;line-height:0}
.vz-spark-rauf{stroke:var(--ok)}
.vz-spark-runter{stroke:var(--warn)}
.vz-kein-verlauf{font-style:italic;color:var(--unknown)}

.vz-status{list-style:none;margin:0;padding:0}
.vz-status-zeile{display:flex;align-items:center;gap:var(--s-2);
  padding:9px 0;border-bottom:1px solid var(--line-soft)}
.vz-status-zeile:last-child{border-bottom:0}
.vz-status-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vz-status-wert{font-variant-numeric:tabular-nums;font-size:var(--t-small);white-space:nowrap}
.vz-status-spark{flex:0 0 auto}

.vz-funnel{display:flex;flex-direction:column;gap:var(--s-2)}
.vz-stufe{display:grid;grid-template-columns:minmax(80px,auto) 1fr auto;
  gap:var(--s-2);align-items:center}
.vz-stufe-label{font-size:var(--t-small);color:var(--muted)}
.vz-stufe-bar{display:flex;height:10px;border-radius:99px;background:var(--bg-2);overflow:hidden}
.vz-stufe-wert{font-variant-numeric:tabular-nums;font-size:var(--t-small);text-align:right}
/* Die Luecke ist der Inhalt: gestrichelt heisst "hier wird nicht
   gemessen" und ist bewusst KEIN Balken der Laenge null. */
.vz-luecke{display:block;width:100%;height:100%;
  background:repeating-linear-gradient(90deg,var(--unknown) 0 3px,transparent 3px 8px);
  opacity:.5}
.vz-stufe-luecke .vz-stufe-wert{color:var(--unknown)}

.vz-pegel{display:inline-flex;gap:2px;align-items:flex-end;height:14px}
.vz-pegel-seg{width:3px;height:100%;border-radius:1px;background:var(--bg-2)}
.vz-pegel-an{background:var(--lime)}

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

@media (max-width:520px){
  .vz-stufe{grid-template-columns:1fr auto;grid-template-areas:"l w" "b b"}
  .vz-stufe-label{grid-area:l}
  .vz-stufe-wert{grid-area:w}
  .vz-stufe-bar{grid-area:b}
  .vz-rail-legende{gap:var(--s-1) var(--s-3)}
}
.sig-konzentration{margin-top:var(--s-3);padding-top:var(--s-3);
  border-top:1px solid var(--line-soft);max-width:640px}
.fin-entwurf{margin:var(--s-2) 0 0;padding-left:var(--s-3);
  border-left:2px solid var(--warn)}

/* Ausgefuehrte Aenderung mit Rueckweg. Vorher/Nachher steht als Text da,
   nicht nur als Zusage — "geaendert" allein ist nicht pruefbar. */
.vo-getan{border:1px solid var(--line);border-radius:var(--r-control);
  padding:var(--s-3);background:var(--bg-2)}
.vo-getan-kopf{display:flex;align-items:center;justify-content:space-between;
  gap:var(--s-2);flex-wrap:wrap}
.vo-getan-titel{font-weight:600;color:var(--ok)}
.vo-diff{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;
  margin-top:var(--s-2);font-size:var(--t-small)}
.vo-diff-was{font-weight:600}
.vo-diff-feld{color:var(--muted)}
.vo-diff-alt{color:var(--unknown);text-decoration:line-through}
.vo-diff-pfeil{color:var(--muted)}
.vo-diff-neu{font-weight:600}

/* ═══════════════════ ANMELDUNG ═══════════════════
   Zwei Zonen: links ordnet sich die Struktur, rechts steht das
   Formular. Bewusst KEINE Karte auf dunklem Grund — der Login ist
   kein Dialog ueber der Anwendung, er ist der Eingang. */
.anm{position:fixed;inset:0;display:grid;grid-template-columns:1fr minmax(340px,38%);
  background:var(--bg);overflow:hidden}
.anm-buehne{position:relative;overflow:hidden;opacity:0;transition:opacity .9s ease}
.anm-buehne-an{opacity:1}
.anm-canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
/* Die Bahnenlegende traegt die Aussage auch ohne WebGL: wer die Szene
   nicht sieht, liest trotzdem, worum es geht. */
.anm-bahnen{position:absolute;left:var(--s-6);bottom:var(--s-6);display:flex;
  flex-wrap:wrap;gap:var(--s-1) var(--s-4)}
.anm-bahn{display:inline-flex;align-items:center;gap:7px;font-size:var(--t-small);
  color:var(--muted)}
.anm-bahn i{width:7px;height:7px;border-radius:50%;display:inline-block}

.anm-block{display:flex;flex-direction:column;justify-content:center;
  gap:var(--s-3);padding:var(--s-6) var(--s-6) calc(var(--s-6) + env(safe-area-inset-bottom));
  border-left:1px solid var(--line);background:var(--bg-card);
  overflow-y:auto}
.anm-marke{display:flex;align-items:center;gap:10px}
.anm-marke .brand-mark{margin-right:2px}
.anm-titel{margin:var(--s-4) 0 0;font-family:var(--display,inherit);
  font-size:clamp(2rem,4vw,2.9rem);line-height:1;letter-spacing:-.01em}
.anm-unter{margin:6px 0 var(--s-4);color:var(--muted)}
.anm-feld{display:flex;flex-direction:column;gap:5px}
.anm-feld > span{font-size:.72rem;letter-spacing:.6px;text-transform:uppercase;
  color:var(--muted)}
.anm-knopf{margin-top:var(--s-2);min-height:46px}
.anm-fuss{margin:var(--s-3) 0 0}

@media (max-width:900px){
  /* Auf dem Telefon zuerst das Formular: die Szene wird zur schmalen
     Kopfzone und bekommt keine halbe Bildschirmhoehe. */
  .anm{grid-template-columns:1fr;grid-template-rows:32vh 1fr}
  .anm-block{border-left:none;border-top:1px solid var(--line)}
  .anm-bahnen{left:var(--s-4);bottom:var(--s-3);gap:4px var(--s-3)}
  .anm-titel{font-size:2rem}
}
@media (max-width:360px){
  .anm{grid-template-rows:24vh 1fr}
  .anm-bahnen{display:none}
}
@media (prefers-reduced-motion:reduce){
  .anm-buehne{opacity:1;transition:none}
}
/* Die Rail gibt den Ueberblick, die Detailliste die Herkunft. Sie ist
   deshalb ruhiger gesetzt und beginnt erst nach etwas Abstand. */
.int-detail{margin-top:var(--s-4);padding-top:var(--s-3);
  border-top:1px solid var(--line-soft)}
.kd-geld{margin-top:var(--s-4);padding-top:var(--s-3);
  border-top:1px solid var(--line-soft);max-width:680px}
.kd-geld-titel{display:block;font-size:.68rem;letter-spacing:.6px;
  text-transform:uppercase;color:var(--muted);margin-bottom:var(--s-2)}
.vo-zustand .vz-pegel{margin-left:8px}

/* Answer Hero: der Betrag traegt, der Satz erklaert. Nur wenn ein
   Beleg wirklich einen Betrag fuehrt — sonst bleibt es beim Satz. */
.vo-held{display:flex;flex-direction:column;gap:2px}
.vo-held-zahl{font-family:var(--display,inherit);font-size:clamp(1.6rem,5vw,2.2rem);
  line-height:1.05;letter-spacing:-.01em}
.vo-held-satz{margin:0;color:var(--muted);line-height:1.45}

/* Kampagnenwirkung: Mengen als Kette, Geld getrennt darunter — Euro und
   Anzahl gehoeren nicht in denselben Balken. */
.wk-geld{display:flex;flex-wrap:wrap;gap:var(--s-1) var(--s-4);
  margin-top:var(--s-3);padding-top:var(--s-2);border-top:1px solid var(--line-soft)}
.wk-geld-teil{display:inline-flex;align-items:baseline;gap:6px;font-size:var(--t-small)}
.wk-geld-teil b{font-weight:600}
.wk-belege{margin:var(--s-2) 0 0;font-size:.7rem;color:var(--unknown);
  font-family:var(--mono,monospace)}
.rec-technisch{margin-bottom:var(--s-3)}
.rec-gruppe{display:block;font-size:.68rem;letter-spacing:.6px;
  text-transform:uppercase;color:var(--muted);margin-bottom:6px}

/* ═══════════════════ VOICE ORB + MOBILE ASSISTANT ═══════════════════
   Auf dem Telefon ist Voice kein Beiwerk am Rand, sondern die
   Bedienebene. Deshalb hier Vollbild statt Drawer — und ein Orb, der
   den Zustand traegt, damit man ihn nicht lesen muss.

   Der Orb bewegt sich NUR mit echtem Pegel (.vo-orb-misst). Ohne
   Messwert bleibt er ruhig: eine Animation ohne Signal wuerde ein
   Mikrofon behaupten, das niemand geprueft hat. */
.vo-orb{display:none;place-items:center;position:relative;
  width:132px;height:132px;margin:var(--s-4) auto var(--s-3)}
/* Presence V4: kontrollierte Aura hinter allem — sehr ruhig, kein Pumpen.
   Sie traegt die Marke, nicht das Signal (das machen die Wellen). */
.vo-orb::before{content:"";position:absolute;top:50%;left:50%;
  width:168%;height:168%;translate:-50% -50%;border-radius:50%;pointer-events:none;
  background:
    radial-gradient(circle at 50% 42%,rgba(184,232,52,.13),rgba(184,232,52,.035) 44%,transparent 68%),
    radial-gradient(circle at 50% 78%,rgba(120,180,40,.05),transparent 55%);
  opacity:.6;transition:opacity var(--nex-state,.55s) var(--nex-ease,ease)}
.vo-orb-ring,.vo-orb-kern{position:absolute;border-radius:50%;
  top:50%;left:50%;translate:-50% -50%}
/* Ring: raeumliche Tiefe aus geschichteten Radialen statt einem flachen Kreis. */
.vo-orb-ring{width:132px;height:132px;border:1px solid rgba(184,232,52,.14);
  background:
    radial-gradient(circle at 50% 38%,rgba(184,232,52,.10),transparent 60%),
    radial-gradient(circle at 68% 72%,rgba(184,232,52,.05),transparent 42%),
    radial-gradient(circle at 30% 66%,rgba(120,180,40,.045),transparent 40%);
  box-shadow:inset 0 0 26px rgba(184,232,52,.05);
  transition:transform .09s linear}
/* Nex V6 Nodes: feine Partikel, die als Präsenz SEHR langsam orbitieren —
   kein Alarm-Puls, nur „anwesend" (§6/§8). Bei reduced-motion still. */
@keyframes nex-orbit{to{transform:rotate(360deg)}}
.vo-orb-ring::after{content:"";position:absolute;inset:0;border-radius:50%;pointer-events:none;
  background:
    radial-gradient(1.5px 1.5px at 28% 30%,rgba(184,232,52,.50),transparent),
    radial-gradient(1.5px 1.5px at 72% 34%,rgba(184,232,52,.34),transparent),
    radial-gradient(1.5px 1.5px at 40% 66%,rgba(184,232,52,.40),transparent),
    radial-gradient(1.5px 1.5px at 64% 70%,rgba(184,232,52,.28),transparent),
    radial-gradient(1.2px 1.2px at 50% 22%,rgba(184,232,52,.30),transparent),
    radial-gradient(1.2px 1.2px at 22% 52%,rgba(184,232,52,.22),transparent),
    radial-gradient(1.2px 1.2px at 80% 58%,rgba(184,232,52,.20),transparent);
  opacity:.72;will-change:transform;animation:nex-orbit 42s linear infinite}
@media (prefers-reduced-motion:reduce){ .vo-orb-ring::after{animation:none} }
/* Inneres Glas: eine zweite, kleinere Lichtschicht im Kern — Materialtiefe. */
.vo-orb-kern::before{content:"";position:absolute;inset:0;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle at 50% 32%,rgba(230,250,180,.10),transparent 42%);
  mix-blend-mode:screen}
/* Kern: tiefe dunkle Kugel mit innerem Lime-Rand — nicht flach. Nex V5:
   ein feines Specular oben lässt die Kugel als Körper wirken (Lichtbrechung),
   nicht als Scheibe. Kein zusätzliches Leuchten — nur Tiefe. */
.vo-orb-kern{width:56px;height:56px;
  background:
    radial-gradient(circle at 50% 27%,rgba(206,244,140,.14),rgba(206,244,140,0) 30%),
    radial-gradient(circle at 50% 36%,#1c2718,#0b0f08 72%);
  border:1px solid rgba(184,232,52,.22);
  box-shadow:inset 0 1px 8px rgba(0,0,0,.6),inset 0 0 14px rgba(184,232,52,.06),inset 0 2px 5px rgba(184,232,52,.08),0 4px 16px rgba(0,0,0,.45);
  transition:background .25s,border-color .25s,box-shadow .25s}

/* Konzentrische Lime-Schichten: reagieren NUR mit echtem Pegel (Skala und
   Deckkraft kommen inline aus wellen()). Bei Stille steht Deckkraft 0 —
   sie sind dann nicht da, nicht nur ruhig. Gleiche Zentrierung wie Ring. */
.vo-orb-welle{position:absolute;top:50%;left:50%;translate:-50% -50%;
  width:132px;height:132px;border-radius:50%;border:1px solid var(--lime);
  background:transparent;pointer-events:none;opacity:0;
  transition:transform .09s linear,opacity .12s linear}
.vo-orb-welle-2{border-color:rgba(184,232,52,.60)}
.vo-orb-welle-3{border-color:rgba(184,232,52,.38)}
@media (prefers-reduced-motion:reduce){
  .vo-orb-welle{transition:none;opacity:0 !important}
}

.vo-orb-hoert .vo-orb-kern{background:radial-gradient(circle at 50% 36%,#2a3a18,#0e140a 72%);
  border-color:var(--lime);
  box-shadow:inset 0 1px 8px rgba(0,0,0,.5),inset 0 0 16px rgba(184,232,52,.22),0 0 22px rgba(184,232,52,.18)}
.vo-orb-hoert::before{opacity:1}
.vo-orb-antwortet .vo-orb-kern{background:radial-gradient(circle at 50% 36%,#243218,#0c110a 72%);
  border-color:var(--lime);
  box-shadow:inset 0 0 16px rgba(184,232,52,.18),0 0 18px rgba(184,232,52,.14)}
.vo-orb-antwortet::before{opacity:.9}
.vo-orb-versteht .vo-orb-kern{border-color:rgba(184,232,52,.5)}
.vo-orb-bestaetigen .vo-orb-kern{border-color:var(--warn)}
.vo-orb-erledigt .vo-orb-kern{border-color:var(--ok);
  box-shadow:inset 0 0 14px rgba(184,232,52,.10),0 0 20px rgba(126,217,87,.25)}
.vo-orb-fehler .vo-orb-kern{border-color:var(--danger)}

/* "Denkt nach" hat keinen Pegel — hier ist Bewegung ehrlich, weil sie
   Verarbeitung zeigt und nicht Ton behauptet. */
@keyframes vo-denkt{0%,100%{opacity:.35}50%{opacity:.85}}
.vo-orb-versteht .vo-orb-ring{animation:vo-denkt 1.8s ease-in-out infinite}
/* Denken: die Nodes rotieren spürbar schneller — sie ordnen sich, statt still
   zu stehen. Ehrlich, weil „versteht" ein echter Verarbeitungszustand ist. */
.vo-orb-versteht .vo-orb-ring::after{animation-duration:7s}
/* Denken: der Kern zieht die innere Energie leicht zusammen (nach innen). */
@keyframes nex-denkt-kern{0%,100%{box-shadow:inset 0 1px 8px rgba(0,0,0,.6),inset 0 0 14px rgba(184,232,52,.10),0 4px 16px rgba(0,0,0,.45)}
  50%{box-shadow:inset 0 1px 8px rgba(0,0,0,.6),inset 0 0 20px rgba(184,232,52,.22),0 4px 16px rgba(0,0,0,.45)}}
.vo-orb-versteht .vo-orb-kern{animation:nex-denkt-kern 1.8s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){ .vo-orb-versteht .vo-orb-kern{animation:none} }

@media (prefers-reduced-motion:reduce){
  .vo-orb-ring{transition:none;animation:none !important}
}

/* ── Assistant Mode: alles unter 700px ── */
@media (max-width:700px){
  .vo-huelle{justify-content:stretch}
  .vo-backdrop{display:none}
  .vo-drawer{width:100%;max-width:none;border-radius:0;border-left:0;
    padding-top:max(var(--s-4),env(safe-area-inset-top));
    padding-bottom:max(var(--s-4),env(safe-area-inset-bottom));
    padding-left:max(var(--s-4),env(safe-area-inset-left));
    padding-right:max(var(--s-4),env(safe-area-inset-right))}
  .vo-orb{display:grid}
  .vo-drawer>.nx-orb{--nx-size:148px;display:grid;margin:var(--s-4) auto var(--s-3)}
  .vo-drawer>.nx-orb .nx-orbit-node{width:7px;height:7px}
  /* Der Hinweis zum Mikrofon gehoert auf dem Telefon unter den Orb,
     nicht ueber den halben Schirm. */
  .vo-info{font-size:.72rem;line-height:1.45;text-align:center;
    max-width:30ch;margin-inline:auto}
  .vo-kopf-links .muted{display:none}
  .vo-zustand{font-size:.95rem;font-weight:600}
  /* Fingerziele: nichts unter 44px. */
  .vo-drawer .btn,.vo-drawer button{min-height:44px}
  /* §7 Der Composer reitet über der Tastatur: --kb-inset kommt aus
     app-mobile-kb.js (visualViewport). Ohne Tastatur ist es 0 — dann
     sitzt der Footer wie bisher unten. transform statt Layout = kein Jump. */
  .vo-fuss{position:sticky;bottom:0;background:var(--bg);z-index:2;
    padding-bottom:max(var(--s-2),env(safe-area-inset-bottom));
    transform:translateY(calc(-1 * var(--kb-inset, 0px)));
    transition:transform .18s ease}
}

.vo-scope{display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;
  margin:0 auto var(--s-3);max-width:680px;color:var(--muted);font-size:.7rem}
.vo-scope span{padding:4px 8px;border:1px solid var(--line-soft);border-radius:999px;
  background:rgba(12,17,13,.72)}
.vo-scope .vo-scope-kern{color:var(--lime);border-color:rgba(184,232,52,.28);
  background:rgba(184,232,52,.07);font-weight:650}
@media(min-width:701px){.vo-scope{justify-content:flex-start;margin-left:0}}
@media (max-width:700px) and (prefers-reduced-motion:reduce){
  .vo-fuss{transition:none}
}

/* ═══════════════════ ASSISTENT ALS EBENE ═══════════════════
   Marc steht dauerhaft im Bild, traegt sichtbar seinen Namen und laesst
   sich frei ziehen (v8.15). Die Farbe ist der echte Marken-Lime #B8E834
   aus --lime — kein neuer Gruenton. Tiefe entsteht aus drei Lime-Stufen
   (--lime / --lime-soft / --lime-deep) ueber einem dunklen Kern, nicht
   aus einer zweiten Farbe.

   Position kommt aus dem Skript (left/top, geklemmt). Die CSS-Werte fuer
   right/bottom sind nur der Startplatz vor dem ersten Rendern; danach
   gewinnt das Inline-Style. Der Orb ist position:fixed und damit aus dem
   Fluss — sein Verschieben laesst nichts anderes neu umbrechen. */
/* Freie Präsenz statt Widget: kein Container, kein Rahmen, kein Namensschild.
   Sichtbar ist nur der Orbit selbst — die Fläche darum bleibt unsichtbar und
   dient allein als Trefferfläche (mind. 44px, WCAG 2.5.5). Grün wirkt als
   Energie aus dem Kern, nicht als Fläche. */
.dhs-orb{position:fixed;z-index:60;display:grid;place-items:center;
  padding:0;border-radius:50%;
  background:none;border:0;box-shadow:none;
  min-width:44px;min-height:44px;
  cursor:grab;touch-action:none;
  right:max(var(--s-4,16px),env(safe-area-inset-right));
  bottom:max(var(--s-4,16px),env(safe-area-inset-bottom));
  transition:border-color var(--nex-normal,.28s) var(--nex-ease,ease),
             box-shadow var(--nex-normal,.28s) var(--nex-ease,ease),
             padding var(--nex-state,.55s) var(--nex-ease-out,ease),
             opacity var(--nex-fast,.14s) ease,transform var(--nex-fast,.14s) ease;
  will-change:left,top}
.dhs-orb:active{cursor:grabbing}
.dhs-orb:hover{border-color:transparent}
.dhs-orb:focus-visible{outline:2px solid var(--lime);outline-offset:6px;border-radius:50%}
/* Nur bei echtem Hover (nicht auf Touch, wo :hover kleben bleibt): Marc
   hebt sich beim Darueberfahren leicht und leuchtet staerker — die Praesenz
   antwortet auf Naehe, ohne dass man klickt. */
@media(hover:hover){
  .dhs-orb:hover{transform:translateY(-1px);
    box-shadow:0 0 0 1px rgba(184,232,52,.16),
               0 14px 34px rgba(0,0,0,.50),
               inset 0 0 24px rgba(184,232,52,.30)}
}

/* Der runde Orbkoerper. Groesser als bisher — 60px Kugel, Gesamthoehe
   ~76px. Auf dem Telefon etwas kompakter. */
.dhs-orb .vo-orb{display:grid;width:60px;height:60px;transform:scale(.40);flex:0 0 auto}

/* Die freie Praesenz darf groesser sein als der alte Pill-Orbit (52px), ohne
   zu dominieren. clamp bindet sie an die Viewportbreite statt an einen
   festen Wert. Die Trefferflaeche darum bleibt unsichtbar. */
.dhs-orb .nx-orb{--nx-size:clamp(72px, 6.2vw, 92px)}

/* Das Namensschild. "Nex" als Wortmarke, der Zustand klein darunter — so ist
   er nicht nur ein Kreis, sondern eine benannte Ebene (Nex V5: die Wortmarke
   trägt etwas mehr Gewicht und Sperrung, damit sie als Produkt liest). */
/* Das Namensschild entfaellt in der freien Praesenz. Der Zustand bleibt
   ueber .dhs-orb-status hoerbar — nur die sichtbare Wortmarke geht weg. */
.dhs-orb-label{display:none}
.dhs-orb-label b{font-size:.92rem;font-weight:700;letter-spacing:.055em;
  color:var(--text,#EAF2E6)}
.dhs-orb-label i{font-size:.72rem;font-style:normal;letter-spacing:.01em;
  color:var(--lime-soft,#8FB02E)}

/* Der Zustandstext fuer Screenreader — optisch weg, aber vorlesbar.
   clip statt display:none, sonst hoert ihn niemand. */
.dhs-orb-status{position:absolute;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}

/* Zustaende: die Randfarbe traegt die Bedeutung, der Lime bleibt die
   Identitaet. Der Fehlerzustand faerbt NICHT den ganzen Orb rot — nur
   der Rand signalisiert, der Text sagt den Rest. */
.dhs-orb-hoert{border-color:var(--lime);box-shadow:0 0 0 1px rgba(184,232,52,.18),
  0 10px 28px rgba(0,0,0,.42),inset 0 0 22px rgba(184,232,52,.34)}
.dhs-orb-versteht,.dhs-orb-antwortet{border-color:var(--lime)}
.dhs-orb-bestaetigen{border-color:var(--warn)}
.dhs-orb-bestaetigen .dhs-orb-label i{color:var(--warn)}
/* §C7 Erfolg: EIN kurzer, kontrollierter Lime-Puls (zwei Zyklen), dann
   wieder ruhig — kein Dauerblinken. Lime bleibt die Identität. */
@keyframes dhs-erledigt-puls{
  0%,100%{box-shadow:0 0 0 1px rgba(184,232,52,.10),0 10px 28px rgba(0,0,0,.42),inset 0 0 18px rgba(184,232,52,.20)}
  35%{box-shadow:0 0 0 2px rgba(184,232,52,.55),0 10px 28px rgba(0,0,0,.42),0 0 24px rgba(184,232,52,.42),inset 0 0 22px rgba(184,232,52,.38)}
}
.dhs-orb-erledigt{border-color:var(--ok);animation:dhs-erledigt-puls 1.05s ease-out 2}
.dhs-orb-erledigt .dhs-orb-label i{color:var(--ok)}
@media (prefers-reduced-motion:reduce){ .dhs-orb-erledigt{animation:none !important} }
.dhs-orb-fehler{border-color:var(--danger)}
.dhs-orb-fehler .dhs-orb-label i{color:var(--danger)}

/* Ruhe heisst Ruhe — der Kern atmet kaum sichtbar, der Knopf selbst
   bleibt still, damit das Atmen die per left/top gesetzte Position nicht
   stoert. */
@keyframes dhs-orb-atmen{0%,100%{transform:scale(.40)}50%{transform:scale(.428)}}
.dhs-orb-bereit .vo-orb{animation:dhs-orb-atmen 5.5s ease-in-out infinite}

/* Ist die Flaeche offen, tritt der Orb zurueck: er waere sonst ein
   zweiter Einstieg neben dem, der schon offen steht. */
.dhs-orb-offen{opacity:0;pointer-events:none}

/* Telefon: kompakter, nur der Orb — das Namensschild kostet dort zu viel
   Breite. Der Startplatz sitzt ueber der unteren Leiste; ziehen darf
   Kevin ihn trotzdem ueberallhin. */
@media(max-width:860px){
  .dhs-orb{padding:0;border-radius:50%;
    bottom:calc(64px + env(safe-area-inset-bottom) + var(--s-3,12px))}
  .dhs-orb .nx-orb{--nx-size:clamp(60px, 15vw, 74px)}
  .dhs-orb .vo-orb{width:56px;height:56px}
  .dhs-orb-label{display:none}
}

@media (prefers-reduced-motion:reduce){
  .dhs-orb,.dhs-orb-bereit .vo-orb{animation:none !important;transition:none}
}

/* ═══════════════════ MARC ARBEITSPLAN ═══════════════════
   "Kümmer dich um X" macht Marc sichtbar arbeiten. Kein Chattext, kein
   Markdown: eine Schrittliste, in der jede Zeile ihren echten Status
   traegt. Der Lime bleibt die Marke; der uebersprungene Schritt ist
   gedaempft, nicht rot — er ist kein Fehler. */
/* §14 Work Surface: beim Arbeiten prominenter als normaler Gesprächstext —
   Lime-Kante links, erhöhter Grund, feiner Schein. Kein neues Timing; der
   Puls hängt am echten „running"-Status eines Schritts (§16). */
.vo-plan{margin:12px 0;padding:14px 16px;border:1px solid rgba(184,232,52,.22);
  border-radius:var(--r-control,10px);
  background:linear-gradient(180deg,rgba(184,232,52,.06),rgba(184,232,52,0) 55%),var(--bg-2,#0F1411);
  box-shadow:0 1px 0 rgba(184,232,52,.10),0 8px 24px rgba(0,0,0,.26)}
.vo-plan-titel{display:flex;align-items:center;gap:7px;font-size:.72rem;letter-spacing:1.6px;
  text-transform:uppercase;color:var(--lime,#B8E834);font-weight:700;margin-bottom:8px}
.vo-plan-titel::before{content:"";width:7px;height:7px;border-radius:50%;
  background:var(--lime,#B8E834);box-shadow:0 0 8px rgba(184,232,52,.7)}
.vo-plan:has(.vo-plan-running) .vo-plan-titel::before{animation:vo-plan-puls 1.4s ease-in-out infinite}
@keyframes vo-plan-puls{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.7)}}
@media (prefers-reduced-motion:reduce){.vo-plan:has(.vo-plan-running) .vo-plan-titel::before{animation:none}}
.vo-plan-schritt{display:grid;grid-template-columns:18px auto 1fr;gap:8px;
  align-items:baseline;padding:4px 0;font-size:.88rem}
.vo-plan-icon{font-weight:700;text-align:center}
.vo-plan-label{color:var(--text,#EAF2E6)}
.vo-plan-ergebnis{color:var(--muted,#9AA39A);font-size:.8rem;text-align:right}
.vo-plan-success .vo-plan-icon{color:var(--lime,#B8E834)}
/* §26 Running-Step: der aktive Schritt bekommt eine feine Signal-Kante links,
   über die ganz langsam Licht wandert — „Energie fließt", kein Spinner. Nur am
   ECHTEN running-Schritt (hängt am Status, täuscht keinen Fortschritt vor §27). */
.vo-plan-running{position:relative;background:rgba(184,232,52,.07);border-radius:7px;
  padding-left:6px;overflow:hidden}
.vo-plan-running::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;
  background:linear-gradient(180deg,transparent,var(--lime,#B8E834),transparent);
  background-size:100% 200%;animation:nex-signal 1.6s linear infinite}
@keyframes nex-signal{0%{background-position:0 -100%}100%{background-position:0 100%}}
@media (prefers-reduced-motion:reduce){.vo-plan-running::before{animation:none;background:var(--lime,#B8E834)}}
.vo-plan-running .vo-plan-label{color:var(--text,#EAF2E6);font-weight:600}
.vo-plan-running .vo-plan-icon{color:var(--lime,#B8E834)}
.vo-plan-skipped{opacity:.55}
.vo-plan-skipped .vo-plan-icon{color:var(--muted,#9AA39A)}
.vo-plan-blocked .vo-plan-icon{color:var(--warn)}
.vo-plan-failed .vo-plan-icon{color:var(--danger)}

/* Marc-Hinweis-Badge — ein dezenter Punkt am Orb, kein Dauerblinken.
   Lime wie die Marke; die Zahl steht auch im aria-label. */
/* Signal auf dem Orbit, kein Chip daneben. Die alte Groesse war fuer den
   Pill-Container gedacht; auf der freien Praesenz wuerde sie als eigenes
   UI-Element lesen. Kleiner, dunkler Ring statt heller Flaeche — der Orbit
   bleibt das Auffaellige. Erscheint weiterhin NUR bei echten proaktiven
   Hinweisen (critical/action_needed), nie im blossen Bereit-Zustand. */
.dhs-orb-badge{position:absolute;top:6%;right:6%;min-width:15px;height:15px;
  padding:0 3px;display:grid;place-items:center;border-radius:8px;
  background:var(--lime,#B8E834);color:#0A0D0B;font-size:.58rem;font-weight:700;
  line-height:1;box-shadow:0 0 0 2px rgba(10,13,11,.9);
  animation:dhs-badge-auf .28s ease-out}
/* Nur ein Erscheinen, keine Endlosschleife: das Badge taucht auf, wenn ein
   Hinweis dazukommt, und bleibt dann ruhig — Signal, kein Blinken. */
@keyframes dhs-badge-auf{from{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}
@media (prefers-reduced-motion:reduce){ .dhs-orb-badge{animation:none} }
@media(max-width:860px){ .dhs-orb-badge{top:0;right:0} }

/* ═══════════════════ KALENDER (iCloud „360") ═══════════════════
   Woche als Hauptansicht, dazu Heute und Agenda. Dark/lime, ruhig —
   keine Standardkalender-Kartenwand. Termine tragen eine Lime-Tönung und
   einen vollen Rahmen (bewusst KEINE seitliche Akzentkante). */
.kal-wrap{padding:var(--s-4,16px);max-width:1100px;margin-inline:auto}
.kal-kopf{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px}
.kal-kopf h1{font-size:1.4rem;font-weight:650;margin:0;margin-right:auto;color:var(--text,#EAF2E6)}
.kal-tabs{display:inline-flex;gap:2px;background:var(--bg-2,#0F1411);border:1px solid var(--line);
  border-radius:var(--r-control,10px);padding:3px}
.kal-tab{border:0;background:transparent;color:var(--muted,#9AA39A);font-size:.85rem;font-weight:600;
  padding:6px 14px;border-radius:8px;cursor:pointer;min-height:36px}
.kal-tab-aktiv{background:rgba(184,232,52,.16);color:var(--lime,#B8E834)}
.kal-nav{display:inline-flex;align-items:center;gap:4px}
.kal-pfeil,.kal-heute-btn{border:1px solid var(--line);background:var(--bg-2,#0F1411);
  color:var(--text,#EAF2E6);border-radius:8px;min-height:36px;padding:0 12px;cursor:pointer;font-size:.85rem}
.kal-pfeil{width:36px;padding:0;font-size:1.1rem;line-height:1}
.kal-heute-btn:hover,.kal-pfeil:hover{border-color:var(--lime,#B8E834)}

.kal-woche{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}
.kal-spalte{background:var(--bg-2,#0F1411);border:1px solid var(--line);border-radius:var(--r-control,10px);
  padding:8px;min-height:120px;display:flex;flex-direction:column;gap:6px}
.kal-spalte-kopf{display:flex;justify-content:space-between;align-items:baseline;
  padding-bottom:6px;border-bottom:1px solid var(--line)}
.kal-spalte-kopf b{font-size:.8rem;color:var(--text,#EAF2E6)}
.kal-spalte-kopf i{font-size:.72rem;font-style:normal;color:var(--muted,#9AA39A)}
.kal-heute{border-color:var(--lime,#B8E834)}
.kal-heute .kal-spalte-kopf b,.kal-agenda-datum.kal-heute{color:var(--lime,#B8E834)}
.kal-spalte-leer{color:var(--muted,#9AA39A);font-size:.8rem;text-align:center;padding-top:8px}

.kal-termin{display:flex;flex-direction:column;gap:2px;padding:6px 8px;border-radius:8px;
  background:rgba(184,232,52,.10);border:1px solid rgba(184,232,52,.28)}
.kal-termin-ganz{background:var(--bg-3,#182019);border-color:var(--line)}
.kal-zeit{font-size:.68rem;color:var(--lime-soft,#8FB02E);font-weight:600}
.kal-titel{font-size:.82rem;color:var(--text,#EAF2E6);line-height:1.25}
.kal-ort{font-size:.7rem;color:var(--muted,#9AA39A)}

.kal-heute-liste,.kal-agenda{display:flex;flex-direction:column;gap:14px}
.kal-agenda-tag{display:flex;flex-direction:column;gap:6px}
.kal-agenda-datum{font-size:.8rem;font-weight:650;color:var(--text,#EAF2E6);
  text-transform:uppercase;letter-spacing:.5px}
.kal-leer{color:var(--muted,#9AA39A);font-size:.9rem;line-height:1.5;padding:24px;text-align:center;
  border:1px dashed var(--line);border-radius:var(--r-control,10px);max-width:52ch;margin:24px auto}

@media(max-width:860px){
  .kal-woche{grid-template-columns:repeat(7,minmax(120px,1fr));overflow-x:auto;padding-bottom:8px}
}

/* ══ V12 — Marc als Primärfunktion: Nav-Eintrag + Home ══════════════
   Innerhalb der bestehenden DHS-Sprache (dark/lime, #B8E834). Keine
   einseitigen Akzentränder; Lime als Präsenz, nicht als Alarm. */
.nav-item-marc{color:var(--ink);font-weight:600}
.nav-item-marc svg{color:var(--lime);opacity:1}
.nav-item-marc:hover{background:rgba(184,232,52,.10)}
.nav-item-marc.active{background:rgba(184,232,52,.14);box-shadow:none}
.nav-marc-status{margin-left:auto;width:8px;height:8px;border-radius:50%;flex:0 0 auto;
  background:var(--lime);box-shadow:0 0 0 3px rgba(184,232,52,.22);
  animation:vo-atem 2.4s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){.nav-marc-status{animation:none}}

/* Nex-Home V8 (2026-08-25 Kevin-Redesign): eine zusammenhaengende
   Arbeitsflaeche statt vier gestapelter schwarzer Kaesten. Der Panel-Rahmen
   umschliesst Header, Kennzahlen, Rechnungsstatus und Arbeitsflaeche in
   EINEM Modul mit konsistenten Radien/Abstaenden. Innere Ebenen (Halo,
   Trenner, Karten) sind hierarchisch abgestuft — keine Doppelhintergruende. */
.marc-home{position:relative;display:flex;flex-direction:column;gap:var(--s-3);
  height:100%;min-height:0;padding:var(--s-4);
  border:1px solid var(--line);border-radius:20px;
  background:linear-gradient(180deg,var(--panel,#0e1310) 0%,var(--panel-2,var(--bg-2,#0a0d0b)) 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.03),0 6px 24px rgba(0,0,0,.28);
  overflow:hidden}
/* Atmosphaere-Halo INNERHALB des Panels (frueher inset:-6% ueber den Rand). */
.marc-home::before{content:"";position:absolute;inset:0 0 auto 0;height:200px;
  pointer-events:none;z-index:0;
  background:
    radial-gradient(560px 220px at 12% -10%, rgba(184,232,52,.055), transparent 65%),
    radial-gradient(400px 160px at 55% -20%, rgba(120,180,40,.03), transparent 60%);
  mask-image:linear-gradient(#000, transparent);-webkit-mask-image:linear-gradient(#000, transparent)}
.marc-home-kopf,.marc-home-ueberblick,.marc-home-flaeche,.marc-home-erledigt{position:relative;z-index:1}
.marc-home-kopf{display:flex;align-items:center;gap:var(--s-3);
  padding-bottom:12px;
  border-bottom:1px solid var(--line-soft,rgba(235,237,240,.07))}
.marc-home-kopf>.nx-orb{--nx-size:72px;display:grid;flex:0 0 auto}
/* Orb V7 (§5-6): kein bloßer Glow — Material + Tiefe. Physischer dunkler Kern,
   interne Lime-Energie, transluzente Schale (Specular oben), feiner Signalring
   (::after) und eine räumliche Aura (::before). Größer, damit Nex im Raum lebt. */
.marc-home-orb{position:relative;width:62px;height:62px;border-radius:50%;flex:0 0 auto;
  background:
    radial-gradient(circle at 36% 30%, rgba(230,255,190,.22), transparent 30%),
    radial-gradient(circle at 40% 36%, #1b4020 0%, #0c1a0e 58%, #05100a 100%);
  box-shadow:0 0 0 1px rgba(184,232,52,.28), inset 0 2px 6px rgba(230,255,190,.10),
    inset 0 -6px 12px rgba(0,0,0,.55), 0 10px 28px rgba(0,0,0,.5), 0 0 36px rgba(184,232,52,.16)}
.marc-home-orb::before{content:"";position:absolute;inset:-10px;border-radius:50%;
  pointer-events:none;z-index:-1;
  background:radial-gradient(circle, rgba(184,232,52,.16), transparent 68%)}
.marc-home-orb::after{content:"";position:absolute;inset:-3px;border-radius:50%;
  pointer-events:none;border:1px solid rgba(184,232,52,.22)}
.marc-home-orb-kern{position:absolute;inset:19px;border-radius:50%;
  background:radial-gradient(circle at 40% 36%, #eaffb0, var(--lime) 42%, #6fa316 78%, transparent);
  box-shadow:0 0 12px rgba(184,232,52,.5);
  animation:vo-atem 3s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){.marc-home-orb-kern{animation:none}}
/* Nex V5 Hero-Wortmarke: „Nex" trägt die Produkt-Identität — größer, leicht
   gesperrt, mit sehr feiner Lime-Tiefe (keine Glow-Wand). Darunter die Rolle
   als ruhige Unterzeile: Produkt oben, Funktion darunter. */
.marc-home-titel{margin:0;font-size:2.05rem;line-height:1.05;font-weight:700;
  letter-spacing:.005em;color:var(--text,#EAF2E6);
  text-shadow:0 0 18px rgba(184,232,52,.10)}
.marc-home-rolle{margin:2px 0 0;color:var(--muted);font-size:.82rem;
  letter-spacing:.14em;text-transform:uppercase;font-weight:600}
/* Nex V8 (Kevin 2026-08-25): die Antwortflaeche gehoert sichtbar zum Nex-Panel,
   aber leiser als die KPI-Karten daran erkennbar — hairline-Rand, minimaler
   Lichtsaum oben. Kein Doppelhintergrund, kein abgesetztes schwarzes Rechteck.
   Empty-State (siehe [data-bereit="1"] unten): dezenter Bereitschafts-Hinweis
   mittig, keine erfundene Live-Aktivitaet, verschwindet sobald Verlauf da ist. */
.marc-home-flaeche{flex:1;min-height:220px;display:flex;
  border:1px solid var(--line-soft,rgba(235,237,240,.07));
  border-radius:16px;position:relative;
  background:
    radial-gradient(140% 90px at 50% 0%, rgba(184,232,52,.05), transparent 70%),
    rgba(255,255,255,.015);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.02)}
/* Empty-State-Overlay bewusst nicht mehr (VoiceDrawer hat eigenen). */
/* §A/§B1 Live-Status-Pille im Kopf — rechts, dezent, färbt sich mit dem Zustand. */
.marc-home-status{margin-left:auto;flex:0 0 auto;font-size:.8rem;font-weight:600;
  letter-spacing:.02em;color:var(--muted);border:1px solid var(--line);
  border-radius:999px;padding:4px 13px;white-space:nowrap;transition:color .2s,border-color .2s}
.marc-home-status-laut{color:var(--lime);border-color:rgba(184,232,52,.42)}
.marc-home-status-ok{color:var(--ok);border-color:rgba(126,217,87,.42)}
.marc-home-status-warn{color:var(--warn);border-color:rgba(230,180,60,.42)}
/* Der Kopf-Orb spiegelt den Zustand — leiser Lime-Halo beim Hören/Arbeiten. */
.marc-home-orb-hoert{box-shadow:0 0 0 2px rgba(184,232,52,.30),0 0 15px rgba(184,232,52,.22)}
.marc-home-orb-versteht .marc-home-orb-kern,
.marc-home-orb-antwortet .marc-home-orb-kern{filter:brightness(1.18)}
@media (prefers-reduced-motion:reduce){.marc-home-status{transition:none}}

/* §18-20 „Heute erledigt": ruhiger Streifen unter der Fläche — echte
   Aktivitäten von heute, keine Kartenwand. Bewusst leise (§20/§28):
   kleine Zeit, ruhiger Text, kein Lime-Feuerwerk. */
.marc-home-erledigt{flex:0 0 auto;padding:2px 2px 0}
.marc-home-erledigt-titel{margin:0 0 6px;font-size:.66rem;letter-spacing:1.5px;
  text-transform:uppercase;color:var(--muted)}
/* Nex V2 Activity (§30): eine ruhige Zeitspur mit kleinen Nodes statt Kartenwand.
   Eine feine Linie verbindet echte Ereignisse; jeder Node ist ein echter Eintrag. */
.marc-home-erledigt-liste{list-style:none;margin:0;padding:0 0 0 15px;position:relative;
  display:flex;flex-direction:column;gap:5px}
.marc-home-erledigt-liste::before{content:"";position:absolute;left:3px;top:6px;bottom:6px;width:1px;
  background:linear-gradient(rgba(184,232,52,.30),rgba(184,232,52,.05))}
.marc-home-erledigt-zeile{position:relative;display:grid;grid-template-columns:44px 1fr;gap:10px;
  align-items:baseline;font-size:.85rem;color:var(--text)}
.marc-home-erledigt-zeile::before{content:"";position:absolute;left:-14px;top:.42em;
  width:6px;height:6px;border-radius:50%;background:var(--lime,#B8E834);
  box-shadow:0 0 0 3px rgba(184,232,52,.12)}
.marc-home-erledigt-zeit{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.78rem}
.marc-home-erledigt-text{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Eingebetteter Drawer (Marc-Home): kein Overlay, füllt die Fläche. */
.vo-eingebettet{display:flex;flex:1;min-height:0}
.vo-drawer-eingebettet{width:100%;height:100%;border-left:0;background:transparent}
.vo-drawer-eingebettet>.vo-kopf{display:none}

/* ===================================================================
   NEX INPUT SYSTEM (V15.1) — passend zur Button-Materialsprache.
   Felder sind RECESSED (inset), transluzentes Material statt Kasten,
   Hairline-Kante innen, Lime-Focus-Ring. Kein harter 1px-Rahmen.
   Als Abschlussblock: gewinnt per Source-Order über alle früheren .inp.
   =================================================================== */
.inp, .dd-trigger {
  background: rgba(255,255,255,.022); border: 0; border-radius: 12px; color: var(--ink);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.07), inset 0 1px 3px rgba(0,0,0,.34);
  transition: box-shadow .16s var(--nex-ease, ease), background .16s ease;
}
.inp:hover, .dd-trigger:hover {
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.12), inset 0 1px 3px rgba(0,0,0,.34);
}
.inp:focus, .inp:focus-visible, .dd-trigger.dd-open {
  outline: 2px solid transparent; outline-offset: 2px;
  background: rgba(255,255,255,.032);
  box-shadow: inset 0 0 0 1px rgba(184,232,52,.55), 0 0 0 3px rgba(184,232,52,.18);
}
.inp::placeholder { color: var(--muted-2, #6f7a6f); }
.inp-error { box-shadow: inset 0 0 0 1px rgba(224,114,106,.6), inset 0 1px 3px rgba(0,0,0,.34); }
.inp-error:focus { box-shadow: inset 0 0 0 1px rgba(224,114,106,.72), 0 0 0 3px rgba(224,114,106,.18); }
.inp:disabled, .inp[disabled] { opacity: .45; cursor: not-allowed; filter: saturate(.4); }
.inp:-webkit-autofill, .inp:-webkit-autofill:hover, .inp:-webkit-autofill:focus {
  -webkit-text-fill-color: var(--ink, #F5EFE6); -webkit-box-shadow: 0 0 0 1000px rgba(30,36,30,.98) inset;
  caret-color: var(--ink, #F5EFE6); transition: background-color 600000s 0s; }
@media (prefers-reduced-motion: reduce) { .inp, .dd-trigger { transition: box-shadow .12s ease; } }
@media (forced-colors: active) {
  .inp:focus, .inp:focus-visible, .dd-trigger.dd-open { outline: 2px solid Highlight; }
  .inp, .dd-trigger { border: 1px solid CanvasText; }
  .btn:focus-visible, .chip:focus-visible, .seg-btn:focus-visible,
  .icon-btn:focus-visible { outline: 2px solid Highlight; outline-offset: 2px; }
}

/* ===================================================================
   NEX CHIP / FILTER SYSTEM (V15.6 §F3) — Material statt 2018-Pill.
   Recessed transluzent (inaktiv), lime-getönt (aktiv) — eine Familie
   mit Buttons/Inputs. Abschlussblock: gewinnt per Source-Order.
   =================================================================== */
.chip {
  background: rgba(255,255,255,.03); border: 0; color: var(--muted, #9AA39A);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.07); border-radius: 99px; padding: 7px 13px;
  font-size: .8rem; cursor: pointer;
  transition: background .16s var(--nex-ease, ease), color .14s ease, box-shadow .16s ease;
}
button.chip:hover { background: rgba(255,255,255,.06); color: var(--ink, #F5EFE6); box-shadow: inset 0 0 0 1px rgba(255,255,255,.11); }
.chip-on, button.chip.chip-on {
  color: var(--lime, #B8E834); background: rgba(184,232,52,.12);
  box-shadow: inset 0 0 0 1px rgba(184,232,52,.42), 0 2px 8px rgba(184,232,52,.1);
}
.chip:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--bg, #0A0D0B), 0 0 0 4px rgba(184,232,52,.55); }

/* ===================================================================
   NEX CONTROL SYSTEM (V15.8 §30/§P) — Segmented + Checkbox + Radio als
   Material-Familie mit Buttons/Inputs/Chips. Abschlussblock (Source-Order).
   =================================================================== */
.seg { background: rgba(255,255,255,.03); border: 0; box-shadow: inset 0 0 0 1px rgba(255,255,255,.06);
  border-radius: 13px; padding: 3px; }
.seg-btn { border-radius: 10px; min-height: 40px; transition: background .16s var(--nex-ease, ease), color .14s ease; }
.seg-btn.on { color: var(--ink, #F5EFE6);
  background: linear-gradient(180deg, rgba(255,255,255,.09), rgba(255,255,255,.025));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.11), 0 2px 6px rgba(0,0,0,.3); }
.seg-btn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--bg, #0A0D0B), 0 0 0 4px rgba(184,232,52,.55); }

.chk-row input[type=checkbox], .deep-toggle input[type=checkbox],
.ce-auto-toggle input[type=checkbox], .sg-inline input[type=checkbox],
.ce-whatsapp-channel-toggle input[type=checkbox] {
  appearance: none; -webkit-appearance: none; width: 22px; height: 22px; flex: 0 0 22px; border-radius: 7px;
  cursor: pointer; position: relative; background: rgba(255,255,255,.03);
  box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.18); transition: background .14s ease, box-shadow .14s ease; }
.chk-row input[type=checkbox]:hover, .deep-toggle input[type=checkbox]:hover,
.ce-auto-toggle input[type=checkbox]:hover, .sg-inline input[type=checkbox]:hover,
.ce-whatsapp-channel-toggle input[type=checkbox]:hover { box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.3); }
.chk-row input[type=checkbox]:checked, .deep-toggle input[type=checkbox]:checked,
.ce-auto-toggle input[type=checkbox]:checked, .sg-inline input[type=checkbox]:checked,
.ce-whatsapp-channel-toggle input[type=checkbox]:checked {
  background: linear-gradient(180deg, #CFF356, var(--lime, #B8E834) 60%, #A4D62B); box-shadow: inset 0 0 0 1.5px var(--lime, #B8E834); }
.chk-row input[type=checkbox]:checked::after, .deep-toggle input[type=checkbox]:checked::after,
.ce-auto-toggle input[type=checkbox]:checked::after, .sg-inline input[type=checkbox]:checked::after,
.ce-whatsapp-channel-toggle input[type=checkbox]:checked::after {
  content: ""; position: absolute; left: 7px; top: 3px; width: 5px; height: 10px;
  border: solid #0A140A; border-width: 0 2.5px 2.5px 0; transform: rotate(45deg); }
.chk-row input[type=checkbox]:focus-visible, .deep-toggle input[type=checkbox]:focus-visible,
.ce-auto-toggle input[type=checkbox]:focus-visible, .sg-inline input[type=checkbox]:focus-visible,
.ce-whatsapp-channel-toggle input[type=checkbox]:focus-visible {
  outline: none; box-shadow: inset 0 0 0 1.5px var(--lime, #B8E834), 0 0 0 3px rgba(184,232,52,.3); }
.ce-whatsapp-channel-toggle input[type=checkbox]:checked {
  background: linear-gradient(180deg, #3ade7a, #25d366 60%, #1fba58); box-shadow: inset 0 0 0 1.5px #25d366; }
.ce-whatsapp-channel-toggle input[type=checkbox]:checked::after { border-color: #0A140A; }
input[type=radio] { appearance: none; -webkit-appearance: none; width: 20px; height: 20px; border-radius: 50%;
  cursor: pointer; position: relative; background: rgba(255,255,255,.03); box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.18); }
input[type=radio]:checked { box-shadow: inset 0 0 0 1.5px var(--lime, #B8E834); }
input[type=radio]:checked::after { content: ""; position: absolute; inset: 4px; border-radius: 50%; background: var(--lime, #B8E834); }
input[type=radio]:focus-visible { outline: none; box-shadow: inset 0 0 0 1.5px var(--lime, #B8E834), 0 0 0 3px rgba(184,232,52,.3); }

/* ── Website-Technik & SEO: problem-first (V16.2) ─────────────────────
   Health-Summary + Befunde stehen oben; die elf Rohwerte sind einklappbar. */
.seo-health{display:flex;align-items:baseline;gap:12px;margin:2px 0 12px}
.seo-health-zahl{font-family:var(--display,inherit);font-size:1.5rem;font-weight:600;letter-spacing:.3px}
.seo-health-ok{color:var(--lime,#B8E834)}
.seo-health-warn{color:var(--warn,#E6C84A)}
.seo-befunde{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:6px}
.seo-befunde li{position:relative;padding-left:18px;font-size:.92rem;color:var(--ink,#F5EFE6)}
.seo-befunde li::before{content:"!";position:absolute;left:0;top:0;color:var(--warn,#E6C84A);font-weight:700}
.seo-messwerte{margin-top:4px}
.seo-messwerte>summary{cursor:pointer;color:var(--muted,#9AA39A);font-size:.85rem;padding:6px 0;min-height:44px;display:inline-flex;align-items:center;list-style:revert}
.seo-messwerte>summary:hover{color:var(--lime,#B8E834)}
.seo-messwerte[open]>summary{color:var(--ink,#F5EFE6)}
.seo-messwerte .os-prod-grid{margin-top:8px}

/* Website-Flow (Auswertungen): Traffic -> Sales Leads -> Conversion.
   Horizontal auf Desktop, vertikal umbrechend auf schmalen Screens (kein
   horizontales Scrollen, Item 39). Nur echte Zahlen, keine Attribution. */
.wa-flow{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:14px 0;
  padding:14px 16px;background:var(--panel,#12160F);border:1px solid var(--line,#242A1C);border-radius:14px}
.wa-flow-step{display:flex;flex-direction:column;min-width:80px}
.wa-flow-step strong{font-size:22px;line-height:1.1;color:var(--lime,#B8E834)}
.wa-flow-step span{font-size:12px;color:var(--muted,#9AA39A);margin-top:2px}
.wa-flow-arrow{color:var(--muted,#9AA39A);font-size:18px}
@media(max-width:520px){.wa-flow{flex-direction:column;align-items:stretch;gap:8px}
  .wa-flow-arrow{align-self:center;transform:rotate(90deg)}}

/* =====================================================================
   ÜBERSICHT / [00] — Executive-Dashboard (C.views.Uebersicht)
   ---------------------------------------------------------------------
   Alles unter `.dash-` — restylt keine bestehende Klasse. Nutzt die
   vorhandenen Tokens (--bg-card, --line, --lime, --ok, --danger, --s-*,
   --r-*) plus --orange/--orange-soft (oben im :root). Design-Vertrag:
   _preview-uebersicht.html. Mobile: stapelt <=560px, keine H-Scroll,
   Ziele >= 44px.
   ===================================================================== */
.dash{max-width:var(--maxw,1280px);margin:0 auto;}
.dash-num{font-family:var(--mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace);font-weight:700;letter-spacing:-.01em;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap;overflow-wrap:normal;word-break:normal;}
.dash-lab{font-family:var(--mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted-2);}
.dash-t{font-family:var(--mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace);font-size:11px;letter-spacing:.14em;color:var(--muted);}
.dash-muted{color:var(--muted-2);}
.dash-up{color:var(--ok);} .dash-down{color:var(--danger);}
.dash-hint{color:var(--muted-2);font-family:var(--mono,ui-monospace,monospace);font-size:12px;letter-spacing:.02em;margin:0;}
.dash-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:0 0 auto;}
.dash-card{background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r);padding:var(--s-4);}

/* Hero */
.dash-hero{margin-top:var(--s-4);background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r);padding:var(--s-4) var(--s-4) var(--s-3);}
.dash-hero-head{display:flex;align-items:center;gap:8px;}
.dash-pulse{width:6px;height:6px;border-radius:50%;background:var(--orange);flex:0 0 auto;}
.dash-hero-grid{display:grid;grid-template-columns:1fr;gap:var(--s-4);align-items:center;margin-top:var(--s-3);}
@media(min-width:768px){.dash-hero-grid{grid-template-columns:auto 1fr auto;gap:var(--s-6);}}
.dash-big{font-family:var(--mono,ui-monospace,monospace);font-weight:700;font-size:40px;line-height:.95;letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums;}
.dash-big.dash-orange{color:var(--orange);}
.dash-bigwrap .dash-lab{margin-top:6px;}
.dash-right{text-align:right;}
.dash-bar{position:relative;height:14px;border-radius:6px;background:var(--bg-elev);border:1px solid var(--line);overflow:hidden;}
.dash-bar>i{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,var(--orange),#ff8a45);border-radius:6px 0 0 6px;}
.dash-barmeta{display:flex;justify-content:space-between;margin-top:6px;gap:8px;}
.dash-subline{margin-top:var(--s-3);padding-top:var(--s-3);border-top:1px solid var(--line-soft);font-family:var(--mono,ui-monospace,monospace);font-size:11px;letter-spacing:.04em;color:var(--muted);}

/* KPI-Reihe */
.dash-kpis{margin-top:var(--s-4);display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s-3);}
@media(min-width:768px){.dash-kpis{grid-template-columns:repeat(4,1fr);gap:var(--s-4);}}
.dash-kpi{display:flex;flex-direction:column;gap:var(--s-2);min-height:118px;min-width:0;}
.dash-kpi .dash-v{font-size:26px;overflow-wrap:anywhere;}
@media(min-width:768px){.dash-kpi .dash-v{font-size:30px;}}
.dash-kpi .dash-v.dash-alert{color:var(--danger);}
.dash-row{display:flex;align-items:flex-end;justify-content:space-between;gap:8px;min-width:0;margin-top:auto;}
.dash-delta{font-family:var(--mono,ui-monospace,monospace);font-size:11px;white-space:nowrap;}
.dash-spark{width:56px;height:22px;flex:0 0 auto;}
@media(min-width:768px){.dash-spark{width:88px;}}

/* Content-Pipeline · Master */
.dash-master{margin-top:var(--s-4);display:grid;grid-template-columns:1fr;gap:var(--s-4);align-items:center;background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r);padding:var(--s-4);}
@media(min-width:768px){.dash-master{grid-template-columns:1fr auto;}}
.dash-master-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.dash-master h2{margin:10px 0 var(--s-3);font-family:var(--body,inherit);font-weight:800;font-size:22px;letter-spacing:-.01em;color:var(--ink);}
@media(min-width:768px){.dash-master h2{font-size:26px;}}
.dash-chips{display:flex;flex-wrap:wrap;gap:var(--s-2);}
.dash-chip{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;font-family:var(--mono,ui-monospace,monospace);font-size:11px;letter-spacing:.04em;color:var(--muted);border:1px solid var(--line);border-radius:6px;background:var(--bg-2);}
.dash-chip b{color:var(--ink);font-weight:700;}
.dash-chip.dash-ready{color:var(--ok);border-color:rgba(127,196,107,.4);}
.dash-btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 20px;border:none;border-radius:var(--r-control);cursor:pointer;background:var(--orange);color:#1a0c02;font-family:var(--mono,ui-monospace,monospace);font-weight:700;font-size:13px;letter-spacing:.06em;width:100%;}
.dash-btn-primary:hover{filter:brightness(1.05);}
@media(min-width:768px){.dash-btn-primary{width:auto;}}

/* Heute wichtig */
.dash-sec-h{display:flex;align-items:center;gap:10px;margin:var(--s-6) 0 var(--s-3);}
.dash-sec-h .dash-lab{font-size:11px;}
.dash-rule{flex:1;height:1px;background:var(--line);}
.dash-todo{display:flex;flex-direction:column;gap:var(--s-2);}
.dash-todo-row{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-4);min-height:52px;background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r-sm);}
.dash-todo-txt{min-width:0;flex:1;}
.dash-ti{font-weight:700;color:var(--ink);}
.dash-rs{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.dash-jump{flex:0 0 auto;font-family:var(--mono,ui-monospace,monospace);font-size:11px;color:var(--muted-2);background:transparent;border:none;cursor:pointer;display:inline-flex;align-items:center;min-height:44px;padding:0 8px;}
.dash-jump:hover{color:var(--orange);}

/* Unternehmen-Strip */
.dash-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:var(--s-3);background:transparent;border:0;overflow:visible;}
.dash-stat{background:var(--bg-card);padding:var(--s-4);min-height:86px;display:flex;flex-direction:column;justify-content:center;gap:7px;border:1px solid var(--line);border-radius:14px;}
.dash-stat .dash-v{font-size:20px;}
.dash-stat.dash-stat-alert .dash-v{color:var(--danger);}

@media(max-width:560px){
  .dash-kpis{grid-template-columns:1fr;}
  .dash-strip{grid-template-columns:1fr 1fr;gap:10px;}
  .dash-big{font-size:34px;}
  .dash-right{text-align:left;}
}
@media(prefers-reduced-motion:reduce){.dash-btn-primary{transition:none;}}

/* =====================================================================
   V11 WEBSITE-EFFEKT-SCHICHT — die visuelle Identität von
   dreihundertsechzig.com im CRM. Design-Vertrag: _preview-v11-website.html.
   ---------------------------------------------------------------------
   Nur Marken-Tokens (--lime,--lime-glow,--line-lime,--ink cream,--bg-*,
   --shadow-*,--s-*,--r-*). Keine Off-Brand-Farbe. Öffnet Flächen statt
   Kästen zu stapeln: EIN Fokus-Feld mit Glow, Kicker-Ticks, Pillen-Buttons,
   Hover-Lift mit Lime-Kante. Lime bleibt Signal (Fokus, Aktion, aktiv) —
   sparsam. Bewegung/Glow sterben unter prefers-reduced-motion.
   ===================================================================== */

/* ── Reusable Signaturen ──────────────────────────────────────────── */
/* Kicker: Lime-Eyebrow mit 20px-Tick (Variante .dot = pulsierender Punkt) */
.kicker{display:inline-flex;align-items:center;gap:10px;font-family:var(--body);
  font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--lime);font-weight:700;}
.kicker::before{content:"";width:20px;height:1.5px;background:var(--lime);
  box-shadow:0 0 8px var(--lime-glow);flex:0 0 auto;}
.kicker.dot::before{width:7px;height:7px;border-radius:50%;
  box-shadow:0 0 8px var(--lime);animation:dash-kick 2.2s ease-in-out infinite;}

/* Brush: Lime-Pinselstrich unter dem Fokus-Wort */
.brush{position:relative;white-space:nowrap;z-index:0;}
.brush::after{content:"";position:absolute;left:-2%;right:-2%;bottom:.02em;height:.16em;z-index:-1;
  background:var(--lime);border-radius:50% 50% 50% 50%/100% 100% 0 0;
  transform:skew(-8deg) rotate(-1.2deg);opacity:.5;}

/* Fokus-Feld: offene Fläche mit Elevation-Verlauf + radialem Lime-Glow,
   KEIN harter Kasten. Trägt die eine wichtigste Aktion des Bildschirms. */
.focus-field{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:var(--r-lg);
  padding:var(--s-6) var(--s-5);box-shadow:var(--shadow-card);
  background:radial-gradient(90% 130% at 100% 0,rgba(184,232,52,.10),transparent 55%),
    linear-gradient(180deg,var(--bg-elev),var(--bg-card));}
.focus-field::before{content:"";position:absolute;top:-30%;right:-8%;width:420px;height:420px;
  pointer-events:none;background:radial-gradient(circle,var(--lime-glow),transparent 62%);
  filter:blur(46px);opacity:.5;}

/* Pillen-Buttons — Website-Signatur auf den Marken-Buttons. Reversibel:
   überschreibt nur Radius/Sweep/Hover-Kante der Basis, nicht ihre Struktur. */
.btn-primary,.btn-ghost{border-radius:999px;}
.btn-primary{overflow:hidden;isolation:isolate;}
.btn-primary::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:linear-gradient(120deg,transparent 30%,rgba(255,255,255,.45) 50%,transparent 70%);
  transform:translateX(-150%);transition:transform .6s var(--nex-ease,ease);}
.btn-primary:hover::before{transform:translateX(150%);}
.btn-ghost:hover{border-color:var(--lime);color:var(--lime);
  background:linear-gradient(180deg,rgba(184,232,52,.08),rgba(184,232,52,.02));}

/* Hover-Lift: Karte hebt sich, Lime-Kante + Lime-getönter Schatten */
.dash-lift{transition:transform var(--nex-fast) var(--nex-ease),
  box-shadow var(--nex-fast) var(--nex-ease),border-color var(--nex-fast) var(--nex-ease);}
.dash-lift:hover{transform:translateY(-3px);border-color:var(--line-lime);
  box-shadow:var(--shadow-lift),0 18px 44px -22px var(--lime-glow);}

/* ── Section 1 · Offener Kopf (Gruß + Tagesstatus), kein Kasten ─────── */
.dash-head{margin-top:var(--s-2);}
.dash-greet{font-family:var(--serif);font-style:italic;font-size:clamp(23px,3.2vw,32px);line-height:1.14;
  color:var(--ink);margin:var(--s-3) 0 var(--s-3);}
.dash-greet b{font-style:normal;font-family:var(--body);font-weight:800;color:var(--lime);}
.dash-status{display:flex;flex-wrap:wrap;gap:8px 18px;font-size:13px;color:var(--muted);align-items:center;}
.dash-status b{color:var(--ink);font-weight:650;}
.dash-status .g{color:var(--ok);font-weight:650;}
.dash-status .dash-sep{width:4px;height:4px;border-radius:50%;background:var(--line-strong);flex:0 0 auto;}

/* ── Section 2 · Fokus-Feld mit der einen wichtigsten Aktion ────────── */
.dash-focus{margin-top:var(--s-5);}
.dash-focus-grid{position:relative;display:grid;grid-template-columns:1fr;gap:var(--s-5);}
@media(min-width:920px){.dash-focus-grid{grid-template-columns:1.3fr 1fr;gap:var(--s-7);align-items:center;}}
.dash-action{position:relative;border:1px solid var(--line-lime);border-radius:var(--r);padding:var(--s-5);
  background:linear-gradient(180deg,rgba(184,232,52,.05),var(--bg-card));}
.dash-ah{position:relative;margin:var(--s-3) 0 var(--s-2);font-family:var(--body);font-weight:800;
  font-size:22px;letter-spacing:-.01em;color:var(--ink);}
.dash-ap{margin:0 0 var(--s-4);font-size:13px;color:var(--muted);line-height:1.55;}
.dash-ap .why{color:var(--ink);font-weight:600;}
.dash-btnrow{display:flex;flex-wrap:wrap;gap:var(--s-3);}
@media(max-width:520px){.dash-btnrow .btn{width:100%;}}

/* Content Engine · kompakte Social-Prüfung. Eine Feed-Vorschau ersetzt die
   frühere Textwand; Details bleiben per Kanal und „Mehr anzeigen“ erreichbar. */
/* P0 18.08.2026 (Screenshot): .ce-jc ist ein Grid (Thumb | Body). Die
   geoeffnete Pruefung wurde per Auto-Placement in die THUMB-SPALTE (~120px)
   gelegt — die komplette Beitragspruefung war unlesbar schmal, rechts blieb
   die Flaeche leer. Dieselbe Fehlerklasse wie der ce-prow-link-Bug:
   Auto-Placement ohne explizite Spalte. Fix: die Pruefung spannt IMMER
   beide Spalten. */
.ce-jc.is-open>.ce-review{grid-column:1 / -1}
.ce-review{margin-top:12px;padding-top:12px;border-top:1px solid var(--line-soft);cursor:default;min-width:0}
/* Ab 1100px: asymmetrische zwei Spalten OHNE DOM-Umbau — die Plattform-
   vorschau (.ce-post) haelt links eine realistische, begrenzte Breite,
   ALLE uebrigen Pruefbausteine (Qualitaet, Ziel, Hinweise, Plattformstatus,
   Fortschritt, Aktionen) stapeln rechts in der Restbreite. Kein Riesenleer,
   keine ueberlangen Karten. Darunter: eine Spalte, Vorschau volle Breite. */
@media(min-width:1100px){
  .ce-jc.is-open>.ce-review{display:grid;column-gap:20px;row-gap:10px;
    grid-template-columns:minmax(320px,520px) minmax(0,1fr);align-items:start}
  .ce-jc.is-open>.ce-review>*{grid-column:2;min-width:0}
  .ce-jc.is-open>.ce-review>.ce-post{grid-column:1;grid-row:1 / 99;position:sticky;top:76px}
}
.ce-channel-tabs{display:flex;gap:6px;overflow-x:auto;padding:2px 1px 8px;scrollbar-width:none}
.ce-channel-tabs::-webkit-scrollbar{display:none}
.ce-channel-tab{min-height:44px;display:inline-flex;align-items:center;gap:7px;padding:8px 12px;border:1px solid var(--line-soft);border-radius:10px;background:transparent;color:var(--muted);font:600 .78rem/1 var(--font-sans);text-transform:capitalize;white-space:nowrap;cursor:pointer;transition:background .2s,border-color .2s,color .2s,transform .15s}
.ce-channel-tab:hover,.ce-channel-tab.is-active{background:var(--bg-elev);border-color:color-mix(in srgb,var(--lime) 55%,var(--line));color:var(--ink)}
.ce-channel-tab:active{transform:scale(.98)}
.ce-channel-tab:focus-visible,.ce-identity button:focus-visible,.ce-compose-identity button:focus-visible,.ce-more:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
.ce-identity,.ce-compose-identity>div{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;background:var(--bg-2);border-radius:11px}
.ce-identity button,.ce-compose-identity button{min-height:44px;border:0;border-radius:8px;background:transparent;color:var(--muted);font:600 .77rem/1.15 var(--font-sans);cursor:pointer;padding:8px 10px;transition:background .2s,color .2s}
.ce-identity button.is-on,.ce-compose-identity button.is-on{background:var(--bg-card);color:var(--ink);box-shadow:0 1px 0 rgba(255,255,255,.06)}
.ce-identity-note,.ce-compose-identity small{display:block;margin:7px 2px 10px;color:var(--muted);font-size:.72rem;line-height:1.4}
.ce-compose-identity{margin:10px 0}
.ce-compose-identity>.field-label{display:block;margin-bottom:6px}
.ce-post{max-width:520px;margin:0 auto;background:var(--bg-card);border:1px solid var(--line);border-radius:16px;overflow:hidden;box-shadow:0 16px 38px rgba(5,10,6,.18)}
.ce-post-head{display:flex;align-items:center;gap:10px;padding:12px 14px}
.ce-post-head>span:nth-child(2){display:flex;flex-direction:column;min-width:0}
.ce-post-head strong{font-size:.82rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ce-post-head small{margin-top:2px;color:var(--muted);font-size:.68rem}
.ce-post-avatar{width:34px;height:34px;display:grid;place-items:center;flex:0 0 auto;border-radius:10px;background:var(--lime);color:#14200b;font:800 .68rem/1 var(--font-sans)}
.ce-post-draft{margin-left:auto;padding:4px 7px;border-radius:6px;background:var(--bg-2);color:var(--muted);font:600 .62rem/1 var(--font-sans);letter-spacing:.04em;text-transform:uppercase}
.ce-post-media{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;background:var(--bg-2)}
.ce-post-instagram .ce-post-media{aspect-ratio:4/5}
/* Bilder werden im echten Seitenverhaeltnis gezeigt. Ein erzwungenes 4:5
   object-fit:cover schnitt zuvor Koepfe am Rand ab, obwohl Instagram das
   hochgeladene 3:2-Original als Feedbild akzeptiert. Videos behalten ihre
   plattformspezifische Vorschauflaeche. */
.ce-post img.ce-post-media{height:auto;max-height:760px;aspect-ratio:auto;object-fit:contain}
.ce-post-media-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;min-height:176px;color:var(--muted);background:radial-gradient(circle at 65% 18%,color-mix(in srgb,var(--lime) 15%,transparent),transparent 48%),var(--bg-2)}
.ce-post-media-empty strong{color:var(--ink);font-size:.84rem}
.ce-post-media-empty span{padding:0 16px;text-align:center;font-size:.68rem}
.ce-post-body{padding:13px 14px 14px}
.ce-post-copy{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:5;overflow:hidden;margin:0;color:var(--ink);font-size:.82rem;line-height:1.5;white-space:pre-line}
.ce-post-copy.is-expanded{display:block;overflow:visible}
.ce-more{min-height:38px;margin:2px 0 0;padding:5px 0;border:0;background:none;color:var(--lime);font:650 .75rem/1 var(--font-sans);cursor:pointer}
.ce-hashtags{display:flex;gap:5px;flex-wrap:wrap;margin-top:9px}
.ce-hashtags span{color:color-mix(in srgb,var(--lime) 82%,white);font-size:.72rem}
.ce-post-meta{display:flex;justify-content:space-between;gap:10px;margin-top:11px;padding-top:9px;border-top:1px solid var(--line-soft);color:var(--muted);font-size:.64rem}
.ce-goal{max-width:520px;margin:9px auto 0;padding:9px 11px;border-left:2px solid var(--lime);background:color-mix(in srgb,var(--lime) 6%,transparent)}
.ce-goal span{color:var(--muted);font-size:.63rem;text-transform:uppercase;letter-spacing:.08em}
.ce-goal p{margin:3px 0 0;font-size:.74rem;line-height:1.35}
.ce-actions{max-width:520px;margin:10px auto 0;display:flex;gap:8px;flex-wrap:wrap}
.ce-actions .btn{min-height:44px;flex:1 1 130px}
.ce-edit-published{max-width:520px;margin:12px auto 0;padding:14px;border:1px solid var(--line-soft);border-radius:14px;background:color-mix(in srgb,var(--panel) 82%,transparent)}
.ce-edit-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:10px}.ce-edit-head span{color:var(--muted);font-size:.72rem;text-align:right}
.ce-edit-text{width:100%;min-height:170px;resize:vertical;line-height:1.5;white-space:pre-wrap}
.ce-edit-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:9px}.ce-edit-manual p,.ce-edit-message{margin:7px 0;color:var(--muted);font-size:.78rem;line-height:1.45}.ce-edit-message{color:var(--ink)}
.ce-whatsapp-channel-toggle{display:grid;grid-template-columns:auto auto minmax(0,1fr);align-items:center;gap:10px;margin:10px 0 14px;padding:13px 14px;border:1px solid color-mix(in srgb,#25d366 42%,var(--line));border-radius:14px;background:linear-gradient(135deg,color-mix(in srgb,#25d366 9%,var(--bg-card)),var(--bg-card));cursor:pointer}
.ce-whatsapp-channel-toggle input{width:18px;height:18px;accent-color:#25d366}.ce-whatsapp-channel-toggle strong,.ce-whatsapp-channel-toggle small{display:block}.ce-whatsapp-channel-toggle strong{font-size:.84rem}.ce-whatsapp-channel-toggle small{margin-top:3px;color:var(--muted);font-size:.71rem;line-height:1.4}.ce-whatsapp-channel-icon{display:inline-flex}
.ce-channel-handoff{max-width:520px;margin:12px auto 0;padding:15px;border:1px solid color-mix(in srgb,#25d366 44%,var(--line));border-radius:14px;background:radial-gradient(circle at 100% 0,color-mix(in srgb,#25d366 14%,transparent),transparent 48%),var(--bg-card)}
.ce-channel-handoff-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.ce-channel-handoff-head strong{font-size:.9rem}.ce-channel-state{padding:5px 8px;border-radius:999px;background:var(--bg-2);color:var(--muted);font-size:.64rem;font-weight:750;letter-spacing:.04em;text-transform:uppercase}.ce-channel-state.is-published{background:color-mix(in srgb,#25d366 16%,var(--bg-2));color:#62dd8d}
.ce-channel-handoff>p{margin:10px 0;color:var(--muted);font-size:.76rem;line-height:1.5}.ce-channel-handoff>small{display:block;margin-top:9px;color:var(--muted);font-size:.68rem;line-height:1.4}.ce-channel-handoff-actions{display:flex;flex-wrap:wrap;gap:8px}.ce-channel-handoff-actions .btn{min-height:44px;flex:1 1 138px;text-align:center}
.ce-review-error{margin:0 0 10px;padding:9px 11px;border-radius:9px;background:color-mix(in srgb,var(--danger) 10%,transparent);color:var(--danger);font-size:.76rem;line-height:1.4}
.ce-identity-wrap{margin-top:8px}.ce-identity-wrap>.field-label{display:block;margin:0 2px 5px}
.ce-publish-progress{margin:14px 12px 12px;padding:13px;border:1px solid color-mix(in srgb,var(--lime) 28%,var(--line-soft));border-radius:13px;background:color-mix(in srgb,var(--bg-2) 82%,transparent)}
.ce-publish-progress-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:11px}.ce-publish-progress-head strong{font-size:.83rem}.ce-publish-progress-head span{color:var(--muted);font-size:.67rem}
.ce-job-publish-progress{display:grid;gap:7px;padding:10px;border:1px solid color-mix(in srgb,var(--lime) 38%,var(--line));border-radius:10px;background:color-mix(in srgb,var(--lime) 8%,var(--bg-2))}
.ce-job-publish-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;min-width:0}.ce-job-publish-head strong{font-size:11.5px}.ce-job-publish-head span,.ce-job-publish-progress small{color:var(--muted);font-size:10px;line-height:1.35}.ce-job-publish-bar{height:8px}.ce-job-publish-bar>i{background:linear-gradient(90deg,var(--lime),color-mix(in srgb,var(--lime) 58%,white));box-shadow:0 0 12px color-mix(in srgb,var(--lime) 46%,transparent)}
.ce-job-publish-progress.is-partial{border-color:color-mix(in srgb,var(--warn) 48%,var(--line))}.ce-job-publish-progress.is-failed{border-color:color-mix(in srgb,var(--danger) 52%,var(--line))}
@media(max-width:520px){
  .ce-review{margin-inline:-4px}.ce-post{border-radius:13px}.ce-identity{position:sticky;bottom:8px;z-index:2;box-shadow:0 8px 24px rgba(0,0,0,.24)}
  .ce-post-copy{font-size:.8rem;-webkit-line-clamp:4}.ce-actions{position:sticky;bottom:8px;z-index:3;padding:6px;background:color-mix(in srgb,var(--bg) 90%,transparent);backdrop-filter:blur(12px);border-radius:12px}
  .ce-publish-progress{margin-inline:8px;padding:11px}.ce-publish-progress-head{align-items:flex-start;flex-direction:column;gap:2px}
  .ce-job-publish-head{align-items:flex-start;flex-direction:column;gap:2px}
  .ce-whatsapp-channel-toggle{grid-template-columns:auto auto minmax(0,1fr);padding:12px}.ce-channel-handoff-actions{display:grid;grid-template-columns:1fr}.ce-channel-handoff-actions .btn{width:100%}
}
.dash-nexline{margin:var(--s-4) 0 0;font-size:13px;color:var(--muted);line-height:1.55;}
.dash-nexline b{color:var(--ink);font-weight:650;}

/* ── Delta als Pille (Website-Signatur), Strip-Hover, Stat-Sub ─────── */
.dash-delta.dash-up{background:rgba(87,204,139,.14);color:var(--ok);padding:2px 8px;border-radius:999px;}
.dash-delta.dash-down{background:var(--danger-bg);padding:2px 8px;border-radius:999px;}
.dash-stat{transition:background var(--nex-fast) var(--nex-ease);}
.dash-stat:hover{background:var(--bg-elev);}
.dash-sub{font-size:12px;color:var(--muted);font-weight:400;margin-left:4px;}

/* ── Section 6 · Aufgaben + Wiedervorlagen (zwei kompakte Listen) ───── */
.dash-cols{display:grid;grid-template-columns:1fr;gap:var(--s-3);}
@media(min-width:720px){.dash-cols{grid-template-columns:1fr 1fr;gap:var(--s-4);}}
.dash-panel{background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r);
  padding:var(--s-4);box-shadow:var(--shadow-card);}
.dash-list{display:flex;flex-direction:column;gap:2px;margin-top:var(--s-3);}
.dash-lrow{display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);
  min-height:44px;padding:var(--s-2) 0;border-top:1px solid var(--line-soft);}
.dash-lrow:first-child{border-top:none;}
.dash-lrow .k{font-size:13px;color:var(--muted);}
.dash-lrow .v{font-size:16px;}
.dash-lrow.alert .v{color:var(--danger);}

/* ── Section 7 · Growth-Kanäle (Plattform-Kacheln, Marken-Kante) ───── */
.dash-srow{display:grid;grid-template-columns:1fr;gap:var(--s-3);}
@media(min-width:900px){.dash-srow{grid-template-columns:repeat(3,1fr);}}
.dash-stile{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:var(--s-3);
  min-width:0;background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r);
  padding:var(--s-4);box-shadow:var(--shadow-card);}
.dash-stile::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--sc,var(--muted));}
.dash-stile-top{display:flex;align-items:center;gap:11px;}
.dash-stile-name{font-weight:700;font-size:14px;color:var(--ink);}
.dash-stile-st{margin-left:auto;font-size:10px;letter-spacing:.06em;font-weight:800;text-transform:uppercase;
  padding:3px 9px;border-radius:999px;}
.dash-stile-st.on{background:rgba(87,204,139,.14);color:var(--ok);}
.dash-stile-st.off{background:var(--bg-elev);color:var(--muted-2);}
.dash-stile-nums{display:flex;gap:var(--s-5);}
.dash-stile-nums .dash-v{font-size:20px;}
.dash-stile-foot{font-size:11.5px;color:var(--muted);border-top:1px solid var(--line-soft);padding-top:var(--s-2);}

/* ── Section 8 · Content Engine (Lime-Glow-Panel) ──────────────────── */
.dash-engine{position:relative;overflow:hidden;display:grid;grid-template-columns:1fr;gap:var(--s-4);
  align-items:center;border:1px solid var(--line);border-radius:var(--r);padding:var(--s-5);
  background:radial-gradient(120% 150% at 100% 0,rgba(184,232,52,.09),transparent 52%),
    linear-gradient(180deg,var(--bg-elev),var(--bg-card));box-shadow:var(--shadow-card);}
@media(min-width:820px){.dash-engine{grid-template-columns:1fr auto;}}
.dash-engine h2{margin:10px 0 var(--s-3);font-family:var(--body);font-weight:800;font-size:22px;
  letter-spacing:-.01em;color:var(--ink);}
.dash-engine-mh{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.dash-statusmini{width:60px;height:6px;border-radius:3px;background:var(--bg-2);overflow:hidden;flex:0 0 auto;}
.dash-statusmini>i{display:block;height:100%;background:linear-gradient(90deg,var(--lime-deep),var(--lime));}

/* Chip-Refinement: Pille statt Rechteck (Website-Signatur) */
.dash-chip{border-radius:999px;background:rgba(10,13,11,.4);}
.dash-chip.dash-ready{background:rgba(87,204,139,.07);}

/* ── Section 9 · Risiken & offene Posten (gruppierte Tiles) ────────── */
.dash-risks{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--line);
  border:1px solid var(--line);border-radius:var(--r);overflow:hidden;box-shadow:var(--shadow-card);}
@media(min-width:720px){.dash-risks{grid-template-columns:repeat(4,1fr);}}
.dash-risk{background:var(--bg-card);padding:var(--s-4);min-height:82px;display:flex;flex-direction:column;
  justify-content:center;gap:7px;transition:background var(--nex-fast) var(--nex-ease);}
.dash-risk:hover{background:var(--bg-elev);}
.dash-risk .dash-v{font-size:21px;}
.dash-risk.alert .dash-v{color:var(--danger);}
.dash-risk.ok .dash-v{color:var(--ok);}

/* ── Section 10 · Verlauf / Timeline (linke Lime-Schiene) ──────────── */
.dash-timeline{position:relative;display:flex;flex-direction:column;gap:0;
  padding-left:var(--s-4);border-left:2px solid var(--line);}
.dash-tlrow{position:relative;display:flex;align-items:flex-start;gap:var(--s-3);padding:var(--s-3) 0;
  min-height:44px;}
.dash-tlrow::before{content:"";position:absolute;left:calc(-1 * var(--s-4) - 5px);top:calc(var(--s-3) + 5px);
  width:8px;height:8px;border-radius:50%;background:var(--tc,var(--muted-2));
  box-shadow:0 0 0 3px var(--bg);}
.dash-tlrow .tt{font-weight:650;color:var(--ink);font-size:13.5px;}
.dash-tlrow .tr{font-size:12px;color:var(--muted);}

@keyframes dash-kick{0%,100%{transform:scale(1);opacity:.9}50%{transform:scale(1.35);opacity:1}}
@media(prefers-reduced-motion:reduce){
  .kicker.dot::before{animation:none;}
  .btn-primary::before,.btn-primary:hover::before{transition:none;transform:translateX(-150%);}
  .dash-lift{transition:none;}
  .dash-lift:hover{transform:none;}
}

/* =====================================================================
   V11.1 · KERNZAHLEN-KOMMANDOZENTRALE — variierte Präsentation statt
   vier gleicher KPI-Boxen: Hero-KPIs (Sparkline+Delta) · Progress-Ringe
   (SVG-Arc, stroke-dasharray) · kleine Stat-Chips. Plus Icons/Status in
   Strip, Content-Pipeline, Risiken und Timeline. Nur `.dash-`-Klassen,
   nur Marken-Tokens. Ring-Animation stirbt unter prefers-reduced-motion.
   ===================================================================== */
.dash-cmd{display:flex;flex-direction:column;gap:var(--s-4);margin-top:var(--s-4);}
.dash-cmd-top{display:grid;grid-template-columns:1fr;gap:var(--s-3);}
@media(min-width:560px){.dash-cmd-top{grid-template-columns:1fr 1fr;gap:var(--s-4);}}
@media(min-width:900px){.dash-cmd-top{grid-template-columns:1.35fr 1.35fr 1fr 1fr;}}

/* Icon-Kopf, von Hero-KPI und Ring geteilt */
.dash-kpi-h{display:flex;align-items:center;gap:8px;min-width:0;}
.dash-kpi-ic{display:inline-flex;flex:0 0 auto;color:var(--lime);}
.dash-kpi-ic svg{width:16px;height:16px;}

/* Hero-KPI: große Zahl, Icon-Kopf, Fuß mit Delta-Pille + Sparkline */
.dash-hero-kpi{display:flex;flex-direction:column;gap:var(--s-3);min-height:132px;min-width:0;}
.dash-hero-kpi .dash-v{font-size:30px;overflow-wrap:anywhere;margin-top:auto;}
@media(max-width:560px){.dash-hero-kpi .dash-v{font-size:26px;}}
.dash-kpi-foot{display:flex;align-items:flex-end;justify-content:space-between;gap:8px;min-width:0;min-height:22px;}

/* Progress-Ring-Kachel */
.dash-ring-card{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--s-2);min-height:132px;min-width:0;}
.dash-ring-card .dash-kpi-h{align-self:stretch;justify-content:center;}
.dash-ring{display:block;margin-top:2px;}
.dash-ring-bg{stroke:var(--line);}
.dash-ring-fg{transition:stroke-dashoffset .6s var(--nex-ease,ease);}
.dash-ring-txt{fill:var(--ink);font-family:var(--mono,ui-monospace,monospace);font-weight:700;font-size:18px;font-variant-numeric:tabular-nums;}
.dash-ring-sub{font-family:var(--mono,ui-monospace,monospace);font-size:10.5px;letter-spacing:.03em;color:var(--muted-2);line-height:1.3;}

/* Kleine Stat-Chips */
.dash-cmd-chips{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s-3);}
@media(min-width:768px){.dash-cmd-chips{grid-template-columns:repeat(4,1fr);}}
.dash-mchip{display:flex;align-items:center;gap:11px;min-height:60px;min-width:0;
  background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r);padding:var(--s-3) var(--s-4);box-shadow:var(--shadow-card);}
.dash-mchip-ic{display:inline-flex;flex:0 0 auto;color:var(--lime);}
.dash-mchip-ic svg{width:20px;height:20px;}
.dash-mchip-tx{display:flex;flex-direction:column;gap:3px;min-width:0;}
.dash-mchip-tx .dash-v{font-size:18px;overflow-wrap:anywhere;}

/* Strip-Icons (subtil, kein Signal) */
.dash-stat-lab{display:flex;align-items:center;gap:6px;min-width:0;}
.dash-stat-lab svg{width:13px;height:13px;flex:0 0 auto;color:var(--muted-2);opacity:.85;}

/* Content-Pipeline · segmentierte Leiste + Legende */
.dash-pipe{display:flex;flex-direction:column;gap:0;}
.dash-seg{display:flex;height:10px;border-radius:999px;overflow:hidden;background:var(--bg-2);border:1px solid var(--line);}
.dash-seg-i{min-width:8px;flex-basis:0;}
.dash-seg-legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:var(--s-3);}
.dash-seg-leg{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--muted);}
.dash-seg-leg b{color:var(--ink);font-family:var(--mono,ui-monospace,monospace);}
.dash-seg-ic{display:inline-flex;flex:0 0 auto;}
.dash-seg-ic svg{width:14px;height:14px;}
.dash-pipe-cadence{margin-top:var(--s-3);}
.dash-pipe-cadence b{color:var(--ink);}

/* Risiko-Icons (Status: Alarm rot, entspannt grün, neutral gedämpft) */
.dash-risk-h{display:flex;align-items:center;gap:7px;min-width:0;}
.dash-risk-ic{display:inline-flex;flex:0 0 auto;color:var(--muted-2);}
.dash-risk-ic svg{width:14px;height:14px;}
.dash-risk.alert .dash-risk-ic{color:var(--danger);}
.dash-risk.ok .dash-risk-ic{color:var(--ok);}

/* Timeline-Icons (Farbe = Prioritätsschiene) */
.dash-tl-ic{display:inline-flex;flex:0 0 auto;color:var(--tc,var(--muted-2));margin-top:1px;}
.dash-tl-ic svg{width:15px;height:15px;}

@media(prefers-reduced-motion:reduce){.dash-ring-fg{transition:none;}}

/* =====================================================================
   V15.26 · INTERACTIVE 360° BUSINESS FLIGHT DECK
   Eine Lage, nicht zehn konkurrierende Karten. Der neue Auftakt verbindet
   Business, Growth, Vertrieb und Operations; die Detailauswertungen darunter
   bleiben unverändert belastbar. Ausschliesslich bestehende Markentokens.
   ===================================================================== */
.dash360{position:relative;isolation:isolate;padding-bottom:var(--s-8)}
.dash360::before{content:"";position:fixed;inset:0 0 auto 248px;height:520px;z-index:-1;pointer-events:none;
  background:radial-gradient(ellipse 54% 72% at 72% -10%,rgba(184,232,52,.075),transparent 68%)}
.dash360-stage{position:relative;overflow:hidden;margin:0 0 var(--s-3);border:1px solid rgba(184,232,52,.18);
  border-radius:20px;background:color-mix(in srgb,var(--bg-card) 92%,black);box-shadow:0 28px 70px -48px rgba(184,232,52,.42)}
.dash360-stage::before{content:"360";position:absolute;right:-.035em;top:-.24em;color:transparent;
  -webkit-text-stroke:1px rgba(184,232,52,.07);font:400 clamp(150px,24vw,330px)/1 var(--display);letter-spacing:-.055em;
  pointer-events:none;user-select:none}
.dash360-stage::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.1;
  background-image:linear-gradient(rgba(237,234,221,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(237,234,221,.06) 1px,transparent 1px);
  background-size:42px 42px;mask-image:linear-gradient(90deg,transparent,black 52%,black)}
.dash360-grid{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(430px,.95fr);gap:clamp(26px,3.4vw,52px);
  padding:clamp(28px,3.7vw,50px)}
.dash360-intro{display:flex;flex-direction:column;align-items:flex-start;min-width:0}
.dash360-live{display:flex;align-items:center;gap:9px;color:var(--lime);font-size:10px;font-weight:750;letter-spacing:.14em;text-transform:uppercase}
.dash360-live i{width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 5px rgba(87,204,139,.09),0 0 14px rgba(87,204,139,.55)}
.dash360-live span{margin-left:6px;padding-left:15px;border-left:1px solid var(--line);color:var(--muted-2);font-variant-numeric:tabular-nums}
.dash360-hello{margin:clamp(22px,3vw,38px) 0 4px;color:var(--muted);font:italic 500 clamp(16px,1.45vw,20px)/1.3 var(--serif)}
.dash360-intro h1{max-width:720px;margin:0;color:var(--ink);font:400 clamp(40px,4.8vw,66px)/.96 var(--display);letter-spacing:-.025em;text-wrap:balance}
.dash360-intro h1 span{display:block;color:var(--lime)}
.dash360-lead{max-width:58ch;margin:20px 0 0;color:var(--muted);font-size:14px;line-height:1.65;text-wrap:pretty}
.dash360-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(108px,1fr));gap:8px;width:100%;margin-top:24px}
.dash360-quick{min-height:44px;display:inline-flex;align-items:center;gap:9px;padding:0 14px;border:1px solid var(--line);text-align:left;
  border-radius:9px;background:rgba(10,13,11,.66);color:var(--muted);font-size:12px;font-weight:650;transition:transform var(--nex-fast) var(--nex-ease),border-color var(--nex-fast),color var(--nex-fast),background var(--nex-fast)}
.dash360-quick>span:last-child{margin-left:4px;color:var(--muted-2);font-size:11px}
.dash360-quick-ic{display:inline-flex;color:var(--lime)}.dash360-quick-ic svg{width:15px;height:15px}
.dash360-quick:hover{transform:translateY(-2px);border-color:var(--line-lime);background:var(--bg-elev);color:var(--ink)}
.dash360-quick:active{transform:translateY(0) scale(.985)}
.dash360-quick.is-active{border-color:transparent;background:var(--lime);color:#12180c;box-shadow:0 10px 30px -18px var(--lime)}
.dash360-quick.is-active .dash360-quick-ic,.dash360-quick.is-active>span:last-child{color:#12180c}
.dash360-quick:focus-visible{outline:2px solid var(--lime);outline-offset:3px}
.dash360-matrix-wrap{align-self:center;min-width:0}
.dash360-matrix-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin:0 2px 13px}
.dash360-matrix-head>div{min-width:0}.dash360-matrix-head h2{margin:4px 0 0;color:var(--ink);font:500 clamp(20px,2.2vw,29px)/1.08 var(--display);letter-spacing:-.015em}
.dash360-matrix-head p{margin:6px 0 0;color:var(--muted);font-size:11px;line-height:1.45}
.dash360-reset{min-height:38px;padding:0 13px;border:1px solid var(--line);border-radius:8px;background:var(--bg-2);color:var(--muted);font:700 10px/1 var(--sans);letter-spacing:.08em;text-transform:uppercase}
.dash360-reset:hover{border-color:var(--line-lime);color:var(--ink)}.dash360-reset:focus-visible{outline:2px solid var(--lime);outline-offset:3px}
.dash360-current{display:inline-flex;align-items:center;gap:6px;padding:7px 9px;border:1px solid rgba(87,204,139,.22);border-radius:7px;color:var(--ok);font-size:9px;font-weight:800;letter-spacing:.14em}
.dash360-current::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ok)}
.dash360-matrix{align-self:center;display:grid;grid-template-columns:1fr 1fr;gap:1px;border:1px solid var(--line);
  border-radius:14px;overflow:hidden;background:var(--line);box-shadow:var(--shadow-card);animation:dash360-swap .24s var(--nex-ease) both}
@keyframes dash360-swap{from{opacity:.35;transform:translateY(5px)}to{opacity:1;transform:none}}
.dash360-metric{position:relative;min-width:0;min-height:124px;padding:18px;background:rgba(13,18,14,.96);display:flex;flex-direction:column;justify-content:space-between}
.dash360-metric::after{content:"";position:absolute;inset:auto 18px 0;height:2px;background:var(--metric,var(--lime));opacity:.52}
.dash360-metric-ic{width:34px;height:34px;display:grid;place-items:center;border-radius:9px;background:rgba(184,232,52,.08);color:var(--metric,var(--lime))}
.dash360-metric-ic svg{width:17px;height:17px}
.dash360-metric-copy{display:flex;flex-direction:column;min-width:0;margin-top:18px}
.dash360-metric strong{margin-top:5px;color:var(--ink);font-size:clamp(22px,2.2vw,31px);line-height:1.05;overflow-wrap:anywhere}
.dash360-metric small{margin-top:7px;color:var(--muted);font-size:11px;line-height:1.35}
.dash360-metric.money{--metric:var(--lime)}.dash360-metric.growth{--metric:var(--ok)}
.dash360-metric.sales{--metric:var(--info)}.dash360-metric.systems{--metric:var(--ok)}.dash360-metric.alert{--metric:var(--danger)}
.dash360-metric.alert strong{color:var(--danger)}
.dash360-priority{position:relative;z-index:1;display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:16px;align-items:center;
  margin:0 12px 12px;padding:15px 18px;border:1px solid var(--line-soft);border-radius:12px;background:rgba(8,11,9,.68);backdrop-filter:blur(12px)}
.dash360-priority-mark{width:38px;height:38px;display:grid;place-items:center;border-radius:10px;background:var(--lime-soft);color:var(--lime)}
.dash360-priority-mark svg{width:18px;height:18px}
.dash360-priority>div:nth-child(2){min-width:0}.dash360-priority strong{display:block;margin-top:3px;font-size:14px;color:var(--ink)}
.dash360-priority p{max-width:74ch;margin:3px 0 0;color:var(--muted);font-size:12px;line-height:1.45;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash360-priority-side{display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-wrap:wrap;color:var(--muted-2);font-size:10px;letter-spacing:.04em}
.dash360-priority-side>span{padding:6px 9px;border:1px solid var(--line-soft);border-radius:7px;background:var(--bg-2)}
.dash360-pulsebar{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin-top:12px;border:1px solid var(--line);
  border-radius:11px;overflow:hidden;background:var(--line);color:var(--muted);font-size:11px}
.dash360-pulsebar>span{min-width:0;padding:11px 13px;background:var(--bg-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash360-pulsebar>span:first-child b{color:var(--ok)}.dash360-pulsebar b{color:var(--ink)}
.dash360 .dash-sec-h{margin-top:42px}.dash360 .dash-sec-h .kicker{font-size:10px}
.dash360 .dash-stile{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer}
.dash360 .dash-stile:focus-visible{outline:2px solid var(--sc,var(--lime));outline-offset:3px}
.dash360 .dash-srow{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}
.dash-marketing-control{position:relative;display:grid;grid-template-columns:minmax(0,1.35fr) minmax(280px,.65fr);gap:1px;overflow:hidden;border:1px solid rgba(184,232,52,.2);border-radius:18px;background:var(--line);box-shadow:0 28px 70px -48px rgba(140,190,50,.45)}
.dash-marketing-control::after{content:"";position:absolute;inset:-45% auto auto -8%;width:52%;aspect-ratio:1;border-radius:50%;border:1px solid rgba(184,232,52,.09);box-shadow:0 0 0 32px rgba(184,232,52,.025),0 0 0 70px rgba(184,232,52,.018);pointer-events:none}
.dash-marketing-lead{position:relative;z-index:1;padding:clamp(24px,3vw,42px);background:radial-gradient(circle at 5% 0,rgba(184,232,52,.085),transparent 42%),rgba(11,16,12,.97)}
.dash-marketing-lead h2{max-width:680px;margin:7px 0 9px;color:var(--ink);font:500 clamp(28px,3.2vw,46px)/1 var(--display);letter-spacing:-.025em;text-wrap:balance}
.dash-marketing-lead>p{max-width:64ch;margin:0;color:var(--muted);font-size:13px;line-height:1.6;text-wrap:pretty}
.dash-marketing-funnel{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:26px}
.dash-marketing-stat{min-width:0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:9px;padding:13px;border-radius:12px;background:rgba(255,255,255,.025);box-shadow:inset 0 1px rgba(255,255,255,.055)}
.dash-marketing-stat-ic{width:30px;height:30px;display:grid;place-items:center;border-radius:8px;background:var(--lime-soft);color:var(--lime)}
.dash-marketing-stat-ic svg{width:15px;height:15px}.dash-marketing-stat>span:last-child{display:grid;min-width:0}
.dash-marketing-stat small{color:var(--muted-2);font-size:9px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-marketing-stat strong{margin-top:3px;color:var(--ink);font-size:22px;line-height:1;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-marketing-stat em{margin-top:5px;color:var(--muted);font:500 10px/1.25 var(--sans)}
.dash-marketing-actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:22px}.dash-marketing-actions .btn{min-height:44px}
.dash-marketing-campaigns{position:relative;z-index:1;padding:clamp(20px,2.2vw,30px);background:rgba(15,21,16,.98)}
.dash-marketing-campaigns>header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.dash-marketing-make{font-size:9px;font-weight:750;letter-spacing:.06em;text-transform:uppercase}.dash-marketing-make.is-on{color:var(--ok)}.dash-marketing-make.is-off{color:var(--warn)}
.dash-marketing-campaign{appearance:none;width:100%;display:grid;grid-template-columns:minmax(0,1fr) 82px;gap:14px;align-items:center;padding:13px 0;border:0;border-top:1px solid var(--line-soft);background:transparent;color:inherit;text-align:left;cursor:pointer;transition:transform .2s var(--nex-ease),color .2s ease}
.dash-marketing-campaign:hover{transform:translateX(3px)}.dash-marketing-campaign:focus-visible{outline:2px solid var(--lime);outline-offset:4px;border-radius:8px}
.dash-marketing-campaign-copy{min-width:0}.dash-marketing-campaign-copy strong,.dash-marketing-campaign-copy small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-marketing-campaign-copy strong{font-size:12px;color:var(--ink)}.dash-marketing-campaign-copy small{margin-top:4px;color:var(--muted-2);font-size:9px;letter-spacing:.04em}
.dash-marketing-health{display:grid;grid-template-columns:28px minmax(0,1fr);gap:7px;align-items:center}.dash-marketing-health b{font-size:10px;color:var(--lime);font-variant-numeric:tabular-nums}
.dash-marketing-health i{height:4px;overflow:hidden;border-radius:5px;background:rgba(255,255,255,.07)}.dash-marketing-health em{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--ok),var(--lime));animation:dash-fin-grow .62s var(--nex-ease) both}

@media(max-width:1080px){
  .dash360-grid{grid-template-columns:1fr;padding:32px}.dash360-matrix-wrap,.dash360-matrix{width:100%}
  .dash360-intro h1 span{display:inline}.dash360-hello{margin-top:30px}
}
@media(max-width:720px){
  .dash360::before{left:0}.dash360-stage{margin-inline:0;border-radius:16px}
  .dash360-grid{padding:24px 18px;gap:28px}.dash360-intro h1{font-size:clamp(40px,13vw,58px)}
  .dash360-intro h1 span{display:block}.dash360-lead{font-size:13px}.dash360-actions{width:100%}
  .dash360-quick{justify-content:flex-start}.dash360-quick>span:last-child{margin-left:auto}
  .dash360-priority{grid-template-columns:auto minmax(0,1fr);padding:14px}.dash360-priority-side{grid-column:1/-1;justify-content:flex-start}
  .dash360-priority p{white-space:normal}.dash360-pulsebar{grid-template-columns:1fr 1fr}
  .dash-marketing-control{grid-template-columns:1fr}.dash-marketing-funnel{grid-template-columns:1fr 1fr}.dash-marketing-actions{display:grid;grid-template-columns:1fr}.dash-marketing-actions .btn{width:100%}
}
@media(max-width:440px){
  .dash360-matrix-head{align-items:flex-start}.dash360-matrix-head p{max-width:29ch}.dash360-reset{min-height:44px}
  .dash360-matrix{grid-template-columns:1fr}.dash360-metric{min-height:112px;padding:16px;display:grid;grid-template-columns:auto 1fr;gap:13px;align-items:center}
  .dash360-metric-copy{margin:0}.dash360-metric::after{inset:auto 14px 0}.dash360-actions{grid-template-columns:1fr}
  .dash360-pulsebar{grid-template-columns:1fr}.dash360-live span{display:none}
  .dash-marketing-funnel{grid-template-columns:1fr}.dash-marketing-lead,.dash-marketing-campaigns{padding:20px 16px}
}
@media(prefers-reduced-motion:reduce){.dash360-quick{transition:none}.dash360-live i{box-shadow:none}.dash360-matrix,.dash-marketing-health em{animation:none}}

/* V15.90 · Executive Observatory: eine Lagekarte statt einer Kachelwand. */
.dash360-stage{border-radius:26px;background:radial-gradient(circle at 82% 16%,rgba(184,232,52,.10),transparent 26%),linear-gradient(138deg,rgba(15,22,16,.99),rgba(7,11,8,.985));box-shadow:inset 0 1px rgba(255,255,255,.055),0 34px 90px -58px rgba(184,232,52,.62)}
.dash360-stage::after{opacity:.14;background-size:54px 54px;mask-image:radial-gradient(circle at 78% 38%,black,transparent 66%)}
.dash360-grid{grid-template-columns:minmax(0,.9fr) minmax(500px,1.1fr);padding:clamp(32px,4.2vw,62px)}
.dash360-intro h1{font-size:clamp(44px,5.3vw,76px);line-height:.91;letter-spacing:-.04em}.dash360-lead{font-size:15px}
.dash360-actions{grid-template-columns:repeat(3,minmax(0,1fr));max-width:620px}
.dash360-quick{position:relative;overflow:hidden;min-height:49px;border-radius:12px;background:rgba(4,8,5,.62);box-shadow:inset 0 1px rgba(255,255,255,.035)}
.dash360-quick::after{content:"";position:absolute;inset:auto 14px 0;height:1px;background:var(--lime);opacity:0;transform:scaleX(.35);transform-origin:left;transition:opacity 180ms cubic-bezier(.2,.8,.2,1),transform 180ms cubic-bezier(.2,.8,.2,1)}
.dash360-quick:hover::after,.dash360-quick.is-active::after{opacity:.8;transform:scaleX(1)}
.dash360-quick.is-active{background:var(--lime);box-shadow:0 12px 34px -22px rgba(184,232,52,.9)}
.dash360-matrix-wrap{position:relative;padding:9px;border-radius:23px;background:rgba(255,255,255,.025);box-shadow:inset 0 0 0 1px rgba(255,255,255,.055)}
.dash360-matrix-head{padding:12px 12px 8px}.dash360-matrix{border-radius:16px;box-shadow:0 24px 70px -48px rgba(0,0,0,.9)}
.dash360-metric{min-height:142px;padding:21px;background:linear-gradient(145deg,rgba(17,24,18,.98),rgba(10,14,11,.98))}
.dash360-metric-ic{border-radius:11px;box-shadow:inset 0 1px rgba(255,255,255,.08)}
.dash360-priority{margin:0 16px 16px;border-radius:16px;background:rgba(6,10,7,.82);backdrop-filter:none;box-shadow:inset 0 1px rgba(255,255,255,.035)}
.dash360-pulsebar{border-radius:14px}.dash360-pulsebar>span{padding:13px 15px}
.agent-inventory{display:grid;grid-template-columns:auto 1fr;gap:2px 11px;align-items:center;min-width:230px;padding:14px 16px;border-radius:16px;background:color-mix(in srgb,var(--lime) 7%,var(--card));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--lime) 24%,var(--line))}
.agent-inventory strong{grid-row:1/3;color:var(--lime);font:700 2.2rem/1 var(--display);font-variant-numeric:tabular-nums}.agent-inventory span{color:var(--text);font-size:.82rem;font-weight:750}.agent-inventory small{color:var(--muted);font-size:.68rem}.agent-inventory em{grid-column:1/-1;margin-top:8px;color:var(--lime);font-size:.62rem;font-style:normal;font-weight:800;letter-spacing:.12em}
.agent-center-core{grid-template-columns:repeat(4,minmax(0,1fr))}.agent-core-card{min-height:270px;transition:transform 180ms cubic-bezier(.2,.8,.2,1),border-color 180ms cubic-bezier(.2,.8,.2,1)}.agent-core-card:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--lime) 42%,var(--line))}
@media(max-width:1180px){.dash360-grid{grid-template-columns:1fr;padding:36px}.dash360-matrix-wrap{width:100%}.agent-center-core{grid-template-columns:1fr 1fr}}
@media(max-width:720px){.dash360-grid{padding:24px 17px}.dash360-actions{grid-template-columns:1fr 1fr}.dash360-matrix-wrap{padding:6px;border-radius:18px}.dash360-priority{margin:0 10px 10px}.agent-inventory{margin-top:16px;min-width:0}.agent-center-core{grid-template-columns:1fr}}
@media(max-width:440px){.dash360-actions{grid-template-columns:1fr 1fr}.dash360-quick{min-height:48px;padding-inline:12px}.dash360-intro h1{font-size:clamp(39px,12vw,52px)}}
@media(prefers-reduced-motion:reduce){.dash360-quick::after,.agent-core-card{transition:none}.agent-core-card:hover{transform:none}}

/* =====================================================================
   SOCIAL COMMAND CENTER (C.views.Social) — V1
   ---------------------------------------------------------------------
   Alles unter `.sc-`. Restylt keine bestehende Klasse; nutzt dieselben
   Tokens wie das Dashboard (--bg-card,--line,--lime,--ok,--danger,--warn,
   --orange,--s-*,--r-*) und leiht die Dashboard-Utilities (.dash-lab,
   .dash-num,.dash-kpis,.dash-card,.dash-sec-h …) in der Ansicht. Markenfarbe
   je Plattform kommt inline über --sc-accent (aus C.socialIcons.marke).
   Mobile-first: Plattform-Leiste horizontal scrollbar, KPIs stapeln,
   Content-Cards 1-spaltig, Ziele >= 44px, keine H-Scroll der Seite.
   ===================================================================== */
.sc{max-width:var(--maxw,1280px);margin:0 auto;}

/* Offener Kopf: kein Kasten. Kicker + Fokus-Wort (Brush) + ehrliche Zusammenfassung,
   rechts der Zeitraum-Umschalter und der Sync-Button (beide Pillen). */
.sc-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--s-4);flex-wrap:wrap;margin-top:var(--s-2);}
.sc-head-main{min-width:0;}
.sc-greet{margin:var(--s-3) 0 var(--s-3);font-family:var(--serif);font-style:italic;
  font-size:clamp(23px,3.2vw,32px);line-height:1.14;color:var(--ink);font-weight:500;}
.sc-summary{font-size:13px;}
.sc-head-side{display:flex;align-items:center;gap:var(--s-3);flex-wrap:wrap;}
.sc-sync{min-height:44px;}
@media(max-width:560px){
  .sc-head{align-items:stretch;}
  .sc-head-side{width:100%;justify-content:space-between;}
  .sc-sync{flex:1 1 auto;}
}

/* Plattform-Leiste — mobil horizontal scrollbar, ab 768px umbrechend */
.sc-bar{margin-top:var(--s-4);overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin;}
.sc-tiles{display:flex;gap:var(--s-3);min-width:min-content;}
@media(min-width:768px){.sc-bar{overflow:visible;}.sc-tiles{flex-wrap:wrap;min-width:0;}}
.sc-tile{position:relative;overflow:hidden;flex:0 0 auto;width:170px;min-height:116px;display:flex;flex-direction:column;gap:8px;
  background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r);padding:var(--s-3) var(--s-4);
  padding-left:calc(var(--s-4) + 3px);text-align:left;color:inherit;box-shadow:var(--shadow-card);}
/* Marken-Kante links (aus --sc-accent = C.socialIcons.marke) — macht IG/FB/LinkedIn distinkt. */
.sc-tile::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--sc-accent,var(--line-strong));}
.sc-tile-on{border-color:color-mix(in srgb,var(--sc-accent,var(--line)) 32%,var(--line));}
.sc-tile-top{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.sc-tile-ico{display:inline-flex;line-height:0;filter:saturate(1);}
.sc-tile-name{font-weight:700;color:var(--ink);font-size:14px;}
.sc-tile-kpi{font-family:var(--mono,ui-monospace,monospace);font-size:12px;color:var(--muted);margin-top:auto;}
.sc-tile-kpi b{color:var(--ink);}
.sc-tile-off{color:var(--muted-2);}
.sc-tile-add{cursor:pointer;border-style:dashed;box-shadow:none;align-items:flex-start;justify-content:flex-start;padding-left:var(--s-4);}
.sc-tile-add::after{display:none;}
.sc-tile-add:hover{border-color:var(--lime);}
.sc-pill{font-family:var(--mono,ui-monospace,monospace);font-size:10px;letter-spacing:.06em;text-transform:uppercase;
  padding:2px 7px;border-radius:999px;border:1px solid var(--line);color:var(--muted-2);white-space:nowrap;}
.sc-pill-on{color:var(--ok);border-color:rgba(127,196,107,.4);background:rgba(127,196,107,.08);}
.sc-pill-warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 40%,transparent);}
.sc-pill-off{color:var(--muted-2);}

/* Fenster-Umschalter 7/30/90 — Pillen-Segmente, aktiv = Lime (Signal) */
.sc-toggle{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden;background:var(--bg-card);}
.sc-tgl{min-height:44px;padding:0 16px;background:transparent;border:none;border-right:1px solid var(--line);
  cursor:pointer;color:var(--muted);font-family:var(--mono,ui-monospace,monospace);font-size:12px;letter-spacing:.06em;
  transition:color var(--nex-fast) var(--nex-ease),background var(--nex-fast) var(--nex-ease);}
.sc-tgl:last-child{border-right:none;}
.sc-tgl:hover{color:var(--ink);}
.sc-tgl.is-on{background:var(--lime);color:#0A140A;font-weight:700;}

/* Instagram-Kennzahlen: fugenloser Strip (dash-strip) statt Kasten je Zahl */
.sc-kpis{margin-top:var(--s-3);}
.sc-kpi-foot{display:flex;align-items:center;gap:10px;margin-top:2px;flex-wrap:wrap;}

/* Posting-Rhythmus */
.sc-rhythm{display:flex;align-items:center;gap:10px;margin-top:var(--s-3);padding:var(--s-3) var(--s-4);
  background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r);}
.sc-rhythm-dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto;}
.sc-rhythm-txt{font-size:13px;color:var(--ink);}

/* Format-Vergleich */
.sc-fmt{display:flex;flex-direction:column;gap:var(--s-2);}
.sc-fmt-row{display:grid;grid-template-columns:120px 1fr auto;align-items:center;gap:var(--s-3);}
.sc-fmt-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sc-fmt-bar{position:relative;height:10px;border-radius:5px;background:var(--bg-elev);border:1px solid var(--line);overflow:hidden;}
.sc-fmt-bar>i{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,var(--lime-deep),var(--lime));border-radius:5px;}
.sc-fmt-val{font-size:13px;min-width:52px;text-align:right;}

/* Stärkster / schwächster Beitrag */
.sc-high{display:grid;grid-template-columns:1fr;gap:var(--s-3);}
@media(min-width:768px){.sc-high{grid-template-columns:1fr 1fr;}}
.sc-high-item{background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r);padding:var(--s-3) var(--s-4);display:flex;flex-direction:column;gap:6px;}
.sc-high-cap{font-weight:700;color:var(--ink);font-size:14px;}
.sc-high-meta{font-size:14px;}
.sc-high-x{color:var(--muted);font-size:12px;}

/* Content-Cards */
.sc-cards{display:grid;grid-template-columns:1fr;gap:var(--s-3);}
@media(min-width:520px){.sc-cards{grid-template-columns:repeat(2,1fr);}}
@media(min-width:900px){.sc-cards{grid-template-columns:repeat(3,1fr);}}
.sc-card{display:flex;flex-direction:column;background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r);
  overflow:hidden;text-decoration:none;color:inherit;box-shadow:var(--shadow-card);}
.sc-thumb{position:relative;aspect-ratio:16/9;background:var(--bg-elev);display:flex;align-items:center;justify-content:center;}
.sc-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.sc-badge{position:absolute;top:8px;right:8px;font-family:var(--mono,ui-monospace,monospace);font-size:11px;font-weight:700;
  padding:2px 8px;border-radius:999px;background:rgba(0,0,0,.55);color:#fff;backdrop-filter:blur(2px);}
.sc-badge-stark{color:var(--ok);}
.sc-badge-schwach{color:var(--danger);}
.sc-badge-normal{color:#fff;}
.sc-card-body{padding:var(--s-3) var(--s-4);display:flex;flex-direction:column;gap:6px;}
.sc-card-top{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.sc-card-cap{font-size:13px;line-height:1.35;color:var(--ink);}
.sc-card-meta{font-size:11px;}
.sc-why{font-size:12px;color:var(--muted);border-top:1px solid var(--line-soft);padding-top:6px;}

/* Offene Kommentare */
.sc-comments{display:flex;flex-direction:column;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;}
.sc-comment{display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);background:var(--bg-card);padding:var(--s-3) var(--s-4);min-height:44px;}
.sc-comment-txt{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:var(--ink);}

/* Content Opportunity Feed */
.sc-opps{display:grid;grid-template-columns:1fr;gap:var(--s-3);}
@media(min-width:768px){.sc-opps{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));}}
.sc-opp{background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r);padding:var(--s-4);display:flex;flex-direction:column;gap:8px;box-shadow:var(--shadow-card);}
.sc-opp-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.sc-opp-ziel{font-family:var(--mono,ui-monospace,monospace);font-size:11px;font-weight:700;letter-spacing:.08em;color:var(--lime);}
.sc-opp-tag{color:var(--muted-2);border:1px solid var(--line);border-radius:999px;padding:1px 8px;}
.sc-opp-thema{font-weight:700;color:var(--ink);font-size:15px;}
.sc-opp-line{display:flex;flex-direction:column;gap:2px;font-size:13px;color:var(--muted);}
.sc-opp-line span:last-child{color:var(--ink);}
/* Lime-Pille (Website-Signatur) für die Aktion in die Content Engine */
.sc-opp-btn{margin-top:auto;min-height:48px;border:none;border-radius:999px;cursor:pointer;
  background:linear-gradient(180deg,var(--lime-deep),var(--lime));
  color:#0A140A;font-weight:700;font-size:13px;letter-spacing:.01em;padding:0 18px;
  transition:filter var(--nex-fast) var(--nex-ease),box-shadow var(--nex-fast) var(--nex-ease);}
.sc-opp-btn:hover{filter:brightness(1.04);box-shadow:0 8px 24px -12px var(--lime-glow);}

/* Experimentplan (kleine Datenlage) */
.sc-plan{margin-top:var(--s-3);}
.sc-plan-wochen{display:flex;flex-direction:column;gap:var(--s-2);margin-top:var(--s-2);}
.sc-plan-woche{display:flex;flex-direction:column;gap:2px;padding:var(--s-2) 0;border-top:1px solid var(--line-soft);}
.sc-plan-auf{font-size:13px;color:var(--muted);}

@media(max-width:560px){
  .sc-fmt-row{grid-template-columns:96px 1fr auto;}
  .sc-high{grid-template-columns:1fr;}
}
@media(prefers-reduced-motion:reduce){.sc-tgl,.sc-opp-btn{transition:none;}}

/* ===== Mobile Bottom-Nav (.mobnav) + Mehr-Sheet =====================
   Ersetzt die alte .bottomnav-Leiste. Nur unterhalb des Telefon-
   Breakpunkts (860px) sichtbar; darueber bleibt die linke Sidebar.
   Solides --bg-card, obere Haarlinie, dezenter Schatten nach oben,
   safe-area unten fuer den iPhone-Home-Indikator. */
.mobnav{display:none}
.mobnav-sheet-wrap{display:none}
@media(max-width:860px){
  /* Mobil existiert bereits die vollständige, gruppierte Navigation hinter
     „Mehr“. Ein zweites Vollmenü hinter dem Burger verdoppelte denselben
     Weg und drängte die obere Leiste zusammen. Die Sidebar bleibt die
     Desktop-Navigation; auf Telefon und Tablet führt genau ein Weg zu allen
     Bereichen. */
  .burger{display:none}
  .mobnav{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:50;
    background:var(--bg-card);border-top:1px solid var(--line);
    box-shadow:0 -2px 12px -4px rgba(0,0,0,.55);
    padding:4px 4px calc(4px + env(safe-area-inset-bottom));
    padding-left:calc(4px + env(safe-area-inset-left));
    padding-right:calc(4px + env(safe-area-inset-right));
    justify-content:space-around}
  /* min-width:0 hebt die Flex-Vorgabe min-width:auto auf, sonst sprengt
     ein langes Label die Leiste statt sich zu kuerzen. */
  .mobnav-item{flex:1;min-width:0;position:relative;display:flex;
    flex-direction:column;align-items:center;justify-content:center;gap:3px;
    background:none;border:0;color:var(--muted);
    min-height:52px;min-width:44px;
    font-size:var(--t-micro);padding:6px 2px 4px;border-radius:var(--r-sm);
    cursor:pointer;-webkit-tap-highlight-color:transparent;
    transition:color .15s}
  .mobnav-item svg{width:22px;height:22px}
  .mobnav-label{max-width:100%;overflow:hidden;text-overflow:ellipsis;
    white-space:nowrap;line-height:1.1}
  .mobnav-item.active{color:var(--lime)}
  /* Lime-Indikator oben am aktiven Ziel. */
  .mobnav-ind{position:absolute;top:0;left:50%;transform:translateX(-50%);
    width:26px;height:3px;border-radius:0 0 3px 3px;background:transparent}
  .mobnav-item.active .mobnav-ind{background:var(--lime);
    box-shadow:0 0 8px var(--lime-glow)}
  /* Zaehler sitzt am Icon, nicht in der Zeile — sonst bricht das Label um. */
  .mobnav-item .nav-dot{position:absolute;top:2px;left:50%;margin-left:6px;
    font-size:10px;line-height:16px;padding:0 5px;min-width:16px}
  /* Tastatur offen (Eingabefeld fokussiert): Leiste wegblenden, damit sie
     ueber dem Feld nicht stoert. :has greift vom .app-Wurzelknoten aus. */
  .app:has(.content input:focus, .content textarea:focus) .mobnav{
    transform:translateY(120%)}
  .mobnav{transition:transform .2s ease}

  /* --- Mehr-Sheet --- */
  .mobnav-sheet-wrap{display:block;position:fixed;inset:0;z-index:70}
  .mobnav-sheet-backdrop{position:absolute;inset:0;
    background:rgba(0,0,0,.55);backdrop-filter:blur(2px)}
  .mobnav-sheet{position:absolute;left:0;right:0;bottom:0;
    background:var(--bg-elev);border-top:1px solid var(--line);
    border-radius:var(--r-lg) var(--r-lg) 0 0;
    box-shadow:var(--shadow-panel);
    max-height:78vh;display:flex;flex-direction:column;
    padding-bottom:calc(8px + env(safe-area-inset-bottom));
    animation:mobnav-up .22s ease}
  .mobnav-grip{width:38px;height:4px;border-radius:2px;
    background:var(--line-strong);margin:8px auto 2px}
  .mobnav-sheet-head{display:flex;align-items:center;justify-content:space-between;
    padding:6px 16px 10px;border-bottom:1px solid var(--line-soft)}
  .mobnav-sheet-head strong{font-size:var(--t-lead);color:var(--ink)}
  .mobnav-sheet-x{background:none;border:0;color:var(--muted);cursor:pointer;
    min-height:44px;min-width:44px;display:flex;align-items:center;justify-content:center;
    border-radius:var(--r-sm)}
  .mobnav-sheet-x svg{width:22px;height:22px}
  .mobnav-sheet-body{overflow-y:auto;-webkit-overflow-scrolling:touch;
    padding:8px 10px 6px}
  .mobnav-sheet-group{margin-bottom:6px}
  .mobnav-sheet-glabel{font-size:var(--t-micro);font-weight:700;
    letter-spacing:.9px;text-transform:uppercase;color:var(--muted);
    padding:8px 8px 4px}
  .mobnav-row{width:100%;display:flex;align-items:center;gap:12px;
    background:none;border:0;color:var(--ink);cursor:pointer;text-align:left;
    min-height:48px;padding:0 10px;border-radius:var(--r-sm);
    font-size:var(--t-body);position:relative}
  .mobnav-row svg{width:20px;height:20px;color:var(--muted);flex:0 0 auto}
  .mobnav-row-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;
    white-space:nowrap}
  .mobnav-row:active{background:var(--bg-hover)}
  .mobnav-row.active{color:var(--lime)}
  .mobnav-row.active svg{color:var(--lime)}
  .mobnav-row .nav-dot{position:static;margin-left:auto}
}
@keyframes mobnav-up{from{transform:translateY(100%)}to{transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){
  .mobnav{transition:none}
  .mobnav-sheet{animation:none}
}

/* ═══════════════════════════════════════════════════════════════════
   .media- · Medien-Upload + Picker (C.media.Picker)
   Dunkle Flächen, Lime-Akzent, ≥44px Touch-Ziele, kein H-Overflow.
   ═══════════════════════════════════════════════════════════════════ */
.media-picker{display:flex;flex-direction:column;gap:var(--s-3,12px);width:100%;min-width:0}
.media-drop{
  border:1px dashed var(--line);border-radius:var(--r,12px);background:var(--bg-2);
  padding:18px 16px;display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;
  transition:border-color var(--nex-fast,.14s) var(--nex-ease),background var(--nex-fast,.14s) var(--nex-ease)}
.media-drop.is-over{border-color:var(--line-lime);background:var(--lime-soft)}
.media-drop-title{color:var(--ink);font-size:.95rem;line-height:1.3}
.media-help{color:var(--muted);font-size:.82rem;letter-spacing:.02em}
.media-actions{display:flex;flex-wrap:wrap;gap:var(--s-2,8px);justify-content:center}
.ce-draft-media{display:flex;flex-direction:column;gap:10px;padding:14px 0;border-block:1px solid var(--line-soft)}
.ce-draft-media-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;flex-wrap:wrap}
.ce-draft-media-head span{color:var(--muted);font-size:.76rem;line-height:1.35}
.ce-media-previous{align-self:flex-start;margin-top:8px}
.media-btn{
  min-height:44px;padding:0 18px;border-radius:var(--r-sm,10px);border:1px solid var(--line-lime);
  background:var(--lime);color:#0A0D0B;font:inherit;font-weight:700;font-size:.9rem;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
  transition:filter var(--nex-fast,.14s) var(--nex-ease),transform var(--nex-fast,.14s) var(--nex-ease)}
.media-btn:hover{filter:brightness(1.06)}
.media-btn:active{transform:translateY(1px)}
.media-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--lime-glow)}
.media-btn-ghost{background:transparent;color:var(--ink);border-color:var(--line)}
.media-btn-ghost:hover{border-color:var(--line-lime);filter:none}
.media-btn-sm{min-height:36px;padding:0 12px;font-size:.82rem}

.media-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--s-2,8px);min-width:0}
.media-tile{
  position:relative;aspect-ratio:1/1;border:1px solid var(--line-soft);border-radius:var(--r,12px);
  overflow:hidden;background:var(--bg-elev);display:flex;align-items:center;justify-content:center;min-width:0}
.media-thumb{width:100%;height:100%;object-fit:cover;display:block}
.media-vid{position:relative;width:100%;height:100%}
.media-vid-badge{
  position:absolute;left:6px;bottom:6px;padding:2px 8px;border-radius:99px;
  background:rgba(10,13,11,.7);color:var(--lime);font-size:.68rem;font-weight:700;letter-spacing:.04em}
.media-chip{
  padding:10px;font-size:.78rem;color:var(--muted);word-break:break-word;text-align:center;line-height:1.3}

/* Entfernen — 44×44 Trefferfläche, sichtbar über dem Bild */
.media-x{
  position:absolute;top:0;right:0;width:44px;height:44px;border:0;cursor:pointer;
  background:none;color:var(--ink);font-size:1.5rem;line-height:1;
  display:flex;align-items:flex-start;justify-content:flex-end;padding:6px 8px}
.media-x::before{
  content:"";position:absolute;top:6px;right:6px;width:26px;height:26px;border-radius:99px;
  background:rgba(10,13,11,.72);z-index:0}
.media-x>*, .media-x{z-index:1}
.media-x:hover{color:var(--danger)}
.media-x:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--lime-glow)}

/* Karussell-Reihenfolge */
.media-order{position:absolute;left:0;bottom:0;display:flex;gap:2px;padding:4px}
.media-ord-b{
  min-width:44px;min-height:44px;border:0;border-radius:var(--r-sm,10px);cursor:pointer;
  background:rgba(10,13,11,.72);color:var(--ink);font-size:1rem;line-height:1;
  display:flex;align-items:center;justify-content:center}
.media-ord-b:disabled{opacity:.35;cursor:default}
.media-ord-b:hover:not(:disabled){color:var(--lime)}
.media-ord-b:focus-visible{outline:none;box-shadow:0 0 0 2px var(--lime-glow)}

/* Upload-Zustand */
.media-tile-up{flex-direction:column;gap:8px;padding:12px}
.media-up-name,.media-err-name{font-size:.74rem;color:var(--muted);word-break:break-word;text-align:center;line-height:1.3}
.media-up-lab{font-size:.72rem;color:var(--muted)}
.media-prog{width:86%;height:5px;background:var(--bg-elev);border-radius:99px;overflow:hidden}
.media-prog-fill{height:100%;background:var(--lime);border-radius:99px}
/* Indeterminater Balken, wenn kein %-Fortschritt bekannt ist */
.media-prog-indet .media-prog-fill{width:40%;animation:media-indet 1.1s var(--nex-ease) infinite}
@keyframes media-indet{0%{transform:translateX(-110%)}100%{transform:translateX(320%)}}

/* Fehler-Zustand */
.media-tile-err{flex-direction:column;gap:8px;padding:12px;border-color:var(--danger);background:var(--danger-bg)}
.media-err{font-size:.76rem;color:var(--danger);text-align:center;line-height:1.35;word-break:break-word}

@media(prefers-reduced-motion:reduce){
  .media-drop{transition:none}
  .media-btn{transition:none}
  .media-btn:active{transform:none}
  .media-prog-indet .media-prog-fill{animation:none;width:100%}
}

/* =====================================================================
   Content Calendar (C.views.ContentPlan) — .cal-*
   ---------------------------------------------------------------------
   Dunkle Flächen, Lime-Akzent, dünne Linien. Der Monatsraster IST hier
   ein fachlich richtiges Gitter (ein Kalender), kein dekorativer Kasten.
   Mobile-first: Touch-Ziele >= 44px, kein H-Overflow, Safe-Area.
   ===================================================================== */
.cal{display:flex;flex-direction:column;gap:var(--s-4);}
.cal-head{margin-top:var(--s-2);}
.cal-head-top{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--s-4);flex-wrap:wrap;}
.cal-cadence{margin:var(--s-2) 0 0;font-family:var(--mono,ui-monospace,monospace);font-size:12px;
  letter-spacing:.02em;color:var(--muted);}
.cal-pause{color:var(--muted-2);}
.cal-pause.cal-gelb{color:var(--warn);} .cal-pause.cal-rot{color:var(--danger);}

/* View-Umschalter — Lime-Pillen-Segmente */
.cal-seg{display:inline-flex;gap:4px;padding:4px;border:1px solid var(--line);border-radius:999px;
  background:var(--bg-2);flex-wrap:wrap;}
.cal-seg-btn{min-height:36px;padding:0 14px;border:0;border-radius:999px;cursor:pointer;
  background:transparent;color:var(--muted);font-family:var(--body);font-weight:700;font-size:12px;
  letter-spacing:.04em;}
.cal-seg-btn:hover{color:var(--ink);}
.cal-seg-btn.on{background:var(--lime);color:#0A140A;}

/* Filterleiste */
.cal-filter{display:flex;gap:var(--s-2);align-items:center;flex-wrap:wrap;}
.cal-fpf{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 12px;cursor:pointer;
  border-radius:999px;background:var(--bg-2);border:1px solid var(--line-soft);color:var(--ink);
  opacity:.7;font-size:13px;}
.cal-fpf.on{opacity:1;border-color:var(--lime);}
.cal-fstatus{max-width:170px;}

/* NEX-Hinweise */
.cal-nex{display:flex;flex-direction:column;gap:var(--s-2);background:var(--bg-card);
  border:1px solid var(--line);border-radius:var(--r);padding:var(--s-3) var(--s-4);}
.cal-nex-item{display:flex;align-items:center;gap:10px;min-height:36px;}
.cal-nex-t{flex:1;min-width:0;color:var(--ink);font-size:13px;}
.cal-nex-dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto;background:var(--muted-2);}
.cal-nex-luecke{background:var(--info);} .cal-nex-pause{background:var(--danger);}
.cal-nex-freigabe{background:var(--warn);} .cal-nex-unverplant{background:var(--lime);}

/* Monatsnavigation */
.cal-monthnav{display:flex;align-items:center;gap:var(--s-3);margin-bottom:var(--s-3);flex-wrap:wrap;}
.cal-monthlabel{font-family:var(--body);font-weight:800;font-size:17px;color:var(--ink);min-width:150px;}
.cal-heute{margin-left:auto;}

/* Monatsraster — echtes Kalendergitter mit dünnen Linien */
.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;}
.cal-grid-h{margin-bottom:6px;}
.cal-wd{font-family:var(--mono,ui-monospace,monospace);font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--muted-2);text-align:center;padding:2px 0;}
.cal-cell{min-height:92px;border:1px solid var(--line-soft);border-radius:var(--r-control);
  background:var(--bg-2);padding:6px;display:flex;flex-direction:column;gap:4px;min-width:0;}
.cal-cell-n{font-family:var(--mono,ui-monospace,monospace);font-size:12px;color:var(--muted);
  font-variant-numeric:tabular-nums;}
.cal-cell-jobs{display:flex;flex-direction:column;gap:4px;min-width:0;}
.cal-out{opacity:.4;}
.cal-today{border-color:var(--lime);box-shadow:inset 0 0 0 1px var(--lime-soft);}
.cal-today .cal-cell-n{color:var(--lime);font-weight:700;}
.cal-gap{border-style:dashed;border-color:var(--info);}

/* Wochenansicht — 7 Spalten, horizontal scrollbar statt Umbruch */
.cal-weekcols{display:grid;grid-template-columns:repeat(7,minmax(120px,1fr));gap:6px;
  overflow-x:auto;-webkit-overflow-scrolling:touch;}
.cal-weekcol{border:1px solid var(--line-soft);border-radius:var(--r-control);background:var(--bg-2);
  padding:8px;display:flex;flex-direction:column;gap:6px;min-width:0;}
.cal-weekcol-h{display:flex;justify-content:space-between;align-items:baseline;gap:6px;}

/* Job-Chip (in Zellen) */
.cal-chip{display:flex;align-items:center;gap:6px;width:100%;min-height:28px;padding:4px 6px;cursor:pointer;
  border:1px solid var(--line-soft);border-radius:6px;background:var(--bg-card);color:var(--ink);
  text-align:left;min-width:0;}
.cal-chip:hover{border-color:var(--lime);}
.cal-chip-t{flex:1;min-width:0;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cal-dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto;}
.cal-glyphs{display:inline-flex;gap:3px;align-items:center;flex:0 0 auto;}

/* Job-Karte (Liste / Agenda) */
.cal-karte{padding:var(--s-3) var(--s-4);}
.cal-k-clickable{cursor:pointer;}
.cal-k-head{display:flex;justify-content:space-between;gap:8px;align-items:flex-start;}
.cal-k-titel{display:flex;align-items:center;gap:8px;min-width:0;font-weight:600;}
.cal-k-titel>span{min-width:0;overflow:hidden;text-overflow:ellipsis;}
.cal-k-meta{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:8px;}
.cal-thumb{width:36px;height:36px;object-fit:cover;border-radius:var(--r-sm);border:1px solid var(--line-soft);}
.cal-k-detail{margin-top:10px;padding-top:10px;border-top:1px solid var(--line-soft);
  display:flex;flex-direction:column;gap:8px;}

/* Verschieben-Steuerung */
.cal-resched{display:flex;gap:8px;align-items:center;flex-wrap:wrap;}
.cal-dateinp{max-width:180px;min-height:44px;}

/* Sektionen / Agenda */
.cal-sek,.cal-agenda-day{margin-bottom:var(--s-4);}
.cal-agenda{display:flex;flex-direction:column;gap:var(--s-4);}
.cal-agenda-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:var(--s-2);}

/* Mobile: Raster wird kompakter, Woche scrollt, Safe-Area unten */
@media(max-width:560px){
  .cal-head-top{flex-direction:column;}
  .cal-grid{gap:3px;}
  .cal-cell{min-height:62px;padding:4px;}
  .cal-chip-t{display:none;}
  .cal-cell-jobs{flex-direction:row;flex-wrap:wrap;}
  .cal-chip{width:auto;min-width:32px;min-height:32px;justify-content:center;}
  .cal{padding-bottom:env(safe-area-inset-bottom,0);}
}
@media(prefers-reduced-motion:reduce){
  .cal-seg-btn,.cal-fpf,.cal-chip{transition:none;}
}

/* ─────────────── V11 · Mobile-Overflow-Guard ───────────────
   Feste Mehrspalten-Layouts, die auf schmalen iPhones ueber den rechten
   Rand liefen, brechen unter 640px auf eine Spalte um — Root-Cause-Fix
   (kein overflow:hidden-Kaschieren). Flex-/Grid-Kinder duerfen schrumpfen. */
@media(max-width:640px){
  .lead-split:has(.lead-detail-pane){grid-template-columns:1fr;}
  .doc-config-layout{grid-template-columns:1fr;}
  .anm{grid-template-columns:1fr;}
  .lead-split,.lead-detail-pane,.doc-config-layout,.sc-kpis,.dash-strip,.cal-grid,.cal-weekcol{min-width:0;}
  /* Schnellzugriffe/Chips duerfen umbrechen statt ueberzulaufen (768px-Fund) */
  .chip-row,.dash-chips,.sc-toggle,.cal-seg,.sc-tiles{flex-wrap:wrap;}
}
/* Letzte Sicherung: die App-Wurzel erzeugt nie horizontales Seiten-Scrollen
   (Kaschiert nur die Seite; breite Inhalte scrollen weiter in eigenen Containern).
   WICHTIG: `clip`, nicht `hidden`. `overflow-x:hidden` auf body macht body zum
   Scroll-Container — und position:sticky klebt dann an dessen Scrollport statt
   am Viewport. Genau das liess die Desktop-Sidebar mitscrollen, obwohl sie
   sticky war. `clip` klippt nur und erzeugt KEINEN Scroll-Container.
   (Live gemessen am 17.08.2026: mit hidden Sidebar-Top -600 nach 600px Scroll,
   mit clip konstant 0.) Fallback hidden fuer sehr alte Browser bleibt davor. */
html,body{max-width:100%;overflow-x:hidden;overflow-x:clip;}

/* Content-Publishing: sichtbare, app-eigene Bestätigung statt eines je nach
   Browser unterdrückten Systemdialogs. Auf dem iPhone bleibt sie vollständig
   innerhalb der Safe Area und die Hauptaktion ist eindeutig. */
.ce-confirm-backdrop{position:fixed;inset:0;width:100vw;height:100dvh;z-index:1200;display:flex;align-items:center;justify-content:center;
  padding:max(18px,env(safe-area-inset-top)) max(18px,env(safe-area-inset-right))
    max(18px,env(safe-area-inset-bottom)) max(18px,env(safe-area-inset-left));
  background:rgba(5,8,6,.84);backdrop-filter:blur(10px)}
.ce-confirm-dialog{position:relative;margin:auto;width:min(680px,100%);max-height:calc(100dvh - 36px);overflow:hidden;
  display:flex;flex-direction:column;border:1px solid rgba(184,232,52,.28);border-radius:24px;
  background:linear-gradient(150deg,rgba(26,38,27,.98),rgba(11,17,13,.99));
  box-shadow:0 24px 80px rgba(0,0,0,.55),0 0 42px rgba(184,232,52,.08);color:var(--ink)}
.ce-confirm-head{flex:0 0 auto;padding:clamp(22px,5vw,34px) clamp(22px,5vw,34px) 14px}
.ce-confirm-dialog h2{margin:10px 0 0;font-size:clamp(24px,5vw,34px);line-height:1.08}
.ce-confirm-scroll{min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:0 clamp(22px,5vw,34px) 18px}
.ce-confirm-scroll>p{margin:0;color:var(--muted);line-height:1.55}
.ce-confirm-platforms{display:flex;flex-wrap:wrap;gap:8px;margin:22px 0 16px}
.ce-confirm-platforms span{display:inline-flex;align-items:center;gap:7px;min-height:42px;padding:8px 12px;
  border:1px solid var(--line-soft);border-radius:999px;background:rgba(255,255,255,.035);font-weight:700}
.ce-confirm-dialog .ce-confirm-quality{color:var(--ink)}
.ce-confirm-quality strong{color:var(--lime)}
.ce-confirm-previews{display:grid;gap:10px;max-height:min(46dvh,520px);overflow-y:auto;
  overscroll-behavior:contain;scrollbar-width:thin;margin-top:18px;padding:2px 4px 2px 0}
.ce-confirm-preview{min-width:0;padding:13px;border:1px solid var(--line-soft);border-radius:16px;
  background:rgba(255,255,255,.025)}
.ce-confirm-preview>header{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.ce-confirm-preview>header>div{display:grid;gap:2px;min-width:0}
.ce-confirm-preview>header strong{font-size:14px}.ce-confirm-preview>header small{color:var(--muted);font-size:11px}
.ce-confirm-preview-body{display:grid;grid-template-columns:minmax(150px,210px) minmax(0,1fr);gap:14px;align-items:start;min-width:0}
.ce-confirm-preview-media{position:relative;width:100%;min-height:120px;aspect-ratio:4/3;overflow:hidden;border-radius:12px;
  border:1px solid color-mix(in srgb,var(--lime) 18%,var(--line-soft));background:#070b08}
.ce-confirm-preview-media img,.ce-confirm-preview-media video{display:block;width:100%;height:100%;object-fit:cover;background:#070b08}
.ce-confirm-preview-media video{max-height:190px}
.ce-confirm-preview-media-empty{display:grid;place-items:center;align-content:center;gap:7px;width:100%;height:100%;color:var(--muted)}
.ce-confirm-preview-media-empty svg{width:28px;height:28px}
.ce-confirm-preview-media-label{position:absolute;left:8px;bottom:8px;display:inline-flex;align-items:center;gap:5px;padding:5px 7px;
  border-radius:7px;background:rgba(5,8,6,.82);color:var(--ink);font:700 10px/1 var(--mono);pointer-events:none}
.ce-confirm-preview-body p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;overflow:hidden;
  margin:0;color:var(--ink);font-size:13px;line-height:1.45;overflow-wrap:anywhere}
.ce-confirm-preview-tags{display:block;margin-top:7px;color:var(--lime);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ce-confirm-actions{flex:0 0 auto;display:flex;justify-content:flex-end;gap:10px;padding:16px clamp(22px,5vw,34px) max(16px,env(safe-area-inset-bottom));border-top:1px solid var(--line-soft);background:rgba(9,14,10,.98);flex-wrap:wrap}
.ce-confirm-actions .btn{min-height:48px}
.ce-publish-float{position:fixed;z-index:1180;right:max(18px,env(safe-area-inset-right));
  bottom:max(18px,env(safe-area-inset-bottom));width:min(430px,calc(100vw - 36px));padding:16px;
  border:1px solid color-mix(in srgb,var(--lime) 35%,var(--line));border-radius:18px;
  background:rgba(10,16,11,.97);box-shadow:0 24px 70px rgba(0,0,0,.52),0 0 34px rgba(184,232,52,.08);
  backdrop-filter:blur(12px)}
.ce-publish-float.is-failed,.ce-publish-float.is-partial{border-color:color-mix(in srgb,var(--warn) 55%,var(--line))}
.ce-publish-float-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.ce-publish-float-head strong{font-size:14px}.ce-publish-float-head span{color:var(--muted);font:700 11px var(--mono);white-space:nowrap}
.ce-publish-float-bar{margin:11px 0}
.ce-publish-float-channels{display:flex;flex-wrap:wrap;gap:6px}
.ce-publish-float-channels>span{display:inline-flex;align-items:center;gap:5px;min-height:32px;padding:5px 8px;
  border:1px solid var(--line-soft);border-radius:10px;color:var(--muted);font-size:11px}
.ce-publish-float-channels b{color:inherit;font-size:10px}.ce-publish-float-channels .is-done{color:var(--lime)}
.ce-publish-float-channels .is-running{color:var(--ink);border-color:color-mix(in srgb,var(--lime) 38%,var(--line))}
.ce-publish-float-channels .is-processing{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 45%,var(--line))}
.ce-publish-float-channels .is-failed{color:var(--danger)}
@media(max-width:560px){
  .ce-confirm-backdrop{align-items:center;justify-content:center;padding:max(10px,env(safe-area-inset-top)) max(10px,env(safe-area-inset-right))
    max(10px,env(safe-area-inset-bottom)) max(10px,env(safe-area-inset-left))}
  .ce-confirm-dialog{height:auto;max-height:calc(100dvh - max(20px,env(safe-area-inset-top) + env(safe-area-inset-bottom)));border-radius:18px}
  .ce-confirm-head{padding:16px 14px 10px}.ce-confirm-dialog h2{font-size:clamp(21px,7vw,28px)}
  .ce-confirm-scroll{padding:0 14px 12px}.ce-confirm-platforms{margin:14px 0 12px}
  .ce-confirm-previews{max-height:none;overflow-y:visible;margin-top:14px}
  .ce-confirm-preview{padding:11px}.ce-confirm-preview-body{grid-template-columns:minmax(118px,42%) minmax(0,1fr);gap:10px}
  .ce-confirm-preview-media{min-height:100px;aspect-ratio:4/5}.ce-confirm-preview-media video{max-height:160px}
  .ce-confirm-preview-body p{-webkit-line-clamp:3;font-size:12px}
  .ce-confirm-actions{padding:12px 18px max(12px,env(safe-area-inset-bottom))}
  .ce-confirm-actions{display:grid;grid-template-columns:1fr}
  .ce-confirm-actions .btn-primary{grid-row:1}
  .ce-publish-float{left:max(8px,env(safe-area-inset-left));right:max(8px,env(safe-area-inset-right));
    bottom:calc(74px + env(safe-area-inset-bottom));width:auto;padding:13px;border-radius:16px}
  .ce-publish-float-channels{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
  .ce-publish-float-channels>span{min-width:0;justify-content:center}.ce-publish-float-channels b{display:none}
}

/* Lange Erfassungsdialoge: Auf dem Handy bleibt die Entscheidung sichtbar,
   während nur der Formularinhalt scrollt. So muss niemand erst nach unten
   suchen, um Speichern, Abbrechen oder Löschen zu erreichen. */
@media(max-width:860px){
  .modal-body{padding-bottom:calc(104px + env(safe-area-inset-bottom))}
  .modal-body>.form-grid>.form-actions{position:fixed;z-index:230;left:0;right:0;bottom:0;
    min-height:76px;margin:0;padding:12px max(16px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));
    border-top:1px solid var(--line-soft);background:color-mix(in srgb,var(--bg-card) 96%,transparent);
    box-shadow:0 -16px 32px rgba(0,0,0,.28);align-items:center}
  .modal-body>.form-grid>.form-actions .btn{min-height:48px}
}
@media(prefers-reduced-motion:reduce){.ce-confirm-dialog{animation:none}}

/* Social Growth Studio · mobile-first (geprueft fuer 375/390/430/768), offen statt Kachelwand */
.sg{max-width:1400px}.sg-head{display:flex;justify-content:space-between;align-items:flex-start;gap:18px}.sg-head h1{margin:.25rem 0}.sg-live,.sg-source,.sg-safe{font:700 11px/1.2 var(--mono,monospace);letter-spacing:.08em;color:var(--lime);white-space:nowrap}.sg-hero{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:24px;padding:clamp(24px,5vw,58px) 0;border-block:1px solid var(--line-soft);background:radial-gradient(circle at 12% 20%,rgba(184,232,52,.08),transparent 34%)}.sg-hero h2,.sg-section-head h2{margin:7px 0;font-size:clamp(24px,4vw,44px);line-height:1.06}.sg-hero p{max-width:760px;color:var(--muted);font-size:16px;line-height:1.6}.sg-step{font:700 11px/1.2 var(--mono,monospace);letter-spacing:.12em;color:var(--lime)}.sg-form{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;margin:28px 0;background:var(--line-soft);border:1px solid var(--line-soft)}.sg-field{display:grid;gap:8px;padding:16px;background:var(--bg,#0a0d0b)}.sg-field>span,.sg-pipeline b{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.sg-field textarea,.sg-pipeline textarea,.sg-pipeline input{width:100%;resize:vertical;border:0;border-bottom:1px solid var(--line-soft);background:transparent;color:var(--ink);font:inherit;padding:7px 0;outline:none}.sg-field textarea:focus,.sg-pipeline textarea:focus,.sg-pipeline input:focus{border-color:var(--lime)}.sg-message{margin:14px 0;padding:12px 16px;border-left:3px solid var(--lime);background:rgba(184,232,52,.06)}.sg-section-head{display:flex;justify-content:space-between;align-items:end;gap:16px;margin:42px 0 18px}.sg-hooks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line-soft);border:1px solid var(--line-soft)}.sg-hook{min-height:90px;display:grid;grid-template-columns:28px 1fr;text-align:left;gap:10px;padding:16px;border:0;background:var(--bg);color:var(--ink);cursor:pointer}.sg-hook:hover{background:rgba(184,232,52,.06)}.sg-hook b{color:var(--lime);font:700 11px var(--mono,monospace)}.sg-concepts{display:grid;grid-template-columns:repeat(5,minmax(230px,1fr));gap:12px;margin-top:26px;overflow-x:auto;padding-bottom:10px}.sg-post{border:1px solid var(--line-soft);border-radius:18px;overflow:hidden;background:rgba(255,255,255,.02)}.sg-post-media{aspect-ratio:4/5;padding:16px;display:flex;flex-direction:column;justify-content:space-between;background:linear-gradient(145deg,#172117,#0a0d0b);color:var(--muted)}.sg-post-media span{font:700 10px var(--mono,monospace);color:var(--lime)}.sg-post-media strong{font-size:15px;line-height:1.35}.sg-post-body{padding:16px}.sg-post-body small{color:var(--lime);font:700 10px var(--mono,monospace)}.sg-post-body h3{font-size:18px;line-height:1.2}.sg-post-body p{font-size:13px;line-height:1.5;color:var(--muted);white-space:pre-line;max-height:140px;overflow:auto}.sg-points{display:flex;flex-wrap:wrap;gap:5px}.sg-points span{font-size:10px;padding:5px 7px;border:1px solid var(--line-soft);border-radius:999px}.sg-cta{display:block;margin-top:14px;font-size:12px;color:var(--lime)}.sg-flow,.sg-audit{padding:28px 0;border-top:1px solid var(--line-soft)}.sg-pipeline{display:grid;grid-template-columns:1fr auto 1.4fr auto 2fr;align-items:center;gap:14px}.sg-pipeline>div{display:grid;gap:8px}.sg-pipeline i{color:var(--lime);font-style:normal}.sg-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}.sg-events{display:grid;gap:1px;background:var(--line-soft)}.sg-events>div{display:grid;grid-template-columns:90px 150px 1fr;gap:10px;padding:12px;background:var(--bg)}.sg-status{font:700 10px var(--mono,monospace);text-transform:uppercase}.sg-sent{color:var(--ok)}.sg-failed{color:var(--danger)}.sg-matched{color:var(--warn)}
@media(max-width:900px){.sg-form,.sg-hooks{grid-template-columns:repeat(2,minmax(0,1fr))}.sg-pipeline{grid-template-columns:1fr}.sg-pipeline i{transform:rotate(90deg);justify-self:center}.sg-concepts{grid-template-columns:repeat(5,minmax(260px,78vw))}}
@media(max-width:560px){.sg-head,.sg-hero,.sg-section-head{display:flex;flex-direction:column;align-items:stretch}.sg-form,.sg-hooks{grid-template-columns:1fr}.sg-hero .btn,.sg-actions .btn{width:100%;min-height:48px}.sg-actions{display:grid}.sg-events>div{grid-template-columns:78px 1fr}.sg-events>div span:last-child{grid-column:1/-1}.sg{padding-bottom:calc(78px + env(safe-area-inset-bottom))}}

/* V11.1 · Marketing + Social Growth Visual Layer
   Website-Sprache: offene helle/graphitgetönte Flächen, Lime als Systemsignal,
   echte SVG-Glyphen und mobile Scroll-Snaps statt gequetschter Karten. */
.mkv11,.sc,.ce,.sg{container-type:inline-size}
.mkv11-head,.ce-v11-head,.sg-head,.sc-head{position:relative;isolation:isolate;padding-block:clamp(18px,4vw,34px)}
.mkv11-head::before,.ce-v11-head::before,.sg-head::before,.sc-head::before{content:"";position:absolute;inset:0 -18px;z-index:-1;pointer-events:none;background:radial-gradient(circle at 8% 25%,rgba(184,232,52,.11),transparent 31%),linear-gradient(90deg,rgba(255,255,255,.025),transparent 58%);border-block:1px solid var(--line-soft)}
.mkv11-title,.ce-v11-title,.sg-title,.sc-insight-brand{display:flex;align-items:center;gap:14px;min-width:0}
.mkv11-title h1,.sg-title h1{margin:.2rem 0}.sg-title>div,.mkv11-title>div{min-width:0}
.ce-v11-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px}
.ce-v11-badges{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}
.ce-v11-badges>span{display:inline-flex;align-items:center;gap:7px;min-height:38px;padding:6px 10px;border:1px solid var(--line-soft);border-radius:12px;background:rgba(255,255,255,.025);font-size:12px;font-weight:650}
.ce .focus-field{border:0;border-block:1px solid var(--line-soft);border-radius:0;background:linear-gradient(120deg,rgba(184,232,52,.07),transparent 48%);box-shadow:none;padding:clamp(20px,4vw,34px)}
.ce .dash-panel{border:0;border-top:2px solid var(--line-soft);border-radius:0;background:transparent;box-shadow:none;padding-inline:0}
.ce .dash-card{border-color:rgba(184,232,52,.16)}
.mkv11>.card{border:0;border-top:1px solid var(--line-soft);border-radius:0;background:transparent;box-shadow:none;padding-inline:0;margin-top:30px}
.mkv11>.card>.card-head{padding-bottom:12px}.mkv11 .mk-aussage,.mkv11 .mk-kampagne{min-height:62px;padding-inline:10px;border-radius:12px;transition:background .2s ease,transform .2s ease}
.mkv11 .mk-aussage:hover,.mkv11 .mk-kampagne:hover{background:rgba(184,232,52,.06);transform:translateX(3px)}

.sc-channel-insights{margin-block:34px 42px}.sc-insight-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(285px,1fr));gap:14px}
.sc-insight{position:relative;overflow:hidden;border:1px solid var(--line-soft);border-radius:22px;background:linear-gradient(145deg,rgba(255,255,255,.035),rgba(255,255,255,.012));padding:18px;box-shadow:inset 0 1px rgba(255,255,255,.04)}
.sc-insight::before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--sc-accent,var(--lime))}
.sc-insight-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.sc-insight-brand strong{display:block;font-size:17px}.sc-insight-brand span{display:block;margin-top:2px;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em}
.sc-insight-rate{font-size:20px;text-align:right}.sc-insight-rate small{display:block;color:var(--muted);font:500 9px var(--body);letter-spacing:.04em}
.sc-insight-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin:18px 0;background:var(--line-soft)}
.sc-insight-stats>div{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:5px;background:var(--bg);padding:10px 8px;min-width:0}.sc-insight-stats svg{grid-row:1/3}.sc-insight-stats span{font-size:9px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sc-insight-stats b{font-size:15px}
.sc-insight-next{display:flex;align-items:flex-start;gap:10px;padding:13px;border-radius:14px;background:rgba(184,232,52,.07)}.sc-insight-next p{margin:4px 0 0;font-size:13px;line-height:1.45}.sc-insight-foot{display:flex;align-items:center;gap:8px;margin-top:12px;color:var(--muted);font-size:11px}.sc-insight-foot b{color:var(--ink)}
.sc-tiles{scrollbar-width:none}.sc-tiles::-webkit-scrollbar,.sg-concepts::-webkit-scrollbar{display:none}
.sg-title{align-items:flex-start}.sg-title .social-ico{flex:0 0 auto}.sg-post{scroll-snap-align:start;box-shadow:0 18px 50px rgba(0,0,0,.15)}
.sg-post-media{position:relative}.sg-post-media::after{content:"360";position:absolute;right:14px;bottom:12px;color:rgba(184,232,52,.22);font:800 48px/1 var(--body)}
.sg-hook{border-radius:0}.sg-hook:focus-visible,.sc-insight:focus-within{outline:2px solid var(--lime);outline-offset:2px}

@container (max-width:760px){
  .ce-v11-head{align-items:stretch;flex-direction:column}.ce-v11-badges{justify-content:flex-start;display:grid;grid-template-columns:1fr}.ce-v11-badges>span{min-height:44px}
  .sc-insight-grid{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;margin-inline:-16px;padding-inline:16px;gap:12px;scrollbar-width:none}.sc-insight{flex:0 0 min(86vw,340px);scroll-snap-align:center}
  .sc-insight-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .mkv11 .stat-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.mkv11 .stat{min-width:0}
}
@media(max-width:560px){
  .mkv11,.sc,.ce,.sg{padding-inline:max(12px,env(safe-area-inset-left));padding-bottom:calc(86px + env(safe-area-inset-bottom))}
  .mkv11-title,.ce-v11-title,.sg-title{align-items:flex-start}.mkv11-title>.social-ico,.ce-v11-title>.social-ico,.sg-title>.social-ico{width:38px;height:38px}
  .sc-head-side,.sc-sync,.sg-hero .btn,.ce .form-actions .btn{width:100%}.sc-toggle{width:100%;display:grid;grid-template-columns:repeat(3,1fr)}.sc-tgl{min-height:44px}
  .sc-tiles{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;margin-inline:-12px;padding-inline:12px}.sc-tile{flex:0 0 72vw;scroll-snap-align:center}
  .ce .focus-field{margin-inline:-12px;padding-inline:12px}.ce .form-grid{grid-template-columns:1fr}.ce .form-actions{display:grid;grid-template-columns:1fr}.ce .form-actions .btn{min-height:50px}
  .mkv11 .mk-aussage{display:grid;grid-template-columns:auto 1fr}.mkv11 .mk-pfeil{display:none}.mkv11 .mk-kampagne{display:grid;grid-template-columns:1fr auto;align-items:start}.mkv11 .mk-k-zeit,.mkv11 .mk-k-status{grid-column:1/-1}
  .sg-concepts{scroll-snap-type:x mandatory}.sg-post{scroll-snap-align:center}
}
@media(prefers-reduced-motion:reduce){.mkv11 .mk-aussage,.mkv11 .mk-kampagne,.sc-insight{transition:none!important;transform:none!important}}

/* V10.91 · Medienprüfung vor Freigabe */
.sg-funnel{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin:16px 0 20px;background:var(--line-soft)}
.sg-funnel>div{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:5px;padding:13px;background:var(--bg)}.sg-funnel svg{grid-row:1/3}.sg-funnel span{font-size:10px;color:var(--muted)}.sg-funnel strong{font:700 20px/1 var(--mono)}
@media(max-width:680px){.sg-funnel{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ══════════════ V11.1 · GLOBALE VIEW-SCHICHT (§8/§11) ══════════════
   Hebt ALLE uebrigen Ansichten auf einmal, ohne ihre Logik anzufassen:
   Tabellen werden auf dem Handy lesbar, Leerzustaende bekommen Luft,
   Kartenflaechen wirken offener statt wie eine Wand schwarzer Kacheln. */

/* — Tabellen: nie die Seite sprengen, auf dem Handy als Karten —
   Zweistufig und ehrlich: (1) die Tabelle scrollt IMMER in ihrem eigenen
   Container statt die Seite zu verbreitern. (2) Unter 640px stapeln die
   Zeilen zu Karten; der Spaltenname erscheint automatisch, sobald eine
   Zelle `data-label` traegt (progressiv nachruestbar, ohne Bruch fuer
   Zellen ohne Label). Ohne Label bleibt die Zeile trotzdem lesbar. */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
@media(max-width:640px){
  .table-wrap{overflow-x:visible}
  .tbl{border-collapse:separate;border-spacing:0}
  .tbl thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap} /* Kopf bleibt fuer Screenreader */
  .tbl tr{display:block;margin:0 0 var(--s-2);padding:var(--s-3) var(--s-4);
    background:var(--bg-card);border:1px solid var(--line-soft);border-radius:var(--r)}
  .tbl td{display:flex;gap:var(--s-3);align-items:baseline;justify-content:space-between;
    padding:6px 0;border-bottom:1px solid var(--line-soft);font-size:var(--t-body);text-align:right}
  .tbl td:last-child{border-bottom:0}
  .tbl td::before{content:attr(data-label);flex:0 0 auto;text-align:left;
    font-size:var(--t-micro);letter-spacing:.06em;text-transform:uppercase;color:var(--muted-2)}
  .tbl td:first-child{font-weight:600;color:var(--ink)}
  .tbl tbody tr:hover td{background:transparent}   /* Hover-Zeile ergibt als Karte keinen Sinn */
}

/* — Leerzustaende: ruhige Flaeche statt leerer Kasten — */
.empty,.leer{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--s-2);
  padding:var(--s-6) var(--s-4);text-align:center;color:var(--muted);
  border:1px dashed var(--line);border-radius:var(--r);background:transparent}
.empty svg,.leer svg{opacity:.5}
.empty strong,.leer strong{color:var(--ink);font-size:var(--t-lead);font-weight:600}

/* — Karten oeffnen: weniger harte Kaesten, mehr Flaeche —
   Karten direkt hintereinander verschmelzen optisch zu einer Gruppe,
   statt als Reihe identischer schwarzer Bloecke zu lesen. */
.card+.card{margin-top:var(--s-3)}
.card>h3:first-child,.card>h2:first-child{margin-top:0}

/* — Touch: nichts Wichtiges unter 44px auf dem Handy — */
@media(max-width:640px){
  .btn,.chip,.linklike,.row-click{min-height:44px}
  .btn-mini,.btn-sm{min-height:40px}
}

/* ═══════ V11.1 · Content-Kalender (§6) ═══════ */
/* =====================================================================
   V11.1 · Content-Kalender (§6) — SIDECAR zu app.css
   ---------------------------------------------------------------------
   Nur GENUINE Neuerungen, alle unter .cal-* . Die bestehenden .cal-*- und
   .dash-*-Regeln in app.css bleiben unberührt und werden weiterverwendet
   (.cal-grid/.cal-cell/.cal-today/.cal-gap/.cal-seg/.cal-nex/.cal-karte,
   .dash-card/.dash-lift/.dash-seg/.dash-mchip/.dash-chip/.kicker/.dash-rule).
   Wird vom Hauptagenten in app.css gemerged.
   ===================================================================== */

/* ── Monatsfortschritt (Kadenzziel, freie Tage, fehlende Freigaben) ──── */
.cal-progress{margin:0 0 var(--s-4);}
.cal-progress-h{display:flex;align-items:center;gap:10px;margin-bottom:var(--s-3);flex-wrap:wrap;}
.cal-progress-chips{display:grid;grid-template-columns:repeat(auto-fit,minmax(185px,1fr));
  gap:var(--s-2);margin-top:var(--s-3);}

/* ── Monatsraster scrollt in SEINEM Container, nie die Seite ─────────── */
.cal-monthwrap{max-width:100%;min-width:0;overflow-x:auto;-webkit-overflow-scrolling:touch;
  scrollbar-width:thin;padding-bottom:2px;}

/* ── Zelle: Kopfzeile + Marker für frei / Freigabe / Fehler ──────────── */
.cal-cell-head{display:flex;align-items:baseline;justify-content:space-between;gap:6px;min-width:0;}
.cal-frei{font-family:var(--mono,ui-monospace,monospace);font-size:9px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted-2);}
/* Freie Tage bleiben erkennbar, aber ruhig — die gestrichelte Info-Kante aus
   app.css war bei vielen freien Tagen eine blaue Wand. Heute schlägt „frei". */
.cal-cell.cal-gap{border-color:color-mix(in srgb,var(--info) 34%,transparent);}
.cal-cell.cal-today{border-style:solid;border-color:var(--lime);}
.cal-cell-review{box-shadow:inset 3px 0 0 var(--warn);}
.cal-cell-fail{border-color:var(--danger);box-shadow:inset 3px 0 0 var(--danger);}
.cal-cell-detail{margin-top:6px;padding-top:6px;border-top:1px solid var(--line-soft);
  display:flex;flex-direction:column;gap:6px;}

/* ── Tages-Eintrag: Thumbnail + Plattform-Glyphen + Status ───────────── */
.cal-entry{display:flex;align-items:center;gap:7px;width:100%;min-width:0;padding:4px;cursor:pointer;
  border:1px solid var(--line-soft);border-radius:8px;background:var(--bg-card);color:var(--ink);
  text-align:left;transition:border-color var(--nex-fast,.18s) var(--nex-ease,ease);}
.cal-entry:hover{border-color:var(--lime);}
.cal-entry:focus-visible{outline:2px solid var(--lime);outline-offset:2px;}
.cal-entry-review{border-color:color-mix(in srgb,var(--warn) 55%,transparent);}
.cal-entry-fail{border-color:color-mix(in srgb,var(--danger) 62%,transparent);}
.cal-entry-tx{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1;}
.cal-entry-t{font-size:12px;line-height:1.25;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cal-entry-m{display:flex;align-items:center;gap:6px;min-width:0;}

/* ── Thumbnail: feste Box + cover — nie abgeschnitten, nie verzerrt ──── */
.cal-thumbbox{position:relative;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  width:34px;aspect-ratio:1/1;overflow:hidden;border-radius:6px;border:1px solid var(--line-soft);
  background:var(--bg-2);}
.cal-thumbimg{width:100%;height:100%;object-fit:cover;display:block;}
.cal-thumb-leer{color:var(--muted-2);}
.cal-thumb-leer svg{width:16px;height:16px;}
.cal-thumb-v{position:absolute;right:2px;bottom:1px;display:inline-flex;color:var(--ink);
  filter:drop-shadow(0 0 2px rgba(0,0,0,.8));}
.cal-thumb-v svg{width:11px;height:11px;}
.cal-thumb-n{position:absolute;right:2px;bottom:0;font-family:var(--mono,ui-monospace,monospace);
  font-size:9px;color:var(--ink);}

/* ── Status-Glyph (C.ui.Icon) statt reinem Punkt ─────────────────────── */
.cal-st{display:inline-flex;flex:0 0 auto;}
.cal-st svg{width:14px;height:14px;}

/* ── Karte (Liste/Agenda): großes Touch-Ziel, Thumbnail links ────────── */
.cal-k-clickable{display:flex;align-items:center;gap:12px;width:100%;min-width:0;min-height:56px;
  padding:0;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer;}
.cal-k-clickable:focus-visible{outline:2px solid var(--lime);outline-offset:3px;}
.cal-k-tx{display:flex;flex-direction:column;gap:6px;min-width:0;flex:1;}
.cal-k-thumb{width:56px;border-radius:8px;}
.cal-karte-review{border-color:color-mix(in srgb,var(--warn) 45%,transparent);}
.cal-karte-fail{border-color:color-mix(in srgb,var(--danger) 50%,transparent);}

/* ── Mobil: Agenda/Woche sind der Default, Monat scrollt im Container ── */
@media(max-width:720px){
  /* Monat ist auf dem Telefon die Ausweich-, nicht die Standardansicht: das
     Raster scrollt im eigenen Container, und statt eines auf ein Zeichen
     gekürzten Titels zeigt der Eintrag Vorschau + Status + Plattform
     (voller Titel im title-Attribut). */
  .cal-monthgrid{min-width:620px;}
  .cal-entry-t{display:none;}
}
@media(max-width:560px){
  .cal-seg{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));width:100%;}
  .cal-seg-btn{min-height:44px;padding:0 6px;}
  .cal-k-clickable{min-height:64px;}
  .cal-k-thumb{width:64px;}
  .cal-progress-chips{grid-template-columns:repeat(2,minmax(0,1fr));}
  .cal-resched .btn,.cal-fstatus,.cal-nex-item .btn{min-height:44px;}
  .cal-nex-item{min-height:44px;}
  .cal-entry{padding:5px;}
}
@media(prefers-reduced-motion:reduce){
  .cal-entry{transition:none;}
}

/* ═══════ V11.1 · Growth Studio (§7) ═══════ */
/* =====================================================================
   V11.1 · Growth Studio — Funnel, Ranglisten, Audit  (.gs-*)
   ---------------------------------------------------------------------
   SIDECAR: gehoert an das Ende von app.css (Merge durch den Haupt-Agenten).
   Ergaenzt NUR neue `.gs-`-Regeln. Alles, was es schon gibt, wird geliehen
   statt kopiert: .dash-card/.dash-lift/.dash-mchip/.dash-chip/.dash-lab/
   .dash-num/.dash-sec-h/.kicker/.focus-field aus der V11-Schicht und die
   bestehenden .sg-*-Regeln der Ansicht.

   Mobile-first (geprueft 375/390/430/1440): der Funnel stapelt, Balken sind
   voll breit, Listen einspaltig, Touchziele >= 44px, kein H-Overflow.
   ===================================================================== */

/* ── Funnel ──────────────────────────────────────────────────────────
   Absteigende Stufen als volle Balken. Kein Kasten pro Stufe — nur eine
   Haarlinie trennt sie, damit die Kette als EINE Bewegung lesbar bleibt. */
.gs-funnel{display:flex;flex-direction:column;gap:var(--s-3);margin:var(--s-3) 0 var(--s-5);}
.gs-stage{display:flex;flex-direction:column;gap:8px;min-width:0;
  padding:var(--s-3) 0;border-bottom:1px solid var(--line-soft);}
.gs-stage:last-child{border-bottom:0;}

.gs-stage-h{display:flex;align-items:center;gap:10px;min-width:0;}
.gs-stage-ic{display:inline-flex;flex:0 0 auto;color:var(--lime);}
.gs-stage-ic svg{width:17px;height:17px;}
.gs-stage-lab{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1;
  font-weight:700;color:var(--ink);font-size:14px;line-height:1.25;}
.gs-stage-lab i{font-style:normal;font-family:var(--mono,ui-monospace,monospace);
  font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted-2);font-weight:400;}
.gs-stage-n{flex:0 0 auto;font-size:22px;}
@media(min-width:768px){.gs-stage-n{font-size:26px;}}

/* Balken: Breite ∝ Zahl. Ohne Zahl bleibt die Spur leer (kein Fake-Fuellstand). */
.gs-bar{position:relative;height:12px;border-radius:999px;overflow:hidden;
  background:var(--bg-2);border:1px solid var(--line);}
.gs-bar>i{position:absolute;inset:0 auto 0 0;border-radius:999px;
  background:linear-gradient(90deg,var(--lime),rgba(184,232,52,.55));
  transition:width .6s var(--nex-ease,ease);}

.gs-stage-f{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0;}
.gs-rate{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);min-width:0;}
.gs-rate b{color:var(--ink);font-family:var(--mono,ui-monospace,monospace);font-variant-numeric:tabular-nums;}
.gs-rate-ic{display:inline-flex;flex:0 0 auto;color:var(--danger);}
.gs-rate-ic svg{width:14px;height:14px;}

/* Groesste Abbruchstelle — Warnakzent, aber nur wenn die Daten ihn tragen. */
.gs-stage-drop .gs-bar>i{background:linear-gradient(90deg,var(--danger),rgba(224,90,74,.5));}
.gs-stage-drop .gs-rate b,.gs-rate-warn b{color:var(--danger);}
.gs-drop-tag{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:999px;
  font-family:var(--mono,ui-monospace,monospace);font-size:10px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--danger);border:1px solid rgba(224,90,74,.42);background:rgba(224,90,74,.09);}

/* ── Kennzahl-Chips + Hinweis ────────────────────────────────────── */
.gs-chips{margin:var(--s-2) 0 var(--s-3);}
.gs-note{line-height:1.5;}
.gs-note b{color:var(--ink);}

/* Schutzregeln der Automatik als kompakte Chip-Reihe (statt Textwand) */
.gs-guards{margin-top:var(--s-4);}
.gs-guards .dash-chip,.gs-audit-chips .dash-chip{height:auto;min-height:30px;padding:5px 10px;line-height:1.3;}
/* Keyword-Chips sind Schaltflaechen: auf Telefonbreiten mindestens 44 px
   hoch (Tap-Ziel), auf dem Desktop bleibt die kompakte Chip-Hoehe. */
@media (max-width:768px){.sg-keyword-options button.dash-chip{height:auto;min-height:44px;padding:8px 14px;}}
.gs-guards .dash-chip svg,.gs-audit-chips .dash-chip svg{width:13px;height:13px;flex:0 0 auto;}
.gs-audit-chips{margin-bottom:var(--s-3);}

/* ── Ranglisten (Keywords / Beitraege) ───────────────────────────── */
.gs-cols{display:grid;grid-template-columns:1fr;gap:var(--s-5);}
@media(min-width:900px){.gs-cols{grid-template-columns:1fr 1fr;gap:var(--s-6);}}
.gs-col{display:flex;flex-direction:column;gap:var(--s-2);min-width:0;}

.gs-rank{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;}
.gs-rank-i{display:flex;align-items:center;gap:10px;min-height:44px;min-width:0;
  padding:var(--s-2) 0;border-bottom:1px solid var(--line-soft);}
.gs-rank-i:last-child{border-bottom:0;}
.gs-rank-n{flex:0 0 auto;font-size:11px;color:var(--lime);}
.gs-rank-ic{display:inline-flex;flex:0 0 auto;color:var(--muted-2);}
.gs-rank-ic svg{width:15px;height:15px;}
.gs-rank-tx{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0;}
.gs-rank-tx b{color:var(--ink);font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gs-rank-tx i{font-style:normal;font-size:11.5px;color:var(--muted-2);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gs-rank-v{flex:0 0 auto;font-size:13px;color:var(--muted);}

/* ── Audit-Detail (aufklappbar statt Textwand) ───────────────────── */
.gs-details{margin-top:var(--s-2);}
.gs-details>summary{display:flex;align-items:center;min-height:44px;cursor:pointer;
  font-family:var(--mono,ui-monospace,monospace);font-size:12px;letter-spacing:.04em;color:var(--muted);}
.gs-details>summary:hover{color:var(--lime);}
.gs-details>summary:focus-visible{outline:2px solid var(--lime);outline-offset:2px;}
.gs-details[open]>summary{color:var(--lime);}

/* ── Fehlerzustand ───────────────────────────────────────────────── */
.gs-error{display:flex;align-items:flex-start;gap:10px;padding:var(--s-3) var(--s-4);
  border:1px solid rgba(224,90,74,.4);border-radius:var(--r);background:rgba(224,90,74,.07);
  color:var(--ink);font-size:13px;line-height:1.45;}
.gs-error svg{width:16px;height:16px;flex:0 0 auto;color:var(--danger);margin-top:1px;}

/* ── Touchziel-Korrektur an der Automatik-Pipeline ────────────────
   Die beiden einzeiligen Felder (Keyword, Asset-Link) aus v10.91 waren
   33px hoch — unter dem 44px-Ziel, auf 375/390/430 gleichermassen. Die
   Regel steht bewusst hier statt in app.css (paralleler Zugriff) und ist
   die EINZIGE nicht-`.gs-`-Regel dieser Datei; sie ist auf `.sg` gescoped
   und aendert nur die Hoehe, nicht die bestehende Feldoptik. */
.sg .sg-pipeline input,.sg .sg-pipeline textarea,
.sg .sg-field input,.sg .sg-field select,.sg .sg-field textarea{min-height:44px;}
.sg .sg-field input,.sg .sg-field select{
  width:100%;border:0;border-bottom:1px solid var(--line-soft);background:transparent;
  color:var(--ink);font:inherit;padding:9px 0;outline:none;
}
.sg .sg-field input:focus,.sg .sg-field select:focus{border-color:var(--lime)}

/* ── Mobile 375/390/430 ──────────────────────────────────────────── */
@media(max-width:560px){
  /* Icon, Label und Zahl bleiben EINE Zeile — die Stufe muss auf einen
     Blick lesbar sein. Der Label-Text bricht innerhalb seiner Spalte um. */
  .gs-funnel,.gs-stage,.gs-cols,.gs-col,.gs-rank-i,.gs-stage-h,.gs-stage-lab{min-width:0;}
  .gs-stage-lab{font-size:13.5px;}
  .gs-stage-n{font-size:20px;}
  .gs-rank-v{font-size:12px;}
  .gs-chips{margin-bottom:var(--s-4);}
}

@media(prefers-reduced-motion:reduce){
  .gs-bar>i{transition:none;}
}

/* ═══════ V11.1 · Content Engine (§5) ═══════ */
/* =====================================================================
   V11.1 — Content Engine als Fertigungsstraße (Sidecar zu app.css)
   ---------------------------------------------------------------------
   Nur NEUE Klassen. Alles Bestehende (.dash-*, .kicker, .focus-field,
   .btn, .ce-post*, .ce-publish-progress, .ce-confirm-*) bleibt unberührt
   und wird wiederverwendet. Tokens kommen aus app.css.
   Mobile-first: Straße waagerecht scrollbar, Karten einspaltig, alle
   Trefferflächen >= 44px, Medien in festen Seitenverhältnis-Kästen.
   ===================================================================== */

/* ── Die Straße ────────────────────────────────────────────────────── */
.ce-board{min-width:0}
.ce-rail{display:flex;align-items:stretch;gap:6px;overflow-x:auto;overscroll-behavior-x:contain;
  scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none;
  margin:0 0 var(--s-4);padding:2px 0 8px}
.ce-rail::-webkit-scrollbar{display:none}
.ce-stage{--sc:var(--muted-2);position:relative;flex:0 0 auto;scroll-snap-align:start;
  display:grid;grid-template-columns:auto auto;grid-template-rows:auto auto;
  column-gap:8px;row-gap:2px;align-items:center;min-height:56px;padding:8px 12px;
  border:1px solid var(--line-soft);border-radius:12px;background:var(--bg-2);
  color:var(--muted);cursor:pointer;text-align:left;
  transition:border-color .2s,background .2s,color .2s,transform .15s}
.ce-stage+.ce-stage{margin-left:12px}
.ce-stage+.ce-stage::before{content:"";position:absolute;left:-16px;top:50%;width:8px;height:8px;
  border-top:1.5px solid var(--line);border-right:1.5px solid var(--line);
  transform:translateY(-50%) rotate(45deg);pointer-events:none}
.ce-stage-ic{grid-row:1 / 3;display:inline-flex;color:var(--sc)}
.ce-stage-ic svg{width:20px;height:20px}
.ce-stage-n{font-size:17px;line-height:1.05;color:var(--ink)}
.ce-stage-l{font-family:var(--mono,ui-monospace,monospace);font-size:10px;letter-spacing:.09em;
  text-transform:uppercase;white-space:nowrap}
.ce-stage:hover:not(:disabled){border-color:var(--sc);color:var(--ink);transform:translateY(-2px)}
.ce-stage:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
.ce-stage.is-leer{opacity:.42;cursor:default}
.ce-stage.is-leer .ce-stage-n{color:var(--muted-2)}
.ce-stage.is-engpass{border-color:var(--lime);background:var(--lime-soft);color:var(--ink)}
.ce-stage.is-engpass .ce-stage-ic{color:var(--lime)}
.ce-stage.is-alarm{border-color:var(--danger);background:var(--danger-bg);color:var(--ink)}
.ce-stage.is-active{border-color:var(--sc);background:var(--bg-elev);color:var(--ink);
  box-shadow:inset 0 -2px 0 0 var(--sc)}
.ce-filter-x{min-height:44px;margin-bottom:var(--s-4);display:inline-flex;align-items:center;gap:8px}

/* ── Stationsgruppen + Kartenraster ────────────────────────────────── */
.ce-group{margin-bottom:var(--s-6);min-width:0}
.ce-group-h{--sc:var(--muted-2);display:flex;align-items:center;gap:10px;margin-bottom:var(--s-3)}
.ce-group-ic{display:inline-flex;flex:0 0 auto;color:var(--sc)}
.ce-group-ic svg{width:16px;height:16px}
.ce-group-n{font-size:13px;flex:0 0 auto}
.ce-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(min(320px,100%),1fr));min-width:0}
.ce-unbekannt{margin-top:var(--s-3)}

/* ── Die Karte ─────────────────────────────────────────────────────── */
.ce-jc{--sc:var(--muted-2);display:grid;grid-template-columns:96px minmax(0,1fr);gap:12px;
  min-width:0;padding:12px;border:1px solid var(--line);border-left:3px solid var(--sc);
  border-radius:var(--r);background:var(--bg-card);container-type:inline-size;container-name:content-job}
.ce-jc.is-open{grid-column:1 / -1;grid-template-columns:120px minmax(0,1fr)}
.ce-jc-thumb{position:relative;align-self:start;aspect-ratio:1;overflow:hidden;
  border-radius:var(--r-sm);background:var(--bg-2);border:1px solid var(--line-soft)}
.ce-jc-media{display:block;width:100%;height:100%;object-fit:cover}
.ce-jc-media-leer{display:grid;place-items:center;color:var(--muted-2)}
.ce-jc-media-leer svg{width:26px;height:26px}
.ce-jc-art,.ce-jc-mehr{position:absolute;display:inline-flex;align-items:center;gap:4px;
  padding:2px 6px;border-radius:6px;background:rgba(10,13,11,.72);color:var(--ink);
  font-family:var(--mono,ui-monospace,monospace);font-size:9.5px;letter-spacing:.05em}
.ce-jc-art{left:4px;bottom:4px}
.ce-jc-art svg{width:11px;height:11px}
.ce-jc-mehr{right:4px;top:4px}
.ce-jc-body{display:flex;flex-direction:column;gap:8px;min-width:0}
.ce-jc-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;min-width:0}
.ce-jc-platforms{flex:0 0 auto;flex-wrap:wrap;justify-content:flex-end;max-width:100%}
.ce-jc-t{margin:0;min-width:0;font-size:14px;line-height:1.3;font-weight:650;color:var(--ink);
  overflow-wrap:break-word;word-break:normal;hyphens:none;-webkit-hyphens:none}
.ce-jc-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.ce-pill,.ce-jc-when{display:inline-flex;align-items:center;gap:5px;min-height:26px;padding:0 9px;
  border-radius:999px;font-family:var(--mono,ui-monospace,monospace);font-size:10.5px;
  letter-spacing:.04em}
.ce-pill{border:1px solid var(--sc);color:var(--ink);background:color-mix(in srgb,var(--sc) 12%,transparent)}
.ce-pill svg{width:13px;height:13px;color:var(--sc)}
.ce-jc-when{border:1px solid var(--line-soft);color:var(--muted);background:var(--bg-2)}
.ce-jc-when svg{width:13px;height:13px}
.ce-jc-prog{height:8px;margin:2px 0}
.ce-jc-err{display:flex;align-items:flex-start;gap:6px;margin:0;padding:7px 9px;border-radius:8px;
  background:var(--danger-bg);color:var(--danger);font-size:12px;line-height:1.4;overflow-wrap:anywhere}
.ce-jc-err svg{width:14px;height:14px;flex:0 0 auto;margin-top:1px}
.ce-jc-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:2px}
.ce-jc-act{display:inline-flex;align-items:center;justify-content:center;gap:7px;
  min-height:44px;flex:1 1 118px;text-decoration:none}
.ce-jc-act svg{width:15px;height:15px}

/* ── Medienprüfung kompakt (Chip-Zeile, aufklappbar) ───────────────── */
.ce-mcheck{margin:0;font-size:12px}
.ce-mcheck>summary{display:flex;flex-wrap:wrap;align-items:center;gap:7px;min-height:34px;
  list-style:none;cursor:pointer;color:var(--muted)}
.ce-mcheck>summary::-webkit-details-marker{display:none}
.ce-mcheck>summary:focus-visible{outline:2px solid var(--lime);outline-offset:2px;border-radius:6px}
.ce-mchip{display:inline-flex;align-items:center;gap:5px;min-height:24px;padding:0 8px;
  border-radius:999px;font-family:var(--mono,ui-monospace,monospace);font-size:10.5px;letter-spacing:.04em}
.ce-mchip svg{width:13px;height:13px}
.ce-mchip.is-ok{color:var(--ok);border:1px solid color-mix(in srgb,var(--ok) 42%,transparent);
  background:color-mix(in srgb,var(--ok) 10%,transparent)}
.ce-mchip.is-warn{color:var(--warn);border:1px solid color-mix(in srgb,var(--warn) 42%,transparent);
  background:color-mix(in srgb,var(--warn) 10%,transparent)}
.ce-mchip.is-error{color:var(--danger);border:1px solid color-mix(in srgb,var(--danger) 45%,transparent);
  background:var(--danger-bg)}
.ce-mchip-t{color:var(--muted);font-size:11.5px;overflow-wrap:anywhere}
.ce-mcheck>ul{margin:7px 0 0;padding-left:16px;display:grid;gap:4px;color:var(--muted);
  font-size:11.5px;line-height:1.45}
.ce-mcheck>ul>li.is-error{color:var(--danger)}
.ce-mcheck-ok{margin:0}

/* ── Kanal-Streifen (je Plattform ein Zustand) ─────────────────────── */
.ce-pstrip{display:grid;gap:6px;min-width:0}
.ce-prow{--pc:var(--muted-2);display:grid;
  grid-template-columns:22px minmax(64px,auto) minmax(0,1fr) auto;align-items:center;
  column-gap:8px;row-gap:5px;min-height:34px;padding:5px 8px;border-radius:9px;
  background:var(--bg-2);border:1px solid var(--line-soft)}
.ce-prow.is-kaputt{border-color:color-mix(in srgb,var(--danger) 45%,transparent);background:var(--danger-bg)}
.ce-prow-ic{display:inline-flex}
.ce-prow-name{font-size:11.5px;font-weight:650;color:var(--ink);white-space:nowrap}
.ce-prow-st{display:inline-flex;align-items:center;gap:5px;color:var(--pc);
  font-family:var(--mono,ui-monospace,monospace);font-size:10px;letter-spacing:.05em;white-space:nowrap}
.ce-prow-st svg{width:13px;height:13px}
.ce-prow-track{grid-column:1 / -1;display:block;height:5px;border-radius:999px;overflow:hidden;
  background:var(--bg-card);box-shadow:inset 0 0 0 1px var(--line-soft)}
.ce-prow-track>i{display:block;height:100%;border-radius:inherit;transition:width .35s ease}
/* grid-column ist PFLICHT: grid-row allein laesst das Auto-Placement den
   Link in Zeile 1 SPALTE 1 setzen — er lag ueber dem Plattform-Icon, und
   Name/Status kollidierten in derselben Zelle (P0 17.08.2026, Screenshot:
   "Oeffnen" durchgestrichen ueber Instagram-Icon). */
.ce-prow-link{grid-column:4;grid-row:1;justify-self:end;min-height:34px;display:inline-flex;align-items:center;
  color:var(--lime);font-size:11px;font-weight:700}
/* Kompakter Gesamtstatus, wenn alle Plattformen durch sind — ersetzt drei
   dauerhaft gefuellte "Ladebalken". */
.ce-pdone{display:flex;align-items:center;gap:7px;min-height:34px;padding:5px 10px;
  border-radius:9px;border:1px solid color-mix(in srgb,var(--ok) 40%,transparent);
  background:color-mix(in srgb,var(--ok) 10%,transparent);
  color:var(--ok);font-weight:700;font-size:12px}
.ce-pdone svg{width:15px;height:15px}
.ce-prow-err{grid-column:1 / -1;color:var(--danger);font-size:10.5px;line-height:1.35;overflow-wrap:anywhere}
.ce-prow-retry{grid-column:1 / -1;min-height:44px;display:inline-flex;align-items:center;
  justify-content:center;gap:7px}
.ce-prow-retry svg{width:14px;height:14px}
.ce-publish-progress .ce-pstrip{gap:7px}

/* Karten koennen im Desktop-Raster deutlich schmaler als das Browserfenster
   werden. Deshalb richtet sich der Umbruch nach der Karte, nicht nach dem
   Viewport: Plattformen bekommen eine eigene Zeile, lange Kanalzustaende
   stehen unter dem Namen und kein Markenwort wird gewaltsam getrennt. */
@container content-job (max-width:620px){
  .ce-jc-top{display:grid;grid-template-columns:minmax(0,1fr);gap:8px}
  .ce-jc-platforms{grid-row:2;justify-self:start;justify-content:flex-start}
  .ce-prow{grid-template-columns:22px minmax(0,1fr)}
  .ce-prow-st{grid-column:2;grid-row:2;justify-self:start;white-space:normal;overflow-wrap:break-word}
  .ce-prow-track{grid-column:1 / -1}
  .ce-prow-link{grid-column:2;grid-row:3;justify-self:start}
}

@media(prefers-reduced-motion:reduce){
  .ce-stage,.ce-prow-track>i{transition:none}
  .ce-stage:hover:not(:disabled){transform:none}
}

/* ── Mobil 375 / 390 / 430 ─────────────────────────────────────────── */
@media(max-width:560px){
  .ce-grid{grid-template-columns:1fr}
  .ce-jc,.ce-jc.is-open{grid-template-columns:76px minmax(0,1fr);gap:10px;padding:10px}
  .ce-jc-act{flex:1 1 104px;padding-inline:10px}
  .ce-jc-acts{gap:7px}
  .ce-stage{min-height:52px;padding:7px 10px}
  .ce-stage-l{font-size:9px;letter-spacing:.07em}
  .ce-mchip-t{flex:1 1 100%}
}

/* ═══════ V11.1 · Social Command Center (§4) ═══════ */
/* =====================================================================
   V11.1 · SOCIAL COMMAND CENTER — Sidecar (wird in app.css gemerged)
   ---------------------------------------------------------------------
   NUR das, was im Social Command Center wirklich neu ist. Alles andere
   leiht sich die Ansicht aus den bestehenden Blöcken:
     · Dashboard-Vokabular: .dash-card .dash-lift .dash-lab .dash-num
       .dash-v .dash-kpi-h .dash-kpi-ic .dash-kpi-foot .dash-delta
       .dash-spark .dash-sec-h .dash-rule .dash-hint .dash-status .dash-sep
     · V11-Signaturen: .kicker .brush .focus-field, Pillen-Buttons
     · bestehende .sc-Blöcke: .sc-head .sc-toggle/.sc-tgl .sc-pill*
       .sc-channel-insights .sc-insight* .sc-rhythm* .sc-fmt* .sc-high*
       .sc-cards/.sc-card* .sc-comments .sc-opps .sc-opp-btn .sc-plan*
   Neu ist genau zweierlei: der Plattformvergleich (.sc-vgl*) auf der
   bestehenden .sc-insight-Karte und die Beitrags-Vorschau (.sc-pv*, .sc-mess*).
   Mobile-first: 375/390/430 geprüft, Ziele >= 44px, kein Seiten-Overflow.
   ===================================================================== */

/* ── Plattformvergleich: die .sc-insight-Karte trägt jetzt einen Hero-KPI
      und dieselben acht Mini-Kennzahlen für JEDEN Kanal ──────────────── */
.sc-vgl{display:flex;flex-direction:column;min-width:0}
.sc-vgl .sc-insight-head{align-items:center}
.sc-vgl .sc-insight-head .sc-pill{flex:0 0 auto}
.sc-pill-err{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 45%,transparent);
  background:color-mix(in srgb,var(--danger) 10%,transparent)}

.sc-vgl-hero{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-top:14px;min-width:0}
.sc-vgl-kpi{display:flex;flex-direction:column;gap:6px;min-width:0;flex:1 1 auto}
.sc-vgl-big{font-size:30px;line-height:1.05;overflow-wrap:anywhere}
.sc-vgl .dash-kpi-foot{gap:10px}
.sc-vgl .sc-insight-rate{flex:0 0 auto}

/* Kennzahl-Matrix: zwei Spalten statt vier — „Impressionen" braucht Platz,
   sonst wird aus der Zahl ein Rätsel. Icons kommen aus C.ui.Icon. */
.sc-vgl .sc-insight-stats{grid-template-columns:repeat(2,minmax(0,1fr));margin:16px 0 14px}
.sc-vgl .sc-insight-stats>div{grid-template-columns:auto 1fr;align-items:center;gap:2px 8px;padding:9px 10px}
.sc-vgl .sc-insight-stats span{font-size:10px;letter-spacing:.04em}
.sc-vgl .sc-insight-stats b{font-size:16px}
.sc-vgl-ic{grid-row:1/3;display:inline-flex;align-items:center;color:var(--muted-2)}
.sc-vgl-ic svg{width:16px;height:16px}
/* Fehlende Metrik: ehrliches „—", sichtbar zurückgenommen — nie 0 erfinden. */
.sc-vgl-leer b{color:var(--muted-2)}
.sc-vgl-leer .sc-vgl-ic{opacity:.45}

.sc-vgl-note{margin:0 0 12px;padding:8px 10px;border-left:2px solid var(--warn);
  border-radius:0 var(--r-sm,10px) var(--r-sm,10px) 0;font-size:11.5px;line-height:1.45;
  background:color-mix(in srgb,var(--warn) 8%,transparent)}
.sc-vgl .sc-insight-next{margin-top:auto}
.sc-vgl .sc-insight-foot{flex-wrap:wrap}
.sc-vgl-gap{margin-left:auto;white-space:nowrap}
/* Nicht verbundener Kanal: Zahlen treten zurück, der Status bleibt voll lesbar. */
.sc-vgl-off .sc-vgl-hero,.sc-vgl-off .sc-insight-stats{opacity:.55}

/* Einstieg in den Verbindungsassistenten — sitzt in JEDER Kanalkachel.
   Loeste die frühere „+ Plattform verbinden"-Karte ab: die versprach einen
   achten Kanal, obwohl alle sieben schon als Kachel dastehen. */
.sc-vgl-setup{display:flex;align-items:center;justify-content:center;gap:8px;
  width:100%;min-height:44px;margin-top:10px;font-size:13px}
.sc-vgl-setup svg{width:16px;height:16px}

/* ── Instagram-Detail: Zusätze zur bestehenden Rhythmus-Zeile ────────── */
.sc-rhythm-meta{margin-left:auto;white-space:nowrap}
.sc-dm{margin-top:10px}

/* ── Content-Vorschlag als echte Beitrags-Vorschau ───────────────────── */
/* Vorschau bleibt kompakt: eine Beitragskarte wird nie breiter als eine
   echte Feed-Spalte, sonst wächst die Medienfläche ins Poster-Format. */
.sc .sc-opps{grid-template-columns:repeat(auto-fill,minmax(min(100%,270px),340px))}
.sc-pv{display:flex;flex-direction:column;min-width:0;overflow:hidden;
  background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r-lg,18px);
  box-shadow:var(--shadow-card)}
/* Quadratische Medienfläche wie im Feed. object-fit:cover — nie ein
   angeschnittener Kopf, nie ein verzerrtes Bild. max-height hält die
   Karte kompakt, cover schneidet dabei mittig statt zu verzerren. */
.sc-pv-media{position:relative;aspect-ratio:1/1;max-height:300px;
  display:flex;align-items:center;justify-content:center;
  overflow:hidden;background:linear-gradient(150deg,#1a261b,#0a0d0b)}
.sc-pv-media img{width:100%;height:100%;object-fit:cover;object-position:center;display:block}
.sc-pv-media::after{content:"360";position:absolute;right:14px;bottom:10px;pointer-events:none;
  color:rgba(184,232,52,.16);font:800 44px/1 var(--body)}
.sc-pv-ph{display:flex;align-items:center;justify-content:center;width:78px;height:78px;border-radius:50%;
  background:rgba(184,232,52,.10);color:var(--lime)}
.sc-pv-ph svg{width:32px;height:32px}
.sc-pv-badge,.sc-pv-ziel{position:absolute;top:10px;padding:5px 9px;border-radius:999px;
  font:700 10px/1.2 var(--mono,ui-monospace,monospace);letter-spacing:.08em;text-transform:uppercase;
  background:rgba(10,13,11,.72);backdrop-filter:blur(2px)}
.sc-pv-badge{left:10px;color:var(--ink)}
.sc-pv-ziel{right:10px;color:var(--lime)}
.sc-pv-hint{position:absolute;left:10px;bottom:10px;color:rgba(255,255,255,.5)}

.sc-pv-body{display:flex;flex-direction:column;gap:9px;padding:14px 15px 16px;min-width:0}
.sc-pv-hook{margin:0;font-size:15px;line-height:1.28;font-weight:800;color:var(--ink);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.sc-pv-cap{margin:0;font-size:12.5px;line-height:1.5;color:var(--muted);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.sc-pv.is-open .sc-pv-hook,.sc-pv.is-open .sc-pv-cap{display:block;overflow:visible;-webkit-line-clamp:none}
.sc-pv-more{align-self:flex-start;min-height:44px;min-width:44px;padding:0 2px;margin:-8px 0;
  border:0;background:none;cursor:pointer;color:var(--lime);font:inherit;font-size:12px;font-weight:700}
.sc-pv-more:focus-visible{outline:2px solid var(--lime);outline-offset:2px;border-radius:6px}

.sc-pv-tags{display:flex;flex-wrap:wrap;gap:6px}
.sc-tag{padding:6px 9px;border-radius:999px;font:600 11px/1 var(--body);color:var(--lime);
  background:rgba(184,232,52,.08);border:1px solid rgba(184,232,52,.22);white-space:nowrap;
  max-width:100%;overflow:hidden;text-overflow:ellipsis}

.sc-pv-lines{display:flex;flex-direction:column;gap:5px;padding-top:9px;border-top:1px solid var(--line-soft)}
.sc-pv-line{display:grid;grid-template-columns:56px minmax(0,1fr);gap:8px;align-items:baseline;
  min-width:0;font-size:12px;color:var(--ink)}
.sc-pv-line>span:last-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sc-pv.is-open .sc-pv-line>span:last-child{white-space:normal;line-height:1.45}

/* Messplan 7/14/30 — drei fugenlose Segmente, Metrik + Termin je Segment */
.sc-mess{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;overflow:hidden;
  background:var(--line-soft);border:1px solid var(--line-soft);border-radius:var(--r-sm,10px)}
.sc-mess-i{display:flex;flex-direction:column;gap:2px;padding:8px 8px;background:var(--bg-card);min-width:0}
.sc-mess-i b{font-family:var(--mono,ui-monospace,monospace);font-size:12px;color:var(--lime);
  font-variant-numeric:tabular-nums}
.sc-mess-i .dash-lab{font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sc-mess-d{font-family:var(--mono,ui-monospace,monospace);font-size:10px;color:var(--muted-2);
  font-variant-numeric:tabular-nums}
.sc-pv .sc-opp-btn{width:100%;margin-top:4px}

/* ── Mobil (375/390/430): keine Seiten-Überbreite, Ziele >= 44px ─────── */
@container (max-width:760px){
  /* Der Bleed der Kartenreihe darf nicht breiter werden als die Ansicht:
     ohne diese Rücknahme läuft die Zeile um die Seitenpolsterung über. */
  .sc .sc-insight-grid{margin-inline:0;padding-inline:0;scroll-padding-inline:0}
  .sc .sc-vgl{flex:0 0 min(84vw,330px)}
}
@media(max-width:560px){
  .sc-vgl-hero{flex-wrap:wrap}
  .sc-vgl-big{font-size:26px}
  .sc-pv-media{aspect-ratio:4/5;max-height:290px}
  .sc-pv-line{grid-template-columns:52px minmax(0,1fr)}
  .sc-mess-i{padding:8px 6px}
}
@media(prefers-reduced-motion:reduce){
  .sc-vgl,.sc-pv{transition:none}
}

/* ═══════ V11.1 · Systeme / Integrationen / Historie (§8) ═══════ */
/* =====================================================================
   V11.1 §8 · SYSTEME / INTEGRATIONEN / HISTORIE — SIDECAR zu app.css
   ---------------------------------------------------------------------
   Gehoert an das Ende von app.css (Merge durch den Haupt-Agenten). Es
   stehen hier NUR Regeln, die es noch nicht gibt. Alles Uebrige leihen
   sich die drei Ansichten aus den bestehenden Schichten:

     · V11-Signaturen   .kicker  .focus-field  .brush  Pillen-Buttons
     · Dashboard        .dash-sec-h .dash-rule .dash-hint .dash-strip
                        .dash-stat .dash-stat-lab .dash-lab .dash-v
                        .dash-num .dash-mchip .dash-lift .dash-seg
     · globale Schicht  .table-wrap/.tbl (Karten < 640px), .empty/.leer,
                        Touchziele >= 44px  — hier NICHT wiederholt
     · bestehende OS-/Int-/Hist-Bloecke .os-* .int-* .hist-* .rec-* .vz-*

   Neu ist genau dreierlei:
     1. der Status-Glyph (.os-st) mit seinen vier Toenen,
     2. das Fehlerfeld (.os-fehlerfeld) als sichtbarer Fehlerzustand,
     3. die Zeitleiste des Event Explorers (.hist-tl).
   Mobile-first: kein H-Overflow bei 375/390/430; die Tabellen stapeln
   ueber die globale Schicht, nicht ueber diese Datei.
   ===================================================================== */

/* ── 1 · Status-Glyph ───────────────────────────────────────────────
   Ersetzt den farbigen Punkt (.os-dot), der ohne Nachbartext keine
   Aussage trug. Der Ton faerbt den Glyph UND — ueber .os-st-<ton> am
   Zeilenelement — alles, was in der Zeile mitfarben soll.
   --unknown ist ein eigener Zustand: "nicht gemessen" darf nie wie ein
   gruenes "in Ordnung" aussehen. */
.os-st{display:inline-flex;align-items:center;flex:0 0 auto;vertical-align:-2px;
  color:var(--unknown);}
.os-st svg{width:15px;height:15px;}
.os-st-ok>.os-st,.os-st-ok.os-st{color:var(--ok);}
.os-st-warn>.os-st,.os-st-warn.os-st{color:var(--warn);}
.os-st-danger>.os-st,.os-st-danger.os-st{color:var(--danger);}
.os-st-unknown>.os-st,.os-st-unknown.os-st{color:var(--unknown);}

/* Zeilen, die einen Glyph vorangestellt bekommen haben, brauchen den
   Abstand — sonst klebt der Glyph am ersten Wort. */
.int-dep-liste li,.hist-sys-liste li,.hist-auto-zeile,.int-mess{
  display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;min-width:0;}
.int-badge{display:inline-flex;align-items:center;gap:7px;min-width:0;}

/* ── 2 · Fehlerfeld ────────────────────────────────────────────────
   Ein Abrufproblem ist kein Leerzustand. Der echte Fehlertext stand
   bisher als gedaempfter Nebensatz und war von "nichts da" nicht zu
   unterscheiden — hier traegt er Warnfarbe und eine eigene Flaeche. */
.os-fehlerfeld{display:flex;align-items:flex-start;gap:10px;
  padding:var(--s-3) var(--s-4);border-radius:var(--r);
  border:1px solid color-mix(in srgb,var(--danger) 40%,transparent);
  background:var(--danger-bg);color:var(--ink);font-size:13px;line-height:1.45;}
.os-fehlerfeld>svg{width:16px;height:16px;flex:0 0 auto;margin-top:2px;color:var(--danger);}
.os-fehlerfeld p{margin:0;min-width:0;overflow-wrap:anywhere;}

/* ── 3 · Event Explorer als Zeitleiste ─────────────────────────────
   Eine chronologische Liste IST eine Zeitleiste; sie sah nur nicht so
   aus. Linke Schiene + Statuspunkt, wie im Dashboard. Die Schiene ist
   ein Pseudoelement — kein zusaetzliches Markup, keine Logik. */
.hist-tl{list-style:none;margin:var(--s-2) 0 0;padding:0;position:relative;min-width:0;}
.hist-tl::before{content:"";position:absolute;left:7px;top:10px;bottom:10px;width:1px;
  background:var(--line);pointer-events:none;}
.hist-tl-i{position:relative;display:grid;grid-template-columns:16px auto minmax(0,1fr);
  align-items:baseline;column-gap:10px;row-gap:2px;min-height:32px;padding:6px 0;min-width:0;}
.hist-tl-dot{grid-column:1;justify-self:center;background:var(--bg);border-radius:50%;}
.hist-tl-dot svg{width:13px;height:13px;}
.hist-tl-zeit{grid-column:2;font-family:var(--mono,ui-monospace,monospace);
  font-variant-numeric:tabular-nums;white-space:nowrap;}
.hist-tl-tx{grid-column:3;min-width:0;overflow-wrap:anywhere;}

/* ── Kopfzeilen: die geliehene .dash-sec-h braucht in Karten weniger
      Luft nach oben als im Dashboard-Fluss ──────────────────────────── */
.card>.dash-sec-h:first-child{margin-top:0;}
.view-head .kicker{margin-bottom:var(--s-2);}
.dash-sec-h .kicker svg{width:14px;height:14px;flex:0 0 auto;}

/* ── Mobil 375 / 390 / 430 ─────────────────────────────────────────
   Nichts darf breiter werden als die Ansicht. Der Strip stapelt bereits
   ueber app.css (2 Spalten < 560px); hier nur, was diese Datei einbringt. */
@media(max-width:560px){
  .hist-tl-i{grid-template-columns:16px minmax(0,1fr);}
  .hist-tl-zeit{grid-column:2;}
  .hist-tl-tx{grid-column:2;}
  .os-fehlerfeld{padding:var(--s-3);}
}
/* V11.2 · zentrale Titel-Signatur fuer die letzten operativen Kernviews. */
.view-title-icon{display:flex;align-items:center;gap:10px;text-wrap:balance}
.view-title-icon>svg{width:24px;height:24px;flex:0 0 24px;color:var(--lime)}
@media(max-width:430px){.view-title-icon{gap:8px}.view-title-icon>svg{width:21px;height:21px;flex-basis:21px}}

/* ═══════ V12 · Verbindungsassistent (§1) ═══════ */
/* =====================================================================
   V12 §1 — Connection Wizard (.cw-*) — SIDECAR
   ---------------------------------------------------------------------
   Beiwagen-Datei: gehört inhaltlich zu app.css, wird aber getrennt
   geliefert, damit die Hauptdatei in dieser Runde unangetastet bleibt.
   Übernimmt ausschliesslich Tokens aus app.css (--lime, --line, --ok,
   --warn, --danger, --s-*, --r*) — kein zweiter Farbsatz, keine
   Neuerfindung des V11-Stils.

   Mobile first: die Basis gilt für 375/390/430. Schritte stapeln, jedes
   Ziel ist mindestens 44px hoch, nichts läuft seitlich über
   (überlange URLs/Scopes brechen um), und die Unterkante respektiert
   die Safe Area.
   ===================================================================== */

.cw{display:flex;flex-direction:column;gap:0;max-width:100%;overflow:hidden;}
.cw *{min-width:0;}
.cw p{margin:0;}

/* ── Kopf ─────────────────────────────────────────────────────────── */
.cw-head{display:flex;align-items:center;gap:var(--s-3);padding:20px 20px 16px;border-bottom:1px solid var(--line-soft);}
.cw-glyph{display:inline-flex;flex:0 0 auto;}
.cw-head-txt{display:flex;flex-direction:column;gap:6px;min-width:0;}
.cw-head-txt h2{margin:0;font-family:var(--display);font-size:clamp(22px,6vw,30px);
  line-height:1.05;letter-spacing:.01em;color:var(--ink);
  overflow-wrap:anywhere;hyphens:none;}
.cw-close{margin-left:auto;min-width:44px;min-height:44px;padding:0;}
.cw-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;padding:8px 12px;border-bottom:1px solid var(--line-soft);background:rgba(255,255,255,.018)}
.cw-tab{min-height:44px;padding:8px;border:1px solid transparent;border-radius:10px;background:transparent;color:var(--muted);font:700 12px/1.2 var(--body);cursor:pointer}
.cw-tab:hover{color:var(--ink);background:rgba(255,255,255,.035)}
.cw-tab.is-active{color:#091109;background:var(--lime);box-shadow:0 8px 24px rgba(184,232,52,.12)}
.cw-tab:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
.cw-pane{min-height:0;overflow-y:auto;padding:18px 20px 22px;overscroll-behavior:contain}

/* ── Zustand + nächste Handlung ───────────────────────────────────── */
.cw-state{display:flex;flex-direction:column;gap:var(--s-3);padding:var(--s-4);}
.cw-state-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2);}
.cw-pill{display:inline-flex;align-items:center;font-family:var(--mono,ui-monospace,monospace);
  font-size:10px;letter-spacing:.08em;text-transform:uppercase;
  padding:5px 10px;border:1px solid var(--line);border-radius:999px;color:var(--muted-2);}
.cw-pill-ok{color:var(--ok);border-color:rgba(87,204,139,.4);background:rgba(87,204,139,.08);}
.cw-pill-warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 40%,transparent);}
.cw-pill-err{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 45%,transparent);}
.cw-pill-off{color:var(--muted-2);}
.cw-aktion{color:var(--ink);font-size:15px;line-height:1.5;overflow-wrap:anywhere;}
.cw-diag{overflow-wrap:anywhere;}

/* Die eine Lime-Pille pro Assistent: die nächste Handlung. */
.cw-next{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  align-self:flex-start;min-height:44px;padding:0 var(--s-5);
  border:0;border-radius:999px;background:var(--lime);color:#0A140A;
  font-family:var(--body);font-weight:700;font-size:14px;cursor:pointer;
  text-decoration:none;transition:filter var(--nex-fast) var(--nex-ease),transform var(--nex-fast) var(--nex-ease);}
.cw-next:hover{filter:brightness(1.03);transform:translateY(-1px);}
.cw-next:active{transform:translateY(1px) scale(.99);}
.cw-next[disabled]{opacity:.55;cursor:default;transform:none;}
.cw-next svg{width:16px;height:16px;}

/* ── Schrittliste ─────────────────────────────────────────────────── */
.cw-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;}
.cw-step{display:flex;gap:var(--s-3);align-items:flex-start;
  min-height:44px;padding:var(--s-3) 0;border-bottom:1px solid var(--line-soft);}
.cw-step:last-child{border-bottom:0;}
.cw-step-ic{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  width:26px;height:26px;border:1px solid var(--line);border-radius:50%;color:var(--muted-2);}
.cw-step-ic svg{width:14px;height:14px;}
.cw-step-txt{display:flex;flex-direction:column;gap:4px;min-width:0;}
.cw-step-txt strong{color:var(--ink);font-size:15px;line-height:1.3;overflow-wrap:anywhere;}
.cw-step-txt p{color:var(--muted);font-size:13px;line-height:1.45;overflow-wrap:anywhere;}
.cw-step-state{order:-1;}
.cw-erledigt .cw-step-ic{color:var(--ok);border-color:rgba(87,204,139,.4);}
.cw-offen .cw-step-ic{color:var(--lime);border-color:var(--line-lime);}
.cw-extern .cw-step-ic{color:var(--info);border-color:color-mix(in srgb,var(--info) 40%,transparent);}
.cw-gesperrt{opacity:.62;}
.cw-gesperrt .cw-step-ic{color:var(--unknown);}

/* ── Fähigkeiten ──────────────────────────────────────────────────── */
.cw-caps{display:flex;flex-direction:column;gap:var(--s-3);}
.cw-sub{margin:var(--s-3) 0 var(--s-2);}
.cw-chip-warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 35%,transparent);}

/* ── Einrichtung, Links, Listen ───────────────────────────────────── */
.cw-setup{display:flex;flex-direction:column;gap:var(--s-3);}
.cw-links{display:flex;flex-direction:column;gap:var(--s-3);}
.cw-linkrow{display:flex;flex-direction:column;gap:var(--s-2);
  padding:var(--s-3);border:1px solid var(--line);border-radius:var(--r);background:var(--bg-2);}
.cw-linkrow p{flex:1 1 auto;min-width:0;color:var(--muted);font-size:13px;line-height:1.45;overflow-wrap:break-word;}
.cw-link{display:inline-flex;align-items:center;gap:6px;align-self:flex-start;
  min-height:44px;color:var(--lime);text-decoration:none;font-size:14px;font-weight:600;
  flex:0 0 auto;white-space:nowrap;overflow-wrap:normal;word-break:normal;}
.cw-link:hover{text-decoration:underline;}
.cw-link svg{width:15px;height:15px;flex:0 0 auto;}
.cw-ul{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px;
  color:var(--muted);font-size:13px;line-height:1.45;}
.cw-ul li{overflow-wrap:anywhere;}

/* ── Hartes externes Tor (TikTok-Audit) ───────────────────────────── */
.cw-gate{display:flex;flex-direction:column;gap:var(--s-2);padding:var(--s-4);
  border:1px solid color-mix(in srgb,var(--warn) 40%,transparent);border-radius:var(--r);
  background:rgba(240,180,41,.06);}
.cw-gate strong{display:flex;align-items:center;gap:8px;color:var(--warn);font-size:14px;}
.cw-gate strong svg{width:16px;height:16px;flex:0 0 auto;}
.cw-gate p{color:var(--muted);font-size:13px;line-height:1.5;overflow-wrap:anywhere;}
.cw-gate-ok{color:var(--ok) !important;}

.cw-flow{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:var(--s-2);
  color:var(--muted);font-size:13px;line-height:1.45;}
.cw-flow li{overflow-wrap:anywhere;}
.cw-flow strong{display:block;color:var(--ink);font-size:14px;}

/* ── Fehlender Adapter ────────────────────────────────────────────── */
.cw-adapter{display:flex;flex-direction:column;gap:var(--s-3);}
.cw-adapter h3{margin:0;color:var(--ink);font-size:16px;line-height:1.25;}

/* Ab Tablet: die Linkzeilen dürfen nebeneinander stehen, der Rest bleibt
   wie er ist — das mobile Layout ist der Normalfall, nicht die Ausnahme. */
@media (min-width:721px){
  .cw-links{flex-direction:row;flex-wrap:wrap;}
  .cw-linkrow{flex:1 1 280px;}
  .cw-linkrow{flex-direction:row;align-items:center;justify-content:space-between;gap:var(--s-4);}
}

@media (prefers-reduced-motion:reduce){
  .cw-next{transition:none;}
  .cw-next:hover,.cw-next:active{transform:none;}
}

/* Overlay fuer Verbindungsassistent UND KI-Bildstudio — eine Regel, zwei
   Nutzer. Zwei Kopien wuerden auseinanderlaufen, sobald einer angepasst wird.
   Mobile-first: fuellt auf kleinen Geraeten den Schirm, ab 721px eine
   zentrierte Karte. Eigenes Scrollen, damit lange Einrichtungswege und lange
   Variantenlisten nie die Seite querschieben. */
.cw-overlay,.bs-overlay{position:fixed;inset:0;z-index:1200;display:flex;
  align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--bg) 82%,transparent);
  backdrop-filter:blur(6px);overflow-y:auto;
  padding:max(10px,env(safe-area-inset-top)) max(10px,env(safe-area-inset-right)) max(10px,env(safe-area-inset-bottom)) max(10px,env(safe-area-inset-left))}
.cw-popup{width:min(680px,100%);max-height:calc(100dvh - 20px);overflow:hidden;border:1px solid color-mix(in srgb,var(--lime) 26%,var(--line));border-radius:22px;background:linear-gradient(150deg,rgba(25,37,27,.99),rgba(9,14,10,.995));box-shadow:0 28px 90px rgba(0,0,0,.62),0 0 42px rgba(184,232,52,.08)}
.cw-popup>.cw{max-height:calc(100dvh - 20px)}
.bs-overlay>.bs{width:100%;max-width:720px;min-height:100%}
.bs-overlay{flex-direction:column;align-items:center}
.bs-overlay-zu{align-self:flex-end;margin:var(--s-2);min-height:44px}
.bs-uebernehmen{width:100%;min-height:44px;margin-top:var(--s-2);
  display:flex;align-items:center;justify-content:center;gap:8px}
.ce-media-ki{margin-top:10px;min-height:44px}
@media(min-width:721px){
  .cw-overlay,.bs-overlay{align-items:center;padding:var(--s-4)}
  .bs-overlay>.bs{min-height:0;border-radius:var(--r2);max-height:calc(100vh - 2*var(--s-4));overflow-y:auto}
  .bs-overlay{justify-content:center}
}
@media(max-width:520px){
  .cw-head{padding:16px 14px 12px}.cw-pane{padding:14px 14px 18px}.cw-tabs{overflow-x:auto;grid-template-columns:repeat(4,minmax(92px,1fr))}
  .cw-popup{border-radius:18px}.cw-tab{font-size:11px}
}
@media(prefers-reduced-motion:reduce){.cw-tab{transition:none}}

/* ═══════ V12 · Wochenplaner (§3) ═══════ */
/* =====================================================================
   DHS OS — Wochenplaner (V12 §3) · Sidecar zu app.css
   ---------------------------------------------------------------------
   Bewusst eine EIGENE Datei: app.css wird parallel bearbeitet, und zwei
   Hände in derselben Datei sind ein Merge-Konflikt mit Ansage. Beim
   Zusammenführen wandert dieser Block ans Ende von app.css und die Datei
   verschwindet — es sind ausschließlich NEUE .wp-Klassen, kein einziger
   bestehender Selektor wird überschrieben.

   Alles Vorhandene wird benutzt statt kopiert: .focus-field .kicker .brush
   .dash-card .dash-lift .dash-head .dash-greet .dash-hint .form-grid
   .form-actions .field .field-label .field-full .inp .btn .btn-primary
   .btn-ghost .btn-sm .btn-danger-ghost — sowie die Tokens aus dem :root
   von app.css (--lime, --line, --ink, --muted, --bg-2, --r-sm, --nex-*).

   Mobile-first im Sinne des Projekts: die Basisregeln unten sind die
   schmale Ansicht (375 / 390 / 430), Fläche kommt erst per @container /
   @media dazu. Jede Bedienfläche ist mindestens 44 px hoch, kein Block
   erzeugt horizontales Scrollen (min-width:0 + wrap statt fester Breiten).
   ===================================================================== */

.wp { container-type: inline-size; }

/* ── Kopf ─────────────────────────────────────────────────────────── */
.wp-head .dash-hint { margin-top: 6px; max-width: 62ch; }

/* ── Konfigurationsfeld ───────────────────────────────────────────── */
.wp-form { margin-bottom: 20px; }
.wp-form .form-grid { margin-top: 12px; grid-template-columns: 1fr; }
.wp-form .field { min-width: 0; }

/* Plattform-Auswahl: Glyph + Name, umbruchfähig, nie schmaler als der Daumen. */
.wp-pfs { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; }
.wp-pf {
  display: inline-flex; align-items: center; gap: 7px;
  min-height: 44px; padding: 0 13px; border-radius: var(--r-sm);
  background: var(--bg-2); border: 1px solid var(--line-soft); color: var(--ink);
  font: inherit; font-size: .86rem; cursor: pointer; opacity: .68;
  transition: border-color var(--nex-fast) var(--nex-ease), opacity var(--nex-fast) var(--nex-ease);
}
.wp-pf span { text-transform: capitalize; }
.wp-pf:hover { opacity: .9; border-color: var(--line); }
.wp-pf.is-on { opacity: 1; border-color: var(--lime); background: var(--lime-soft); }
.wp-pf:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--lime-glow); }

/* Säulen / Material als Chips — dieselbe Mechanik, ohne Glyph. */
.wp-chips { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 6px; }
.wp-chip {
  min-height: 44px; padding: 0 13px; border-radius: 999px;
  background: transparent; border: 1px solid var(--line-soft); color: var(--muted);
  font: inherit; font-size: .82rem; cursor: pointer;
  transition: color var(--nex-fast) var(--nex-ease), border-color var(--nex-fast) var(--nex-ease);
}
.wp-chip:hover { color: var(--ink); border-color: var(--line); }
.wp-chip.is-on { color: var(--ink); border-color: var(--lime); background: var(--lime-soft); }
.wp-chip.is-aus { opacity: .45; text-decoration: line-through; }
.wp-chip:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--lime-glow); }

/* Die eine große Aktion. Auf schmal volle Breite — sie ist der Zweck der Seite. */
.wp-actions { flex-direction: column; align-items: stretch; gap: 12px; }
.wp-cta { width: 100%; min-height: 52px; font-size: 1rem; letter-spacing: .01em; }

/* ── Vorschau ─────────────────────────────────────────────────────── */
.wp-plan { margin-top: 26px; }
.wp-plan-head { display: flex; flex-direction: column; gap: 4px; margin-bottom: 14px; }
.wp-slots { display: grid; grid-template-columns: 1fr; gap: 12px; }

.wp-slot { padding: 15px; border-radius: 18px; min-width: 0; }
.wp-slot-head {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  padding-bottom: 10px; border-bottom: 1px solid var(--line-soft);
}
.wp-when {
  font-family: var(--mono, ui-monospace, monospace); font-size: 11px; letter-spacing: .05em;
  color: var(--ink); white-space: nowrap;
}
.wp-saeule {
  min-height: 24px; display: inline-flex; align-items: center; padding: 0 9px;
  border-radius: 999px; border: 1px solid var(--line-lime); background: var(--lime-soft);
  font-size: 11px; font-weight: 650; color: var(--ink);
}
.wp-format {
  font-size: 11px; text-transform: uppercase; letter-spacing: .07em; color: var(--muted);
}
.wp-glyphs { display: inline-flex; gap: 6px; margin-left: auto; }
.wp-glyphs svg { width: 18px; height: 18px; }

.wp-hook { margin: 11px 0 0; font-size: 1.02rem; line-height: 1.35; font-weight: 650; }
.wp-kern { margin: 7px 0 0; font-size: .9rem; line-height: 1.5; color: var(--muted-2); }
.wp-ziel {
  display: flex; align-items: flex-start; gap: 7px; margin: 11px 0 0;
  font-size: .8rem; line-height: 1.4; color: var(--muted);
}
.wp-ziel svg { width: 15px; height: 15px; flex: 0 0 auto; margin-top: 1px; color: var(--info); }

/* Handgriffe: auf schmal gestapelt, jede Fläche 44 px. */
.wp-slot-actions {
  display: grid; grid-template-columns: 1fr 1fr; gap: 8px;
  margin-top: 13px; padding-top: 11px; border-top: 1px solid var(--line-soft);
}
.wp-slot-actions .btn { width: 100%; }
.wp-move { display: flex; flex-direction: column; gap: 4px; grid-column: 1 / -1; min-width: 0; }
.wp-move > span {
  font-size: .72rem; text-transform: uppercase; letter-spacing: .5px; color: var(--muted);
}
/* Das native Datumsfeld bleibt das Datumsfeld — kein nachgebauter Picker. */
.wp-move .inp { min-height: 44px; width: 100%; }

/* ── Hinweise: Text · Grund · Ausweg, immer alle drei ─────────────── */
.wp-hinweise { list-style: none; margin: 18px 0 0; padding: 0; display: grid; gap: 9px; }
.wp-hinweise li {
  position: relative; padding: 11px 13px 11px 15px; border-radius: 13px;
  background: rgba(255, 255, 255, .025); border: 1px solid var(--line-soft); min-width: 0;
}
.wp-hinweise li::before {
  content: ""; position: absolute; inset: 10px auto 10px 0; width: 3px;
  border-radius: 3px; background: var(--warn);
}
.wp-hinweise b { display: block; font-size: .87rem; line-height: 1.35; }
.wp-hinweise span { display: block; margin-top: 3px; font-size: .8rem; line-height: 1.45; color: var(--muted); }
.wp-hinweise em { display: block; margin-top: 5px; font-size: .78rem; font-style: normal; color: var(--lime); }

/* ── Abschlussaktionen ────────────────────────────────────────────── */
.wp-plan-actions { display: grid; grid-template-columns: 1fr; gap: 10px; margin-top: 20px; }
.wp-plan-actions .btn { width: 100%; min-height: 48px; }
.wp-freigabe-hint { line-height: 1.45; max-width: 62ch; }

/* ── Ab Tablet Fläche geben (Container-Query, nicht Viewport) ──────── */
@container (min-width: 620px) {
  .wp-form .form-grid { grid-template-columns: 1fr 1fr; }
  .wp-actions { flex-direction: row; align-items: center; justify-content: space-between; }
  .wp-cta { width: auto; min-width: 280px; }
  .wp-slot-actions { grid-template-columns: auto auto 1fr auto; align-items: end; }
  .wp-slot-actions .btn { width: auto; }
  .wp-move { grid-column: auto; }
  .wp-move .inp { width: auto; min-width: 150px; }
  .wp-plan-actions { grid-template-columns: auto auto 1fr; align-items: center; }
  .wp-plan-actions .btn { width: auto; }
}
@container (min-width: 900px) {
  .wp-slots { grid-template-columns: 1fr 1fr; }
}

/* Sehr schmale Geräte (375 px): Rand an die Safe-Area, Platz für die
   untere Navigation — dieselbe Behandlung wie .ce/.sc in app.css. */
@media (max-width: 560px) {
  .wp {
    padding-inline: max(12px, env(safe-area-inset-left));
    padding-bottom: calc(86px + env(safe-area-inset-bottom));
  }
  .wp-form { margin-inline: -12px; padding-inline: 12px; }
  .wp-slot-head { row-gap: 6px; }
  .wp-glyphs { margin-left: 0; width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .wp-pf, .wp-chip { transition: none; }
}

/* ═══════ V12 · KI-Bildstudio (§4) ═══════ */
/* =====================================================================
   V12 §4 — KI-Bildstudio · Sidecar zu app.css
   ---------------------------------------------------------------------
   NUR neue Klassen (Praefix .bs-), ausschliesslich Tokens aus
   app.css :root. Keine Neudefinition bestehender Regeln, keine eigenen
   Farb- oder Abstandswerte.

   Zwei Hausregeln dieser Oberflaeche werden hier eingehalten:
     · Keine Kaesten. Hierarchie entsteht ueber Linien und Abstand, nicht
       ueber gerahmte Flaechen. Radius gibt es nur an Bedienelementen
       (Knopf, Chip, Feld) und am Bild selbst.
     · Mobile-first. Der Grundzustand ist 375 px breit und einspaltig;
       breitere Ansichten kommen ueber min-width dazu. Beruehrflaechen
       sind mindestens 44 px hoch.
   ===================================================================== */

.bs {
  display: flex;
  flex-direction: column;
  gap: var(--s-6);
  max-width: var(--maxw);
  /* Nichts darf seitlich hinauslaufen: Grid-Kinder duerfen schrumpfen. */
  min-width: 0;
}
.bs * { min-width: 0; }

/* ── Kopf ──────────────────────────────────────────────────────────── */
.bs-head { display: flex; flex-direction: column; gap: var(--s-2); }
.bs-head h2 {
  font-family: var(--display);
  font-size: var(--t-h1);
  line-height: 1.05;
  color: var(--laut-1);
  margin: 0;
}
.bs-head .dash-hint { max-width: var(--maxw-lesen); }

/* ── Eingabe ───────────────────────────────────────────────────────── */
.bs-form { display: flex; flex-direction: column; gap: var(--s-3); }

.bs-lab {
  font-size: var(--t-micro);
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--laut-3);
  margin: var(--s-3) 0 0;
}

.bs-area,
.bs-select {
  width: 100%;
  font-family: var(--body);
  font-size: var(--t-body);
  color: var(--ink);
  background: var(--bg-2);
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  padding: var(--s-3);
  transition: border-color var(--nex-fast) var(--nex-ease);
}
.bs-area { resize: vertical; line-height: 1.5; }
.bs-select { min-height: 44px; }
.bs-area::placeholder { color: var(--unknown); }
.bs-area:focus-visible,
.bs-select:focus-visible { outline: none; border-color: var(--line-lime); }

/* ── Plattform-Chips ───────────────────────────────────────────────── */
.bs-chips { display: flex; flex-wrap: wrap; gap: var(--s-2); }
.bs-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--s-2);
  min-height: 44px;
  padding: 0 var(--s-4);
  font-family: var(--body);
  font-size: var(--t-small);
  color: var(--muted);
  background: transparent;
  border: 1px solid var(--line);
  border-radius: var(--r-control);
  cursor: pointer;
  transition: color var(--nex-fast) var(--nex-ease), border-color var(--nex-fast) var(--nex-ease);
}
.bs-chip:hover { color: var(--ink); border-color: var(--line-strong); }
.bs-chip-an { color: var(--ink); border-color: var(--line-lime); background: var(--lime-soft); }
.bs-chip-hint { font-size: var(--t-micro); color: var(--unknown); }

.bs-go {
  align-self: flex-start;
  min-height: 48px;
  margin-top: var(--s-4);
  padding: 0 var(--s-5);
  font-family: var(--body);
  font-size: var(--t-body);
  color: var(--bg);
  background: var(--lime);
  border: none;
  border-radius: var(--r-sm);
  cursor: pointer;
  transition: background var(--nex-fast) var(--nex-ease);
}
.bs-go:hover:not(:disabled) { background: var(--lime-deep); }
.bs-go:disabled { background: var(--bg-hover); color: var(--unknown); cursor: not-allowed; }

/* ── Listen: Linie statt Kasten ────────────────────────────────────── */
.bs-ul { list-style: none; margin: 0; padding: 0; }
.bs-ul > li {
  display: flex;
  flex-direction: column;
  gap: var(--s-1);
  padding: var(--s-3) 0;
  border-top: 1px solid var(--line-soft);
}
.bs-ul > li:first-child { border-top: none; }
.bs-ul strong { font-size: var(--t-body); color: var(--laut-1); font-weight: 600; }
.bs-ul span { font-size: var(--t-small); color: var(--laut-2); }
.bs-ul p { margin: 0; }

.bs-plan,
.bs-abgelehnt,
.bs-ergebnis { display: flex; flex-direction: column; gap: var(--s-2); }

.bs-warn { font-size: var(--t-small); color: var(--warn); }

/* ── Fehler: eine Linie in Signalfarbe, kein Alarmkasten ──────────── */
.bs-fehler {
  display: flex;
  flex-direction: column;
  gap: var(--s-2);
  padding: var(--s-3) 0 var(--s-3) var(--s-4);
  border-left: 2px solid var(--danger);
}
.bs-fehler p { margin: 0; font-size: var(--t-small); color: var(--laut-2); }
/* Zwei Klassen tief statt !important — die Regel darueber ist
   spezifischer als eine reine Klasse und wuerde sonst gewinnen. */
.bs-fehler p.bs-fehler-titel {
  display: flex;
  align-items: center;
  gap: var(--s-2);
  font-size: var(--t-lead);
  color: var(--ink);
}
.bs-fehler .bs-ul > li { border-top-color: var(--line-soft); }

/* ── Ergebnis ──────────────────────────────────────────────────────── */
.bs-grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--s-5);
}
.bs-karte { display: flex; flex-direction: column; gap: var(--s-2); min-width: 0; }
.bs-bild {
  display: block;
  width: 100%;
  height: auto;
  max-width: 100%;
  border-radius: var(--r);
  background: var(--bg-2);
}
.bs-meta { margin: 0; font-size: var(--t-micro); color: var(--laut-3); }
.bs-alt,
.bs-herkunft {
  display: flex;
  flex-direction: column;
  gap: var(--s-1);
  margin: 0;
  font-size: var(--t-small);
  color: var(--laut-2);
  /* Prompts und Alt-Texte sind lang — sie brechen, sie schieben nicht. */
  overflow-wrap: anywhere;
}
.bs-hinweis { margin: 0; font-size: var(--t-micro); color: var(--laut-3); }

/* ── Breitere Ansichten ────────────────────────────────────────────── */
@media (min-width: 560px) {
  .bs-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .bs-area { max-width: var(--maxw-lesen); }
  .bs-select { max-width: 12ch; }
}
@media (min-width: 900px) {
  .bs-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

@media (prefers-reduced-motion: reduce) {
  .bs-chip, .bs-go, .bs-area, .bs-select { transition: none; }
}

/* ═══════ V12 · Medienpruefung & Crop (Kevins Punkt 2) ═══════ */
/* =====================================================================
   V12 — Medien-QA / Zuschnitt · Sidecar zu app.css
   ---------------------------------------------------------------------
   NUR neue Klassen (Praefix .mq-), ausschliesslich Tokens aus
   app.css :root. Keine Neudefinition bestehender Regeln, keine eigenen
   Farb- oder Abstandswerte.

   Hausregeln, die hier gelten:
     · Keine Kaesten. Der Befund steht als Text, nicht in einem Rahmen.
       Radius gibt es nur an Bedienelementen und am Bild selbst.
     · Mobile-first: Grundzustand 375 px, einspaltig. Breiteres kommt
       ueber min-width dazu. Beruehrflaechen mindestens 44 px.
     · Nichts laeuft seitlich hinaus — die Buehne begrenzt sich selbst,
       die Vorschau bricht um statt zu scrollen.
   ===================================================================== */

.mq { display: flex; flex-direction: column; gap: var(--s-4); min-width: 0; max-width: 100%; }
.mq * { min-width: 0; }

/* ── Zielformat waehlen ────────────────────────────────────────────── */
.mq-ziele { display: flex; flex-wrap: wrap; gap: var(--s-2); }
.mq-chip {
  min-height: 44px; padding: 0 var(--s-4);
  background: transparent; color: var(--laut-2);
  border: 1px solid var(--line); border-radius: var(--r-control);
  font-size: var(--t-body); font-family: var(--body);
  transition: color var(--nex-fast) var(--ease), border-color var(--nex-fast) var(--ease);
}
.mq-chip:hover { color: var(--laut-1); border-color: var(--line-strong); }
.mq-chip.is-an { color: var(--lime); border-color: var(--line-lime); }
.mq-chip:focus-visible { outline: 2px solid var(--lime); outline-offset: 2px; }

/* ── Buehne: Original + beweglicher Ausschnitt ─────────────────────── */
.mq-buehne {
  position: relative; width: 100%; max-width: 100%;
  overflow: hidden; border-radius: var(--r); background: var(--bg-2);
  touch-action: none;                 /* der Rahmen zieht, die Seite scrollt nicht mit */
  -webkit-user-select: none; user-select: none;
}
.mq-bild { display: block; width: 100%; height: auto; }

/* Der Ausschnitt bleibt hell, alles ausserhalb wird ruhig gelegt — die
   riesige outline ist genau das, ohne zweites Element. Die Verdunklung
   ist --bg mit Deckkraft, kein neuer Farbwert. */
.mq-rahmen {
  position: absolute; cursor: move;
  outline: 9999px solid color-mix(in srgb, var(--bg) 62%, transparent);
  box-shadow: inset 0 0 0 2px var(--lime);
}
/* Bereich, den die App mit eigener Oberflaeche ueberdeckt. */
.mq-safe { position: absolute; border: 1px dashed var(--line-strong); pointer-events: none; }

.mq-griff {
  position: absolute; right: -2px; bottom: -2px;
  width: 44px; height: 44px; padding: 0;
  background: transparent; border: 0; cursor: nwse-resize;
  touch-action: none;
}
.mq-griff::after {
  content: ""; position: absolute; right: 6px; bottom: 6px;
  width: 18px; height: 18px;
  border-right: 3px solid var(--lime); border-bottom: 3px solid var(--lime);
  border-bottom-right-radius: var(--r-control);
}
.mq-griff:focus-visible { outline: 2px solid var(--lime); outline-offset: 2px; }

/* ── Aktionen ──────────────────────────────────────────────────────── */
.mq-aktionen { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-3); }
.mq-btn {
  min-height: 44px; padding: 0 var(--s-4);
  background: var(--lime); color: var(--bg);
  border: 0; border-radius: var(--r-sm);
  font-family: var(--body); font-size: var(--t-body); font-weight: 600;
}
.mq-btn:focus-visible { outline: 2px solid var(--lime); outline-offset: 2px; }
.mq-mass { color: var(--laut-3); font-size: var(--t-small); }

/* ── Befund: Text, kein Kasten ─────────────────────────────────────── */
.mq-befund { display: flex; flex-direction: column; gap: var(--s-1); max-width: var(--maxw-lesen); }
.mq-befund p { margin: 0; font-size: var(--t-body); line-height: 1.45; }
.mq-rot { color: var(--danger); }
.mq-gelb { color: var(--warn); }
.mq-gruen { color: var(--ok); }

/* ── Vorschau je Zielformat ────────────────────────────────────────── */
.mq-vorschau {
  display: grid; gap: var(--s-3);
  grid-template-columns: repeat(auto-fill, minmax(88px, 1fr));
}
.mq-vs { margin: 0; display: flex; flex-direction: column; gap: var(--s-1); min-width: 0; }
.mq-vs-bild {
  width: 100%; border-radius: var(--r-control);
  background-repeat: no-repeat; background-color: var(--bg-2);
}
.mq-vs figcaption { color: var(--laut-3); font-size: var(--t-micro); }
.mq-vs.is-warn figcaption { color: var(--warn); }

/* ── Ab Tablet: Buehne und Vorschau nebeneinander ──────────────────── */
@media (min-width: 768px) {
  .mq-vorschau { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); }
}

@media (prefers-reduced-motion: reduce) {
  .mq-chip { transition: none; }
}

/* Offener Mobile-Drawer sperrt den Hintergrund-Scroll (V13-B). Nur auf
   Telefon-Breiten aktiv — am Desktop gibt es keinen Drawer. */
@media(max-width:860px){
  body.drawer-offen{overflow:hidden;}
}

/* ═══════ V13 · Social kompakt ═══════ */
/* =====================================================================
   V13 · Social-Ansicht kompakt — Sidecar zu app.css (nur neue .sk-*-Klassen)
   ---------------------------------------------------------------------
   Gehört zu app-social-center.js (C.views.Social, V13-Umbau). Nutzt NUR
   die :root-Tokens aus app.css; bestehende sc-*-Regeln bleiben dort und
   stylen weiterhin die (jetzt im Drawer lebende) Vergleichskarte.
   Muster: V13-RESEARCH §1 (progressive Disclosure, Drawer/Bottom-Sheet,
   WCAG 44px). Bewegung nur unter prefers-reduced-motion: no-preference.
   ===================================================================== */

/* ── KPI-Leiste im Kopf ───────────────────────────────────────────── */
.sk-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:1px;
  background:var(--line-soft);border:1px solid var(--line-soft);border-radius:14px;
  overflow:hidden;margin-block:14px 12px}
.sk-kpi{display:flex;flex-direction:column;gap:4px;background:var(--bg-card);
  padding:10px 12px;min-width:0}
.sk-kpi .dash-lab{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sk-kpi b{font-size:17px;color:var(--ink)}

/* ── EINE dominante nächste Aktion ────────────────────────────────── */
.sk-action{display:flex;align-items:center;gap:12px;width:100%;min-height:52px;
  padding:10px 14px;border:1px solid var(--line-lime);border-radius:14px;
  background:var(--lime-soft);color:var(--ink);text-align:left;cursor:pointer;
  font:inherit;margin-bottom:6px}
.sk-action svg{width:18px;height:18px;flex:0 0 auto;color:var(--lime)}
.sk-action-txt{display:flex;flex-direction:column;gap:2px;min-width:0}
.sk-action-txt>span:last-child{font-size:14px;line-height:1.4;overflow-wrap:anywhere}

/* ── Plattformvergleich: dichte Zeilen ────────────────────────────── */
.sk-rows{display:flex;flex-direction:column;gap:8px;margin-block:14px}
.sk-row{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;
  width:100%;min-height:56px;padding:10px 14px 10px 17px;border:1px solid var(--line-soft);
  border-radius:14px;background:var(--bg-card);color:var(--ink);text-align:left;
  cursor:pointer;font:inherit;overflow:hidden}
.sk-row::before{content:"";position:absolute;inset:0 auto 0 0;width:3px;
  background:var(--sc-accent,var(--lime))}
.sk-row:hover{border-color:var(--line-strong)}
.sk-row-id{display:flex;align-items:center;gap:10px;flex:1 1 190px;min-width:0}
.sk-row-name{display:flex;flex-direction:column;gap:2px;min-width:0}
.sk-row-name strong{font-size:15px;line-height:1.2}
.sk-row-name .dash-lab{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sk-row .sc-pill{flex:0 0 auto}
.sk-m{display:flex;flex-direction:column;gap:2px;flex:0 0 auto;min-width:72px}
.sk-m b{font-size:15px}
.sk-spark{flex:0 0 90px;display:inline-flex;align-items:center}
.sk-spark .dash-spark{width:90px;height:24px}
/* Die EINE nächste Aktion als zweite Zeile — voll lesbar, kein Tooltip nötig */
.sk-next{flex:1 1 100%;font-size:12.5px;line-height:1.45;color:var(--muted);
  overflow-wrap:anywhere}
.sk-row-err{border-color:color-mix(in srgb,var(--danger) 45%,transparent)}
.sk-next-err{color:var(--danger)}

/* ── Sammelzeile: nie verbundene Kanäle ───────────────────────────── */
.sk-nv{border:1px dashed var(--line);border-radius:14px;background:var(--bg-2);
  margin-top:8px}
.sk-nv-kopf{display:flex;align-items:center;justify-content:space-between;gap:12px;
  width:100%;min-height:52px;padding:10px 14px;background:transparent;border:none;
  color:var(--muted-2);text-align:left;cursor:pointer;font:inherit}
.sk-nv-kopf b{color:var(--ink);font-weight:600}
.sk-nv-txt{min-width:0;font-size:13.5px;line-height:1.4}
.sk-nv-pfeil{flex:0 0 auto}
.sk-nv-list{display:flex;flex-direction:column;border-top:1px solid var(--line-soft)}
.sk-nv-item{display:flex;align-items:center;gap:12px;padding:10px 14px;min-height:56px}
.sk-nv-item+.sk-nv-item{border-top:1px solid var(--line-soft)}
.sk-nv-info{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0;flex:1 1 auto}
.sk-nv-info strong{font-size:14px}
.sk-nv-hint{flex:1 1 100%;margin:0;font-size:12px}
.sk-nv-btn{min-height:44px;flex:0 0 auto}

/* ── Segmente (nutzen .sc-toggle/.sc-tgl aus app.css) ─────────────── */
.sk-seg{margin-top:26px}
.sk-seg .sc-tgl{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sk-panel{margin-top:18px}

/* ── Detail-Drawer: Desktop rechts, mobil Bottom-Sheet ────────────── */
.sk-scrim{position:fixed;inset:0;z-index:71;background:rgba(10,13,11,.6)}
.sk-drawer{position:fixed;top:0;right:0;bottom:0;z-index:72;width:min(460px,100%);
  background:var(--bg-2);border-left:1px solid var(--line);padding:16px;
  overflow-y:auto;overscroll-behavior:contain}
.sk-drawer-kopf{display:flex;align-items:center;justify-content:space-between;
  gap:12px;margin-bottom:12px}
.sk-drawer-kopf strong{font-size:16px}
.sk-close{min-height:44px;padding:0 16px;border:1px solid var(--line);border-radius:999px;
  background:var(--bg-card);color:var(--ink);cursor:pointer;font:inherit;font-size:13px}
.sk-close:hover{border-color:var(--line-strong)}
/* Karte im Drawer: volle Breite, kein Grid-Kontext nötig */
.sk-drawer .sc-insight{width:100%}

/* ── Fokus sichtbar (Tastatur) ────────────────────────────────────── */
.sk-row:focus-visible,.sk-nv-kopf:focus-visible,.sk-action:focus-visible,
.sk-close:focus-visible,.sk-nv-btn:focus-visible{
  outline:2px solid var(--lime);outline-offset:2px}

/* ── Mobil (<641px): Zeilen als kompakte Karten, Drawer als Sheet ─── */
@media(max-width:640px){
  .sk-kpis{grid-template-columns:repeat(2,1fr)}
  /* kompakte Karte: Status, wichtigste Zahl, nächste Aktion */
  .sk-m:not(.sk-m-haupt),.sk-spark{display:none}
  .sk-m-haupt{flex-direction:row;align-items:baseline;gap:6px}
  .sk-row{gap:8px 12px}
  /* Bottom-Sheet mit Safe-Area, schließbar über Knopf + Scrim */
  .sk-drawer{top:auto;left:0;right:0;bottom:0;width:auto;max-height:85dvh;
    border-left:none;border-top:1px solid var(--line);border-radius:18px 18px 0 0;
    padding-bottom:calc(16px + env(safe-area-inset-bottom,0px))}
}

/* ── Bewegung nur, wenn erlaubt (V13-RESEARCH §5.5) ───────────────── */
@media(prefers-reduced-motion:no-preference){
  .sk-row{transition:border-color var(--nex-fast) var(--nex-ease)}
  .sk-drawer{animation:sk-drawer-ein var(--nex-normal) var(--nex-ease-out)}
  @keyframes sk-drawer-ein{from{transform:translateX(16px);opacity:0}}
  @media(max-width:640px){
    .sk-drawer{animation-name:sk-sheet-ein}
  }
  @keyframes sk-sheet-ein{from{transform:translateY(24px);opacity:0}}
}

/* ═══════ V13 · Business-Radar ═══════ */
/* =====================================================================
   _v13-radar.css — Business-Radar (C.views.Radar), NUR .rd-*-Klassen.
   Nur Tokens aus app.css :root. Mobile-first (375/390/430), Touchziele
   mindestens 44px, kein horizontaler Überlauf (min-width:0 + wrap).
   Linien tragen die Hierarchie, nicht Flächen — wie app.css.
   ===================================================================== */

.rd { max-width: var(--maxw-lesen); }

.rd-kopf { margin-bottom: var(--s-4); }
.rd-h { font-size: var(--t-h2); color: var(--laut-1); margin: 0 0 var(--s-1); }
.rd-sub { font-size: var(--t-small); color: var(--laut-3); margin: 0 0 var(--s-3); }

/* Filter: horizontal scrollende Chip-Reihe — der einzige erlaubte
   Querscroll liegt IM Container, nie an der Seite. */
.rd-filter { display: flex; gap: var(--s-2); overflow-x: auto; padding-bottom: var(--s-1); -webkit-overflow-scrolling: touch; }
.rd-chip {
  min-height: 44px; padding: 0 var(--s-3); flex: 0 0 auto;
  background: none; color: var(--laut-2); border: 1px solid var(--line);
  border-radius: var(--r-control); font-size: var(--t-small); cursor: pointer;
}
.rd-chip-aktiv { color: var(--lime); border-color: var(--line-lime); }

.rd-gruppe { margin-bottom: var(--s-5); }
.rd-gruppe-titel {
  font-size: var(--t-small); color: var(--laut-3); text-transform: uppercase;
  letter-spacing: .06em; margin: 0 0 var(--s-2);
  display: flex; align-items: baseline; gap: var(--s-2);
}
.rd-zahl { color: var(--laut-3); font-size: var(--t-micro); }

.rd-liste { list-style: none; margin: 0; padding: 0; }
.rd-eintrag { border-top: 1px solid var(--line-soft); }
.rd-eintrag:last-child { border-bottom: 1px solid var(--line-soft); }

/* Kompakte Reihe: zwei Zeilen (Titel+Frist / Bereich+Disclaimer+Quelle). */
.rd-reihe {
  display: flex; align-items: flex-start; gap: var(--s-3);
  width: 100%; min-height: 44px; padding: var(--s-3) 0;
  background: none; border: 0; text-align: left; cursor: pointer;
  font: inherit; color: inherit;
}
.rd-dot { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; margin-top: 6px; }
.rd-text { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.rd-titel {
  font-size: var(--t-body); color: var(--laut-1); overflow-wrap: anywhere;
  display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden;
}
.rd-frist { color: var(--warn); font-size: var(--t-small); margin-left: var(--s-2); white-space: nowrap; }
.rd-meta {
  font-size: var(--t-micro); color: var(--laut-3); overflow-wrap: anywhere;
  display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden;
}

.rd-detail { padding: 0 0 var(--s-4) calc(8px + var(--s-3)); }
.rd-warum { font-size: var(--t-body); color: var(--laut-2); margin: 0 0 var(--s-2); overflow-wrap: anywhere; }
.rd-fakten, .rd-nachweis { font-size: var(--t-small); color: var(--laut-3); margin: 0 0 var(--s-2); overflow-wrap: anywhere; }

.rd-aktionen { display: flex; flex-wrap: wrap; gap: var(--s-2); margin: var(--s-2) 0; }
.rd-btn {
  min-height: 44px; padding: 0 var(--s-3); display: inline-flex; align-items: center;
  background: none; color: var(--laut-2); border: 1px solid var(--line);
  border-radius: var(--r-sm); font-size: var(--t-small); cursor: pointer;
  text-decoration: none;
}
.rd-btn:disabled { opacity: .45; cursor: default; }
.rd-link { color: var(--lime); border-color: var(--line-lime); }

.rd-frist-setzen { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--s-2); margin-top: var(--s-2); }
.rd-frist-label { display: flex; flex-direction: column; gap: var(--s-1); font-size: var(--t-micro); color: var(--laut-3); min-width: 0; }
.rd-frist-input {
  min-height: 44px; padding: 0 var(--s-2); background: var(--bg-2); color: var(--ink);
  border: 1px solid var(--line); border-radius: var(--r-sm); font-size: var(--t-small);
}

.rd-meldung { font-size: var(--t-small); color: var(--ok); margin: var(--s-2) 0 0; }
.rd-fehler { font-size: var(--t-small); color: var(--danger); margin: 0 0 var(--s-3); }
.rd-leer { font-size: var(--t-body); color: var(--laut-2); }

/* Ab Tablet etwas mehr Luft, sonst unverändert (mobile-first). */
@media (min-width: 768px) {
  .rd-detail { padding-left: calc(8px + var(--s-4)); }
}

/* V15.52 · Research-Radar — redaktionelle Business-Lage mit ruhiger Bewegung. */
.rd{--rd-accent:var(--lime);--rd-ease:cubic-bezier(.23,1,.32,1);max-width:1180px;display:flex;flex-direction:column;gap:var(--s-4)}
.rd-hero{position:relative;isolation:isolate;display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--s-4);align-items:center;min-height:190px;padding:clamp(22px,4vw,46px);overflow:hidden;border:1px solid rgba(184,232,52,.2);border-radius:26px 8px 26px 8px;background:radial-gradient(circle at 15% 25%,rgba(184,232,52,.11),transparent 34%),linear-gradient(135deg,rgba(255,255,255,.035),rgba(255,255,255,.012));box-shadow:inset 0 1px rgba(255,255,255,.06),0 24px 70px rgba(1,8,5,.22)}
.rd-hero::after{content:"";position:absolute;inset:0;z-index:-1;opacity:.16;background-image:radial-gradient(circle at 1px 1px,currentColor 1px,transparent 0);background-size:24px 24px;mask-image:linear-gradient(90deg,#000,transparent 68%)}
.rd-kopf{margin:0;min-width:0}.rd-kicker{display:block;margin-bottom:8px;color:var(--lime);font-size:var(--t-micro);font-weight:700;letter-spacing:.13em;text-transform:uppercase}.rd-h{font-family:var(--display);font-size:clamp(2rem,5vw,4rem);line-height:.92;letter-spacing:-.045em;text-wrap:balance}.rd-sub{max-width:66ch;margin:14px 0 0;font-size:clamp(.86rem,1.5vw,1rem);line-height:1.55;text-wrap:pretty}
.rd-orbit{position:relative;display:grid;place-items:center;width:88px;height:88px;color:var(--lime);filter:drop-shadow(0 16px 22px rgba(0,0,0,.35))}.rd-orbit-svg{width:58px;height:58px;z-index:2}.rd-svg-sweep{transform-origin:24px 24px;animation:rd-sweep 4.8s linear infinite}.rd-orbit-ring{position:absolute;border:1px solid rgba(184,232,52,.3);border-radius:50%;will-change:transform,opacity}.rd-orbit-ring-a{inset:4px;animation:rd-orbit 8s linear infinite}.rd-orbit-ring-b{inset:15px;border-style:dashed;animation:rd-orbit 5s linear infinite reverse}.rd-orbit-ring::after{content:"";position:absolute;top:7px;right:8px;width:6px;height:6px;border-radius:50%;background:var(--lime);box-shadow:0 0 14px rgba(184,232,52,.9)}
.rd-refresh{min-height:48px;display:inline-flex;align-items:center;gap:9px;padding:0 16px;border:1px solid var(--line-lime);border-radius:10px 3px 10px 3px;background:rgba(184,232,52,.08);color:var(--lime);font:600 var(--t-small)/1 var(--sans);cursor:pointer;transition:transform 180ms var(--rd-ease),background 180ms ease}.rd-refresh:hover{transform:translateY(-2px);background:rgba(184,232,52,.14)}.rd-refresh:active{transform:scale(.98)}.rd-refresh:disabled{opacity:.6;cursor:wait}.rd-refresh-svg{width:21px;height:21px}.rd-refresh:not(:disabled):hover .rd-svg-sweep{animation-duration:1.3s}
.rd-lage{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.rd-lage article{position:relative;min-width:0;padding:16px 17px 18px;border-top:1px solid var(--line);background:linear-gradient(180deg,rgba(255,255,255,.025),transparent)}.rd-lage article::before{content:"";position:absolute;left:0;top:-1px;width:34%;height:1px;background:var(--lime);opacity:.45}.rd-lage span,.rd-lage small{display:block;color:var(--laut-3);font-size:var(--t-micro)}.rd-lage strong{display:block;margin:8px 0 3px;color:var(--laut-1);font-family:var(--display);font-size:clamp(1.55rem,3vw,2.25rem);font-variant-numeric:tabular-nums;line-height:1}.rd-lage-kritisch::before{background:var(--danger)!important;opacity:1!important}.rd-lage-kritisch strong{color:var(--danger)}
.rd-steuerung{display:flex;flex-direction:column;gap:10px;padding:4px 0 8px}.rd-filterblock>span{display:block;margin:0 0 7px;color:var(--laut-3);font-size:var(--t-micro);letter-spacing:.08em;text-transform:uppercase}.rd-filter{padding:0}.rd-chip{gap:8px;display:inline-flex;align-items:center;border-radius:9px 3px 9px 3px;transition:transform 160ms var(--rd-ease),background 160ms ease,color 160ms ease}.rd-chip:hover{transform:translateY(-1px);background:var(--bg-hover)}.rd-chip:active{transform:scale(.98)}.rd-chip-aktiv{background:rgba(184,232,52,.08);box-shadow:inset 0 0 0 1px rgba(184,232,52,.08)}.rd-chip-svg{width:18px;height:18px}.rd-systeme-details{margin-top:2px}.rd-systeme-details summary{width:max-content;max-width:100%;color:var(--laut-3);font-size:var(--t-small);cursor:pointer}.rd-systeme-details[open] summary{margin-bottom:10px;color:var(--laut-2)}.rd-system-chip{min-height:38px;padding:0 11px}.rd-meldung-global{padding:12px 14px;border-left:2px solid var(--lime);background:rgba(184,232,52,.06);border-radius:0 8px 8px 0}
.rd-quellenmonitor{overflow:hidden;border:1px solid var(--line-soft);border-radius:14px 5px 14px 5px;background:rgba(255,255,255,.014)}.rd-quellenmonitor summary{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:52px;padding:10px 14px;cursor:pointer;list-style:none;color:var(--laut-2);font-size:var(--t-small)}.rd-quellenmonitor summary::-webkit-details-marker{display:none}.rd-quellenmonitor summary strong{color:var(--ok);font-size:var(--t-micro);font-variant-numeric:tabular-nums}.rd-quellenmonitor-icon{position:relative;display:grid;place-items:center;width:26px;height:26px;color:var(--lime)}.rd-source-svg{width:23px;height:23px}.rd-quellenmonitor-warn{border-color:rgba(245,179,66,.3)}.rd-quellenmonitor-warn summary strong{color:var(--warn)}.rd-quellenmonitor-warn .rd-quellenmonitor-icon::after{content:"";position:absolute;inset:-3px;border:1px solid rgba(245,179,66,.55);border-radius:50%;animation:rd-signal 2.6s var(--rd-ease) infinite}.rd-quellenliste{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;margin:0;padding:1px;background:var(--line-soft)}.rd-quellenliste li{display:grid;grid-template-columns:10px minmax(0,1fr);gap:2px 9px;align-items:center;min-width:0;padding:11px 13px;background:var(--bg-1)}.rd-quellenpunkt{grid-row:1/3;width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 10px rgba(83,214,134,.35)}.rd-quellenname{overflow:hidden;color:var(--laut-2);font-size:var(--t-small);font-weight:600;text-overflow:ellipsis;white-space:nowrap}.rd-quellenstand{color:var(--laut-3);font-size:var(--t-micro);line-height:1.35}.rd-quelle-fehler .rd-quellenpunkt{background:var(--warn);box-shadow:0 0 12px rgba(245,179,66,.45);animation:rd-source-alert 1.8s ease-in-out infinite}.rd-quelle-fehler .rd-quellenstand{color:var(--warn)}
.rd-gruppe{margin:0}.rd-gruppe-titel{margin:10px 0 12px;font-size:.72rem;letter-spacing:.12em}.rd-gruppe-titel:first-letter{color:var(--lime)}.rd-zahl{display:inline-grid;place-items:center;min-width:23px;height:23px;padding:0 6px;border:1px solid var(--line);border-radius:6px;font-variant-numeric:tabular-nums}.rd-liste{display:flex;flex-direction:column;gap:8px}.rd-eintrag{overflow:hidden;border:1px solid var(--line-soft)!important;border-radius:14px 5px 14px 5px;background:linear-gradient(110deg,rgba(255,255,255,.025),rgba(255,255,255,.008));transition:transform 220ms var(--rd-ease),border-color 220ms ease,background 220ms ease}.rd-eintrag:hover{transform:translateY(-2px);border-color:var(--line)!important;background:linear-gradient(110deg,rgba(255,255,255,.045),rgba(255,255,255,.012))}.rd-eintrag-wichtig{border-color:rgba(184,232,52,.23)!important}.rd-reihe{display:grid;grid-template-columns:48px minmax(0,1fr) 26px;align-items:start;gap:14px;min-height:86px;padding:16px 17px}.rd-reihe:focus-visible,.rd-btn:focus-visible,.rd-chip:focus-visible,.rd-refresh:focus-visible{outline:2px solid var(--lime);outline-offset:3px}.rd-item-icon{position:relative;display:grid;place-items:center;width:44px;height:44px;border:1px solid var(--line);border-radius:12px 4px 12px 4px;background:rgba(255,255,255,.025);color:var(--laut-2)}.rd-item-svg{width:27px;height:27px}.rd-item-icon-ki,.rd-item-icon-recht{color:var(--lime);border-color:rgba(184,232,52,.24)}.rd-signal-ring{position:absolute;inset:-5px;border:1px solid rgba(184,232,52,.45);border-radius:15px 5px 15px 5px;animation:rd-signal 2.6s var(--rd-ease) infinite}.rd-text{gap:5px}.rd-titelzeile{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}.rd-titel{display:block;flex:1 1 320px;font-family:var(--display);font-size:clamp(1rem,2vw,1.17rem);font-weight:650;line-height:1.22;letter-spacing:-.015em;-webkit-line-clamp:2;text-wrap:pretty}.rd-thema-badge{flex:none;padding:4px 7px;border:1px solid var(--line);border-radius:5px;color:var(--laut-3);font-size:.65rem;letter-spacing:.06em;text-transform:uppercase}.rd-frist{padding:4px 7px;border:1px solid rgba(245,179,66,.28);border-radius:5px;margin:0;font-size:.68rem}.rd-kurzrelevanz{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--laut-2);font-size:var(--t-small);line-height:1.42;text-wrap:pretty}.rd-meta{-webkit-line-clamp:2;line-height:1.35}.rd-chevron{display:grid;place-items:center;width:26px;height:26px;margin-top:7px;border:1px solid var(--line);border-radius:8px 3px 8px 3px;color:var(--laut-3);font-size:1rem;transition:transform 180ms var(--rd-ease),color 180ms ease}.rd-reihe:hover .rd-chevron{transform:rotate(90deg);color:var(--lime)}
.rd-detail{padding:0 17px 22px 79px;animation:rd-detail-in 240ms var(--rd-ease) both}.rd-research-kopf{display:flex;justify-content:space-between;gap:12px;margin:0 0 12px;padding-top:14px;border-top:1px solid var(--line-soft);color:var(--laut-3);font-size:var(--t-micro);letter-spacing:.08em;text-transform:uppercase}.rd-research-kopf strong{color:var(--lime)}.rd-research-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:13px}.rd-research-grid article{min-width:0;padding:13px 14px;border-left:1px solid var(--line);background:rgba(255,255,255,.018)}.rd-research-grid article>span{display:block;margin-bottom:6px;color:var(--laut-3);font-size:var(--t-micro);letter-spacing:.06em;text-transform:uppercase}.rd-research-grid p{margin:0;color:var(--laut-2);font-size:var(--t-small);line-height:1.5;text-wrap:pretty}.rd-research-next{border-left-color:var(--line-lime)!important}.rd-fakten,.rd-nachweis{line-height:1.5}.rd-nachweis strong{color:var(--laut-2)}.rd-btn{transition:transform 160ms var(--rd-ease),border-color 160ms ease,background 160ms ease}.rd-btn:hover{transform:translateY(-1px);border-color:var(--line-lime);background:rgba(184,232,52,.06)}.rd-btn:active{transform:scale(.98)}.rd-leer{padding:28px;border:1px dashed var(--line);border-radius:14px;text-align:center}
@keyframes rd-sweep{to{transform:rotate(360deg)}}@keyframes rd-orbit{to{transform:rotate(360deg)}}@keyframes rd-signal{0%,100%{transform:scale(.92);opacity:.2}50%{transform:scale(1.06);opacity:.7}}@keyframes rd-source-alert{0%,100%{transform:scale(.72);opacity:.55}50%{transform:scale(1.2);opacity:1}}@keyframes rd-detail-in{from{transform:translateY(-8px);opacity:0}}
@media(max-width:820px){.rd-hero{grid-template-columns:70px minmax(0,1fr);min-height:0}.rd-orbit{width:64px;height:64px}.rd-orbit-svg{width:46px;height:46px}.rd-refresh{grid-column:1/-1;width:100%;justify-content:center}.rd-lage{grid-template-columns:repeat(2,minmax(0,1fr))}.rd-research-grid,.rd-quellenliste{grid-template-columns:1fr}}
@media(max-width:560px){.rd{gap:14px}.rd-hero{grid-template-columns:1fr;padding:22px;border-radius:20px 6px 20px 6px}.rd-orbit{position:absolute;right:12px;top:12px;opacity:.46}.rd-kopf{padding-right:54px}.rd-h{font-size:2.35rem}.rd-sub{font-size:.84rem}.rd-lage{gap:4px}.rd-lage article{padding:13px 12px 15px}.rd-lage strong{font-size:1.55rem}.rd-quellenmonitor summary{grid-template-columns:26px minmax(0,1fr);gap:8px}.rd-quellenmonitor summary strong{grid-column:2}.rd-reihe{grid-template-columns:40px minmax(0,1fr) 24px;gap:10px;padding:14px 12px}.rd-item-icon{width:38px;height:38px}.rd-item-svg{width:23px;height:23px}.rd-detail{padding:0 12px 18px}.rd-research-kopf{flex-direction:column;gap:4px}.rd-aktionen{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.rd-btn{justify-content:center;text-align:center;padding:8px}.rd-frist-setzen{align-items:stretch}.rd-frist-label{width:100%}}
@media(prefers-reduced-motion:reduce){.rd *,.rd *::before,.rd *::after{animation:none!important;transition-duration:.01ms!important}.rd-eintrag:hover,.rd-refresh:hover,.rd-chip:hover,.rd-btn:hover{transform:none}}

/* ═══════ V13 · NEX Operating Agent ═══════ */
/* =====================================================================
   V13 NEX — CSS-Sidecar. NUR .nx-*-Klassen, NUR Tokens aus app.css :root.
   Mobile-first: Basisregeln gelten fürs Telefon, ab 861px kommt Desktop.
   Bewegung nur transform/opacity (Compositor); prefers-reduced-motion
   ERSETZT Animation durch statisches Feedback (Farbe + Text), löscht es
   nicht (Research §1 Nr. 10).
   ===================================================================== */

/* ── Fläche ─────────────────────────────────────────────────────────── */
.nx-flaeche{display:flex;flex-direction:column;gap:var(--s-3,12px);
  padding:var(--s-3,12px);
  padding-bottom:calc(var(--s-3,12px) + env(safe-area-inset-bottom,0px));
  color:var(--ink);max-width:860px}

.nx-kopf{display:flex;align-items:center;gap:var(--s-3,12px)}
.nx-kopf-text{display:flex;flex-direction:column;min-width:0}
.nx-titel{font-family:var(--display);font-size:1.4rem;line-height:1;margin:0;letter-spacing:.02em}
/* KI-Offenlegung: sichtbarer Text ab dem ersten Rendern — Art. 50. */
.nx-offenlegung{margin:2px 0 0;font-size:.8rem;color:var(--muted)}
.nx-status{margin-left:auto;font-size:.85rem;color:var(--muted);white-space:nowrap}
.nx-status-hoert_zu,.nx-status-fuehrt_aus{color:var(--lime)}
.nx-status-erfolgreich{color:var(--ok)}
.nx-status-wartet_freigabe{color:var(--warn)}
.nx-status-fehler{color:var(--danger)}
.nx-status-eingeschraenkt{color:var(--warn)}

.nx-kontext{margin:0;font-size:.8rem;color:var(--muted-2)}

/* ── Orb: räumliche Nex-Präsenz — kein Canvas, kein Fremd-Asset ─────── */
.nx-orb{--nx-size:52px;position:relative;display:inline-grid;place-items:center;
  width:var(--nx-size);height:var(--nx-size);flex:none;isolation:isolate;
  perspective:180px;filter:drop-shadow(0 10px 12px rgba(0,0,0,.34))}
.nx-orb::before{content:"";position:absolute;inset:12%;border-radius:50%;
  background:radial-gradient(circle,rgba(184,232,52,.17),rgba(184,232,52,.04) 48%,transparent 72%);
  filter:blur(7px);opacity:.72;transform:translateZ(-10px)}
.nx-orb-welle,.nx-orb-stage{grid-area:1/1;border-radius:50%;will-change:transform,opacity}
.nx-orb-welle{width:82%;height:82%;border:1px solid var(--line-lime);opacity:0;
  transition:transform var(--nex-fast) var(--nex-ease),opacity var(--nex-fast) var(--nex-ease)}
.nx-orb-stage{position:relative;width:88%;height:88%;transform-style:preserve-3d;
  animation:nx-schweben 5.8s var(--nex-ease) infinite}
.nx-orb-ring{position:absolute;inset:25%;border-radius:50%;border:1px solid rgba(184,232,52,.44);
  box-shadow:inset 0 0 8px rgba(184,232,52,.14),0 0 11px rgba(184,232,52,.16);
  transition:border-color var(--nex-state) var(--nex-ease);transform:translateZ(2px)}
.nx-orb-kern{position:absolute;inset:34%;border-radius:50%;overflow:hidden;
  background:radial-gradient(circle at 35% 25%,#eefdbf 0 3%,#b8e834 12%,#314b17 42%,#0a0f0b 76%);
  border:1px solid rgba(228,255,160,.44);
  box-shadow:inset -4px -6px 10px rgba(0,0,0,.62),inset 3px 3px 6px rgba(238,253,191,.14),
    0 0 15px rgba(184,232,52,.42),0 5px 10px rgba(0,0,0,.42);
  transition:background var(--nex-state) var(--nex-ease),transform var(--nex-state) var(--nex-ease);
  transform:translateZ(10px)}
.nx-orb-glanz{position:absolute;width:36%;height:20%;left:22%;top:15%;border-radius:50%;
  background:rgba(255,255,255,.46);filter:blur(1.2px);transform:rotate(-18deg)}
.nx-orbit-plane{position:absolute;inset:11%;border-radius:50%;border:1px solid rgba(184,232,52,.34);
  transform-style:preserve-3d;will-change:transform}
.nx-orbit-plane-a{transform:rotateX(64deg) rotateZ(12deg);animation:nx-orbit-a 8s linear infinite}
.nx-orbit-plane-b{inset:17%;border-color:rgba(184,232,52,.24);
  transform:rotateY(68deg) rotateZ(-28deg);animation:nx-orbit-b 11s linear infinite reverse}
.nx-orbit-plane-c{inset:4%;border-color:rgba(184,232,52,.14);
  transform:rotateX(72deg) rotateY(22deg);animation:nx-orbit-c 15s linear infinite}
.nx-orbit-node{position:absolute;width:5px;height:5px;border-radius:50%;top:-3px;left:50%;
  background:#e8ff9a;box-shadow:0 0 8px rgba(184,232,52,.9),0 0 2px #fff;
  transform:translateX(-50%) translateZ(4px)}
.nx-orbit-node-b{width:4px;height:4px;top:50%;left:auto;right:-2px}
.nx-orbit-node-c{width:3px;height:3px;top:auto;bottom:-2px;left:31%}
@keyframes nx-schweben{0%,100%{translate:0 0}25%{translate:1px -1.5px}50%{translate:-0.5px -2.5px}75%{translate:-1px -0.5px}}
@keyframes nx-orbit-a{to{transform:rotateX(64deg) rotateZ(372deg)}}
@keyframes nx-orbit-b{to{transform:rotateY(68deg) rotateZ(332deg)}}
@keyframes nx-orbit-c{to{transform:rotateX(72deg) rotateY(22deg) rotateZ(360deg)}}

/* Jeder Zustand: eigene Farbe + eigene Bewegung. */
.nx-orb-bereit .nx-orb-kern{animation:nx-atmen 4s var(--nex-ease) infinite}
.nx-orb-hoert_zu .nx-orb-ring{border-color:var(--lime-deep)}
.nx-orb-verarbeitet .nx-orbit-plane-a,.nx-orb-plant .nx-orbit-plane-a{animation-duration:1.8s}
.nx-orb-verarbeitet .nx-orbit-plane-b,.nx-orb-plant .nx-orbit-plane-b{animation-duration:2.4s}
.nx-orb-verarbeitet .nx-orb-ring,.nx-orb-plant .nx-orb-ring{border-style:dashed}
.nx-orb-plant .nx-orb-kern{background:var(--info)}
.nx-orb-fuehrt_aus .nx-orb-kern{animation:nx-pochen .9s var(--nex-ease) infinite}
.nx-orb-wartet_freigabe .nx-orb-ring{border-color:var(--warn)}
.nx-orb-wartet_freigabe .nx-orb-kern{background:var(--warn)}
.nx-orb-erfolgreich .nx-orb-ring{border-color:var(--ok)}
.nx-orb-erfolgreich .nx-orb-kern{background:var(--ok)}
.nx-orb-eingeschraenkt .nx-orb-ring{border-color:var(--warn);border-style:dotted}
.nx-orb-fehler .nx-orb-ring{border-color:var(--danger)}
.nx-orb-fehler .nx-orb-kern{background:var(--danger)}

@keyframes nx-atmen{0%,100%{transform:translateZ(10px) scale(1)}50%{transform:translateZ(12px) scale(1.12)}}
@keyframes nx-drehen{to{transform:rotate(360deg)}}
@keyframes nx-pochen{0%,100%{transform:translateZ(10px) scale(1)}50%{transform:translateZ(13px) scale(1.18)}}
/* ═══════════════ LIVING ORBIT ═══════════════
   Ambiente Präsenz, kein Spinner. Vier Bausteine:
   1. Idle-Drift  — zwei gestapelte Driften mit teilerfremden Dauern (19s/23s).
      Der sichtbare Zyklus ist damit ~7 min statt 19 s: keine erkennbare
      Loop-Kante, obwohl beide Keyframes für sich sauber schließen.
   2. Micro-Flyout — der ganze Orbit löst sich gelegentlich weiter heraus.
      Nur im frei stehenden .dhs-orb-Kontext; .vo-presence hat overflow:hidden
      und würde die Bewegung abschneiden.
   3. Cursor-Parallaxe — --nx-cx/--nx-cy werden von app-nex.js gesetzt,
      ausschließlich auf Geräten mit echtem Zeiger.
   4. Satelliten — reagieren auf den Zustand: außen bei Arbeit, eingesogen
      beim Ergebnis.
   Bewegungsgrößen sind über --nx-drift* steuerbar, damit die großen
   Orb-Varianten (vo-presence, Drawer) eigene Amplituden bekommen können. */

.nx-orb{
  /* Amplitude proportional zur Orb-Größe, nicht absolut: derselbe Orb wird an
     sechs Stellen zwischen 52px (Ecke) und 218px (Präsenzbühne) gerendert.
     Ein fester Pixelwert wäre in der Ecke ein Zappeln und auf der Bühne kaum
     sichtbar. Bei der Drawer-Größe (~104px) ergibt das ~11/9px. */
  --nx-drift-x:calc(var(--nx-size) * .052); --nx-drift-y:calc(var(--nx-size) * .04);
  --nx-fly:0px;                          /* Micro-Flyout-Weg, §12 */
  --nx-cx:0px; --nx-cy:0px;              /* Cursor-Parallaxe, §13 */
  translate:var(--nx-cx) var(--nx-cy);
  animation:nx-drift-a 19s var(--nex-ease,ease-in-out) infinite;
}
.nx-orb-stage{animation:nx-schweben 5.8s var(--nex-ease) infinite,nx-drift-b 23s ease-in-out infinite}

/* Unregelmäßige Wegpunkte — bewusst keine Symmetrie, damit die Bahn
   nicht als Ellipse gelesen wird. Start = Ende, also kein Sprung. */
@keyframes nx-drift-a{
  0%,100%{translate:calc(var(--nx-cx)) calc(var(--nx-cy))}
  17%{translate:calc(var(--nx-cx) + var(--nx-drift-x) * .55) calc(var(--nx-cy) - var(--nx-drift-y) * .8)}
  34%{translate:calc(var(--nx-cx) + var(--nx-drift-x)) calc(var(--nx-cy) - var(--nx-drift-y) * .25)}
  52%{translate:calc(var(--nx-cx) + var(--nx-drift-x) * .2) calc(var(--nx-cy) + var(--nx-drift-y) * .7)}
  71%{translate:calc(var(--nx-cx) - var(--nx-drift-x) * .7) calc(var(--nx-cy) + var(--nx-drift-y) * .3)}
  88%{translate:calc(var(--nx-cx) - var(--nx-drift-x) * .35) calc(var(--nx-cy) - var(--nx-drift-y) * .55)}
}
@keyframes nx-drift-b{
  0%,100%{translate:0 0}
  23%{translate:1.4px .8px}
  47%{translate:-.8px 1.6px}
  68%{translate:-1.6px -.6px}
  85%{translate:.6px -1.4px}
}

/* §12 Micro-Flyout: pseudozufällig per JS ausgelöst (Klasse nx-orb-flug),
   nicht periodisch. Nur wo nichts clippt. */
.dhs-orb .nx-orb.nx-orb-flug{animation:nx-drift-a 19s var(--nex-ease,ease-in-out) infinite,nx-ausflug 2.8s var(--nex-ease-out,ease-out)}
@keyframes nx-ausflug{
  0%,100%{scale:1;filter:drop-shadow(0 10px 12px rgba(0,0,0,.34))}
  38%{scale:1.12;filter:drop-shadow(0 16px 22px rgba(0,0,0,.42))}
}
.dhs-orb .nx-orb.nx-orb-flug .nx-orb-stage{translate:var(--nx-fly-x,0) var(--nx-fly-y,0);transition:translate 1.4s var(--nex-ease-out,ease-out)}

/* §14 Satelliten — zwei zusätzliche Energieknoten, unabhängig von den
   drei Bahn-Knoten. Ruhig im Leerlauf, außen bei Arbeit, eingesogen beim
   Ergebnis. Reines CSS auf zwei Spans. */
.nx-orb-sat{position:absolute;top:50%;left:50%;width:3px;height:3px;border-radius:50%;
  background:#e8ff9a;box-shadow:0 0 6px rgba(184,232,52,.85);
  --nx-bahn:calc(var(--nx-size) * .19);
  transform:translate(-50%,-50%) rotate(var(--nx-sat-w,0deg)) translateX(var(--nx-bahn)) translateZ(6px);
  transition:opacity var(--nex-state,.55s) var(--nex-ease)}
.nx-orb-sat-1{animation:nx-sat-kreis 17s linear infinite}
.nx-orb-sat-2{width:2px;height:2px;--nx-bahn:calc(var(--nx-size) * .25);animation:nx-sat-kreis 25s linear infinite reverse;opacity:.75}
@keyframes nx-sat-kreis{
  from{transform:translate(-50%,-50%) rotate(0deg) translateX(var(--nx-bahn)) translateZ(6px)}
  to{transform:translate(-50%,-50%) rotate(360deg) translateX(var(--nx-bahn)) translateZ(6px)}
}

/* ── §15-20 State Choreography: je Zustand eine eigene Bewegungssprache ── */

/* bereit — ruhiges Atmen, sanftes Glimmen, volle Drift */
.nx-orb-bereit::before{animation:nx-glimmen 6s ease-in-out infinite}

/* hoert_zu — §16: Orbit zieht sich zusammen, Bewegung wird fokussiert,
   Satelliten wandern nach innen. Drift gedrosselt: Aufmerksamkeit. */
.nx-orb-hoert_zu{--nx-drift-x:calc(var(--nx-size) * .045);--nx-drift-y:calc(var(--nx-size) * .035);animation-duration:26s}
.nx-orb-hoert_zu .nx-orb-stage{scale:.955;transition:scale var(--nex-state) var(--nex-ease)}
.nx-orb-hoert_zu .nx-orb-sat-1{--nx-bahn:calc(var(--nx-size) * .135)}
.nx-orb-hoert_zu .nx-orb-sat-2{--nx-bahn:calc(var(--nx-size) * .17)}
.nx-orb-hoert_zu .nx-orbit-plane-a{animation-duration:11s}
.nx-orb-hoert_zu .nx-orbit-plane-b{animation-duration:15s}

/* verarbeitet/plant — §17: Satelliten lösen sich nach außen, Ringe bekommen
   kontrollierte Energie, der Kern bleibt ruhig. Kein Spinner-Look. */
.nx-orb-verarbeitet .nx-orb-sat-1,.nx-orb-plant .nx-orb-sat-1{--nx-bahn:calc(var(--nx-size) * .28);animation-duration:6s}
.nx-orb-verarbeitet .nx-orb-sat-2,.nx-orb-plant .nx-orb-sat-2{--nx-bahn:calc(var(--nx-size) * .33);animation-duration:8s;opacity:1}
.nx-orb-verarbeitet .nx-orb-ring,.nx-orb-plant .nx-orb-ring{animation-duration:9s}
.nx-orb-verarbeitet,.nx-orb-plant{--nx-drift-x:calc(var(--nx-size) * .055);--nx-drift-y:calc(var(--nx-size) * .045)}

/* fuehrt_aus — §18: Kern-Leuchtkraft und Halo folgen dem echten Ausgabepegel
   (Inline-Style aus pegelSkala), dazu leichte Bahn-Modulation. */
.nx-orb-fuehrt_aus .nx-orb-sat-1{--nx-bahn:calc(var(--nx-size) * .23);animation-duration:9s}
.nx-orb-fuehrt_aus .nx-orb-sat-2{--nx-bahn:calc(var(--nx-size) * .29);animation-duration:13s}
.nx-orb-fuehrt_aus::before{animation:nx-glimmen 1.6s ease-in-out infinite}

/* §19 Unterbrechung — Bewegung stoppt sofort, kurzer Rückstoß, dann Zuhören. */
.nx-orb-unterbrochen .nx-orb-kern{animation:nx-rueckstoss .34s var(--nex-ease-out,ease-out)}
.nx-orb-unterbrochen .nx-orb-sat-1,.nx-orb-unterbrochen .nx-orb-sat-2{animation-play-state:paused}
@keyframes nx-rueckstoss{
  0%{transform:translateZ(10px) scale(1.14)}
  45%{transform:translateZ(6px) scale(.9)}
  100%{transform:translateZ(10px) scale(1)}
}

/* erfolgreich — Satelliten werden eingesogen */
.nx-orb-erfolgreich .nx-orb-sat-1{--nx-bahn:calc(var(--nx-size) * .105)}
.nx-orb-erfolgreich .nx-orb-sat-2{--nx-bahn:calc(var(--nx-size) * .135);opacity:.4}

/* wartet_freigabe — angehaltene Erwartung: Drift fast still, ein Satellit bleibt */
.nx-orb-wartet_freigabe{--nx-drift-x:calc(var(--nx-size) * .03);--nx-drift-y:calc(var(--nx-size) * .025)}
.nx-orb-wartet_freigabe .nx-orb-sat-2{opacity:0}
.nx-orb-wartet_freigabe .nx-orb-sat-1{--nx-bahn:calc(var(--nx-size) * .21);animation-duration:11s}

/* §20 proaktiv — ein bleibender Satellit + sanftes Halo-Ereignis, kein Blinken */
.nx-orb-proaktiv .nx-orb-sat-1{--nx-bahn:calc(var(--nx-size) * .29);animation-duration:13s;
  width:4px;height:4px;box-shadow:0 0 10px rgba(184,232,52,.95)}
.nx-orb-proaktiv::before{animation:nx-halo-ereignis 7s var(--nex-ease) infinite}
@keyframes nx-halo-ereignis{0%,72%,100%{opacity:.72;scale:1}84%{opacity:.95;scale:1.1}}

/* eingeschraenkt/fehler — Leben zieht sich zurück, aber erstirbt nicht */
.nx-orb-eingeschraenkt{--nx-drift-x:calc(var(--nx-size) * .045);--nx-drift-y:calc(var(--nx-size) * .035)}
.nx-orb-fehler{--nx-drift-x:calc(var(--nx-size) * .025);--nx-drift-y:calc(var(--nx-size) * .02)}
.nx-orb-fehler .nx-orb-sat-1,.nx-orb-fehler .nx-orb-sat-2{opacity:.25}

/* Bahn-Knoten: seltenes Aufflackern (bestehend) */
@keyframes nx-flyout{0%,86%,100%{scale:1;opacity:1}91%{scale:2.4;opacity:.6}}
@keyframes nx-glimmen{0%,100%{opacity:.72}50%{opacity:.94}}
.nx-orbit-node-a{animation:nx-flyout 13s ease-in-out infinite}
.nx-orbit-node-b{animation:nx-flyout 9.5s ease-in-out 2.3s infinite}
.nx-orbit-node-c{animation:nx-flyout 16s ease-in-out 5.7s infinite}
@keyframes nx-ring-spin{to{rotate:360deg}}
.nx-orb-ring{rotate:0deg;animation:nx-ring-spin 28s linear infinite}

/* §13 Cursor-Parallaxe nur bei echtem Zeiger — auf Touch komplett aus.
   Der Wert kommt aus app-nex.js und ist dort auf wenige Pixel begrenzt. */
@media(hover:hover) and (pointer:fine){
  .nx-orb{transition:translate .5s var(--nex-ease-out,ease-out)}
  .nx-orb-kern{will-change:transform}
}
@media not all and (hover:hover){
  .nx-orb{--nx-cx:0px !important;--nx-cy:0px !important}
}

/* §21/§23 Reduced Motion: alles Ambiente aus, Zustandsfarben bleiben lesbar.
   translate/scale sind eigenständige Properties und werden vom globalen
   transform:none nicht erfasst — deshalb hier ausdrücklich. */
@media(prefers-reduced-motion:reduce){
  .nx-orb,.nx-orb-stage,.nx-orbit-node-a,.nx-orbit-node-b,.nx-orbit-node-c,
  .nx-orb-sat-1,.nx-orb-sat-2,.nx-orb-ring,
  .nx-orb-bereit::before,.nx-orb-fuehrt_aus::before,.nx-orb-proaktiv::before{
    animation:none !important}
  .nx-orb,.nx-orb-stage{translate:none !important}
  .nx-orb-hoert_zu .nx-orb-stage{scale:none !important}
  .dhs-orb .nx-orb.nx-orb-flug .nx-orb-stage{translate:none !important;transition:none !important}
}

/* ── Eingabe + Voice ────────────────────────────────────────────────── */
.nx-form{display:flex;gap:var(--s-2,8px);flex-wrap:wrap}
.nx-feld{flex:1 1 180px;min-height:44px}
/* WCAG 2.2: 44px Standard-Zielgröße (24px hartes Minimum). */
.nx-btn{min-height:44px;min-width:44px;padding:10px 14px;border-radius:var(--r-sm)}
.nx-mic{white-space:nowrap}
.nx-stop{border-color:var(--danger);color:var(--danger)}
.nx-voice-hinweis{margin:0}
.nx-eingabe-zeile{display:flex;gap:var(--s-2,8px);flex:1 1 180px;align-items:center}
.nx-eingabe-zeile .nx-feld{flex:1 1 0;min-width:0}
.nx-clip{font-size:.85rem;padding:8px 12px;background:none;border:1px solid var(--line-soft);white-space:nowrap}
/* Das Datei-Feld wird ausschliesslich per Skript ueber die sichtbare
   Anhang-Schaltflaeche geoeffnet; display:none haelt es aus der Tab-Reihe
   und aus der Tap-Ziel-Messung heraus (1x1 px war ein unsichtbares Ziel). */
.nx-file-hidden{display:none}
.nx-upload-status{margin:0;color:var(--muted);font-size:.85rem;font-style:italic}
.nx-anhaenge{display:flex;gap:var(--s-2,8px);flex-wrap:wrap}
.nx-anhang{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;
  border:1px solid var(--line-soft);border-radius:var(--r-sm);background:var(--bg-card);font-size:.85rem}
.nx-anhang-thumb{width:32px;height:32px;object-fit:cover;border-radius:3px}
.nx-anhang-name{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nx-anhang-x{background:none;border:none;color:var(--muted);cursor:pointer;padding:0 2px;font-size:1rem;line-height:1}
.nx-transkript{margin:0;color:var(--muted);font-style:italic}
.nx-hinweis{margin:0;color:var(--warn);font-size:.9rem}
.nx-optionen{display:flex;gap:var(--s-2,8px);flex-wrap:wrap}

.nx-schnell{display:flex;gap:var(--s-2,8px);flex-wrap:wrap}
.nx-schnell-btn{font-size:.85rem;text-align:left}
.nx-proaktiv{display:flex;flex-direction:column;gap:var(--s-2,8px)}
.nx-proaktiv-kopf{display:flex;align-items:center;gap:var(--s-2,8px)}
.nx-proaktiv-kopf h2{font-size:.95rem;margin:0}
.nx-signal{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--s-3,12px);
  align-items:center;padding:var(--s-3,12px);border:1px solid var(--line-soft);
  border-left:3px solid var(--warn);border-radius:var(--r-sm);background:var(--bg-card)}
.nx-signal-critical{border-left-color:var(--danger)}
.nx-signal-text{display:flex;flex-direction:column;min-width:0;gap:2px}
.nx-signal-text span,.nx-signal-text small{color:var(--muted);overflow-wrap:anywhere}
.nx-signal-aktionen{display:flex;gap:var(--s-2,8px);flex-wrap:wrap;justify-content:flex-end}
@media(max-width:700px){.nx-signal{grid-template-columns:1fr}.nx-signal-aktionen{justify-content:flex-start}}

/* ── Action Cards: Log-Eintrag in UI-Form ───────────────────────────── */
.nx-verlauf{display:flex;flex-direction:column;gap:var(--s-2,8px);
  max-height:50vh;overflow-y:auto;-webkit-overflow-scrolling:touch;scroll-behavior:smooth}
.nx-card{background:var(--bg-card);border:1px solid var(--line-soft);
  border-radius:var(--r);padding:var(--s-3,12px);
  display:flex;flex-direction:column;gap:6px}
.nx-card-kopf{display:flex;align-items:center;gap:var(--s-2,8px);flex-wrap:wrap}
.nx-card-titel{font-weight:600}
.nx-chip{font-size:.72rem;padding:2px 8px;border-radius:999px;
  border:1px solid var(--line);color:var(--muted)}
.nx-chip-laeuft{border-color:var(--line-lime);color:var(--lime)}
.nx-chip-erfolgreich{border-color:var(--ok);color:var(--ok)}
.nx-chip-wartet_freigabe{border-color:var(--warn);color:var(--warn)}
.nx-chip-fehler{border-color:var(--danger);color:var(--danger)}
.nx-chip-abgelehnt{color:var(--muted-2)}
.nx-card-eingabe,.nx-card-betroffen{margin:0;font-size:.82rem;color:var(--muted-2)}
.nx-card-ergebnis{margin:0;font-size:.92rem}
.nx-card-fehler{margin:0;font-size:.85rem;color:var(--danger)}
.nx-card-ziel{align-self:flex-start}
.nx-card-knoepfe{display:flex;gap:var(--s-2,8px)}
.nx-card-fuss{display:flex;gap:var(--s-3,12px);font-size:.72rem;color:var(--muted)}
.nx-leer{margin:0}

/* Freigabe-Karte auf dem Telefon: Bottom Sheet über der Fläche —
   Kontext bleibt sichtbar, Safe-Area wird respektiert (Material-3-Muster,
   Research §1 Nr. 3). Nur die WARTENDE Karte hebt sich so an. */
.nx-card-freigabe{border-color:var(--warn)}
@media (max-width:860px){
  .nx-card-freigabe{position:fixed;left:0;right:0;bottom:0;z-index:60;
    border-radius:var(--r) var(--r) 0 0;border-bottom:0;
    background:var(--bg-elev);
    padding-bottom:calc(var(--s-3,12px) + env(safe-area-inset-bottom,0px));
    box-shadow:0 -8px 30px rgba(0,0,0,.45)}
  .nx-card-freigabe::before{content:"";width:36px;height:4px;border-radius:2px;
    background:var(--line-strong);margin:0 auto 4px}
}

/* Desktop ab 861px: mehr Luft, Karten-Raster bleibt einspaltig lesbar. */
@media (min-width:861px){
  .nx-flaeche{padding:var(--s-5,24px);gap:var(--s-4,16px)}
  .nx-orb{--nx-size:68px}
}

/* ── prefers-reduced-motion: ersetzen, nicht löschen ────────────────
   Keine Skalierung, kein Pulsieren, kein Drehen — der Zustand steht als
   statische Farbe + Text (.nx-status/aria-live) weiterhin da. */
@media (prefers-reduced-motion:reduce){
  .nx-orb-kern,.nx-orb-ring,.nx-orb-welle,.nx-orb-stage,.nx-orbit-plane{animation:none !important;
    transition:none !important;transform:none !important}
  .nx-orb-welle{opacity:0 !important}
}

/* NEX-Arbeitsflaeche: Overlay am Desktop, Bottom Sheet am Telefon (V13-D).
   Gleiches Grundmuster wie cw-overlay, aber unten verankert unter 861px —
   Sprache, Text und laufende Aktion in einer Hand bedienbar. */
.nx-wrap{position:fixed;inset:0;z-index:90;display:flex;
  align-items:flex-end;justify-content:center}
.nx-backdrop{position:absolute;inset:0;
  background:rgba(4,8,6,.42);backdrop-filter:blur(3px)}
.nx-wrap>.nx-flaeche{position:relative;z-index:1;width:100%;
  background:linear-gradient(155deg,color-mix(in srgb,var(--bg-2) 94%,var(--lime) 6%),var(--bg-2));
  border-top:1px solid var(--line-lime);
  border-radius:var(--r2) var(--r2) 0 0;
  max-height:86vh;overflow-y:auto;box-shadow:0 -24px 80px rgba(0,0,0,.48),0 0 0 1px rgba(190,255,0,.06)}
.nx-schliessen{width:44px;height:44px;display:grid;place-items:center;flex:0 0 44px;
  border:1px solid var(--line);border-radius:50%;background:var(--bg-card);color:var(--text);
  font-size:1.55rem;line-height:1;cursor:pointer}
.nx-schliessen:hover,.nx-schliessen:focus-visible{border-color:var(--lime);color:var(--lime)}
.nx-btn:focus-visible,.nx-feld:focus-visible,.nx-clip:focus-visible,.nx-anhang-x:focus-visible{
  outline:2px solid var(--lime);outline-offset:2px}
@media(min-width:861px){
  .nx-wrap{align-items:center;padding:var(--s-4)}
  .nx-wrap>.nx-flaeche{max-width:860px;border:1px solid var(--line-lime);
    border-radius:var(--r2);max-height:calc(100vh - 2*var(--s-4))}
}

/* Loesch-Dialog der Content Engine (P0 17.08.2026): kompakt, benennt den
   konkreten Beitrag. Nutzt den bestehenden ce-confirm-Rahmen. */
.ce-del-preview{display:flex;gap:10px;align-items:center;min-width:0;margin:6px 0}
.ce-del-preview .ce-jc-thumb{width:56px;height:56px;flex:0 0 56px;border-radius:8px}
.ce-del-titel{display:block;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.ce-del-warn{display:flex;gap:7px;align-items:flex-start;color:var(--warn);font-size:12px}
.ce-del-warn svg{width:14px;height:14px;flex:0 0 14px;margin-top:1px}

.lex-fin{margin:18px 0 24px;padding:18px;border:1px solid var(--line);
  border-radius:var(--r2);background:linear-gradient(145deg,color-mix(in srgb,var(--bg-card) 94%,var(--lime) 6%),var(--bg-card))}
.lex-fin-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.lex-fin-head h2{margin:3px 0 0;font-size:1.25rem}
.lex-fin-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;
  margin:16px 0;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.lex-fin-kpis>div{padding:13px;background:var(--bg-card);display:flex;flex-direction:column;gap:4px}
.lex-fin-kpis span,.lex-fin-row span{font-size:.76rem;color:var(--muted)}
.lex-fin-kpis strong{font-size:1.15rem}
.lex-fin-list{display:grid;gap:7px}
.lex-fin-row{display:flex;justify-content:space-between;gap:14px;align-items:center;
  padding:10px 2px;border-bottom:1px solid var(--line)}
.lex-fin-row:last-child{border-bottom:0}.lex-fin-row>div{display:flex;flex-direction:column;gap:2px}
.lex-fin-row>div:last-child{text-align:right}
@media(max-width:640px){.lex-fin{padding:14px}.lex-fin-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .lex-fin-row{align-items:flex-start}.lex-fin-row strong{font-size:.88rem}}

/* Präsentationsmodus: Layout und Diagramme bleiben erkennbar, sensible
   Zahlen werden nur visuell geschützt. Die Daten selbst bleiben unverändert. */
.present-toggle.is-active{border-color:var(--lime);color:var(--lime);
  background:color-mix(in srgb,var(--lime) 10%,transparent)}
.presentation-mode .present-mask{filter:blur(7px);user-select:none;
  pointer-events:none;transition:filter .16s ease}
.presentation-mode .present-sensitive{filter:blur(7px);user-select:none;pointer-events:none}
.presentation-mode .top-mrr strong{letter-spacing:.12em;color:var(--lime)}
@media(max-width:640px){.present-toggle{width:44px;height:44px;padding:0;justify-content:center}}
@media(prefers-reduced-motion:reduce){.presentation-mode .present-mask{transition:none}}

/* =====================================================================
   V14.1 · gemeinsame Premium-Schicht fuer bestehende Alt-Views
   ---------------------------------------------------------------------
   Gesgopt am echten View-Knoten. Individuell gestaltete Oberflaechen
   (Dashboard, Social, Content, Finance, NEX) tragen die Klasse nicht.
   Dadurch werden nur die alten Kartenwaende geoeffnet und verdichtet,
   ohne funktionierende Fach-Layouts zu ueberschreiben.                 */
.legacy-premium{
  --legacy-measure:min(100%,72rem);
  width:100%;
}
.legacy-premium-mark{
  display:inline-flex;align-items:center;gap:var(--s-2);min-height:32px;
  margin-bottom:var(--s-1);color:var(--muted);font-size:var(--t-micro);
  font-weight:700;letter-spacing:.11em;text-transform:uppercase;
}
.legacy-premium-icon{
  display:inline-grid;place-items:center;width:30px;height:30px;
  color:var(--lime);border:1px solid var(--line-lime);border-radius:var(--r-control);
  background:radial-gradient(circle at 35% 25%,rgba(184,232,52,.12),transparent 70%);
}
.legacy-premium-icon svg{width:16px;height:16px;stroke-width:1.75}
.legacy-premium>.view>.view-head{
  position:relative;
  max-width:var(--legacy-measure);
  margin:0 0 var(--s-6);
  padding:clamp(18px,3vw,34px) 0 var(--s-5);
  border-bottom:1px solid var(--line-soft);
}
.legacy-premium>.view>.view-head::before{
  content:"";position:absolute;left:0;bottom:-1px;width:clamp(48px,8vw,112px);
  height:2px;background:var(--lime);border-radius:2px;
}
.legacy-premium>.view>.view-head h1{
  font-size:clamp(1.75rem,3.2vw,2.65rem);line-height:1.02;
  letter-spacing:-.015em;text-wrap:balance;
}
.legacy-premium>.view>.view-head p{max-width:65ch;line-height:1.65;text-wrap:pretty}
.legacy-premium>.view>.card{
  background:transparent;border:0;border-top:1px solid var(--line-soft);
  border-radius:0;box-shadow:none;padding:var(--s-5) 0;margin-bottom:var(--s-5);
}
.legacy-premium>.view>.card:first-of-type{border-top-color:var(--line-strong)}
.legacy-premium .stat-row{
  grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr));
  gap:clamp(var(--s-2),1.4vw,var(--s-4));
}
.legacy-premium .stat{
  background:linear-gradient(145deg,rgba(24,32,25,.88),rgba(15,20,17,.72));
  border-color:var(--line-soft);box-shadow:inset 0 1px rgba(255,255,255,.025);
}
.legacy-premium .stat-value,.legacy-premium .money,.legacy-premium [data-number]{
  font-variant-numeric:tabular-nums;
}
.legacy-premium .btn,.legacy-premium .row-click{
  transition:background-color var(--nex-fast) var(--nex-ease),
    border-color var(--nex-fast) var(--nex-ease),
    color var(--nex-fast) var(--nex-ease),transform var(--nex-fast) var(--nex-ease);
}
.legacy-premium .btn:active,.legacy-premium .row-click:active{transform:translateY(1px)}
.legacy-premium :focus-visible{outline:2px solid var(--lime);outline-offset:3px}
.legacy-premium .table-wrap{box-shadow:inset 0 1px rgba(255,255,255,.025)}
.legacy-premium .tbl tbody tr{transition:background-color var(--nex-fast) var(--nex-ease)}
.legacy-premium .tbl tbody tr:hover{background:rgba(184,232,52,.035)}

@media(max-width:720px){
  .legacy-premium>.view>.view-head{padding-top:var(--s-3);margin-bottom:var(--s-5)}
  .legacy-premium .table-wrap{overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}
  .legacy-premium .tbl{min-width:640px}
  /* Die Rechnungsliste ist mobil bereits gestapelt und braucht keine Tabellen-Mindestbreite. */
  .legacy-premium .rechnungsliste{min-width:0}
  .legacy-premium .grid-2,.legacy-premium .form-grid{grid-template-columns:1fr}
  .legacy-premium .field-full{grid-column:auto}
  .legacy-premium .toolbar>.btn{min-height:44px}
}
@media(prefers-reduced-motion:reduce){
  .legacy-premium *{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

/* ═══════ V14 · rechnungen ═══════ */
/* ════════════════════════════════════════════════════════════════════
   V14 Rechnungszentrum — Sidecar (nur .rz-*). Mobile-first 375/390/430,
   Touch-Ziele ≥ 44px. Wird von app-rechnungszentrum.js selbst geladen
   (index.html bleibt unangetastet). Tokens fallen auf die App-Variablen
   zurück, wo es sie gibt.
   ════════════════════════════════════════════════════════════════════ */
:root {
  --rz-flaeche: var(--card, #ffffff);
  --rz-linie: var(--border, rgba(0, 0, 0, 0.12));
  --rz-text: var(--text, #16211c);
  --rz-leise: var(--muted, #5c6a63);
  --rz-akzent: var(--accent, #0f7b5f);
  --rz-gefahr: var(--danger, #b3402f);
  --rz-warn: var(--warn, #a8720d);
}

.rz { color: var(--rz-text); }
.rz-h { margin: 0 0 4px; font-size: 1.25rem; }
.rz-sub { margin: 0 0 12px; color: var(--rz-leise); font-size: 0.9rem; }

/* Planung: Monat + Knöpfe untereinander (375px), ab 640px nebeneinander */
.rz-planung { display: flex; flex-direction: column; gap: 10px; margin-bottom: 16px; }
.rz-monat-label { display: flex; flex-direction: column; gap: 4px; font-size: 0.85rem; color: var(--rz-leise); }
.rz-monat { min-height: 44px; padding: 8px 10px; border: 1px solid var(--rz-linie);
  border-radius: 10px; background: var(--rz-flaeche); color: var(--rz-text); font: inherit; }

.rz-karten { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; }
.rz-karte { background: var(--rz-flaeche); border: 1px solid var(--rz-linie);
  border-radius: 14px; padding: 14px;
  /* Ohne min-width:0 schiebt das Grid-Item seine min-content-Breite in den
     Track zurueck — die Statuskette (nowrap) macht daraus 564px pro Spalte. */
  min-width: 0; }
.rz-karte-kopf { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; justify-content: space-between; }
.rz-karte-titel { margin: 0; font-size: 1rem; }
.rz-betrag { font-variant-numeric: tabular-nums; font-weight: 600; }
/* Die Leistung ist bei mehreren Vertraegen desselben Kunden das EINZIGE
   unterscheidende Merkmal auf der Karte — zwei Karten "Grabmale und
   Naturstein Grobe" nebeneinander lesen sich sonst wie ein Duplikat.
   Deshalb traegt sie hier Gewicht statt als Fussnote zu verblassen.
   Die Vertrags-ID bleibt bewusst draussen: sie ist intern und erklaert
   dem Leser nichts. */
.rz-leistung { margin: 2px 0 10px; color: var(--rz-text); font-size: 0.9rem;
  font-weight: 600; line-height: 1.3; }
.rz-ungeplant, .rz-leer { color: var(--rz-leise); font-size: 0.9rem; }

/* Statuskette: umbricht, statt zu scrollen. Der Scroll-Ansatz stammt aus der
   Zeit, als die Karte 564px breit war und die Kette immer vollstaendig passte —
   er hat nie gegriffen. Seit die Spalten sich am Container orientieren, wuerde
   er den AKTIVEN Status abschneiden, und der ist die wichtigste Information
   der Karte. Sechs kurze Pills brechen geordnet auf zwei Zeilen um. */
.rz-kette { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; padding: 0;
  list-style: none; min-width: 0; }
.rz-glied { flex: 0 0 auto; padding: 5px 10px; border-radius: 999px;
  border: 1px solid var(--rz-linie); color: var(--rz-leise); font-size: 0.75rem; white-space: nowrap; }
.rz-glied-fertig { border-color: var(--rz-akzent); color: var(--rz-akzent); }
.rz-glied-aktiv { background: var(--rz-akzent); border-color: var(--rz-akzent); color: #fff; }
.rz-glied-fehler { background: var(--rz-gefahr); border-color: var(--rz-gefahr); color: #fff; }
.rz-glied-skip { background: var(--rz-warn); border-color: var(--rz-warn); color: #fff; }

.rz-aktionen { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.rz-btn { min-height: 44px; min-width: 44px; padding: 10px 14px;
  border: 1px solid var(--rz-linie); border-radius: 10px; background: var(--rz-flaeche);
  color: var(--rz-text); font: inherit; font-size: 0.85rem; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; text-decoration: none; }
.rz-btn:disabled { opacity: 0.5; cursor: default; }
.rz-btn-primaer { background: var(--rz-akzent); border-color: var(--rz-akzent); color: #fff; }
.rz-btn-gefahr { border-color: var(--rz-gefahr); color: var(--rz-gefahr); }
.rz-btn-leise { border: none; min-height: 44px; padding-left: 0; color: var(--rz-leise); background: transparent; }

.rz-ursache { margin: 0 0 8px; color: var(--rz-gefahr); font-size: 0.85rem; overflow-wrap: anywhere; }
.rz-fehler { color: var(--rz-gefahr); }
.rz-meldung { color: var(--rz-akzent); font-size: 0.9rem; }

.rz-audit-liste { margin: 6px 0 0; padding-left: 18px; }
.rz-audit-zeile { color: var(--rz-leise); font-size: 0.8rem; margin-bottom: 4px; overflow-wrap: anywhere; }

/* Bestätigungsdialog (Einzel wie Sammel: EIN Dialog mit Liste) */
.rz-dialog-schleier { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.45);
  display: flex; align-items: flex-end; justify-content: center; z-index: 60; }
.rz-dialog { background: var(--rz-flaeche); color: var(--rz-text);
  border-radius: 16px 16px 0 0; padding: 18px 16px calc(18px + env(safe-area-inset-bottom));
  width: 100%; max-width: 560px; max-height: 80vh; overflow-y: auto; }
.rz-dialog-titel { margin: 0 0 6px; font-size: 1.05rem; }
.rz-dialog-text { margin: 0 0 10px; color: var(--rz-leise); font-size: 0.9rem; }
.rz-dialog-liste { margin: 0 0 14px; padding-left: 18px; font-size: 0.9rem; }
.rz-dialog-aktionen { display: flex; gap: 10px; justify-content: flex-end; }

@media (min-width: 640px) {
  .rz-planung { flex-direction: row; align-items: flex-end; }
  .rz-karten { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rz-dialog-schleier { align-items: center; }
  .rz-dialog { border-radius: 16px; }
}
@media (min-width: 1100px) {
  .rz-karten { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

/* ═══════ V14 · zahlungen ═══════ */
/* =====================================================================
   V14 — Zahlungen / Offene Posten + Mahnwesen (Sidecar, .zp-*)
   Mobile-first; nutzt ausschliesslich die Tokens aus app.css.
   Beträge tragen .present-sensitive / Kundennamen .present-mask —
   die Anonymisierung im Präsentationsmodus kommt aus app.css (§6127ff),
   hier bewusst KEINE zweite Blur-Regel (eine Wahrheit).
   ===================================================================== */

/* Kennzahlen-Kopf: mobil 2 Spalten, ab 720px eine Reihe */
.zp-kopf{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:16px}
.zp-stat-wert{font-size:1.25rem;font-weight:700;color:var(--ink);margin:2px 0}
.zp-stat-warn .zp-stat-wert{color:#E0726A}

/* OP-Tabelle: scrollt in ihrem Wrapper, nie die Seite */
.zp-tabelle{overflow-x:auto}
.zp-tabelle .tbl{min-width:560px}
.zp-zeile{cursor:pointer}
.zp-zeile:hover,.zp-zeile:focus-visible{background:var(--bg-hover)}
.zp-zeile-aktiv{background:var(--bg-elev)}

/* Status-Chips */
.zp-chip{display:inline-block;background:var(--bg-elev);border:1px solid var(--line-soft);
  color:var(--muted);font-size:.76rem;padding:3px 9px;border-radius:99px;white-space:nowrap}
.zp-chip-warn{color:#E0726A;border-color:rgba(224,114,106,.4)}
.zp-chip-pruefen{color:#E6C84A;border-color:rgba(230,200,74,.4)}
.zp-chip-teil{color:#7FB3FF;border-color:rgba(127,179,255,.4)}
.zp-chip-stufe{color:var(--ink)}

/* Historie-Drawer */
.zp-drawer{background:var(--bg-card);border:1px solid var(--line-soft);border-radius:var(--r);
  padding:16px 18px;margin-top:14px}
.zp-drawer-zahlen{display:flex;flex-wrap:wrap;gap:8px 18px;margin:10px 0;color:var(--muted);font-size:.9rem}
.zp-historie{list-style:none;margin:8px 0 0;padding:0}
.zp-historie li{display:flex;gap:12px;justify-content:space-between;padding:8px 0;
  border-top:1px solid var(--line-soft);font-size:.9rem}
.zp-vorschlag{color:#E6C84A;font-size:.88rem;margin:8px 0}
.zp-stale{color:#E0726A;font-size:.88rem;margin-bottom:12px}
.zp-mahn-link{margin-top:14px}

/* Mahn-Vorschau */
.zp-mahn-vorschau{margin-top:14px}
.zp-mahn-vorschau label{display:block;margin:10px 0 4px}
.zp-mahn-text{font-family:inherit;line-height:1.5;resize:vertical}
.zp-mahn-aktionen{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}

/* Audit-Verlauf */
.zp-audit{list-style:none;margin:8px 0 0;padding:0}
.zp-audit li{display:flex;flex-wrap:wrap;gap:6px 12px;padding:7px 0;
  border-top:1px solid var(--line-soft);font-size:.86rem}

@media(min-width:720px){
  .zp-kopf{grid-template-columns:repeat(4,minmax(0,1fr))}
}

/* ═══════ V14 · revolut ═══════ */
/* =====================================================================
   V14 §7/§8 — Bankabgleich (.rv-*) · mobile-first.
   Nutzt AUSSCHLIESSLICH die Tokens aus app.css :root (Linien tragen die
   Hierarchie, keine Kaesten). Keine Neudefinition bestehender Regeln.
   ===================================================================== */

.rv { padding: 16px 14px 40px; max-width: 860px; margin: 0 auto; }
.rv-h { font-size: 1.25rem; font-weight: 650; margin: 0 0 4px; color: var(--ink); }
.rv-sub { font-size: .82rem; color: var(--muted); margin: 0 0 14px; line-height: 1.4; }

.rv-filter { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }
/* WCAG-Tap-Ziel: die Filter-Chips waren 32px hoch (Mobil-Abnahme 18.08.) */
.rv-filter > button { min-height: 44px; }
.rv-chip {
  background: none; border: 1px solid var(--line); color: var(--muted-2);
  border-radius: 999px; min-height: 32px; padding: 0 12px;
  font-size: .78rem; cursor: pointer; font-family: var(--body);
}
.rv-chip-aktiv { border-color: var(--line-lime); color: var(--ink); }
.rv-zahl { color: var(--muted); font-variant-numeric: tabular-nums; }
.rv-chip-aktiv .rv-zahl { color: var(--lime); }

.rv-liste { list-style: none; margin: 0; padding: 0; }
.rv-eintrag { padding: 12px 0; border-bottom: 1px solid var(--line-soft); }

.rv-zeile1 { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.rv-datum { font-size: .78rem; color: var(--muted); font-variant-numeric: tabular-nums; }
.rv-betrag { font-size: .95rem; font-weight: 650; font-variant-numeric: tabular-nums; margin-right: auto; }
.rv-plus { color: var(--ok); }
.rv-minus { color: var(--ink); }
.rv-status {
  background: var(--bg-2); color: var(--ink); border: 1px solid var(--line);
  border-radius: 8px; min-height: 36px; padding: 0 8px; font-size: .8rem;
  font-family: var(--body); max-width: 100%;
}

.rv-zeile2 { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-top: 4px; }
.rv-text {
  font-size: .82rem; color: var(--muted-2); overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; max-width: 100%;
}
.rv-marke { font-size: .72rem; color: var(--lime); }
.rv-vorschlag {
  background: none; border: none; padding: 0; color: var(--info);
  font-size: .78rem; cursor: pointer; font-family: var(--body);
  text-decoration: underline; text-underline-offset: 3px;
}
.rv-match { font-size: .78rem; color: var(--muted); margin-top: 4px; line-height: 1.4; }

.rv-leer { font-size: .85rem; color: var(--muted); }
.rv-fehler { font-size: .85rem; color: var(--danger); }
.rv-gate-liste { font-size: .82rem; color: var(--muted-2); line-height: 1.6; padding-left: 18px; }
.rv-gate-liste li { margin-bottom: 8px; overflow-wrap: anywhere; }

@media (min-width: 720px) {
  .rv { padding: 24px 24px 56px; }
  .rv-text { white-space: normal; }
}

/* ═══════ V14 · finance ═══════ */
/* =====================================================================
   V14 · Finance Control Center (.fc-*) — Sidecar zu app.css
   Nur :root-Tokens aus app.css, keine eigenen Farbwerte. Mobile-first
   (375/390/430), Touch-Ziele ≥ 44px, kein Querüberlauf: breite Inhalte
   scrollen in der eigenen Box. Bewegung nur unter no-preference.
   ===================================================================== */

.fc{display:flex;flex-direction:column;gap:28px;min-width:0;max-width:1540px;margin-inline:auto}
.fc-body{display:flex;flex-direction:column;gap:30px;min-width:0}

/* ── Kopf ── */
.fc-kopf{display:flex;flex-direction:column;gap:6px}
.fc-api{display:grid;gap:16px;padding:20px;border:1px solid color-mix(in srgb,var(--lime) 28%,var(--line));background:linear-gradient(145deg,color-mix(in srgb,var(--panel) 94%,var(--lime) 6%),var(--panel))}
.fc-api-head,.fc-api-summary,.fc-api-row{display:flex;align-items:center;justify-content:space-between;gap:16px}
.fc-api-head h2{margin:3px 0 0;font-size:clamp(1.2rem,3vw,1.7rem)}
.fc-api-status{border:1px solid currentColor;border-radius:999px;padding:7px 11px;font-size:.78rem;font-weight:800;white-space:nowrap}
.fc-api-status-ok{color:var(--lime)}.fc-api-status-warnung{color:#ffd166}.fc-api-status-kritisch,.fc-api-status-limit{color:#ff806f}
.fc-api-summary>div{display:grid;gap:4px}.fc-api-budget{display:grid;gap:6px;min-width:min(100%,210px);font-size:.82rem}.fc-api-budget .inp{min-height:44px}
.fc-api-meter{height:10px;overflow:hidden;border-radius:999px;background:color-mix(in srgb,var(--text) 12%,transparent)}
.fc-api-meter span{display:block;height:100%;min-width:2px;border-radius:inherit;background:linear-gradient(90deg,var(--lime),#dfff62);transition:width .25s ease}
.fc-api-list{display:grid;border-top:1px solid var(--line)}.fc-api-row{min-height:58px;padding:10px 0;border-bottom:1px solid var(--line)}
.fc-api-row>div{display:grid;gap:3px}.fc-api-note{margin:0;padding:12px;border-left:3px solid var(--lime);background:color-mix(in srgb,var(--lime) 7%,transparent);font-size:.8rem;line-height:1.5}
@media(max-width:620px){.fc-api{padding:16px}.fc-api-head,.fc-api-summary{align-items:stretch;flex-direction:column}.fc-api-status{align-self:flex-start}.fc-api-budget{width:100%}.fc-api-row{align-items:flex-start}}
.fc-titel{font-size:clamp(22px,5vw,30px);line-height:1.1;margin:0}
.fc-syncbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:8px}
.fc-syncbar .btn{min-height:40px}

/* ── Stale-Balken: alter Wert sichtbar alt (gelb), nie versteckt ── */
.fc-stale{border-left:3px solid var(--warn);background:var(--bg-2);
  color:var(--warn);padding:10px 14px;border-radius:var(--r-sm,8px);
  font-size:13px}

/* ── B3 · KPI-Leiste: kompakt, 2 Spalten mobil, wächst mit der Breite ── */
.fc-kpis{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.fc-kpi{display:flex;flex-direction:column;align-items:flex-start;gap:4px;
  min-height:104px;padding:17px 18px;text-align:left;
  background:var(--bg-card);border:1px solid var(--line-soft);
  border-radius:16px;color:inherit;cursor:pointer;min-width:0;overflow:hidden}
.fc-kpi:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
.fc-kpi .fc-lab{display:flex;align-items:center;gap:6px;min-width:0}
.fc-wert{font-size:clamp(18px,2vw,24px);line-height:1.1;white-space:nowrap;overflow-wrap:normal;word-break:normal;margin-top:auto}
.fc-kpi-leer .fc-wert{color:var(--muted-2)}
.fc-grund{font-size:11px;color:var(--muted-2);line-height:1.35}
.fc-sub{font-size:11px}
.fc-prognose{font-size:10px;letter-spacing:.08em;color:var(--warn);
  border:1px solid var(--warn);border-radius:4px;padding:1px 5px}

/* ── Segmente ── */
.fc-overview-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:18px;align-items:stretch}
.fc-chart-card,.fc-compliance,.fc-detail{min-width:0;padding:clamp(18px,2.2vw,28px);border:1px solid var(--line-soft);border-radius:22px;background:var(--bg-card)}
.fc-chart-head,.fc-compliance-head,.fc-detail-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:20px}
.fc-chart-head h2{margin:5px 0 0;font-size:clamp(19px,2vw,25px);line-height:1.12;text-wrap:balance}
.fc-chart-head p,.fc-compliance-head p,.fc-detail-head p{margin:0;max-width:34ch;text-align:right}
.fc-bars{display:flex;flex-direction:column;gap:16px}
.fc-bar-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px 14px;align-items:center}
.fc-bar-meta{grid-column:1/-1;display:flex;align-items:baseline;justify-content:space-between;gap:16px;min-width:0}
.fc-bar-meta span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-weight:600}
.fc-bar-meta b,.fc-bar-share{white-space:nowrap;font-variant-numeric:tabular-nums}
.fc-bar-track{height:10px;overflow:hidden;border-radius:999px;background:color-mix(in srgb,var(--line) 70%,transparent)}
.fc-bar-fill{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,color-mix(in srgb,var(--lime) 68%,var(--ok)),var(--lime));transform-origin:left center}
.fc-bar-share{min-width:58px;text-align:right}
.fc-compliance{display:flex;flex-direction:column}
.fc .ku-kachel{width:100%;min-height:174px;margin:0;padding:22px;border-radius:17px;justify-content:center;gap:10px;background:color-mix(in srgb,var(--lime) 5%,var(--bg-2))}
.fc .ku-kachel-wert{font-size:clamp(25px,3vw,38px)}
.fc-detail{display:flex;flex-direction:column;gap:18px}
.fc-seg{margin-top:0}
.fc-seg .sc-tgl{min-height:44px}
.fc-panel{min-width:0;padding-top:4px}

/* ── Gate-/Hinweis-Karten ── */
.fc-gate h3{margin:0 0 6px}

/* ── Zeilenlisten (Drill-down, Ausgaben): Kunde/Datum/Nr/Betrag ── */
.fc-zeilen{display:flex;flex-direction:column;border-top:1px solid var(--line-soft)}
.fc-zeile{display:grid;grid-template-columns:minmax(0,1fr) auto;
  grid-auto-flow:dense;gap:2px 10px;align-items:center;
  padding:9px 2px;min-height:44px;border-bottom:1px solid var(--line-soft)}
.fc-zeile-wer{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fc-zeile-betrag{grid-column:2;grid-row:1;text-align:right}
.fc-zeile-datum,.fc-zeile-nr{font-size:11px}
.fc-doppel{grid-column:2;font-size:10px;color:var(--warn);
  border:1px solid var(--warn);border-radius:4px;padding:1px 5px;justify-self:end}

/* ── A9 · Kundenkarten ── */
.fc-kunden{display:grid;grid-template-columns:1fr;gap:16px}
.fc-kunde{background:var(--bg-card);border:1px solid var(--line-soft);
  border-radius:17px;padding:19px;min-width:0}
.fc-k-kopf{display:flex;flex-wrap:wrap;justify-content:space-between;
  align-items:baseline;gap:4px 10px;margin-bottom:10px}
.fc-k-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px}
.fc-k-stat{display:flex;flex-direction:column;gap:2px;min-width:0}
.fc-k-stat b{font-size:15px;white-space:nowrap;overflow-wrap:normal;word-break:normal}
.fc-k-share{height:5px;margin:-2px 0 17px;overflow:hidden;border-radius:999px;background:var(--line-soft)}
.fc-k-share span{display:block;height:100%;border-radius:inherit;background:var(--lime);transform-origin:left center}
.fc-k-vertrag,.fc-k-naechste{display:flex;flex-wrap:wrap;gap:4px 10px;
  align-items:baseline;margin-top:10px;padding-top:8px;
  border-top:1px solid var(--line-soft);font-size:13px}

/* ── A8 · Liquidität: Zeilen je Szenario, Spalten je Horizont ── */
.fc-liq{display:flex;flex-direction:column;gap:8px;min-width:0}
.fc-liq-kopf{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.fc-liq-tage,.fc-liq-reihe{display:grid;
  grid-template-columns:minmax(72px,1fr) repeat(3,minmax(0,1fr));
  gap:6px 10px;align-items:baseline}
.fc-liq-tage{border-bottom:1px solid var(--line-soft);padding-bottom:4px}
.fc-liq-reihe{padding:8px 0;border-bottom:1px solid var(--line-soft)}
.fc-liq-reihe b{font-size:14px;white-space:nowrap;overflow-wrap:normal;word-break:normal}

/* Geld- und Kennzahlen bleiben als eine visuelle Einheit stehen. Bei engen
   Kacheln schrumpft die Schrift moderat, aber Betrag und Eurozeichen werden
   niemals über mehrere Zeilen getrennt. */
.hist-fin-wert,.lex-fin-kpis strong,.top-mrr strong,.rz-betrag,.ku-wert,
.ku-kachel-wert,.os-v{white-space:nowrap;overflow-wrap:normal;word-break:normal}
.fc-liq-best b{color:var(--ok)}
.fc-liq-worst b{color:var(--warn)}
.fc-annahmen{margin-top:6px}
.fc-annahmen summary{cursor:pointer;min-height:44px;display:flex;
  align-items:center;color:var(--muted)}
.fc-annahmen ul{margin:4px 0 0;padding-left:18px;color:var(--muted);
  font-size:13px;line-height:1.5}

/* ── A7 · Ausgaben: Betrieb und Privat strikt getrennt ── */
.fc-ausg{display:flex;flex-direction:column;gap:14px}
.fc-ausg-privat{border-left:3px solid var(--line-strong);padding-left:10px}

/* ── Drill-down-Drawer: mobil Bottom-Sheet, ab 720px Seitenleiste ── */
.fc-drawer-wrap{position:fixed;inset:0;z-index:71}
.fc-scrim{position:absolute;inset:0;background:rgba(0,0,0,.5)}
.fc-drawer{position:fixed;left:0;right:0;bottom:0;z-index:72;
  max-height:82dvh;overflow-y:auto;overflow-x:hidden;
  background:var(--bg-elev);border:1px solid var(--line);
  border-radius:var(--r,12px) var(--r,12px) 0 0;
  padding:14px 16px calc(14px + env(safe-area-inset-bottom))}
.fc-drawer-kopf{display:flex;align-items:center;justify-content:space-between;
  gap:10px;margin-bottom:8px}
.fc-close{min-height:44px;min-width:44px;padding:0 12px;cursor:pointer;
  background:none;border:1px solid var(--line);border-radius:var(--r-sm,8px);
  color:inherit}
.fc-close:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
.fc-drawer-quelle{margin:0 0 10px}
.fc-bank{font-size:26px;margin:6px 0 0}

/* ── E · Präsentationsmodus: die Werte sind bereits im Render maskiert
   (wert() schreibt „●●●"/„Kunde A" statt des echten Werts ins DOM) —
   hier nur die ruhige Optik der Maske, passend zu .present-mask. ── */
.presentation-mode .fc-wert,
.presentation-mode .fc-zeile-betrag{letter-spacing:.12em;color:var(--lime)}
.presentation-mode .fc-kpi,.presentation-mode .fc-zeile{user-select:none}

/* ── Breiten ── */
@media(min-width:430px){
  .fc-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(min-width:720px){
  .fc-kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
  .fc-kunden{grid-template-columns:repeat(2,minmax(0,1fr))}
  .fc-drawer{left:auto;top:0;width:min(480px,100%);max-height:none;
    border-radius:0}
}
@media(min-width:980px){
  .fc-kpis{grid-template-columns:repeat(4,minmax(0,1fr))}
  .fc-overview-grid{grid-template-columns:minmax(0,1.55fr) minmax(300px,.75fr);gap:20px}
}
@media(min-width:1200px){
  .fc-kunden{grid-template-columns:repeat(3,minmax(0,1fr))}
}

/* ── Bewegung nur, wenn erlaubt ── */
@media(prefers-reduced-motion:no-preference){
  .fc-kpi{transition:border-color 180ms ease,transform 220ms cubic-bezier(.23,1,.32,1),box-shadow 220ms cubic-bezier(.23,1,.32,1)}
  .fc-kpi:hover{border-color:var(--line-strong);transform:translateY(-3px);box-shadow:0 18px 34px -28px color-mix(in srgb,var(--lime) 35%,transparent)}
  .fc-kpi:active{transform:translateY(0) scale(.985)}
  .fc-bar-fill,.fc-k-share span{animation:fc-bar-grow 700ms cubic-bezier(.23,1,.32,1) both;animation-delay:var(--fc-bar-delay,0ms)}
  .fc-drawer{animation:fc-auf var(--nex-normal,.28s) var(--nex-ease-out,ease)}
  @keyframes fc-bar-grow{from{transform:scaleX(0);opacity:.4}to{transform:scaleX(1);opacity:1}}
  @keyframes fc-auf{from{transform:translateY(24px);opacity:0}
    to{transform:none;opacity:1}}
}
@media(max-width:560px){
  .fc{gap:22px}.fc-body{gap:22px}.fc-kpis{grid-template-columns:1fr}
  .fc-kpi{min-height:94px}.fc-chart-head,.fc-compliance-head,.fc-detail-head{align-items:flex-start;flex-direction:column;gap:6px}
  .fc-chart-head p,.fc-compliance-head p,.fc-detail-head p{text-align:left}
  .fc-bar-meta{gap:10px}.fc-detail{padding:17px}.fc-seg{display:grid;grid-template-columns:1fr}
}

/* Executive-Dashboard: vergleichbare Finanzgroessen als lesbare Balken.
   Keine reine Deko: jeder Balken besitzt Textwert und aria-label. */
.dash-fin-bars{margin-top:16px;padding:clamp(18px,2vw,24px);border:1px solid var(--line);border-radius:18px;background:var(--bg-card)}
.dash-fin-bars-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:18px}
.dash-fin-bars-head h3{margin:4px 0 0;font-size:20px;line-height:1.15}
.dash-fin-bars-head p{margin:0;max-width:44ch;text-align:right}
.dash-fin-bar-list{display:grid;gap:13px}
.dash-fin-bar{display:grid;grid-template-columns:minmax(130px,.7fr) minmax(140px,2fr) auto;gap:14px;align-items:center}
.dash-fin-bar-label{color:var(--ink);font-size:12px}
.dash-fin-bar-track{height:9px;overflow:hidden;border-radius:999px;background:var(--line-soft)}
.dash-fin-bar-track i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,color-mix(in srgb,var(--lime) 62%,var(--ok)),var(--lime));transform-origin:left center}
.dash-fin-bar>b{min-width:92px;text-align:right;white-space:nowrap}
@media(max-width:680px){.dash-fin-bars-head{align-items:flex-start;flex-direction:column;gap:7px}.dash-fin-bars-head p{text-align:left}.dash-fin-bar{grid-template-columns:1fr auto;gap:6px 10px}.dash-fin-bar-track{grid-column:1/-1;grid-row:2}.dash-fin-bar>b{min-width:0}}
@media(prefers-reduced-motion:no-preference){.dash-fin-bar-track i{animation:dash-fin-grow 760ms cubic-bezier(.23,1,.32,1) both;animation-delay:var(--dash-bar-delay,0ms)}@keyframes dash-fin-grow{from{transform:scaleX(0);opacity:.35}to{transform:scaleX(1);opacity:1}}}
@media(prefers-reduced-motion:reduce){.fc-bar-fill,.fc-k-share span,.dash-fin-bar-track i{animation:none!important;transition:none!important}}

/* Einheitliche Datenbewegung fuer bereits vorhandene Balken in Vertrieb,
   Social Center, Grow Studio und §19. Die feste Endbreite bleibt im DOM;
   animiert werden nur Transform und Opazitaet. */
.bar-fill,.klein-fill,.sc-fmt-bar>i,.gs-bar>i{transform-origin:left center}
.gs-bar>i{transition:none}
@media(prefers-reduced-motion:no-preference){
  .bar-fill,.klein-fill,.sc-fmt-bar>i,.gs-bar>i{animation:crm-data-bar-enter 680ms cubic-bezier(.23,1,.32,1) both}
  @keyframes crm-data-bar-enter{from{transform:scaleX(0);opacity:.35}to{transform:scaleX(1);opacity:1}}
}
@media(prefers-reduced-motion:reduce){.bar-fill,.klein-fill,.sc-fmt-bar>i,.gs-bar>i{animation:none!important;transition:none!important}}

/* ═══════ V14 · Kleinunternehmer ═══════ */
/* =====================================================================
   DHS OS — Kleinunternehmer-Monitor (§ 19 UStG) · Sidecar zu
   app-kleinunternehmer.js. Nutzt die globalen :root-Tokens aus app.css,
   mobile-first, Touch-Ziele ≥ 44px, nur transform/opacity animiert,
   reduced-motion schaltet Bewegung ab.
   ===================================================================== */

.ku { display: flex; flex-direction: column; gap: 14px; min-width: 0; }

/* ── Statuskopf mit Ampel ─────────────────────────────────────────── */
.ku-kopf { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.ku-stand { margin-left: auto; }
.ku-ampel { display: inline-flex; align-items: center; gap: 7px;
  padding: 4px 11px; border-radius: 999px; font-size: .8rem;
  background: rgba(255, 255, 255, .03);
  border: 1px solid rgba(255, 255, 255, .07); }
.ku-ampel-dot, .ku-dot-ruhig, .ku-dot-beobachten, .ku-dot-kritisch,
.ku-dot-ueberschritten { display: inline-block; width: 8px; height: 8px;
  border-radius: 50%; background: var(--ku-ton, var(--muted, #9AA39A)); }
.ku-ampel-ruhig         { --ku-ton: var(--ok, #7FC46B); }
.ku-ampel-beobachten    { --ku-ton: var(--info, #7FB3FF); }
.ku-ampel-kritisch      { --ku-ton: var(--warn, #E6C84A); }
.ku-ampel-ueberschritten{ --ku-ton: var(--danger, #E0726A); }
.ku-ampel .ku-ampel-dot { background: var(--ku-ton); }
.ku-dot-ruhig          { --ku-ton: var(--ok, #7FC46B); margin-left: 6px; }
.ku-dot-beobachten     { --ku-ton: var(--info, #7FB3FF); margin-left: 6px; }
.ku-dot-kritisch       { --ku-ton: var(--warn, #E6C84A); margin-left: 6px; }
.ku-dot-ueberschritten { --ku-ton: var(--danger, #E0726A); margin-left: 6px; }

/* ── Stale-Balken (Muster fc-stale): alt ist ehrlich, aber sichtbar ── */
.ku-stale { padding: 9px 13px; border-radius: 10px; font-size: .82rem;
  color: var(--warn, #E6C84A); background: rgba(230, 200, 74, .07);
  border: 1px solid rgba(230, 200, 74, .22); }

.ku-hinweis { max-width: 62ch; }

/* ── Vorjahr | laufendes Jahr: mobile untereinander, ab 640px nebeneinander */
.ku-jahre { display: grid; grid-template-columns: 1fr; gap: 12px; }
@media (min-width: 640px) { .ku-jahre { grid-template-columns: 1fr 2fr; } }
.ku-jahr { display: flex; flex-direction: column; gap: 6px; min-width: 0;
  padding: 14px 16px; border-radius: 14px;
  background: rgba(255, 255, 255, .022);
  border: 1px solid rgba(255, 255, 255, .05); }
.ku-wert { font-size: clamp(1.5rem, 4.5vw, 2.1rem); line-height: 1.15;
  overflow-wrap: anywhere; }
.ku-wert-klein { font-size: 1.15rem; }

/* Fortschrittsbalken: Breite kommt inline (width in %), der Ton je Ampel. */
.ku-balken { position: relative; height: 8px; border-radius: 999px;
  margin-top: 6px; overflow: hidden; background: rgba(255, 255, 255, .06); }
.ku-balken-voll { position: absolute; inset: 0 auto 0 0; border-radius: inherit;
  background: var(--ku-ton, var(--lime, #C9F24B)); min-width: 2px;
  transition: width .3s ease; }
.ku-balken-ruhig         { --ku-ton: var(--ok, #7FC46B); }
.ku-balken-beobachten    { --ku-ton: var(--info, #7FB3FF); }
.ku-balken-kritisch      { --ku-ton: var(--warn, #E6C84A); }
.ku-balken-ueberschritten{ --ku-ton: var(--danger, #E0726A); }

/* ── Prognose-Zeile ───────────────────────────────────────────────── */
.ku-progno { display: grid; grid-template-columns: auto 1fr; gap: 4px 14px;
  align-items: baseline; padding: 4px 2px; }
@media (min-width: 720px) { .ku-progno { grid-template-columns: repeat(3, auto 1fr); } }
.ku-prognose { display: inline-block; margin-left: 7px; padding: 1px 7px;
  border-radius: 999px; font-size: .62rem; letter-spacing: .08em;
  color: var(--info, #7FB3FF); border: 1px solid rgba(127, 179, 255, .35); }

/* ── Drill-down „Berechnung ansehen“ ──────────────────────────────── */
.ku-drill summary { cursor: pointer; min-height: 44px; display: flex;
  align-items: center; padding: 0 4px; user-select: none;
  color: var(--muted, #9AA39A); }
.ku-drill summary:hover, .ku-drill summary:focus-visible { color: inherit; }
.ku-drill summary:focus-visible { outline: 2px solid var(--lime, #C9F24B);
  outline-offset: 2px; border-radius: 8px; }
.ku-weg { margin: 6px 0 10px; padding-left: 1.2em;
  display: flex; flex-direction: column; gap: 5px; font-size: .86rem; }
.ku-aus { display: flex; flex-direction: column; gap: 6px; margin: 10px 0; }
.ku-aus-block { display: flex; flex-direction: column; gap: 3px; }
.ku-zeile { display: flex; align-items: baseline; flex-wrap: wrap;
  gap: 4px 10px; font-size: .84rem; padding: 3px 0; min-width: 0; }
.ku-zeile-kopf { border-bottom: 1px solid rgba(255, 255, 255, .06);
  padding-bottom: 5px; }
.ku-zeile-wer { min-width: 0; overflow-wrap: anywhere; }
.ku-zeile-was { flex-basis: 100%; }
@media (min-width: 640px) { .ku-zeile-was { flex-basis: auto; } }
.ku-quelle a { color: inherit; text-decoration: underline;
  text-underline-offset: 2px; display: inline-block; padding: 10px 0; }

/* ── Pflichttext: immer sichtbar, nie wegoptimiert ────────────────── */
.ku-pflicht { font-size: .78rem; opacity: .85; max-width: 70ch; }

/* ── Kompakte Finance-Kachel ──────────────────────────────────────── */
.ku-kachel { display: flex; flex-direction: column; align-items: flex-start;
  gap: 4px; min-height: 44px; padding: 12px 14px; border-radius: 14px;
  text-align: left; font: inherit; color: inherit; cursor: pointer;
  background: rgba(255, 255, 255, .022);
  border: 1px solid rgba(255, 255, 255, .05);
  transition: border-color .14s ease, transform .14s ease; }
.ku-kachel:hover { transform: translateY(-1px);
  border-color: color-mix(in srgb, var(--ku-ton, var(--lime, #C9F24B)) 32%, transparent); }
.ku-kachel:focus-visible { outline: 2px solid var(--lime, #C9F24B); outline-offset: 2px; }
.ku-kachel-ruhig         { --ku-ton: var(--ok, #7FC46B); }
.ku-kachel-beobachten    { --ku-ton: var(--info, #7FB3FF); }
.ku-kachel-kritisch      { --ku-ton: var(--warn, #E6C84A); }
.ku-kachel-ueberschritten{ --ku-ton: var(--danger, #E0726A); }
.ku-kachel-wert { font-size: 1.25rem; }

@media (prefers-reduced-motion: reduce) {
  .ku-balken-voll, .ku-kachel { transition: none; }
  .ku-kachel:hover { transform: none; }
}

/* WCAG-Tap-Ziel: der Quellen-Link im §-19-Monitor war 34px (Abnahme 18.08.). */
.ku-quelle a, a.ku-quelle, .ku-fuss a { display: inline-flex; align-items: center; min-height: 44px; }

/* ── Steuerberater-Cockpit ───────────────────────────────────────── */
.stb { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.stb-head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 14px; }
.stb-head h1 { margin: 4px 0; font-size: clamp(1.55rem, 4vw, 2.5rem); }
.stb-kpis { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 10px; }
.stb-kpi { display: flex; flex-direction: column; gap: 5px; padding: 14px; border-left: 2px solid var(--lime,#C9F24B); background: rgba(255,255,255,.025); }
.stb-kpi span,.stb-kpi small,.stb-tr small { color: var(--muted,#9AA39A); }
.stb-kpi b { font-size: clamp(1.15rem,3vw,1.65rem); overflow-wrap: anywhere; }
.stb-pruefen { padding: 14px 16px; border: 1px solid rgba(230,200,74,.25); border-radius: 14px; background: rgba(230,200,74,.055); }
.stb-pruefen h2,.stb-table-wrap h2,.stb-access h2 { margin: 0 0 8px; font-size: 1rem; }
.stb-pruefen ul { margin: 0; padding-left: 1.2rem; }
.stb-table-wrap { min-width: 0; }
.stb-table { display: flex; flex-direction: column; border-top: 1px solid rgba(255,255,255,.08); }
.stb-tr { display: grid; grid-template-columns: 1.05fr 1.5fr .8fr .7fr 1.5fr; gap: 12px; align-items: start; padding: 11px 4px; border-bottom: 1px solid rgba(255,255,255,.06); min-width: 0; }
.stb-tr > * { min-width: 0; overflow-wrap: anywhere; }
.stb-tr span { display: flex; flex-direction: column; }
.stb-th { color: var(--muted,#9AA39A); font-size: .75rem; text-transform: uppercase; letter-spacing: .07em; }
.stb-ja { color: var(--ok,#7FC46B); }
.stb-nein { color: var(--warn,#E6C84A); }
.stb-access { display: grid; grid-template-columns: minmax(0,1fr) auto auto; gap: 12px; align-items: center; padding: 16px; border-radius: 14px; background: rgba(201,242,75,.045); }
@media (max-width: 900px) { .stb-kpis { grid-template-columns: repeat(2,minmax(0,1fr)); } .stb-access { grid-template-columns: 1fr; } }
@media (max-width: 640px) { .stb-kpis { grid-template-columns: 1fr; } .stb-th { display:none; } .stb-tr { grid-template-columns: 1fr auto; gap: 7px 10px; padding: 13px 4px; } .stb-tr > :nth-child(2),.stb-tr > :nth-child(3),.stb-tr > :nth-child(5) { grid-column: 1 / -1; } .stb-tr > :nth-child(4) { grid-column: 2; grid-row: 1; } }

/* V15-Audit 18.08.: Tap-Ziele unter 44px, im 45-View-Lauf gemessen
   (rv-status-Select 36px, rv-vorschlag 15px, Hebel-Input 22px,
   btn-mini-Loeschknoepfe 40px). Selektoren = die echten Klassen. */
.rv-status, .rv-vorschlag { min-height: 44px; }
.rv-vorschlag { display: inline-flex; align-items: center; }
.hebel-view input, .hb-input, input[type="range"] { min-height: 44px; }
.btn-mini { min-height: 44px; min-width: 44px; }

/* V15-Audit 18.08.: Praesentations-Leaks in CEO/Morgenblick/Executive —
   die gemessenen Wert-/Kontaktklassen werden im Praesentationsmodus
   per bestehender Maskenmechanik unkenntlich (Blur + keine Selektion).
   Dieselbe Regel wie .present-mask, nur als Sammelselektor fuer die
   Alt-Views, die die Klasse nicht einzeln tragen. */
.presentation-mode .sig-wert-zahl, .presentation-mode .mb-wert,
.presentation-mode .mb-satz, .presentation-mode .mb-fuss,
.presentation-mode .radar-zahl, .presentation-mode .radar-signal,
.presentation-mode .q-sub, .presentation-mode .inv-nr,
.presentation-mode .dash-ah, .presentation-mode .cmd-aktion,
.presentation-mode .sg-person, .presentation-mode .sg-persontext {
  filter: blur(7px); user-select: none; pointer-events: none;
}

/* V15: Auf Touch-Breiten sind AUCH kompakte Knoepfe volle Tap-Ziele.
   Desktop behaelt die dichte Optik. */
@media(max-width:768px){
  .btn-sm{min-height:44px}
  .deep-toggle{min-height:44px;display:inline-flex;align-items:center;gap:8px}
}

/* V16 Growth-Funnel: Follow-Gate-Schalter im Flow-Editor. Die Checkbox
   liegt im >=44px-Label (WCAG-Tap-Ziel wie im V15-Audit etabliert). */
.sg-funnel-extra { display: grid; gap: 10px; margin-top: 14px; max-width: 720px; }
.sg-inline { display: flex; gap: 10px; align-items: flex-start; min-height: 44px;
  font-size: 13px; line-height: 1.45; color: var(--muted, #9aa89b); cursor: pointer; }
.sg-inline input[type="checkbox"] { width: 18px; height: 18px; min-height: 0;
  margin-top: 2px; flex: 0 0 auto; accent-color: #b8e834; }
.sg-funnel-extra input:not([type="checkbox"]) { min-height: 44px; }
/* Telefonbreiten: Tap-Ziel-Regel gilt fuer JEDES input (v11-Mobil-Abnahme
   misst roh, ohne Label-Ausnahme) — Checkbox waechst auf volle Trefferflaeche. */
@media (max-width: 768px) {
  .sg-inline input[type="checkbox"] { width: 40px; min-width: 40px; height: 40px; min-height: 40px; margin-top: 0; }
  .ce-auto-toggle input[type="checkbox"] { width: 40px; min-width: 40px; height: 40px; min-height: 40px; }
}
.sg-events .btn-sm { margin-left: auto; flex: 0 0 auto; }
/* Content-Provenienz: kompakt, mobil lesbar, ohne die Review-Karte zu verlaengern. */

/* V15.14 Operations-Cockpit: eine klare Gesamtantwort, darunter die
   einzelnen Beweisketten. Keine dekorative Ampelwand — gesunde Ketten
   bleiben ruhig, Warnung und Ausfall tragen den visuellen Akzent. */
.ops-cockpit{position:relative;overflow:hidden}
.ops-summary{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:20px;
  padding:18px;border:1px solid var(--line-soft);border-radius:16px;background:rgba(255,255,255,.018)}
.ops-summary h2{margin:0 0 5px;font-size:clamp(1.2rem,2vw,1.75rem)}
.ops-summary p{margin:0}
.ops-score{display:flex;align-items:baseline;gap:4px;min-width:104px;color:var(--lime)}
.ops-score strong{font:700 clamp(2rem,5vw,3.5rem)/1 var(--mono,monospace)}
.ops-score span{font:700 11px var(--mono,monospace);color:var(--muted)}
.ops-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:12px}
.ops-kette{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:5px 9px;align-items:center;
  min-width:0;padding:14px;border:1px solid var(--line-soft);border-radius:14px;background:var(--bg-elev)}
.ops-kette strong{min-width:0;overflow-wrap:anywhere;font-size:.9rem}
.ops-kette small{grid-column:2/-1;color:var(--muted);line-height:1.35}
.ops-dot{width:9px;height:9px;border-radius:50%;background:var(--muted-2);box-shadow:0 0 0 4px rgba(255,255,255,.035)}
.ops-state{font:700 10px var(--mono,monospace);text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.ops-kette.os-st-ok .ops-dot{background:var(--ok)}
.ops-kette.os-st-warn .ops-dot{background:var(--warn)}
.ops-kette.os-st-danger .ops-dot{background:var(--danger)}
.ops-foot{margin:12px 2px 0}
@media(max-width:980px){.ops-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:680px){.ops-grid{grid-template-columns:1fr}.ops-summary{grid-template-columns:1fr;gap:10px}.ops-score{min-width:0}}
.ce-provenance{border:1px solid var(--line);border-radius:14px;padding:12px 14px;background:color-mix(in srgb,var(--panel) 88%,transparent)}
.ce-provenance-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.ce-provenance-chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:9px}
.ce-provenance-chips span{font-size:12px;border:1px solid var(--line);border-radius:999px;padding:5px 9px;color:var(--muted)}
.ce-provenance-form{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:12px}
.ce-provenance-form label{display:grid;gap:5px;min-width:0}.ce-provenance-form label>span{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.ce-provenance-form>.btn{grid-column:1/-1;justify-self:start}
@media(max-width:700px){.ce-provenance-form{grid-template-columns:1fr}.ce-provenance-head{align-items:flex-start}.ce-provenance-head .btn{min-height:44px}}

/* Growth Studio: ehrlicher Live-Status, Pro-Matrix und gut scannbare Varianten. */
.sg-connect{margin:24px 0;padding:22px;border:1px solid color-mix(in srgb,var(--lime,#c9f24b) 28%,var(--line));border-radius:18px;background:linear-gradient(135deg,color-mix(in srgb,var(--lime,#c9f24b) 7%,var(--panel)),var(--panel))}
.sg-connect-head,.sg-sync{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.sg-connect h3{margin:4px 0 6px}.sg-sync{margin:14px 0;color:var(--muted);font-size:12px}.sg-sync strong{color:var(--text)}
.sg-pro-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}
.sg-pro{display:flex;gap:9px;align-items:flex-start;min-height:54px;padding:11px;border:1px solid var(--line);border-radius:12px;background:color-mix(in srgb,var(--panel) 88%,transparent)}
.sg-pro-dot{font-weight:800;color:var(--muted)}.sg-pro.is-on .sg-pro-dot{color:var(--lime,#c9f24b)}.sg-pro b{display:block;font-size:12px}.sg-pro small{display:block;margin-top:2px;color:var(--muted);line-height:1.35}
.sg-variant-editor{display:grid;gap:8px}.sg-variant-editor textarea{min-height:210px;line-height:1.5}.sg-variant-help{font-size:11px;line-height:1.45;color:var(--muted)}
@media(max-width:980px){.sg-pro-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.sg-connect{padding:16px}.sg-connect-head,.sg-sync{flex-direction:column}.sg-pro-grid{grid-template-columns:1fr}.sg-variant-editor textarea{min-height:260px}}

/* V17: visuelle Content- und Growth-Führung statt Formularwand. */
.ce-journey,.sg-map{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin:18px 0 22px}
.ce-journey-step,.sg-map-step{position:relative;display:grid;gap:5px;min-height:96px;padding:15px;border:1px solid var(--line);border-radius:16px;background:linear-gradient(150deg,color-mix(in srgb,var(--panel) 91%,transparent),color-mix(in srgb,var(--lime,#c9f24b) 5%,var(--panel)));overflow:hidden}
.ce-journey-step b,.sg-map-step b{font-size:13px}.ce-journey-step small,.sg-map-step small{color:var(--muted);font-size:11px;line-height:1.35}.ce-journey-no{font-size:10px;letter-spacing:.1em;color:var(--lime,#c9f24b)}
.sg-map-icon{font-size:24px}.sg-map-step i{position:absolute;right:-8px;top:36px;z-index:2;width:18px;height:18px;border-radius:999px;background:var(--lime,#c9f24b);color:#10130d;text-align:center;font-style:normal;font-weight:900}
.ce-create-card{border-radius:20px!important;border:1px solid color-mix(in srgb,var(--lime,#c9f24b) 22%,var(--line))!important}
.ce-growth-setup{display:grid;grid-template-columns:minmax(230px,1fr) minmax(160px,.55fr) minmax(240px,.8fr);gap:16px;align-items:end;margin:18px 0;padding:18px;border-radius:16px;background:color-mix(in srgb,var(--lime,#c9f24b) 6%,var(--panel));border:1px solid color-mix(in srgb,var(--lime,#c9f24b) 20%,var(--line))}
.ce-growth-setup h3{margin:4px 0}.ce-auto-toggle{display:flex;align-items:center;gap:10px;min-height:48px;padding:10px 12px;border:0;border-radius:12px;cursor:pointer;background:rgba(255,255,255,.022);box-shadow:inset 0 0 0 1px rgba(255,255,255,.07),inset 0 1px 3px rgba(0,0,0,.34);transition:box-shadow .16s ease}.ce-auto-toggle input{width:20px;height:20px;accent-color:var(--lime,#c9f24b)}.ce-auto-toggle>span{display:grid;gap:3px;min-width:0;line-height:1.35}.ce-auto-toggle strong,.ce-auto-toggle small{display:block}.ce-auto-toggle small{color:var(--muted)}.ce-keyword{text-transform:uppercase;font-weight:800;letter-spacing:.08em}
.ce-whatsapp-setup{display:grid;grid-template-columns:minmax(260px,1.2fr) minmax(210px,.75fr) minmax(150px,.55fr);gap:16px;align-items:end;margin:0 0 18px;padding:18px;border-radius:18px;background:linear-gradient(135deg,color-mix(in srgb,#25d366 12%,var(--panel)),color-mix(in srgb,var(--lime,#c9f24b) 4%,var(--panel)));border:1px solid color-mix(in srgb,#25d366 34%,var(--line));box-shadow:inset 0 1px 0 color-mix(in srgb,#fff 8%,transparent)}
.ce-whatsapp-copy h3{margin:5px 0 7px}.ce-whatsapp-copy p{margin:0 0 5px;line-height:1.5}.ce-whatsapp-copy small{color:var(--muted);line-height:1.45}.ce-whatsapp-proof{grid-column:1/-1;padding:11px 13px;border-radius:12px;background:color-mix(in srgb,#25d366 8%,var(--bg-2));border:1px solid color-mix(in srgb,#25d366 22%,var(--line));font-size:.86rem;line-height:1.6}
.ce-keyword-picks{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}.ce-keyword-picks button{min-height:32px;padding:4px 9px;border:1px solid var(--line);border-radius:999px;background:transparent;color:var(--muted);font:inherit;font-size:10px;font-weight:800;cursor:pointer}.ce-keyword-picks button.is-on{border-color:var(--lime,#c9f24b);background:color-mix(in srgb,var(--lime,#c9f24b) 12%,transparent);color:var(--text)}
.ce-workflow-goal{margin:16px 0;padding:16px;border:1px solid color-mix(in srgb,var(--lime,#c9f24b) 30%,var(--line));border-radius:15px;background:color-mix(in srgb,var(--lime,#c9f24b) 5%,var(--panel))}
.ce-workflow-goal .inp{font-weight:800}.ce-workflow-description{margin:8px 2px 0;color:var(--muted);font-size:12px;line-height:1.45}
.ce-workflow-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.ce-workflow-grid .field{min-width:0}
.ce-workflow-contract{grid-column:1/-1;display:flex;align-items:center;flex-wrap:wrap;gap:7px;padding-top:12px;border-top:1px solid var(--line);color:var(--muted);font-size:11px;line-height:1.4}
.ce-workflow-contract span{display:inline-flex;align-items:center;gap:4px}.ce-workflow-contract b{font-size:15px}
.ce-growth-setup select:disabled,.ce-workflow-grid select:disabled{opacity:.82;cursor:not-allowed}
.sc-journey{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin:18px 0}.sc-journey-step{position:relative;display:flex;gap:9px;align-items:center;min-height:68px;padding:12px;border:1px solid var(--line);border-radius:14px;background:color-mix(in srgb,var(--panel) 92%,var(--lime,#c9f24b) 8%)}.sc-journey-icon{font-size:22px}.sc-journey-step span:nth-child(2){display:grid;gap:3px}.sc-journey-step b{font-size:12px}.sc-journey-step small{color:var(--muted);font-size:10px}.sc-journey-step i{position:absolute;right:-9px;z-index:2;color:var(--lime,#c9f24b);font-style:normal;font-weight:900}
.sg-now{display:flex;justify-content:space-between;gap:20px;align-items:center;margin:0 0 22px;padding:18px 20px;border-radius:16px;background:color-mix(in srgb,var(--lime,#c9f24b) 7%,var(--panel));border-left:3px solid var(--lime,#c9f24b)}.sg-now>div:first-child{display:grid;gap:5px}.sg-now small{color:var(--muted)}.sg-now-key{display:grid;gap:4px;min-width:160px;text-align:right}.sg-now-key span{font-size:11px;color:var(--muted);text-transform:uppercase}.sg-now-key b{font-size:22px;color:var(--lime,#c9f24b)}
@media(max-width:1000px){.ce-journey,.sg-map,.sc-journey{grid-template-columns:repeat(3,minmax(0,1fr))}.ce-growth-setup{grid-template-columns:1fr 1fr}.ce-growth-setup>div:first-child{grid-column:1/-1}.ce-whatsapp-setup{grid-template-columns:1fr 1fr}.ce-whatsapp-copy{grid-column:1/-1}.ce-workflow-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.ce-journey,.sg-map,.sc-journey{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;padding-bottom:6px}.ce-journey-step,.sg-map-step,.sc-journey-step{min-width:150px;scroll-snap-align:start}.ce-growth-setup,.ce-whatsapp-setup,.ce-workflow-grid{grid-template-columns:1fr}.ce-growth-setup>div:first-child,.ce-whatsapp-copy{grid-column:auto}.sg-now{align-items:flex-start;flex-direction:column}.sg-now-key{text-align:left}.ce-keyword-picks button{min-height:44px}}
.cpos{margin:0 0 28px;padding:24px;border:1px solid var(--line);border-radius:24px;background:linear-gradient(145deg,rgba(190,255,0,.06),rgba(255,255,255,.02))}.cpos-live{font:700 11px/1.2 var(--font);letter-spacing:.08em;color:var(--lime)}.cpos-flow{display:grid;grid-template-columns:repeat(9,minmax(86px,1fr));gap:8px;margin:18px 0}.cpos-stage{position:relative;padding:13px 10px;border:1px solid var(--line);border-radius:14px;background:var(--card);text-align:center}.cpos-stage b{display:block;font-size:20px;color:var(--lime)}.cpos-stage span{font-size:11px;color:var(--muted)}.cpos-stage i{position:absolute;right:-9px;top:24px;color:var(--muted)}.cpos-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.cpos-grid article{display:flex;gap:12px;align-items:flex-start;padding:14px;border:1px solid var(--line);border-radius:16px;background:rgba(0,0,0,.12)}.cpos-grid article>span{font-size:22px}.cpos-grid b,.cpos-grid small{display:block}.cpos-grid small{margin-top:4px;color:var(--muted);line-height:1.35}@media(max-width:900px){.cpos-flow{display:flex;overflow-x:auto}.cpos-stage{min-width:104px}.cpos-grid{grid-template-columns:1fr}.cpos{padding:16px}}
.cagents{margin:0 0 18px;padding:24px;border:1px solid rgba(190,255,0,.28);border-radius:24px;background:radial-gradient(circle at 90% 0,rgba(190,255,0,.12),transparent 38%),var(--card)}.cagents-mode{font:800 11px/1 var(--font);letter-spacing:.09em;color:var(--lime)}.cagents-voice{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:17px 0;padding:14px 16px;border:1px solid var(--line);border-radius:16px;background:rgba(0,0,0,.14)}.cagents-voice b,.cagents-voice small{display:block}.cagents-voice small{margin-top:4px;color:var(--muted)}.cagents-voice>span{padding:7px 9px;border-radius:999px;font:800 10px/1 var(--font);letter-spacing:.07em}.cagents-voice .is-ready{color:var(--lime);background:rgba(190,255,0,.1)}.cagents-voice .is-warn{color:var(--warn);background:rgba(255,190,80,.1)}.cagents-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.cagent-card{display:flex;gap:11px;min-width:0;padding:14px;border:1px solid var(--line);border-radius:16px;background:rgba(0,0,0,.12)}.cagent-card>span{font-size:22px}.cagent-card b,.cagent-card small,.cagent-card em{display:block}.cagent-card small{margin-top:4px;color:var(--muted);line-height:1.3}.cagent-card em{margin-top:8px;color:var(--lime);font:700 10px/1.2 var(--font);font-style:normal;text-transform:uppercase}.cagent-card.voice_unverified em,.cagent-card.handoff_not_configured em{color:var(--warn)}.cagents-action{display:flex;align-items:flex-end;gap:10px;margin-top:16px}.cagents-action label{flex:1}.cagents-action label span{display:block;margin:0 0 6px;color:var(--muted);font-size:11px}.cagents-action select{width:100%;min-height:42px;padding:0 12px;border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--text)}.cagents-note{margin:12px 0 0;color:var(--lime);font-size:12px}@media(max-width:1000px){.cagents-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:620px){.cagents{padding:16px}.cagents-grid{grid-template-columns:1fr}.cagents-action{align-items:stretch;flex-direction:column}.cagents-action .btn{width:100%}}
.voice-studio{margin:0 0 18px;padding:16px;border:1px solid var(--line);border-radius:18px;background:rgba(0,0,0,.12)}.voice-studio-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px}.voice-studio-head b,.voice-studio-head small{display:block}.voice-studio-head small{margin-top:4px;color:var(--muted)}.voice-studio-actions,.voice-recording-actions{display:flex;gap:8px;flex-wrap:wrap}.voice-studio-actions label{cursor:pointer}.voice-recordings{display:grid;gap:10px;margin-top:14px}.voice-recordings article{padding:13px;border:1px solid var(--line);border-radius:14px;background:var(--card)}.voice-recording-meta{display:flex;align-items:center;justify-content:space-between;gap:12px}.voice-recording-meta small{color:var(--muted)}.voice-recordings textarea{width:100%;min-height:110px;margin:10px 0;padding:11px;border:1px solid var(--line);border-radius:11px;background:rgba(0,0,0,.16);color:var(--text);resize:vertical}.voice-profile-drafts{display:grid;gap:9px;margin-top:14px;padding:13px;border:1px solid color-mix(in srgb,var(--lime) 35%,var(--line));border-radius:14px;background:color-mix(in srgb,var(--lime) 7%,transparent)}.voice-profile-drafts>div{display:flex;align-items:center;justify-content:space-between;gap:12px}.btn-danger{border-color:var(--danger)!important;color:var(--danger)!important}@media(max-width:760px){.voice-studio-head{align-items:stretch;flex-direction:column}.voice-studio-actions{display:grid;grid-template-columns:1fr}.voice-studio-actions .btn{width:100%}.voice-recording-meta,.voice-profile-drafts>div{align-items:flex-start;flex-direction:column}.voice-profile-drafts .btn{width:100%}}

/* =====================================================================
   V15.54 · CRM-weites Layout-Audit
   ---------------------------------------------------------------------
   Gemessen in allen 51 Ansichten auf Desktop und auf Telefonbreite.
   Diese Schicht korrigiert wiederkehrende Engstellen zentral: getrennte
   Kacheln statt 1px-Kartenwaende, lesbare Kampagnen-/Quellentexte,
   vollwertige Tap-Ziele und ruhigere Abschnittsabstaende.               */
.view,.view-fade,.legacy-premium,.md-view,.sg,.rd{min-width:0}
.card{margin-bottom:18px}
.grid-2{gap:18px;margin-bottom:18px}
.card-head{row-gap:10px}

/* Listen und Kennzahlen brauchen sichtbare Zwischenraeume. */
.funnel{gap:12px;margin-block:18px}
.hb{gap:8px;margin-block:18px 12px}
.hb-l{max-width:none;overflow:visible;text-overflow:clip;white-space:normal}
.sk-kpis,.lex-fin-kpis{gap:10px;padding:0;border:0;background:transparent;overflow:visible}
.sk-kpi,.lex-fin-kpis>div{border:1px solid var(--line-soft);border-radius:12px;background:var(--bg-card)}
.sk-rows,.lex-fin-list{gap:10px}
.sk-row{gap:10px 16px;padding-block:12px}
.sysliste{gap:8px 24px}
.sys-zeile{padding-block:10px}

/* Produktdetails bleiben kompakt, kleben aber nicht mehr aneinander. */
.os-prod-grid{row-gap:8px}
.os-prod-grid>div{padding-block:8px}

/* Growth Studio und Content Engine: Module als einzelne, scannbare
   Schritte; Plattformaktionen sind auf Touch nicht mehr 34px klein. */
.sg-form,.sg-hooks,.sg-events{gap:10px;border:0;background:transparent}
.sg-field,.sg-hook,.sg-events>div{border:1px solid var(--line-soft);border-radius:12px}
.ce-journey-step,.sg-map-step{gap:8px}
.ce-prow{column-gap:10px;row-gap:8px;min-height:44px;padding:9px 10px}
.ce-prow-link{min-width:44px;min-height:44px;justify-content:center}
.ce-jc-act{line-height:1.25;white-space:normal;text-align:center}

/* Research-Quellen sind eigenstaendige Zeilen statt einer 1px-Matrix. */
.rd-quellenliste{gap:8px;padding:0;background:transparent}
.rd-quellenliste li{padding:12px 13px;border:1px solid var(--line-soft);border-radius:10px 3px 10px 3px}
.rd-quellenname{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere}

/* Das Kampagnen-Modul im Hauptdashboard darf Namen in zwei Zeilen zeigen. */
.dash-marketing-campaign{min-height:64px;padding-block:14px}
.dash-marketing-campaign-copy strong{white-space:normal;overflow:visible;text-overflow:clip;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:1.3}

/* Tabellen bleiben in ihrem eigenen, klar abgegrenzten Scrollbereich.
   Die Seite selbst bekommt dadurch nie horizontalen Ueberlauf. */
.table-wrap{max-width:100%;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}
.table-wrap>.tbl{min-width:max-content}

@media(max-width:680px){
  .content{padding-top:22px}
  .view-head{margin-bottom:20px}
  .card{padding:18px 16px;margin-bottom:16px}
  .grid-2{gap:14px;margin-bottom:16px}
  .topbar .present-toggle{width:44px;min-width:44px;flex:0 0 44px;padding-inline:0}
  .ce-prow-link,.ce-keyword-picks button,.rd-system-chip{min-height:44px}
  .funnel{gap:10px}.funnel-stufe{flex-basis:calc(50% - 5px)}
  .os-prod-grid{gap:8px}.os-prod-grid>div{padding:9px 0}
  .rd-kurzrelevanz{display:block;overflow:visible;-webkit-line-clamp:unset}
  .rd-meta{-webkit-line-clamp:3}
  .modal-head{padding:16px 18px}.modal-body{padding:20px 18px calc(110px + env(safe-area-inset-bottom))}
  .modal-foot{position:sticky;bottom:0;padding:14px 18px calc(14px + env(safe-area-inset-bottom));background:var(--bg-card);flex-wrap:wrap}
  .modal-foot .btn{flex:1 1 140px;min-height:48px}
}

/* ── Auto-Fix-Panel (Content Engine · Paket 2) ────────────────────
   Diff-Vorschau mit barrierefreier +/−-Kennzeichnung. Farbe ist nie
   das einzige Signal: jede Seite traegt ein Text-Tag ("− Original" /
   "+ Vorschlag"). Reduced Motion respektiert (keine Transition). */
.ce-autofix-trigger{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:10px 0}
.ce-autofix{border:1px solid var(--line,#2A2F2C);border-radius:12px;padding:14px;margin:12px 0;background:var(--bg-card,#141816)}
.ce-autofix-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.ce-autofix-plat{border-top:1px solid var(--line,#2A2F2C);padding-top:10px;margin-top:10px}
.ce-autofix-plat h5{margin:0 0 8px;font-size:.92rem}
.ce-autofix-fix{margin:10px 0;padding:10px;border-radius:8px;background:rgba(255,255,255,.02)}
.ce-autofix-check{display:flex;align-items:center;gap:8px;font-weight:600;font-size:.9rem;cursor:pointer}
.ce-autofix-badge{font-size:.72rem;padding:1px 7px;border-radius:5px;font-weight:600}
.ce-autofix-badge.is-safe{background:rgba(184,232,52,.16);color:var(--lime,#B8E834)}
.ce-autofix-badge.is-review{background:rgba(255,201,60,.16);color:var(--warn,#FFC93C)}
.ce-autofix-reason{color:var(--muted,#A8AC9C);font-size:.82rem;margin:6px 0}
.ce-autofix-diff{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
.ce-autofix-original,.ce-autofix-fixed{border-radius:6px;padding:8px;overflow:hidden}
.ce-autofix-original{background:rgba(255,107,74,.08);border:1px solid rgba(255,107,74,.25)}
.ce-autofix-fixed{background:rgba(184,232,52,.08);border:1px solid rgba(184,232,52,.25)}
.ce-autofix-tag{display:block;font-size:.72rem;font-weight:600;margin-bottom:4px;color:var(--muted,#A8AC9C)}
.ce-autofix-diff pre{white-space:pre-wrap;word-break:break-word;font-size:.8rem;margin:0;font-family:'SF Mono','Menlo',monospace;line-height:1.4}
.ce-autofix-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
@media (max-width:600px){.ce-autofix-diff{grid-template-columns:1fr}}

/* ── Nächster-Schritt-Banner (Content-Assistent · Paket 3) ────────
   Eine klare Hauptaktion je Zustand mit deutscher Erklärung. Lime-
   Rand nur, wenn der Beitrag auf den Nutzer wartet; sonst neutral. */
.ce-nextstep{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;
  border:1px solid var(--line,#2A2F2C);border-left:3px solid var(--muted,#A8AC9C);
  border-radius:10px;padding:12px 14px;margin:4px 0 12px;background:rgba(255,255,255,.02)}
.ce-nextstep.os-st-lime{border-left-color:var(--lime,#B8E834);background:rgba(184,232,52,.05)}
.ce-nextstep-txt{flex:1 1 240px}
.ce-nextstep-txt p{margin:4px 0 0;font-size:.9rem;color:var(--ink,#EDEAD5)}
.ce-nextstep-cta{flex:0 0 auto;min-height:44px}
@media (max-width:600px){.ce-nextstep-cta{width:100%}}

/* ═══════════════════════════════════════════════════════════════════
   Zustands- & Fehlersystem (Paket 9) — C.ui.Zustand
   Einheitlich fuer leer / laedt / verzoegert / Fehler / Erfolg.
   Toene aus nvx-ton-* (--ok/--warn/--danger/--muted). a11y + reduced-motion.
   ═══════════════════════════════════════════════════════════════════ */
.zx{ display:flex; flex-direction:column; gap:var(--s-3,12px);
  padding:var(--s-4,16px) var(--s-4,16px); border-radius:var(--r-3,14px);
  background:var(--bg-card,#12160f); border:1px solid var(--line,#2a2f24); }
.zx-kompakt{ padding:var(--s-2,8px) var(--s-3,12px); flex-direction:row; align-items:center; gap:var(--s-2,8px); }
.zx-sr{ position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0; }
.zx-ikon{ display:inline-flex; align-items:center; justify-content:center;
  width:34px; height:34px; flex:0 0 auto; border-radius:10px;
  color:var(--nvx-ton,var(--muted,#9AA39A));
  background:color-mix(in srgb, var(--nvx-ton,var(--muted)) 12%, transparent); }
.zx-ikon svg{ width:18px; height:18px; }
.zx-kompakt .zx-ikon{ width:24px; height:24px; border-radius:7px; }
.zx-kompakt .zx-ikon svg{ width:14px; height:14px; }
.zx-kurz{ margin:0; font-weight:650; color:var(--ink,#EDEADD); font-size:1rem; }
.zx-kompakt .zx-kurz{ font-size:.92rem; }
.zx-detail{ margin:2px 0 0; font-size:.9rem; line-height:1.45; }
.zx-kopf{ display:flex; align-items:center; gap:var(--s-3,12px); }
.zx-kopf .zx-ikon{ color:var(--nvx-ton,var(--danger)); background:color-mix(in srgb,var(--nvx-ton,var(--danger)) 14%,transparent); }
.zx-liste{ margin:0; display:grid; gap:var(--s-2,8px); }
.zx-liste > div{ display:grid; grid-template-columns:minmax(120px,26%) 1fr; gap:var(--s-3,12px); align-items:baseline; }
.zx-liste dt{ margin:0; font-size:.78rem; letter-spacing:.02em; text-transform:uppercase; color:var(--muted,#9AA39A); }
.zx-liste dd{ margin:0; font-size:.92rem; line-height:1.4; color:var(--ink,#EDEADD); }
.zx-fuss{ display:flex; flex-wrap:wrap; align-items:center; gap:var(--s-2,8px) var(--s-3,12px); margin-top:2px; }
.zx-auto{ display:inline-flex; align-items:center; gap:6px; font-size:.84rem; color:var(--nvx-ton,var(--warn)); }
.zx-auto svg{ width:14px; height:14px; }
.zx-ref{ margin-left:auto; font-variant-numeric:tabular-nums; letter-spacing:.04em; }
.zx-btn{ min-height:40px; }                          /* Touch-Ziel */
.zx-technik summary{ cursor:pointer; padding:4px 0; min-height:24px; }
.zx-technik summary:focus-visible{ outline:2px solid var(--lime,#B8E834); outline-offset:3px; border-radius:4px; }
.zx-pre{ margin:6px 0 0; padding:10px 12px; border-radius:10px; overflow-x:auto;
  background:var(--bg,#0d100b); border:1px solid var(--line,#2a2f24);
  font:12px/1.5 var(--mono,ui-monospace,monospace); color:var(--muted,#9AA39A); white-space:pre-wrap; word-break:break-word; }
/* Skeleton: feste Zeilenhoehe -> KEIN Layout-Sprung beim Ersetzen */
.zx-laedt{ gap:10px; }
.zx-skel{ height:14px; border-radius:7px;
  background:linear-gradient(90deg, color-mix(in srgb,var(--muted) 14%,transparent) 0%,
    color-mix(in srgb,var(--muted) 24%,transparent) 50%, color-mix(in srgb,var(--muted) 14%,transparent) 100%);
  background-size:200% 100%; animation:zx-shimmer 1.4s ease-in-out infinite; }
@keyframes zx-shimmer{ 0%{background-position:200% 0;} 100%{background-position:-200% 0;} }
@media (prefers-reduced-motion: reduce){
  .zx-skel{ animation:none; opacity:.5; }
}

/* Cockpit — "Wichtigste Veraenderung seit letztem Besuch" (Paket 1) */
.dash-seit{ display:flex; align-items:center; gap:var(--s-3,12px); padding:var(--s-3,12px) var(--s-4,16px);
  margin:0 0 var(--s-2,8px); border-radius:var(--r-3,14px);
  background:var(--bg-card,#12160f); border:1px solid var(--line,#2a2f24); }
.dash-seit--ok{ border-color:color-mix(in srgb,var(--ok,#57CC8B) 42%,var(--line)); }
.dash-seit--warn{ border-color:color-mix(in srgb,var(--warn,#F0B429) 48%,var(--line)); }
.dash-seit--info{ border-color:color-mix(in srgb,var(--info,#5B9BF2) 38%,var(--line)); }
.dash-seit-ikon{ display:inline-flex; align-items:center; justify-content:center; flex:0 0 auto;
  width:32px; height:32px; border-radius:9px; color:var(--muted,#9AA39A);
  background:color-mix(in srgb,var(--muted,#9AA39A) 14%,transparent); }
.dash-seit-ikon svg{ width:16px; height:16px; }
.dash-seit--ok .dash-seit-ikon{ color:var(--ok,#57CC8B); background:color-mix(in srgb,var(--ok,#57CC8B) 15%,transparent); }
.dash-seit--warn .dash-seit-ikon{ color:var(--warn,#F0B429); background:color-mix(in srgb,var(--warn,#F0B429) 15%,transparent); }
.dash-seit--info .dash-seit-ikon{ color:var(--info,#5B9BF2); background:color-mix(in srgb,var(--info,#5B9BF2) 15%,transparent); }
.dash-seit-body{ flex:1; min-width:0; }
.dash-seit-body .dash-lab{ display:block; font-size:.72rem; letter-spacing:.06em; text-transform:uppercase; color:var(--muted,#9AA39A); }
.dash-seit-text{ margin:2px 0 0; color:var(--ink,#EDEADD); font-size:.96rem; line-height:1.4; }
.dash-seit-text strong{ font-weight:650; }
.dash-seit-rest{ color:var(--muted,#9AA39A); font-weight:400; }
.dash-seit .dash-jump{ flex:0 0 auto; min-height:40px; }
@media (max-width:640px){ .dash-seit{ flex-wrap:wrap; } .dash-seit .dash-jump{ width:100%; } }

/* Kundenprofil-Zeitstrahl (Paket 6): Status-Badge + prominente naechste Aktion */
.kx-status-zeile { margin:0 0 var(--s-2,8px); }
.kx-status { display:inline-flex; align-items:center; padding:3px 10px; border-radius:999px;
  border:1px solid var(--muted,#9AA39A); color:var(--muted,#9AA39A);
  font-size:.76rem; font-weight:700; letter-spacing:.03em; text-transform:uppercase;
  background:color-mix(in srgb, currentColor 10%, transparent); }
.kx-next { display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 10px; width:100%;
  margin:0 0 var(--s-3,12px); padding:10px 12px; text-align:left; cursor:pointer;
  border:1px solid color-mix(in srgb,var(--lime,#B8E834) 40%,var(--line,#2a2f24));
  border-radius:var(--r-2,10px); background:color-mix(in srgb,var(--lime,#B8E834) 8%,transparent); }
.kx-next:hover { border-color:var(--lime,#B8E834); }
.kx-next:focus-visible { outline:2px solid var(--lime,#B8E834); outline-offset:2px; }
.kx-next-lab { font-size:.72rem; font-weight:700; letter-spacing:.05em; text-transform:uppercase; color:var(--lime,#B8E834); }
.kx-next-titel { font-weight:600; color:var(--ink,#EDEADD); }
.kx-next-beleg { font-size:.76rem; color:var(--muted,#9AA39A); margin-left:auto; }

/* Finance Center: bestätigter Umsatz (bezahlt) visuell von Prognose getrennt (Paket 8) */
.fc-kpi-bestaetigt { border-color:color-mix(in srgb, var(--ok,#57CC8B) 45%, var(--line,#2a2f24)); }
.fc-kpi-bestaetigt .fc-wert { color:var(--ok,#57CC8B); }
.fc-bestaetigt { display:inline-block; margin-left:6px; padding:1px 6px; border-radius:5px;
  font-size:.62rem; font-weight:800; letter-spacing:.04em; vertical-align:middle;
  color:var(--ok,#57CC8B); background:color-mix(in srgb,var(--ok,#57CC8B) 16%,transparent); }

/* Verbindungsassistent: Token-Wacht / ablaufende Autorisierung (Paket 7) */
.cw-token { display:flex; gap:10px; align-items:flex-start; margin:10px 0; padding:10px 12px; border-radius:10px;
  border:1px solid color-mix(in srgb, var(--nvx-ton,var(--muted,#9AA39A)) 35%, var(--line,#2a2f24));
  background:color-mix(in srgb,var(--nvx-ton,var(--muted,#9AA39A)) 8%,transparent); }
.cw-token-ic { color:var(--nvx-ton,var(--muted,#9AA39A)); flex:0 0 auto; display:inline-flex; }
.cw-token-ic svg { width:18px; height:18px; }
.cw-token-txt { display:flex; flex-direction:column; gap:2px; min-width:0; }
.cw-token-txt strong { color:var(--ink,#EDEADD); }

/* ═══ Kanalvorschauen (Paket 4) — markiert, nicht täuschend echt ═══ */
.kv-karte { background:var(--bg-card,#12160f); border:1px solid var(--line,#2a2f24); border-radius:14px;
  overflow:hidden; max-width:420px; display:flex; flex-direction:column; }
.kv-band { display:flex; align-items:center; justify-content:space-between; gap:8px;
  padding:7px 12px; background:color-mix(in srgb,var(--lime,#B8E834) 10%,transparent);
  border-bottom:1px solid var(--line,#2a2f24); }
.kv-band-kanal { font-weight:700; font-size:.82rem; color:var(--ink,#EDEADD); }
.kv-band-tag { font-size:.66rem; font-weight:800; letter-spacing:.05em; text-transform:uppercase;
  color:var(--lime,#B8E834); background:color-mix(in srgb,var(--lime,#B8E834) 15%,transparent);
  padding:2px 7px; border-radius:999px; }
.kv-medium { position:relative; display:flex; align-items:center; justify-content:center; min-height:150px;
  overflow:hidden; background:linear-gradient(135deg,#1a1f18,#12160f); color:var(--muted,#9AA39A); font-size:.8rem; text-align:center; }
.kv-medium-instagram { aspect-ratio:4/5; min-height:0; }
.kv-medium-asset { display:block; width:100%; height:100%; min-height:150px; object-fit:cover; }
.kv-medium-instagram .kv-medium-asset { position:absolute; inset:0; }
.kv-medium-status { position:absolute; inset:auto 10px 10px; display:inline-flex; align-items:center; justify-content:center;
  min-height:30px; padding:5px 10px; border:1px solid currentColor; border-radius:999px; font-size:.7rem; font-weight:800;
  letter-spacing:.035em; text-transform:uppercase; color:var(--warn,#F0B429); background:color-mix(in srgb,var(--bg,#0d100b) 88%,transparent); }
.kv-medium-status.is-approved { color:var(--ok,#57CC8B); }
.kv-medium-leer { opacity:.75; }
.kv-body { padding:12px 14px; }
.kv-head { display:flex; align-items:center; gap:9px; padding:12px 14px 0; }
.kv-ava { width:34px; height:34px; border-radius:50%; background:color-mix(in srgb,var(--lime,#B8E834) 30%,#333); flex:0 0 auto; }
.kv-absender { font-weight:650; color:var(--ink,#EDEADD); font-size:.9rem; }
.kv-text { margin:0; color:var(--ink,#EDEADD); font-size:.9rem; line-height:1.5; white-space:pre-wrap; word-break:break-word; }
.kv-mehr { color:var(--muted,#9AA39A); font-weight:600; }
.kv-tags { margin:6px 0 0; display:flex; flex-wrap:wrap; gap:5px; }
.kv-tag { color:var(--info,#5B9BF2); font-size:.82rem; }
.kv-cta-row, .kv-cta { margin-top:8px; }
.kv-cta { display:inline-block; padding:5px 12px; border-radius:8px; font-size:.82rem; font-weight:700;
  color:var(--bg,#0d100b); background:var(--lime,#B8E834); }
.kv-dm { padding:14px; }
.kv-dm-bubble { background:color-mix(in srgb,var(--info,#5B9BF2) 16%,transparent); border-radius:14px 14px 14px 4px; padding:10px 13px; max-width:85%; }
.kv-dm-cta { margin-top:6px; }
.kv-guide { display:flex; align-items:center; gap:12px; padding:14px; }
.kv-guide-ic { width:44px; height:44px; flex:0 0 auto; border-radius:10px; display:flex; align-items:center; justify-content:center;
  color:var(--lime,#B8E834); background:color-mix(in srgb,var(--lime,#B8E834) 14%,transparent); }
.kv-guide-ic svg { width:22px; height:22px; }
.kv-guide-txt strong { color:var(--ink,#EDEADD); display:block; }
.kv-guide-cta { margin-top:6px; }
.kv-fuss { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:8px 14px;
  border-top:1px solid var(--line,#2a2f24); }
.kv-count { font-size:.76rem; color:var(--muted,#9AA39A); font-variant-numeric:tabular-nums; }
.kv-count-warn { color:var(--danger,#E85D4F); font-weight:700; }
.kv-format { font-size:.72rem; }
.kv-warn { margin:0; padding:8px 14px 12px; list-style:none; display:flex; flex-direction:column; gap:5px; }
.kv-warn li { display:flex; align-items:flex-start; gap:7px; font-size:.8rem; color:var(--warn,#F0B429); }
.kv-warn li svg { width:14px; height:14px; flex:0 0 auto; margin-top:1px; }

/* Content-Assistent: Auto-Save-Entwurf-Hinweis (Paket 3) */
.ce-entwurf-hinweis { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap;
  margin:8px 0 4px; padding:8px 12px; border-radius:10px; font-size:.86rem;
  color:var(--ink,#EDEADD); background:color-mix(in srgb,var(--info,#5B9BF2) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--info,#5B9BF2) 30%,var(--line,#2a2f24)); }

/* ═══ Content-Engine: Dubletten-Hinweis · Archiv · Kanalvorschauen ═══ */
/* Dubletten-Band: aufklappbarer Hinweis oben in der Content-Engine. */
.ce-dup { margin:0 0 16px; border:1px solid var(--warn,#F0B429); border-radius:14px;
  background:color-mix(in srgb,var(--warn,#F0B429) 10%,var(--bg-card,#12160f)); }
.ce-dup-head { display:flex; align-items:center; gap:10px; width:100%; min-height:48px; padding:12px 16px;
  background:transparent; border:0; color:var(--ink,#EDEADD); font:inherit; cursor:pointer; text-align:left; }
.ce-dup-head strong { flex:1 1 auto; font-size:.92rem; }
.ce-dup-head > svg { width:18px; height:18px; color:var(--warn,#F0B429); flex:0 0 auto; }
.ce-dup-chev { display:inline-flex; color:var(--muted,#9AA39A); }
.ce-dup-list { padding:4px 16px 16px; display:flex; flex-direction:column; gap:12px; }
.ce-dup-pair { border:1px solid var(--line,#2a2f24); border-radius:10px; padding:12px;
  background:var(--bg-card,#12160f); display:flex; flex-direction:column; gap:8px; }
.ce-dup-pair-head { display:flex; flex-wrap:wrap; align-items:baseline; gap:8px; }
.ce-dup-score { font-weight:800; color:var(--warn,#F0B429); font-size:.8rem; }
.ce-dup-gruende { color:var(--muted,#9AA39A); font-size:.8rem; }
.ce-dup-jobs { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr)); gap:8px; }
.ce-dup-job { display:flex; flex-direction:column; gap:2px; align-items:flex-start; text-align:left;
  min-height:48px; padding:8px 10px; border:1px solid var(--line-soft,rgba(237,234,221,.07)); border-radius:10px;
  background:var(--bg-2,#0F1411); color:var(--ink,#EDEADD); cursor:pointer; }
.ce-dup-job:hover { border-color:var(--line-lime,rgba(184,232,52,.45)); }
.ce-dup-tag { font-size:.66rem; font-weight:800; letter-spacing:.05em; text-transform:uppercase; color:var(--muted,#9AA39A); }
.ce-dup-job strong { font-size:.86rem; }
.ce-dup-job small { color:var(--muted,#9AA39A); font-size:.76rem; }
.ce-dup-diff { margin:0; padding-left:18px; color:var(--muted,#9AA39A); font-size:.78rem; display:flex; flex-direction:column; gap:2px; }
.ce-dup-actions { display:flex; gap:8px; }
/* Archiv-Umschalter im Board + Grund-Feld im Archiv-Dialog. */
.ce-archive-toggle { align-self:flex-start; }
.ce-archive-reason { width:100%; resize:vertical; }
/* Kanalvorschauen: responsives Raster, nie schmaler als lesbar. */
.ce-kv-vorschau { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr)); gap:18px; margin:18px 0; }
.ce-kv-vorschau .kv-karte { width:100%; max-width:none; }
@media (max-width:720px){ .ce-kv-vorschau { grid-template-columns:1fr; } }

/* ═══ Automations-Live-Ablaufdiagramm (Paket 5) ═══ */
.sg-ablauf { display:flex; flex-direction:column; gap:10px; }
.sg-ablauf-sum { margin:0; font-size:.86rem; color:var(--ink,#EDEADD); font-weight:600; }
.sg-ablauf-band { display:flex; flex-wrap:wrap; gap:10px; align-items:stretch; }
.sg-node { position:relative; flex:1 1 150px; min-width:150px; padding:11px 13px; border-radius:12px;
  background:var(--bg-card,#12160f); border:1px solid var(--line,#2a2f24); display:flex; flex-direction:column; gap:3px; }
.sg-node-dot { width:9px; height:9px; border-radius:50%; background:var(--muted,#9AA39A); }
.sg-node-ok .sg-node-dot { background:var(--ok,#57CC8B); }
.sg-node-warten .sg-node-dot { background:var(--warn,#F0B429); }
.sg-node-danger .sg-node-dot { background:var(--danger,#E85D4F); }
.sg-node-danger { border-color:color-mix(in srgb,var(--danger,#E85D4F) 40%,var(--line,#2a2f24)); }
.sg-node-label { font-size:.82rem; color:var(--ink,#EDEADD); }
.sg-node-n { font-size:1.35rem; font-weight:700; color:var(--ink,#EDEADD); font-variant-numeric:tabular-nums; }
.sg-node-status { font-size:.68rem; font-weight:600; color:var(--muted,#9AA39A); }
.sg-node small { font-size:.72rem; color:var(--muted,#9AA39A); }
.sg-node-rt { color:var(--lime,#B8E834) !important; }
.sg-node-diag { color:var(--danger,#E85D4F) !important; display:flex; gap:4px; align-items:flex-start; }
.sg-node-diag svg { width:12px; height:12px; flex:0 0 auto; margin-top:1px; }
.sg-node-arrow { position:absolute; right:-11px; top:50%; transform:translateY(-50%); color:var(--muted,#9AA39A); font-style:normal; z-index:1; }
.sg-node-retry { margin-top:5px; align-self:flex-start; min-height:40px; }
.sg-ablauf-audit { align-self:flex-start; display:inline-flex; align-items:center; min-height:40px; padding:4px 2px; }
@media (max-width:640px){ .sg-ablauf-band { flex-direction:column; } .sg-node-arrow { display:none; } }
/* Website-Monitoring: visuell, responsiv, im bestehenden CRM-Raster. */
.wm-monitor{margin-top:20px;padding-top:18px;border-top:1px solid var(--line)}
.wm-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}.wm-head h3{margin:0 0 4px}
.wm-funnel{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin:14px 0}.wm-funnel-step{position:relative;overflow:hidden;min-height:76px;padding:12px;border:1px solid var(--line);border-radius:14px;background:var(--bg-2)}.wm-funnel-step span,.wm-funnel-step b{position:relative;z-index:1;display:block}.wm-funnel-step span{font-size:.76rem;color:var(--muted)}.wm-funnel-step b{font-size:1.5rem;margin-top:4px}.wm-funnel-step i{position:absolute;left:0;bottom:0;height:4px;background:var(--lime);border-radius:0 8px 8px 0}
.wm-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.wm-panel{padding:13px;border:1px solid var(--line);border-radius:14px}.wm-panel h4{margin:0 0 9px}.wm-rank{display:flex;justify-content:space-between;gap:8px;padding:6px 0;border-bottom:1px solid var(--line)}.wm-rank:last-child{border:0}.wm-rank span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wm-vitals{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin:12px 0}.wm-vitals div{padding:10px;border-radius:12px;background:var(--bg-2)}.wm-vitals span,.wm-vitals strong{display:block}.wm-vitals span{font-size:.72rem;color:var(--muted)}
.wm-suggestions{margin-top:16px}.wm-suggestion{display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center;padding:14px;margin-top:9px;border:1px solid color-mix(in srgb,var(--lime) 28%,var(--line));border-radius:15px;background:linear-gradient(135deg,color-mix(in srgb,var(--lime) 7%,transparent),transparent)}.wm-suggestion h4,.wm-suggestion p{margin:4px 0}.wm-priority{font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--lime);font-weight:800}
@media(max-width:820px){.wm-funnel{grid-template-columns:1fr 1fr}.wm-grid{grid-template-columns:1fr 1fr}.wm-vitals{grid-template-columns:repeat(2,1fr)}.wm-suggestion{grid-template-columns:1fr}.wm-suggestion .btn{width:100%}}
@media(max-width:480px){.wm-grid{grid-template-columns:1fr}.wm-head{display:block}.wm-head .chip{display:inline-flex;margin-top:8px}}

/* Agenten-Zentrale: ein sichtbarer Einstieg statt Agenten tief im Growth Studio. */
.agent-center{max-width:1280px;margin:0 auto;padding:4px 0 28px}.agent-center-head,.agent-center-section-title{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin:0 0 20px}.agent-center-head h1{margin:5px 0 8px;font-size:clamp(2rem,4vw,3.6rem);line-height:1}.agent-center-head p{max-width:680px;margin:0;color:var(--muted);font-size:1rem;line-height:1.55}.agent-center-core{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:32px}.agent-core-card{display:flex;flex-direction:column;align-items:flex-start;min-height:250px;padding:20px;border:1px solid var(--line);border-radius:20px;background:linear-gradient(145deg,rgba(255,255,255,.035),rgba(255,255,255,.01)),var(--card)}.agent-core-card.is-live{border-color:rgba(190,255,0,.28)}.agent-core-card.is-guarded{border-style:dashed}.agent-core-icon{display:grid;place-items:center;width:44px;height:44px;margin-bottom:22px;border-radius:14px;background:rgba(190,255,0,.1);color:var(--lime);font-size:22px}.agent-core-card>div{flex:1}.agent-core-card b{font-size:1.05rem}.agent-core-card p{margin:8px 0 12px;color:var(--muted);line-height:1.5}.agent-state{font:800 10px/1 var(--font);letter-spacing:.08em;color:var(--lime)}.agent-core-card.is-guarded .agent-state{color:var(--warn)}.agent-core-card .btn{min-height:44px;margin-top:18px}.agent-center-section-title{align-items:flex-end}.agent-center-section-title h2{margin:5px 0 0}.agent-center-trust{padding:14px 16px;border-left:3px solid var(--lime);color:var(--muted);background:rgba(190,255,0,.045)}
@media(max-width:960px){.agent-center-core{grid-template-columns:1fr 1fr}.agent-center-core .agent-core-card:last-child{grid-column:1/-1}}
@media(max-width:620px){.agent-center-head,.agent-center-section-title{display:block}.agent-center-head>.cagents-mode{display:inline-block;margin-top:14px}.agent-center-core{grid-template-columns:1fr}.agent-center-core .agent-core-card:last-child{grid-column:auto}.agent-core-card{min-height:0}.agent-center-section-title .btn{width:100%;margin-top:14px}}
.agent-capabilities{margin:0 0 36px}.agent-capabilities .agent-center-section-title p{max-width:720px;margin:7px 0 0;color:var(--muted);line-height:1.55}.ac-flow{position:relative;display:flex;align-items:center;gap:10px;margin:0 0 16px;padding:14px 16px;border:1px solid color-mix(in srgb,var(--lime) 24%,var(--line));border-radius:16px;background:linear-gradient(90deg,color-mix(in srgb,var(--lime) 7%,var(--card)),var(--card));overflow:hidden}.ac-flow>span{font-size:.75rem;font-weight:800;white-space:nowrap}.ac-flow>i{position:relative;display:block;flex:1;height:1px;background:color-mix(in srgb,var(--lime) 34%,var(--line))}.ac-flow>i:after{content:"";position:absolute;top:-3px;left:0;width:7px;height:7px;border-radius:50%;background:var(--lime);box-shadow:0 0 14px color-mix(in srgb,var(--lime) 80%,transparent);animation:ac-travel 3.2s linear infinite}.ac-flow>i:nth-of-type(2):after{animation-delay:-1.05s}.ac-flow>i:nth-of-type(3):after{animation-delay:-2.1s}.ac-flow small{position:absolute;right:12px;bottom:3px;color:var(--muted);font-size:.55rem;font-weight:800;letter-spacing:.09em}.ac-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.ac-card{display:flex;flex-direction:column;min-height:310px;padding:19px;border:1px solid var(--line);border-radius:19px;background:linear-gradient(150deg,rgba(190,255,0,.045),transparent 46%),var(--card)}.ac-card-top{display:flex;align-items:center;justify-content:space-between}.ac-icon{display:grid;width:40px;height:40px;place-items:center;border-radius:13px;background:color-mix(in srgb,var(--lime) 11%,var(--card));color:var(--lime);font-size:20px}.ac-ready{font-size:.58rem;font-weight:900;letter-spacing:.08em}.ac-ready.is-ready{color:var(--lime)}.ac-ready.is-gated{color:var(--warn)}.ac-card>small{margin-top:16px;color:var(--muted);font-size:.67rem;text-transform:uppercase;letter-spacing:.08em}.ac-card h3{margin:5px 0 8px;font-size:1.08rem}.ac-card>p{margin:0;color:var(--muted);line-height:1.5}.ac-card-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto;padding-top:18px}.ac-card-foot>span{color:var(--muted);font-size:.73rem}.ac-card-foot .btn{min-height:40px;font-size:.72rem}.ac-inline{display:grid;gap:8px;margin-top:13px;padding-top:13px;border-top:1px solid var(--line)}.ac-inline label{display:grid;gap:4px;color:var(--muted);font-size:.68rem}.ac-inline input{min-width:0;padding:8px 9px;border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--text)}.ac-preview{display:grid;gap:7px;margin-top:12px;padding:10px;border:1px solid color-mix(in srgb,var(--lime) 20%,var(--line));border-radius:10px;background:color-mix(in srgb,var(--lime) 4%,var(--bg))}.ac-preview p{margin:0;color:var(--muted);font-size:.72rem;line-height:1.45}@keyframes ac-travel{0%{left:0;opacity:0}10%{opacity:1}90%{opacity:1}100%{left:calc(100% - 7px);opacity:0}}@media(max-width:1080px){.ac-grid{grid-template-columns:1fr 1fr}}@media(max-width:680px){.ac-grid{grid-template-columns:1fr}.ac-card{min-height:0}.ac-flow{display:grid;grid-template-columns:1fr 20px 1fr 20px 1fr 20px 1fr;gap:5px;overflow-x:auto}.ac-flow>span{font-size:.6rem}.ac-flow small{display:block;position:static;grid-column:1/-1;text-align:right}}@media(prefers-reduced-motion:reduce){.ac-flow>i:after{animation:none;left:50%}}

/* V15.80 · Agenten als verständliche Arbeitszentrale statt enger Formularzeile. */
.cagents-intro{max-width:72ch;margin:8px 0 22px;color:var(--muted);font-size:.95rem;line-height:1.65}.cagents-layout{display:grid;grid-template-columns:minmax(280px,.78fr) minmax(420px,1.22fr);gap:18px;align-items:start}.cagents-layout .cagents-grid{grid-template-columns:1fr 1fr;gap:10px}.cagent-card{width:100%;color:var(--text);font:inherit;text-align:left;cursor:pointer;transition:transform 180ms cubic-bezier(.23,1,.32,1),border-color 180ms ease,background 180ms ease}.cagent-card:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--lime) 35%,var(--line))}.cagent-card:focus-visible{outline:2px solid var(--lime);outline-offset:3px}.cagent-card.is-selected{border-color:var(--lime);background:color-mix(in srgb,var(--lime) 9%,var(--card));box-shadow:inset 3px 0 0 var(--lime)}.cagent-icon{display:grid;place-items:center;flex:0 0 38px;width:38px;height:38px;border-radius:11px;background:color-mix(in srgb,var(--lime) 10%,transparent)}
.cagent-workbench{min-height:100%;padding:24px;border:1px solid color-mix(in srgb,var(--lime) 34%,var(--line));border-radius:22px;background:radial-gradient(circle at 88% 6%,color-mix(in srgb,var(--lime) 12%,transparent),transparent 36%),var(--bg-2)}.cagent-workbench header{max-width:62ch;padding-bottom:20px}.cagent-workbench h3{margin:5px 0 8px;font-size:clamp(1.45rem,2.5vw,2.15rem);letter-spacing:-.025em}.cagent-workbench header p{margin:0;color:var(--muted);line-height:1.55}.cagent-workbench-kicker,.cagent-stage-no{color:var(--lime);font-size:.68rem;font-weight:800;letter-spacing:.12em}.cagent-workbench-grid{display:grid;grid-template-columns:1fr;gap:9px}.cagent-workbench-grid section{position:relative;padding:16px 16px 17px 48px;border:1px solid var(--line);border-radius:14px;background:color-mix(in srgb,var(--card) 88%,transparent)}.cagent-workbench-grid section:before{content:"";position:absolute;left:26px;top:41px;bottom:-14px;width:1px;background:var(--line)}.cagent-workbench-grid section:last-child:before{display:none}.cagent-stage-no{position:absolute;left:14px;top:17px}.cagent-workbench-grid b{display:block;margin-bottom:6px}.cagent-workbench-grid p{margin:0;color:var(--muted);line-height:1.5}.cagent-workbench ol{display:grid;gap:8px;margin:9px 0 0;padding:0;list-style:none}.cagent-workbench li{display:flex;align-items:center;gap:9px;color:var(--muted)}.cagent-workbench li i{width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:var(--lime);box-shadow:0 0 0 0 color-mix(in srgb,var(--lime) 30%,transparent);animation:cagent-pulse 2.4s ease-out infinite;animation-delay:calc(var(--agent-step) * 280ms)}.cagent-workbench footer{display:flex;align-items:center;gap:9px;margin-top:16px;color:var(--muted);font-size:.76rem;line-height:1.4}.cagent-live-dot{width:8px;height:8px;flex:0 0 auto;border-radius:50%;background:var(--lime)}
.cagent-algorithm-advice{display:grid;gap:9px;margin-top:14px}.cagent-algorithm-advice article{display:grid;grid-template-columns:minmax(90px,.6fr) 1fr;gap:5px 14px;padding:13px 15px;border:1px solid var(--line);border-radius:14px;background:color-mix(in srgb,var(--lime) 5%,var(--card))}.cagent-algorithm-advice article>b{color:var(--lime);text-transform:capitalize}.cagent-algorithm-advice article>strong{font-size:.95rem}.cagent-algorithm-advice article>p,.cagent-algorithm-advice article>small{grid-column:1/-1;margin:0;color:var(--muted);line-height:1.45}.cagent-algorithm-advice>small{color:var(--muted)}
.cagents-launch{display:grid;grid-template-columns:minmax(240px,1fr) minmax(280px,1fr) auto;gap:20px;align-items:end;margin-top:24px;padding:22px;border:1px solid var(--line);border-radius:18px;background:color-mix(in srgb,var(--lime) 5%,var(--card))}.cagents-launch h3{margin:5px 0 7px}.cagents-launch p{max-width:54ch;margin:0;color:var(--muted);line-height:1.5}.cagents-launch label>span,.cagents-launch-submit>span{display:block;margin-bottom:8px;color:var(--text);font-size:.78rem;font-weight:700}.cagents-launch label small{display:block;margin-top:7px;color:var(--muted);line-height:1.4}.cagents-launch select{width:100%;min-height:48px;padding:0 14px;border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--text)}.cagents-launch-submit .btn{min-height:48px;white-space:nowrap}@keyframes cagent-pulse{0%,55%,100%{box-shadow:0 0 0 0 transparent;transform:scale(.9);opacity:.55}18%{box-shadow:0 0 0 7px transparent;transform:scale(1);opacity:1}}
@media(max-width:1080px){.cagents-layout{grid-template-columns:1fr}.cagents-layout .cagents-grid{grid-template-columns:repeat(4,1fr)}.cagents-launch{grid-template-columns:1fr 1fr}.cagents-launch>div:first-child{grid-column:1/-1}}@media(max-width:760px){.cagents-layout .cagents-grid{grid-template-columns:1fr 1fr}.cagents-launch{grid-template-columns:1fr}.cagents-launch>div:first-child{grid-column:auto}.cagents-launch-submit .btn{width:100%}}@media(max-width:520px){.cagents{padding:18px 14px}.cagents-layout .cagents-grid{grid-template-columns:1fr}.cagent-workbench{padding:18px 14px}.cagent-workbench-grid section{padding-left:44px}.cagents-launch{padding:17px 14px}.cagent-card{min-height:82px}}
@media(prefers-reduced-motion:reduce){.cagent-card{transition:none}.cagent-card:hover{transform:none}.cagent-workbench li i{animation:none}}

/* V15.82 · Ausgangsbeitrag als klarer, lesbarer Arbeitsschritt. */
.cagents-launch{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:20px;padding:clamp(20px,2.4vw,30px)}
.cagents-launch>div:first-child{grid-column:auto}
.cagents-launch>div:first-child p{max-width:72ch}
.cagents-source-field{display:grid;gap:11px;min-width:0}
.cagents-launch .cagents-field-label{display:flex;margin:0;align-items:center;gap:12px;font-size:inherit}
.cagents-field-label>b{display:grid;place-items:center;flex:0 0 36px;width:36px;height:36px;border:1px solid color-mix(in srgb,var(--lime) 65%,var(--line));border-radius:50%;background:color-mix(in srgb,var(--lime) 12%,var(--card));color:var(--lime);font-size:.88rem}
.cagents-field-label>span{display:grid;gap:3px;min-width:0}
.cagents-field-label strong{font-size:1rem;line-height:1.25}
.cagents-launch .cagents-field-label small{margin:0;color:var(--muted);font-size:.78rem;font-weight:500;line-height:1.4}
.cagents-launch .cagents-select-wrap{position:relative;display:block;margin:0}
.cagents-launch .cagents-select-wrap select{width:100%;min-height:60px;padding:0 58px 0 18px;appearance:none;border:1px solid color-mix(in srgb,var(--lime) 52%,var(--line));border-radius:14px;background:color-mix(in srgb,var(--card) 92%,black);color:var(--text);font:700 1rem/1.25 var(--font);box-shadow:0 8px 24px rgba(0,0,0,.16);cursor:pointer}
.cagents-launch .cagents-select-wrap select:hover{border-color:var(--lime)}
.cagents-launch .cagents-select-wrap select:focus-visible{outline:3px solid color-mix(in srgb,var(--lime) 38%,transparent);outline-offset:2px;border-color:var(--lime)}
.cagents-select-chevron{position:absolute;right:18px;top:50%;display:grid!important;place-items:center;width:28px;height:28px;margin:0!important;transform:translateY(-50%);border-radius:9px;background:color-mix(in srgb,var(--lime) 14%,transparent);color:var(--lime)!important;font-size:1.25rem!important;line-height:1;pointer-events:none}
.cagents-source-card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px 16px;align-items:center;padding:17px 18px;border:1px solid color-mix(in srgb,var(--lime) 32%,var(--line));border-radius:15px;background:linear-gradient(135deg,color-mix(in srgb,var(--lime) 8%,var(--card)),var(--card))}
.cagents-source-kicker{grid-column:1/-1;color:var(--lime);font-size:.65rem;font-weight:800;letter-spacing:.12em}
.cagents-source-card>strong{min-width:0;color:var(--text);font-size:clamp(1rem,2vw,1.16rem);line-height:1.4;overflow-wrap:anywhere}
.cagents-source-status{justify-self:end;padding:7px 10px;border-radius:999px;background:color-mix(in srgb,var(--lime) 13%,transparent);color:var(--lime);font-size:.72rem;font-weight:800;white-space:nowrap}
.cagents-source-card p{grid-column:1/-1;max-width:none;margin:2px 0 0;color:var(--muted);font-size:.82rem;line-height:1.5}
.cagents-launch-submit{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px;align-items:center;padding-top:18px;border-top:1px solid var(--line)}
.cagents-launch .cagents-launch-submit>span{margin:0;font-size:.82rem}
.cagents-launch-submit .btn{min-height:52px;padding-inline:22px}
@media(max-width:760px){.cagents-source-card{grid-template-columns:1fr}.cagents-source-kicker,.cagents-source-card p{grid-column:auto}.cagents-source-status{justify-self:start}.cagents-launch-submit{grid-template-columns:1fr}.cagents-launch-submit .btn{width:100%;white-space:normal}}
.ops-agents{margin:26px 0;padding:22px;border:1px solid color-mix(in srgb,var(--lime) 20%,var(--line));border-radius:22px;background:linear-gradient(145deg,color-mix(in srgb,var(--lime) 4%,var(--card)),var(--card))}.ops-agent-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:18px 0}.ops-agent-card{min-width:0;padding:14px;border:1px solid var(--line);border-radius:15px;background:rgba(0,0,0,.13)}.ops-agent-card>span{display:grid;place-items:center;width:32px;height:32px;margin-bottom:12px;border-radius:10px;background:color-mix(in srgb,var(--lime) 12%,transparent);color:var(--lime);font-size:18px}.ops-agent-card b,.ops-agent-card p,.ops-agent-card small{display:block}.ops-agent-card p{min-height:52px;margin:7px 0;color:var(--muted);font-size:12px;line-height:1.45}.ops-agent-card small{color:var(--lime);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.ops-health-strip{display:flex;flex-wrap:wrap;gap:7px;margin:14px 0}.ops-health{display:inline-flex;align-items:center;gap:7px;padding:7px 10px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:11px}.ops-health i{width:7px;height:7px;border-radius:50%;background:var(--muted)}.ops-health.healthy i{background:var(--lime);box-shadow:0 0 9px color-mix(in srgb,var(--lime) 70%,transparent)}.ops-health.down i{background:var(--danger)}.ops-health.degraded i,.ops-health.not_configured i,.ops-health.stale i{background:var(--orange)}.ops-agent-results{display:grid;grid-template-columns:1fr 1fr;gap:10px}.ops-agent-results article,.ops-repair-preview{padding:15px;border:1px solid var(--line);border-radius:14px;background:rgba(0,0,0,.12)}.ops-agent-results p,.ops-agent-results ul,.ops-repair-preview p{margin:8px 0 0;color:var(--muted);font-size:12px;line-height:1.55}.ops-agent-actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:12px}.ops-repair-preview{margin-top:12px;border-color:color-mix(in srgb,var(--lime) 32%,var(--line))}.ops-repair-preview .btn{margin-top:12px}@media(max-width:1100px){.ops-agent-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:760px){.ops-agents{padding:16px}.ops-agent-grid{grid-template-columns:1fr}.ops-agent-card p{min-height:0}.ops-agent-results{grid-template-columns:1fr}.ops-agent-actions{display:grid}.ops-agent-actions .btn{width:100%}}
.cagents-method{display:grid;grid-template-columns:minmax(220px,.75fr) minmax(320px,1.25fr);gap:18px;margin:18px 0;padding:18px;border:1px solid color-mix(in srgb,var(--lime) 32%,var(--line));border-radius:17px;background:color-mix(in srgb,var(--lime) 6%,var(--card))}.cagents-method h3{margin:5px 0 6px}.cagents-method p{margin:0;color:var(--muted);line-height:1.5}.cagents-method ul{display:flex;flex-wrap:wrap;align-content:center;gap:8px;margin:0;padding:0;list-style:none}.cagents-method li{padding:8px 10px;border:1px solid var(--line);border-radius:999px;background:rgba(0,0,0,.14);font-size:.76rem;font-weight:700}.skillintel-lifecycle{padding:5px 8px;border-radius:999px;background:color-mix(in srgb,var(--lime) 12%,transparent);color:var(--lime);font-size:.7rem;font-weight:800}@media(max-width:760px){.cagents-method{grid-template-columns:1fr}.cagents-method ul{display:grid}.cagents-method li{border-radius:11px}}
.creatorintel-page{display:grid;gap:20px}.creatorintel-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px}.creatorintel-head h1{margin:6px 0}.creatorintel-head p{max-width:72ch;margin:0;color:var(--muted);line-height:1.55}.creatorintel-safety{display:flex;flex-wrap:wrap;gap:10px 18px;padding:14px 16px;border:1px solid color-mix(in srgb,var(--lime) 36%,var(--line));border-radius:14px;background:color-mix(in srgb,var(--lime) 6%,var(--card))}.creatorintel-safety strong{color:var(--lime)}.creatorintel-layout{display:grid;grid-template-columns:minmax(280px,.75fr) minmax(420px,1.25fr);gap:18px;align-items:start}.creatorintel-panel{padding:20px;border:1px solid var(--line);border-radius:18px;background:var(--card)}.creatorintel-panel h2{margin:6px 0 16px}.creatorintel-panel form{display:grid;gap:12px}.creatorintel-panel label{display:grid;gap:6px;color:var(--muted);font-size:.78rem;font-weight:700}.creatorintel-panel input,.creatorintel-panel select{width:100%;min-height:46px;padding:0 12px;border:1px solid var(--line);border-radius:11px;background:var(--bg);color:var(--text)}.creatorintel-sources,.creatorintel-evidence{display:grid;gap:10px;margin-top:18px}.creatorintel-sources article{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;border:1px solid var(--line);border-radius:12px}.creatorintel-sources b,.creatorintel-sources small{display:block}.creatorintel-sources small{margin-top:4px;color:var(--muted)}.creatorintel-sources span{font-size:.68rem;font-weight:800}.creatorintel-sources .is-ready{color:var(--lime)}.creatorintel-sources .is-warn{color:var(--warn)}.creatorintel-evidence article{padding:16px;border:1px solid var(--line);border-radius:14px;background:rgba(0,0,0,.1)}.creatorintel-evidence header{display:flex;justify-content:space-between;gap:12px}.creatorintel-evidence h3{margin:14px 0 8px;font-size:.78rem;text-transform:uppercase;letter-spacing:.06em}.creatorintel-evidence dl{display:grid;gap:7px;margin:0}.creatorintel-evidence dl div{display:grid;grid-template-columns:110px 1fr;gap:10px}.creatorintel-evidence dt{color:var(--muted)}.creatorintel-evidence dd{margin:0}.creatorintel-status{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.creatorintel-status h2{width:100%;margin:0 0 4px}.creatorintel-status span{padding:7px 10px;border:1px solid var(--line);border-radius:999px;font-size:.72rem}.creatorintel-status .ready{color:var(--lime)}.creatorintel-status .open{color:var(--muted)}@media(max-width:860px){.creatorintel-head{display:grid}.creatorintel-head .btn{width:100%}.creatorintel-layout{grid-template-columns:1fr}}@media(max-width:520px){.creatorintel-panel{padding:16px 13px}.creatorintel-evidence dl div{grid-template-columns:1fr;gap:2px}}

/* V16.22 · Einheitliche, offene CRM-Seitenkoepfe.
   Seitenkoepfe strukturieren durch Typografie und Abstand, nicht durch einen
   zusaetzlichen Kasten. Fachkarten bleiben erhalten, weil ihre Umrandung
   Status, Gruppierung oder Interaktion erklaert. */
.mkv11-head,.ce-v11-head,.sg-head,.sc-head,
.creatorintel-head,.agent-center-head,.skillintel-head{
  background:none;
  border:0;
  border-radius:0;
  box-shadow:none;
}
.mkv11-head::before,.ce-v11-head::before,.sg-head::before,.sc-head::before{
  content:none;
  display:none;
}
.mkv11-head,.ce-v11-head,.sg-head,.sc-head{
  padding-block:clamp(14px,2.4vw,26px);
}

@media(max-width:560px){
  .mkv11-head,.ce-v11-head,.sg-head,.sc-head{
    padding-block:12px 18px;
  }
}

/* V16.23 · Agenten und Skills als gemeinsames sichtbares Verzeichnis. */
.agent-skill-radar{margin:8px 0 26px;padding:22px 0;border-block:1px solid var(--line-soft)}
.agent-skill-radar>header{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:16px}
.agent-skill-radar h2{margin:5px 0 7px;font-size:clamp(1.35rem,2.4vw,2rem)}
.agent-skill-radar header p{max-width:72ch;margin:0;color:var(--muted);line-height:1.55}
.agent-skill-feed{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--line-soft);border-block:1px solid var(--line-soft)}
.agent-skill-update{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px 13px;align-items:start;padding:15px 16px;background:var(--bg)}
.agent-skill-update b{display:block;line-height:1.35}.agent-skill-update p{margin:5px 0 0;color:var(--muted);font-size:.78rem;line-height:1.45}
.agent-skill-kind,.agent-new{color:var(--lime);font-size:.62rem;font-weight:850;letter-spacing:.1em}
.agent-skill-kind{min-width:64px;padding-top:2px}.agent-skill-dept{color:var(--muted);font-size:.68rem;white-space:nowrap}
.agent-skill-empty{padding:15px 0}.agent-skill-empty p{margin:4px 0 0;color:var(--muted)}
.agent-directory{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0 0 30px}
.agent-directory a{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:9px;min-height:54px;padding:10px 13px;border:1px solid var(--line-soft);border-radius:12px;background:var(--bg-card);color:var(--text);text-decoration:none;transition:border-color 180ms ease,background 180ms ease,transform 180ms ease}
.agent-directory a:hover{border-color:var(--line-lime);background:color-mix(in srgb,var(--lime) 5%,var(--bg-card));transform:translateY(-1px)}
.agent-directory a:focus-visible{outline:2px solid var(--lime);outline-offset:3px}.agent-directory strong{color:var(--lime);font-size:1rem}.agent-directory span{font-size:.76rem;font-weight:750}
.agent-card-title{display:flex;align-items:center;justify-content:space-between;gap:8px}.agent-new{flex:0 0 auto}
.agent-skill-chips{display:flex;flex-wrap:wrap;gap:5px;margin:11px 0 13px;padding:0;list-style:none}
.agent-skill-chips li{padding:4px 7px;border:1px solid var(--line-soft);border-radius:7px;background:rgba(255,255,255,.018);color:var(--muted);font-size:.64rem;line-height:1.2}
.ops-agent-card .agent-skill-chips{margin:8px 0 10px}.cagent-card .agent-skill-chips{margin:7px 0 8px}
@media(max-width:900px){.agent-skill-feed{grid-template-columns:1fr}.agent-directory{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.agent-skill-radar>header{align-items:stretch;flex-direction:column}.agent-skill-radar>header .btn{width:100%}.agent-skill-update{grid-template-columns:auto minmax(0,1fr)}.agent-skill-dept{grid-column:2}.agent-directory{grid-template-columns:1fr}.agent-directory a{min-height:48px}}
@media(prefers-reduced-motion:reduce){.agent-directory a{transition:none}.agent-directory a:hover{transform:none}}
/* Repurposing-Review (Longform/LinkedIn): Vergleich, Freigabe, Korrektur */
.repurpose-review{margin-top:16px;padding:16px;border:1px solid var(--line,rgba(255,255,255,.12));border-radius:14px;background:var(--card,rgba(255,255,255,.03));display:flex;flex-direction:column;gap:12px}
.repurpose-head h3{margin:.2em 0}
.repurpose-job{border:1px solid var(--line,rgba(255,255,255,.1));border-radius:12px;padding:12px;display:flex;flex-direction:column;gap:10px}
.repurpose-job.is-fallback{border-color:#e0a03a}
.repurpose-job-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.repurpose-status{font-size:.8em;opacity:.8;text-transform:capitalize}
.repurpose-fallback-badge{font-size:.72em;font-weight:700;color:#7a4c00;background:#ffd488;border-radius:999px;padding:2px 9px}
.repurpose-variants{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.repurpose-variant,.repurpose-longform{min-width:0}
.repurpose-hook{font-weight:600;margin:.3em 0}
.repurpose-review pre{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;max-width:100%;margin:.2em 0;font:inherit;background:var(--surface,rgba(0,0,0,.18));border-radius:8px;padding:8px}
.repurpose-actions{display:flex;flex-wrap:wrap;gap:8px}
.repurpose-correction{display:flex;flex-direction:column;gap:6px}
.repurpose-correction textarea{width:100%;min-height:64px;box-sizing:border-box;resize:vertical}
.repurpose-sources{font-size:.85em;opacity:.85;margin:0}
@media(max-width:560px){.repurpose-variants{grid-template-columns:1fr}.repurpose-actions .btn,.repurpose-correction .btn{width:100%}}
/* Content-Artefakt-Review (B-Roll/Karussell) in der Medienoberfläche */
.media-artifacts{margin-top:16px;display:flex;flex-direction:column;gap:12px}
.media-artifacts-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.media-artifact{border:1px solid var(--line,rgba(255,255,255,.12));border-radius:12px;padding:12px;display:flex;flex-direction:column;gap:8px;min-width:0}
.media-artifact.freigegeben{border-color:#3a9a5a}
.media-artifact.abgelehnt{border-color:#c0503a}
.media-artifact.augenpruefung_offen{border-color:#e0a03a}
.media-artifact header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px}
.media-artifact-state{font-size:.75em;font-weight:700;opacity:.9}
.media-artifact-ref{font-family:ui-monospace,Menlo,monospace;font-size:.78em;overflow-wrap:anywhere;word-break:break-word}
.media-artifact-actions{display:flex;flex-wrap:wrap;gap:6px}
@media(max-width:560px){.media-artifacts-list{grid-template-columns:1fr}.media-artifact-actions .btn{flex:1 1 auto}}
/* Guide-Funnel-Review (app-social-growth) */
.sg-guides{margin:18px 0}
.sg-guide-list{display:flex;flex-direction:column;gap:14px;margin-top:12px}
.sg-guide{border:1px solid var(--line,rgba(255,255,255,.12));border-radius:14px;padding:14px;display:flex;flex-direction:column;gap:10px;min-width:0}
.sg-guide.handoff{border-color:#3a9a5a}
.sg-guide>header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}
.sg-guide-state{font-size:.78em;opacity:.85}
.sg-guide-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin:0}
.sg-guide-meta div{min-width:0}
.sg-guide-meta dt{font-size:.72em;opacity:.7}
.sg-guide-meta dd{margin:0;overflow-wrap:anywhere;word-break:break-word}
.sg-guide-missing{color:#e0a03a;font-size:.9em;margin:0}
.sg-guide-ok{color:#3a9a5a;font-size:.9em;margin:0}
.guide-preview-frame{width:100%;height:420px;max-width:100%;border:1px solid var(--line,rgba(255,255,255,.15));border-radius:10px;background:#fff}
.sg-guide-actions{display:flex;flex-wrap:wrap;gap:8px}
@media(max-width:560px){.sg-guide-actions .btn{width:100%}.guide-preview-frame{height:340px}}
/* V16.25 · Geschuetztes Audio fuer Nex-Simulation und Testlink-Intro.
   Gemeinsame, ruhige Nachrichtenkarte statt Assistenten-Orb: Die echte
   Aufnahme bleibt dadurch sichtbar von einer erzeugten Antwort getrennt. */
.nexus-gruss{
  border:1px solid var(--line-soft);
  border-radius:var(--r);padding:16px 18px;margin:0 0 16px;background:var(--bg-elev)
}
.nexus-gruss-kopf{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap}
.nexus-gruss-marke{
  flex:0 0 40px;width:40px;height:40px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:var(--bg-2);border:1px solid var(--line-strong);
  font-size:.76rem;font-weight:700;letter-spacing:.04em;color:var(--muted-2)
}
.nexus-gruss-titelblock{flex:1 1 12rem;min-width:0}
.nexus-gruss-titel{margin:0;font-size:1rem;font-weight:700;line-height:1.3}
.nexus-gruss-unter{margin:2px 0 0;font-size:.85rem;color:var(--muted-2);line-height:1.4}
.nexus-gruss-status{
  font-size:.73rem;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);
  white-space:nowrap;padding-top:4px
}
.nexus-gruss-status-spielt{color:var(--lime)}
.nexus-gruss-status-fehler{color:var(--danger)}
.nexus-gruss-leiste{display:flex;align-items:center;gap:14px;margin-top:14px}
.nexus-gruss-play{
  flex:0 0 44px;width:44px;height:44px;border-radius:50%;cursor:pointer;
  border:1px solid var(--line-strong);background:var(--bg-2);color:var(--ink);
  display:flex;align-items:center;justify-content:center;
  transition:background var(--nex-fast),border-color var(--nex-fast)
}
.nexus-gruss-play:hover:not(:disabled){border-color:var(--lime)}
.nexus-gruss-play.ist-aktiv{border-color:var(--lime);color:var(--lime)}
.nexus-gruss-play:disabled{opacity:.55;cursor:default}
.nexus-gruss-play-glyph{font-size:.95rem;line-height:1}
.nexus-gruss-spur{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:6px}
.nexus-gruss-spur-schiene{
  height:4px;border-radius:99px;background:var(--bg-2);
  border:1px solid var(--line-soft);overflow:hidden
}
.nexus-gruss-spur-fuell{
  width:100%;height:100%;background:var(--lime);
  transform-origin:left;transform:scaleX(0);transition:transform .18s linear
}
.nexus-gruss-dauer{font-size:.76rem;color:var(--muted);font-variant-numeric:tabular-nums}
.nexus-gruss-transkript{margin-top:14px}
.nexus-gruss-transkript-knopf{
  min-height:44px;padding:0 2px;background:none;border:0;cursor:pointer;
  color:var(--muted-2);font-size:.82rem;text-decoration:underline;text-underline-offset:3px
}
.nexus-gruss-transkript-knopf:hover{color:var(--ink)}
.nexus-gruss-transkript-text{
  margin:6px 0 0;font-size:.88rem;line-height:1.6;color:var(--muted-2);
  padding:12px 14px;background:var(--bg-2);border-radius:var(--r-sm);
  border:1px solid var(--line-soft)
}
.nexus-gruss-fehler{margin:12px 0 0;font-size:.85rem;color:var(--danger);line-height:1.5}
@media(max-width:560px){
  .nexus-gruss{padding:14px}
  .nexus-gruss-status{flex:1 1 100%;padding-top:0}
  .nexus-gruss-dauer{font-size:.72rem}
}
@media (prefers-reduced-motion:reduce){
  .nexus-gruss-spur-fuell{transition:none}
  .nexus-gruss-play{transition:none}
}
@media(max-width:680px){
  .ac-flow{grid-template-columns:auto minmax(8px,1fr) auto minmax(8px,1fr) auto minmax(8px,1fr) auto;gap:3px;padding-inline:8px;overflow:hidden}
  .ac-flow>span{font-size:.52rem}
}
