/* dcyphr.® ProjectCloud */
:root{
  color-scheme: light;
  --paper:#FFFFFF;
  --fill:#F5F5F7;          /* Flächen, Sekundärknöpfe */
  --fill-2:#EBEBEF;        /* gedrückt */
  --ink:#1D1D1F;
  --ink-2:#5B5F62;
  --ink-3:#8E9296;
  --line:rgba(0,0,0,.09);
  --line-2:rgba(0,0,0,.16);
  --accent:#12467A;
  --accent-2:#1A5C9E;
  --accent-soft:#E8F0F9;
  --alert:#B03A12;
  --gruen:#1E6B45;
  --gold:#9A7413;
  /* Priorität als Ampel (Wunsch aus dem Feedback 08.10.2026): kritisch rot,
     hoch orange, normal grün. Einmal zentral, überall gleich.

     Ein Hinweis bleibt wichtig: Rot und Orange liegen bei einer Rot-Grün-
     Sehschwäche nah beieinander (bis Fassung 104 war „hoch" deshalb violett).
     Darum trägt den Unterschied nicht nur die Farbe, sondern auch die FORM des
     Punktes — kritisch ist eine gefüllte Scheibe, hoch ein Ring, normal eine
     gefüllte Scheibe in Grün. Das überlebt auch einen Schwarzweißdruck.
     Textkontrast je ≥ 5,3:1 auf eigenem Grund (WCAG AA). */
  --prio-krit:#B03A12;
  --prio-krit-bg:#FBEDE7;
  --prio-hoch:#9A4A09;
  --prio-hoch-bg:#FBECD9;
  --prio-norm:#2C6E42;
  --prio-norm-bg:#E6F3EB;
  /* Fälligkeit zentral — als Umriss/Text mit Zeichen, NICHT als gefüllter
     Chip, damit „überfällig" (rot) nicht mit „kritisch" (rot, gefüllt)
     verwechselt wird. „heute/bald" in Bernstein. */
  --due-spaet:#B03A12;
  --due-heute:#9A4A09;
  --blue:#1F6FB2;
  /* Flächen, die bisher fest kodiert waren — jetzt als Token, damit der
     Dunkelmodus sie mitnimmt (F123). */
  --seg-bg:#D8DEE6;        /* Hintergrund der Ansichtswahl */
  --seg-ink:#3C4854;       /* Text der nicht gewählten Reiter */
  --wochenend:#FCFCFD;     /* Wochenend-Zelle, Feld im Fokus */
  --r-s:8px;
  --r-m:11px;
  --r-l:16px;
  --shadow-1:0 1px 2px rgba(0,0,0,.05);
  --shadow-2:0 4px 16px rgba(0,0,0,.07);
  --shadow-3:0 24px 60px rgba(0,0,0,.18);
  --f:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",system-ui,Roboto,Helvetica,Arial,sans-serif;
  --f-mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
}

/* ==================== Dunkelmodus (F123) ====================
   Die ganze Oberfläche läuft über Tokens — also genügt es, die Tokens
   umzulegen. „dunkel" = feste Wahl, „auto" = der Einstellung des Geräts
   folgen. Die Wahl steht im Profil unter „Darstellung" und kommt per
   Cookie schon mit der Seite (kein Umschalt-Zucken).
   Blau, Rot, Orange, Grün sind aufgehellt, damit sie auf dunklem Grund
   noch tragen (Kontrast ≥ AA); Schatten werden tiefer. */
:root[data-theme="dunkel"]{
  color-scheme:dark;
  --paper:#15181C;  --fill:#1E232A;  --fill-2:#2A313A;
  --ink:#E8EAED;    --ink-2:#AEB4BB; --ink-3:#7E858D;
  --line:rgba(255,255,255,.12); --line-2:rgba(255,255,255,.22);
  --accent:#4E92D8; --accent-2:#6AA6E6; --accent-soft:#17314C;
  --alert:#E8805A;  --gruen:#54B481; --gold:#D8AC46;
  --prio-krit:#E8805A; --prio-krit-bg:#3A241D;
  --prio-hoch:#DE9440; --prio-hoch-bg:#36291A;
  --prio-norm:#54B481; --prio-norm-bg:#1C2E24;
  --due-spaet:#E8805A; --due-heute:#DE9440;
  --blue:#5AA0DB;
  --seg-bg:#262D35; --seg-ink:#AEB4BB; --wochenend:#1A1F25;
  --shadow-1:0 1px 2px rgba(0,0,0,.45);
  --shadow-2:0 4px 16px rgba(0,0,0,.55);
  --shadow-3:0 24px 60px rgba(0,0,0,.70);
}
@media (prefers-color-scheme:dark){
  :root[data-theme="auto"]{
    color-scheme:dark;
    --paper:#15181C;  --fill:#1E232A;  --fill-2:#2A313A;
    --ink:#E8EAED;    --ink-2:#AEB4BB; --ink-3:#7E858D;
    --line:rgba(255,255,255,.12); --line-2:rgba(255,255,255,.22);
    --accent:#4E92D8; --accent-2:#6AA6E6; --accent-soft:#17314C;
    --alert:#E8805A;  --gruen:#54B481; --gold:#D8AC46;
    --prio-krit:#E8805A; --prio-krit-bg:#3A241D;
    --prio-hoch:#DE9440; --prio-hoch-bg:#36291A;
    --prio-norm:#54B481; --prio-norm-bg:#1C2E24;
    --due-spaet:#E8805A; --due-heute:#DE9440;
    --blue:#5AA0DB;
    --seg-bg:#262D35; --seg-ink:#AEB4BB; --wochenend:#1A1F25;
    --shadow-1:0 1px 2px rgba(0,0,0,.45);
    --shadow-2:0 4px 16px rgba(0,0,0,.55);
    --shadow-3:0 24px 60px rgba(0,0,0,.70);
  }
}

*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;background:var(--paper)}
/* Nichts darf über den rechten Seitenrand hinauslaufen — bei JEDER Breite.
   Der Vollbreiten-Hintergrund der Kopfleiste (.topbar::before, inset:0 -50vw)
   reicht absichtlich weit nach außen; ohne diese Bremse ließ sich die Seite am
   Schreibtisch eine halbe Fensterbreite in leeren Raum scrollen. „hidden" am
   html (NICHT am body): die Beschränkung wird aufs Ansichtsfenster übertragen,
   das Fenster bleibt der Scrollbereich — so bleibt „position:sticky"
   (Kopfleiste, Spaltenköpfe) heil. „clip" tut das in Chromium nicht zuverlässig.
   Bis Fassung 72 stand diese Regel nur in der Mobil-Medienabfrage; am
   Schreibtisch fehlte sie — dort entstand der leere Seitwärts-Scroll. */
html{overflow-x:hidden}
body{max-width:100%}
body{color:var(--ink);font-family:var(--f);font-size:15px;line-height:1.5;letter-spacing:-.01em;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2,h3{margin:0;font-weight:600;letter-spacing:-.022em;text-wrap:balance}
p{margin:0}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
button{font-family:inherit;font-size:15px;cursor:pointer;color:inherit;letter-spacing:-.01em}
:focus-visible{outline:3px solid rgba(18,70,122,.35);outline-offset:2px;border-radius:var(--r-s)}
.wrap{max-width:1340px;margin:0 auto;padding:0 28px 96px}
.lab{font-size:12px;color:var(--ink-3);font-weight:500}
.spacer{margin-left:auto}

/* ---------- Knöpfe ---------- */
.btn{
  display:inline-flex;align-items:center;gap:6px;
  background:var(--fill);border:1px solid transparent;color:var(--ink);
  padding:8px 15px;border-radius:var(--r-m);font-size:14.5px;font-weight:500;
  transition:background .15s ease, transform .06s ease, box-shadow .15s ease;
}
@media (hover:hover) and (pointer:fine){.btn:hover{background:var(--fill-2)}}
.btn:active{transform:scale(.975)}
.btn--primary{background:var(--accent);color:#fff;box-shadow:var(--shadow-1)}
@media (hover:hover) and (pointer:fine){.btn--primary:hover{background:var(--accent-2)}}
.btn--ghost{background:transparent;border-color:var(--line-2)}
@media (hover:hover) and (pointer:fine){.btn--ghost:hover{background:var(--fill)}}
.btn:disabled{opacity:.4;cursor:not-allowed;transform:none}
.btn.danger{color:var(--alert)}
@media (hover:hover) and (pointer:fine){.btn.danger:hover{background:var(--prio-krit-bg)}}
.btn--sm{padding:6px 12px;font-size:13.5px;border-radius:var(--r-s)}

input[type=text],input[type=date],input[type=email],input[type=password],input[type=tel],input[type=url],select,textarea{
  font-family:inherit;font-size:15px;color:var(--ink);background:var(--fill);
  border:1px solid transparent;border-radius:var(--r-m);padding:9px 12px;max-width:100%;
  transition:background .15s ease, box-shadow .15s ease;
}
input:focus,select:focus,textarea:focus{outline:0;background:var(--paper);box-shadow:0 0 0 1px var(--line-2),0 0 0 4px rgba(18,70,122,.12)}
select{appearance:none;-webkit-appearance:none;padding-right:30px;min-width:0;text-overflow:ellipsis;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6'><path d='M1 1l4 4 4-4' fill='none' stroke='%238E9296' stroke-width='1.5' stroke-linecap='round'/></svg>");
  background-repeat:no-repeat;background-position:right 11px center}
textarea{line-height:1.45;resize:vertical}
input[type=file]{background:transparent;border:0;padding:0;font-size:13.5px;color:var(--ink-2)}
input[type=file]::file-selector-button{font:inherit;font-size:14px;font-weight:500;background:var(--fill);border:0;
  border-radius:var(--r-m);padding:8px 14px;margin-right:10px;cursor:pointer;color:var(--ink)}
@media (hover:hover) and (pointer:fine){input[type=file]::file-selector-button:hover{background:var(--fill-2)}}
input[type=checkbox]{accent-color:var(--accent);width:16px;height:16px;cursor:pointer}

/* Segmentierte Steuerung */
.seg{display:inline-flex;background:#E3E7EC;border:1px solid rgba(18,70,122,.14);
  padding:3px;border-radius:var(--r-m);gap:2px}
.seg button{border:0;background:transparent;padding:6px 13px;border-radius:9px;font-size:13.5px;
  font-weight:550;color:#4A5560;transition:all .15s ease}
@media (hover:hover) and (pointer:fine){.seg button:hover{color:var(--accent);background:rgba(255,255,255,.6)}}
.seg button[aria-pressed="true"]{background:var(--paper);color:var(--accent);
  box-shadow:0 1px 2px rgba(18,70,122,.18),0 0 0 1px rgba(18,70,122,.10)}

/* Die Ansichtswahl ist der wichtigste Umschalter im Board — sie darf größer
   und dunkler sein als die kleinen Umschalter in den Dialogen. */
.seg--view{background:var(--seg-bg);border-color:rgba(18,70,122,.22);padding:4px}
.seg--view button{padding:8px 17px;font-size:14px;font-weight:600;color:var(--seg-ink)}
.seg--view button[aria-pressed="true"]{background:var(--paper);color:var(--accent);
  box-shadow:0 1px 3px rgba(18,70,122,.24),0 0 0 1px rgba(18,70,122,.16)}

/* ---------- Anmeldeseiten ---------- */
/* Fassung 126: 100svh (small viewport height) statt 100vh — auf dem Handy
   schließt 100vh den Bereich hinter der ein-/ausfahrenden Adressleiste mit ein,
   dadurch wurde die Anmelde-/Startseite höher als sichtbar und Inhalt wurde
   abgeschnitten. 100vh bleibt als Rückfall für ältere Browser. */
.authpage{display:flex;flex-direction:column;min-height:100vh;min-height:100svh;align-items:center;justify-content:flex-start;padding:24px 16px;background:var(--fill)}
.authbox{width:100%;max-width:400px;background:var(--paper);border-radius:var(--r-l);padding:34px 32px 30px;box-shadow:var(--shadow-2);position:sticky;top:24px}
/* Sticky Anmelden-Kopfleiste (Fassung 89): nur am Handy sichtbar; die
   display:flex-Regel steht in der ≤860px-Abfrage weiter unten. Diese
   Grundregel muss VOR der Abfrage stehen, sonst gewänne sie bei gleicher
   Spezifität durch die spätere Quellposition. */
.authtop{display:none;align-self:stretch}
.authbox h1{font-size:26px;margin:22px 0 22px}
.authbox form{display:grid;gap:15px}
.authbox label{display:grid;gap:6px;font-size:12.5px;font-weight:500;color:var(--ink-2);letter-spacing:0}
.authbox label small{font-size:12px;color:var(--ink-3);font-weight:400}
.authbox input{background:var(--fill)}
/* Felder füllen die Box und dürfen nie breiter werden als sie — auch der Code
   mit großer Schrift und weitem Zeichenabstand nicht. */
.authbox form > *{min-width:0}
.authbox label input:not([type=checkbox]){width:100%;min-width:0;box-sizing:border-box}
.authbox .codefeld{font-size:22px;letter-spacing:.18em;text-align:center;font-family:var(--f-mono);padding:10px 12px}
.authbox .check{display:flex;gap:10px;align-items:center;font-weight:400}
.authbox .check input{width:auto}
.authbox .btn{justify-content:center;padding:11px 15px;font-size:15px;margin-top:6px}
.authbox .alt{margin-top:20px;font-size:13.5px;color:var(--ink-3)}
.authbox .hint{margin-top:14px;font-size:12.5px;color:var(--ink-3);line-height:1.5}
.note{padding:11px 13px;font-size:13.5px;margin-bottom:18px;border-radius:var(--r-m);background:var(--fill)}
.note.ok{background:var(--accent-soft);color:var(--accent)}
.note.bad{background:var(--prio-krit-bg);color:var(--alert)}

.warn{background:var(--prio-krit-bg);color:var(--alert);border-radius:var(--r-m);padding:12px 16px;margin:14px 0 0;font-size:14px;line-height:1.45}

/* ---------- Anmeldeseite: Übersicht ---------- */
.authsplit{display:grid;grid-template-columns:minmax(0,1fr) 400px;gap:56px;align-items:start;
  max-width:1060px;width:100%}
.pitch{max-width:560px;min-width:0}
.authbox{min-width:0}
.pitchsub{font-size:14px;color:var(--ink-2);line-height:1.55;margin:-10px 0 18px}
/* Trailer */
.trailer{position:relative;border-radius:var(--r-l);overflow:hidden;background:#0F1A26;box-shadow:var(--shadow-2);width:100%;max-width:100%;aspect-ratio:16/9}
/* iOS/WebKit (iPhone, auch Chrome für iOS): dort bekommt ein <video> mit
   height:100% in einem aspect-ratio-Container keine definierte Höhe und wird
   in Originalgröße — viel zu groß — angezeigt (Fassung 90). Deshalb das Video
   absolut in die Fläche spannen (inset:0 gibt feste Ränder) und für ältere
   WebKit zusätzlich ein Padding-Seitenverhältnis als Rückfall. */
@supports not (aspect-ratio: 1 / 1){ .trailer{height:0;padding-bottom:56.25%} }
.trailer video{position:absolute;inset:0;display:block;width:100%;height:100%;max-width:100%;object-fit:cover}
.trailerplay{position:absolute;inset:0;border:0;background:linear-gradient(180deg,rgba(15,26,38,0) 40%,rgba(15,26,38,.55));
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;cursor:pointer;color:#fff}
.trailerplay[hidden]{display:none}
.trailerbtn{width:64px;height:64px;border-radius:50%;background:rgba(255,255,255,.95);color:var(--accent);display:flex;align-items:center;justify-content:center;
  font-size:22px;padding-left:5px;box-shadow:0 10px 30px rgba(0,0,0,.25);transition:transform .15s ease}
@media (hover:hover) and (pointer:fine){.trailerplay:hover .trailerbtn{transform:scale(1.06)}}
.trailertxt{font-size:13.5px;font-weight:600;text-shadow:0 1px 8px rgba(0,0,0,.5)}
/* Funktionen in zwei Spalten */
.featgrid{list-style:none;margin:20px 0 0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:10px 18px}
.featgrid li{display:grid;gap:2px;padding-left:16px;position:relative}
.featgrid li::before{content:"";position:absolute;left:0;top:8px;width:6px;height:6px;border-radius:50%;background:var(--accent)}
.featgrid b{font-size:13.5px;font-weight:600;color:var(--ink)}
.featgrid span{font-size:12.5px;color:var(--ink-3);line-height:1.4}
.trust{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin-top:20px;font-size:12.5px;color:var(--ink-2)}
.trustpill{background:var(--accent);color:#fff;font-weight:600;padding:5px 12px;border-radius:999px;font-size:12.5px}
.pitch .brand{margin-bottom:16px}
.pitch .brandmark{--mark-h:22px}
.pitchline{font-size:20px;font-weight:600;letter-spacing:-.02em;color:var(--ink);margin-bottom:22px;line-height:1.35}
.feat{list-style:none;margin:22px 0 0;padding:0;display:grid;gap:9px}
.feat li{font-size:13.5px;color:var(--ink-2);padding-left:20px;position:relative;line-height:1.45}
.feat li::before{content:"";position:absolute;left:0;top:7px;width:6px;height:6px;border-radius:50%;background:var(--accent)}
.pitchfoot{margin-top:22px;font-size:13px;color:var(--ink-3)}
.brandrow.brandrow--mobile{display:none}

/* Kleines Board, das sich einmal sortiert */
.mini{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;background:var(--paper);
  border-radius:var(--r-l);padding:12px;box-shadow:var(--shadow-1)}
.minicol{display:flex;flex-direction:column;gap:6px;min-height:92px}
.minihead{display:flex;align-items:center;gap:5px;font-size:9.5px;color:var(--ink-3);font-weight:500}
.minihead i{width:6px;height:6px;border-radius:50%;display:inline-block}
.minicard{height:22px;border-radius:6px;background:var(--fill);display:block}
.minicard.done{background:var(--accent-soft)}
.minicard.c1{animation:slide1 9s cubic-bezier(.4,0,.2,1) infinite}
.minicard.c2{animation:slide2 9s cubic-bezier(.4,0,.2,1) infinite}
@keyframes slide1{
  0%,14%   {transform:translate(0,0);opacity:1}
  26%,92%  {transform:translate(calc(100% + 8px),0);opacity:1}
  100%     {transform:translate(0,0);opacity:1}
}
@keyframes slide2{
  0%,46%   {transform:translate(0,0);background:var(--fill)}
  58%,92%  {transform:translate(calc(100% + 8px),0);background:var(--accent-soft)}
  100%     {transform:translate(0,0);background:var(--fill)}
}
@media (prefers-reduced-motion: reduce){
  .minicard.c1,.minicard.c2{animation:none}
}
@media (max-width:860px){
  /* Handy: zuerst die Werbung/Erklärung, das Login-Formular darunter —
     darüber eine sticky Kopfleiste mit „Anmelden", damit man jederzeit
     hinspringen kann (Fassung 89). */
  .authpage{padding:0 0 30px;align-items:stretch;justify-content:flex-start}
  .authtop{display:flex;align-items:center;justify-content:space-between;gap:12px;
    position:sticky;top:0;z-index:50;background:var(--paper);
    padding:10px 16px;border-bottom:1px solid var(--line-2);box-shadow:var(--shadow-1)}
  .authtop-brand{display:inline-flex;align-items:center;gap:6px;font-weight:600;font-size:16px}
  .authtop .btn{flex:none}
  .authsplit{grid-template-columns:minmax(0,1fr);gap:28px;max-width:400px;margin:0 auto;padding:18px 16px 0}
  .pitch{max-width:none;order:1}
  .authbox{order:2;position:static;top:auto}
  .authpage:has(.authtop) .brandrow--mobile{display:none}
  .pitch .brand{display:none}
  .brandrow.brandrow--mobile{display:flex;margin-bottom:2px}
  .mini{display:none}
  .featgrid{grid-template-columns:1fr}
}

/* ---------- Marke ---------- */
.brandrow,.topbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
/* Die Kopfleiste bleibt oben stehen — auf jedem Format (Fassung 70).

   Sie ist die einzige Zeile, die auf JEDER Seite steht: Marke, Dashboard,
   Fokus, Meldungen, Konto, Verbindungsanzeige. Wegzuscrollen heißt, dass
   genau die Dinge verschwinden, die man von überall erreichen können soll
   — und dass das Logo nur auf den obersten 60 Pixeln der Anwendung zu
   sehen ist.

   Der Hintergrund muss über die Seitenränder hinauslaufen, sonst scrollt
   der Inhalt links und rechts an ihr vorbei. Dafür ein Pseudoelement, das
   weit nach außen reicht; das html schneidet es ab (overflow-x:hidden
   steht dort schon aus anderem Grund). Das ist robuster, als die
   Innenabstände des Rahmens an drei Haltestellen nachzupflegen. */
.topbar{padding:15px 0 14px;
  position:sticky;top:0;z-index:70;background:var(--paper)}
/* Der Hintergrund muss über die Seitenränder hinauslaufen, sonst scrollt der
   Inhalt links und rechts an der Leiste vorbei. Bis Fassung 72 geschah das
   über „inset:0 -50vw" — das reicht aber ECHT über den Rand hinaus und erzeugte
   am Schreibtisch einen leeren Seitwärts-Scroll (die Beschneidung am html wird
   in Chromium nicht zuverlässig aufs Fenster übertragen, und am body bräche sie
   das Kleben). Fassung 73: Schlagschatten statt Breite. Ein box-shadow malt
   übers Fenster hinaus, OHNE Scrollraum zu erzeugen — so bleibt die Seite
   genau fensterbreit und die Leiste klebt. */
.topbar::before{content:"";position:absolute;inset:0;z-index:-1;background:var(--paper);
  box-shadow:-50vw 0 0 var(--paper), 50vw 0 0 var(--paper)}
/* Die durchgehende untere Linie mit demselben Trick. */
.topbar::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;z-index:-1;
  background:var(--line);box-shadow:-50vw 0 0 var(--line), 50vw 0 0 var(--line)}

/* Die Kopfleiste auf dem Telefon (Fassung 74).

   Vorher brach sie unkontrolliert um: Die Marke und die Navigation füllten die
   erste Zeile, und was übrig blieb — der grüne Verbindungspunkt, Glocke, Hilfe,
   Konto — rutschte in eine zweite Zeile, in der der Verbindungspunkt allein
   links hing und rechts eine große Lücke klaffte.

   Jetzt zwei bewusste Zeilen: oben Marke und Navigation, darunter Status, Hilfe
   und Konto — über ein unsichtbares Umbruch-Element (.topbreak) und die
   Reihenfolge (order). Fassung 75: Das Umbruch-Element trägt eine feine Linie
   (border-top), die die beiden Gruppen sichtbar trennt. Am Schreibtisch ist
   der Umbruch aus und alles steht wie gehabt in einer Zeile. */
.topbreak{display:none}
@media (max-width:620px){
  .topbar{row-gap:8px}
  .topbar .spacer{display:none}
  /* flex-basis:100% zwingt den Umbruch; die border-top ist der feine Trennstrich. */
  .topbreak{display:block;flex-basis:100%;height:0;order:1;
    border-top:1px solid var(--line);margin:1px 0 0}
  .topbar .sync,
  .topbar .bell,
  .topbar .helpbtn,
  .topbar .kontochip,
  .topbar .linkbtn,
  .topbar #logoutform{order:2}
}
/* Beim Drucken klebt nichts — sonst stünde die Leiste auf jeder Seite
   mitten im Text. */
@media print{ .topbar{position:static} .topbar::before,.topbar::after{display:none} }
.brand{display:flex;align-items:baseline;gap:8px}
/* Marke als Link (Startseite) auf den öffentlichen Seiten (Fassung 93):
   wie Text aussehen, nur klickbar. */
a.brand,a.authtop-brand{text-decoration:none;color:inherit;cursor:pointer}
@media (hover:hover){a.brand:hover .product,a.authtop-brand:hover .product{color:var(--ink)}}
/* Die Wortmarke als Pfad (siehe pc_wortmarke() in lib/util.php).
   --mark-h ist die Gesamthöhe der Marke, vom ® oben bis zum Abstrich
   des y unten. In diesem Kasten liegt die Schriftlinie bei 81,79 % —
   der Rest darunter ist die Unterlänge des y. Der negative untere
   Rand schiebt die Marke genau um diese Unterlänge nach unten, damit
   ihre Schriftlinie auf der von „ProjectCloud" sitzt: bei align-items:
   baseline zählt bei einem Bild die untere Randkante als Schriftlinie.
   Ohne das schwebte die ganze Marke um ein Fünftel ihrer Höhe zu hoch. */
.brandmark{--mark-h:18px;height:var(--mark-h);width:auto;display:block;flex:none;
  color:var(--ink);margin-bottom:calc(var(--mark-h) * -0.1821)}
.wordmark{font-size:17px;font-weight:700;letter-spacing:-.03em}
.wordmark span{color:var(--accent)}
.product{font-size:16px;font-weight:500;color:var(--ink-2);letter-spacing:-.02em}
.crumb{background:var(--fill);border:0;padding:5px 12px;border-radius:100px;font-size:13px;font-weight:500;color:var(--ink-2)}
@media (hover:hover) and (pointer:fine){.crumb:hover{background:var(--fill-2);color:var(--ink)}}
.crumb[aria-current="page"]{background:var(--accent-soft);color:var(--accent)}
.sync{font-size:12px;color:var(--ink-3);display:inline-flex;align-items:center;gap:6px}
.sync::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ink-3)}
.sync[data-on="1"]::before{background:#34A853}
.sync[data-on="err"]{color:var(--alert)}
.sync[data-on="err"]::before{background:var(--alert)}
/* Fassung 68: ohne Netz. Bernstein und nicht rot — es ist kein Fehler,
   sondern ein Zustand, in dem vieles weitergeht. */
.sync[data-on="netz"]{color:#9A6207}
.sync[data-on="netz"]::before{background:#E8A317}

/* Das Band über allem, solange die Verbindung fehlt. Es steht ÜBER der
   Kopfleiste und schiebt die Seite nach unten, statt über ihr zu schweben:
   Ein schwebendes Band verdeckt irgendwann etwas, und dieses hier bleibt
   womöglich eine Stunde stehen. */
.netzband{background:#FFF4DA;color:#6B4A07;border-bottom:1px solid #F0DCA8;
  padding:9px 18px;font-size:13px;line-height:1.5}
.netzband b{font-weight:600;color:#4D3503}
@media (max-width:620px){ .netzband{padding:8px 14px;font-size:12.5px} }
@media print{ .netzband{display:none} }
.linkbtn{background:none;border:0;padding:6px 8px;border-radius:var(--r-s);font-size:14px;color:var(--ink-2);font-weight:500}
/* Konto-Knopf: zeigt, in welchem Konto man arbeitet; klappt bei mehreren die Auswahl auf */
.kontochip{display:inline-flex;align-items:center;gap:7px;padding:5px 11px 5px 9px;border-radius:100px;
  border:1px solid var(--line-2);background:var(--accent-soft);color:var(--accent);font-size:13px;font-weight:600;
  letter-spacing:-.01em;cursor:pointer;max-width:200px;transition:background .12s,border-color .12s}
.kontochip .kontoname{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kontochip .kontopfeil{opacity:.7;flex:none}
@media (hover:hover) and (pointer:fine){.kontochip:hover:not(:disabled){background:var(--paper);border-color:var(--accent)}}
.kontochip:disabled{cursor:default;opacity:1}
.kontomenu{min-width:232px}
.rollemarke{display:inline-block;margin-left:8px;font-size:10.5px;padding:1px 7px;border-radius:100px;background:var(--fill-2);color:var(--ink-2);font-weight:600;letter-spacing:.02em;vertical-align:middle}
.kontomenu .rollemarke{margin-left:auto}
.kontowahl .btn--primary .rollemarke{background:rgba(255,255,255,.22);color:#fff}
.ctxtrenn{height:1px;background:var(--line);margin:5px 6px}
.kvrolle{font:inherit;font-size:12.5px;padding:3px 6px;border:1px solid var(--line);border-radius:6px;background:var(--paper)}
.toast{position:fixed;left:50%;bottom:22px;transform:translate(-50%,12px);background:var(--ink);color:#fff;padding:9px 16px;border-radius:100px;
  font-size:13px;box-shadow:0 8px 24px rgba(0,0,0,.18);opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;z-index:1200}
.toast.an{opacity:1;transform:translate(-50%,0)}
.ctxitem.kontoitem{display:flex;align-items:center;gap:9px}
.kontoitem .kontohaken{width:14px;flex:none;color:var(--accent);font-weight:700}
.kontoitem.an{font-weight:600;color:var(--accent);background:var(--accent-soft)}
@media (max-width:760px){
  .kontochip{max-width:120px;font-size:12px;padding:4px 9px 4px 8px;gap:5px}
  .kontochip .kontopfeil{width:10px;height:10px}
  /* Am Telefon zählt jeder Zentimeter: Brand kleiner, Verbindungsanzeige
     nur als Punkt, Krumen enger — so bleibt der Kopf bei zwei Zeilen. */
  .topbar{gap:8px 10px;padding:12px 0 10px}
  .topbar .brand .product{display:none}
  /* Ohne „ProjectCloud" daneben steht die Marke allein — dann darf sie
     etwas kleiner sein, sonst wirkt sie im schmalen Kopf zu laut. */
  .topbar .brandmark{--mark-h:16px}
  .topbar .sync{font-size:0;gap:0}
  .topbar .crumb{padding:5px 9px;font-size:12.5px}
  .topbar .linkbtn{padding:6px 5px;font-size:13px}
@media (hover:hover) and (pointer:fine){}
.linkbtn:hover{background:var(--fill);color:var(--ink)}}

#profilebtn{display:inline-flex;align-items:center;gap:6px}
#profilebtn .pbini{display:none;font-weight:600;letter-spacing:.02em}
@media (max-width:560px){ #profilebtn .pbini{display:inline} }

/* ---------- Seitenkopf ---------- */
.pagehead{padding:34px 0 18px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
/* Fassung 74: Filter und Aktionen der Boards-Seite in einer eigenen Zeile,
   linksbündig untereinander — nicht mehr hinter der Überschrift eingerückt.
   Die Suche bleibt oben in der Kopfzeile. */
.pagetools{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 18px}
.kontozeile{margin:-8px 0 16px;font-size:13px;color:var(--ink-3)}
.kontozeile b{color:var(--ink-2);font-weight:600}
.kontozeile a{color:var(--accent);font-weight:500}
.pagehead h1{font-size:clamp(28px,4vw,40px);line-height:1.08}
.titlebtn{background:none;border:0;padding:2px 6px;margin-left:-6px;border-radius:var(--r-s);font:inherit;color:inherit;text-align:left}
@media (hover:hover) and (pointer:fine){.titlebtn:hover{background:var(--fill)}}

/* margin-bottom gleich dem von .mine (20px), damit der Abstand zwischen den
   Kennzahlen und „Meine Aufgaben" derselbe ist wie zwischen „Meine Aufgaben"
   und „Entwürfe" (Fassung 74). */
.stats{display:flex;flex-wrap:wrap;gap:10px;padding-bottom:6px;margin-bottom:20px}
/* Die Kacheln sind Knöpfe: ein Klick filtert das Board auf genau diese
   Gruppe, ein zweiter Klick nimmt den Filter zurück (F124). */
.stat{background:var(--fill);border:1px solid transparent;border-radius:var(--r-m);padding:12px 18px;min-width:104px;
  font:inherit;color:inherit;text-align:left;cursor:pointer}
@media (hover:hover) and (pointer:fine){.stat:hover{background:var(--fill-2)}}
.stat:focus-visible{outline:0;box-shadow:0 0 0 3px var(--accent-soft)}
.stat.an{background:var(--accent-soft);border-color:var(--accent)}
.stat.an b,.stat.an small{color:var(--accent)}
.stat b{display:block;font-size:24px;font-weight:600;line-height:1.1;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.stat small{display:block;font-size:12px;color:var(--ink-3);margin-top:2px}

.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:20px 0 12px}

/* ---------- Board-Übersicht ---------- */
.blist{display:grid;gap:12px}
.brow{display:grid;grid-template-columns:1fr auto auto;gap:26px;align-items:center;
  background:var(--paper);border:1px solid var(--line);border-radius:var(--r-l);padding:20px 22px;
  transition:box-shadow .18s ease, transform .12s ease}
@media (hover:hover) and (pointer:fine){.brow:hover{box-shadow:var(--shadow-2)}}
.brow h2{font-size:21px}
.brow h2 button{background:none;border:0;padding:0;font:inherit;color:inherit;text-align:left}
@media (hover:hover) and (pointer:fine){.brow h2 button:hover{color:var(--accent)}}
.brow .sub{font-size:13px;color:var(--ink-3);margin-top:8px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.subtxt{font-size:13px;color:var(--ink-3)}
.bnums{display:flex;gap:22px;text-align:right}
.bnums div b{display:block;font-size:19px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums}
.bnums div small{display:block;font-size:11.5px;color:var(--ink-3);margin-top:5px}
.bacts{display:flex;gap:8px;flex-wrap:wrap}
.bar{height:5px;background:var(--fill);border-radius:100px;margin-top:12px;max-width:340px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--accent);border-radius:100px}

/* Boardliste: Griff zum Umsortieren und Kachel-Raster (Fassung 77) */
.brow{position:relative}
.bgrip{position:absolute;left:4px;top:50%;transform:translateY(-50%);width:18px;height:34px;z-index:3;
  border:0;background:transparent;color:var(--ink-3);cursor:grab;font-size:15px;line-height:1;
  display:flex;align-items:center;justify-content:center;border-radius:7px;touch-action:none;padding:0}
.bgrip:active{cursor:grabbing}
@media (hover:hover) and (pointer:fine){.bgrip:hover{color:var(--accent);background:var(--fill)}}
.brow--zieht{opacity:.6;box-shadow:var(--shadow-2)}
.blist--raster{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));align-items:start}
.blist--raster .brow{grid-template-columns:1fr;gap:14px;align-items:stretch}
.blist--raster .bnums{text-align:left}

/* Hinweisstreifen auf dem Dashboard (Fassung 78) */
.hbanners{display:flex;flex-direction:column;gap:10px;margin:0 0 18px}
.hbanner{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  background:var(--accent-soft);border:1px solid var(--line);border-radius:var(--r-l);
  padding:12px 14px 12px 16px}
.hbanner--info{background:var(--fill)}
.hbannertxt{flex:1 1 260px;font-size:14px;color:var(--ink-2);line-height:1.4}
.hbannertxt b{color:var(--ink)}
.hbanner-neu{display:inline-block;background:var(--accent);color:#fff;font-size:11px;font-weight:700;
  letter-spacing:.04em;padding:2px 7px;border-radius:100px;margin-right:9px;vertical-align:1px}
.hbanner-akt{display:flex;align-items:center;gap:8px;margin-left:auto}
.hbanner-zu{border:0;background:transparent;color:var(--ink-3);font-size:20px;line-height:1;
  width:30px;height:30px;border-radius:8px;cursor:pointer;padding:0}
@media (hover:hover) and (pointer:fine){.hbanner-zu:hover{background:var(--paper);color:var(--ink)}}

/* Aktualisieren-Knopf: kurzes Drehen beim Klick (Fassung 79) */
@keyframes pc-dreht{to{transform:rotate(360deg)}}
.crumb--neu.dreht svg{animation:pc-dreht .7s ease}

/* Rückgängig / vorwärts (Fassung 103): zwei schmale Icon-Knöpfe neben dem
   Aktualisieren. Ausgegraut und nicht anklickbar, solange es nichts zu tun
   gibt — der Vorwärts-Pfeil also, bis man etwas zurückgenommen hat. */
.crumb--zug{padding-left:9px;padding-right:9px}
.crumb--zug svg{display:block}
.crumb--zug[disabled]{opacity:.32;cursor:default;pointer-events:none}
@media (hover:hover) and (pointer:fine){
  .crumb--zug:not([disabled]):hover{background:var(--paper);color:var(--ink)}
}

/* ---------- Meine Aufgaben ---------- */
.mine{background:var(--fill);border-radius:var(--r-l);padding:4px 18px;margin-bottom:20px}
.mine>summary{list-style:none;cursor:pointer;padding:12px 0;display:flex;align-items:center;gap:10px;font-size:16px;font-weight:600}
.mine>summary::-webkit-details-marker{display:none}
.mine>summary .caret{font-size:11px;color:var(--ink-3)}
.mine .cnt{font-size:12.5px;color:var(--ink-3);margin-left:auto;font-weight:400}
.minelist{padding:0 0 10px}
.mrow{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;font-size:14px;padding:9px 0;border-top:1px solid var(--line);cursor:pointer}
.mrow input[type=checkbox]{width:17px;height:17px;accent-color:var(--accent);cursor:pointer;border-radius:50%}
/* Fassung 104: das Kästchen bekommt eine große, eigene Tippfläche (≥44 px),
   damit man auf dem Telefon sicher erledigt statt daneben zu treffen. Der
   Titel öffnet die Karte. */
.mchk{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;margin:-13px -8px -13px -12px;cursor:pointer}
.mtitle{cursor:pointer;min-width:0}
.mtitle .mt{overflow-wrap:anywhere}
@media (hover:hover) and (pointer:fine){ .mrow:hover .mt{text-decoration:underline;text-underline-offset:2px} }
.mrow.done .mt{text-decoration:line-through;color:var(--ink-3)}

/* ---------- Entwürfe (Fassung 58) ----------

   Derselbe Kasten wie „Meine Aufgaben", aber erkennbar anders: gestrichelter
   Rand und ein Schloss in der Überschrift. Beides sagt dasselbe und sagt es
   ohne Text — hier liegt etwas, das noch nicht gilt und das sonst niemand
   sieht. Ein Kasten, der aussieht wie das Board, würde genau das Gegenteil
   behaupten. */
.mine--entwurf{background:transparent;border:1px dashed var(--line);padding:4px 17px}
.mine--entwurf>summary{color:var(--ink-2)}
.schloss{display:inline-flex;align-items:center;color:var(--ink-3);margin-left:8px}
.ekopf{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:8px 0 4px}
.ehint{font-size:12px;color:var(--ink-3);flex:1 1 220px;min-width:0}
.egruppe{display:flex;align-items:center;gap:8px;padding:12px 0 4px;
  font-size:12px;font-weight:600;color:var(--ink-2);text-transform:none}
.egzahl{font-weight:400;color:var(--ink-3)}
.erow{align-items:center}
/* Gestrichelt auch hier, Zeile für Zeile: man soll beim Überfliegen nicht
   vergessen, dass das noch nichts Verbindliches ist. */
.erow{border-top-style:dashed}
.echip{font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  padding:2px 7px;border-radius:100px;background:var(--fill-2);color:var(--ink-2);white-space:nowrap}
.erow--fremd .echip{background:var(--accent-soft);color:var(--accent)}
.evon{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-2);white-space:nowrap}
.chip--frei{background:var(--accent-soft);color:var(--accent)}
.enotiz{overflow-wrap:anywhere}
@media (max-width:760px){
  .erow{grid-template-columns:auto 1fr;row-gap:6px}
  .erow .meta{grid-column:1/-1;flex-wrap:wrap}
  .ehint{display:none}
}

/* ---------- Board ---------- */
.board{display:flex;gap:16px;align-items:flex-start;padding:6px 0 10px;min-width:0}
.board.quer{overflow-x:auto}
.colm{flex:1 1 0;min-width:230px;background:var(--fill);border-radius:var(--r-l);padding:14px 12px 12px;
  transition:background .15s ease, box-shadow .15s ease}
.colm.over{background:var(--accent-soft);box-shadow:inset 0 0 0 2px var(--accent)}
.colhead{display:flex;align-items:center;gap:8px;padding:0 4px 12px}

/* ---------- Die Spaltenköpfe bleiben stehen (Fassung 50) ----------

   Bis Fassung 49 klebten die Köpfe mit „position:sticky" an der Seite. Das
   funktionierte in genau einem Fall und sonst nie, und beide Lücken sind
   gemeldet worden:

   1. Sobald das Board waagerecht scrollen konnte — also ab etwa fünf Spalten
      auf einem normalen Bildschirm —, war das Board selbst der scrollende
      Kasten. „sticky" hält sich immer am NÄCHSTEN scrollenden Kasten fest,
      und weil dieser senkrecht nicht scrollte, hatte der Kopf nichts, woran
      er kleben konnte. Die Regel schaltete sticky dort deshalb ganz ab.

   2. Im verbleibenden Fall klebte ein Kopf nur, solange SEINE Spalte noch
      im Bild war. Eine leere Spalte ist 110 Pixel hoch — ihr Kopf war nach
      110 Pixeln Scrollen weg, während der Kopf der vollen Spalte daneben
      stehen blieb. Genau das war gemeint mit „auch wenn nichts drin ist".

   Beides hat dieselbe Wurzel: solange die Seite scrollt und das Board darin
   nur mitwandert, lässt sich das nicht lösen — der Browser gibt einem
   Element immer nur EINEN Scrollkasten, und zwei Richtungen zugleich gehen
   darin nicht.

   Ab Fassung 50 ist das Board deshalb sein eigener Bereich, so hoch wie das
   Fenster es hergibt. Der Kopf steht fest oben in seiner Spalte, die Karten
   darunter scrollen. Das ist das Modell, das jedes Kanban-Werkzeug benutzt,
   und es löst beide Fälle auf einmal: der Kopf bewegt sich nie, egal wie
   viele Spalten es gibt und egal, ob eine davon leer ist.

   Auf dem Telefon bleibt alles, wie es war — dort führt das Spaltenband
   durch die Spalten (siehe weiter unten).                                */
@media (min-width: 900px){
  /* Fassung 55: 96 Pixel Luft unter der Seite sind überall richtig und auf
     der Board-Seite verschenkt — dort ist das Board ein eigener Bereich, und
     jeder Pixel darunter ist ein Pixel weniger für Karten. Die Rechnung in
     boardHoehe() rechnet diesen Abstand mit, also wirkt die Kürzung
     unmittelbar als zusätzliche Boardhöhe. */
  body:has(#page-board:not([hidden])) .wrap{padding-bottom:20px}

  /* Alle Spalten gleich hoch und so hoch wie der Bereich: eine leere Spalte
     ist damit genauso ein Ziel zum Ablegen wie eine volle. --boardh setzt
     das Skript (boardHoehe), weil niemand vorher weiß, wie viel über dem
     Board steht. */
  .board{align-items:stretch;height:var(--boardh,auto);overflow:auto;
    scrollbar-width:thin}
  .colm{display:flex;flex-direction:column;min-height:0}
  .colhead{flex:none;background:var(--fill);
    margin:-14px -12px 0;padding:14px 16px 10px;
    border-radius:var(--r-l) var(--r-l) 0 0;
    /* damit die Karten sichtbar darunter durchlaufen, statt abgeschnitten
       zu wirken */
    box-shadow:0 8px 8px -8px rgba(0,0,0,.14)}
  .colm.over .colhead{background:var(--accent-soft)}
  /* Die Karten scrollen, der Kopf nicht. „min-height:0" ist dabei nicht
     Kosmetik: ohne sie weigert sich ein Flex-Kind, kleiner als sein Inhalt
     zu werden, und dann scrollt nichts, sondern die Spalte wächst. */
  /* „overscroll-behavior:contain“ ist hier kein Beiwerk: ohne diese Zeile
     scrollt am Ende einer Spalte die SEITE weiter, das Board wandert nach
     oben aus dem Bild und die Köpfe sind wieder weg — also genau der
     Fehler, der hier behoben wird. Am Ende einer Spalte ist Schluss.

     Am Board selbst steht die Zeile bewusst NICHT: zwischen den Spalten und
     über der Werkzeugleiste soll das Rad weiterhin die Seite bewegen, sonst
     käme man an den Fußbereich nicht mehr heran. */
  .stack{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
    padding-right:5px;margin-right:-5px;scrollbar-width:thin}
}

/* ---------- Handy ----------

   Die Spalten bleiben nebeneinander — man wischt seitlich durch sie hindurch,
   wie am großen Schirm auch. Das heißt aber: das Board ist ein scrollender
   Kasten, und darin kann kein Spaltenkopf kleben (siehe oben). Beides zugleich
   lässt der Browser nicht zu.

   Statt des klebenden Kopfes gibt es deshalb das Spaltenband: ein schmaler
   Streifen unter den Reitern, der sagt, in welcher Spalte man gerade steht,
   und mit dem man zur nächsten springt. Es hält dieselbe Frage offen — „wo
   bin ich?" — und kann obendrein etwas, was ein Kopf nicht kann. */
@media (max-width:899px){
  .colm{min-width:80vw;max-width:88vw}
  /* Die Ansichtswahl bleibt oben stehen — sonst muss man für jeden Wechsel
     erst wieder ganz nach oben scrollen. */
}
@media (max-width:760px){
  .viewrow{margin-left:-18px;margin-right:-18px;padding-left:18px;padding-right:18px}
}
.colhead .dot{width:9px;height:9px;border-radius:50%;flex:none}
.colhead h3{font-size:14.5px;font-weight:600}
.colhead b{font-size:12.5px;color:var(--ink-3);margin-left:auto;font-weight:500;font-variant-numeric:tabular-nums}
.stack{display:flex;flex-direction:column;gap:9px;min-height:50px}
.card{background:var(--paper);border-radius:var(--r-m);padding:12px 13px;cursor:grab;display:flex;flex-direction:column;gap:9px;
  box-shadow:var(--shadow-1);transition:box-shadow .15s ease, transform .1s ease}
@media (hover:hover) and (pointer:fine){.card:hover{box-shadow:var(--shadow-2)}}
.card:active{cursor:grabbing}
.card.drag{opacity:.4;transform:scale(.98)}
.card.mineflag{box-shadow:var(--shadow-1),inset 3px 0 0 var(--accent)}
.card.blocked{box-shadow:var(--shadow-1),inset 0 0 0 1px rgba(176,58,18,.28)}
.card .t{font-size:14px;line-height:1.4;font-weight:500;cursor:pointer}
.no{font-size:12.5px;color:var(--ink-3);font-weight:400;font-variant-numeric:tabular-nums}
.meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:11.5px;color:var(--ink-3)}
.cardborn{font-size:10.5px;color:var(--ink-3);opacity:.72;margin-top:1px;letter-spacing:.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chip{background:var(--fill);border-radius:6px;padding:3px 7px;white-space:nowrap;font-weight:500}
.chip--area{background:var(--accent-soft);color:var(--accent)}
.chip--block{background:var(--prio-krit-bg);color:var(--alert)}
/* Fälligkeit (Fassung 105): Umriss statt Füllung, mit Zeichen — damit es sich
   in der FORM von den gefüllten Prioritäts-Chips unterscheidet und „überfällig"
   (rot) nicht wie „kritisch" aussieht. */
.chip--due{background:transparent;border:1px solid var(--line-2);color:var(--ink-2);padding:2px 7px}
.chip--due.soon{background:transparent;border-color:var(--due-heute);color:var(--due-heute)}
.chip--due.spaet{background:transparent;border-color:var(--due-spaet);color:var(--due-spaet);font-weight:600}
.chip--due.spaet::before{content:"\26A0\FE0E";margin-right:4px}
.prio{border:0;background:var(--fill);border-radius:6px;padding:3px 8px 3px 7px;font-size:11.5px;font-weight:500;color:var(--ink-2);display:inline-flex;align-items:center;gap:5px}
@media (hover:hover) and (pointer:fine){.prio:hover{background:var(--fill-2)}}
.prio::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ink-3)}
.prio[data-p="kritisch"]{background:var(--prio-krit-bg);color:var(--prio-krit)}
.prio[data-p="kritisch"]::before{background:var(--prio-krit)}
.prio[data-p="hoch"]{background:var(--prio-hoch-bg);color:var(--prio-hoch)}
/* Ring statt Scheibe: der zweite Unterschied neben der Farbe. */
.prio[data-p="hoch"]::before{background:transparent;box-shadow:inset 0 0 0 2px var(--prio-hoch)}
.prio[data-p="normal"]{background:var(--prio-norm-bg);color:var(--prio-norm)}
.prio[data-p="normal"]::before{background:var(--prio-norm)}
.acts{display:flex;gap:3px;margin-left:auto;flex-wrap:wrap}
.icon{background:transparent;border:0;padding:4px 8px;border-radius:6px;font-size:12px;font-weight:500;color:var(--ink-2)}
@media (hover:hover) and (pointer:fine){.icon:hover{background:var(--fill-2);color:var(--accent)}}
.icon.danger{color:var(--alert)}
.empty{font-size:13px;color:var(--ink-3);padding:8px 4px}
/* „Neue Karte" ganz unten in jeder Spalte (Fassung 91). Dezent und gestrichelt,
   damit es nicht mit einer echten Karte verwechselt wird; der 9px-Abstand kommt
   aus dem Stapel-Gap. */
.addcard{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;
  padding:10px;border:1px dashed var(--line-2);border-radius:var(--r-m);background:transparent;
  color:var(--ink-3);font-size:13px;font-weight:600;cursor:pointer;
  transition:background .14s,color .14s,border-color .14s}
@media (hover:hover){.addcard:hover{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}}
.addcard:focus-visible{outline:0;box-shadow:0 0 0 3px var(--accent-soft)}

/* Kennung, Personen */
.cardtop{display:flex;align-items:center;gap:8px}
/* Der Haken auf der Karte: leerer Kreis = offen, grün = erledigt.
   Immer sichtbar, nicht erst beim Überfahren — er ist der häufigste
   Handgriff des Tages und darf sich nicht verstecken. */
.card .fertig{flex:none;width:23px;height:23px;padding:0;border-radius:50%;
  border:1.5px solid var(--line-2);background:var(--paper);color:transparent;
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
  transition:background .13s ease,border-color .13s ease,color .13s ease,transform .13s ease}
.card .fertig:focus-visible{outline:0;box-shadow:0 0 0 3px rgba(30,107,69,.25)}
.card .fertig[aria-pressed="true"]{background:var(--gruen);border-color:var(--gruen);color:#fff}
/* Der grüne Haken beim Überfahren gilt NUR für einen Zeiger, der wirklich
   schwebt. Auf dem Telefon gibt es kein Schweben: der Browser hält den
   :hover-Zustand an der zuletzt berührten Stelle fest und prüft ihn nach
   jeder Änderung des Aufbaus neu. Die abgehakte Karte verlässt die Spalte,
   die nächste rutscht unter den Finger — und erbt den grünen Haken, obwohl
   sie offen ist. Genau der gemeldete Fehler. */
@media (hover:hover) and (pointer:fine){@media (hover:hover) and (pointer:fine){
  .card .fertig:hover{border-color:var(--gruen);color:var(--gruen);transform:scale(1.1)}}
  @media (hover:hover) and (pointer:fine){.card .fertig[aria-pressed="true"]:hover{transform:scale(1.1)}}
}
.ref{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.02em;color:var(--ink-3);background:var(--fill);
  padding:2px 7px;border-radius:6px;white-space:nowrap}
.crewslot{margin-left:auto}
/* Die Runde oben rechts ist zugleich der Weg zur Zuweisung — sie muss also
   nach Knopf aussehen und sich am Finger treffen lassen. */
.crewslot--klick{cursor:pointer;border-radius:100px;padding:2px;margin-right:-2px;
  transition:background .13s ease}
@media (hover:hover) and (pointer:fine){
  .crewslot--klick:hover{background:var(--fill-2)}
}
@media (pointer:coarse){
  .crewslot--klick{padding:5px 4px;margin:-5px -4px -5px auto}
}
.zuweismenu .ctxitem{display:flex;align-items:center;gap:8px}
.zuweismenu .ctxitem .av{flex:none}
.crew{display:flex;align-items:center}
.crew--line .av{margin-left:-4px;box-shadow:0 0 0 2px var(--paper)}
.crew--line .av:first-child{margin-left:0}
.av--more{background:var(--fill);color:var(--ink-2);font-size:9.5px}
.crew .av{margin-left:-7px;position:relative}
.crew .av:first-child{z-index:3}
.crew .av:nth-child(2){z-index:2}
.crew .av:first-child{margin-left:0}
.av{width:26px;height:26px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  font-size:10.5px;font-weight:600;color:#fff;background:var(--ink-3);overflow:hidden;flex:none;
  box-shadow:0 0 0 2px var(--paper);letter-spacing:.01em}
.av img{width:100%;height:100%;object-fit:cover;display:block}
.av--s{width:24px;height:24px;font-size:10px}
.card .av--s,.blist .av--s,.mrow .av--s,.drow .av--s{width:28px;height:28px;font-size:11px}
.av--own{box-shadow:0 0 0 2px var(--paper),0 0 0 3.5px var(--accent)}
.av--help{opacity:.92}
.av--none{background:var(--fill);color:var(--ink-3);box-shadow:0 0 0 2px var(--paper),inset 0 0 0 1px var(--line-2)}
.pickcrew{display:flex;flex-wrap:wrap;gap:6px}
.pick{display:inline-flex;align-items:center;gap:6px;background:var(--fill);border:1px solid transparent;
  border-radius:100px;padding:3px 10px 3px 3px;font-size:12.5px;font-weight:500;color:var(--ink-2)}
@media (hover:hover) and (pointer:fine){.pick:hover{background:var(--fill-2)}}
.pick.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}
.avrow{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
/* Auch das ist seit Fassung 53 ein Knopf — siehe .hperson. */
.mwho{display:flex;align-items:center;gap:9px;border:0;background:none;font:inherit;
  color:inherit;text-align:left;padding:2px 6px;margin-left:-6px;border-radius:var(--r-s);cursor:pointer}
@media (hover:hover) and (pointer:fine){.mwho:hover{background:var(--fill-2)}}
.mwho:focus-visible{outline:2px solid var(--accent);outline-offset:1px}

.xlist{display:grid;gap:8px}
.xopt{display:flex;align-items:center;gap:10px;text-align:left;background:var(--fill);border:1.5px solid transparent;
  border-radius:var(--r-m);padding:12px 14px;font-size:14.5px;width:100%}
@media (hover:hover) and (pointer:fine){.xopt:hover{background:var(--fill-2)}}
.xopt.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}
.xopt b{font-weight:500}
footer a{color:var(--ink-3)}
@media (hover:hover) and (pointer:fine){footer a:hover{color:var(--accent)}}

/* Vorschau */
.peek{position:absolute;z-index:60;background:var(--paper);border-radius:var(--r-l);box-shadow:var(--shadow-3);
  padding:16px 18px;font-size:13.5px;pointer-events:none;max-height:80vh;overflow:hidden}
.peekhead{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.peektitle{font-size:16px;font-weight:600;line-height:1.3;letter-spacing:-.02em;margin-bottom:12px}
.peekrows{display:grid;gap:5px}
.peekrow{display:grid;grid-template-columns:104px 1fr;gap:10px;align-items:baseline}
.peeklab{font-size:11.5px;color:var(--ink-3)}
.peeksubs{margin-top:12px;border-top:1px solid var(--line);padding-top:10px;display:grid;gap:3px}
.peeksub{font-size:12.5px;color:var(--ink-2)}
.peeksub.done{color:var(--ink-3);text-decoration:line-through}
.peeknote{margin-top:12px;border-top:1px solid var(--line);padding-top:10px;font-size:12.5px;color:var(--ink-2);
  display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;line-clamp:5;overflow:hidden}
.peekhint{margin-top:12px;font-size:11px;color:var(--ink-3)}

/* Unteraufgaben — eine Zeile je Aufgabe: Häkchen, Text, wer/wann, drei kleine Knöpfe.
   Die Knöpfe sind schmal (nur Zeichen) und auf dem Desktop erst beim Überfahren
   voll sichtbar; so bleibt die Zeile ruhig und dicht. */
.subbar{height:4px;background:var(--fill);border-radius:100px;overflow:hidden}
.subbar i{display:block;height:100%;background:var(--accent);border-radius:100px}
.subs[data-open="0"]{display:none}
.subwrap{display:flex;flex-direction:column;gap:2px;padding:0 0 2px}
/* Fassung 86: etwas mehr Luft zwischen den Zeilen, und die Checkbox sitzt oben
   links — bei mehrzeiligen Unteraufgaben bleibt sie an der ersten Zeile. */
.subrow{display:flex;align-items:flex-start;gap:8px;font-size:13px;line-height:1.35;padding:6px 0;border-bottom:1px solid var(--line);min-height:26px}
.subrow .stx{flex:1;min-width:0;word-break:break-word}
.subrow .subwer{display:inline-flex;align-items:center;gap:4px;flex:none}
.subrow .subwer.klick{cursor:pointer;min-width:14px;min-height:18px;border-radius:100px}
@media (hover:hover) and (pointer:fine){.subrow .subwer.klick:hover{background:var(--fill)}}
.subrow .subwer .av.av--s.subav{width:20px;height:20px;font-size:8.5px;box-shadow:0 0 0 1.5px var(--accent);margin-right:6px}
.subrow .subdue{font-size:11px;color:var(--ink-3);white-space:nowrap}
.subrow .subdue.spaet{color:var(--alert);font-weight:600}
.subrow .subacts{flex:none;margin-left:2px}
.subrow .subacts .icon{padding:1px 5px;min-width:22px;line-height:1.4}
.subrow:last-of-type{border-bottom:0}
#f-subs .subwrap{background:var(--fill);border-radius:var(--r-m);padding:4px 12px}
@media (hover:hover) and (pointer:fine){#f-subs .subrow:hover{background:var(--paper)}}
.subrow input[type=checkbox]{width:15px;height:15px;margin:2px 0 0;flex:none}
.subrow.done .stx{text-decoration:line-through;color:var(--ink-3)}
.subrow.mein .stx{font-weight:500}
.subacts{display:flex;gap:0}
@media (hover:hover) and (pointer:fine){@media (hover:hover) and (pointer:fine){
  .subrow .subacts .icon{opacity:.35;transition:opacity .12s}}
  .subrow:hover .subacts .icon,.subrow .subacts .icon:focus-visible{opacity:1}
}
.subadd{align-self:flex-start;color:var(--accent);padding-left:0;margin-top:2px}
/* Auf-/Zuklappen der Unteraufgaben (Fassung 86). */
.sublabel{display:inline-flex;align-items:center;gap:7px;background:none;border:0;padding:2px 0;margin:0 0 2px;cursor:pointer;font-size:12.5px;font-weight:500;color:var(--ink-2)}
.sublabel:hover{color:var(--ink)}
.sublabel .subchevron{width:0;height:0;border-left:5px solid currentColor;border-top:4px solid transparent;border-bottom:4px solid transparent;transition:transform .15s ease;transform:rotate(90deg)}
.sublabel.zu .subchevron{transform:rotate(0deg)}
.cardfoot{display:flex;align-items:center;gap:4px 6px;flex-wrap:wrap;border-top:1px solid var(--line);padding-top:8px;margin-top:2px}

.btx{font-weight:500}

/* ---------- Tagesansicht ---------- */
.days{display:grid;gap:10px;padding-top:4px}
.dayrow{display:grid;grid-template-columns:116px 1fr;background:var(--paper);border:1px solid var(--line);border-radius:var(--r-l);overflow:hidden}
.dayrow>div:first-child{padding:16px 16px;background:var(--fill)}
/* Steht statt einer Zahl ein Wort darin („nicht eingeplant“), passt es bei
   schmalen Spalten nicht — dann lieber kleiner und umbrechen als abschneiden. */
.dnum{font-size:21px;font-weight:600;line-height:1.15;font-variant-numeric:tabular-nums;
  min-width:0;overflow-wrap:anywhere}
.dwd{font-size:12px;color:var(--ink-3);margin-top:5px}
.daylist{padding:14px 18px;display:flex;flex-direction:column;gap:10px}
.drow{display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center;font-size:14px;cursor:pointer}
.drow .ref,.mrow .ref{margin-right:4px}
.drow.done .tt{text-decoration:line-through;color:var(--ink-3)}
/* Ziehen in der Tagesansicht: Zeile aufnehmen, auf einer Tagesgruppe ablegen */
.drow[draggable="true"]{cursor:grab}
.drow.drag{opacity:.4}
.dayrow.over{box-shadow:inset 0 0 0 2px var(--accent);background:var(--accent-soft)}
.dayrow.over>div:first-child{background:transparent}

/* ---------- Zeitstrahl ---------- */
.tlwrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-l);background:var(--paper)}
.tl{display:grid}
.tl>div{border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:7px;min-height:38px}
.tl .hd{font-size:11.5px;color:var(--ink-3);background:var(--fill)}
.tl .hd b{display:block;font-size:14px;color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.tl .hd.today{background:var(--accent-soft);color:var(--accent)}
.tl .lane{font-size:12px;color:var(--ink-2);font-weight:500;background:var(--paper);position:sticky;left:0;z-index:2}
.tl .cell{display:flex;flex-direction:column;gap:5px}
.tl .cell.we{background:var(--wochenend)}
.tl .cell.today{background:var(--accent-soft)}
.blk{border:0;border-radius:8px;background:var(--fill);padding:5px 7px;cursor:pointer;text-align:left;font-family:inherit;font-size:11.5px;line-height:1.3;overflow:hidden;box-shadow:var(--shadow-1)}
@media (hover:hover) and (pointer:fine){.blk:hover{background:var(--paper);box-shadow:var(--shadow-2)}}
.blk[data-prio="kritisch"]{background:var(--prio-krit-bg)}
.blk[data-prio="hoch"]{background:var(--prio-hoch-bg)}
.blk .bn{color:var(--ink-3);display:block;font-variant-numeric:tabular-nums}
.blk .bt{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-clamp:2;overflow:hidden;font-weight:500}
.blk.done{opacity:.45}
/* Ziehen im Zeitstrahl: Block aufnehmen, in einer Zelle (Tag × Bereich) ablegen */
.blk[draggable="true"]{cursor:grab}
.blk.drag{opacity:.4}
.tl .cell.over{box-shadow:inset 0 0 0 2px var(--accent);background:var(--accent-soft)}
.blk.hl-dep{box-shadow:0 0 0 2px var(--alert)}
.blk.hl-next{box-shadow:0 0 0 2px var(--accent)}
.tllegend{display:flex;flex-wrap:wrap;gap:18px;margin-top:14px;font-size:12px;color:var(--ink-3)}
.tllegend i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:7px;vertical-align:0}

/* ---------- Dialoge ---------- */
dialog{border:0;background:var(--paper);color:var(--ink);padding:0;max-width:520px;width:calc(100% - 32px);
  border-radius:var(--r-l);box-shadow:var(--shadow-3)}
dialog::backdrop{background:rgba(0,0,0,.28);backdrop-filter:blur(3px)}

/* ---------- Befehlsleiste (Strg/Cmd+K) — Fassung 73 ---------- */
.bfdlg{max-width:560px;width:calc(100% - 32px);align-self:flex-start;margin-top:12vh}
.bfbox{display:flex;flex-direction:column;max-height:70vh}
.bfkopf{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line)}
.bffeld{flex:1;min-width:0;border:0;background:none;color:var(--ink);font:inherit;font-size:16px;outline:none;padding:4px 2px}
.bffeld::placeholder{color:var(--ink-3)}
.bfkbd{flex:none;font-size:11px;color:var(--ink-3);border:1px solid var(--line);border-radius:6px;padding:2px 7px}
.bfliste{overflow-y:auto;padding:6px}
.bfzeile{display:flex;align-items:center;gap:11px;width:100%;text-align:left;border:0;background:none;
  color:var(--ink);font:inherit;padding:10px 12px;border-radius:9px;cursor:pointer}
.bfzeile .hic{color:var(--ink-3);flex:none}
.bfzeile--an{background:var(--accent-weich,var(--fill))}
.bfzeile--an .hic{color:var(--accent)}
.bftext{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bfwo{flex:none;font-size:12px;color:var(--ink-3)}
.bfleer{padding:18px 14px;color:var(--ink-3);text-align:center;margin:0}
/* Solange ein modaler Dialog offen ist, rollt die Seite dahinter nicht.
   Das Rechte-Polster ersetzt den verschwundenen Rollbalken, damit beim
   Öffnen nichts springt — siehe die Begründung an seiteFesthalten(). */
html.dlgauf{overflow:hidden;padding-right:var(--rollbalken,0px)}
.dlg-head{padding:22px 24px 6px;font-size:20px;font-weight:600;letter-spacing:-.02em;display:flex;align-items:center;gap:10px}
.dlg-body{padding:14px 24px 20px;display:grid;gap:16px;max-height:66vh;overflow-y:auto;overflow-x:hidden}
.dlg-body > *{min-width:0}
.dlg-body input,.dlg-body select,.dlg-body textarea{max-width:100%}
.field{display:grid;gap:6px;min-width:0}
/* Ein <select> ist von Haus aus so breit wie seine längste Option — in einem
   Raster sprengt es damit seine Spalte („Bereich“ über „Verantwortlich“ hinaus).
   min-width:0 nimmt ihm diese Mindestbreite, width:100% hält es in der Spalte,
   und text-overflow kürzt den sichtbaren Text statt ihn abzuschneiden. */
.field > *{min-width:0;max-width:100%}
.field > select,.field > input:not([type=checkbox]):not([type=file]),.field > textarea{width:100%}
.field label,.flab{font-size:12.5px;font-weight:500;color:var(--ink-2)}
.field label,.field .hintline,.flab{overflow-wrap:anywhere}
.two{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:16px}
.two > *,.two > * > *{min-width:0}
/* Name und Kürzel gehören zusammen: gleiche Grundlinie, Kürzel schmal.
   Der Hinweis unter dem Kürzel darf die Zeile nicht mehr verschieben. */
.namerow{display:grid;grid-template-columns:minmax(0,1fr) 128px;gap:14px;align-items:start}
.namerow > .field{align-self:start;min-width:0;grid-template-columns:minmax(0,1fr)}
.namerow input{width:100%;min-width:0}
.namerow .hintline{grid-column:1 / -1;margin-top:-8px}
@media (max-width:520px){.namerow{grid-template-columns:1fr}}
.dlg-foot{padding:16px 24px 20px;display:flex;gap:10px;align-items:center;flex-wrap:wrap;border-top:1px solid var(--line)}
.danger{color:var(--alert)}
.hintline{font-size:12.5px;color:var(--ink-3);line-height:1.5}
.colrow{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}
.colrow input[type=text]{flex:1 1 140px;min-width:0}
.colrow .swatches{flex:none}
.colrow .flag{flex:none}
.colrow:last-child{border-bottom:0}
.swatches{display:flex;gap:5px}
.sw{width:16px;height:16px;border:0;border-radius:50%;cursor:pointer;padding:0;opacity:.32;transition:opacity .12s, box-shadow .12s}
@media (hover:hover) and (pointer:fine){.sw:hover{opacity:.7}}
.sw[aria-pressed="true"]{opacity:1;box-shadow:0 0 0 2px var(--paper),0 0 0 3.5px var(--ink)}
.colrow input[type=text]{padding:7px 10px;font-size:14px}
.flag{font-size:12px;color:var(--ink-2);display:flex;align-items:center;gap:6px;white-space:nowrap}
/* Die Vorlagen-Optionen im „Neues Board"-Dialog (Fassung 113). */
.nbopt{display:grid;gap:10px;background:var(--fill);border-radius:var(--r-m);padding:12px 14px}
.nboptrows{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:9px;transition:opacity .15s}
.nbz{display:grid;gap:4px;font-size:12px;color:var(--ink-3)}
.nbz span{font-weight:600;letter-spacing:.02em}
.nbz select{font-size:13px;padding:6px 8px;border-radius:var(--r-s);border:1px solid var(--line-2,var(--line));background:var(--paper);color:var(--ink)}
.nbopt .hintline{margin:0}
/* Eine Zeile, die auf eine Entscheidung wartet — hebt sich vom Rest der
   Personenliste ab, ohne zu schreien. */
.anfragezeile{background:var(--accent-soft);border-radius:var(--r-s);padding:8px 10px;margin:0 -10px}
.flag--warte{color:var(--accent);font-weight:600}

/* ---------- Verlauf: wer hat was gemacht ---------- */
.verlauf{display:flex;flex-direction:column;gap:2px;max-height:52vh;overflow-y:auto;overflow-x:hidden}
.vrow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;
  padding:9px 2px;border-bottom:1px solid var(--line);align-items:center}
.vrow:last-child{border-bottom:0}
.vrow--zurueck{opacity:.55}
.vkopf{display:flex;align-items:center;gap:7px;min-width:0;font-size:13px;color:var(--ink-2);flex-wrap:wrap}
.vkopf b{color:var(--ink);font-weight:600}
.vwann{color:var(--ink-3);font-size:12px}
.vkarte{border:0;background:var(--fill);color:var(--accent);font:inherit;font-size:12px;
  padding:2px 7px;border-radius:6px;cursor:pointer;max-width:46%;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.vtext{grid-column:1;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 7px;font-size:13.5px;min-width:0}
.vfeld{color:var(--ink-3);font-size:12px;text-transform:uppercase;letter-spacing:.03em}
.valt{color:var(--ink-3);text-decoration:line-through;overflow-wrap:anywhere}
.vpfeil{color:var(--ink-3)}
.vneu{font-weight:550;overflow-wrap:anywhere}
.vzurueck{grid-column:2;grid-row:1 / span 2;justify-self:end;white-space:nowrap}
.vrow > .hintline{grid-column:2;grid-row:1 / span 2;justify-self:end;white-space:nowrap}
.verlaufbox > summary{cursor:pointer;font-size:12.5px;font-weight:600;color:var(--ink-3);
  text-transform:uppercase;letter-spacing:.04em;padding:4px 0;list-style:none}
.verlaufbox > summary::-webkit-details-marker{display:none}
.verlaufbox > summary::before{content:"▸ ";color:var(--ink-3)}
.verlaufbox[open] > summary::before{content:"▾ "}
@media (max-width:560px){
  /* Auf dem Telefon untereinander — nebeneinander bliebe für den Text nichts. */
  .vrow{grid-template-columns:minmax(0,1fr)}
  .vzurueck,.vrow > .hintline{grid-column:1;grid-row:auto;justify-self:start}
}
.linkbox{background:var(--fill);border-radius:var(--r-m);padding:14px 16px;display:grid;gap:6px}
.linkrow{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.linkrow input[type=text]{flex:1;min-width:180px;font-family:var(--f-mono);font-size:12px;background:var(--paper)}
.linkbox .field input,.linkbox .field select{background:var(--paper);width:100%}
.mlist{display:flex;flex-direction:column;min-width:0}
/* Zwei Zeilen statt drei Spalten: oben Person und Rolle, darunter die
   Handgriffe. In einen 520 Pixel breiten Dialog passen Name, E-Mail, Rollen-
   auswahl und zwei Knöpfe nebeneinander nicht — vorher rutschten sie aus dem
   Dialog heraus und waren auf dem Telefon gar nicht erreichbar. */
.mline{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;align-items:center;
  padding:10px 0;border-bottom:1px solid var(--line);font-size:14px;min-width:0}
.mline > *{min-width:0}
.mwho{min-width:0;flex-wrap:wrap}
.mwho > span{min-width:0;overflow-wrap:anywhere}
.mtaten{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-start;grid-column:1 / -1}
.mline > .flag,.mline > select.mrolle{justify-self:end}
select.mrolle{max-width:100%}
/* Knöpfe im Dialogkörper (ein Raster) sonst über die volle Breite gestreckt. */
.dlg-body > .btn{justify-self:start}
@media (max-width:620px){
  .mline{grid-template-columns:minmax(0,1fr)}
  .mline > .flag,.mline > select.mrolle{justify-self:start;width:100%;max-width:none}
  select.mrolle{font-size:13px;padding:6px 8px}
}

footer{margin-top:56px;padding-top:18px;border-top:1px solid var(--line);font-size:12.5px;color:var(--ink-3);display:flex;flex-wrap:wrap;gap:10px 20px}

@media (max-width:760px){
  .wrap{padding:0 18px 72px}
  .brow{grid-template-columns:1fr;gap:14px}
  .bnums{text-align:left}
  .dayrow{grid-template-columns:1fr}
  .dayrow>div:first-child{display:flex;align-items:baseline;gap:10px;padding:12px 16px}
  .dwd{margin-top:0}
  .two{grid-template-columns:1fr}
}
@media (prefers-reduced-motion: reduce){*{transition:none!important}}

/* ---------------- Einführung ---------------- */
.helpbtn{
  width:26px;height:26px;border-radius:50%;border:1px solid var(--line-2);
  background:var(--paper);color:var(--ink-2);font:600 14px/1 var(--f);
  cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
  margin-right:12px;transition:background .15s,color .15s,border-color .15s;
}
@media (hover:hover) and (pointer:fine){.helpbtn:hover{background:var(--accent);color:#fff;border-color:var(--accent)}}

.tour{position:fixed;inset:0;z-index:800}
.tour[hidden]{display:none!important}
.tour-hole{
  position:absolute;border-radius:var(--r-m);
  box-shadow:0 0 0 9999px rgba(18,26,36,.55);
  outline:2px solid var(--accent);outline-offset:0;
  transition:left .28s cubic-bezier(.4,0,.2,1),top .28s cubic-bezier(.4,0,.2,1),
             width .28s cubic-bezier(.4,0,.2,1),height .28s cubic-bezier(.4,0,.2,1),opacity .2s;
  pointer-events:none;
}
.tour-hole[style*="opacity: 0"]{box-shadow:0 0 0 9999px rgba(18,26,36,.55)}
.tour-tip{
  position:absolute;width:340px;max-width:calc(100vw - 24px);
  background:var(--paper);border-radius:var(--r-l);padding:18px 20px 14px;
  box-shadow:var(--shadow-3);transition:left .28s cubic-bezier(.4,0,.2,1),top .28s cubic-bezier(.4,0,.2,1);
}
.tour-step{font:500 11px/1 var(--f);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);margin-bottom:9px}
.tour-tip h3{margin:0 0 7px;font:600 17px/1.25 var(--f);color:var(--ink)}
.tour-tip p{margin:0 0 14px;font:400 13.5px/1.55 var(--f);color:var(--ink-2)}
.tour-dots{display:flex;gap:5px;margin-bottom:13px}
.tour-dots i{width:6px;height:6px;border-radius:50%;background:var(--line-2);transition:background .2s,width .2s}
.tour-dots i.was{background:var(--accent-2);opacity:.45}
.tour-dots i.on{background:var(--accent);width:16px;border-radius:3px}
.tour-foot{display:flex;align-items:center;gap:8px}
.tour-foot .spacer{flex:1}
.tour-foot button[disabled]{opacity:.4;cursor:default}
.tour-skip{
  border:0;background:none;padding:0;cursor:pointer;
  font:400 12.5px/1 var(--f);color:var(--ink-3);text-decoration:underline;text-underline-offset:3px;
}
@media (hover:hover) and (pointer:fine){.tour-skip:hover{color:var(--ink-2)}}
.check{display:flex;align-items:center;gap:9px;cursor:pointer;font-weight:400}
.check input{width:16px;height:16px;accent-color:var(--accent);margin:0}
@media (prefers-reduced-motion: reduce){
  .tour-hole,.tour-tip{transition:none}
}
@media (max-width:760px){
  .tour-tip{width:calc(100vw - 24px)}
  .helpbtn{margin-right:8px}
}

/* ---------------- Kommentare, Anhänge, Meldungen, Kalender ---------------- */
.clist{display:grid;gap:12px;margin-bottom:10px}
.citem{display:flex;gap:10px;align-items:flex-start}
.cbody{flex:1;min-width:0}
.chead{display:flex;align-items:baseline;gap:8px}
.chead b{font:600 13px/1.3 var(--f);color:var(--ink)}
.cwhen{font:400 11.5px/1 var(--f);color:var(--ink-3)}
.cdel{border:0;background:none;padding:0;margin-left:auto;cursor:pointer;
  font:400 11.5px/1 var(--f);color:var(--ink-3);text-decoration:underline;text-underline-offset:2px}
@media (hover:hover) and (pointer:fine){.cdel:hover{color:var(--alert)}}
/* Fassung 127: „bearbeiten" neben „löschen". Der Bearbeiten-Knopf schiebt sich
   nach rechts; steht er davor, braucht „löschen" sein eigenes margin-left:auto
   nicht mehr und rückt direkt daneben. */
.cedit{border:0;background:none;padding:0;margin-left:auto;cursor:pointer;
  font:400 11.5px/1 var(--f);color:var(--ink-3);text-decoration:underline;text-underline-offset:2px}
@media (hover:hover) and (pointer:fine){.cedit:hover{color:var(--accent)}}
.chead .cedit ~ .cdel{margin-left:0}
.ceditbox{margin-top:6px}
.ceditbtns{display:flex;gap:8px;margin-top:6px}
.ctext{font:400 13.5px/1.5 var(--f);color:var(--ink-2);white-space:pre-wrap;word-break:break-word;margin-top:2px}
.crow{display:grid;gap:8px}
.crow > .rte{width:100%}
.crow .rte.rte--klein .rte-feld{min-height:84px}
.crow .crow-foot{display:flex;align-items:center;gap:10px}
.crow .crow-foot .btn{white-space:nowrap;flex:none}
.crow .crow-foot .hintline{margin-right:auto}
.crow textarea{width:100%}

.flist{display:grid;gap:6px;margin-bottom:8px}
.fitem{display:flex;align-items:center;gap:10px;padding:7px 10px;background:var(--fill);border-radius:var(--r-s)}
.fname{font:500 13px/1.3 var(--f);color:var(--accent);text-decoration:none;word-break:break-all}
.fname:hover{text-decoration:underline}
.fmeta{font:400 11.5px/1 var(--f);color:var(--ink-3);margin-left:auto;white-space:nowrap}
.fitem .cdel{margin-left:10px}
.filerow{display:flex;align-items:center;gap:10px;flex-wrap:wrap}

.bell{position:relative;width:30px;height:30px;border-radius:50%;border:1px solid var(--line-2);
  background:var(--paper);color:var(--ink-2);cursor:pointer;display:inline-flex;align-items:center;
  justify-content:center;margin-right:8px;transition:background .15s,color .15s,border-color .15s}
@media (hover:hover) and (pointer:fine){.bell:hover{background:var(--accent);color:#fff;border-color:var(--accent)}}
.bellcnt{position:absolute;top:-4px;right:-2px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;
  background:var(--alert);color:#fff;font:600 10px/16px var(--f);text-align:center}
.notelist{display:grid;gap:6px;max-height:52vh;overflow:auto}
.nitem{display:block;width:100%;text-align:left;border:1px solid var(--line);border-radius:var(--r-s);
  background:var(--paper);padding:10px 12px;cursor:pointer;transition:background .15s,border-color .15s}
@media (hover:hover) and (pointer:fine){.nitem:hover{background:var(--fill);border-color:var(--line-2)}}
.nitem.neu{border-left:3px solid var(--accent);background:var(--accent-soft)}
.ntext{font:500 13px/1.4 var(--f);color:var(--ink)}
.nmeta{font:400 11.5px/1 var(--f);color:var(--ink-3);margin-top:4px}

.chip--plan{background:#EAF1F8;color:#1F6FB2}
.chip--mark{background:var(--fill);color:var(--ink-3)}
.chip--soft{background:transparent;color:var(--ink-3);border:1px solid var(--line)}
.calrow{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0 4px}
.dayswitch{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.dayswitch .lab{font:400 12px/1 var(--f);color:var(--ink-3)}
@media (max-width:760px){
  .fmeta{margin-left:0;width:100%}
  .fitem{flex-wrap:wrap}
  .crow .crow-foot{flex-wrap:wrap}
}

/* ---------------- Sprints ---------------- */
.chip--sprint{background:#F1EDF8;color:#5B3EA6;font-weight:500}
.selbox{width:15px;height:15px;margin:0 7px 0 0;accent-color:var(--accent);flex:none;cursor:pointer}
.selbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  background:var(--accent-soft);border:1px solid rgba(18,70,122,.18);border-radius:var(--r-m);
  padding:10px 14px;margin-bottom:14px}
.selbar b{font:600 13px/1 var(--f);color:var(--accent)}
.selbar .lab{font:400 12px/1 var(--f);color:var(--ink-2)}
.selbar select{max-width:260px}
/* Das Datumsfeld (Fassung 57) sieht aus wie die Auswahlfelder daneben —
   Safari gibt ihm sonst seine eigene Höhe, und die Leiste wird krumm. */
.selbar input[type="date"]{font:inherit;font-size:13px;padding:6px 9px;
  border:1px solid var(--line);border-radius:var(--r-s);background:var(--paper);
  color:var(--ink);min-height:32px}
.selbar .spacer{flex:1}
#selbtn[aria-pressed="true"]{background:var(--accent);color:#fff;border-color:var(--accent)}

.sprinthead{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.sprinthead select{max-width:300px}
.sprinthead .spacer{flex:1}
.sprintmeta{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:20px}
.spdates{font:600 14px/1 var(--f);color:var(--ink)}
.spcount{font:400 12.5px/1 var(--f);color:var(--ink-3)}
.sprintmeta .bar{flex:1;min-width:140px;max-width:320px;height:6px;margin:0}

.spgroup{margin-bottom:22px}
.spghead{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.spghead i{width:7px;height:7px;border-radius:50%;flex:none}
.spghead h3{margin:0;font:600 13px/1 var(--f);color:var(--ink)}
.spghead .cnt{font:400 12px/1 var(--f);color:var(--ink-3)}
.sprow{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--paper);
  border:1px solid var(--line);border-radius:var(--r-s);margin-bottom:6px}
.sprow.sub{margin-left:26px;background:var(--fill)}
.sprow.done .sptitle{text-decoration:line-through;color:var(--ink-3)}
.subpfeil{color:var(--ink-3);font-size:12px;flex:none}
.sptitle{font:400 13.5px/1.4 var(--f);color:var(--ink);flex:1;min-width:0}
.spmeta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end}
@media (max-width:760px){
  .sprow{flex-wrap:wrap}
  .sptitle{flex:1 1 100%;order:-1}
  .selbar{gap:8px}
  .selbar select{max-width:100%;flex:1 1 100%}
}
/* In der engen Karte bleibt die Sprint-Marke der Unteraufgabe weg —
   in der geöffneten Karte steht sie. Termin nur in der geöffneten Karte. */
.card .subs .chip--sprint,.card .subs .subdue{display:none}
.card .subrow{font-size:12.5px;padding:2px 0;min-height:24px}
.card .subs .subwrap{padding-top:4px}

/* Strich beim Ziehen: zeigt, wo die Karte landet */
.dropline{
  height:3px;border-radius:2px;background:var(--accent);
  box-shadow:0 0 0 3px rgba(18,70,122,.10);
  margin:-3px 0;flex:none;pointer-events:none;
}
.colm.over .stack{min-height:70px}
.card{cursor:grab}
.card.drag{cursor:grabbing}

/* ---------------- Sprint: aufklappen, sortieren, filtern ---------------- */
.sprinttools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:16px;
  padding:10px 12px;background:var(--fill);border-radius:var(--r-m)}
.sprinttools label{font:400 12px/1 var(--f);color:var(--ink-3)}
.sprinttools select{padding:6px 26px 6px 9px;font-size:12.5px}
.sprinttools .spacer{flex:1}
.sprinttools .check{gap:6px;font-size:12.5px;color:var(--ink-2)}

.spstack{display:flex;flex-direction:column;gap:6px}
.spitem{border:1px solid var(--line);border-radius:var(--r-s);background:var(--paper);overflow:hidden;
  transition:border-color .15s,box-shadow .15s}
@media (hover:hover) and (pointer:fine){.spitem:hover{border-color:var(--line-2)}}
.spitem.auf{border-color:var(--accent);box-shadow:var(--shadow-1)}
.spitem.drag{opacity:.4}
.spitem .sprow{border:0;border-radius:0;margin:0;cursor:pointer;background:transparent}
.spitem.sub .sprow,.spitem .sprow.sub{margin-left:0;background:var(--fill)}
.spcaret{color:var(--ink-3);font-size:11px;flex:none;width:12px}
.chip--prio.prio-kritisch{background:var(--prio-krit-bg);color:var(--prio-krit)}
.chip--prio.prio-hoch{background:var(--prio-hoch-bg);color:var(--prio-hoch)}
.chip--prio.prio-normal{background:var(--prio-norm-bg);color:var(--prio-norm)}

.spdetail{border-top:1px solid var(--line);padding:12px 14px 14px;background:var(--fill)}
.spdkopf{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:10px}
.spdkopf .spacer{flex:1}
.spdfeld{display:flex;align-items:center;gap:7px;font:400 12px/1 var(--f);color:var(--ink-3)}
.spdfeld input{padding:5px 8px;font-size:12.5px}
.spdlab{font:500 11px/1 var(--f);letter-spacing:.03em;text-transform:uppercase;color:var(--ink-3);margin-bottom:6px}
.spnote{width:100%;font:400 13.5px/1.5 var(--f);resize:vertical}
.spsave{display:block;font:400 11.5px/1 var(--f);color:var(--ink-3);margin-top:5px;min-height:12px}
@media (max-width:760px){
  .sprinttools{gap:6px}
  .sprinttools select{flex:1 1 auto;min-width:120px}
  .spdkopf{gap:10px}
}

/* ---------------- Tags ---------------- */
.chip--tag{border:1px solid transparent;font-weight:500}
.picktag{display:inline-flex;align-items:center;gap:6px}
.picktag i{width:8px;height:8px;border-radius:50%;flex:none}
.toolbar select{max-width:180px}
#f-reset[hidden]{display:none!important}

/* Werkzeugknöpfe mit Symbol */
.btn--tool,.btn--icon{display:inline-flex;align-items:center;gap:7px}
.btn--tool svg,.btn--icon svg{flex:none;opacity:.75}
@media (hover:hover) and (pointer:fine){.btn--tool:hover svg,.btn--icon:hover svg{opacity:1}}
.btn--icon{position:relative;padding-left:10px;padding-right:10px}
.btn--icon.an{background:var(--accent-soft);border-color:rgba(18,70,122,.28);color:var(--accent)}
.btn--icon.an svg{opacity:1}
/* Der Punkt am Trichter: gefiltert wird, auch wenn die Leiste zu ist. */
.fpunkt{position:absolute;top:-4px;right:-4px;min-width:15px;height:15px;padding:0 4px;
  border-radius:999px;background:var(--accent);color:#fff;
  font:600 10px/15px var(--f);text-align:center;box-shadow:0 0 0 2px var(--paper)}
.fpunkt:empty{min-width:9px;width:9px;height:9px;padding:0;top:-2px;right:-2px}

/* ---------------- Filterleiste ---------------- */
.filterbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 18px;
  padding:9px 12px;background:var(--fill);border-radius:var(--r-m)}
/* Gespeicherte Ansichten (Fassung 73) */
.fviews{display:inline-flex}
.fvmenu{z-index:90;min-width:220px;max-width:min(300px,calc(100vw - 16px));
  background:var(--paper);border:1px solid var(--line);border-radius:var(--r-m);
  box-shadow:var(--shadow-3);padding:6px}
.fvleer{margin:0;padding:10px 10px 12px;font-size:12.5px;color:var(--ink-3);line-height:1.45}
.fvzeile{display:flex;align-items:center;gap:4px}
.fvname{flex:1;min-width:0;text-align:left;border:0;background:none;color:var(--ink);font:inherit;
  padding:8px 10px;border-radius:7px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fvweg{flex:none;border:0;background:none;color:var(--ink-3);font-size:17px;line-height:1;
  width:30px;height:30px;border-radius:7px;cursor:pointer}
@media (hover:hover) and (pointer:fine){
  .fvname:hover{background:var(--fill)} .fvweg:hover{background:var(--fill);color:var(--ink)}
}
.fvsichern{display:block;width:100%;text-align:left;border:0;border-top:1px solid var(--line);
  margin-top:4px;background:none;color:var(--accent);font:inherit;padding:10px;border-radius:0 0 7px 7px;cursor:pointer}
@media (hover:hover) and (pointer:fine){ .fvsichern:hover{background:var(--fill)} }
.filterbar .flabel{font:500 11px/1 var(--f);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3)}
.filterbar select{padding:6px 26px 6px 9px;font-size:12.5px;max-width:190px;background-color:var(--paper)}
.filterbar .spacer{flex:1}
@media (max-width:760px){
  .filterbar select{flex:1 1 140px;max-width:none}
}
.sorthint{font:400 11.5px/1 var(--f);color:var(--ink-3);font-style:italic}

/* Eigene Zeile für die Ansichtswahl */
.viewrow{display:flex;align-items:center;padding:16px 0 0}

/* Das X in jedem Dialogkopf */
.dlg-head{position:relative}
.dlg-x{margin-left:auto;flex:none;width:30px;height:30px;padding:0;border-radius:50%;
  border:0;background:transparent;color:var(--ink-3);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
  transition:background .13s ease,color .13s ease}
@media (hover:hover) and (pointer:fine){.dlg-x:hover{background:var(--fill);color:var(--ink)}}
.dlg-x:focus-visible{outline:0;box-shadow:0 0 0 3px rgba(18,70,122,.22)}

/* Der Daumenknopf — überall. Am Telefon liegt er unter dem Daumen, am
   Rechner erspart er den Weg nach oben zu „Neue Aufgabe". */
.fab{display:inline-flex;align-items:center;justify-content:center;
  position:fixed;right:22px;bottom:22px;z-index:70;
  width:54px;height:54px;border-radius:50%;border:0;
  background:var(--accent);color:#fff;box-shadow:var(--shadow-3);cursor:pointer;
  transition:transform .12s ease,box-shadow .12s ease}
@media (hover:hover) and (pointer:fine){.fab:hover{transform:translateY(-1px);box-shadow:0 10px 24px rgba(0,0,0,.22)}}
.fab:active{transform:scale(.94)}
.fab:focus-visible{outline:0;box-shadow:0 0 0 3px rgba(18,70,122,.28),var(--shadow-3)}
@media (max-width:899px){
  .fab{right:18px;bottom:18px}
}
/* Auf schmalen Schirmen bleibt vom Werkzeugknopf nur das Symbol —
   sonst laufen drei Knöpfe über drei Zeilen. */
@media (max-width:620px){
  .btn--tool .btxt{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
  .btn--tool{padding-left:11px;padding-right:11px}
}
/* Ein Doppeltipp soll die Karte öffnen. Ohne das hier deutet das Telefon
   ihn als „hineinzoomen" und schickt gar kein dblclick. */
.card,.mrow,.drow,.spitem,.blk{touch-action:manipulation}

/* Auf dem Telefon passen die fünf Ansichten nicht nebeneinander — der
   letzte Reiter („Eingang") lag bisher außerhalb des Bildschirms und war
   nicht erreichbar. Jetzt schiebt sich die Reihe selbst zur Seite. */
@media (max-width:760px){
  .seg--view{max-width:100%;overflow-x:auto;justify-content:flex-start;
    -webkit-overflow-scrolling:touch;scrollbar-width:none}
  .seg--view::-webkit-scrollbar{display:none}
  .seg--view button{flex:none;white-space:nowrap}
}


/* Die Beschneidung gegen waagerechten Überlauf steht jetzt global ganz oben
   (html{overflow-x:hidden}) und gilt damit auch am Schreibtisch. */
dialog{max-width:min(560px, calc(100vw - 32px))}
.pickcrew,.flist,.clist,.linkrow{max-width:100%}
.pickcrew{display:flex;flex-wrap:wrap;gap:6px}
.linkrow{display:flex;gap:8px;flex-wrap:wrap}
.linkrow input{flex:1 1 200px;min-width:0}
.fname,.ctext{overflow-wrap:anywhere}

/* Board-Einstellungen */
.setgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}
.setbtn{display:flex;flex-direction:column;align-items:flex-start;gap:3px;text-align:left;
  border:1px solid var(--line);border-radius:var(--r-m);background:var(--paper);padding:11px 13px;cursor:pointer;
  transition:border-color .15s,background .15s}
@media (hover:hover) and (pointer:fine){.setbtn:hover{border-color:var(--accent);background:var(--accent-soft)}}
.setbtn b{font:600 13px/1.2 var(--f);color:var(--ink)}
.setbtn small{font:400 11.5px/1.35 var(--f);color:var(--ink-3)}
.setsection{border-top:1px solid var(--line);padding-top:14px}

/* ---------------- Notiz-Editor ---------------- */
.rte{border:1px solid var(--line-2);border-radius:var(--r-s);background:var(--paper);position:relative}
.rte-bar{display:flex;align-items:center;gap:2px;flex-wrap:wrap;padding:5px 6px;background:var(--fill);
  border-bottom:1px solid var(--line);border-radius:var(--r-s) var(--r-s) 0 0}
.rte-btn{border:0;background:none;border-radius:5px;padding:4px 7px;cursor:pointer;
  font:500 12px/1 var(--f);color:var(--ink-2);transition:background .12s,color .12s}
@media (hover:hover) and (pointer:fine){.rte-btn:hover{background:var(--fill-2);color:var(--ink)}}
.rte-b{font-weight:700}
.rte-i{font-style:italic}
.rte-s{text-decoration:line-through}
.rte-trenn{width:1px;height:14px;background:var(--line-2);margin:0 4px}
.rte-feld{min-height:92px;padding:10px 12px;font:400 13.5px/1.6 var(--f);color:var(--ink);outline:none;
  overflow-wrap:anywhere;max-height:340px;overflow-y:auto}
.rte--klein .rte-feld{min-height:56px}
.rte-feld:empty::before{content:attr(data-leer);color:var(--ink-3)}
.rte-feld:focus{background:var(--wochenend)}
.rte-feld p{margin:0 0 8px}
.rte-feld p:last-child{margin-bottom:0}
.rte-feld ul,.rte-feld ol{margin:0 0 8px;padding-left:22px}
.rte-feld img{max-width:100%;border-radius:var(--r-s);margin:4px 0}
.rte-feld a{color:var(--accent)}
.rte-feld code{background:var(--fill);padding:1px 5px;border-radius:4px;font-family:var(--f-mono);font-size:12.5px}
.rte:focus-within{border-color:var(--accent)}

.mention{background:var(--accent-soft);color:var(--accent);border-radius:4px;padding:1px 5px;font-weight:500;
  white-space:nowrap}
.ctext .mention,.notiz .mention{font-size:.95em}

/* Hängt am Seitenkörper und steht frei über allem — auch über Dialogen. */
.rte-namen{position:fixed;z-index:1000;background:var(--paper);border:1px solid var(--line-2);
  border-radius:var(--r-m);box-shadow:var(--shadow-2);padding:4px;display:flex;flex-direction:column;min-width:190px}
.rte-name{display:flex;align-items:center;gap:8px;border:0;background:none;padding:6px 8px;border-radius:6px;
  cursor:pointer;font:400 13px/1 var(--f);color:var(--ink);text-align:left}
.rte-name:hover,.rte-name.an{background:var(--accent-soft)}

/* ---------------- Rechtsklick-Menü ---------------- */
.ctxmenu{position:fixed;z-index:900;min-width:212px;max-width:280px;background:var(--paper);
  border:1px solid var(--line-2);border-radius:var(--r-m);box-shadow:var(--shadow-3);padding:5px;
  max-height:80vh;overflow-y:auto}
.ctxkopf{font:500 10.5px/1 var(--f);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);
  padding:7px 9px 5px}
.ctxitem{display:block;width:100%;text-align:left;border:0;background:none;border-radius:6px;
  padding:7px 9px;cursor:pointer;font:400 13px/1.2 var(--f);color:var(--ink)}
@media (hover:hover) and (pointer:fine){.ctxitem:hover{background:var(--fill)}}
.ctxitem.an{font-weight:600}
.ctxitem.ctx-weg{color:var(--alert)}
.ctxitem.ctx-esk{color:var(--alert);font-weight:600}
.ctxitem.ctx-kritisch{color:var(--prio-krit)}
.ctxitem.ctx-hoch{color:var(--prio-hoch)}
.ctxitem.ctx-normal{color:var(--prio-norm)}
.ctxtrenn{height:1px;background:var(--line);margin:5px 0}
.ctxtags{display:flex;flex-wrap:wrap;gap:5px;padding:3px 9px 8px}
.ctxtag{border:1px solid var(--line-2);border-radius:999px;padding:3px 9px;font:500 11.5px/1.3 var(--f);
  cursor:pointer;background:none}
.ctxsel{margin:2px 9px 8px;width:calc(100% - 18px);font-size:12.5px;padding:6px 26px 6px 9px}

/* Notiz in der Vorschau und im Sprint */
.notiz b,.notiz strong{font-weight:600}
.notiz img{max-width:100%;border-radius:var(--r-s)}

/* Benachrichtigungs-Einstellungen */
.notegrid{display:flex;flex-direction:column;gap:2px}
.noterow{display:grid;grid-template-columns:1fr 52px 62px;align-items:center;gap:8px;
  padding:8px 0;border-bottom:1px solid var(--line)}
.noterow:last-child{border-bottom:0}
.notehead{padding-bottom:6px;border-bottom:1px solid var(--line-2)}
.notehead .notewas{font:500 11px/1 var(--f);letter-spacing:.03em;text-transform:uppercase;color:var(--ink-3)}
.notehead .notekanal{font:500 11px/1 var(--f);letter-spacing:.03em;text-transform:uppercase;color:var(--ink-3);text-align:center}
.notewas{display:flex;flex-direction:column;gap:2px;min-width:0}
.notewas b{font:500 13px/1.3 var(--f);color:var(--ink)}
.notewas small{font:400 11.5px/1.4 var(--f);color:var(--ink-3)}
.notekanal{display:flex;justify-content:center}
.notekanal input{width:16px;height:16px;accent-color:var(--accent);margin:0;cursor:pointer}
.farbpunkt{width:15px;height:15px;border-radius:50%;border:1.5px solid var(--line-2);background:transparent;
  cursor:pointer;padding:0;flex:none;transition:transform .12s,box-shadow .12s}
@media (hover:hover) and (pointer:fine){.farbpunkt:hover{transform:scale(1.18);box-shadow:0 0 0 3px rgba(0,0,0,.05)}}
.sprow .chip--prio{cursor:pointer;border:0}
.sprow .chip--prio:disabled{cursor:default}
.chip--prio.prio-normal{background:var(--fill);color:var(--ink-3)}

/* ---------- Ablage ---------- */
.dlg--wide{max-width:min(760px, calc(100vw - 32px))}
.abcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:4px;font-size:13px}
.crumb{border:0;background:none;padding:3px 6px;border-radius:6px;color:var(--accent);font-size:13px;font-weight:500}
@media (hover:hover) and (pointer:fine){.crumb:hover{background:var(--accent-soft)}}
.crumb--hier{color:var(--ink);font-weight:600}
.crumbsep{color:var(--ink-3)}
.abtools{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.abtools input[type=search]{width:200px;max-width:100%}
.abtools label.btn{cursor:pointer}
.ablist{display:grid;gap:2px;max-height:44vh;overflow-y:auto;overflow-x:hidden;
  border:1px solid var(--line);border-radius:var(--r-m);padding:6px}
.abrow{display:flex;align-items:flex-start;gap:10px;padding:9px 10px;border-radius:var(--r-s)}
@media (hover:hover) and (pointer:fine){.abrow:hover{background:var(--fill)}}
.abicon{font-size:16px;line-height:1.3;flex:none}
.abmitte{flex:1;min-width:0}
.abname{display:block;border:0;background:none;padding:0;text-align:left;font-size:14.5px;
  font-weight:550;color:var(--ink);word-break:break-word}
a.abname{color:var(--accent)}
.abname:hover{text-decoration:underline}
.abmeta{font-size:12px;color:var(--ink-3);margin-top:2px}
.abnote{font-size:12.5px;color:var(--ink-2);margin-top:3px}
.abmove{flex:none;width:168px;max-width:100%;font-size:12.5px;padding:4px 6px}
.abakt{display:flex;align-items:center;gap:10px;flex:none}
.abrow .linkbtn,.abrow .cdel{flex:none;font-size:12.5px;white-space:nowrap}
@media (max-width:640px){
  /* Schmal: Name und Angaben oben, die Handgriffe gesammelt darunter. */
  .abrow{flex-wrap:wrap;row-gap:8px}
  .abmitte{flex:1 1 140px}
  .abakt{flex:1 1 100%;flex-wrap:wrap;gap:8px 12px}
  .abmove{width:auto;min-width:0;flex:1 1 120px;max-width:100%}
}

/* ---------- API-Schlüssel im Profil ---------- */
.keylist{display:grid;gap:6px}
.keyrow{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-s);font-size:13.5px}
.keyrow .hintline{font-size:12px}
.keynew{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.keynew input{flex:1 1 180px;min-width:0}
.keyshow{margin-top:10px;padding:12px;background:var(--accent-soft);border-radius:var(--r-s);display:grid;gap:8px;justify-items:start}
.keycode{font-family:var(--f-mono);font-size:13px;background:var(--paper);padding:6px 10px;border-radius:6px;word-break:break-all;user-select:all}

/* ---------- Zwei-Faktor im Profil ---------- */
.twofa-on{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:4px}
.badge-ok{display:inline-block;background:#E6F4EA;color:#1F6B3A;font-weight:600;font-size:12px;padding:3px 10px;border-radius:999px}
.twofa-setup{display:grid;grid-template-columns:150px 1fr;gap:16px;align-items:start}
.twofa-qr svg{width:150px;height:150px;display:block;border:1px solid var(--line);border-radius:var(--r-s);background:#fff}
.twofa-txt p{margin:0 0 8px;font-size:13.5px}
.twofa-code{font-family:var(--f-mono);font-size:18px;letter-spacing:.14em;width:130px;text-align:center}
.codegrid{display:grid;grid-template-columns:repeat(2,auto);gap:6px 14px}
@media (max-width:520px){.twofa-setup{grid-template-columns:1fr}}
.langrow{margin-top:10px;font-size:12.5px;display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.langrow a{color:var(--ink-3)}.langrow a.an{color:var(--accent);font-weight:600}

/* Einladung auf der Registrierseite — nennt das Board beim Namen. */
.einladung{
  margin:0 0 16px;
  padding:12px 14px;
  background:var(--accent-soft);
  border-left:3px solid var(--accent);
  border-radius:0 var(--r-s) var(--r-s) 0;
  font-size:14px;
  line-height:1.5;
  color:var(--ink);
}
.einladung span{display:block;margin-top:3px;color:var(--ink-2)}

/* ============ Eingang ============ */
.eingang{max-width:760px;margin:0 auto;padding:4px 0 40px}
.einkopf h2{font-size:21px;margin:0 0 6px;letter-spacing:-.01em}
.einkopf p{margin:0 0 16px;color:var(--ink-2);font-size:14.5px;line-height:1.55;max-width:60ch}
.einneu{display:flex;gap:8px;margin-bottom:20px}
.einneu input{flex:1;min-width:0;font:inherit;padding:11px 13px;border:1px solid var(--line-2);
  border-radius:var(--r-m);background:var(--paper);color:var(--ink)}
.einneu input:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:transparent}
.einliste{display:flex;flex-direction:column;gap:8px}
.einkarte{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-m);
  box-shadow:var(--shadow-1);overflow:hidden}
.einkarte.auf{border-color:var(--accent);box-shadow:var(--shadow-2)}
.einzeile{display:flex;align-items:flex-start;gap:12px;padding:13px 16px}
.eintitel{flex:1;min-width:0;text-align:left;background:none;border:0;padding:0;cursor:pointer;
  font:inherit;font-weight:600;color:var(--ink);line-height:1.45}
@media (hover:hover) and (pointer:fine){.eintitel:hover{color:var(--accent)}}
.einvon{flex:none;font-size:12px;color:var(--ink-3);font-variant-numeric:tabular-nums;padding-top:2px}
.einform{padding:0 16px 16px;border-top:1px solid var(--line);padding-top:14px;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;align-items:end}
.einform select{width:100%}
.einknoepfe{display:flex;gap:8px;grid-column:1/-1;margin-top:2px}
.einleer{text-align:center;padding:46px 20px;color:var(--ink-2);
  border:1px dashed var(--line-2);border-radius:var(--r-m)}
.einleer p{margin:0 0 4px}
.vzahl{display:inline-block;min-width:17px;margin-left:6px;padding:0 5px;border-radius:9px;
  background:var(--accent);color:#fff;font-size:11px;line-height:17px;font-variant-numeric:tabular-nums}
button[aria-pressed="true"] .vzahl{background:var(--paper);color:var(--accent)}

/* ============ Rückmeldung ============ */
.feier{
  position:fixed;left:50%;bottom:52px;transform:translate(-50%,14px);
  z-index:90;pointer-events:none;
  background:var(--ink);color:var(--paper);
  padding:9px 18px;border-radius:999px;
  font-weight:600;font-size:15px;letter-spacing:.01em;
  box-shadow:var(--shadow-2);
  opacity:0;transition:opacity .16s ease,transform .16s ease;
}
.feier--gross{font-size:19px;padding:12px 26px}
.feier.an{opacity:1;transform:translate(-50%,0)}
.funken{position:fixed;inset:0;z-index:89;pointer-events:none}

/* Sprintabschluss — einmal die Woche, deshalb größer als alles andere.
   Bewusst ohne abdunkelnden Hintergrund: das Feuerwerk liegt darunter und
   soll nicht durch eine Milchglasscheibe. Die Karte trägt ihren eigenen
   Schatten, das reicht zum Lesen. */
.finale{position:fixed;inset:0;z-index:91;display:flex;align-items:center;justify-content:center;
  pointer-events:none;opacity:0;transition:opacity .3s ease}
.finale.an{opacity:1}
.finale .fkarte{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-l);
  padding:24px 40px 26px;text-align:center;box-shadow:var(--shadow-3);
  transform:translateY(16px) scale(.94);transition:transform .42s cubic-bezier(.2,.9,.3,1.25)}
.finale.an .fkarte{transform:none}
.finale .fkicker{font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--gruen);font-weight:600}
.finale h2{font-size:23px;margin:7px 0 0;letter-spacing:-.022em}
.finale .fzahl{font-size:46px;font-weight:700;color:var(--accent);
  letter-spacing:-.035em;line-height:1.08;margin:8px 0 2px;font-variant-numeric:tabular-nums}
.finale .fzeile{font-size:14px;color:var(--ink-2)}
@media (prefers-reduced-motion: reduce){
  .finale .fkarte{transform:none;transition:none}
}
@media (prefers-reduced-motion: reduce){
  .feier{transition:opacity .16s ease}
  .feier.an{transform:translate(-50%,0)}
}

/* ============ Konto im Profil ============ */
.kontoblock{border:1px solid var(--line);border-radius:var(--r-m);padding:14px 16px;margin-top:12px;
  background:var(--fill)}
.kontoblock--rot{background:var(--prio-krit-bg);border-color:rgba(176,58,18,.22)}
.kontotitel{font-weight:700;font-size:14px;margin-bottom:4px}
.kontoblock--rot .kontotitel{color:var(--alert)}
.kontoreihe{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.kontoreihe input{flex:1;min-width:150px}
.kontoblock input{font:inherit;padding:9px 11px;border:1px solid var(--line-2);
  border-radius:var(--r-s);background:var(--paper);color:var(--ink);width:100%}

/* ============ Import-Vorschlag ============ */
.vorschlag{background:var(--accent-soft);border-left:3px solid var(--accent);
  border-radius:0 var(--r-s) var(--r-s) 0;padding:13px 15px;margin:4px 0 14px}
.vtitel{font-weight:700;font-size:13px;margin-bottom:8px;color:var(--accent)}
.vzeile{display:flex;gap:10px;align-items:baseline;font-size:14px;line-height:1.5;padding:3px 0}
.vzahl2{flex:none;min-width:30px;text-align:right;font-weight:700;
  font-variant-numeric:tabular-nums;color:var(--ink)}
.seg--wohin{flex-wrap:wrap}
.seg--wohin button{font-size:13px}

/* Ein Link in der Cloud sieht anders aus als eine Datei — sonst klickt man
   ihn in der Erwartung an, dass etwas herunterlädt. */
.ablist .ablink .abname{color:var(--accent-2)}
.ablist .ablink .abname::after{content:" \2197";font-size:11px;opacity:.7}

/* Das Abbild, das beim Ziehen am Finger hängt */
.ziehbild{position:fixed;z-index:95;pointer-events:none;
  box-shadow:0 18px 40px rgba(0,0,0,.24);opacity:.95;
  transform-origin:center;rotate:1.5deg;scale:1.03}
/* Solange gezogen wird, darf nichts markiert werden und nichts hüpfen */
body.zieht{user-select:none;-webkit-user-select:none}
body.zieht .card{transition:none}

/* Zustimmung bei der Anmeldung */
.zustimmung{display:flex;gap:10px;align-items:flex-start;font-size:13px;line-height:1.5;
  color:var(--ink-2);font-weight:400;cursor:pointer}
.zustimmung input{flex:none;margin-top:2px;width:17px;height:17px;accent-color:var(--accent)}
.zustimmung a{text-decoration:underline}

/* Das Spaltenband — nur auf dem Telefon sichtbar (Regel weiter oben). */
.spaltenband{display:none;align-items:center;gap:9px;
  margin:0 -28px 14px;padding:11px 28px 12px;background:var(--fill);
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);
  box-shadow:0 6px 8px -8px rgba(0,0,0,.14)}
.spaltenband .sbdot{width:9px;height:9px;border-radius:50%;flex:none}
.spaltenband .sbname{font-weight:600;font-size:14.5px;letter-spacing:-.01em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.spaltenband .sbzahl{font-size:12.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.spaltenband .spacer{margin-left:auto}
.spaltenband button{border:1px solid var(--line-2);background:var(--paper);color:var(--ink-2);
  width:30px;height:30px;border-radius:8px;flex:none;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;font-size:15px;line-height:1}
.spaltenband button:disabled{opacity:.35;cursor:default}
/* Erst hier sichtbar schalten — diese Regeln müssen NACH den Grundregeln
   stehen, sonst gewinnt bei gleicher Spezifität das, was weiter oben in der
   Datei steht. Genau daran ist der erste Versuch gescheitert. */
@media (max-width:899px){
  /* Seit Fassung 70 klebt die Kopfleiste. Das Spaltenband hält genau
     darunter an — top = Höhe der Kopfleiste, gemessen statt geraten.

     Fassung 73: Bis hierher stand hier „+ var(--klebetop)", also zusätzlich
     die Höhe der Ansichtswahl darüber. Das ging von einer klebenden
     Ansichtswahl aus — die klebte aber nie: Ihre sticky-Regel zielt auf die
     KLASSE .viewrow, das Element trägt den NAMEN als id (class="toolbar").
     Die Regel griff nie, die Leiste scrollte weg, und das Band blieb um
     klebetop zu tief allein in der Mitte hängen (Karten schienen darüber
     durch). Jetzt klebt das Band direkt unter der Kopfleiste; die Ansichtswahl
     darf wegscrollen — beim Scrollen durch Karten braucht man die Spalte, nicht
     die Werkzeuge. */
  .spaltenband{display:flex;position:sticky;top:var(--kopfhoehe,0px);z-index:5}
  /* Beide Streifen kleben direkt übereinander. Eine echte Lücke ginge nicht
     — durch die würden die Karten durchscrollen. Also Luft innerhalb der
     Streifen: unten an den Reitern, oben und unten am Band. Dann liest man
     zwei Dinge statt eines Blocks. */
  .viewrow{position:sticky;top:var(--kopfhoehe,0px);z-index:6;margin:0 -28px 0;
    padding:10px 28px 14px;
    background:var(--paper);box-shadow:0 6px 10px -8px rgba(0,0,0,.18)}
}
@media (max-width:760px){
  .viewrow,.spaltenband{margin-left:-18px;margin-right:-18px;padding-left:18px;padding-right:18px}
}

/* ---------- Preise in Kurzform auf der Anmeldeseite ---------- */
.preiskurz{margin:26px 0 0;padding:16px 18px;border:1px solid var(--line);
  border-radius:var(--r-l);background:var(--paper)}
.pkkopf{display:flex;align-items:baseline;gap:12px;margin-bottom:12px}
.pkkopf b{font-size:14px;letter-spacing:-.01em}
.pkkopf a{margin-left:auto;font-size:12.5px;font-weight:500;white-space:nowrap}
.pkliste{list-style:none;margin:0;padding:0;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(97px,1fr));gap:8px}
.pkliste li{border:1px solid var(--line);border-radius:var(--r-m);background:var(--paper);min-width:0}
/* Fassung 87: die ganze Kachel ist ein Link direkt zur passenden Preisstufe. */
.pkliste li > a{display:grid;gap:1px;padding:9px 10px;min-width:0;text-decoration:none;color:inherit;border-radius:var(--r-m)}
.pkliste li > a:hover{background:var(--fill)}
.pkliste li.pkhell > a:hover{background:transparent}
.pkliste li > a > *{min-width:0;overflow-wrap:anywhere}
.pkliste li.pkhell{border-color:var(--accent);background:var(--accent-soft)}
.pkliste span{font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3)}
.pkliste b{font-size:19px;font-weight:700;letter-spacing:-.03em;color:var(--accent);line-height:1.15}
.pkliste small{font-size:11px;color:var(--ink-3);line-height:1.35}
.pkfuss{margin-top:11px;font-size:11.5px;color:var(--ink-3);line-height:1.5}
.pkfuss a{margin-left:6px}

/* ---------- Vorschau auf Touchgeräten ----------
   Mit der Maus schwebt die Vorschau neben der Karte und lässt Klicks
   durch. Mit dem Finger muss sie Tipps selbst abfangen — sonst landet der
   Tipp, der sie schließen soll, auf dem, was darunter liegt. */
.peek--fest{pointer-events:auto;cursor:default;-webkit-tap-highlight-color:transparent}
.peek--fest .peekhint{margin-top:14px;padding-top:10px;border-top:1px solid var(--line);
  font-size:12px;color:var(--ink-2)}
/* Auf dem Telefon als Blatt von unten, volle Breite */
.peek--blatt{position:fixed;left:0;right:0;bottom:0;top:auto;width:auto;max-height:72vh;overflow:auto;
  border-radius:var(--r-l) var(--r-l) 0 0;padding:14px 18px calc(18px + env(safe-area-inset-bottom));
  box-shadow:0 -12px 40px rgba(0,0,0,.22);z-index:80}
.peek--blatt::before{content:"";display:block;width:38px;height:4px;border-radius:2px;
  background:var(--line-2);margin:0 auto 12px}

/* Touchgeräte — auch das Tablet, dessen Bildschirm so breit ist wie ein Laptop. */
@media (pointer: coarse){
  .fab{right:18px;bottom:18px}
  /* Kein Schweben, kein Überfahren: die Knöpfe auf der Karte sind immer da */
  .card .fertig{color:transparent}
  .card .fertig[aria-pressed="true"]{color:#fff}
}

/* Kontoauswahl nach der Anmeldung */
.kontowahl{display:flex;flex-direction:column;gap:10px;margin:6px 0 14px}
.kontowahl .btn{justify-content:flex-start;text-align:left;padding:13px 16px;font-size:15px}

/* Neues Konto anlegen (Kontoauswahl / Willkommen) */
.kontoneu{margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}
.kontoneu .kleingedruckt{margin:10px 0 0;font-size:12.5px;color:var(--ink-3);line-height:1.45}

/* Vier Schritte für Neulinge auf der Registrierseite */
.schritte{list-style:none;margin:0 0 18px;padding:0;counter-reset:s}
.schritte li{position:relative;padding:0 0 0 34px;margin:0 0 9px;font-size:13.5px;line-height:1.45;color:var(--ink-2)}
.schritte li::before{counter-increment:s;content:counter(s);position:absolute;left:0;top:1px;width:22px;height:22px;border-radius:50%;
  background:var(--accent-soft);color:var(--accent);font-weight:600;font-size:12px;display:flex;align-items:center;justify-content:center}
.schritte b{color:var(--ink);font-weight:600}
/* Ein Knopf in einem Schritt steht unter seinem Satz, nicht darin — siehe
   die Begründung an derselben Stelle in app.js. */
/* display:flex und nicht inline-flex: Ein inline-Kasten bleibt in der
   Textzeile stehen, und genau das war der Fehler. Erst als Blockkasten
   rückt der Knopf unter seinen Satz. width:fit-content hält ihn dabei so
   schmal wie seine Beschriftung. */
.schritte .schrittknopf{display:flex;width:fit-content;margin:9px 0 2px}

/* ---------- Meine Liste ---------- */
.crumbcnt{display:inline-block;margin-left:6px;min-width:17px;padding:0 5px;border-radius:100px;background:var(--alert);color:#fff;font-size:10.5px;font-weight:700;line-height:17px;text-align:center;vertical-align:1px}
.listehint{margin:-6px 0 18px;font-size:13.5px;color:var(--ink-3);max-width:720px;line-height:1.5}
.listeneu{display:flex;gap:8px;align-items:center;margin:0 0 18px;flex-wrap:wrap}
.listeneu input[type=text]{flex:1 1 280px;min-width:0;font-size:16px;padding:11px 14px}
.listeneu input[type=date]{flex:0 0 auto}
.liste{display:flex;flex-direction:column}
.lpunkt{display:flex;align-items:flex-start;gap:12px;padding:11px 8px 11px 6px;border-bottom:1px solid var(--line);background:var(--paper);transition:background .15s,opacity .3s,transform .3s}
@media (hover:hover) and (pointer:fine){.lpunkt:hover{background:var(--fill)}}
.lpunkt.neu{background:var(--accent-soft)}
.lpunkt.neu .lvon{color:var(--accent);font-weight:600}
.lpunkt.zieht{opacity:.4}
.lpunkt.ueber{box-shadow:inset 0 3px 0 var(--accent)}
/* Der Griff in „Meine Liste" (Fassung 57): dieselbe Form wie in der
   Listenansicht eines Boards, damit dieselbe Geste nicht zweimal gelernt
   werden muss. Auf Zeigegeräten zurückhaltend, auf Berührungsgeräten immer
   da — dort ist er der einzige Weg, denn Ziehen gibt es nicht. */
.zgriff--punkt{flex:0 0 auto;margin-top:1px}
@media (hover:hover) and (pointer:fine){
  .zgriff--punkt{opacity:0;transition:opacity .12s}
  .lpunkt:hover .zgriff--punkt,.zgriff--punkt:focus-visible,.zgriff--punkt.auf{opacity:1}
}
.lpunkt.wusch{opacity:0;transform:translateX(60px)}
.lpunkt.fertig .ltext{color:var(--ink-3);text-decoration:line-through}
.lpunkt.abgegeben .ltext{color:var(--ink-2)}
.lhaken{flex:none;width:24px;height:24px;margin-top:1px;border-radius:50%;border:1.6px solid var(--line-2);background:var(--paper);cursor:pointer;color:transparent;font-size:14px;line-height:1;display:inline-flex;align-items:center;justify-content:center;transition:background .12s,border-color .12s}
.lhaken::after{content:"\2713"}
@media (hover:hover) and (pointer:fine){.lhaken:hover{border-color:var(--gruen);color:var(--gruen)}}
.lhaken[aria-pressed="true"]{background:var(--gruen);border-color:var(--gruen);color:#fff}
.lweg{flex:none;width:24px;height:24px;margin-top:1px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;background:var(--fill-2);color:var(--ink-2)}
.lweg.gut{background:var(--gruen);color:#fff}
.lmitte{flex:1;min-width:0;cursor:pointer}
.ltext{font-size:15px;line-height:1.4;word-wrap:break-word}
.lmeta{margin-top:2px;font-size:12.5px;color:var(--ink-3);display:flex;flex-wrap:wrap;gap:0 4px}
.lmeta a{color:var(--accent);text-decoration:none}
.lmeta a:hover{text-decoration:underline}
.lfaellig{font-weight:500;color:var(--ink-2)}
.lfaellig.spaet{color:var(--alert);font-weight:600}
.ltaten{flex:none;display:flex;gap:6px;align-items:center}
.lmehr{padding:3px 9px;font-size:16px;line-height:1;color:var(--ink-3);background:transparent}
@media (hover:hover) and (pointer:fine){.lmehr:hover{background:var(--fill-2);color:var(--ink)}}
.lempty{padding:28px 8px;color:var(--ink-3)}
.listeblock{margin-top:26px}
.listeblock .flab{margin-bottom:6px}
#liste-fertig-toggle{font-size:13px;color:var(--ink-3)}
#l-hinaus .linkbox{margin-top:12px}
#l-hinaus .linkrow select{flex:1;min-width:0;background:var(--paper)}
#ldlg .dlg-foot{display:flex;align-items:center;gap:8px}
@media (max-width:760px){
  .lpunkt{padding:12px 4px}
  .listeneu input[type=date]{flex:1 1 140px}
  .listeneu .btn{flex:1 1 auto}
}

/* ---------- Übersicht: Suche und Aufgaben über alle Boards ---------- */
.suche{width:220px;max-width:100%;padding:8px 12px;font-size:14px;border-radius:100px;background:var(--fill);border:1px solid transparent}
.suche:focus{background:var(--paper)}
.alist{display:flex;flex-direction:column;margin-top:4px}
.akopf{margin:18px 0 6px;font-size:12.5px;font-weight:600;color:var(--ink-3);text-transform:uppercase;letter-spacing:.04em}
.akopf:first-child{margin-top:0}
.arow{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:baseline;width:100%;text-align:left;padding:10px 10px;border:0;border-bottom:1px solid var(--line);background:var(--paper);font:inherit;color:var(--ink);cursor:pointer;border-radius:8px}
@media (hover:hover) and (pointer:fine){.arow:hover{background:var(--fill)}}
.arow.fertig .atitel{color:var(--ink-3);text-decoration:line-through}
.arow.krit .aref{color:var(--alert)}
.arow.hoch .aref{color:var(--prio-hoch)}
.aref{font-family:var(--f-mono);font-size:11.5px;color:var(--ink-3);white-space:nowrap}
.atitel{font-size:14.5px;min-width:0;overflow-wrap:anywhere}
.ameta{font-size:12.5px;color:var(--ink-3);white-space:nowrap}
.adue{font-weight:500;color:var(--ink-2)}
.adue.spaet{color:var(--alert);font-weight:600}
@media (max-width:760px){
  .suche{width:100%;order:5}
  .arow{grid-template-columns:auto 1fr;grid-template-rows:auto auto}
  .ameta{grid-column:2;white-space:normal}
}
#nb-kartenzeile{white-space:normal;margin-top:4px;font-size:13px}
.einwahl{flex:none;width:18px;height:18px;margin:2px 0 0;accent-color:var(--accent);cursor:pointer}
.einkarte.gewaehlt{background:var(--accent-soft);border-color:var(--accent)}
.einauswahl{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 14px;margin:0 0 12px;border-radius:var(--r-m);background:var(--accent-soft);border:1px solid rgba(18,70,122,.18);font-size:13px}
.einauswahl b{margin-right:4px}
.einauswahl select{font-size:13px;padding:6px 10px;background:var(--paper)}
.crumb--board{display:inline-flex;align-items:center;gap:6px;max-width:260px}
.crumb--board #nav-board-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.crumb--board .kontopfeil{opacity:.7;flex:none}
.boardmenu{min-width:240px;max-height:70vh;overflow:auto}
.ctxleer{padding:8px 12px;font-size:13px;color:var(--ink-3)}
@media (max-width:760px){ .crumb--board{max-width:150px} }
.boardmenu .kontoitem > span:nth-child(2){white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}

/* ---------- Meine Liste: Herkunft, Filter, Heute ---------- */
.lfilter{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 14px}
.lfilter button{font:inherit;font-size:12.5px;font-weight:500;padding:5px 11px;border-radius:100px;border:1px solid var(--line);background:var(--paper);color:var(--ink-2);cursor:pointer}
@media (hover:hover) and (pointer:fine){.lfilter button:hover{background:var(--fill)}}
.lfilter button[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:#fff}
.lfz{opacity:.75;font-weight:600}
.listeblock .flab{display:flex;align-items:center;gap:7px}
.lbicon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:5px;font-size:11px;font-weight:700;background:var(--fill-2);color:var(--ink-2)}
.lb-bekommen .lbicon{background:var(--accent-soft);color:var(--accent)}
.lb-karten .lbicon,.lb-boards .lbicon{background:#EEE8F7;color:#7A4B9E}
.lb-personen .lbicon{background:var(--prio-krit-bg);color:var(--alert)}
.lpunkt.l-bekommen{box-shadow:inset 3px 0 0 var(--accent)}
.lpunkt.l-karte,.lpunkt.l-boards{box-shadow:inset 3px 0 0 #7A4B9E}
.lpunkt.l-personen{box-shadow:inset 3px 0 0 var(--alert)}
.lpunkt.l-bekommen .lvon{color:var(--accent);font-weight:600}
.lprio{font-weight:600}.lprio.hoch{color:var(--prio-hoch)}.lprio.kritisch{color:var(--prio-krit)}
.lheute{white-space:nowrap}
.lheute.an{background:var(--accent-soft);color:var(--accent);border-color:transparent}
.segcnt{margin-left:5px;vertical-align:0}
.btn--icon{width:34px;height:34px;padding:0;display:inline-flex;align-items:center;justify-content:center;font-size:16px}
.heute{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:28px;align-items:start}
.heutekopf{display:flex;align-items:center;gap:10px;margin:4px 0 2px}
.heutekopf h2{margin:0;font-size:17px}
.heuteplan .hintline,.heutevorrat .hintline{margin:0 0 8px}
.heutedrop{min-height:120px;border:2px dashed transparent;border-radius:var(--r-m);transition:border-color .15s,background .15s}
.heutedrop.ueber,#vorrat-liste.ueber{border:2px dashed var(--accent);background:var(--accent-soft)}
#vorrat-liste{min-height:80px;border:2px dashed transparent;border-radius:var(--r-m)}
.lgriff{flex:none;color:var(--ink-3);cursor:grab;font-size:16px;line-height:1;padding:2px 2px 0 0;user-select:none}
.lplan .lhaken{margin-top:1px}
.lzeit{flex:none;width:86px;font:inherit;font-size:12.5px;padding:3px 6px;border:1px solid var(--line);border-radius:6px;background:var(--paper);color:var(--ink-2)}
.lzeit:not([value=""]):valid{color:var(--ink);font-weight:500}
.lplan.fertig .lzeit{opacity:.5}
.lplan.fremd .ltext{color:var(--ink-3)}
.lpunkt.vorrat{cursor:grab}
#ledlg .check{display:flex;gap:10px;align-items:flex-start;font-size:14px}
#ledlg .check small{color:var(--ink-3);font-size:12.5px;line-height:1.45}
@media (max-width:900px){
  .heute{grid-template-columns:1fr;gap:22px}
  .lzeit{width:74px;font-size:12px}
}

/* ---------- Mehrfach-Upload mit Ladebalken ---------- */
.ladeliste{margin:10px 0 4px;padding:10px 12px;border-radius:var(--r-m);background:var(--fill);font-size:12.5px}
.ladekopf{display:flex;justify-content:space-between;margin-bottom:6px;color:var(--ink-2);font-weight:500}
.ladebalken{height:6px;border-radius:100px;background:var(--fill-2);overflow:hidden}
.ladebalken--gesamt{height:8px;margin-bottom:10px}
.ladefuell{height:100%;width:0;background:var(--accent);border-radius:100px;transition:width .15s linear}
.ladezeile{display:grid;grid-template-columns:minmax(0,1fr) auto 120px auto;gap:10px;align-items:center;padding:4px 0}
.ladename{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ladegroesse{color:var(--ink-3);font-variant-numeric:tabular-nums}
.ladestand{min-width:44px;text-align:right;color:var(--ink-3);font-variant-numeric:tabular-nums}
.ladezeile.gut .ladefuell{background:var(--gruen)}
.ladezeile.gut .ladestand{color:var(--gruen);font-weight:700}
.ladezeile.fehl .ladefuell{background:var(--alert)}
.ladezeile.fehl .ladestand{color:var(--alert);min-width:0;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
dialog.dateiziel{outline:3px dashed var(--accent);outline-offset:-6px}

/* Eigene Fenster für Mitteilung, Rückfrage und Eingabe — an der Stelle,
   an der früher der Systemkasten des Browsers aufging. Schmaler als die
   Arbeitsdialoge: hier steht ein Satz und eine Entscheidung. */
dialog.frage{max-width:min(420px,calc(100vw - 32px))}
dialog.frage .dlg-body{gap:12px;padding-top:10px}
dialog.frage .fr-text{font-size:14.5px;line-height:1.55;color:var(--ink-2)}
dialog.frage .fr-text p{margin:0 0 9px}
dialog.frage .fr-text p:last-child{margin-bottom:0}
dialog.frage .dlg-foot{justify-content:flex-start}
/* Ein Schritt, der nichts zurücknehmen lässt, trägt Rot — aber als Fläche,
   nicht als Schrift auf Blau. „danger" allein färbt nur den Text, und roter
   Text auf dunkelblauem Grund ist kaum zu lesen. */
dialog.frage .btn--primary.danger{background:var(--alert);color:#fff;border-color:transparent}
@media (hover:hover) and (pointer:fine){
  dialog.frage .btn--primary.danger:hover{background:#8E2F0E}
}
dialog.frage input[type=text]{font-size:16px}
@media (max-width:480px){
  /* Auf dem Telefon die Entscheidung untereinander und mit vollem Ziel —
     zwei Knöpfe nebeneinander sind am Daumen zu eng. */
  dialog.frage .dlg-foot{flex-direction:column-reverse;align-items:stretch;gap:8px}
  dialog.frage .dlg-foot .btn{width:100%;justify-content:center;min-height:44px}
}
@media (max-width:760px){ .ladezeile{grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto} .ladezeile .ladebalken{grid-column:1/-1} }
.heutekopf{flex-wrap:wrap}
.heutekopf .btn{white-space:nowrap}
.lcalhilfe{margin-top:12px;font-size:13px;color:var(--ink-2)}
.lcalhilfe summary{cursor:pointer;font-weight:500;color:var(--accent)}
.lcalhilfe p{margin:8px 0 0;line-height:1.5}
#lcaldlg .linkrow input[type=text]{flex:1;min-width:120px;font-family:var(--f-mono);font-size:11.5px;background:var(--paper)}
#lcaldlg .linkrow select{flex:1;background:var(--paper)}
#lcaldlg .linkbox{margin-top:10px}

/* ===== Fassung 40: Der Tag schreibt sich selbst ===== */
.kapzeile{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--ink-2);margin:2px 0 6px}
.kapbar{flex:1;height:6px;background:var(--fill);border-radius:100px;overflow:hidden;max-width:260px}
.kapbar i{display:block;height:100%;background:var(--accent);border-radius:100px;transition:width .3s}
.kapzeile.voll .kapbar i{background:var(--alert)}
.vorschlag{background:var(--fill);border:1px dashed var(--line-2);border-radius:var(--r-m);padding:10px 12px 8px;margin:0 0 12px}
.vskopf{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.vszeile{background:var(--paper)}
.vszeile .vsgrund{flex:none;font-size:10.5px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;padding:2px 7px;border-radius:100px;background:var(--fill-2);color:var(--ink-2);min-width:60px;text-align:center;white-space:nowrap}
.vszeile .vsgrund.g0{background:var(--alert);color:#fff}
.vszeile .vsgrund.g1{background:var(--accent);color:#fff}
.vszeile .vsgrund.g2{background:#2F7D53;color:#fff}
.vszeile .vsgrund.g3{background:#B0345C;color:#fff}
.vszeile .vsgrund.g4{background:#8A5A12;color:#fff}
/* Fassung 156: Fokus-Ansicht scrollt, wenn die Karte höher ist als das Fenster.
   Zuvor zentrierte align-items:center die Karte starr — war sie zu hoch (langer
   Titel/viel Text oder kleines Fenster), lief sie oben UND unten über den Rand
   hinaus und ließ sich nicht erreichen. margin:auto zentriert, solange Platz ist,
   und gibt den Überlauf frei, sobald gescrollt werden muss. */
.fokus{position:fixed;inset:0;z-index:95;background:var(--paper);display:flex;justify-content:center;padding:24px;overflow-y:auto;overscroll-behavior:contain}
.fokuskarte{width:min(680px,100%);text-align:center;margin:auto}
.fokuskopf{display:flex;align-items:center;gap:8px;margin-bottom:28px}
.fokusuhr{font-size:56px;font-weight:600;letter-spacing:.04em;font-variant-numeric:tabular-nums;color:var(--ink-3);margin-bottom:18px}
.fokusuhr.lang{color:var(--alert)}
.fokuskontext{display:inline-block;font-size:12px;font-weight:600;letter-spacing:.03em;
  text-transform:uppercase;color:var(--ink-3);margin-bottom:12px;
  padding:4px 12px;border-radius:99px;background:var(--fill);max-width:100%;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fokuskontext.board{color:var(--accent);background:var(--accent-soft)}
/* display:inline-block oben überschreibt sonst das hidden-Attribut (UA-Stil). */
.fokuskontext[hidden]{display:none}
.fokustitel{font-size:clamp(24px,4vw,38px);font-weight:600;line-height:1.2;margin-bottom:10px;word-break:break-word}
.fokusmeta{color:var(--ink-2);white-space:pre-line;margin-bottom:28px}
.fokustaten{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-bottom:16px}
.tagbilanz{text-align:center;padding:8px 0 16px}
.tagzahl{font-size:44px;font-weight:600;letter-spacing:-.02em}
.tagtext{color:var(--ink-2);max-width:420px;margin:6px auto 0}
#tag-offen .liste{margin-top:6px}
select.mrolle{font-size:12px;padding:3px 6px;border-radius:6px;border:1px solid var(--line-2);background:var(--paper);max-width:180px}
@media (max-width:700px){ .heutekopf{flex-wrap:wrap} .fokusuhr{font-size:44px} }
body.fokus-an .fab,body.fokus-an .toast{display:none}
form.inl{display:inline}
form.inl .linkbtn{font:inherit;padding:0}


/* ===== Fassung 42: Tippziele auf Touchgeräten =====
   Am Rechner genügen schlanke Schaltflächen; mit dem Finger braucht es Fläche.
   Nur dort, wo wirklich getippt wird (Kopfzeile, Kartenknöpfe, Auswahlfelder) —
   die Dichte der Listen bleibt, wie sie ist.

   Fassung 43: zusätzlich unter 900 px Fensterbreite, unabhängig vom Zeiger.
   Ein Fenster dieser Breite ist in aller Regel ein Telefon oder Tablet;
   ein paar Geräte melden trotzdem einen feinen Zeiger und bekamen die
   größeren Ziele bisher nicht. */
@media (pointer:coarse), (max-width:900px){
  .topbar .linkbtn,.topbar a,#helpbtn,#bell,#kontochip,#profilebtn{min-height:40px}
  #helpbtn,#bell{min-width:40px;display:inline-flex;align-items:center;justify-content:center}
  #kontochip,#profilebtn{padding-top:9px;padding-bottom:9px}
  .card .prio,.card .farbpunkt{min-height:30px}
  .cardfoot .icon,.acts .icon{min-height:32px;padding-top:6px;padding-bottom:6px}
  .drow .icon,.mrow .icon{min-height:32px}
  select,input[type=date],input[type=time]{min-height:40px}
  .seg button,.lfilter button{min-height:38px}
  .authbox .alt a,.authbox .alt button,.legalnav a{min-height:38px;display:inline-flex;align-items:center}
  .langrow a{min-height:36px;display:inline-flex;align-items:center;padding:0 8px}
  .abname,.abakt .linkbtn,.abakt .cdel{min-height:34px;display:inline-flex;align-items:center}
  .linkbox .linkbtn,.dlg-body .linkbtn{min-height:34px;display:inline-flex;align-items:center}
  footer a,.legal .legalnav a,.pkfuss a{padding:4px 0;display:inline-block}
  /* Fassung 43: die Zettel im Eingang, die Rollenwahl in der Personenliste
     und der Sprung zur Karte aus „Meine Liste" waren mit dem Finger zu knapp. */
  .eintitel,.lan{min-height:32px;display:inline-flex;align-items:center}
  select.mrolle,.kvrolle{min-height:36px}
}

/* Tabellen in den Rechtstexten und in der Schnittstellenbeschreibung:
   auf dem Telefon bekommen sie einen eigenen Schiebebereich, statt die
   ganze Seite seitlich zu ziehen. */
@media (max-width:760px){
  .legal table,.doc table{display:block;width:max-content;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .legal table td,.legal table th,.doc table td,.doc table th{white-space:normal}
}

/* ===== Fassung 42: kompakter Kopf auf dem Telefon =====
   Gemessen: auf einem iPhone begann die erste Karte erst bei 820 Pixeln —
   eine ganze Bildschirmhöhe Kopfbereich, bevor überhaupt Inhalt kam. Titel,
   Zahlenreihe und Werkzeugleiste werden darum schmaler; an der Reihenfolge
   und am Inhalt ändert sich nichts. */
@media (max-width:560px){
  /* Kopfleiste auf zwei Zeilen: oben Marke und Navigation, unten das Board,
     das Konto und das Profil. „Abmelden" steht im Profil — dort sucht man es,
     und die Leiste bleibt schlank. Der Name des Profils weicht dem Kürzel. */
  .topbar #profilebtn .pbname{display:none}
  .topbar #nav-board{max-width:80px}
  .topbar #nav-board #nav-board-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .topbar #logoutform{display:none}
  .topbar .crumb{padding:7px 10px}
  .topbar{gap:6px;padding:10px 0 8px}
  .pagehead{padding:18px 0 12px;gap:8px 12px}
  .pagehead h1{font-size:clamp(23px,7vw,30px)}
  /* Die Zahlen als eine schiebbare Zeile statt zweier Blöcke. */
  .stats{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;
    gap:8px;padding-bottom:2px;scrollbar-width:none}
  .stats::-webkit-scrollbar{display:none}
  .stat{flex:0 0 auto;min-width:0;padding:8px 13px}
  .stat b{font-size:19px}
  .stat small{font-size:11px;white-space:nowrap}
  .toolbar{padding:12px 0 8px;gap:8px}
  .viewrow{padding:10px 0 0}
  .kontozeile{margin:-4px 0 10px}
}

/* ---------- Fassung 43: weniger Beiwerk auf dem Telefon ----------

   Gemessen standen vor der ersten Karte 614 von 664 Pixeln Beiwerk:
   Kopfleiste, Titelblock, Zahlenreihe, Ansichtswechsel, Spaltenband,
   Werkzeugleiste, „Meine Aufgaben" und Spaltenkopf. Jede Zeile davon ist
   für sich begründbar, in Summe ist es eine Bildschirmhöhe, bevor die
   Arbeit anfängt. Also erst das doppelt Gezeigte weg, dann der Rest enger.
   An der Reihenfolge und am Inhalt ändert sich nichts. */
@media (max-width:899px){
  /* Der Spaltenkopf wiederholt Wort für Wort, was im klebenden Band
     direkt darüber schon steht. Auf dem Telefon fällt er weg. */
  .board.quer .colm > .colhead{display:none}
  .board.quer .colm{padding-top:10px}
  .spaltenband{margin-bottom:10px;padding:8px 28px 9px}
}
@media (max-width:620px){
  /* „Neue Aufgabe" stand doppelt: oben als Knopf und unten rechts als
     runder Knopf, der immer mitfährt. Oben fällt er weg — er war der
     Grund, warum die Werkzeugleiste zwei Zeilen brauchte. */
  .toolbar #add{display:none}
  .toolbar #q{flex:1 1 130px;width:auto!important;min-width:0}
  .toolbar .spacer{display:none}
  .toolbar{gap:7px;padding:10px 0 6px;flex-wrap:nowrap}
  .toolbar > .btn{flex:0 0 auto}
  /* Die Zahlenreihe trägt schmaler genauso viel Auskunft. */
  .stat{padding:7px 12px}
  .stat b{font-size:18px}
  .stat small{font-size:10.5px}
  .stats{padding-bottom:0;margin-bottom:12px}
  /* Ansichtswechsel: gleiche fünf Reiter, weniger Luft. */
  .seg--view{padding:3px}
  .seg--view button{padding:7px 13px;font-size:13.5px}
  .viewrow{padding:8px 0 0}
  /* Titelblock: Überschrift, Rolle, Runden und „Personen" in einer Reihe
     statt über drei. */
  .pagehead{padding:14px 0 10px;gap:6px 10px}
  .pagehead h1{font-size:clamp(21px,6.4vw,27px)}
  #rolehint{font-size:12px}
  .pagehead #share{padding:7px 12px;font-size:13px}
  /* „Meine Aufgaben" bleibt, wird aber flacher. */
  .mine{padding:2px 14px;margin-bottom:12px}
  .mine>summary{padding:9px 0;font-size:14.5px}
}

/* ======================= Home — die Übersicht =======================

   Ein Raster aus vier Spalten. Ein Kasten belegt eine („klein"), zwei
   („mittel") oder alle vier („gross"); die Breite wählt die Nutzerin selbst
   und sie wird an der Person gespeichert. Weniger Spalten auf schmalen
   Geräten, eine einzige am Telefon — dort ist jede Wahl ohnehin dieselbe.  */

/* ---- Kopfzeile der Seite ---- */
.hkopfbtn{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border:1px solid var(--line);
  border-radius:100px;background:var(--paper);font-size:13px;font-weight:500;color:var(--ink-2)}
.hkopfbtn--an{background:var(--accent);border-color:var(--accent);color:#fff}
@media (hover:hover) and (pointer:fine){
  .hkopfbtn:hover{border-color:var(--line-2);color:var(--ink)}
  .hkopfbtn--an:hover{background:var(--accent-2);color:#fff}
}
.hic{flex:none;display:block}

/* ---- Kennzahlen ---- */
.hstats{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin:4px 0 18px}
.hstat{display:flex;align-items:center;gap:10px;padding:12px 13px;background:var(--paper);
  border:1px solid var(--line);border-radius:var(--r-m);box-shadow:var(--shadow-1);text-align:left;min-width:0}
.hstat .hic{color:var(--ink-3)}
.hstat:disabled{opacity:1}
.hstatt{display:grid;min-width:0}
.hstatz{font-size:22px;font-weight:700;letter-spacing:-.03em;line-height:1.1;color:var(--ink)}
.hstatw{font-size:11.5px;color:var(--ink-3);line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Gefärbt wird nur, was wirklich etwas meldet — bei null bleibt alles grau. */
.hstat--warn .hstatz,.hstat--warn .hic{color:var(--alert)}
.hstat--jetzt .hstatz,.hstat--jetzt .hic{color:var(--accent)}
@media (hover:hover) and (pointer:fine){
  .hstat:not(:disabled):hover{border-color:var(--line-2);box-shadow:var(--shadow-2)}
  .hstat:not(:disabled):hover .hic{color:var(--ink-2)}
}

/* ---- Das Raster ---- */
/* Fassung 75: kein Mauerwerk mehr. Vorher setzte hMauerwerk() in app.js auf
   flachen 8px-Zeilen (grid-auto-rows) je Kachel eine Spannweite nach Höhe —
   das zog die Kästen in Lücken nach oben und ließ sie versetzt beginnen. Jetzt
   ein ruhiges Raster mit automatischen Zeilen; align-items:start lässt die
   Kästen einer Zeile oben auf gleicher Höhe anfangen. */
.hgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;align-items:start}
.hcard{grid-column:span 2;background:var(--paper);border:1px solid var(--line);border-radius:var(--r-l);
  padding:14px 16px 12px;box-shadow:var(--shadow-1);min-width:0}
.hcard--klein{grid-column:span 1}
.hcard--mittel{grid-column:span 2}
.hcard--gross{grid-column:span 4}
.hcardhead{display:flex;align-items:center;gap:8px;min-width:0}
.hcardhead h2{font-size:14px;font-weight:600;letter-spacing:-.01em;margin:0;color:var(--ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hcardhead .hic{color:var(--ink-3)}
.hcardbody{margin-top:9px}
.hleer{font-size:12.5px;color:var(--ink-3);line-height:1.5;margin:0 0 8px}

/* Zuklappen: der Pfeil zeigt nach oben, wenn offen. */
.hkopfmini{background:none;border:0;padding:4px;border-radius:6px;color:var(--ink-3);display:inline-flex;flex:none}
@media (hover:hover) and (pointer:fine){.hkopfmini:hover{background:var(--fill);color:var(--ink)}}
/* Finger brauchen Fläche. Bei grobem Zeiger (Telefon, Tablet) wächst die
   Trefferfläche dieser Pfeile auf 44px — nur der Innenabstand, das Symbol
   bleibt gleich groß. Am Schreibtisch mit der Maus genügen die 22px, dort
   würde ein 44px-Feld nur die Nachbarpfeile überlappen. */
@media (pointer:coarse){
  .hkopfmini{min-width:44px;min-height:44px;padding:0;align-items:center;justify-content:center}
}
.hklapp .hic{transition:transform .15s ease}
.hcard:not(.hcard--zu) .hklapp .hic{transform:rotate(180deg)}

/* ---- Zeilen ---- */
.hrow{display:grid;grid-template-columns:1fr auto;align-items:center;gap:8px;width:100%;
  padding:7px 8px;margin:0 -8px;border:0;background:none;border-radius:var(--r-s);text-align:left;min-width:0}
.hrow + .hrow{border-top:1px solid var(--line)}
.hrowt{font-size:13px;color:var(--ink);line-height:1.35;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Der Puls in der Aktivitätenkarte: eine Reihe Balken, eine Farbe.
   Höhe fest, Breite fließend — die Balken dürfen schmal werden, aber nicht
   niedrig, sonst verschwindet der Unterschied zwischen viel und wenig. */
.hpulswrap{display:flex;align-items:center;gap:10px;margin:0 0 10px}
.hpuls{height:34px;flex:1;min-width:0;display:block;overflow:visible}
.hpulsb{fill:var(--accent)}
.hpulsb--null{fill:var(--line)}
.hpulsl{font-size:11px;color:var(--ink-3);white-space:nowrap;font-variant-numeric:tabular-nums}
.hrow--akt{grid-template-columns:auto 1fr auto}
.hrow--akt .hrowt{font-size:12.5px;color:var(--ink-2);white-space:normal}
.hrow--akt .hrowt b{color:var(--ink);font-weight:600}
.hrow--klein .hrowt{font-size:12.5px;white-space:normal}
.hrow--neu .hrowt{font-weight:600}
.hrowm{display:flex;align-items:center;gap:6px;flex:none}
.hrowb{font-size:11px;color:var(--ink-3);max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hwann{font-size:11px;color:var(--ink-3);white-space:nowrap}
.hflag{font-size:10.5px;font-weight:600;padding:2px 7px;border-radius:100px;background:var(--fill);color:var(--ink-2);white-space:nowrap}
/* Fassung 105: Fälligkeit auch im Dashboard als Umriss mit Zeichen, nicht als
   gefüllter roter Chip — damit „überfällig" nicht wie „kritisch" aussieht. */
.hflag--warn{background:transparent;border:1px solid var(--due-spaet);color:var(--due-spaet)}
.hflag--warn::before{content:"\26A0\FE0E";margin-right:3px}
.hflag--jetzt{background:transparent;border:1px solid var(--due-heute);color:var(--due-heute)}
.hflag--prio{background:var(--prio-hoch-bg);color:var(--prio-hoch)}
@media (hover:hover) and (pointer:fine){.hrow:hover{background:var(--fill)}}

/* ---- Boards ---- */
.hboards{display:grid;gap:9px}
.hboards--gross{grid-template-columns:repeat(3,minmax(0,1fr))}
.hboards--mittel{grid-template-columns:1fr 1fr}
.hboards--klein{grid-template-columns:1fr}
.hboard{display:grid;gap:5px;padding:10px 11px;background:var(--fill);border:0;border-radius:var(--r-m);text-align:left;min-width:0}
.hboardn{font-size:12.5px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hboardm{font-size:11px;color:var(--ink-3)}
.hbar{display:block;height:4px;border-radius:100px;background:var(--line);overflow:hidden}
.hbarf{display:block;height:100%;background:var(--gruen);border-radius:100px}
@media (hover:hover) and (pointer:fine){.hboard:hover{background:var(--fill-2)}}

/* ---- Team ---- */
.hfirma{font-size:12px;color:var(--ink-2);margin:0 0 9px;line-height:1.45}
/* Die Zeile ist seit Fassung 53 ein Knopf (sie öffnet die Visitenkarte) und
   muss deshalb erst wieder aussehen wie eine Zeile: Knöpfe bringen Rahmen,
   Hintergrund, zentrierten Text und eine eigene Schrift mit. */
.hperson{display:flex;align-items:center;gap:8px;min-width:0;padding:4px 6px;width:100%;
  border:0;background:none;font:inherit;color:inherit;text-align:left;cursor:pointer;
  border-radius:var(--r-s);margin-left:-6px}
@media (hover:hover) and (pointer:fine){.hperson:hover{background:var(--fill-2)}}
.hperson:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.hpmitte{display:flex;flex-direction:column;min-width:0;flex:1 1 auto;gap:1px}
.hpname{font-size:12.5px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hppos{font-size:11px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hprolle{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;
  color:var(--accent);background:var(--accent-soft);padding:2px 6px;border-radius:100px;flex:none}
/* Abwesend ist kein Fehler und keine Warnung — nur eine Tatsache. Also die
   gedeckte Schrift und keine Signalfarbe. */
.hprolle--weg{color:var(--ink-2);background:var(--fill-2)}
.hhinweis{display:block;width:100%;margin-top:9px;padding:8px 10px;border:0;border-radius:var(--r-s);
  background:var(--accent-soft);color:var(--accent);font-size:12px;font-weight:600;text-align:left}

/* ---- Schnellzugriff ---- */
/* Nach der Breite und nicht nach der Kastengröße: seit Fassung 61 stehen im
   Schnellzugriff IMMER alle Knöpfe, auch im Viertelkasten. Passen zwei
   nebeneinander, stehen zwei nebeneinander — das entscheidet der Platz und
   nicht eine Regel, die den Kasten kennt. */
.htools{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:6px}
.htool{display:flex;align-items:center;gap:7px;padding:9px 10px;border:1px solid var(--line);
  border-radius:var(--r-s);background:var(--paper);font-size:12.5px;color:var(--ink-2);font-weight:500;text-align:left;min-width:0}
.htool span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.htool .hic{color:var(--ink-3)}
@media (hover:hover) and (pointer:fine){
  .htool:hover{background:var(--fill);color:var(--ink);border-color:var(--line-2)}
  .htool:hover .hic{color:var(--accent)}
}

/* ---- Änderungen ---- */
.hneu{font-size:11.5px;font-weight:600;color:var(--accent);margin:0 0 7px}
.hupdkopf{font-size:12px;font-weight:600;color:var(--ink);margin:0 0 6px}
.hupdz{font-size:12px;color:var(--ink-2);line-height:1.5;margin:0 0 6px}
/* Mehrere Fassungen untereinander (Fassung 96): je Block ein feiner Trenner. */
.hupdf{padding:9px 0}
.hupdf:first-child{padding-top:0}
.hupdf + .hupdf{border-top:1px solid var(--line)}
.hupdf .hupdz:last-child{margin-bottom:0}
.hupdmehr{display:inline-block;margin-top:8px;font-size:12px;font-weight:600;color:var(--accent);text-decoration:none}
@media (hover:hover){.hupdmehr:hover{text-decoration:underline}}
.hart{display:inline-block;font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;
  padding:2px 6px;border-radius:5px;margin-right:5px;vertical-align:1px;white-space:nowrap}
.hart--neu{background:#E3F1E9;color:var(--gruen)}
.hart--behoben{background:#FBE9E2;color:var(--alert)}
.hart--geaendert{background:var(--accent-soft);color:var(--accent)}
.hart--sicherheit{background:#F6EFDC;color:var(--gold)}

/* ---- Frage an den Serviceagenten ---- */
.hfrage{display:flex;gap:6px;margin-top:4px}
.hfrage input{flex:1;min-width:0}
.hfrageab{flex:none;width:38px;display:inline-flex;align-items:center;justify-content:center;
  border:0;border-radius:var(--r-s);background:var(--accent);color:#fff}
@media (hover:hover) and (pointer:fine){.hfrageab:hover{background:var(--accent-2)}}

/* ======== Anpassen-Modus ========
   Im Anpassen-Modus ist die Übersicht kein Arbeitsmittel mehr, sondern ein
   Bauplan — deshalb werden die Kästen gestrichelt umrandet und die Inhalte
   treten zurück. Man soll sehen, dass man gerade einrichtet und nicht
   arbeitet. */
.hedithinweis{font-size:12.5px;color:var(--ink-2);background:var(--accent-soft);
  padding:10px 13px;border-radius:var(--r-m);margin:0 0 14px;line-height:1.5}
.hgrid--edit .hcard{border-style:dashed;border-color:var(--line-2)}
.hgrid--edit .hcardbody{opacity:.55;pointer-events:none}
.hcard--aus{opacity:.45}
.hgriff{display:inline-flex;color:var(--ink-3);cursor:grab;padding:2px;margin-left:-4px;touch-action:none}
.hgriff:active{cursor:grabbing}
.hcard--zieht{opacity:.3}
.hcard--geist{position:fixed;z-index:9999;pointer-events:none;margin:0;
  box-shadow:var(--shadow-3);transform:rotate(-1deg);border-style:solid}

/* Die drei Breiten als Zeichen: ein Viertel, eine Hälfte, voll. Kein Text —
   die Form sagt es schneller als das Wort. */
.hgr{background:none;border:1px solid var(--line);border-radius:5px;padding:4px;
  display:inline-flex;align-items:center;justify-content:center;width:24px;height:22px;flex:none}
.hgr--an{border-color:var(--accent);background:var(--accent-soft)}
.hgrq{display:block;height:9px;border-radius:2px;background:var(--ink-3)}
.hgr--an .hgrq{background:var(--accent)}
.hgrq--klein{width:4px}
.hgrq--mittel{width:9px}
.hgrq--gross{width:14px}
@media (hover:hover) and (pointer:fine){.hgr:hover{border-color:var(--line-2)}}
.hzurueck{margin-top:16px}

/* ---- Marke und Haus in der Kopfzeile ---- */
.brand--home{border:0;background:none;padding:0;border-radius:var(--r-s)}
@media (hover:hover) and (pointer:fine){
  .brand--home:hover .brandmark{color:var(--accent)}
  .brand--home:hover .product{color:var(--ink)}
}
.crumb--home{display:inline-flex;align-items:center;gap:6px}
.crumb--home svg{flex:none}

/* ---- Hilfe-Fenster ---- */
.hsuchzeile{display:flex;gap:8px;margin-bottom:12px}
.hsuchzeile input{flex:1;min-width:0}
.hantwort{background:var(--fill);border-radius:var(--r-m);padding:13px 15px;margin-bottom:14px}
.hkiantwort{font-size:13.5px;line-height:1.55;color:var(--ink);margin:0 0 10px}
.hunsicher,.hkeine{font-size:13px;color:var(--ink-2);line-height:1.5;margin:0 0 10px}
.hbereich{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);margin:16px 0 6px}
.hbereich:first-child{margin-top:0}
.hartikel{border-top:1px solid var(--line)}
.hartikel summary{padding:9px 0;font-size:13.5px;font-weight:500;color:var(--ink);cursor:pointer;list-style:none}
.hartikel summary::-webkit-details-marker{display:none}
.hartikel summary::before{content:"+";display:inline-block;width:14px;color:var(--ink-3);font-weight:600}
.hartikel[open] summary::before{content:"\2013"}
.hartikel[open] summary{font-weight:600}
.hartikel p{font-size:13px;color:var(--ink-2);line-height:1.6;margin:0 0 9px;padding-left:23px}
.hartikel .btn{margin:0 0 10px 23px}

/* ---- Änderungsverlauf ---- */
.ulist{display:grid;gap:18px}
.ufassung{border-top:1px solid var(--line);padding-top:12px}
.ufassung:first-child{border-top:0;padding-top:0}
.ukopf{display:flex;align-items:baseline;gap:9px;margin:0 0 2px;font-size:13.5px;color:var(--ink)}
.udatum{font-size:11.5px;color:var(--ink-3);font-weight:400}
.utitel{font-size:12.5px;color:var(--ink-3);margin:0 0 9px}

/* ---- Schmalere Bildschirme ---- */
@media (max-width:1240px){
  .hstats{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:980px){
  /* Zwei Spalten: aus „klein" wird die halbe Breite, „gross" bleibt voll. */
  .hgrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .hcard--klein,.hcard--mittel{grid-column:span 1}
  .hcard--gross{grid-column:span 2}
  .hboards--gross{grid-template-columns:1fr 1fr}
  .hcard--gross .htools{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:620px){
  /* Am Telefon eine Spalte — und die Kennzahlen als Reihe zum Wischen.
     Sechs Kacheln untereinander schöben alles andere unter den Rand; so
     bleibt der Daumen in Bewegung und der Rest sichtbar. */
  .hstats{display:flex;overflow-x:auto;gap:8px;margin:0 -16px 16px;padding:2px 16px 8px;
    scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .hstats::-webkit-scrollbar{display:none}
  .hstat{flex:0 0 46%;scroll-snap-align:start}
  .hgrid{grid-template-columns:1fr;gap:12px}
  .hcard,.hcard--klein,.hcard--mittel,.hcard--gross{grid-column:span 1}
  .hcard{padding:13px 14px 11px;border-radius:var(--r-m)}
  .hboards--gross,.hboards--mittel{grid-template-columns:1fr}
  .htools,.hcard--gross .htools{grid-template-columns:1fr 1fr}
  .hrowb{max-width:80px}
  .hkopfwort{display:none}
  .hkopfbtn{padding:7px 9px}
  /* Der Kontoname neben der Überschrift drängt die beiden Knöpfe am Telefon
     in eine zweite Zeile, wo sie verloren wirken. Er steht ohnehin im Kasten
     „Team" — hier kann er weg, und Überschrift und Knöpfe passen in eine Zeile. */
  #page-home .pagehead .lab{display:none}
  .crumb--home .crumbwort{display:none}
}

/* =========================================================================
   DRUCKEN (Fassung 49)

   Bis hierher hatte die Anwendung keinen einzigen Drucksatz. Wer Strg+P
   drückte, bekam die Kopfleiste, die Schaltflächen, die Schatten und bei
   einem Board genau die Spalten, die gerade sichtbar waren — der Rest stand
   hinter einem waagerechten Rollbalken und fiel weg.

   Der Grundsatz hier: gedruckt wird der INHALT, nicht die Bedienung. Alles,
   was man anklickt, verschwindet; alles, was man liest, bleibt. Und nichts
   wird mitten durchgeschnitten, wo ein Zusammenhang zerreißt — eine Karte,
   eine Übersichtskachel, eine Tabellenzeile.
   ========================================================================= */
@media print {
  @page { margin: 14mm; }

  html, body { background: #fff; }
  body { font-size: 11pt; }

  /* Bedienung weg. */
  .topbar, .fab, .toast, .seg, .btn, .hkopfbtn, .boardmenu, .dlg-x,
  .htools, .hgriff, .tour, .spaltenband, .nodruck { display: none !important; }

  /* Ein offener Dialog ist beim Drucken fast immer das, was man drucken
     will — dann aber als Seite, nicht als schwebendes Fenster mit grauem
     Schleier darüber. */
  dialog[open] { position: static !important; box-shadow: none !important;
                 max-width: none !important; width: auto !important;
                 border: 1px solid #bbb; }
  dialog::backdrop { background: #fff !important; backdrop-filter: none !important; }
  .dlg-body { max-height: none !important; overflow: visible !important; }
  .dlg-foot { display: none !important; }

  .wrap { max-width: none; padding: 0; }

  /* Die Übersicht: zwei Spalten, und die Mauerwerk-Spannweiten aus dem
     Skript müssen weg — sie rechnen in 8-Punkt-Zeilen am Bildschirm und
     ergeben auf Papier Löcher. */
  .hgrid { grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
           grid-auto-rows: auto !important; gap: 10px; }
  .hcard { grid-row-end: auto !important; grid-column: span 1 !important;
           box-shadow: none; border: 1px solid #bbb;
           break-inside: avoid; page-break-inside: avoid; }
  .hcard--gross { grid-column: span 2 !important; }

  /* Zwei Kästen bestehen nur aus Bedienung: der Schnellzugriff ist eine
     Reihe Knöpfe, die Hilfe ist ein Suchfeld. Auf Papier bliebe davon ein
     leerer Rahmen mit Überschrift übrig — besser ganz weg. */
  .hcard[data-id="werkzeug"], .hcard[data-id="hilfe"] { display: none !important; }

  /* Ein Board: alle Spalten, nicht nur die sichtbaren — und in jeder Spalte
     alle Karten. Seit Fassung 50 hat das Board am Bildschirm eine feste Höhe
     und jede Spalte einen eigenen Rollbalken; auf Papier gibt es beides
     nicht, also werden beide hier wieder aufgehoben. Ohne diese Zeilen
     kämen nur die Karten aufs Blatt, die gerade zu sehen waren. */
  .board, .board.quer { overflow: visible !important; display: block;
          height: auto !important; }
  .colm { width: auto !important; min-width: 0 !important; height: auto !important;
          display: block !important;
          break-inside: avoid; page-break-inside: avoid;
          background: #fff; border: 1px solid #bbb; margin-bottom: 10px; }
  .colhead { position: static !important; }
  .stack { overflow: visible !important; max-height: none !important;
           margin-right: 0 !important; padding-right: 0 !important; }
  .card { box-shadow: none; border: 1px solid #ddd; cursor: auto;
          break-inside: avoid; page-break-inside: avoid; }

  a { color: inherit; text-decoration: none; }
  thead { display: table-header-group; }
}

/* Der Weg zur Anleitung im Hilfekasten: kein Knopf, sondern eine Zeile —
   wer eine Frage hat, soll zuerst das Feld sehen. */
.hanleitung{display:inline-block;margin-top:10px;font-size:12.5px;color:var(--accent);font-weight:500}
@media (hover:hover){.hanleitung:hover{text-decoration:underline}}

/* ---------- Das Ladezeichen ----------

   Unten links, drei Punkte, die nacheinander aufleuchten. Klein genug, um
   beim Arbeiten nicht zu stören, und deutlich genug, um die Frage „hängt
   es?" zu beantworten.

   „pointer-events:none" ist hier keine Formsache: das Zeichen sitzt in der
   Ecke, in der am Telefon der Daumen liegt. Ein Element, das dort Klicks
   abfängt, wäre schlimmer als gar keins. */
.ladepunkt{position:fixed;left:14px;bottom:14px;z-index:900;display:flex;gap:4px;
  padding:7px 9px;border-radius:100px;background:rgba(29,29,31,.82);
  backdrop-filter:blur(6px);pointer-events:none;
  opacity:0;transform:translateY(4px);transition:opacity .16s ease, transform .16s ease}
.ladepunkt[data-an="1"]{opacity:1;transform:translateY(0)}
.ladepunkt i{width:5px;height:5px;border-radius:50%;background:#fff;opacity:.35;
  animation:ladepuls 1.1s infinite ease-in-out}
.ladepunkt i:nth-child(2){animation-delay:.16s}
.ladepunkt i:nth-child(3){animation-delay:.32s}
@keyframes ladepuls{0%,70%,100%{opacity:.3;transform:scale(.8)}35%{opacity:1;transform:scale(1)}}

/* Wer Bewegung im Betriebssystem abbestellt hat, bekommt sie auch hier nicht
   — dann leuchten die Punkte einfach ruhig. */
@media (prefers-reduced-motion:reduce){
  .ladepunkt i{animation:none;opacity:.85}
  .ladepunkt{transition:none}
}
@media print{.ladepunkt{display:none !important}}

/* ---------- Import: Zuordnung und Fortschritt (Fassung 52) ---------- */
.zuordnung{border:1px solid var(--line);border-radius:var(--r-m);padding:10px 12px;background:var(--fill)}
.zukopf{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.zukopf b{font-size:13px}
.zukopf .hintline{margin-left:auto}
.zurow{display:grid;grid-template-columns:minmax(0,1fr) 170px minmax(0,1fr);gap:8px;align-items:center;
  padding:4px 0;border-top:1px solid var(--line)}
.zurow:first-of-type{border-top:0}
.zuname{font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.zurow select{font-size:12.5px;padding:5px 8px}
.zubsp{font-size:11.5px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-family:var(--f-mono)}
.zuwarn{font-size:12px;color:var(--alert);margin:8px 0 0}
@media (max-width:620px){
  .zurow{grid-template-columns:1fr;gap:3px;padding:8px 0}
  .zubsp{order:3}
}

/* Der Balken. Keine Animation im Hintergrund, keine Streifen: er zeigt eine
   Zahl, und die soll man ihm glauben können. */
.balken{height:8px;border-radius:100px;background:var(--fill-2);overflow:hidden}
.balken i{display:block;height:100%;background:var(--accent);border-radius:100px;
  transition:width .25s ease}
.dlg--schmal{max-width:min(420px,calc(100vw - 32px))}

/* ======================= Profil und Visitenkarte (Fassung 53) =============
   Das Profil hatte fünf Felder und brauchte kein Raster. Mit vier Gruppen
   braucht es eines — sonst steht eine Spalte aus zwanzig Eingabefeldern da,
   und man findet die Durchwahl nicht mehr zwischen den Sprachen.          */

/* Im Profil sind die vier Gruppen dieselben Kästen wie auf den anderen
   Reitern — sonst sieht ein Reiter aus wie eine Karteikarte und der nächste
   wie eine Liste. Auf der Visitenkarte selbst bleiben sie rahmenlos: dort
   stehen sie schon in einem Fenster, und ein Rahmen im Rahmen ist einer zu
   viel. */
.pgruppe{margin:0 0 16px}
.pgruppe:last-child{margin-bottom:0}
.pgruppe .flab{margin-bottom:8px}
#p-profil .pgruppe{border:1px solid var(--line);border-radius:var(--r-m);
  padding:14px 16px;background:var(--paper)}
/* Zwei Felder nebeneinander, sobald Platz ist. Auf dem Telefon untereinander:
   ein halb so breites Eingabefeld für eine Telefonnummer hilft niemandem. */
/* ===================== Profil: die fünf Reiter (Fassung 54) ===============

   Vorher eine Spalte aus über dreißig Feldern. Die Reiter sind kein Schmuck,
   sondern der Grund, warum man das Passwort wiederfindet, ohne an seiner
   Durchwahl vorbeizuscrollen.                                               */

.dlg--profil{max-width:760px;width:calc(100vw - 32px)}
.dlg--profil .dlg-body{max-height:min(66vh,620px);overflow:auto}

.ptabs{display:flex;gap:2px;padding:0 18px;border-bottom:1px solid var(--line);
  overflow-x:auto;scrollbar-width:none;background:var(--paper)}
.ptabs::-webkit-scrollbar{display:none}
.ptab{border:0;background:none;font:inherit;font-size:13px;font-weight:600;color:var(--ink-2);
  padding:11px 13px;cursor:pointer;white-space:nowrap;position:relative;border-radius:var(--r-s) var(--r-s) 0 0}
/* Der Strich sitzt immer da und ist nur durchsichtig — sonst springt die
   Zeile beim Umschalten um zwei Pixel. */
.ptab::after{content:"";position:absolute;left:10px;right:10px;bottom:-1px;height:2px;
  border-radius:2px;background:transparent}
@media (hover:hover) and (pointer:fine){.ptab:hover{color:var(--ink);background:var(--fill-2)}}
.ptab.an{color:var(--accent)}
.ptab.an::after{background:var(--accent)}
.ptab:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}

.pblatt[hidden]{display:none}
.pintro{font-size:12.5px;color:var(--ink-2);line-height:1.55;margin:0 0 16px}

/* Ein Kasten je Thema. Er macht sichtbar, was zusammengehört — und damit
   auch, was nicht. */
/* Der Kasten ist hell wie das Papier, die Eingabefelder bleiben grau. Anders
   herum verschwinden die Felder: sie tragen dieselbe Füllfarbe und einen
   durchsichtigen Rahmen, und auf grauem Grund sieht ein Eingabefeld dann aus
   wie ein Stück Text. */
.pkasten{border:1px solid var(--line);border-radius:var(--r-m);padding:14px 16px;margin:0 0 14px;
  background:var(--paper)}
.pkasten:last-child{margin-bottom:0}
.pkasten > .flab{margin-bottom:10px}
.pkasten > .hintline{display:block;margin-bottom:10px}
.pkasten .check{margin:6px 0}
.pfeld2{display:grid;grid-template-columns:1fr;gap:0 14px}
@media (min-width:560px){.pfeld2{grid-template-columns:1fr 1fr;align-items:start}}
.pzeile{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:10px}

/* Der Kopf des Konto-Reiters: das Bild groß, weil es das einzige ist, was
   andere von einem sehen, bevor sie den Namen lesen. */
.pkopf{display:flex;align-items:center;gap:18px;margin:0 0 18px}
.pbild{position:relative;flex:none}
.av--xl{width:96px;height:96px;font-size:34px;letter-spacing:.02em}
.pbildtausch{position:absolute;left:0;right:0;bottom:0;text-align:center;cursor:pointer;
  font-size:10.5px;font-weight:600;color:#fff;background:rgba(0,0,0,.55);
  padding:5px 0;border-radius:0 0 100px 100px;line-height:1.1}
.pbild input[type=file]{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.pkopfwer{min-width:0}
.pkopfname{font-size:19px;font-weight:650;color:var(--ink);line-height:1.2;overflow-wrap:anywhere}
.pkopfmail{font-size:12.5px;color:var(--ink-2);margin-top:2px;overflow-wrap:anywhere}
.pkopftaten{margin:9px 0 5px}

/* Der zusammengesetzte Anzeigename steht da wie ein Eingabefeld, ist aber
   keines — man ändert ihn über die beiden Felder daneben. */
.panzeige{min-height:38px;display:flex;align-items:center;padding:8px 11px;
  border:1px dashed var(--line);border-radius:var(--r-s);background:var(--fill-2);
  font-size:13.5px;color:var(--ink);overflow-wrap:anywhere}
.panzeige--leer{color:var(--ink-3)}
.psave{margin-left:10px}
@media (max-width:560px){
  .psave{display:none}
  .pkopf{gap:14px}
  .av--xl{width:76px;height:76px;font-size:27px}
  .ptabs{padding:0 12px}
  .ptab{padding:10px;font-size:12.5px}
}

/* Die zwei Spalten gelten NUR im Formular (#p-profil). Die Visitenkarte
   benutzt dieselben .pgruppe-Blöcke, hat darin aber Beschriftung-und-Wert
   nebeneinander — zwei Raster übereinander ergeben dort Wörter, die in
   dreißig Pixeln Buchstabe für Buchstabe umbrechen. */
@media (min-width:620px){
  /* align-items:start ist hier nicht Kosmetik: ohne es wird jedes Feld auf die
     Höhe seiner Zeile gedehnt, und weil manche Felder einen Hinweis darunter
     tragen und andere nicht, stehen die Eingabefelder auf verschiedenen Höhen
     und werden unterschiedlich hoch. */
  #p-profil .pgruppe{display:grid;grid-template-columns:1fr 1fr;gap:0 14px;align-items:start}
  #p-profil .pgruppe .flab{grid-column:1 / -1}
  /* Mehrzeiliges und die Tagesreihe nehmen die ganze Breite. */
  #p-profil .pgruppe .field:has(textarea),
  #p-profil .pgruppe .field:has(.tagewahl),
  #p-profil .pgruppe .field:has(.check){grid-column:1 / -1}
}
.tagewahl{display:flex;flex-wrap:wrap;gap:2px 12px;padding-top:4px}
.tagewahl .check{margin:0}
.pzeile{display:flex;align-items:center;gap:12px;margin-top:4px}

.vkkopf{display:flex;align-items:flex-start;gap:14px;margin-bottom:18px}
.av--l{width:56px;height:56px;font-size:20px}
.vkwer{min-width:0}
.vkname{font-size:17px;font-weight:650;color:var(--ink);line-height:1.25}
.vkmeta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;margin-top:3px;
  font-size:12.5px;color:var(--ink-2)}
.vkmeta .flag{font-size:11px}
.flag--weg{color:var(--ink-2);background:var(--fill-2);padding:2px 7px;border-radius:100px;font-weight:600}
.vkmail{display:inline-block;margin-top:5px;font-size:12.5px;overflow-wrap:anywhere}

/* Zwei Spalten: Bezeichnung links, Wert rechts. Eine Visitenkarte liest man
   nicht von oben nach unten, sondern sucht eine Zeile — und dafür muss die
   Bezeichnung an einer festen Kante stehen. */
.vkrow{display:grid;grid-template-columns:132px 1fr;gap:4px 12px;padding:5px 0;
  border-top:1px solid var(--line-2);align-items:baseline}
.vkrow:first-of-type{border-top:0}
.vklab{font-size:12px;color:var(--ink-2)}
.vkwert{font-size:13px;color:var(--ink);overflow-wrap:anywhere;white-space:pre-line}
@media (max-width:520px){
  .vkrow{grid-template-columns:1fr;gap:1px}
  .vkkopf{gap:10px}
  .av--l{width:46px;height:46px;font-size:17px}
}

/* ======================= Listenansicht (Fassung 55) =======================

   Dasselbe Board als Tabelle. Eine echte <table> und kein Raster aus <div>:
   die Spaltenbreiten sollen sich am Inhalt ausrichten, der Kopf soll als Kopf
   vorgelesen werden, und „sortiert nach" ist ein Zustand, für den HTML schon
   ein Attribut hat (aria-sort).                                            */

.ltab{width:100%;border-collapse:collapse;font-size:13.5px}
/* Der Kopf bleibt beim Scrollen stehen. Hier geht das ohne Umstände, weil die
   Liste KEIN eigener Scrollbereich ist: sie scrollt mit der Seite, und in der
   Seite hat ein klebender Tabellenkopf allen Weg der Welt. Genau das, was dem
   Board in seinem eigenen Bereich fehlt. */
.ltab thead th{position:sticky;top:var(--kopfhoehe,0px);z-index:3;background:var(--paper);
  text-align:left;font-weight:600;color:var(--ink-2);font-size:12px;
  padding:0;border-bottom:1px solid var(--line)}
.lsort{display:flex;align-items:center;gap:5px;width:100%;border:0;background:none;
  font:inherit;font-size:12px;font-weight:600;color:var(--ink-2);
  padding:9px 10px;cursor:pointer;text-align:left;white-space:nowrap}
@media (hover:hover) and (pointer:fine){.lsort:hover{color:var(--ink);background:var(--fill-2)}}
.lsort.an{color:var(--accent)}
.lpfeil{font-size:10px;line-height:1}
.lsort:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}

.lrow{border-bottom:1px solid var(--line-2);cursor:pointer}
.lrow td{padding:8px 10px;vertical-align:middle}
@media (hover:hover) and (pointer:fine){.lrow:hover{background:var(--fill-2)}}
/* Erledigtes bleibt lesbar, tritt aber zurück — durchgestrichen wäre bei
   einer ganzen Zeile zu viel. */
.lrow.done .ltext{color:var(--ink-3)}
.lrow--kind td{padding-top:5px;padding-bottom:5px;background:var(--fill)}
.lrow--kind .ltext{font-size:12.5px;color:var(--ink-2)}
.leinzug{color:var(--ink-3);margin-right:7px}

.ltitel{min-width:220px}
.ltext{overflow-wrap:anywhere}
.ltags{display:inline-flex;flex-wrap:wrap;gap:4px;margin-left:8px;vertical-align:middle}
.lkurz{white-space:nowrap;width:1%}
.lsel{width:1%;padding-right:0}
/* Die Hülle und nicht die Zelle wird zum Flex-Kasten: display:flex auf einem
   <td> nimmt die Zelle aus dem Tabellenlayout, und dann richten sich die
   Spalten nicht mehr aneinander aus. */
.lwerin{display:flex;align-items:center;gap:7px;white-space:nowrap}
.lleer{color:var(--ink-3)}
.ldot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:7px;vertical-align:-1px}
.ldat{font-variant-numeric:tabular-nums}
.ldat--spaet{color:var(--prio-krit);font-weight:600}
/* Dieselben Farben wie die Punkte auf den Karten — eine Priorität darf nicht
   in zwei Ansichten verschieden aussehen. */
.lprio{font-size:11.5px;font-weight:600;padding:2px 8px;border-radius:100px;
  background:var(--fill-2);color:var(--ink-2)}
.lprio[data-p="kritisch"]{background:var(--prio-krit-bg);color:var(--prio-krit)}
.lprio[data-p="hoch"]{background:var(--prio-hoch-bg);color:var(--prio-hoch)}

.lfuss{margin:12px 2px 0;font-size:12px;color:var(--ink-3)}

/* ---- Meine Reihenfolge (Fassung 57) ----

   Die Leiste über der Tabelle trennt zwei Dinge, die leicht verwechselt
   werden: die Spaltenköpfe SORTIEREN (nach Frist, nach Art), der Knopf hier
   ORDNET (von Hand, nur für mich). Deshalb steht er außerhalb der Tabelle
   und sieht nicht wie ein Spaltenkopf aus.                                */
.lleiste{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:0 2px 10px}
.btn--mini{padding:5px 10px;font-size:12.5px;gap:6px}
.btn--mini.an{background:var(--accent);border-color:var(--accent);color:#fff}
.btn--still{background:none;border-color:transparent;color:var(--ink-3);text-decoration:underline}
@media (hover:hover) and (pointer:fine){.btn--still:hover{color:var(--ink-2)}}
.lhinweis{font-size:12px;color:var(--ink-3);flex:1 1 220px;min-width:0}

.lgriff{width:1%;padding-right:0 !important;padding-left:6px !important}
.zgriff{display:flex;align-items:center;justify-content:center;width:22px;height:26px;
  border:0;background:none;padding:0;cursor:grab;color:var(--ink-3);border-radius:5px}
.zgriff svg{fill:currentColor}
@media (hover:hover) and (pointer:fine){.zgriff:hover{color:var(--ink);background:var(--fill-2)}}
.zgriff:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.zgriff:active{cursor:grabbing}
/* Aufgenommen: die Zeile wartet auf ihren Platz. Kräftig genug, dass man im
   Vorbeiscrollen sieht, dass noch etwas offen ist. */
.zgriff.auf{color:#fff;background:var(--accent)}
.lrow.zieht{opacity:.45}
/* Die Einfügemarke ist ein Rand an der Zelle, nicht an der Zeile: einen Rahmen
   auf ein <tr> zu legen zeichnet border-collapse nicht verlässlich. */
.lrow.ueber-oben > td{box-shadow:inset 0 2px 0 var(--accent)}
.lrow.ueber-unten > td{box-shadow:inset 0 -2px 0 var(--accent)}
/* Beim Ordnen zählt die Reihenfolge, nicht die Sortierrichtung — die Pfeile in
   den Köpfen wären hier eine Lüge. */
.ltab--mein thead .lpfeil{display:none}
.leerhinweis{margin:22px 2px;font-size:13.5px;color:var(--ink-2)}

/* Am Telefon fallen die Spalten weg, die man dort nicht lesen kann, ohne quer
   zu scrollen. Übrig bleibt, was eine Zeile ausmacht: was es ist, wo es steht,
   wann es fällig ist. Quer scrollen zu müssen, um eine Liste zu lesen, ist
   schlimmer als eine kürzere Liste. */
@media (max-width:760px){
  .ltab{font-size:13px}
  /* Nach Namen und nicht nach Position: eine Spalte links davor — das
     Auswahlkästchen, der Griff — verschiebt jede Zählung. Bis Fassung 56
     stand hier nth-child(7), und als die Art dazukam, verschwand auf dem
     Telefon nicht mehr der geplante Tag, sondern die Frist. */
  .ltab .lc-wer,.ltab .lc-plan{display:none}
  .lrow td{padding:9px 7px}
  .ltags{display:none}
}
@media print{
  .ltab thead th{position:static}
  .lrow{break-inside:avoid}
}

/* ---- Art der Arbeit (Fassung 56) ----
   Eine eigene, zurückhaltende Farbe je Art. Zurückhaltend mit Absicht: die
   Art ist eine Einordnung und keine Warnung — Rot und Violett sind für die
   Priorität vergeben und dürfen hier nicht noch einmal auftauchen, sonst
   bedeutet dieselbe Farbe zwei Dinge. */
.chip--art{display:inline-flex;align-items:center;gap:5px;font-weight:600}
.chip--art i{font-style:normal;font-size:11px;line-height:1}
.chip--art[data-a="anruf"]{background:#E8F0EC;color:#1E6B45}
.chip--art[data-a="rueckfrage"]{background:#FDF3E2;color:#8A6410}
.chip--art[data-a="mail"]{background:#E7EEF6;color:#12467A}
.chip--art[data-a="handlung"]{background:var(--fill-2);color:var(--ink-2)}

.lart{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;
  padding:2px 8px;border-radius:100px;background:var(--fill-2);color:var(--ink-2);white-space:nowrap}
.lart i{font-style:normal;font-size:10.5px;line-height:1}
.lart[data-a="anruf"]{background:#E8F0EC;color:#1E6B45}
.lart[data-a="rueckfrage"]{background:#FDF3E2;color:#8A6410}
.lart[data-a="mail"]{background:#E7EEF6;color:#12467A}

/* Gruppenüberschrift in der Liste: eine Zeile, die zählt. */
.lgruppe td{padding:14px 10px 6px;border-bottom:1px solid var(--line);background:var(--paper)}
.lgruppe:first-child td{padding-top:4px}
.lgname{font-size:12.5px;font-weight:650;color:var(--ink)}
.lgzahl{font-size:11.5px;color:var(--ink-3);margin-left:9px}

/* ======================= Eine Zeile für alles (Fassung 56) ================

   Ansichtswahl, Neue Aufgabe, Suche, Sortierung, Filter — und rechts die
   Werkzeuge. Vorher zwei Zeilen; über einem Board, das um jeden Pixel
   kämpft, ist eine davon zu viel.

   Der Preis: es wird eng. Deshalb fallen die Wörter an den Werkzeugknöpfen
   schon ab 1200 Pixel weg und nicht erst am Telefon — ein Symbol mit Titel
   ist verständlicher als eine Leiste, die in drei Zeilen umbricht.          */

/* EINE Breite für alle Seiten (Fassung 61).

   Bis Fassung 60 war die Board-Seite breiter als Dashboard, Boards und
   „Meine Liste" — 1680 gegen 1340. Das hatte zwei Gründe, und beide waren
   in dieser Form falsch.

   Der erste: die Werkzeugzeile passe nicht in 1340. Das stimmte, war aber
   kein Breitenproblem, sondern eine falsch gefüllte Zeile; seit Fassung 60
   braucht sie 901 Pixel. Der zweite: die Spalten brauchen Platz. Der stimmt
   weiter.

   Was ich dabei nicht abgewogen habe: Beim Wechsel ins Board sprang die
   GANZE Seite um 170 Pixel nach außen — Kopfleiste, Titel, Kennzahlen,
   alles. Ein Rahmen, der je nach Seite woanders steht, ist kein Rahmen.

   Also: der Rahmen ist überall gleich. Nur der Spaltenbereich darf
   darüber hinausragen, und zwar symmetrisch nach beiden Seiten. Alles, was
   auf allen Seiten vorkommt, bleibt damit an derselben Stelle stehen —
   und die Spalten haben trotzdem ihren Platz. */
/* Ein erster Versuch ließ nur den Spaltenbereich über den Rahmen
   hinausragen. Gemessen stimmte das — Rahmen überall gleich, Spalten
   breiter. Angesehen war es falsch: die erste Spalte begann LINKS vom
   Seitentitel, und die Werkzeugzeile, die zum Board gehört, stand
   eingerückt daneben. Das liest sich nicht als Absicht, sondern als
   Verrutschen. Dass eine Messung stimmt, heißt nicht, dass es gut
   aussieht — dafür muss man hinsehen.

   Also der andere Weg: EINE Breite, und die Spalten bekommen ihren Platz
   dadurch, dass sie etwas schmaler sein dürfen. Siehe .colm. */

.toolbar--eins{padding:14px 0 10px;gap:8px 10px}
/* Die Ansichtswahl bleibt am Schreibtisch immer sichtbar: Die Zeile klebt
   direkt unter der (ebenfalls klebenden) Kopfleiste, auch wenn die Seite
   scrollt. Am Telefon (<900px) führt stattdessen das Spaltenband unter der
   Kopfleiste — dort NICHT kleben, sonst stünden beide im selben Band. (F121) */
@media (min-width:900px){
  #viewrow{position:sticky;top:var(--kopfhoehe,0px);z-index:60;
    background:var(--paper);box-shadow:0 1px 0 var(--line)}
}
.toolbar--eins .seg--view{flex:none}
.toolbar--eins #q{min-width:120px}
.flabel--sort{margin-left:2px}
.toolbar--eins select{max-width:170px}

/* Nachgemessen: die Zeile BRAUCHT 1796 Pixel mit allen Wörtern und hat auf
   einem 1600er Schirm 1544. Also müssen vier Wörter weichen, sonst wird aus
   der einen Zeile wieder eine zweite — und darum ging es ja gerade.

   Die Werkzeuge rechts verlieren sie und nicht die Ansichtswahl links: ihre
   Symbole stehen seit jeher auch am Telefon allein, sie sind an derselben
   Stelle wie bisher, und jeder trägt seinen Titel. Ab 1900 Pixel ist Platz
   genug, dann stehen die Wörter wieder da. */
.toolbar--eins .btn--tool .btxt{display:none}
.toolbar--eins .btn--tool{padding-left:10px;padding-right:10px}
@media (min-width:1900px){
  .toolbar--eins .btn--tool .btxt{display:inline}
  .toolbar--eins .btn--tool{padding-left:15px;padding-right:15px}
}
@media (max-width:900px){
  /* Am Telefon darf sie umbrechen: dort ist Breite knapper als Höhe, und die
     Ansichtswahl soll ganz sichtbar bleiben. */
  /* Die alte Werkzeugleiste stand am Telefon auf „nowrap": sie hatte wenig
     Inhalt und sollte in einer Zeile bleiben. Mit der Ansichtswahl darin ist
     das falsch — alles hinter den Reitern schöbe sich aus dem Bild, und zwar
     lautlos. Hier also wieder umbrechen lassen: erste Zeile die Reiter,
     zweite Zeile Suche, Sortierung und Werkzeuge. */
  .toolbar--eins{gap:8px;flex-wrap:wrap}
  .toolbar--eins .seg--view{order:-1;width:100%;overflow-x:auto;scrollbar-width:none}
  .toolbar--eins .seg--view::-webkit-scrollbar{display:none}
  .toolbar--eins .flabel--sort{display:none}
}

/* ---------- Arbeit abnehmen (Fassung 59) ----------

   Die Begründung steht als Knöpfe da und nicht nur als leeres Feld: fünf
   Sätze decken den Großteil ab, und ein Klick ist leichter als ein Satz,
   den man sich erst ausdenken muss. */
.abgruende{display:flex;flex-wrap:wrap;gap:7px;padding-top:4px}
.abgrund{font:inherit;font-size:12.5px;padding:6px 11px;border:1px solid var(--line);
  border-radius:100px;background:var(--paper);color:var(--ink-2);cursor:pointer;text-align:left}
@media (hover:hover) and (pointer:fine){.abgrund:hover{border-color:var(--accent);color:var(--ink)}}
.abgrund.an{background:var(--accent);border-color:var(--accent);color:#fff}
.abgrund:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* Eine Anfrage hängt unter ihrem Entwurf und ist eingerückt — sie gehört
   zur Zeile darüber und ist keine eigene Aufgabe. */
.abzeile{grid-column:1/-1;display:flex;align-items:center;gap:9px;flex-wrap:wrap;
  margin:6px 0 2px 26px;padding:8px 12px;font-size:13px;
  background:var(--accent-soft);border-radius:var(--r-m)}
.abtext{flex:1 1 220px;min-width:0;color:var(--ink-2)}
.abwarum{display:block;font-size:12.5px;color:var(--ink-3);margin-top:2px;overflow-wrap:anywhere}
@media (max-width:760px){.abzeile{margin-left:0}}

/* ---------- Vorgaben zur Arbeitsweise (Fassung 59) ----------

   Jede Vorgabe bekommt drei Zeilen Text: was sie tut, wann sie greift, und
   was gerade gilt. Das ist viel für einen Schalter — aber eine Vorgabe,
   deren Wirkung man raten muss, ist schlimmer als keine. Und „Gilt hier"
   mit der Herkunft daneben ist der Ersatz für die Spur, die ein Regelwerk
   gebraucht hätte. */
.vorgabenliste{display:flex;flex-direction:column;gap:2px}
.vorgabe{padding:12px 0;border-top:1px solid var(--line-2)}
.vorgabe:first-child{border-top:0;padding-top:4px}
.vkopfz{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.vlab{font-size:14px;font-weight:600;color:var(--ink);flex:1 1 220px;min-width:0}
.vkopfz select{max-width:260px}
.vcheck{margin:0}
.vzurueck{font-size:12px}
.vwas{margin:5px 0 0;font-size:12.5px;color:var(--ink-2)}
.vwann{margin:2px 0 0;font-size:12px;color:var(--ink-3)}
.vgilt{margin:6px 0 0;font-size:12px;color:var(--ink-2);
  background:var(--fill);border-radius:var(--r-s);padding:5px 9px;display:inline-block}
.vgilt b{font-weight:600}
@media (max-width:760px){
  .vkopfz{align-items:flex-start}
  .vlab{flex:1 1 100%}
}

/* ---------- Erklärung beim Verweilen (Fassung 60) ----------

   Der eingebaute title des Browsers kann das nicht: eine Zeile, Systemschrift,
   keine Absätze, nicht gestaltbar. Also ein eigenes kleines Fenster — Titel,
   dann zwei bis drei kurze Sätze, so wie in der Hilfe. Es erscheint erst nach
   längerem Verweilen; wer weiß, wo er hinklickt, sieht es nie. */
.tipp{position:fixed;z-index:9000;max-width:300px;pointer-events:none;
  background:var(--ink);color:#fff;border-radius:var(--r-m);padding:10px 13px;
  box-shadow:0 10px 30px rgba(0,0,0,.22);animation:tippauf .13s ease-out}
.tippt{font:650 13px/1.3 var(--f)}
.tippx{margin-top:5px;font:400 12.5px/1.5 var(--f);color:rgba(255,255,255,.82)}
@keyframes tippauf{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.tipp{animation:none}}
/* Auf Berührungsgeräten gibt es kein Verweilen — dort wäre das Fenster nur
   ein Schatten, der nach jedem Tippen kurz aufblitzt. */
@media (hover:none){.tipp{display:none}}

/* ---------- Nur Symbole (Fassung 60) ----------

   Die Umstellung läuft über EIN Attribut am <html>: data-wort="aus" blendet
   alle Beschriftungen weg, data-wort="an" zeigt sie. Es wird schon beim
   ersten Bild gesetzt, aus dem, was der Server mitliefert — sonst stünde die
   Kopfleiste einen Augenblick mit Wörtern da und zuckte dann zusammen. */
html[data-wort="aus"] .crumbwort,
html[data-wort="aus"] .vwort,
html[data-wort="aus"] .btxt,
html[data-wort="aus"] .kontoname,
html[data-wort="aus"] .brand .product{display:none}
html[data-wort="aus"] .crumb{padding-left:10px;padding-right:10px}
html[data-wort="aus"] .seg--view button{padding-left:11px;padding-right:11px}

/* Die Werkzeuge des Boards stehen im Kopf, nicht in der Werkzeugzeile:
   oben, was dem BOARD gehört, unten, was der ANSICHT gehört. */
.boardwerk{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.crumb svg,.seg--view button svg{flex:0 0 auto}
.crumb{display:inline-flex;align-items:center;gap:7px}
.seg--view button{display:inline-flex;align-items:center;gap:7px}
.crumb--aus{color:var(--ink-3)}
@media (hover:hover) and (pointer:fine){.crumb--aus:hover{color:var(--prio-krit)}}

/* Am Telefon zählt jede Zeile doppelt: dort immer nur die Symbole. */
@media (max-width:900px){
  .crumbwort,.vwort,.btxt,.kontoname{display:none}
}

/* ---------- Die Kästen sagen, wofür sie da sind (Fassung 61) ----------

   Acht Kästen, die alle gleich aussehen, zwingen zum Lesen: man muss jede
   Überschrift entziffern, um zu wissen, was da steht. Dabei tun sie dreierlei
   — zeigen, was BEI MIR liegt; zeigen, WIE ES STEHT; etwas ANBIETEN.

   Zwei Mittel, beide vor dem Lesen wirksam: das Symbol bekommt einen
   getönten Kreis in der Farbe der Art, und ein schmaler Streifen am oberen
   Rand nimmt dieselbe Farbe auf. Dazu eine Zeile unter der Überschrift, die
   in sechs Worten sagt, welche Frage der Kasten beantwortet.

   Die Farben sind bewusst gedämpft: drei kräftige Töne nebeneinander auf
   einer Übersichtsseite wären ein Signalfeuer, und ein Dashboard, das
   durchgehend schreit, sagt nichts mehr. */
.hcardhead{align-items:flex-start}
.hsym{flex:0 0 auto;width:30px;height:30px;border-radius:9px;display:inline-flex;
  align-items:center;justify-content:center;background:var(--fill-2);color:var(--ink-2)}
.hcardhead .hsym .hic{color:inherit}
.hwort{min-width:0;flex:1 1 auto;padding-top:2px}
.hfrage{margin:1px 0 0;font-size:11.5px;line-height:1.35;color:var(--ink-3);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.hcard{position:relative;overflow:hidden}
.hcard::before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:transparent}

/* was bei mir liegt */
.hcard[data-art="mir"] .hsym{background:var(--accent-soft);color:var(--accent)}
.hcard[data-art="mir"]::before{background:var(--accent)}
/* wie es steht */
.hcard[data-art="lage"] .hsym{background:var(--fill-2);color:var(--ink-2)}
.hcard[data-art="lage"]::before{background:var(--line)}
/* was ich tun kann */
.hcard[data-art="tun"] .hsym{background:rgba(16,122,96,.1);color:#0d6b53}
.hcard[data-art="tun"]::before{background:rgba(16,122,96,.55)}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .hcard[data-art="tun"] .hsym{background:rgba(52,186,150,.16);color:#63ceae}
  :root:not([data-theme="light"]) .hcard[data-art="tun"]::before{background:rgba(52,186,150,.5)}
}

/* Der Schnellzugriff: Gruppen statt einer flachen Liste. Die Überschrift
   sagt, was gleich passiert — hingehen, im Board etwas öffnen, oder sonst. */
.hgruppe{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;
  color:var(--ink-3);margin:12px 0 6px}
.hcardbody > .hgruppe:first-child{margin-top:2px}

/* ============================================================
   Fassung 62: Ausblenden und die Befehle an der Karte
   ============================================================ */

/* Die Zeile über einer Spalte: wie viele Karten hier ausgeblendet sind.
   Zurückhaltend gesetzt — sie ist ein Hinweis, keine Meldung. Aber sie ist
   da, denn ein Ausblenden, dessen Umfang man nicht sieht, ist ein Löschen
   mit Verzögerung (lib/verdeckt.php). */
.vzeile{display:flex;align-items:center;gap:6px;padding:0 4px 8px;
  font-size:12px;color:var(--ink-3)}
.vlink{background:none;border:0;padding:0;font:inherit;color:var(--accent);
  cursor:pointer;text-decoration:underline;text-underline-offset:2px}
.vlink:hover{text-decoration-thickness:2px}

/* Eine ausgeblendete Karte, die der Schalter gerade sichtbar macht. Sie darf
   nicht aussehen wie die anderen, sonst blendet man sie zum zweiten Mal aus
   und wundert sich, dass nichts passiert. Gestrichelt und blasser: sichtbar
   auf Widerruf. */
.card--verdeckt{opacity:.62;border-style:dashed;box-shadow:none}
.card--verdeckt:hover{opacity:.85}

/* Die Befehlszeile im Kartenfenster. Sie steht über den Feldern, weil sie
   etwas anderes tut: die Felder beschreiben die Karte, diese Knöpfe handeln.
   Deshalb eine eigene Zeile mit Abstand darunter und nicht noch ein „field". */
.kbefehle{display:flex;flex-wrap:wrap;gap:7px;padding:0 0 14px;
  margin:0 0 4px;border-bottom:1px solid var(--line)}

/* Die Zielwahl beim Einhängen. Zwei Sonderfälle, die sonst aus dem Haus
   fallen: ein Suchfeld (input[type=search] steht nicht in der allgemeinen
   Regel für Eingabefelder) und eine aufgeklappte Liste (select mit size —
   die allgemeine Regel setzt appearance:none und malt einen Pfeil, den eine
   aufgeklappte Liste nicht hat). */
#un-suche{font-family:inherit;font-size:15px;color:var(--ink);background:var(--fill);
  border:1px solid transparent;border-radius:var(--r-m);padding:9px 12px;width:100%}
#un-suche:focus{outline:0;background:var(--paper);
  box-shadow:0 0 0 1px var(--line-2),0 0 0 4px rgba(18,70,122,.12)}
#un-ziel{width:100%;min-height:170px;appearance:auto;-webkit-appearance:auto;
  background-image:none;padding:6px}
#un-ziel option{padding:5px 7px;border-radius:6px}

/* Die drei Pfeile am Kartenfuß teilen sich eine Zeile mit „Öffnen" und
   „Weiter →". Mit dem dritten Pfeil (↑↑, Fassung 62) reichte die Breite in
   einer 230px-Spalte nicht mehr, und die Zeile brach um: jede Karte wurde
   eine Zeile höher, für einen Knopf, den man selten braucht. Enger gesetzt
   passt alles wieder — die Fläche zum Treffen bleibt auf dem Handy ohnehin
   durch die Regel weiter unten bei 32px. */
.card .acts{gap:2px}
.card .acts .icon{padding-left:5px;padding-right:5px}

/* ============================================================
   Fassung 63: Rückgängig
   ============================================================ */

/* Der Knopf in der Meldung. Die Meldung ist dunkel, also muss er hell
   sein und darf trotzdem nicht wie der Hauptknopf einer Seite wirken —
   er ist ein Angebot, keine Aufforderung. */
.toastknopf{margin-left:14px;background:none;border:0;padding:2px 0;font:inherit;
  font-weight:600;color:#fff;cursor:pointer;text-decoration:underline;
  text-underline-offset:3px;text-decoration-thickness:1.5px}
.toastknopf:hover{text-decoration-thickness:2.5px}

/* Die Liste der Züge. Eine Zeile je Handlung — nicht je geänderter Karte;
   dass „37 Karten archiviert" EINE Zeile ist, ist der ganze Punkt. */
.zliste{display:flex;flex-direction:column;gap:2px;margin:10px 0}
.zzeile{display:flex;align-items:center;gap:12px;padding:9px 10px;border-radius:var(--r-m)}
.zzeile:nth-child(odd){background:var(--fill)}
.ztext{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.ztext b{font-weight:600;font-size:14.5px}
.zmeta{font-size:12.5px;color:var(--ink-3)}
/* Schon zurückgenommen: bleibt stehen, damit die Spur vollständig ist,
   aber es ist kein Angebot mehr. */
.zzeile--weg{opacity:.55}
.zzeile--weg .ztext b{text-decoration:line-through;text-decoration-thickness:1px}

/* ============================================================
   Fassung 63: auf eine Karte ziehen
   ============================================================ */

/* Die Zielkarte, während das Verweilen gegriffen hat. Sie muss sich klar
   von der Einfügelinie unterscheiden — das ist der ganze Zweck: zwei
   verschiedene Aussagen dürfen nicht gleich aussehen. */
.card--haengziel{box-shadow:0 0 0 2px var(--accent),var(--shadow-2);transform:translateY(-1px)}

/* Die Vorschau: die gezogene Karte schon an ihrem künftigen Platz. */
.haengvor{display:flex;align-items:center;gap:7px;margin:4px 0 2px;padding:5px 9px;
  border-radius:8px;background:var(--accent-soft);color:var(--accent);
  font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.haengpfeil{opacity:.75;font-weight:400}

/* Der Trichter: die Karte fährt in die andere hinein. */
.trichter{position:fixed;z-index:9000;pointer-events:none;margin:0;
  transition:left .3s cubic-bezier(.4,0,.2,1),top .3s cubic-bezier(.4,0,.2,1),
             width .3s cubic-bezier(.4,0,.2,1),height .3s cubic-bezier(.4,0,.2,1),
             opacity .3s ease,transform .3s cubic-bezier(.4,0,.2,1);
  transform-origin:top center;overflow:hidden}
@media (prefers-reduced-motion:reduce){.trichter{display:none}}

/* ============================================================
   Fassung 64: Parken und der Übertrag
   ============================================================ */

/* Geparkt: beiseite, aber sichtbar. Blasser als offen, nicht
   durchgestrichen wie erledigt — es ist weder das eine noch das andere. */
.lb-geparkt .lpunkt{opacity:.72}
.lb-geparkt .lpunkt:hover{opacity:1}
.lgeparkt{color:var(--ink-3);font-variant-numeric:tabular-nums}
.lparken{color:var(--ink-3)}

/* Die Übertragsfrage. Sie steht einmal am Tag ganz oben im Tag und muss
   auffallen, ohne nach Fehler auszusehen — es ist eine Frage, keine
   Warnung. Deshalb die ruhige Tönung des Hauses und kein Rot. */
.uebertrag{background:var(--accent-soft);border:1px solid var(--accent-line,var(--line));
  border-radius:var(--r-m);padding:12px 14px;margin:0 0 12px}
.uebkopf{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.uebkopf b{font-size:14.5px}
.uebertrag .hintline{margin:8px 0 0}

/* Eine Zeile, die noch von gestern steht. Ein schmaler Strich am Rand —
   sie ist nicht falsch, sie ist nur älter als der Tag. */
.lplan--alt{box-shadow:inset 3px 0 0 var(--accent)}
.luebertrag{color:var(--alert);font-weight:600}

/* ============================================================
   Fassung 64: Fokus und Klang
   ============================================================ */

/* Der Ring um die Uhr. 25 Minuten einmal herum — die Zahl sagt, wie lange
   man sitzt, der Ring sagt, wie viel vom Block noch kommt. */
.fokusring{position:relative;width:216px;height:216px;margin:6px auto 2px}
.fokusring svg{width:100%;height:100%;display:block}
.fr-bahn{stroke:var(--line)}
.fr-fuell{stroke:var(--accent);transition:stroke-dashoffset .9s linear,stroke .4s ease}
.fr-fuell.voll{stroke:var(--gut,#2f855a)}
.fokusring .fokusuhr{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;margin:0}

/* Der Tag als schmaler Balken oben — ohne Rechnen sichtbar, wie weit man ist. */
.fktagbar{width:120px;height:5px;border-radius:99px;background:var(--fill-2);overflow:hidden;margin-left:10px}
.fktagbar i{display:block;height:100%;background:var(--accent);border-radius:99px;transition:width .5s ease}

/* Der Zuspruch. Kommt, bleibt ein paar Sekunden, geht. Er darf nicht
   springen — deshalb hat die Zeile auch unsichtbar ihre Höhe. */
.fokuszuspruch{min-height:24px;text-align:center;font-size:15px;font-weight:600;
  color:var(--accent);opacity:0;transform:translateY(5px);
  transition:opacity .45s ease,transform .45s ease;margin:2px 0 6px}
.fokuszuspruch.an{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.fokuszuspruch{transition:none}}

/* Die Klangwahl. Knöpfe und kein Auswahlfeld: man probiert sie durch,
   und dafür will man alle gleichzeitig sehen. */
.fokusklang{margin:16px 0 4px;display:flex;flex-direction:column;gap:9px;align-items:center}
.klangwahl{display:flex;flex-direction:column;gap:7px;align-items:stretch}
.klangknopf{background:var(--fill);border:1px solid transparent;border-radius:99px;
  padding:5px 12px;font:inherit;font-size:13px;color:var(--ink-2);cursor:pointer}
.klangknopf:hover{background:var(--fill-2);color:var(--ink)}
.klangknopf.an{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.klangregler{display:flex;align-items:center;gap:8px;width:min(320px,80%)}
.klangregler input[type=range]{flex:1;accent-color:var(--accent)}
.klangsym{font-size:14px;opacity:.7}
.klangeigen{display:flex;flex-wrap:wrap;gap:7px;align-items:center;justify-content:center;
  width:min(520px,94%);text-align:center}
.klangeigen input[type=url]{flex:1 1 240px;min-width:0}
.klangeigen .hintline{flex-basis:100%}
.klangdatei{cursor:pointer}

/* ============================================================
   Fassung 65: die globale Suche
   ============================================================ */

.hsuche{min-width:min(320px,42vw)}
.gsuche{margin:4px 0 24px}
.gskopf{display:flex;align-items:center;gap:10px;padding:0 2px 10px;
  border-bottom:1px solid var(--line);margin-bottom:14px}
.gskopf b{font-size:16px}
.gsgruppe{margin:0 0 20px}
.gsgruppenkopf{display:flex;align-items:center;gap:7px;margin:0 0 7px;color:var(--ink-2)}
.gsgruppenkopf b{font-size:13px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}
.gsgruppenkopf .lab{margin-left:auto}

/* Eine Trefferzeile ist ein Knopf: man klickt sie an, um hinzugehen. Also
   sieht sie auch aus wie etwas, das man anklickt, und nicht wie Text, der
   zufällig reagiert. */
.gszeile{display:flex;align-items:center;gap:12px;width:100%;text-align:left;
  background:var(--paper);border:1px solid var(--line);border-radius:var(--r-m);
  padding:10px 13px;margin:0 0 6px;font:inherit;color:inherit;cursor:pointer}
.gszeile:hover{border-color:var(--accent);background:var(--fill)}
.gszeile--fertig .gstitel{text-decoration:line-through;text-decoration-thickness:1px;color:var(--ink-3)}
.gsmitte{min-width:0;flex:1}
.gstitel{display:flex;align-items:center;gap:8px;font-size:14.5px;font-weight:600;
  white-space:nowrap;overflow:hidden;min-width:0}
/* Die Kennung behält ihre Breite, der Titel gibt nach — und zwar mit einem
   Auslassungszeichen, damit man sieht, dass noch etwas kommt. */
.gstitel .ref{flex:none}
.gsname{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gswo{font-size:12.5px;color:var(--ink-3);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gspfeil{color:var(--ink-3);flex:none}
.gszeile:hover .gspfeil{color:var(--accent)}

/* „alle 25 zeigen" steht UNTER der Gruppe und nicht neben der Überschrift:
   dort, wo das Auge nach der fünften Zeile ohnehin ankommt. Es ist bewusst
   kein Knopf mit Rahmen — sonst wiegt es schwerer als die Treffer selbst. */
.gsmehr{display:block;width:100%;text-align:left;background:none;border:0;
  padding:4px 13px 2px;margin:0;font:inherit;font-size:13px;color:var(--ink-3);
  cursor:pointer;text-decoration:underline;text-underline-offset:3px;
  text-decoration-color:var(--line)}
.gsmehr:hover{color:var(--accent);text-decoration-color:currentColor}

@media (max-width:620px){.hsuche{min-width:0;width:100%;order:9}}

/* ============================================================
   Fassung 65: feste Höhen und der Notizblock
   ============================================================ */

/* Ein Kasten mit fester Höhe rollt in sich — abgeschnitten würde Inhalt
   verschwinden, und eingestellt wird eine Höhe, damit die Reihen stehen,
   nicht damit etwas weg ist. */
.hcard--fest .hcardbody{overscroll-behavior:contain}
.hcard--fest .hcardbody::-webkit-scrollbar{width:8px}
.hcard--fest .hcardbody::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:99px}
.hhoehe{font-variant-numeric:tabular-nums;font-weight:600;font-size:12px;min-width:26px}
.hhoehe--an{color:var(--accent)}
.hedithinweis .linkbtn{padding:0;font-weight:600;color:var(--accent);text-decoration:underline;text-underline-offset:2px}

/* Der Notizblock. Er soll aussehen wie ein Block und nicht wie ein
   Formularfeld: kein Rahmen, Linien wie auf Papier, und der Rand links
   markiert, dass hier geschrieben wird. */
.hnotiz{width:100%;border:0;background:transparent;resize:none;font:inherit;
  font-size:14.5px;line-height:28px;color:var(--ink);padding:0 2px;
  min-height:140px;outline:none;
  background-image:linear-gradient(transparent 27px,var(--line) 27px,var(--line) 28px);
  background-size:100% 28px}
.hnotiz::placeholder{color:var(--ink-3)}
.hnotizfuss{display:flex;align-items:center;gap:8px;margin-top:8px;
  font-size:12px;color:var(--ink-3);min-height:18px}

/* ============================================================
   Fassung 65: Hilfe & Service
   ============================================================ */

/* Das Suchfeld sah bis hierher nach nichts aus, weil input[type=search]
   nie in der allgemeinen Regel für Eingabefelder stand. Diese Lücke wird
   hier EINMAL geschlossen — auch für die beiden anderen Stellen, an denen
   sie aufgefallen war. */
/* Suchfelder schöner (Fassung 100): Pillenform mit Lupe links, klarer Rahmen
   und Fokusring in der Akzentfarbe. Gilt für alle Suchfelder und das
   Board-Suchfeld (#q). Felder mit eigener Lupe (.hsuchfeld) bekommen kein
   zweites Symbol. */
input[type=search],#q{font-family:inherit;font-size:15px;color:var(--ink);box-sizing:border-box;
  background:var(--paper) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 20 20'%3E%3Ccircle cx='9' cy='9' r='6' fill='none' stroke='%2355626E' stroke-width='1.7'/%3E%3Cpath d='M13.6 13.6L17 17' stroke='%2355626E' stroke-width='1.7' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat left 13px center;
  border:1px solid var(--line-2);border-radius:100px;padding:10px 15px 10px 38px;max-width:100%;
  transition:border-color .15s,box-shadow .15s}
@media (hover:hover){input[type=search]:hover,#q:hover{border-color:var(--ink-3)}}
input[type=search]:focus,#q:focus{outline:0;border-color:var(--accent);background-color:var(--paper);
  box-shadow:0 0 0 3px var(--accent-soft)}
.hsuchfeld input[type=search]{background-image:none;padding-left:38px}

.hsuchzeile{display:flex;gap:8px;margin-bottom:12px;align-items:stretch}
.hsuchfeld{position:relative;flex:1;min-width:0;display:flex}
.hsuchfeld input{width:100%;padding-left:38px;font-size:16px;padding-top:11px;padding-bottom:11px}
.hsuchlupe{position:absolute;left:13px;top:50%;transform:translateY(-50%);
  color:var(--ink-3);pointer-events:none}
.hsuchfeld input:focus + .hsuchlupe,.hsuchfeld:focus-within .hsuchlupe{color:var(--accent)}

/* Die Bereiche als Reihe von Knöpfen statt als fünfzehn Überschriften
   untereinander: man sieht auf einen Blick, worüber es überhaupt etwas
   gibt, und kommt mit einem Klick hin. */
.hbereiche{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 14px}
.hchip{display:inline-flex;align-items:center;gap:6px;background:var(--fill);
  border:1px solid transparent;border-radius:99px;padding:5px 11px;
  font:inherit;font-size:13px;color:var(--ink-2);cursor:pointer}
.hchip:hover{background:var(--fill-2);color:var(--ink)}
.hchip.an{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.hchipn{font-size:11.5px;opacity:.7;font-variant-numeric:tabular-nums}
.hchip.an .hchipn{opacity:.85}

/* Ein Artikel zeigt seinen ersten Satz: so entscheidet man, ob man
   aufklappt, ohne aufzuklappen. */
.hartikel > summary{display:flex;gap:9px;align-items:flex-start;list-style:none}
.hartikel > summary::-webkit-details-marker{display:none}
.hartikel > summary::marker{content:""}
/* Das alte Plus/Minus aus Fassung 33 verschwindet: seit Fassung 65 trägt
   die Zusammenfassung ein eigenes Zeichen, das sich dreht. Zwei Zeichen
   nebeneinander, die dasselbe sagen, sind eines zu viel. */
.hartikel > summary::before{content:none}
.hartikel[open] > summary::before{content:none}
.hapfeil{flex:none;color:var(--ink-3);font-size:17px;line-height:1.25;
  transition:transform .18s ease;transform-origin:center}
.hartikel[open] > summary .hapfeil{transform:rotate(90deg);color:var(--accent)}
.hawort{display:flex;flex-direction:column;gap:2px;min-width:0}
.hatitel{font-weight:600}
.havor{font-size:12.5px;color:var(--ink-3);font-weight:400;line-height:1.45}
.hartikel[open] > summary .havor{display:none}
@media (prefers-reduced-motion:reduce){.hapfeil{transition:none}}


/* ============================================================
   Fassung 69: „App aufs Gerät"
   ============================================================ */

/* Die Schrittliste im App-Dialog erbt .schritte (nummerierte Kreise) und
   braucht nur etwas Luft — bewusst keine eigene Gestaltung: Zwei Arten,
   Schritte darzustellen, wären eine zu viel. */
.appweg{margin:2px 0 4px}
.appweg .schritte{margin:0}
.appweg .schritte li{font-size:14px}
#appdlg .kleingedruckt{margin:6px 0 0;font-size:12.5px;color:var(--ink-3);line-height:1.5}
#appdlg .dlg-body > .btn{justify-self:start}

/* Die Kulissenwahl in Gruppen (Fassung 69). Dreizehn Knöpfe in einer Reihe
   wären eine Wand; drei kurze Reihen mit einer kleinen Überschrift davor
   findet das Auge, ohne zu lesen. */
.klangreihe{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px}
/* Die Überschrift steht ÜBER der Reihe, nicht daneben. Daneben sah sie
   richtig aus, solange eine Reihe in eine Zeile passte — sobald sie umbrach,
   hing die Überschrift an der ersten Zeile und der Rest der Knöpfe stand
   darunter mittig ohne erkennbare Zugehörigkeit. Eine Beschriftung, deren
   Lage davon abhängt, wie breit gerade das Fenster ist, beschriftet nichts. */
.klanggruppe{width:100%;text-align:center;font-size:11px;letter-spacing:.05em;
  text-transform:uppercase;color:var(--ink-3);margin:3px 0 1px;flex:none}
@media (max-width:620px){
  .klangreihe{justify-content:flex-start}
  .klanggruppe{text-align:left;margin:4px 0 0}
}

/* ---------- Abgeschaltete Tags (Fassung 70) ----------
   Sie sollen zu sehen sein und zugleich erkennbar nicht in Gebrauch.
   Ausgrauen allein reicht nicht — grau heißt in dieser Oberfläche schon
   „Nebensache". Deshalb zusätzlich gestrichelt: dieselbe Sprache wie bei
   ausgeblendeten Karten aus Fassung 62, wo es ebenfalls heißt „ist da,
   gilt hier aber nicht". */
.colrow.tagaus input[type=text]{opacity:.55}
.colrow.tagaus .swatches{opacity:.45}
.colrow.tagaus button[data-m="an"]{border-style:dashed;color:var(--ink-3)}
.picktag.tagaus{border-style:dashed;opacity:.7}
/* Die Tagliste hat seit Fassung 70 einen Knopf mehr je Zeile (An/Aus).
   In 560 Pixeln fiel „Entfernen" dadurch auf eine zweite Zeile, und jede
   Zeile war doppelt so hoch — bei zwölf Tags ein Fenster voller Umbrüche.
   Dieses eine Fenster darf breiter sein; es ist eine Liste und kein
   Formular. */
#tdlg{max-width:min(680px, calc(100vw - 32px))}
@media (max-width:620px){
  /* Am Telefon bricht es ohnehin um — dann wenigstens sauber: Name ganz
     oben über die volle Breite, Knöpfe darunter in einer Reihe. */
  #tdlg .colrow input[type=text]{flex:1 1 100%;order:-1}
}

/* ---------- Gesperrte Felder (Fassung 71) ----------
   Die Vorlagenwahl ist gesperrt, solange kein Boardname dasteht. Ein
   gesperrtes Feld, das aussieht wie ein offenes, ist schlimmer als ein
   Fehler: Man klickt es an, nichts passiert, und man sucht den Grund bei
   sich. Also sichtbar gesperrt — und die Begründung steht daneben. */
.field select:disabled,.field input:disabled{opacity:.5;cursor:not-allowed;background:var(--fill)}

/* ================= Der Fokus, neu (Fassung 71) =================

   Grundsatz: Auf dem Schirm stehen die Aufgabe und die Uhr. Alles zum
   Einstellen liegt in der Schublade. Das Bild liegt dahinter und ist
   gedämpft genug, dass man darüber lesen kann — ein Hintergrund, der um
   Aufmerksamkeit bittet, ist keiner. */

.fokusbild{position:absolute;inset:0;width:100%;height:100%;
  pointer-events:none;z-index:0;opacity:1}
.fokus .fokuskarte{position:relative;z-index:2}

/* Die kleine Angabe unter der Uhr: welcher Modus gerade läuft. */
/* Die kleine Angabe unter der Uhr steht jetzt UNTER dem Ring (im Fluss),
   statt absolut im unteren Drittel des Rings zu liegen — dort überlappte
   „FOKUSBLOCK · 25 MIN" den Ring und die Uhr (F121). */
.fokusuhrart{text-align:center;margin:-2px 0 2px;min-height:15px;
  font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3)}

/* ---------- Die Bedienleiste ---------- */
.fokusleiste{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:7px;
  margin-top:24px;padding-top:16px;border-top:1px solid var(--line)}
.fkleiste-lab{font-size:10.5px;letter-spacing:.07em;text-transform:uppercase;
  color:var(--ink-3);font-weight:600;margin-right:4px}
.fkchip{display:inline-flex;align-items:center;background:var(--fill);
  border:1px solid var(--line);border-radius:99px;
  padding:6px 13px;font:500 12.5px/1 var(--f);color:var(--ink-2);cursor:pointer}
.fkchip-i{font-size:13px;font-style:normal;line-height:1;margin-right:6px}
@media (hover:hover) and (pointer:fine){.fkchip:hover{background:var(--fill-2);color:var(--ink);border-color:var(--line-2,var(--line))}}
.fkchip.an{background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}

/* ---------- Die Schublade ---------- */
.fokusfach{position:absolute;z-index:4;right:0;top:0;bottom:0;width:min(440px,100%);
  background:var(--paper);border-left:1px solid var(--line);
  box-shadow:var(--shadow-3);display:flex;flex-direction:column;
  animation:fachrein .18s ease-out}
@keyframes fachrein{from{transform:translateX(26px);opacity:0}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.fokusfach{animation:none}}
.fkfachkopf{display:flex;align-items:center;gap:10px;padding:18px 20px 14px;
  border-bottom:1px solid var(--line);font-size:15px}
.fkfachrumpf{padding:4px 20px 26px;overflow-y:auto;flex:1}
.fkteil{padding:18px 0;border-bottom:1px solid var(--line)}
.fkteil:last-child{border-bottom:0}
.fkteil h3{font-size:12px;letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink-3);margin:0 0 12px;font-weight:600}
.fkteil .flag{margin:10px 0 2px}
.fkteil .hintline{margin:2px 0 12px}

.fkmodi{display:grid;gap:7px}
.fkmodus{display:block;width:100%;text-align:left;background:var(--fill);
  border:1px solid transparent;border-radius:var(--r-m);padding:10px 13px;cursor:pointer}
.fkmodus b{display:block;font-size:14px;color:var(--ink)}
.fkmodus span{display:block;font-size:12.5px;color:var(--ink-3);margin-top:2px}
@media (hover:hover) and (pointer:fine){.fkmodus:hover{background:var(--fill-2)}}
.fkmodus.an{background:var(--accent-soft);border-color:var(--accent)}
.fkmodus.an b{color:var(--accent)}

.fkzeilen{margin-top:12px;display:grid;gap:8px}
.fkzeile{display:flex;align-items:center;gap:9px;font-size:13.5px;color:var(--ink-2)}
.fkzeile span{flex:1}
.fkzeile input{width:78px}
.fkzeile em{font-style:normal;color:var(--ink-3);font-size:12.5px}

/* ---------- Imaginäre Kolleginnen ---------- */
.fokuscrew{position:absolute;z-index:3;left:24px;top:84px;width:188px;
  background:color-mix(in srgb, var(--paper) 86%, transparent);
  border:1px solid var(--line);border-radius:var(--r-l);padding:12px 13px;
  backdrop-filter:blur(6px)}
.fkcrewkopf{font-size:11px;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ink-3);margin-bottom:9px}
.fkcrewzeile{display:flex;align-items:center;gap:9px;padding:5px 0}
.fkcrewzeile.weg{opacity:.45}
.fkcrewini{width:26px;height:26px;border-radius:50%;flex:none;display:flex;
  align-items:center;justify-content:center;background:var(--fill-2);
  font:600 10.5px/1 var(--f);color:var(--ink-2)}
.fkcrewtext{display:flex;flex-direction:column;min-width:0}
.fkcrewtext b{font-size:13px;line-height:1.2}
.fkcrewtext span{font-size:11.5px;color:var(--ink-3)}
.fkcrewfuss{margin-top:9px;padding-top:8px;border-top:1px solid var(--line);
  font-size:10.5px;color:var(--ink-3)}
@media (max-width:1100px){.fokuscrew{display:none}}

/* ---------- Die Pause ---------- */
.fokuspause{position:absolute;inset:0;z-index:5;display:flex;align-items:center;
  justify-content:center;background:color-mix(in srgb, var(--paper) 84%, transparent);
  backdrop-filter:blur(8px);padding:24px}
.fkpausenkarte{max-width:470px;width:100%;text-align:center;
  background:var(--paper);border:1px solid var(--line);border-radius:var(--r-l);
  padding:30px 28px 24px;box-shadow:var(--shadow-3)}
.fkpausenkopf{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.fkpausenuhr{font:300 54px/1.05 var(--f);letter-spacing:-.03em;margin:8px 0 18px;
  font-variant-numeric:tabular-nums}
.fkuebung{background:var(--fill);border-radius:var(--r-m);padding:16px 18px;margin-bottom:18px;text-align:left}
.fkuebung b{display:block;font-size:15px;margin-bottom:5px}
.fkuebung p{font-size:13.5px;line-height:1.6;color:var(--ink-2);margin:0 0 12px}
.fkuebung .btn{margin-right:7px}
.fkpausentaten{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}

/* ---------- Die Auswertung ---------- */
.fkstatkopf{text-align:center;padding:4px 0 14px}
.fkstatgross b{display:block;font:300 38px/1.1 var(--f);letter-spacing:-.03em}
.fkstatgross span{display:block;font-size:13px;color:var(--ink-3);margin-top:3px}
.fkstatdiff{margin-top:9px;font-size:13px;color:var(--ink-2)}
.fkstatdiff.rauf{color:var(--good,#2F7D53)}
.fkstatdiff.runter{color:var(--ink-3)}
.fkstatzahlen{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:20px}
.fkstatzahl{background:var(--fill);border-radius:var(--r-m);padding:11px 8px;text-align:center}
.fkstatzahl b{display:block;font-size:19px;font-weight:600}
.fkstatzahl span{display:block;font-size:11.5px;color:var(--ink-3);margin-top:1px}
.fkbalken{display:flex;align-items:flex-end;gap:4px;height:84px;margin:4px 0 20px}
.fkbalk{flex:1;height:100%;display:flex;align-items:flex-end;cursor:default}
.fkbalk i{display:block;width:100%;background:var(--accent);border-radius:3px 3px 0 0;min-height:2px}
.fkbalk.leer i{background:var(--line-2,var(--line))}
.fkzeitreihe{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:4px 0 10px}
.fkzeit{background:var(--fill);border-radius:var(--r-m);padding:11px 6px;text-align:center}
.fkzeit.viel{background:var(--accent-soft)}
.fkzeit b{display:block;font-size:17px;font-weight:600}
.fkzeit.viel b{color:var(--accent)}
.fkzeit span{display:block;font-size:11.5px;color:var(--ink-2);margin-top:1px}
.fkzeit em{display:block;font-style:normal;font-size:10.5px;color:var(--ink-3)}
.fkkulissen{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 14px}
.fkkul{background:var(--fill);border-radius:99px;padding:5px 12px;font-size:12.5px;color:var(--ink-2)}

@media (max-width:760px){
  .fokusfach{width:100%;border-left:0}
  .fkstatzahlen{grid-template-columns:repeat(2,1fr)}
  .fkzeitreihe{grid-template-columns:repeat(2,1fr)}
  /* Auf dem Handy soll der Fokus ohne Scrollen auf den Schirm. Also
     kleinerer Ring, dichtere Abstände — und die Bedienleiste rückt
     zusammen, statt sich über den unteren Rand zu schieben. */
  .fokus{padding:16px 16px calc(16px + env(safe-area-inset-bottom))}
  .fokuskopf{margin-bottom:14px}
  .fokusring{width:150px;height:150px;margin:2px auto}
  .fokusring .fokusuhr{font-size:36px}
  .fokusuhrart{bottom:16px}
  .fokusuhr{font-size:40px;margin-bottom:10px}
  .fokuskontext{margin-bottom:9px}
  .fokustitel{margin-bottom:7px}
  .fokusmeta{margin-bottom:16px}
  .fokustaten{margin-bottom:10px}
  .fokusleiste{margin-top:14px;padding-top:12px;row-gap:8px}
  .fokusleiste .spacer{display:none}
  .fkleiste-lab{flex:0 0 100%;text-align:center;margin:0 0 2px}
  .fkchip{padding:8px 13px}
}

/* ============================================================
   Fassung 209: Fokus auf flachen Fenstern (nach HÖHE, nicht Breite)
   ------------------------------------------------------------
   Der Fokus war bisher nur fürs Handy (schmale Breite) kompakt. Auf
   einem breiten, aber NIEDRIGEN Laptop-Fenster (z. B. 1280×620) blieb
   die große Karte stehen — Ring, Titel, Knöpfe und Bedienleiste liefen
   über den unteren Rand hinaus und wirkten „zerschossen". Diese Regeln
   greifen nach der Fensterhöhe und schrumpfen Ring und Abstände, damit
   der Fokus auf den Schirm passt, ohne dass etwas abgeschnitten wird.
   Der volle Look auf hohen Fenstern (ab ~760 px) bleibt unverändert.
   ============================================================ */
@media (max-height:760px){
  .fokus{padding:16px}
  .fokuskopf{margin-bottom:12px}
  .fokusring{width:168px;height:168px;margin:2px auto}
  .fokusring .fokusuhr{font-size:40px}
  .fokusuhr{font-size:40px;margin-bottom:8px}
  .fokusuhrart{margin:-1px 0 2px}
  .fokustitel{font-size:clamp(20px,3.2vw,30px);margin-bottom:8px}
  .fokusmeta{margin-bottom:14px}
  .fokustaten{margin-bottom:10px}
  .fokusleiste{margin-top:14px;padding-top:12px}
}
@media (max-height:600px){
  .fokuskopf{margin-bottom:8px}
  .fokusring{width:128px;height:128px;margin:0 auto}
  .fokusring .fokusuhr{font-size:32px}
  .fokusuhr{font-size:34px;margin-bottom:6px}
  .fokuszuspruch{min-height:0;margin:1px 0 4px}
  .fokuskontext{margin-bottom:7px}
  .fokustitel{font-size:clamp(18px,2.6vw,24px);margin-bottom:6px}
  .fokusmeta{margin-bottom:10px}
  .fokustaten{margin-bottom:8px}
  .fokusleiste{margin-top:10px;padding-top:10px}
}

/* In der Auswertung stehen Überschriften direkt über ihrem Abschnitt und
   brauchen Luft davor — sonst klebt „Die häufigsten Kulissen" am Satz
   darüber und liest sich wie dessen Fortsetzung. */
#fk-stat .flab{margin-top:18px}
#fk-stat .flab:first-child{margin-top:0}
#fk-stat .hintline{margin-top:8px}

/* ================= Fassung 72: die mitlaufende Uhr und der Ablauf ========= */

/* Die kleine Uhr in der Kopfleiste. Sie steht an der Stelle des
   Fokus-Ziels und ersetzt es, solange eine Sitzung läuft. Der Punkt davor
   pulst leise — das ist das Einzige an der ganzen Oberfläche, das sich von
   selbst bewegt, und genau deshalb sieht man es. */
.crumb--uhr{display:inline-flex;align-items:center;gap:7px;
  background:var(--accent-soft);color:var(--accent);font-variant-numeric:tabular-nums}
.crumb--uhr .fkminipunkt{width:7px;height:7px;border-radius:50%;background:var(--accent);
  flex:none;animation:fkpuls 2.4s ease-in-out infinite}
@keyframes fkpuls{0%,100%{opacity:1}50%{opacity:.35}}
@media (prefers-reduced-motion:reduce){.crumb--uhr .fkminipunkt{animation:none}}
.crumb--uhr .fkminizeit{font-weight:600;font-size:13px}
.crumb--uhr .fkminiwort{font-size:11.5px;opacity:.8}
.crumb--uhr.pause{background:var(--fill-2);color:var(--ink-2)}
.crumb--uhr.pause .fkminipunkt{background:var(--ink-3);animation:none}

/* Die Ablaufzeile auf dem Fokusschirm: eine Zeile, die den ganzen Rest des
   Tages sagt. Sie steht unter der Aufgabe, weil sie die Antwort auf die
   zweite Frage ist — die erste ist „was jetzt". */
.fokusablauf{margin:-16px 0 24px;font-size:13px;color:var(--ink-3);
  font-variant-numeric:tabular-nums}

/* Der Ablauf in der Schublade. */
.fkablauf{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.ablaufliste{margin:10px 0 4px}
.ablaufzeile{display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:var(--r-s);
  font-size:13px}
.ablaufzeile.jetzt{background:var(--accent-soft)}
.ablaufzeile.jetzt .ablauftext b{color:var(--accent)}
.ablaufzeile.vorbei{opacity:.45}
.ablaufzeile.pause{color:var(--ink-3)}
.ablaufzeile.pause .ablauftext b{font-weight:500}
.ablaufzeit{flex:none;width:44px;color:var(--ink-3);font-variant-numeric:tabular-nums;font-size:12px}
.ablauftext{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ablauftext b{font-weight:600}
.ablaufmin{flex:none;color:var(--ink-3);font-size:12px;font-variant-numeric:tabular-nums}

/* Das Abschlussbild — dieselbe Form wie die Pause, anderer Inhalt. */
.fkendezahl{font:300 44px/1.1 var(--f);letter-spacing:-.03em;margin:6px 0 12px}
.fkendetext{font-size:14px;line-height:1.6;color:var(--ink-2);margin:0 0 20px}

/* Kurzes Aufleuchten einer frisch angelegten Karte (Fassung 82). */
.card.neu-blink{animation:neublink 1.6s ease-out 1}
@keyframes neublink{
  0%{box-shadow:0 0 0 2px var(--accent),0 0 0 6px rgba(37,99,235,.28)}
  100%{box-shadow:var(--shadow-1)}
}
@media (prefers-reduced-motion:reduce){
  .card.neu-blink{animation:none;box-shadow:0 0 0 2px var(--accent)}
}

/* Zufallsmix-Kopf im Klang-Fach (Fassung 83). */
.klangmixkopf{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:2px 0 10px}
.klangmixknopf{border:1px solid var(--line);background:var(--paper);color:var(--ink);
  border-radius:999px;padding:6px 14px;font-size:13px;font-weight:600;cursor:pointer}
.klangmixknopf:hover{border-color:var(--accent)}
.klangmixknopf.an{background:var(--accent);border-color:var(--accent);color:#fff}
.klangmixhinweis{font-size:12px;color:var(--ink-2)}

/* Registrieren-Aufruf auf der Anmeldeseite (Fassung 85). */
.reg-cta{margin-top:20px;padding-top:18px;border-top:1px solid var(--line);text-align:center}
.reg-cta-text{display:block;font-size:13.5px;color:var(--ink-2);margin-bottom:10px}
.btn--block{display:block;width:100%;text-align:center;box-sizing:border-box}

/* ===== Willkommen / Team & Testimonials (Fassung 87) ===== */
.willkommen{display:grid;grid-template-columns:1.1fr .9fr;gap:28px;align-items:center;
  margin:22px 0 10px;padding:24px;border:1px solid var(--line);border-radius:var(--r-l);
  background:linear-gradient(180deg,var(--accent-soft),var(--paper))}
.willkommen h2{margin:0 0 10px;font-size:clamp(22px,3.2vw,30px);letter-spacing:-.025em}
.willkommen p{margin:0 0 10px;color:var(--ink-2);line-height:1.6;font-size:15px}
.willkommen .wk-sig{font-weight:600;color:var(--ink);font-size:14px}
.willkommen .wk-sig small{display:block;font-weight:400;color:var(--ink-3)}
.wk-bild{display:flex;justify-content:center}
.wk-bild img{width:100%;max-width:340px;border-radius:var(--r-l);box-shadow:var(--shadow-1)}
@media (max-width:720px){.willkommen{grid-template-columns:1fr;text-align:center}.wk-bild{order:-1}}

.team{display:flex;flex-wrap:wrap;gap:18px;justify-content:center;margin:18px 0 0}
.teamkarte{display:flex;flex-direction:column;align-items:center;gap:8px;width:160px;text-align:center}
.teamkarte .tav{width:92px;height:92px;border-radius:50%;object-fit:cover;box-shadow:0 0 0 3px var(--accent)}
.teamkarte .tph{width:92px;height:92px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:var(--fill);border:2px dashed var(--line);color:var(--ink-3);font-size:11px;line-height:1.2;padding:8px}
.teamkarte b{font-size:14px}
.teamkarte small{font-size:12px;color:var(--ink-3);line-height:1.4}

/* Testimonials als Wisch-/Tipp-Slider (Fassung 89): eine Stimme groß auf
   einmal, zum Durchwischen (Touch) oder über Pfeile/Punkte — größer und
   wärmer als das frühere Raster. */
.tmnlslider{position:relative;margin:18px 0 0}
.tmnls{display:flex;gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;
  scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none;padding:2px;margin:0}
.tmnls::-webkit-scrollbar{display:none}
.tmnl{flex:0 0 100%;scroll-snap-align:center;box-sizing:border-box;position:relative;
  border:1px solid var(--line-2);border-radius:var(--r-l);background:var(--accent-soft);
  padding:30px 28px 26px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px}
.tmnl::before{content:"\201C";position:absolute;top:4px;left:20px;font-size:62px;line-height:1;
  color:var(--accent);opacity:.26;font-family:Georgia,"Times New Roman",serif}
.tmnl .tmnl-text{font-size:18px;line-height:1.62;color:var(--ink);margin:0;font-style:italic;max-width:44ch}
.tmnl .tmnl-who{display:flex;align-items:center;gap:12px;margin-top:4px}
.tmnl .tmnl-who img{width:56px;height:56px;border-radius:50%;object-fit:cover;flex:none;
  border:2px solid var(--paper);box-shadow:var(--shadow-1)}
.tmnl .tmnl-who span{text-align:left}
.tmnl .tmnl-who b{display:block;font-size:14.5px}
.tmnl .tmnl-who small{font-size:12.5px;color:var(--ink-3)}
/* Pfeile (Fassung 97): saubere Chevrons per CSS statt der Textzeichen ‹ ›.
   Das Zeichen im Knopf wird mit font-size:0 ausgeblendet; das Chevron zeichnet
   ::before aus zwei Rahmenkanten — gestochen scharf in jeder Größe. */
.tmnl-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:42px;height:42px;
  border-radius:50%;border:1px solid var(--line-2);background:var(--paper);color:var(--ink-2);
  font-size:0;cursor:pointer;box-shadow:0 2px 10px rgba(15,26,38,.12);display:flex;
  align-items:center;justify-content:center;
  transition:background .16s,color .16s,border-color .16s,box-shadow .16s,transform .16s}
.tmnl-nav::before{content:"";display:block;width:10px;height:10px;border-right:2.2px solid currentColor;
  border-bottom:2.2px solid currentColor;border-radius:1.5px}
.tmnl-prev::before{transform:rotate(135deg);margin-left:4px}
.tmnl-next::before{transform:rotate(-45deg);margin-right:4px}
.tmnl-nav:disabled{opacity:.3;cursor:default;box-shadow:none}
.tmnl-nav:focus-visible{outline:0;box-shadow:0 0 0 3px var(--accent-soft)}
@media (hover:hover){.tmnl-nav:not(:disabled):hover{background:var(--accent);color:#fff;border-color:var(--accent);
  transform:translateY(-50%) scale(1.08);box-shadow:0 6px 18px rgba(18,70,122,.30)}}
.tmnl-prev{left:-8px}
.tmnl-next{right:-8px}
.pitch .tmnl-prev{left:2px}
.pitch .tmnl-next{right:2px}
.tmnl-dots{display:flex;gap:7px;justify-content:center;margin-top:14px}
.tmnl-dot{width:8px;height:8px;border-radius:50%;border:0;padding:0;cursor:pointer;
  background:var(--line-2);transition:background .15s,transform .15s}
.tmnl-dot.an{background:var(--accent);transform:scale(1.25)}
@media (max-width:620px){
  .tmnl-nav{display:none}
  .tmnl{padding:26px 20px 22px}
  .tmnl .tmnl-text{font-size:16.5px}
}

/* ---- Trainingsbereich (Fassung 102) ---- */
.crumb--training .crumbcnt{background:var(--gold);color:#5c4410}
#page-training{max-width:980px}
.tr-unter{font-size:15px;color:var(--ink-2);line-height:1.6;max-width:70ch;margin:2px 0 20px}
.tr-bilanz{display:flex;gap:14px;flex-wrap:wrap;margin:0 0 16px}
.tr-bil{display:flex;align-items:center;gap:12px;background:var(--paper);border:1px solid var(--line);border-radius:var(--r-l);padding:14px 18px;box-shadow:var(--shadow-1);min-width:150px}
.tr-bilz{display:flex;flex-direction:column;line-height:1.1}
.tr-bilz b{font-size:24px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.tr-bilz span{font-size:12.5px;color:var(--ink-3)}
.tr-coin{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;
  background:radial-gradient(circle at 35% 30%, #F6D879, #E3B23C 70%);color:#7A5C10;font-size:15px;flex:none;
  box-shadow:inset 0 0 0 1.5px #C99A23}
.tr-coin--s{width:19px;height:19px;font-size:10px}
.tr-medal{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;
  background:var(--accent-soft);color:var(--accent);flex:none;box-shadow:inset 0 0 0 1.5px var(--accent)}
.tr-medal-stern{font-size:15px;line-height:1}
.tr-medal--s{width:19px;height:19px}
.tr-medal--s .tr-medal-stern{font-size:10px}
.tr-medliste{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 22px}
.tr-medchip{display:inline-flex;align-items:center;gap:6px;background:var(--accent-soft);color:var(--accent);
  border-radius:100px;padding:5px 13px 5px 6px;font-size:12.5px;font-weight:600}
.tr-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}
.trk{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-l);padding:20px;box-shadow:var(--shadow-1);display:flex;flex-direction:column;gap:11px}
.trk--done{border-color:var(--gruen);box-shadow:var(--shadow-1),inset 0 0 0 1px var(--gruen)}
.trk-kopf{display:flex;align-items:center;gap:10px}
.trk-kopf h2{font-size:17px;margin:0;letter-spacing:-.02em;flex:1}
.trk-worum{font-size:13.5px;color:var(--ink-2);line-height:1.55;margin:0;flex:1}
.trk-bar{height:7px;border-radius:100px;background:var(--fill);overflow:hidden}
.trk-bar i{display:block;height:100%;background:var(--accent);border-radius:100px;transition:width .3s}
.trk--done .trk-bar i{background:var(--gruen)}
.trk-stand{font-size:12px;color:var(--ink-3)}
.trk .btn{margin-top:4px}
.tr-runkopf{display:flex;align-items:center;gap:14px;margin:0 0 14px}
.tr-runname{font-size:18px;font-weight:700;letter-spacing:-.02em}
.tr-runbar{max-width:420px;margin:0 0 7px}
.tr-runzahl{font-size:12.5px;color:var(--ink-3)}
.tr-step{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-l);padding:28px;box-shadow:var(--shadow-1);margin:14px 0 0;max-width:640px}
.tr-step h2{font-size:22px;margin:0 0 12px;letter-spacing:-.02em}
.tr-steptext{font-size:16px;line-height:1.65;color:var(--ink-2);margin:0 0 18px;max-width:60ch}
.tr-tu{background:var(--accent-soft);border-radius:var(--r-m);padding:14px 16px}
.tr-tulabel{display:inline-block;font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);margin-bottom:4px}
.tr-tu p{margin:0;font-size:14.5px;color:var(--ink);line-height:1.5}
.tr-nav{display:flex;gap:10px;margin:18px 0 0;max-width:640px}
.tr-nav .btn--primary{margin-left:auto}
/* Bereiche in der Übersicht (Fassung 107) */
.tr-gruppe{margin:0 0 26px}
.tr-gkopf{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;margin:0 0 12px}
.tr-gname{font-size:18px;font-weight:700;letter-spacing:-.02em;margin:0}
.tr-gunter{font-size:13px;color:var(--ink-3);margin:3px 0 0}
.tr-gzahl{font-size:12.5px;font-weight:600;color:var(--ink-3);background:var(--fill);border-radius:100px;padding:4px 11px;white-space:nowrap;font-variant-numeric:tabular-nums}
/* Abzeichen, wenn ein ganzer Bereich geschafft ist (Fassung 114): ein
   goldener Pokal — passt zu den Münzen und hebt sich von der blauen
   Einzel-Medaille ab, weil es für mehr steht. */
.tr-gbadge{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;letter-spacing:.01em;
  color:#5A3E05;border-radius:100px;padding:5px 12px;white-space:nowrap;flex:none;
  background:linear-gradient(135deg,#F6D879,#E3B23C);
  box-shadow:inset 0 0 0 1.5px #C99A23,0 1px 4px rgba(170,130,20,.3);
  animation:tr-badge-pop .42s cubic-bezier(.2,1.3,.4,1)}
.tr-gbadge svg{flex:none}
@keyframes tr-badge-pop{from{transform:scale(.55);opacity:0}60%{transform:scale(1.06)}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.tr-gbadge{animation:none}}
/* Der abgeschlossene Bereich bekommt einen zarten goldenen Namenston. */
.tr-gruppe--fertig .tr-gname{color:#9A6B10}
:root[data-theme="dark"] .tr-gruppe--fertig .tr-gname{color:#E3B23C}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .tr-gruppe--fertig .tr-gname{color:#E3B23C}}
/* Das Trainings-Symbol (Bachelorhut) in Gold — es gehört zum Lern- und
   Belohnungsthema, nicht zum neutralen Grau der übrigen Leiste. */
.crumb--training svg{color:#C9972A}
:root[data-theme="dark"] .crumb--training svg{color:#E3B23C}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .crumb--training svg{color:#E3B23C}}
/* Beispiel von mir (Fassung 107): bewusst neutral/gedämpft — eine Veranschau-
   lichung, keine Anweisung. Deutlich anders als der Accent-Kasten „Jetzt du“. */
.tr-bsp{background:var(--fill);border-left:3px solid var(--line-2);border-radius:0 var(--r-m) var(--r-m) 0;padding:11px 15px;margin:0 0 16px;max-width:60ch}
.tr-bsplabel{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);margin-bottom:3px}
.tr-bsp p{margin:0;font-size:14.5px;color:var(--ink-2);line-height:1.5}
/* Leseschritt ohne Aufgabe: ruhiger als der Aufgaben-Kasten. */
.tr-tu--lesen{background:var(--fill)}
.tr-tu--lesen .tr-tulabel{color:var(--ink-3)}
.tr-tu--lesen p{color:var(--ink-2)}
@media (max-width:620px){ .tr-step{padding:20px 16px} .tr-nav .btn{flex:1} .tr-nav .btn--primary{margin-left:0} }
/* Auszeichnungen im Profil (Fassung 102) */
.p-trbil{display:flex;flex-wrap:wrap;gap:10px 18px;margin:0 0 12px}
.p-trmz{display:inline-flex;align-items:center;gap:7px;font-size:14px;font-weight:600;color:var(--ink)}
#p-train .tr-medliste{margin:0}

/* ===== Trainings-Center andockbar (Fassung 148) ===== */
:root{ --traindockw:420px; }
body.pc-dock{ padding-right:var(--traindockw); transition:padding-right .16s ease; }
.traindock{
  position:fixed; top:0; right:0; height:100vh; width:var(--traindockw); max-width:92vw;
  background:var(--paper); border-left:1px solid var(--line-2);
  box-shadow:-10px 0 34px rgba(0,0,0,.14); z-index:900;
  display:flex; flex-direction:column;
}
.traindock[hidden]{ display:none; }
.traindock-griff{ position:absolute; left:-4px; top:0; width:9px; height:100%; cursor:ew-resize; z-index:2; }
.traindock-griff:hover{ background:linear-gradient(90deg,var(--accent),transparent); opacity:.5; }
.traindock-kopf{ display:flex; align-items:center; gap:8px; padding:12px 14px; border-bottom:1px solid var(--line); background:var(--fill); }
.traindock-titel{ display:flex; align-items:center; gap:7px; font-weight:600; color:var(--ink); }
.traindock-titel b{ font-weight:600; }
.traindock-ort{ flex:1 1 auto; color:var(--ink-3); font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.traindock-knopf{ width:30px; height:30px; flex:0 0 auto; border:1px solid var(--line); background:var(--paper); color:var(--ink-2); border-radius:8px; cursor:pointer; font-size:15px; line-height:1; display:flex; align-items:center; justify-content:center; }
.traindock-knopf:hover{ background:var(--fill-2); color:var(--ink); }
.traindock-body{ flex:1 1 auto; overflow:auto; padding:14px; }
/* kompaktere Trainings-Darstellung in der schmalen Leiste */
.traindock-body .pagehead h1{ font-size:20px; }
.traindock-body .tr-grid{ grid-template-columns:1fr; }
.traindock-auf{ display:none; }
.traindock--schmal{ width:48px !important; }
.traindock--schmal .traindock-kopf,
.traindock--schmal .traindock-body,
.traindock--schmal .traindock-griff{ display:none; }
.traindock--schmal .traindock-auf{
  display:flex; align-items:center; justify-content:center; gap:8px;
  width:100%; height:100%; border:0; background:transparent; cursor:pointer;
  writing-mode:vertical-rl; transform:rotate(180deg);
  font-weight:600; color:var(--accent); letter-spacing:.04em;
}
.traindock--schmal .traindock-auf:hover{ background:var(--fill); }
@media (max-width:900px){
  body.pc-dock{ padding-right:0; }
  .traindock{ width:100%; max-width:100%; }
  .traindock--schmal{ width:48px !important; left:auto; right:0; }
}

/* Fassung 194: dcyphr.® ID-Schnellzugriff in der Kopfleiste, „ID" im Chamäleon-Look.
   Selbsttragend (eigene Keyframes), damit es unabhängig vom Auth-Style funktioniert. */
.crumb--id{display:inline-flex;align-items:center;gap:3px;font-weight:600;text-decoration:none;white-space:nowrap}
.crumb--id .cham{font-weight:900;letter-spacing:-.02em;
  background:linear-gradient(110deg,#6a5cff,#00b4d8 20%,#12d8a0 40%,#ffd23f 60%,#ff5db1 80%,#6a5cff);
  background-size:300% 100%;-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent;animation:chamid 9s linear infinite}
@keyframes chamid{to{background-position:300% 0}}
@media(prefers-reduced-motion:reduce){.crumb--id .cham{animation:none}}
