/* =============================================================================
   zero.css — die gemeinsame Gestaltung des Zero-Netzes.
   =============================================================================

   EINE Datei für alle Dienste: Konto, Kalender, Finance, Office, Konverter,
   Chat, Cloud und die Karte. Wer hier etwas ändert, ändert es überall.

       /var/www/shared/css/zero.css      <- diese Datei, die Quelle
       /var/www/shared/deploy-ui.sh      <- verteilt sie an alle Dienste

   Die Kopien in den Diensten werden vom Verteilskript überschrieben. Bitte
   nicht dort ändern, sondern hier.

   Warum Kopien und kein gemeinsamer Verweis: Die Sicherheitsregel jedes
   Dienstes trägt `style-src 'self'` — ein Stylesheet von einer fremden
   Herkunft würde der Browser gar nicht erst laden. Jeder Dienst liefert seine
   eigene Kopie aus, aus derselben Quelle.

   Aufbau:
       1. Farben und Maße   — der Wortschatz. Nur hier stehen Zahlen.
       2. Grundlage         — Körper, Formularteile, Schaltflächen, Karten.
       3. Anmeldemaske      — überall dieselbe, in jedem Dienst.
       4. Anwendungsgerüst  — Navigation links, Blattfenster, Listen.

   Jeder Dienst legt darüber sein eigenes Stylesheet mit dem, was nur ihn
   betrifft — office.css, kalender.css, finance.css, konverter.css.
   ============================================================================= */

/* --- 1. Farben und Maße ---------------------------------------------------
   Der ganze Wortschatz auf einmal. Wer eine Farbe braucht, nimmt einen Namen
   von hier; wer eine neue braucht, trägt sie hier ein. Hex-Werte weiter unten
   sind Einzelfälle und kein Vorbild.

   Die Farbwelt stammt aus Zero Chat: dunkler Grund, EIN Akzent in Mint, Rot
   nur für Gefährliches, Gelb nur für Warnungen. Drei Bedeutungsfarben und
   sonst keine — was keine Bedeutung hat, bleibt grau. */

:root{
  /* Eine Schriftfamilie und EINE Fettstufe für Betontes. Vorher stand an
     zwanzig Stellen `font-weight:800` — das ist keine Betonung mehr, das ist
     der Normalzustand. 700 trägt genauso und wirkt ruhiger. */
  font-family:Inter,system-ui,-apple-system,"Segoe UI",sans-serif;
  font-feature-settings:"cv05","ss01";   /* geschlossenes ß, einstöckiges g */
  --fett:700;
  --fett-leicht:600;

  /* Grund und Schrift */
  --grund:#080b12;            /* der Untergrund der ganzen Seite */
  --text:#e8ecf4;             /* Fließtext auf dem Grund */
  --muted:#8c98aa;            /* Nebensächliches, Zusätze, Erklärungen */

  /* Flächen: vom Grund nach oben, drei Stufen */
  --panel:#111722;            /* Karten und Leisten */
  --panel2:#151d2a;           /* was auf einer Karte noch einmal absetzt */
  --flaeche:#1a2331;          /* Schaltflächen im Ruhezustand */
  --flaeche-hoch:#22304a;     /* dieselbe beim Überfahren */
  --line:#263044;             /* Trennlinien und Ränder von Karten */
  --rand:#303c50;             /* Ränder von Schaltflächen */

  /* Eingabefelder — dunkler als ihre Umgebung, damit sie als Loch lesbar sind */
  --feld:#090e16;
  --feld-rand:#2b3548;

  /* Der Akzent. Genau einer, im ganzen Netz derselbe. */
  --accent:#62e5bd;
  --accent-hell:#85f6d3;
  --accent-tief:#31bd93;
  --auf-akzent:#06110e;       /* Schrift AUF dem Akzent */

  /* Die drei Bedeutungsfarben */
  --gut-feld:#15241f;   --gut-rand:#2c5a4a;
  --warn-feld:#2c2413;  --warn-rand:#6a5622;  --warn-text:#f0c86a;
  --bad-feld:#481d27;   --bad-rand:#80303f;   --bad-text:#ffd7dc;
  --danger:#ff7785;

  /* Rundungen. Größere Flächen runden stärker — sonst wirkt eine große Karte
     wie ein Kasten mit abgeknabberten Ecken. */
  --rund-klein:10px; --rund:12px; --rund-gross:18px; --rund-voll:999px;

  color:var(--text);background:var(--grund);
}

/* --app-height folgt dem tatsächlich sichtbaren Bereich (siehe viewport.js)
   und berücksichtigt Browserleisten und die Bildschirmtastatur. dvh ist der
   erste Rückfall, 100vh der zweite für ältere Browser. */
:root{--app-height:100vh;--safe-t:env(safe-area-inset-top,0px);--safe-b:env(safe-area-inset-bottom,0px);
      --safe-l:env(safe-area-inset-left,0px);--safe-r:env(safe-area-inset-right,0px)}
@supports (height:100dvh){:root{--app-height:100dvh}}

*{box-sizing:border-box}
body{margin:0;min-height:var(--app-height);overscroll-behavior:none;
     background:radial-gradient(circle at 30% -10%,#182534 0,var(--grund) 38%);
     -webkit-tap-highlight-color:transparent}
button,input,select,textarea{font:inherit}
button{cursor:pointer;border:0;background:none;color:inherit}

/* --- Anmeldemaske -------------------------------------------------------- */
/* Zweigeteilt: links die Aussage, rechts das Formular. Auf schmalen
   Bildschirmen bleibt nur das Formular. */

.auth{min-height:var(--app-height);display:grid;grid-template-columns:1.1fr .9fr}
.story{display:flex;flex-direction:column;justify-content:center;padding:8vw;background:linear-gradient(125deg,#0d151b,#101e26 55%,#0d131c)}
.story h1{font-size:clamp(3rem,6vw,6rem);line-height:.95;letter-spacing:-.06em;margin:12vh 0 24px}
.story p,.muted{color:var(--muted);line-height:1.7}
.authbox{display:grid;place-items:center;padding:30px}
.authbox form{width:min(420px,100%);padding:34px}
.brand{display:flex;align-items:center;gap:10px;font-weight:var(--fett)}
.logo{display:grid;place-items:center;width:38px;height:38px;border-radius:var(--rund);
  color:var(--auf-akzent);background:var(--accent);font-weight:var(--fett)}
.security{font-size:12px;color:var(--accent)}

/* --- Flächen und Formularteile ------------------------------------------ */

/* Auch die Karte kommt ohne Verlauf aus. Eine Fläche, ein Rand, ein Schatten —
   was darauf steht, soll wirken, nicht der Untergrund. */
.card{background:#111a24ed;border:1px solid var(--line);border-radius:var(--rund-gross);
  box-shadow:0 18px 50px #0006}
label{display:grid;gap:7px;margin:15px 0;color:#c9d0dc;font-size:13px;font-weight:700}
/* `hidden` muss `display` schlagen. Ohne diese Zeile bleibt ein
   `<label hidden>` sichtbar, weil die Regel darueber staerker ist als die
   des Browsers — und dann steht ein Feld da, das niemand ausfuellen soll. */
[hidden]{display:none !important}
/* 16px verhindert, dass iOS beim Antippen in das Feld hineinzoomt.
   Ankreuz- und Auswahlfelder sind ausgenommen: Sie auf volle Breite zu ziehen
   und mit Innenabstand zu versehen macht aus einem Kästchen einen Balken. */
input:not([type=checkbox]):not([type=radio]),select,textarea{width:100%;padding:13px 14px;font-size:16px;color:#f3f6fb;background:var(--feld);border:1px solid var(--feld-rand);border-radius:10px;outline:0}
input[type=checkbox],input[type=radio]{width:auto;flex:none;margin:0;accent-color:var(--accent)}
input:focus,textarea:focus,select:focus{border-color:#30b990;box-shadow:0 0 0 3px #48d5aa18}
.error{padding:10px;color:var(--bad-text);background:var(--bad-feld);border:1px solid var(--bad-rand);border-radius:9px}

/* --- Schaltflächen ------------------------------------------------------- */

/* Knöpfe: eine Form, eine Höhe, kein Verlauf. Ein Farbverlauf auf einer
   Schaltfläche sagt nichts aus, er kostet nur Aufmerksamkeit — und auf einer
   Seite, die sich Schlichtheit auf die Fahne schreibt, sagt er das Falsche.
   Der Unterschied zwischen den drei Arten liegt in der Farbe, nicht in der
   Form. */
.primary,.secondary,.danger{padding:11px 16px;border-radius:var(--rund-klein);
  font-size:14px;font-weight:var(--fett);line-height:1.25;cursor:pointer;
  border:1px solid transparent;transition:background .15s,border-color .15s,color .15s}
/* Ein Verweis, der wie eine Schaltfläche aussieht, soll auch so aussehen:
   Der Unterstrich des Browsers macht daraus sonst einen unterstrichenen Knopf. */
a.primary,a.secondary,a.danger{display:inline-block;text-align:center;text-decoration:none}
.primary{color:var(--auf-akzent);background:var(--accent)}
.primary:hover{background:var(--accent-hell)}
.secondary{color:#d8e0ec;background:transparent;border-color:var(--rand)}
.secondary:hover{background:var(--flaeche);border-color:#3f5162}
.danger{color:var(--bad-text);background:transparent;border-color:var(--bad-rand)}
.danger:hover{background:var(--bad-feld)}
.primary:disabled,.secondary:disabled,.danger:disabled{opacity:.45;cursor:default}
.primary:focus-visible,.secondary:focus-visible,.danger:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px}
.wide{width:100%}
.icon{display:grid;place-items:center;width:38px;height:38px;border-radius:10px;background:var(--flaeche);border:1px solid var(--rand);color:#d8e0ec;flex:none}
.icon:hover{background:var(--flaeche-hoch)}
.icon.on{background:var(--gut-feld);border-color:var(--gut-rand);color:var(--accent)}
.icon svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}

/* --- Anordnung ----------------------------------------------------------- */

.hidden{display:none!important}
.row{display:flex;align-items:center;gap:10px}
.row.wrap{flex-wrap:wrap}
.spread{justify-content:space-between}
.grow{flex:1;min-width:0}
.tiny{font-size:12px}
.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stack{display:grid;gap:12px}
.empty{margin:auto;text-align:center;color:var(--muted)}

/* --- Marken und Zeichen -------------------------------------------------- */

.pill{display:inline-flex;align-items:center;gap:6px;padding:3px 9px;border-radius:999px;font-size:11px;font-weight:var(--fett);letter-spacing:.03em;background:var(--flaeche);border:1px solid var(--rand);color:#c2ccda}
.pill.good{background:var(--gut-feld);border-color:var(--gut-rand);color:var(--accent)}
.pill.warn{background:var(--warn-feld);border-color:var(--warn-rand);color:var(--warn-text)}
.pill.bad{background:var(--bad-feld);border-color:var(--bad-rand);color:var(--bad-text)}
.badge{display:inline-grid;place-items:center;min-width:17px;height:17px;padding:0 5px;border-radius:9px;font-size:10px;font-weight:var(--fett);color:var(--auf-akzent);background:var(--accent)}
.avatar{display:grid;place-items:center;width:38px;height:38px;border-radius:var(--rund);
  font-weight:var(--fett);font-size:14px;color:var(--auf-akzent);background:var(--accent);
  flex:none;overflow:hidden}
.avatar img{width:100%;height:100%;object-fit:cover}
.avatar.group{background:#5f8fd8}
.avatar.lg{width:64px;height:64px;border-radius:19px;font-size:24px}

/* --- Listen, Reiter, Suche ----------------------------------------------- */

.searchbar{display:flex;gap:8px}
.searchbar input{padding:10px 12px}
.tabs{display:flex;gap:4px;padding:3px;background:#0d1420;border:1px solid #1d2634;border-radius:11px}
.tabs button{flex:1;padding:7px;border-radius:8px;font-size:12px;font-weight:var(--fett);color:var(--muted)}
.tabs button.active{background:var(--gut-feld);color:var(--accent)}
.tabs button .badge{margin-left:5px}
.listrow{display:flex;align-items:center;gap:12px;padding:11px 0;border-top:1px solid var(--flaeche)}
.listrow:first-child{border-top:0}

/* --- Dateien und Fortschritt --------------------------------------------- */

.file{display:flex;align-items:center;gap:10px;padding:10px;border:1px solid var(--line);border-radius:11px;background:#0e1620}
.file .grow b{display:block;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.progress{height:3px;border-radius:2px;background:#1d2634;overflow:hidden}
.progress i{display:block;height:100%;background:var(--accent);transition:width .2s}

/* --- Auflagen (Dialoge) --------------------------------------------------- */

.sheet{position:fixed;inset:0;display:grid;place-items:center;padding:20px;background:#04070ccc;backdrop-filter:blur(6px);z-index:40}
.sheet .card{width:min(560px,100%);max-height:86dvh;overflow:auto;padding:26px;overscroll-behavior:contain}
.sheet h2,.sheet h3{margin:0 0 4px}
.sheet .section{padding:16px 0;border-top:1px solid var(--line)}
.sheet .section:first-of-type{border-top:0}

/* --- Schalter ------------------------------------------------------------- */

.switch{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:0;font-size:14px}
.switch small{display:block;margin-top:4px;font-weight:400;color:var(--muted);font-size:12px;line-height:1.6}
.toggle{position:relative;width:46px;height:26px;border-radius:999px;background:var(--flaeche-hoch);border:1px solid var(--rand);flex:none;transition:.16s}
.toggle:after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:var(--muted);transition:.16s}
.toggle.on{background:#1c4437;border-color:var(--gut-rand)}
.toggle.on:after{left:23px;background:var(--accent)}

/* --- Code und Hinweise ---------------------------------------------------- */

.codebox{padding:12px;border-radius:10px;background:var(--feld);border:1px solid var(--feld-rand);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;word-break:break-all;line-height:1.7}
.toasts{position:fixed;right:18px;bottom:18px;display:grid;gap:9px;z-index:60}
.toast{padding:12px 15px;border-radius:11px;background:var(--panel2);border:1px solid var(--line);box-shadow:0 14px 40px #0009;font-size:13px;max-width:340px}
.toast.bad{border-color:var(--bad-rand)}
.banner{padding:11px 26px;background:var(--warn-feld);border-bottom:1px solid var(--warn-rand);color:var(--warn-text);font-size:13px}
.banner.bad{background:var(--bad-feld);border-color:var(--bad-rand);color:var(--bad-text)}

/* --- Auf dem Telefon ------------------------------------------------------ */

@media(max-width:760px){
  .auth{grid-template-columns:1fr}
  .story{display:none}
  .authbox{padding:20px;padding-top:calc(20px + var(--safe-t));padding-bottom:calc(20px + var(--safe-b))}
  .authbox form{padding:24px}
  .sheet{padding:0;place-items:stretch}
  .sheet .card{max-height:none;height:100%;border-radius:0;width:100%;
               padding:22px 18px calc(28px + var(--safe-b));
               padding-top:calc(22px + var(--safe-t))}
  .icon{width:42px;height:42px}
  .toasts{right:12px;left:12px;bottom:calc(12px + var(--safe-b))}
  .toast{max-width:none}
}

/* Berührungsbedienung: größere Ziele, kein Doppeltipp-Zoom */
@media(pointer:coarse){
  button,.listrow{touch-action:manipulation}
}

@media(prefers-reduced-motion:reduce){
  *{animation-duration:.01ms!important;transition-duration:.01ms!important}
}

/* --- Rechtsleiste ---------------------------------------------------------
   Impressum und Datenschutz müssen ohne Anmeldung erreichbar sein. Deshalb
   steht diese Zeile in der Anmeldemaske jedes Dienstes, überall gleich. */
.rechtsleiste{margin-top:18px;text-align:center;font-size:11.5px;line-height:2;color:var(--muted)}
.rechtsleiste a{color:var(--muted);text-decoration:underline;text-underline-offset:2px}
.rechtsleiste a:hover{color:var(--accent)}
.authbox .rechtsleiste{margin-top:14px}

/* --- Die Anmeldemaske der Dienste am Zero Konto ---------------------------
   Dieselbe Maske wie bei Chat und Cloud — nur steht rechts kein Formular,
   sondern der Weg zum gemeinsamen Konto. Drei Unterschiede braucht es:

     * Über der Aussage steht eine Zeile mehr (der Kicker), unter ihr die
       Leiste zu den anderen Diensten. Der große Abstand über der Überschrift
       muss deshalb kleiner werden, sonst wird unten abgeschnitten.
     * Der Kasten rechts braucht Luft zwischen Knopf und Kleingedrucktem.
     * Die linke Spalte darf notfalls rollen statt zu verschlucken. */

.auth-konto .story{justify-content:center;gap:0;overflow:auto}
.auth-konto .story .security{margin:6px 0 0}
.auth-konto .story h1{margin:clamp(18px,4vh,44px) 0 20px;font-size:clamp(2.2rem,4.6vw,4.2rem)}
.auth-konto .story > p{margin:0 0 14px;max-width:46ch}
.auth-konto .story .zero-dienste{margin-top:clamp(20px,3vh,32px)}
.auth-konto .authbox .card>*+*{margin-top:14px}
.auth-konto .authbox .card .muted.tiny{margin-top:16px}
.auth-konto .authbox h2{margin:0}


/* --- 4. Anwendungsgerüst --------------------------------------------------
   Navigation links, Blattfenster, Meldungen, Listen und Formularteile — alles,
   was Kalender, Finance, Office und Konverter gleich machen. */

.shell{min-height:100vh;min-height:var(--app-height,100vh);
       display:grid;grid-template-columns:236px 1fr}
.hauptteil{min-width:0;display:grid;grid-template-rows:auto 1fr;align-content:start}
.inhalt{width:min(1240px,100%);margin:0 auto;padding:22px;
        padding-bottom:calc(22px + var(--safe-b))}

/* Die Kopfzeile gibt es nur auf schmalen Bildschirmen - auf dem Rechner steht
   alles, was dort stünde, in der Leiste links. */
.kopf{display:none}
.kopf .luecke{flex:1}

/* --- Navigation links ------------------------------------------------------ */

.seitenleiste{display:flex;flex-direction:column;gap:12px;min-height:0;
              padding:20px 14px;padding-top:calc(20px + var(--safe-t));
              padding-bottom:calc(20px + var(--safe-b));
              background:#0b0f17;border-right:1px solid var(--line);
              position:sticky;top:0;height:100vh;height:var(--app-height,100vh);overflow:auto}
.seitenleiste .marke{display:flex;align-items:center;gap:9px;font-weight:var(--fett);font-size:15px;
                     padding:0 6px 6px;color:#e7edf5}
.seitenleiste .marke .logo{width:30px;height:30px;flex:none}
.suchzeile input{width:100%}
.navliste{display:flex;flex-direction:column;gap:2px;margin-top:4px}
.navknopf{display:flex;align-items:center;gap:11px;width:100%;padding:10px 12px;
          border-radius:10px;font-size:13.5px;font-weight:600;text-align:left;
          color:var(--muted);background:transparent;border:1px solid transparent}
.navknopf:hover{background:#131c28;color:#dce5ef}
.navknopf[aria-pressed=true]{color:var(--auf-akzent);background:var(--accent);border-color:var(--accent)}
.navzeichen{width:20px;flex:none;text-align:center;font-size:15px;line-height:1}
.nurschmal{display:none}

/* --- Zeitleiste der Ansicht ----------------------------------------------- */

.zeitleiste{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.zeitleiste h2{margin:0;font-size:19px;min-width:210px}
.zeitleiste .pfeile{display:flex;gap:4px}
.zeitleiste .pfeile button{width:36px;height:36px;display:grid;place-items:center;
                           border-radius:9px;font-size:16px}

/* --- Listen und Zeilen ---------------------------------------------------- */

.liste{display:grid;gap:8px}
.zeile{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;
       border:1px solid var(--line);border-radius:12px;background:var(--panel)}
.zeile.erledigt{opacity:.55}
.zeile.erledigt .titel{text-decoration:line-through}
.zeile .titel{font-size:14px;font-weight:600}
.zeile .grow{flex:1;min-width:0}
.zeile small{display:block;color:var(--muted);font-size:11.5px;margin-top:3px}
.haken{flex:none;width:22px;height:22px;border-radius:7px;border:1.5px solid #35455c;
       background:transparent;display:grid;place-items:center;cursor:pointer;padding:0;
       font-size:13px;line-height:1;color:var(--auf-akzent)}
.haken[aria-pressed=true]{background:var(--accent);border-color:var(--accent)}
.wichtig-1{border-left:3px solid var(--signal,var(--danger))}
.wichtig-2{border-left:3px solid #ffb454}
.wichtig-3{border-left:3px solid #35455c}
.balken{height:6px;border-radius:3px;background:#1d2634;overflow:hidden;margin-top:8px}
.balken i{display:block;height:100%;background:var(--accent)}
.perlen{display:flex;gap:3px;flex-wrap:wrap;margin-top:8px}
.perle{width:13px;height:13px;border-radius:4px;background:#1d2634}
.perle.an{background:var(--accent)}
.perle.heute{box-shadow:0 0 0 1.5px var(--accent)}
.straehne{font-variant-numeric:tabular-nums;font-weight:var(--fett);color:var(--accent)}

/* --- Formulare ------------------------------------------------------------ */

.feldpaar{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.knopfzeile{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;margin-top:16px}
.knopfzeile .links{margin-right:auto}
.tagwahl{display:flex;gap:5px;flex-wrap:wrap}
.tagwahl button{width:40px;height:36px;border-radius:9px;font-size:12px;font-weight:700;
                color:var(--muted);background:#0e1620;border:1px solid var(--line)}
.tagwahl button[aria-pressed=true]{color:var(--auf-akzent);background:var(--accent);border-color:var(--accent)}
.teilzeile{display:flex;align-items:center;gap:8px;margin-top:6px}
.teilzeile input[type=text]{flex:1}
.danger-knopf{padding:11px 16px;border-radius:10px;font-size:14px;font-weight:700;
              color:var(--bad-text);background:var(--bad-feld);border:1px solid var(--bad-rand);cursor:pointer}

/* --- Fenster -------------------------------------------------------------- */

.blatt-grund{position:fixed;inset:0;z-index:80;display:grid;place-items:center;padding:18px;
             background:#050810cc;backdrop-filter:blur(4px);overflow:auto}
.blatt-karte{width:min(620px,100%);max-height:88dvh;overflow:auto;padding:22px;
             background:var(--panel);border:1px solid var(--line);border-radius:16px;
             box-shadow:0 24px 70px #000a}
.blatt-kopf{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.blatt-kopf h2{margin:0;font-size:18px}
.mini{width:32px;height:32px;border-radius:9px;font-size:18px;line-height:1;
      color:var(--muted);background:transparent;border:1px solid var(--line)}
.blatt-rumpf{display:grid;gap:12px}

/* --- Meldung -------------------------------------------------------------- */

.meldung{position:fixed;left:50%;bottom:calc(20px + var(--safe-b));transform:translateX(-50%) translateY(14px);
         z-index:90;max-width:min(520px,92vw);padding:11px 16px;border-radius:11px;font-size:13px;
         color:#dce5ef;background:#141d2b;border:1px solid var(--line);box-shadow:0 12px 40px #0009;
         opacity:0;pointer-events:none;transition:opacity .18s,transform .18s}
.meldung[data-an="1"]{opacity:1;transform:translateX(-50%) translateY(0)}
.meldung[data-art=fehler]{border-color:var(--bad-rand);color:var(--bad-text)}
.meldung[data-art=warnung]{border-color:#4a3a12;color:#ffd8a8}

/* --- Auf dem Telefon ------------------------------------------------------ */

@media(max-width:900px){
  /* Auf dem Telefon wandert die Navigation an den unteren Rand: dorthin
     reicht der Daumen, und die Beschriftung weicht dem Zeichen. */
  .shell{grid-template-columns:1fr;grid-template-rows:1fr}
  .seitenleiste{position:fixed;left:0;right:0;bottom:0;top:auto;height:auto;
                flex-direction:row;gap:0;padding:6px 4px;
                padding-bottom:calc(6px + var(--safe-b));
                border-right:0;border-top:1px solid var(--line);z-index:40;
                background:#0b0f17f2;overflow:visible}
  .seitenleiste .marke,.seitenleiste>.primary,.suchzeile{display:none}
  .navliste{flex-direction:row;gap:0;margin:0;width:100%;overflow-x:auto;
            scrollbar-width:none}
  .navliste::-webkit-scrollbar{display:none}
  .navknopf{flex-direction:column;gap:3px;min-width:62px;padding:6px 4px;
            border-radius:9px;font-size:9.5px;font-weight:700;text-align:center}
  .navknopf[aria-pressed=true]{background:var(--gut-feld);color:var(--accent);border-color:transparent}
  .navzeichen{width:auto;font-size:17px}
  .navname{white-space:nowrap}
  .kopf{display:flex;align-items:center;gap:10px;
        padding:10px 12px;padding-top:calc(10px + var(--safe-t));
        border-bottom:1px solid var(--line);background:#0b0f17;position:sticky;top:0;z-index:30}
  .nurschmal{display:inline-flex}
  .hauptteil{padding-bottom:78px}
  .inhalt{padding:12px}
  .zeitleiste h2{font-size:16px;min-width:0}
  .feldpaar{grid-template-columns:1fr}
  .blatt-grund{padding:0;place-items:end stretch}
  .blatt-karte{width:100%;max-height:92dvh;border-radius:18px 18px 0 0;
               padding-bottom:calc(22px + var(--safe-b))}
}
@media(pointer:coarse){
  .kopf{background:#0b0f17}
  .blatt-grund{backdrop-filter:none;background:#050810f2}
  .reiter button{padding:10px 15px}
  .haken{width:26px;height:26px}
}

/* --- 5. Der Dienstumschalter ----------------------------------------------
   Von hier kommt man in jeden anderen Zero-Dienst. Gebaut von
   shared/js/dienste.js, gestaltet hier — damit er überall gleich aussieht,
   ohne dass ein Dienst dafür etwas ergänzen muss.

   Zwei Formen: als Raster für die Seitenleiste (dort ist Platz knapp, also
   Zeichen statt Namen) und als Zeile für eine Kopfzeile. Kein Aufklappmenü:
   Was man sieht, klickt man schneller als was man erst öffnen muss. */

.zero-dienste{display:grid;gap:8px}
.zero-dienste-titel{margin:0;font-size:10.5px;font-weight:var(--fett);letter-spacing:.09em;
  text-transform:uppercase;color:var(--muted);padding:0 6px}

.zero-dienstleiste{display:flex;gap:6px}
.zero-dienste-gitter .zero-dienstleiste{display:grid;grid-template-columns:repeat(3,1fr)}
.zero-dienste-leiste .zero-dienstleiste{flex-wrap:wrap;align-items:center}

.zero-dienstknopf{display:flex;align-items:center;justify-content:center;gap:7px;
  padding:9px 6px;border-radius:var(--rund-klein);text-decoration:none;
  font-size:12.5px;font-weight:700;color:#c2ccda;
  background:var(--flaeche);border:1px solid var(--rand);
  transition:background .16s,border-color .16s,color .16s}
.zero-dienstknopf svg{width:17px;height:17px;flex:none;
  fill:none;stroke:var(--accent);stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.zero-dienstknopf:hover,.zero-dienstknopf:focus-visible{
  background:var(--flaeche-hoch);border-color:var(--accent);color:var(--text);outline:0}

/* Im Raster tragen die Zeichen allein — der Name steht im Titel und wird
   vorgelesen. Sieben Namen in einer 236 Punkte breiten Leiste wären
   sieben abgeschnittene Wörter. */
.zero-dienste-gitter .zero-dienstknopf span{display:none}
.zero-dienste-leiste .zero-dienstknopf{padding:7px 11px}

.zero-kontoknopf{display:block;padding:9px;border-radius:var(--rund-klein);
  text-align:center;text-decoration:none;font-size:12.5px;font-weight:var(--fett);
  color:var(--auf-akzent);background:var(--accent)}
.zero-kontoknopf:hover,.zero-kontoknopf:focus-visible{background:var(--accent-hell);outline:0}

@media(max-width:900px){
  .zero-dienste-leiste .zero-dienstknopf span{display:none}
  .zero-dienste-leiste .zero-dienstknopf{padding:8px}
}

/* --- 6. Die Dienstnabe -----------------------------------------------------
   Die Sieben um eine Mitte — dieselbe Zeichnung wie auf paulbartsch.de, nur
   trägt jede Kachel hier zusätzlich ihren Stand: offen, beantragt, gesperrt.

   Warum eine Zeichnung und keine Kachelliste: Eine Liste sagt „hier sind
   sieben Dinge". Die Nabe sagt „hier ist ein Konto, und daran hängen sieben
   Dinge" — und genau das ist die Aussage dieses Dienstes.

   Gerechnet wird in Prozent auf einer Fläche mit festem Seitenverhältnis.
   `container-type: inline-size` erlaubt Schriftgrößen in `cqw`: Sie wachsen
   mit der Nabe statt mit dem Fenster. */

.nabe{container-type:inline-size;position:relative;aspect-ratio:1717/916;width:100%;
      border-radius:20px;overflow:hidden;border:1px solid var(--line);
      background:radial-gradient(58% 62% at 50% 48%,#10362e 0%,#0b1a20 42%,transparent 72%),
                 linear-gradient(150deg,#080d14,#0a121a 55%,#070b11)}
.nabe::before{content:"";position:absolute;inset:0;pointer-events:none;
  background-image:linear-gradient(#ffffff08 1px,transparent 1px),
                   linear-gradient(90deg,#ffffff08 1px,transparent 1px);
  background-size:3.2cqw 3.2cqw;
  mask-image:radial-gradient(70% 70% at 50% 50%,#000 30%,transparent 100%)}

.nabe-kachel,.nabe-mitte{position:absolute;display:flex;align-items:center;gap:1.2cqw;
  padding:1.2cqw 1.5cqw;border-radius:1.4cqw;text-decoration:none;
  border:1px solid #1e2c33;background:#0c141bd9;color:var(--text);
  transition:border-color .25s,background .25s,box-shadow .25s}
.nabe-kachel svg{flex:none;width:3.6cqw;height:3.6cqw;fill:none;stroke:var(--accent);
  stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.nabe-kachel>div{min-width:0;display:grid;gap:.2cqw}
.nabe-kachel b{font-size:1.75cqw;font-weight:var(--fett);letter-spacing:-.015em;white-space:nowrap}
.nabe-stand{font-size:1.1cqw;font-weight:700;letter-spacing:.02em}
.nabe-frei .nabe-stand{color:var(--accent)}
.nabe-beantragt .nabe-stand{color:var(--warn-text)}
.nabe-gesperrt .nabe-stand{color:var(--muted)}

a.nabe-kachel:hover,a.nabe-kachel:focus-visible{border-color:var(--accent);
  background:#10241fd9;box-shadow:0 0 0 1px #31bd9333,0 8px 30px #31bd9326;outline:0}
.nabe-gesperrt{border-style:dashed;border-color:#2b3a44}
.nabe-freischalten{margin-top:.4cqw;align-self:flex-start;padding:.5cqw 1cqw;
  border-radius:99px;font-size:1.05cqw;font-weight:var(--fett);cursor:pointer;
  color:var(--auf-akzent);background:var(--accent);border:0}
.nabe-freischalten:disabled{opacity:.5;cursor:default}

.nabe-mitte{flex-direction:column;justify-content:center;gap:.5cqw;
  left:38.6%;top:30.3%;width:22.8%;height:36.5%;text-align:center;
  border-color:#2f7f68;background:#0a1218f2;
  box-shadow:0 0 0 1px #31bd9320,0 0 6cqw #31bd9322}
.nabe-mitte svg{width:5.6cqw;height:5.6cqw;fill:none;stroke:var(--accent);stroke-width:2.2;
  stroke-linecap:round;stroke-linejoin:round}
.nabe-mitte b{font-size:2.4cqw;letter-spacing:-.03em;white-space:nowrap}
.nabe-mitte small{font-size:1.25cqw;color:var(--muted);line-height:1.35;
  max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Die sieben Plätze — dieselben wie auf der Startseite. */
.nabe-chat     {left:11.5%;top:8.5%; width:25.5%;height:19.5%}
.nabe-cloud    {left:63.0%;top:8.5%; width:25.5%;height:19.5%}
.nabe-map      {left:6.5%; top:37.0%;width:26.0%;height:19.5%}
.nabe-konverter{left:67.5%;top:37.0%;width:26.0%;height:19.5%}
.nabe-finance  {left:11.5%;top:65.5%;width:25.5%;height:19.5%}
.nabe-kalender {left:63.0%;top:65.5%;width:25.5%;height:19.5%}
.nabe-office   {left:37.0%;top:74.0%;width:26.0%;height:19.5%}

/* Die Leitungen: Kästen mit zwei Rändern und einer runden Ecke. Kein SVG —
   so wandern sie von selbst mit, wenn die Nabe schmaler wird. */
.nabe-leitung{position:absolute;pointer-events:none;border:0 solid #5f817c;
  transition:border-color .25s,box-shadow .25s}
.nabe-l-chat     {left:36.5%;top:18.2%;width:13.5%;height:12.1%;
                  border-top-width:2px;border-right-width:2px;border-top-right-radius:1.2cqw}
.nabe-l-cloud    {left:50.0%;top:18.2%;width:13.5%;height:12.1%;
                  border-top-width:2px;border-left-width:2px;border-top-left-radius:1.2cqw}
.nabe-l-map      {left:32.5%;top:46.7%;width:6.1%;height:0;border-top-width:2px}
.nabe-l-konverter{left:61.4%;top:46.7%;width:6.1%;height:0;border-top-width:2px}
.nabe-l-finance  {left:36.5%;top:66.8%;width:13.5%;height:8.5%;
                  border-bottom-width:2px;border-right-width:2px;border-bottom-right-radius:1.2cqw}
.nabe-l-kalender {left:50.0%;top:66.8%;width:13.5%;height:8.5%;
                  border-bottom-width:2px;border-left-width:2px;border-bottom-left-radius:1.2cqw}
.nabe-l-office   {left:49.9%;top:66.8%;width:0;height:7.2%;border-left-width:2px}

.nabe-kachel:hover+.nabe-leitung,.nabe-kachel:focus-visible+.nabe-leitung{
  border-color:var(--accent-hell);box-shadow:0 0 2.4cqw #31bd9366}

/* Unter 760 Punkten wird aus der Nabe eine Liste: Sieben Kacheln auf 400
   Punkten wären Briefmarken, und die Leitungen dazwischen ein Gekrakel. */
@media(max-width:760px){
  .nabe{aspect-ratio:auto;container-type:normal;display:grid;gap:10px;padding:14px}
  .nabe-leitung{display:none}
  .nabe-kachel,.nabe-mitte{position:static;width:auto;height:auto;
    padding:13px 15px;border-radius:12px;gap:12px}
  .nabe-mitte{order:-1;flex-direction:row;flex-wrap:wrap;text-align:left;row-gap:2px}
  .nabe-mitte svg{width:28px;height:28px;flex:none}
  .nabe-mitte b{font-size:17px}
  .nabe-mitte small{flex-basis:100%;font-size:12.5px;padding-left:40px;max-width:none}
  .nabe-kachel svg{width:24px;height:24px}
  .nabe-kachel b{font-size:14.5px;white-space:normal}
  .nabe-stand{font-size:11.5px}
  .nabe-freischalten{font-size:11.5px;padding:5px 11px}
}
