/* O.R.C.A – Oberfläche · v2 */
@font-face{font-family:"JetBrains Mono";src:url(/static/JetBrainsMono-Regular.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url(/static/JetBrainsMono-Medium.woff2) format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url(/static/JetBrainsMono-Bold.woff2) format("woff2");font-weight:700;font-display:swap}
@font-face{font-family:"Space Grotesk";src:url(/static/SpaceGrotesk.woff2) format("woff2");font-weight:300 700;font-display:swap}

:root{
  --bg:#07090c; --bg-2:#0b0f14; --panel:rgba(16,19,24,.78); --panel-solid:#11141a; --raise:#161a21;
  --line:rgba(255,255,255,.07); --line-2:rgba(255,255,255,.12); --line-3:rgba(255,255,255,.2);
  --ink:#eef1ec; --ink-2:#c5cbc4; --muted:#8b939b; --dim:#5d656e;
  --lime:#c6ff3d; --lime-2:#a5e02a; --lime-ink:#0f1407; --lime-a:rgba(198,255,61,.14); --glow:rgba(198,255,61,.35);
  --sea:#3fd6c2; --sea-a:rgba(63,214,194,.12);
  --amber:#ffb22e; --amber-a:rgba(255,178,46,.14); --red:#ff4545; --red-a:rgba(255,69,69,.14);
  --mono:"JetBrains Mono","Cascadia Mono",Consolas,ui-monospace,monospace;
  --sans:"Aptos","Aptos Display","Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
  --r:2px; --pad:18px;
  color-scheme:dark;
}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{background:var(--bg);color:var(--ink);font:14px/1.5 var(--sans);-webkit-font-smoothing:antialiased;overflow:hidden}
button,input{font:inherit}
[hidden]{display:none!important}
::selection{background:var(--lime);color:var(--lime-ink)}
a{color:inherit}

/* ---------- Hintergrund ---------- */
.stage{position:fixed;inset:0;overflow:hidden;z-index:0;
  background:radial-gradient(1200px 700px at 70% 30%,rgba(63,214,194,.07),transparent 60%),
             radial-gradient(900px 600px at 15% 90%,rgba(198,255,61,.05),transparent 60%),
             linear-gradient(180deg,var(--bg-2),var(--bg))}
.stage .grid{position:absolute;inset:0;opacity:.5;
  background-image:linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);
  background-size:56px 56px;mask-image:radial-gradient(ellipse at 60% 45%,#000 30%,transparent 80%)}
.hero-img{position:absolute;inset:0;background-position:center;background-size:cover;opacity:.0;transition:opacity 1.2s ease}
.hero-img.on{opacity:.22}
/* ASCII-Orca in drei Ebenen: Umriss (Akzent), Schraffur (sehr dezent), weiße Flecken/Blasen (kaum sichtbar) */
.orca-layer{position:absolute;left:0;top:0;margin:0;font:10px/1.15 var(--mono);white-space:pre;letter-spacing:0;pointer-events:none;contain:strict;width:100%;height:100%;text-rendering:optimizeSpeed}
.orca-layer.ink,.orca-layer.light{will-change:transform}
.orca-layer.ink{color:#c4ec74;opacity:.4}
.orca-layer.fill{color:#8fb84a;opacity:.16}
.orca-layer.light{color:#e9efe3;opacity:.2}
/* Messzeile für die Zeichengröße: muss sich nach dem Text richten, nicht nach der Bühne */
.orca-layer.probe{visibility:hidden;width:auto;height:auto;contain:none}
.stage.video .orca-layer.ink{opacity:.45}
.stage.video .orca-layer.light{opacity:.5}
.page-dash .orca-layer.ink{opacity:.13;text-shadow:none}
.page-dash .orca-layer.fill{opacity:.05}
.page-dash .orca-layer.light,.page-dash .stage.video .orca-layer.light{opacity:.07}
.scan{position:absolute;left:0;right:0;top:0;height:180px;pointer-events:none;
  background:linear-gradient(to bottom,transparent,rgba(198,255,61,.035),transparent);animation:scan 9s linear infinite}
@keyframes scan{from{transform:translateY(-180px)}to{transform:translateY(100vh)}}
.vignette{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 45%,transparent 40%,rgba(0,0,0,.7))}
video.src{position:absolute;width:2px;height:2px;opacity:0;pointer-events:none;left:-10px;top:-10px}

/* ---------- HUD-Ecken ---------- */
.hud{position:relative}
.hud::before,.hud::after{content:"";position:absolute;width:12px;height:12px;pointer-events:none;border:1px solid var(--line-3)}
.hud::before{left:-1px;top:-1px;border-right:0;border-bottom:0}
.hud::after{right:-1px;bottom:-1px;border-left:0;border-top:0}
.hud.lit::before,.hud.lit::after{border-color:var(--lime)}

/* ---------- Bausteine ---------- */
/* Logo wie im Video: weiße, breite Pixel-Buchstaben im dunklen, abgerundeten Chip */
.logo{display:inline-flex;align-items:center;line-height:0;color:#f4f5f0;padding:7px 10px;border-radius:5px;
  background:linear-gradient(180deg,#1c1f24,#111316);border:1px solid rgba(198,255,61,.28);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.07),0 0 0 1px rgba(0,0,0,.55),0 0 26px -8px rgba(198,255,61,.45)}
.logo svg{display:block;filter:drop-shadow(0 0 4px rgba(255,255,255,.28))}
.logo.big{padding:13px 17px;border-radius:7px}
/* Sperrsatz (letter-spacing) hängt rechts Leerraum an – links gleich viel zugeben, damit Text mittig sitzt */
.tag{display:inline-flex;align-items:center;justify-content:center;height:24px;white-space:nowrap;
  font:500 10px/1 var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--lime);
  border:1px solid rgba(198,255,61,.4);padding:0 8px 0 calc(8px + .18em);background:rgba(198,255,61,.06);border-radius:3px}
.logo.big + .tag{height:28px}
.k{font:500 10px/1.3 var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--dim)}
.chip{display:inline-flex;align-items:center;gap:6px;font:500 10px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  padding:5px calc(8px - .14em) 5px 8px;border:1px solid var(--line-2);color:var(--muted);white-space:nowrap;border-radius:3px}
.chip::before{content:"";width:6px;height:6px;background:currentColor;flex:none}
.chip.on{color:var(--lime);border-color:rgba(198,255,61,.35);background:var(--lime-a)}
.chip.warn{color:var(--amber);border-color:rgba(255,178,46,.4);background:var(--amber-a)}
.chip.crit,.chip.off{color:var(--red);border-color:rgba(255,69,69,.4);background:var(--red-a)}
.chip.unk{color:#b48cff;border-color:rgba(180,140,255,.4)}
.chip.on::before{box-shadow:0 0 8px var(--lime)}
.chip.crit::before,.chip.off::before{animation:pulse 1.2s ease-in-out infinite}
@keyframes pulse{50%{opacity:.25}}
.btn{border:1px solid var(--line-2);background:transparent;color:var(--ink-2);font:600 13px var(--sans);letter-spacing:.01em;
  text-transform:none;padding:8px 14px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r);transition:border-color .15s,color .15s,background .15s}
.btn:hover,.btn:focus-visible{border-color:var(--lime);color:var(--lime);outline:none;background:var(--lime-a)}

/* ---------- Laufband ---------- */
.ticker{position:fixed;left:0;right:0;bottom:0;z-index:5;overflow:hidden;white-space:nowrap;height:34px;
  border-top:1px solid rgba(255,69,69,.35);background:linear-gradient(90deg,rgba(255,69,69,.12),rgba(255,69,69,.05));}
.ticker-track{display:inline-flex;gap:64px;align-items:center;height:100%;animation:marquee 28s linear infinite;
  color:var(--red);font:600 13px var(--mono);letter-spacing:.16em}
.ticker.ok{border-top-color:rgba(198,255,61,.2);background:rgba(10,13,17,.7)}
.ticker.ok .ticker-track{color:var(--lime);font-weight:500;font-size:11px;letter-spacing:.24em;animation-duration:60s}
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* ================= Login ================= */
.page-login{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(380px,.75fr);height:100%}
.login-art{position:relative;z-index:1;display:flex;flex-direction:column;justify-content:space-between;padding:36px 44px;min-width:0}
.login-art .top{display:flex;align-items:center;gap:14px}
.login-art .claim{max-width:640px}
/* Überschrift: vier Zeilen, die Anfangsbuchstaben ergeben senkrecht O·R·C·A */
.login-art h1{font:600 clamp(38px,5vw,78px)/.98 var(--sans);letter-spacing:-.02em;margin:0 0 18px;filter:drop-shadow(0 2px 18px rgba(0,0,0,.85));
  background:linear-gradient(180deg,#fff 0%,#cfd6cc 70%,#8d968c 100%);-webkit-background-clip:text;background-clip:text;color:transparent}
.login-art h1 span{display:block;white-space:nowrap}
.login-art h1 i{font-style:normal;color:var(--lime);-webkit-text-fill-color:var(--lime);text-shadow:0 0 28px rgba(198,255,61,.35)}
.login-art p.sub{margin:0;color:var(--muted);font:400 15.5px/1.6 var(--sans);max-width:540px}
.login-art .meta-row{display:flex;gap:28px;flex-wrap:wrap}
.login-art .meta-row div{display:flex;flex-direction:column;gap:4px}
.login-art .meta-row b{font:500 12px var(--mono);color:var(--ink-2);letter-spacing:.06em}
/* Anmeldung: kein Kasten – offene Spalte mit weichem dunklem Schein, Felder als Linien */
.login-side{position:relative;z-index:2;display:flex;align-items:center;justify-content:center;padding:40px 48px;background:transparent}
.login-side::before{content:"";position:absolute;inset:-10% -20% -10% 0;pointer-events:none;
  background:radial-gradient(closest-side at 50% 50%,rgba(7,9,12,.82),rgba(7,9,12,.55) 55%,transparent)}
.card{position:relative;width:100%;max-width:360px;display:flex;flex-direction:column;gap:14px}
.card .eyebrow{display:inline-flex;align-items:center;gap:8px;font:500 10px var(--mono);letter-spacing:.22em;text-transform:uppercase;color:var(--lime)}
.card .eyebrow i{width:18px;height:1px;background:var(--lime);box-shadow:0 0 8px var(--lime)}
.card h2{margin:0;font:600 40px/1 var(--sans);letter-spacing:-.015em}
.card .lead{margin:0 0 10px;color:var(--muted);font-size:12.5px}
#login{display:flex;flex-direction:column;gap:22px}
.field{display:flex;flex-direction:column;gap:4px;position:relative}
.field span{font:500 10px var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--dim);transition:color .2s}
.field:focus-within span{color:var(--lime)}
.field input{color:var(--ink);background:transparent;border:0;border-bottom:1px solid var(--line-3);border-radius:0;
  padding:10px 0 11px;font:400 17px var(--sans);letter-spacing:.01em;outline:none;caret-color:var(--lime);transition:border-color .25s}
.field input::placeholder{color:#3d444c}
.field::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--lime);box-shadow:0 0 12px var(--lime);
  transform:scaleX(0);transform-origin:left;transition:transform .35s cubic-bezier(.2,.7,.2,1)}
.field:focus-within::after{transform:scaleX(1)}
.cta{position:relative;overflow:hidden;border:0;border-radius:999px;cursor:pointer;background:var(--lime);color:var(--lime-ink);
  display:flex;align-items:center;justify-content:center;gap:12px;
  font:700 12px var(--mono);letter-spacing:.24em;padding:15px 24px 15px calc(24px + .24em);margin-top:6px;
  box-shadow:0 12px 36px -12px var(--glow);transition:transform .15s,filter .2s,box-shadow .2s}
.cta b{font-weight:700;letter-spacing:0;transition:transform .25s}
.cta:hover b{transform:translateX(4px)}
.cta::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.45) 50%,transparent 70%);
  transform:translateX(-120%);transition:transform .7s}
.cta:hover::after{transform:translateX(120%)}
.cta:hover{filter:brightness(1.05)} .cta:active{transform:translateY(1px)}
.cta:focus-visible{outline:2px solid #fff;outline-offset:3px}
.cta:disabled{background:#2a2f36;color:var(--muted);box-shadow:none;cursor:wait}
.steps{display:flex;flex-direction:column;gap:6px}
.step{display:flex;justify-content:space-between;align-items:center;border:1px solid var(--line);padding:8px 12px;
  font-size:11px;letter-spacing:.14em;color:var(--muted);background:rgba(0,0,0,.25)}
.step b{color:var(--dim)} .step.done{color:var(--ink)} .step.done b{color:var(--lime)}
.step.run b{color:var(--lime);animation:pulse .6s steps(2) infinite}
.scramble{font:600 22px/1.05 var(--mono);color:var(--ink-2);white-space:pre;text-align:right;opacity:.55}
.page-login .ticker{position:absolute}
.page-login.denied .card{animation:shake .32s}
@keyframes shake{25%{transform:translateX(-6px)}50%{transform:translateX(5px)}75%{transform:translateX(-3px)}}

/* ================= Statusseite (Vollbild: Dienste · Hosts · Meldungen, Detail-Schublade) ================= */
.page-dash{display:flex;flex-direction:column;height:100%}
.topbar{position:relative;z-index:6;display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;align-items:center;gap:22px;padding:11px 22px;
  border-bottom:1px solid var(--line);background:rgba(8,10,13,.9)}
.topbar .brand{display:flex;align-items:center;gap:12px}
.topbar .right{display:flex;align-items:center;gap:18px;font-size:11px;letter-spacing:.1em;color:var(--muted)}
.topbar .who b{color:var(--ink);font-weight:500;margin-left:6px}
.topbar .clock{font-variant-numeric:tabular-nums}
.topbar .live{display:inline-flex;align-items:center;gap:7px;color:var(--lime);font-variant-numeric:tabular-nums}
.topbar .live::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--lime);box-shadow:0 0 8px var(--lime);animation:pulse 1.8s ease-in-out infinite}

/* Gesamtstatus kompakt in der Kopfzeile */
.overall{justify-self:center;display:flex;align-items:center;gap:12px;min-width:0;max-width:100%;padding:7px 16px 7px 12px;border-radius:999px;
  border:1px solid var(--line-2);background:rgba(16,19,24,.55);transition:border-color .6s ease,background .6s ease}
.overall b{font:600 14px var(--sans);white-space:nowrap;transition:color .6s ease}
.overall span:not(.beacon){font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.beacon{position:relative;flex:none;width:10px;height:10px;border-radius:50%;background:var(--dim);transition:background .6s ease}
.beacon::after{content:"";position:absolute;inset:-6px;border-radius:50%;border:1px solid currentColor;color:var(--dim);opacity:0;animation:ring 2.4s ease-out infinite}
@keyframes ring{0%{transform:scale(.5);opacity:.7}100%{transform:scale(1.6);opacity:0}}
.overall.ok{border-color:rgba(198,255,61,.32);background:rgba(198,255,61,.05)} .overall.ok b{color:var(--lime)}
.overall.ok .beacon{background:var(--lime);box-shadow:0 0 12px var(--lime)} .overall.ok .beacon::after{color:var(--lime)}
.overall.warn{border-color:rgba(255,178,46,.4);background:rgba(255,178,46,.06)} .overall.warn b{color:var(--amber)}
.overall.warn .beacon{background:var(--amber);box-shadow:0 0 12px var(--amber)} .overall.warn .beacon::after{color:var(--amber)}
.overall.bad{border-color:rgba(255,69,69,.45);background:rgba(255,69,69,.07)} .overall.bad b{color:var(--red)}
.overall.bad .beacon{background:var(--red);box-shadow:0 0 12px var(--red)} .overall.bad .beacon::after{color:var(--red)}

/* drei Spalten, füllen den Bildschirm; jede Spalte scrollt für sich */
.board{position:relative;z-index:2;flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr) minmax(0,1fr);
  gap:14px;padding:14px;transition:padding-right .35s cubic-bezier(.2,.7,.2,1)}
body.has-drawer .board{padding-right:calc(min(480px,92vw) + 14px)}
.col{display:flex;flex-direction:column;min-height:0;border:1px solid var(--line);background:rgba(11,14,18,.86);
  animation:rise .55s cubic-bezier(.2,.7,.2,1) both}
.col:nth-child(2){animation-delay:.05s} .col:nth-child(3){animation-delay:.1s}
@keyframes rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.col-h{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 16px;border-bottom:1px solid var(--line)}
.col-h h2{margin:0;font:500 14px var(--sans);letter-spacing:.03em}
.col-body{flex:1;min-height:0;overflow:auto;scrollbar-width:thin;scrollbar-color:#2a3038 transparent}
.link{background:none;border:0;padding:0;cursor:pointer;font:500 11px var(--mono);letter-spacing:.1em;color:var(--muted);text-decoration:none;transition:color .2s}
.link:hover,.link:focus-visible{color:var(--lime);outline:none}

/* Zeilen (Dienste, Hosts) – anklickbar */
.row{display:grid;align-items:center;gap:12px;padding:11px 16px;border-bottom:1px solid var(--line);cursor:pointer;
  transition:background .25s ease,box-shadow .25s ease;outline:none}
.row:hover,.row:focus-visible{background:rgba(255,255,255,.03)}
.row.sel{background:rgba(198,255,61,.06);box-shadow:inset 2px 0 0 var(--lime)}
.svc{grid-template-columns:10px minmax(0,1fr) minmax(70px,.9fr) 52px auto}
.host{grid-template-columns:10px minmax(0,1fr) auto auto}
.row .dot{width:8px;height:8px;border-radius:50%;background:var(--dim);transition:background .5s,box-shadow .5s}
.dot.on{background:var(--lime);box-shadow:0 0 9px rgba(198,255,61,.6)}
.dot.warn{background:var(--amber);box-shadow:0 0 9px rgba(255,178,46,.5)}
.dot.off{background:var(--red);box-shadow:0 0 9px rgba(255,69,69,.55)}
.nm{display:flex;flex-direction:column;min-width:0}
.nm b{font:500 13.5px var(--sans);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nm span{font-size:10.5px;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nm em{font-style:normal;font-size:10.5px;color:var(--amber);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.uptime{display:flex;gap:1.5px;height:18px;min-width:0;overflow:hidden}
.uptime i,.legend i.u{flex:1 1 0;min-width:1.5px;border-radius:1px;background:rgba(255,255,255,.06);transition:background .5s}
.uptime i.ok,.legend i.ok{background:rgba(198,255,61,.5)}
.uptime i.warn,.legend i.warn{background:rgba(255,178,46,.7)}
.uptime i.bad,.legend i.bad{background:rgba(255,69,69,.75)}
.lat{font-size:11.5px;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.pill{justify-self:end;font:500 9.5px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;padding:5px 8px;border-radius:999px;
  border:1px solid var(--line-2);color:var(--muted);white-space:nowrap;transition:all .4s ease}
.pill.on{color:var(--lime);border-color:rgba(198,255,61,.35);background:rgba(198,255,61,.08)}
.pill.warn{color:var(--amber);border-color:rgba(255,178,46,.4);background:rgba(255,178,46,.08)}
.pill.off{color:var(--red);border-color:rgba(255,69,69,.45);background:rgba(255,69,69,.08)}
.legend{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin:0;padding:9px 16px;border-top:1px solid var(--line);font-size:10px;color:var(--dim)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i.u{display:inline-block;flex:none;width:7px;height:11px}
.legend .k{margin-left:auto}
.hcount{font-size:11px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}

/* Checkmk-Zusammenfassung */
.cmk-sum{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line);border-bottom:1px solid var(--line)}
.cmk-sum>div{background:rgba(11,14,18,.92);padding:12px 16px;display:flex;flex-direction:column;gap:5px}
.cmk-sum b{font:600 21px/1 var(--sans);font-variant-numeric:tabular-nums}
.cmk-sum b small{font:400 11px var(--mono);color:var(--muted);margin-left:3px}
.cmk-sum .good b{color:var(--lime)} .cmk-sum .mid b{color:var(--amber)} .cmk-sum .bad b{color:var(--red)}
.seg{display:flex;height:3px;gap:2px;border-radius:2px;overflow:hidden;margin-top:3px}
.seg i{display:block;height:100%;transition:flex .6s ease}
.seg .ok{background:var(--lime)} .seg .wa{background:var(--amber)} .seg .cr{background:var(--red)} .seg .un{background:#b48cff}
.empty{padding:16px;color:var(--dim);font-size:12px}

/* Meldungen */
.msg{display:grid;grid-template-columns:8px minmax(0,1fr) auto;gap:3px 12px;padding:11px 16px;border-bottom:1px solid var(--line);cursor:pointer;transition:background .25s}
.msg:hover,.msg.sel{background:rgba(255,255,255,.03)} .msg.sel{box-shadow:inset 2px 0 0 var(--lime)}
.msg .mdot{width:7px;height:7px;border-radius:50%;margin-top:6px;background:var(--lime)}
.msg.p4 .mdot{background:var(--amber)} .msg.p5 .mdot{background:var(--red)} .msg.ans .mdot{background:var(--sea)}
.msg .t{font:500 13px var(--sans);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.msg .when{font-size:10.5px;color:var(--dim);white-space:nowrap}
.msg .peek{grid-column:2/4;font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* Detail-Schublade */
.drawer{position:fixed;z-index:7;top:61px;right:0;bottom:0;width:min(480px,92vw);display:flex;flex-direction:column;
  background:rgba(10,12,16,.97);border-left:1px solid var(--line-2);
  box-shadow:-30px 0 80px -30px rgba(0,0,0,.9);transform:translateX(102%);transition:transform .38s cubic-bezier(.2,.7,.2,1);visibility:hidden}
body.has-drawer .drawer{transform:none;visibility:visible}
.d-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:18px 20px;border-bottom:1px solid var(--line)}
.d-head h3{margin:4px 0 0;font:600 22px/1.15 var(--sans)}
.d-close{background:none;border:1px solid var(--line-2);color:var(--muted);width:32px;height:32px;border-radius:50%;cursor:pointer;font-size:13px;
  display:inline-flex;align-items:center;justify-content:center;transition:all .2s}
.d-close:hover,.d-close:focus-visible{border-color:var(--lime);color:var(--lime);outline:none}
.d-body{flex:1;min-height:0;overflow:auto;padding:16px 20px 28px;display:flex;flex-direction:column;gap:16px}
.d-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.d-live{display:inline-flex;align-items:center;gap:7px;font-size:10.5px;letter-spacing:.12em;color:var(--muted)}
.d-live::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--lime);box-shadow:0 0 8px var(--lime)}
.d-live.busy::before{animation:pulse .5s steps(2) infinite}
.d-kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line)}
.d-kpis>div{background:rgba(14,17,21,.95);padding:12px 14px;display:flex;flex-direction:column;gap:5px;min-width:0}
.d-kpis b{font:600 20px/1.1 var(--sans);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.d-kpis b small{font:400 11px var(--mono);color:var(--muted);margin-left:3px}
.d-chart{border:1px solid var(--line);padding:10px 12px 8px;background:rgba(14,17,21,.7)}
.d-chart svg{display:block;width:100%;height:110px;color:var(--sea)}
.d-chart .uptime{height:10px;margin-top:8px}
.d-dl{display:grid;grid-template-columns:110px 1fr;gap:8px 12px;margin:0;font-size:12px}
.d-dl dt{color:var(--dim);letter-spacing:.06em}
.d-dl dd{margin:0;color:var(--ink-2);overflow-wrap:anywhere}
.d-dl a{color:var(--lime)}
.d-sec h4{margin:0 0 8px;font:500 12px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.d-svc{display:grid;grid-template-columns:auto 1fr auto;gap:2px 10px;padding:9px 0;border-bottom:1px solid var(--line);font-size:12px}
.d-svc .o{grid-column:2/4;font-size:11px;color:var(--muted);overflow-wrap:anywhere}
.d-svc .a{font-size:10.5px;color:var(--dim);white-space:nowrap}
.d-ai{font-size:12.5px;line-height:1.6;color:var(--ink);background:var(--sea-a);border:1px solid rgba(63,214,194,.22);padding:10px 12px}
.d-ai b{color:var(--sea);font-weight:500;letter-spacing:.14em;font-size:10px;margin-right:6px}
.d-raw{font-size:11.5px;color:var(--ink-2);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-family:var(--mono)}
.btn.small{padding:6px 12px;font-size:12.5px}

/* ================= Navigation und Betriebsseiten (Mandanten · Geräte · Firewalls · Connect) ================= */
a.logo{text-decoration:none}
.nav{display:flex;gap:2px;padding:3px;border:1px solid var(--line);border-radius:999px;background:rgba(16,19,24,.55)}
.nav a{font:600 13.5px/1 var(--sans);letter-spacing:.01em;color:var(--muted);text-decoration:none;
  padding:8px 14px;border-radius:999px;transition:color .2s,background .2s;white-space:nowrap}
.nav a:hover,.nav a:focus-visible{color:var(--ink);outline:none;background:rgba(255,255,255,.05)}
.nav a.on{color:var(--lime-ink);background:var(--lime)}
.msel{display:inline-flex;align-items:center;gap:8px}
.msel select,.f select,.f input,.f textarea{background:rgba(10,12,16,.9);color:var(--ink);border:1px solid var(--line-2);border-radius:var(--r);
  font:400 12px var(--mono);padding:7px 9px;outline:none;transition:border-color .2s}
.msel select:focus,.f select:focus,.f input:focus,.f textarea:focus{border-color:var(--lime)}
.ops{position:relative;z-index:2;flex:1;min-height:0;overflow:auto;padding:14px 14px 40px;transition:padding-right .35s cubic-bezier(.2,.7,.2,1);
  scrollbar-width:thin;scrollbar-color:#2a3038 transparent}
body.has-drawer .ops{padding-right:calc(min(520px,92vw) + 14px)}
.page-ops .drawer{width:min(520px,92vw)}
.panel{border:1px solid var(--line);background:rgba(11,14,18,.88);margin-bottom:14px;animation:rise .5s cubic-bezier(.2,.7,.2,1) both}
.panel>.col-h{position:sticky;top:-14px;z-index:1;background:rgba(11,14,18,.97)}
.sumrow{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);margin-bottom:14px}
.sumrow>div{background:rgba(11,14,18,.92);padding:12px 16px;display:flex;flex-direction:column;gap:5px}
.sumrow b{font:600 22px/1 var(--sans);font-variant-numeric:tabular-nums}
.sumrow b small{font:400 11px var(--mono);color:var(--muted);margin-left:4px}
.sumrow .good b{color:var(--lime)} .sumrow .mid b{color:var(--amber)} .sumrow .bad b{color:var(--red)}
.grp-h{display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.02)}
.grp-h b{font:500 13px var(--sans)} .grp-h .k{margin-left:auto}
.mk{display:inline-flex;align-items:center;font:500 9.5px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--sea);
  border:1px solid rgba(63,214,194,.35);background:var(--sea-a);padding:4px 7px;border-radius:3px;white-space:nowrap}
/* Geräte-Zeile */
.dev{grid-template-columns:10px minmax(150px,1.1fr) 92px minmax(90px,.7fr) minmax(0,2fr) auto auto}
.dev .typ{font-size:11px;color:var(--muted)}
.dev .src{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kisum{display:flex;align-items:center;gap:8px;min-width:0}
.kisum span{font-size:11.5px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.pill.ki{font-weight:600}
.sw{position:relative;width:34px;height:18px;flex:none;border-radius:999px;border:1px solid var(--line-2);background:rgba(255,255,255,.04);cursor:pointer;
  transition:background .2s,border-color .2s;padding:0}
.sw::after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--dim);transition:transform .2s,background .2s}
.sw[aria-checked="true"]{background:var(--lime-a);border-color:rgba(198,255,61,.45)}
.sw[aria-checked="true"]::after{transform:translateX(16px);background:var(--lime);box-shadow:0 0 8px var(--lime)}
.sw:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
/* Firewall-Karten */
.fw-grid,.m-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:12px}
.card-fw,.card-m{position:relative;border:1px solid var(--line);background:rgba(11,14,18,.9);padding:14px 16px;display:flex;flex-direction:column;gap:11px;
  cursor:pointer;transition:border-color .25s,background .25s,transform .25s;outline:none;animation:rise .5s cubic-bezier(.2,.7,.2,1) both}
.card-fw:hover,.card-fw:focus-visible,.card-m:hover,.card-m:focus-visible{border-color:var(--line-3);background:rgba(16,20,25,.94)}
.card-fw.sel,.card-m.sel{border-color:rgba(198,255,61,.55);box-shadow:inset 0 0 0 1px rgba(198,255,61,.2)}
.card-fw::before,.card-m::before{content:"";position:absolute;left:-1px;top:-1px;bottom:-1px;width:2px;background:var(--dim)}
.card-fw.ok::before,.card-m.ok::before{background:var(--lime)} .card-fw.warn::before,.card-m.warn::before{background:var(--amber)}
.card-fw.crit::before,.card-m.crit::before{background:var(--red)}
.c-h{display:flex;align-items:flex-start;gap:10px}
.c-h .nm{flex:1}
.c-h .nm b{font-size:15px}
.meters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.meter{display:flex;flex-direction:column;gap:5px;min-width:0}
.meter .k{display:flex;justify-content:space-between}
.meter .k em{font-style:normal;color:var(--ink-2);letter-spacing:.04em}
.meter i{display:block;height:4px;border-radius:2px;background:rgba(255,255,255,.07);overflow:hidden}
.meter i u{display:block;height:100%;background:var(--sea);transition:width .6s ease}
.meter.warn i u{background:var(--amber)} .meter.crit i u{background:var(--red)}
.links{display:flex;flex-wrap:wrap;gap:6px}
.lk{display:inline-flex;align-items:center;gap:6px;font-size:10.5px;letter-spacing:.06em;color:var(--muted);border:1px solid var(--line);
  padding:4px 7px;border-radius:3px;white-space:nowrap}
.lk::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--dim)}
.lk.on::before{background:var(--lime);box-shadow:0 0 6px var(--lime)} .lk.part::before{background:var(--amber)} .lk.off::before{background:var(--red)}
.c-f{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:10.5px;color:var(--dim);border-top:1px solid var(--line);padding-top:9px}
.why{font-size:11px;color:var(--amber);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.why.crit{color:var(--red)}
/* Mandanten-Karten */
.card-m .m-name{font:600 17px/1.2 var(--sans)}
.card-m .m-meta{font-size:11px;color:var(--muted);line-height:1.6}
.card-m .seg{height:4px}
.card-m .counts{display:flex;gap:16px;font-size:11px;color:var(--muted)}
.card-m .counts b{font:600 18px var(--sans);color:var(--ink);margin-right:4px}
.card-m.new{border-style:dashed;align-items:center;justify-content:center;color:var(--muted);min-height:180px;font:500 12px var(--mono);letter-spacing:.14em;text-transform:uppercase}
.card-m.new:hover{color:var(--lime)}
/* Formulare und Tabellen */
.f{display:flex;flex-direction:column;gap:12px}
.f label{display:flex;flex-direction:column;gap:5px}
.f label>span{font:500 10px var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}
.f .row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.f textarea{min-height:76px;resize:vertical;font-family:var(--mono)}
.f .actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:4px}
.btn.prim{border-color:rgba(198,255,61,.5);color:var(--lime);background:var(--lime-a)}
.btn.prim:hover{background:rgba(198,255,61,.22)}
.btn.danger{color:var(--red);border-color:rgba(255,69,69,.4)} .btn.danger:hover{background:var(--red-a);border-color:var(--red);color:var(--red)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.tbl{width:100%;border-collapse:collapse;font-size:12px}
.tbl th{text-align:left;font:500 10px var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim);padding:9px 12px;border-bottom:1px solid var(--line-2);white-space:nowrap}
.tbl td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl tr.click{cursor:pointer} .tbl tr.click:hover td{background:rgba(255,255,255,.025)}
.tbl .num{font-variant-numeric:tabular-nums;text-align:right}
.cmd{display:flex;align-items:stretch;border:1px solid rgba(198,255,61,.3);background:rgba(0,0,0,.35)}
.cmd code{flex:1;padding:10px 12px;font:12px/1.55 var(--mono);color:var(--lime);word-break:break-all;user-select:all}
.cmd button{border:0;border-left:1px solid rgba(198,255,61,.3);background:var(--lime-a);color:var(--lime);font:600 10px var(--mono);letter-spacing:.14em;
  padding:0 14px;cursor:pointer;text-transform:uppercase}
.cmd button:hover{background:rgba(198,255,61,.25)}
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);padding:0 10px}
.tabs button{background:none;border:0;border-bottom:2px solid transparent;color:var(--muted);font:600 13.5px var(--sans);letter-spacing:.01em;
  padding:13px 14px 11px;cursor:pointer}
.tabs button.on{color:var(--lime);border-bottom-color:var(--lime)}
.tabs button:hover{color:var(--ink)}
.pad{padding:16px}
.hint{font-size:11.5px;color:var(--muted);line-height:1.6;margin:0}
.hint b{color:var(--ink-2);font-weight:500}
.steps-ol{margin:0;padding-left:20px;font-size:12px;color:var(--ink-2);line-height:1.8}
.brand-prev{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.brand-prev div{border:1px solid var(--line);padding:16px;display:flex;align-items:center;justify-content:center;min-height:90px}
.brand-prev .light{background:#f4f5f2} .brand-prev .dark{background:#1e2227}
.brand-prev img{max-width:100%;height:46px}
.yaml{margin:0;padding:14px;max-height:52vh;overflow:auto;font:11.5px/1.6 var(--mono);color:var(--ink-2);background:rgba(0,0,0,.3);border:1px solid var(--line);white-space:pre}
.toast{position:fixed;z-index:9;left:50%;bottom:22px;transform:translateX(-50%);padding:10px 18px;border-radius:999px;font-size:12px;
  background:rgba(14,17,21,.97);border:1px solid rgba(198,255,61,.4);color:var(--lime);box-shadow:0 12px 40px -10px rgba(0,0,0,.9)}
.toast.err{border-color:rgba(255,69,69,.5);color:var(--red)}
.ki-box{border:1px solid rgba(63,214,194,.25);background:var(--sea-a);padding:12px 14px;display:flex;flex-direction:column;gap:8px}
.ki-box .ki-h{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ki-box p{margin:0;font-size:12.5px;line-height:1.6;color:var(--ink)}
.ki-box ul{margin:0;padding-left:18px;font-size:12px;line-height:1.6;color:var(--ink-2)}
.ki-box .emp{font-size:12px;color:var(--ink-2)} .ki-box .emp b{color:var(--sea);font-weight:500}
.ki-hist{display:flex;gap:3px;align-items:flex-end;height:16px}
.ki-hist i{width:6px;height:100%;border-radius:1px;background:rgba(255,255,255,.08)}
.ki-hist i.ok{background:rgba(198,255,61,.55)} .ki-hist i.beobachten{background:rgba(255,178,46,.75)} .ki-hist i.kritisch{background:rgba(255,69,69,.8)}

/* ===== Detailansicht: ganze Fläche unter der Kopfzeile statt schmaler Seitenleiste (überall) ===== */
.drawer,.page-ops .drawer{left:0;right:0;width:auto;display:block;overflow:auto;border-left:0;box-shadow:none;
  background:rgba(8,10,13,.985);transform:translateY(10px);opacity:0;
  transition:transform .28s cubic-bezier(.2,.7,.2,1),opacity .22s ease,visibility 0s linear .28s;scrollbar-width:thin;scrollbar-color:#2a3038 transparent}
body.has-drawer .drawer{transform:none;opacity:1;visibility:visible;transition:transform .28s cubic-bezier(.2,.7,.2,1),opacity .22s ease}
body.has-drawer .board,body.has-drawer .ops{padding-right:14px}
body.has-drawer .ops,body.has-drawer .board{visibility:hidden}
.d-head{position:sticky;top:0;z-index:3;align-items:center;background:rgba(8,10,13,.97);
  padding:16px max(28px,calc((100% - 1520px)/2)) 14px}
.d-head h3{font-size:26px}
.d-close{width:auto;border-radius:999px;padding:0 16px 0 12px;gap:8px;font:600 13px var(--sans);letter-spacing:.01em;height:34px}
.d-close::before{content:"←";font-size:13px;letter-spacing:0}
.d-body{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,520px),1fr));gap:18px 22px;align-content:start;align-items:start;
  overflow:visible;padding:20px max(28px,calc((100% - 1520px)/2)) 48px}
.d-body>.d-row,.d-body>.ki-box,.d-body>.d-kpis,.d-body>.d-chart,.d-body>.meters,.d-body>.tabs,.d-body>.wide,.d-body>.f,
.d-body>.empty,.d-body>.d-live,.d-body>pre,.d-body>.yaml,.d-body>.btn{grid-column:1/-1}
.d-body>.btn{justify-self:start}
.d-body>.meters{gap:18px}
.d-body .d-sec{border:1px solid var(--line);background:rgba(14,17,21,.72);padding:14px 16px 12px;min-width:0}
.d-body .d-sec>h4{margin:0 0 10px;padding-bottom:9px;border-bottom:1px solid var(--line)}
.d-body .d-sec .tbl td,.d-body .d-sec .tbl th{padding-left:10px;padding-right:10px}
.d-body .d-sec .tbl td:first-child,.d-body .d-sec .tbl th:first-child{padding-left:0}
.d-body .d-sec>.d-dl{grid-template-columns:minmax(120px,auto) 1fr}
.d-body .tbl td{white-space:nowrap} .d-body .tbl td.wrap{white-space:normal}
.d-body .d-sec{overflow-x:auto}
.d-body .d-chart svg{height:130px}

@media (max-width:1250px){
  .board{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .board .col:nth-child(3){grid-column:1/-1;max-height:42vh}
  body{overflow:auto}
}
@media (max-width:820px){
  .page-dash{height:auto}
  .board{grid-template-columns:1fr;padding:10px}
  .board .col{max-height:none}
  .col-body{overflow:visible}
  .svc{grid-template-columns:10px minmax(0,1fr) auto}
  .svc .uptime,.svc .lat{display:none}
  .topbar{grid-template-columns:auto 1fr}
  .topbar .right .who,.topbar .right .clock,.topbar .live,.msel .k{display:none}
  .overall{grid-column:1/-1;justify-self:stretch;order:3}
  .nav{grid-column:1/-1;order:4;overflow-x:auto;border-radius:6px}
  .dev{grid-template-columns:10px minmax(0,1fr) auto auto}
  .dev .typ,.dev .src,.dev .kisum{display:none}
  body.has-drawer .ops{padding-right:14px}
  .f .row2{grid-template-columns:1fr}
  body.has-drawer .board{padding-right:10px}
  .drawer{top:0}
}
@media (max-width:900px){
  body{overflow-x:hidden;overflow-y:auto}
  /* Seite darf wachsen: sonst klemmt das Raster die obere Hälfte und der Text läuft unter das Anmeldefeld */
  .page-login{grid-template-columns:1fr;height:auto;min-height:100%}
  .login-art{padding:calc(24px + env(safe-area-inset-top,0px)) calc(22px + env(safe-area-inset-right,0px)) 6px calc(22px + env(safe-area-inset-left,0px));gap:28px;justify-content:flex-start}
  .login-art h1{font-size:clamp(30px,9.4vw,52px)}
  .login-art .meta-row{gap:14px 24px}
  .login-side{padding:18px calc(22px + env(safe-area-inset-right,0px)) calc(56px + env(safe-area-inset-bottom,0px)) calc(22px + env(safe-area-inset-left,0px));align-items:flex-start}
  .login-side::before{inset:0}
}
@media (prefers-reduced-motion:reduce){
  .scan,.ticker-track,.step.run b,.chip::before,.status>*,.beacon::after{animation:none}
  *{transition:none!important}
}

/* ===== Schrift: Aptos für Text und Bedienung, JetBrains Mono für Technisches (IPs, MACs, Werte, Logs, Codes) ===== */
.nm span,.lat,.hcount,.tbl td,.d-dl dd,.d-raw,.yaml,code,pre,.cmd code,.clock,.live,.d-live,.msg .when,.lk,.mk,.pill,.chip,.tag,
.meter .k,.meter .k em,.k,.c-f,.sumrow b small,.d-kpis b small,.cmk-sum b small,.d-svc .o,.msel select,.f input,.f select{font-family:var(--mono)}
.tbl td{font-size:12px}
.tbl td.wrap,.d-dl dd .f select{font-family:var(--sans)}
.tbl td.wrap{font-size:13px}
.dev .src,.dev .typ,.why,.kisum span,.hint,.empty,.m-meta,.counts,.steps-ol,.ki-box p,.ki-box ul,.ki-box .emp,.d-ai,.overall span:not(.beacon){font-family:var(--sans)}
.f textarea,.f input[name=name],.f input[name=standort],.f input[name=kontakt],.f input[name=notfall]{font-family:var(--sans);font-size:13.5px}
.bulkbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.bulkbar .k{margin-right:4px}
.acts{display:inline-flex;gap:6px}
.d-body>.tabs{margin-bottom:-4px;overflow-x:auto;scrollbar-width:thin}
.d-body>.d-row .btn.prim{margin-left:auto}.login-art h1,.d-head h3,.card h2,.card-m .m-name,.sumrow b,.cmk-sum b,.d-kpis b{font-family:"Aptos Display","Aptos",var(--sans)}
