/* ══ NoReason LLM cluster — světlý design (sladěno s TrhPráce / hrbot) ════════
   Papírové pozadí, bílé karty, tmavý levý sidebar, indigo akcent, zlatá = peníze.
   Fraunces (serif, tituly) · Inter (text) · IBM Plex Mono (čísla/štítky). ─────── */

:root{
  /* Neutrály */
  --ink:#14172B; --ink-2:#3E4360; --ink-soft:#5B6178;
  --paper:#EEF0F5; --surface:#FFFFFF; --surface-2:#F5F6FA; --surface-3:#EDEFF6;
  --line:#E2E5EE; --line-strong:#C7CCDA;

  /* Značka / akcenty */
  --brand:#14183A; --brand-2:#1e2450;
  --accent:#3B4CCA; --accent-600:#2C39A0; --accent-weak:#E9EBFB; --accent-weak-2:#DCE0FA;
  --gold:#B77F27; --gold-ink:#855A10; --gold-weak:#F7EDD9;
  --pos:#1E7A52; --pos-weak:#E3F2EA; --neg:#B23A30; --neg-weak:#FAEAE7;
  --amber-ink:#8a5a12;
  /* „mimo okno“ = naplánované spaní (ne porucha) — tlumené indigo, odlišené od šedé offline */
  --rest:#5A63A6; --rest-weak:#E8EAF6; --rest-line:#C9CEEC;

  /* Legacy cluster proměnné (používané inline v gauges/trackách) → světlá paleta */
  --violet:#3B4CCA; --violet-deep:#2C39A0;
  --cyan:#7C88E8;
  --green:#2E9E6B; --green-deep:#1E7A52;
  --amber:#C9881F; --red:#B23A30;
  --ok:#1E7A52; --busy:#C9881F; --off:#9AA0B4;
  --panel:var(--surface); --panel-2:var(--surface-2); --bg-elev:var(--surface-2);
  --ink-dim:var(--ink-2); --ink-mute:var(--ink-soft); --line-2:var(--line-strong);

  --r:16px; --r-sm:10px; --r-xs:7px;
  --shadow:0 1px 2px rgba(20,23,43,.05), 0 8px 24px -14px rgba(20,23,43,.16);
  --shadow-md:0 2px 6px rgba(20,23,43,.06), 0 18px 40px -20px rgba(20,23,43,.24);
  --shadow-lg:0 16px 48px -18px rgba(20,23,43,.34);
  --sidebar-w:254px; --content-max:1500px;
  --font-display:"Fraunces",Georgia,serif;
  --font-sans:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;
  --font-mono:"IBM Plex Mono",ui-monospace,"Cascadia Code",Consolas,monospace;
  --sans:var(--font-sans); --mono:var(--font-mono);
  --step:.18s cubic-bezier(.2,.7,.3,1);
}
*{box-sizing:border-box}
[hidden]{display:none !important}
html{-webkit-text-size-adjust:100%; scroll-behavior:smooth}
body{
  margin:0; font-family:var(--font-sans); font-size:15px; line-height:1.55;
  color:var(--ink); background:var(--paper);
  font-feature-settings:"cv05" 1,"ss01" 1; -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
a{color:inherit; text-decoration:none}
h1,h2,h3,h4{margin:0; font-weight:600; letter-spacing:-.015em}
p{margin:0}
button{font-family:inherit; cursor:pointer}
b{font-weight:600}
svg{flex:none}
@property --p{ syntax:'<number>'; inherits:false; initial-value:0; }

:focus-visible{outline:2px solid var(--accent); outline-offset:2px; border-radius:4px}
.sidebar :focus-visible{outline-color:#fff}
:focus:not(:focus-visible){outline:none}
.skip-link{position:fixed; top:10px; left:10px; z-index:100; background:var(--accent); color:#fff;
  padding:10px 16px; border-radius:var(--r-sm); font-weight:600; font-size:14px;
  transform:translateY(-160%); transition:transform var(--step)}
.skip-link:focus{transform:none}

/* ── Shell: sidebar + content ─────────────────────────────────────────── */
.shell{min-height:100vh}
.sidebar{position:fixed; inset:0 auto 0 0; width:var(--sidebar-w);
  background:linear-gradient(180deg,var(--brand),#10132e); color:#C9CCE6;
  display:flex; flex-direction:column; padding:22px 16px; z-index:40;
  border-right:1px solid rgba(255,255,255,.06)}
.brand{display:flex; align-items:center; gap:11px; margin-bottom:24px; padding:0 6px}
.brand__mark{width:38px; height:38px; border-radius:11px; flex:none;
  background:linear-gradient(150deg,#4a5ad6,#8b96f2); color:#fff; display:grid; place-items:center;
  font-size:19px; box-shadow:inset 0 0 0 1px rgba(255,255,255,.18),0 4px 14px -4px rgba(74,90,214,.6)}
.brand__name{color:#fff; font-weight:600; font-size:17px; letter-spacing:-.02em; line-height:1.1}
.brand__name small{display:block; font-weight:500; font-size:10px; color:#9aa0cc; letter-spacing:.1em;
  text-transform:uppercase; margin-top:3px; font-family:var(--font-mono)}

.nav{display:flex; flex-direction:column; gap:2px}
.navlink{position:relative; display:flex; align-items:center; gap:11px; padding:9px 12px;
  border-radius:var(--r-sm); color:#C2C6E4; font-size:14px; font-weight:500; cursor:pointer;
  transition:background var(--step),color var(--step)}
.navlink:hover{background:rgba(255,255,255,.07); color:#fff}
.navlink.is-active{background:rgba(255,255,255,.12); color:#fff}
.navlink.is-active::before{content:""; position:absolute; left:-16px; top:50%; transform:translateY(-50%);
  width:3px; height:22px; border-radius:0 3px 3px 0; background:#8b96f2}
.navlink svg{width:17px; height:17px; opacity:.9}
.navlink__badge{margin-left:auto; font-family:var(--font-mono); font-size:11px; font-weight:600;
  color:#cdd1f2; background:rgba(255,255,255,.12); padding:1px 8px; border-radius:20px;
  font-variant-numeric:tabular-nums}
.navlink__badge:empty{display:none}
.navlink__ext{width:13px; height:13px; margin-left:auto; opacity:.5}
.nav__section{font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:#8b90be;
  padding:18px 12px 6px; font-weight:600}

.sidebar__spacer{flex:1; min-height:14px}
.clusterlive{border-top:1px solid rgba(255,255,255,.10); padding-top:14px; margin-top:14px}
.clusterlive__row{display:flex; align-items:center; justify-content:space-between; gap:10px}
.live{display:flex; align-items:center; gap:7px; font-size:11px; color:#9bdb6a;
  font-family:var(--font-mono); text-transform:uppercase; letter-spacing:.08em}
.live.is-stale{color:#8a8fba}
.live__pulse{width:9px; height:9px; border-radius:50%; background:#9bdb6a;
  box-shadow:0 0 0 0 rgba(155,219,106,.5); animation:pulse 1.9s infinite}
.is-stale .live__pulse{background:#8a8fba; animation:none}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(155,219,106,.5)}70%{box-shadow:0 0 0 8px rgba(155,219,106,0)}100%{box-shadow:0 0 0 0 rgba(155,219,106,0)}}
.iconbtn{background:rgba(255,255,255,.10); border:none; color:#d7d9f0; width:30px; height:30px;
  border-radius:8px; cursor:pointer; font-size:14px; display:grid; place-items:center; flex:none;
  transition:background var(--step)}
.iconbtn:hover{background:rgba(255,255,255,.2)}
.clusterlive__vitals{display:flex; gap:8px; margin-top:11px}
.vchip{flex:1; display:flex; align-items:center; justify-content:space-between; gap:6px; padding:6px 10px;
  border-radius:8px; background:rgba(255,255,255,.06); font-family:var(--font-mono); font-size:12.5px}
.vchip__k{color:#8a8fba; text-transform:uppercase; font-size:9.5px; letter-spacing:.06em}
.vchip b{color:#eef; font-variant-numeric:tabular-nums}

.content{margin-left:var(--sidebar-w); min-height:100vh}
.content__inner{width:100%; max-width:var(--content-max); margin:0 auto; padding:30px 40px 60px}

/* mobilní top bar + hamburger — skryté na desktopu, aktivní v ≤1000px */
.mtop{display:none}
.hamb{display:none}
.scrim{display:none}
.mtop__live .live__pulse{width:10px; height:10px}

/* ── Page head ────────────────────────────────────────────────────────── */
.page-head{display:flex; flex-wrap:wrap; gap:16px 24px; justify-content:space-between;
  align-items:flex-end; margin-bottom:26px}
.eyebrow{font-family:var(--font-mono); font-size:11px; letter-spacing:.14em; text-transform:uppercase;
  color:var(--accent-600); font-weight:500; margin:26px 2px 12px; display:block}
.page-head .eyebrow{margin:0}
.eyebrow:first-child{margin-top:0}
.page-title{font-family:var(--font-display); font-size:clamp(26px,3vw,34px); line-height:1.05;
  font-weight:500; letter-spacing:-.025em; margin-top:8px; color:var(--ink)}
.page-sub{color:var(--ink-2); font-size:14px; margin-top:8px; max-width:64ch}

.section-head{display:flex; align-items:baseline; justify-content:space-between; gap:12px;
  flex-wrap:wrap; margin-bottom:12px}
.section-head .eyebrow{margin:20px 2px 4px}
.section-head__meta{font-family:var(--font-mono); font-size:11.5px; color:var(--ink-soft)}

/* přepínání tabů */
.tab{display:none}
.tab.is-active{display:block; animation:fade .22s ease}
@keyframes fade{from{opacity:0; transform:translateY(4px)}to{opacity:1; transform:none}}

/* ── Banner / toast ───────────────────────────────────────────────────── */
.banner{margin:0 0 20px; padding:15px 20px; background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r); box-shadow:var(--shadow); display:flex; align-items:center; gap:14px; flex-wrap:wrap}
.banner--warn{border-color:var(--gold); background:var(--gold-weak)}
.banner--err{border-color:var(--neg); background:var(--neg-weak)}
.banner__t{font-weight:600}
.banner__d{color:var(--ink-2); font-size:13.5px}
.banner .btn{margin-left:auto}
.toast{position:fixed; left:50%; bottom:22px; transform:translate(-50%,150%);
  background:var(--ink); border:1px solid rgba(255,255,255,.1); color:#fff; padding:11px 18px;
  border-radius:11px; font-size:13px; font-weight:500; z-index:60; box-shadow:var(--shadow-lg);
  max-width:min(92vw,460px); text-align:center; opacity:0;
  transition:transform .28s ease,opacity .28s ease; pointer-events:none}
.toast.is-show{transform:translate(-50%,0); opacity:1}
.toast--err{border-color:var(--neg); background:#7a241d}

/* ── Buttons / links ──────────────────────────────────────────────────── */
.btn{display:inline-flex; align-items:center; gap:7px; font-size:14px; font-weight:500;
  padding:9px 16px; border-radius:var(--r-sm); border:1px solid var(--line-strong);
  background:var(--surface); color:var(--ink);
  transition:border-color var(--step),background var(--step),box-shadow var(--step),transform .05s}
.btn:hover{border-color:var(--accent); color:var(--accent-600)}
.btn:active{transform:translateY(1px)}
.btn--primary{background:var(--accent); border-color:var(--accent); color:#fff}
.btn--primary:hover{background:var(--accent-600); border-color:var(--accent-600); color:#fff}
.linkbtn{background:none; border:0; color:var(--accent-600); cursor:pointer; font:inherit; font-size:13px;
  font-weight:500; padding:0 2px; text-decoration:underline; text-underline-offset:2px}
.linkbtn:hover{color:var(--accent)}
.linkbtn--danger{color:var(--neg)}
.linkbtn--danger:hover{color:#8f2820}

/* ── Cards ────────────────────────────────────────────────────────────── */
.cards{display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:16px}
.card{background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
  box-shadow:var(--shadow); padding:18px 20px; display:flex; flex-direction:column; gap:8px; min-width:0}
.card--wide{grid-column:span 2}
.card__k{font-size:12px; color:var(--ink-soft); font-weight:500; display:flex; align-items:center;
  gap:6px; flex-wrap:wrap}
.card__v{display:flex; align-items:baseline; gap:7px}
.card__v b{font-family:var(--font-display); font-size:30px; font-weight:500; color:var(--ink);
  line-height:1; letter-spacing:-.02em; font-variant-numeric:tabular-nums}
.card--total .card__v b{color:var(--pos)}
.card--cost .card__v b{color:var(--gold-ink)}
.card__u{font-size:12.5px; color:var(--ink-soft)}
.card__row{font-family:var(--font-mono); font-size:12.5px; color:var(--ink-soft);
  font-variant-numeric:tabular-nums}
.card__row b{color:var(--ink); font-family:var(--font-mono)}

/* ── PŘEHLED: hero ────────────────────────────────────────────────────── */
.hero{display:grid; grid-template-columns:auto 1fr; gap:24px;
  background:radial-gradient(130% 150% at 0% 0%,#232a5c 0%,#14183A 58%); color:#fff;
  border:1px solid var(--brand-2); border-radius:var(--r); padding:26px 28px;
  box-shadow:var(--shadow-lg); overflow:hidden; position:relative; margin-bottom:8px}
.hero::after{content:""; position:absolute; right:-70px; top:-70px; width:280px; height:280px;
  border-radius:50%; background:radial-gradient(circle,rgba(183,127,39,.22),transparent 70%); pointer-events:none}
.hero__gauges{position:relative; display:flex; gap:22px; z-index:1}
.hero__readouts{position:relative; display:flex; flex-direction:column; gap:12px;
  justify-content:center; min-width:0; z-index:1}
.gauge{display:flex; flex-direction:column; align-items:center; gap:11px}
.gauge-ring{--p:0; --g1:#8b96f2; --g2:#c8ccea; --track:rgba(255,255,255,.12);
  position:relative; width:130px; height:130px; border-radius:50%;
  background:conic-gradient(from -90deg,var(--g1) 0deg,var(--g2) calc(var(--p)*3.6deg),var(--track) calc(var(--p)*3.6deg) 360deg);
  display:grid; place-items:center; transition:--p .6s ease}
.gauge-ring::after{content:""; position:absolute; inset:13px; border-radius:50%;
  background:#191d43; box-shadow:inset 0 0 0 1px rgba(255,255,255,.08)}
.gauge-ring__hole{position:relative; z-index:2; display:grid; place-items:center; text-align:center}
.gauge-ring__val{font-family:var(--font-display); font-size:27px; font-weight:500; color:#fff;
  font-variant-numeric:tabular-nums; line-height:1}
.gauge__cap{text-align:center; line-height:1.3}
.gauge__title{display:block; font-size:12.5px; font-weight:600; color:#fff}
.gauge__sub{display:block; font-size:11px; color:#adb2da; font-family:var(--font-mono)}
.readout{background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.09); border-radius:var(--r-sm);
  padding:14px 16px; display:flex; flex-direction:column; gap:5px}
.readout--accent{background:rgba(139,150,242,.14); border-color:rgba(139,150,242,.34)}
.readout__k{font-size:11px; text-transform:uppercase; letter-spacing:.07em; color:#adb2da; font-weight:500;
  font-family:var(--font-mono)}
.readout__v{display:flex; align-items:baseline; gap:8px}
.readout__v b{font-family:var(--font-display); font-size:34px; font-weight:500; color:#fff; line-height:1;
  letter-spacing:-.02em; font-variant-numeric:tabular-nums}
.readout__u{font-size:13px; color:#c8ccea; font-family:var(--font-mono)}
.readout__sub{font-size:12px; color:#c8ccea; font-family:var(--font-mono)}
.readout__sub b{color:#9bdb6a; font-family:var(--font-mono); font-variant-numeric:tabular-nums}

/* ── NODY ─────────────────────────────────────────────────────────────────
   Karta zařízení ve 3 vrstvách: identita+stav (dominantní) → přístrojový
   panel telemetrie (klidný, ohraničený) → konfigurace a akce (tiché). ──── */
.nodes{display:grid; grid-template-columns:repeat(auto-fill,minmax(330px,1fr)); gap:16px; align-items:start}
.node{position:relative; background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
  box-shadow:var(--shadow); padding:16px 18px 12px 21px; overflow:hidden; display:flex; flex-direction:column; gap:10px;
  transition:box-shadow var(--step),border-color var(--step)}
.node:hover{box-shadow:var(--shadow-md); border-color:var(--line-strong)}
.node::before{content:""; position:absolute; left:0; top:0; bottom:0; width:3px; background:var(--off)}
.node--free::before{background:var(--pos)}
.node--busy::before{background:var(--gold)}
.node--render::before,.node--broken::before{background:var(--neg)}
.node--sched::before{background:var(--rest)}
.node--manual::before,.node--offline::before{background:var(--off)}
.node--offline,.node--manual{background:var(--surface-2)}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.4}}

/* hlavička: jméno + tichý mono podtitulek vlevo, stavovka vpravo */
.nhead{display:flex; align-items:flex-start; justify-content:space-between; gap:8px 10px; flex-wrap:wrap; margin-bottom:1px}
.nhead__id{min-width:0; flex:1 1 150px; display:flex; flex-direction:column; gap:4px}
.node__name{font-weight:600; font-size:16px; letter-spacing:-.015em; min-width:0; line-height:1.15;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--ink)}
.nsub{display:flex; align-items:center; gap:6px; min-width:0; font-family:var(--mono); font-size:11px;
  color:var(--ink-soft); white-space:nowrap; letter-spacing:.01em}
.nsub__gpu{overflow:hidden; text-overflow:ellipsis; min-width:0}
.nsub__x{flex:none}
.ntr{font-family:var(--mono); font-size:9px; font-weight:600; letter-spacing:.09em; padding:1.5px 6px;
  border-radius:5px; flex:none; line-height:1.4}
.ntr--ws{background:var(--accent-weak); color:var(--accent-600)}
.ntr--http{background:var(--surface-3); color:var(--ink-soft)}
.nsite{font-family:var(--mono); font-size:9px; font-weight:600; letter-spacing:.05em; background:#ece8fa;
  color:#493c97; padding:1.5px 6px; border-radius:5px; flex:none; line-height:1.4}

/* stavovka — jediný barevný signál nahoře (spolu s lemem karty) */
.nstate{display:inline-flex; align-items:center; gap:7px; flex:none; font-size:11.5px; font-weight:600;
  padding:4px 11px; border-radius:99px; letter-spacing:.01em; line-height:1.35; white-space:nowrap}
.nstate__dot{width:6px; height:6px; border-radius:50%; background:currentColor; flex:none}
.nstate--render .nstate__dot{animation:blink 1.6s infinite}
.nstate--free{background:var(--pos-weak); color:var(--pos)}
.nstate--busy{background:var(--gold-weak); color:var(--gold-ink)}
.nstate--render,.nstate--broken{background:var(--neg-weak); color:var(--neg)}
.nstate--sched{background:var(--rest-weak); color:var(--rest)}
.nstate--manual{background:var(--surface-3); color:var(--ink-soft)}
.nstate--offline{background:#e6e8ef; color:var(--ink-soft)}

/* přístrojový panel: bary (výpočet/paměť) + lišta vitálů pod vláskovou linkou */
.nbody{background:var(--surface-2); border:1px solid var(--line); border-radius:var(--r-sm); padding:11px 11px 10px}
.nmetrics{display:grid; grid-template-columns:1fr 1fr; gap:11px 10px}
.nm{display:flex; flex-direction:column; gap:5px; min-width:0}
.nm__row{display:flex; justify-content:space-between; align-items:baseline; gap:5px; min-width:0}
.nm__k{font-family:var(--mono); font-size:10px; text-transform:uppercase; letter-spacing:.02em; color:var(--ink-soft); white-space:nowrap}
.nm__v{font-family:var(--mono); font-size:13px; font-weight:600; color:var(--ink); font-variant-numeric:tabular-nums; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0}
.nm__bar{height:3px; border-radius:99px; background:var(--line); overflow:hidden}
.nm__bar>i{display:block; height:100%; border-radius:99px; background:var(--accent); transition:width .5s ease}
.bar-vram>i,.bar-ram>i{background:var(--green-deep)}
.bar--hot>i{background:var(--neg)}
.nvitals{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:6px; margin-top:11px; padding-top:9px;
  border-top:1px solid var(--line)}
.nv{display:flex; flex-direction:column; gap:2px; min-width:0}
.nv__k{font-family:var(--mono); font-size:10px; text-transform:uppercase; letter-spacing:.04em;
  color:var(--ink-soft); white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.nv__v{font-family:var(--mono); font-size:12px; font-weight:600; color:var(--ink);
  font-variant-numeric:tabular-nums; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.nv__dim{color:var(--ink-soft); font-weight:500}
.nv__v--warn{color:var(--gold-ink)}
.npips{display:flex; gap:2px; align-items:center; margin-top:4px}
.pip{flex:1 1 0; height:4px; border-radius:2px; background:var(--line); max-width:11px; min-width:0}
.pip.on{background:var(--gold)}
.temp--ok{color:var(--pos)} .temp--warm{color:var(--gold-ink)} .temp--hot{color:var(--neg)}

/* stavový blok pro NEaktivní nody (render/mimo okno/vypnuto/offline) — místo živých metrik */
.nrest{display:flex; align-items:center; gap:12px; padding:15px 14px; border-radius:var(--r-sm);
  background:var(--surface-2); border:1px solid var(--line)}
.nrest__ic{width:30px; height:30px; border-radius:50%; flex:none; display:grid; place-items:center;
  font-size:13px; line-height:1; background:var(--surface-3); border:1px solid var(--line); color:var(--ink-soft)}
.node--broken .nrest{background:var(--neg-weak); border-color:#f0cfc9}
.node--broken .nrest__t{color:var(--neg)}
.node--broken .nrest__ic,.node--render .nrest__ic{background:#fff; border-color:#f0cfc9; color:var(--neg)}
.node--sched .nrest{background:var(--rest-weak); border-color:var(--rest-line)}
.node--sched .nrest__ic{background:#fff; border-color:var(--rest-line); color:var(--rest)}
.node--render .nrest{background:var(--neg-weak); border-color:#f0cfc9}
.nrest__tx{min-width:0}
.nrest__t{font-weight:600; font-size:13.5px; line-height:1.3; color:var(--ink)}
.node--sched .nrest__t{color:var(--rest)}
.node--render .nrest__t{color:var(--neg)}
.nrest__d{font-size:11.5px; color:var(--ink-soft); font-family:var(--mono); margin-top:3px; line-height:1.45}

.nwarn{font-size:11.5px; font-weight:600; color:var(--gold-ink); background:var(--gold-weak);
  border:1px solid #e6d3a8; border-radius:var(--r-xs); padding:5px 10px}
.ninstall{font-size:11.5px; font-weight:500; color:var(--gold-ink); background:var(--gold-weak);
  border:1px solid #e6d3a8; border-radius:var(--r-xs); padding:5px 10px}
.ninfo{font-size:11.5px; font-weight:600; color:#39418f; background:#eef0fc;
  border:1px solid #cdd3f4; border-radius:var(--r-xs); padding:5px 10px}

/* konfigurační vrstva: JEDNA definiční mřížka — pevný labelový sloupec (72px,
   stejný ve všech řádcích i kartách) + obsah 1fr; labely sedí na první lince
   obsahu. Modely: aktivní chat model = akcent, chat = plný chip, embedding = obrys */
.nconf{display:grid; grid-template-columns:72px minmax(0,1fr); gap:8px 10px; align-items:start}
.nconf__k{font-family:var(--mono); font-size:10px; font-weight:500; text-transform:uppercase;
  letter-spacing:.08em; color:var(--ink-soft); line-height:24px; white-space:nowrap}
.npref .nconf__k{line-height:30px}
.nconf__c{min-width:0}
.nconf__none{font-family:var(--mono); font-size:12.5px; color:var(--ink-soft); opacity:.6; line-height:24px}
.nconf .ninstall{grid-column:1/-1}
.nmodels{display:flex; flex-wrap:wrap; align-items:center; gap:6px}
.chip{font-family:var(--mono); font-size:12.5px; height:24px; display:inline-flex; align-items:center;
  padding:0 10px; border-radius:99px; background:var(--surface-2); border:1px solid var(--line);
  color:var(--ink-2); max-width:100%; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.chip--act{background:var(--accent-weak); border-color:var(--accent-weak-2); color:var(--accent-600);
  font-weight:600; padding-left:8px}
.chip--act::before{content:""; width:5px; height:5px; border-radius:50%;
  background:var(--accent); margin-right:6px; flex:none}
.chip--emb{background:none; border-color:var(--line); color:var(--ink-soft)}
.chip--muted{opacity:.55}
.nenv{display:flex; flex-wrap:wrap; align-items:center; gap:6px 14px; min-height:24px}
.envkv{display:inline-flex; align-items:center; gap:6px; font-family:var(--mono); font-size:12.5px;
  line-height:1.5; min-height:24px; max-width:100%; min-width:0}
.envkv__k{color:var(--ink-soft); overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.envkv__v{color:var(--ink-2); font-weight:600; font-size:12px; background:var(--surface-2);
  border:1px solid var(--line); border-radius:5px; padding:1px 6px; flex:none}
.npref{display:contents}

/* akční lišta — ROZVRH na vlastní plné řádce (label lícuje s mřížkou nconf,
   select plné šířky = stejná rodina jako PREFERUJE), pod ním ghost akce a
   vypnout (destruktivní) vpravo. Konzistentní na všech šířkách, bez náhodných zlomů. */
.nactions{display:flex; flex-wrap:wrap; align-items:center; gap:8px 6px; margin-top:auto; padding-top:11px; border-top:1px solid var(--line)}
.nsched{display:flex; align-items:center; flex:1 1 100%; min-width:0}
.nsched__k{flex:none; width:82px; font-family:var(--mono); font-size:10px; font-weight:500;
  text-transform:uppercase; letter-spacing:.08em; color:var(--ink-soft); line-height:30px; white-space:nowrap}
.node-sched,.node-pref{font:inherit; font-family:var(--mono); font-size:13.5px; color:var(--ink-2); background:var(--surface);
  border:1px solid var(--line); border-radius:8px; height:30px; padding:0 8px; flex:1; min-width:0; max-width:100%; cursor:pointer;
  text-overflow:ellipsis; transition:border-color var(--step),color var(--step)}
.node-pref{width:100%}
.node-sched:hover,.node-pref:hover{border-color:var(--line-strong)}
.node-sched:disabled{opacity:.5; cursor:not-allowed}
/* explicitně nastavená hodnota (pref model / omezený rozvrh) — jemný akcent */
.node-pref.is-set,.node-sched.is-set{border-color:var(--accent-weak-2); color:var(--accent-600); font-weight:600}
.node-heal,.node-env{font:inherit; font-size:12px; font-weight:600; height:28px; padding:0 9px; border-radius:8px;
  border:1px solid transparent; background:none; color:var(--ink-soft); cursor:pointer;
  transition:background var(--step),color var(--step)}
.node-heal:hover,.node-env:hover{color:var(--accent-600); background:var(--surface-2)}
.node-toggle,.node-del{font:inherit; font-size:12px; font-weight:600; height:28px; padding:0 11px; border-radius:8px;
  cursor:pointer; border:1px solid var(--line-strong); background:var(--surface); color:var(--ink-2);
  white-space:nowrap; flex:none; transition:border-color var(--step),background var(--step),color var(--step)}
.node-toggle{margin-left:auto}
.node-toggle.is-on:hover{color:var(--neg); border-color:var(--neg); background:var(--neg-weak)}
.node-toggle.is-off{color:#fff; background:var(--pos); border-color:var(--pos)}
.node-toggle.is-off:hover{background:#186644; border-color:#186644}
.node-del{color:var(--ink-soft); border-color:transparent; background:none}
.node-del:hover{color:var(--neg); border-color:var(--neg); background:var(--neg-weak)}
.nfoot{display:flex; justify-content:space-between; flex-wrap:wrap; gap:2px 12px; font-family:var(--mono);
  font-size:11px; color:var(--ink-soft); letter-spacing:.01em}
.nfoot span:last-child{white-space:nowrap; flex-shrink:0}

/* ── ÚLOHY ────────────────────────────────────────────────────────────── */
.tasks{display:flex; flex-direction:column; gap:10px}
.tasks-now{padding:11px 15px; border-radius:var(--r); background:var(--pos-weak,#eaf7ef);
  border:1px solid var(--pos); color:var(--ink); font-weight:600; font-size:13px; line-height:1.45}
.tasks-now__u{color:var(--ink-soft); font-weight:400}
.tasks-now--idle{background:var(--surface); border-color:var(--line); color:var(--ink-soft); font-weight:500}
.taskrow{display:grid; grid-template-columns:14px minmax(150px,1fr) auto auto; align-items:center;
  gap:14px; font-size:13px; background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
  box-shadow:var(--shadow); padding:13px 16px}
.taskrow--on{border-color:var(--pos)}
.taskrow__dot{width:9px; height:9px; border-radius:50%; background:var(--ink-soft)}
.taskrow--on .taskrow__dot{background:var(--pos); animation:pulse-dot 1.9s infinite}
@keyframes pulse-dot{0%{box-shadow:0 0 0 0 rgba(30,122,82,.5)}70%{box-shadow:0 0 0 7px rgba(30,122,82,0)}100%{box-shadow:0 0 0 0 rgba(30,122,82,0)}}
.taskrow__name{font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--ink-2)}
.taskrow--on .taskrow__name{color:var(--ink)}
.spark{display:inline-flex; align-items:flex-end; gap:2px; height:28px}
.spark>i{width:5px; min-height:2px; border-radius:2px 2px 0 0; display:block;
  background:linear-gradient(180deg,#8590e8,var(--accent))}
.taskrow--on .spark>i:last-child{background:linear-gradient(180deg,var(--green),var(--green-deep))}
.taskrow__v{font-family:var(--font-mono); color:var(--ink-soft); white-space:nowrap; font-size:12px;
  font-variant-numeric:tabular-nums}

/* ── METRIKY ──────────────────────────────────────────────────────────── */
.eff{display:grid; grid-template-columns:repeat(auto-fit,minmax(165px,1fr)); gap:14px; margin-bottom:8px}
.effc{background:var(--surface); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow);
  padding:15px 17px; display:flex; flex-direction:column; gap:6px}
.effc__k{font-size:11px; text-transform:uppercase; letter-spacing:.05em; color:var(--ink-soft); font-weight:500}
.effc__v{font-family:var(--font-display); font-size:24px; font-weight:500; color:var(--ink);
  letter-spacing:-.02em; font-variant-numeric:tabular-nums}
.effc__u{font-size:12px; color:var(--ink-soft); font-weight:400; font-family:var(--font-mono)}
.chart-card{background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
  box-shadow:var(--shadow); padding:20px 22px; margin-top:18px}
.chart-card__head{display:flex; align-items:center; justify-content:space-between; gap:12px;
  flex-wrap:wrap; margin-bottom:12px}
.chart-card__title{margin:0; font-size:15px; font-weight:600; color:var(--ink)}
.seg{display:inline-flex; background:var(--surface-2); border:1px solid var(--line); border-radius:10px; padding:3px}
.seg__b{background:none; border:0; color:var(--ink-soft); font:inherit; font-size:12.5px; font-weight:500;
  padding:6px 13px; border-radius:7px; cursor:pointer; transition:.12s}
.seg__b.is-on{background:var(--accent); color:#fff}
.chart-legend{display:flex; gap:16px; font-size:11.5px; color:var(--ink-2); margin-bottom:10px}
.lg{display:flex; align-items:center; gap:6px}
.lg::before{content:""; width:11px; height:11px; border-radius:3px}
.lg--task::before{background:var(--accent)}
.lg--energy::before{background:var(--green)}
.chart{display:flex; align-items:flex-end; gap:3px; height:160px; overflow-x:auto; padding-top:6px}
.bar{flex:1 0 auto; min-width:16px; display:flex; flex-direction:column; align-items:center; gap:6px; height:100%}
.bar__cols{flex:1; display:flex; align-items:flex-end; justify-content:center; gap:2px; width:100%; min-height:0}
.bar__cols>i{width:7px; border-radius:3px 3px 0 0; min-height:1px; transition:height .3s}
.bar__t{background:linear-gradient(180deg,#8590e8,var(--accent))}
.bar__e{background:linear-gradient(180deg,var(--green),var(--green-deep))}
.bar:hover .bar__cols>i{filter:brightness(1.08)}
.bar__x{font-size:9.5px; color:var(--ink-soft); font-family:var(--font-mono); white-space:nowrap}
.nodebars{display:flex; flex-direction:column; gap:10px}
.nb{display:grid; grid-template-columns:150px 1fr auto; align-items:center; gap:12px; font-size:12.5px}
.nb__name{font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--ink)}
.nb__bar{height:9px; border-radius:99px; background:var(--surface-3); overflow:hidden;
  box-shadow:inset 0 0 0 1px var(--line)}
.nb__bar>i{display:block; height:100%; border-radius:99px; background:linear-gradient(90deg,var(--accent),#7c88e8)}
.nb__v{font-family:var(--font-mono); color:var(--ink-soft); white-space:nowrap; font-variant-numeric:tabular-nums}

/* ── badge dedikace + karta fronty (Přehled) ──────────────────────────── */
.dedi-badge{display:inline-block; margin-left:8px; padding:2px 9px; border-radius:99px;
  font-family:var(--font-mono); font-size:11px; font-weight:500; letter-spacing:.01em;
  color:var(--gold-ink); background:var(--gold-weak); border:1px solid #e6d3a8; vertical-align:middle}
.card--warn{border-color:var(--gold); background:var(--gold-weak)}
.card--warn .card__v b{color:var(--gold-ink)}

/* ── dávkové úlohy (Batch API) ────────────────────────────────────────── */
.batchjobs{display:flex; flex-direction:column; gap:10px}
.section-head--gap{margin-top:26px}
.bjob{background:var(--surface); border:1px solid var(--line); border-radius:var(--r-sm);
  padding:12px 14px; box-shadow:var(--shadow)}
.bjob--on{border-color:var(--accent-weak-2)}
.bjob__top{display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:8px}
.bjob__name{font-weight:500; color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.bjob__st{font-family:var(--font-mono); font-size:11px; padding:2px 9px; border-radius:99px;
  background:var(--surface-3); color:var(--ink-soft); white-space:nowrap; flex:none}
.bjob__st--running{background:var(--gold-weak); color:var(--gold-ink)}
.bjob__st--done{background:var(--pos-weak); color:var(--pos)}
.bjob__st--error,.bjob__st--failed{background:var(--neg-weak); color:var(--neg)}
.bjob__bar{height:8px; border-radius:99px; background:var(--surface-3); overflow:hidden}
.bjob__bar>i{display:block; height:100%; border-radius:99px;
  background:linear-gradient(90deg,var(--accent),#7c88e8); transition:width .4s}
.bjob--on .bjob__bar>i{background:linear-gradient(90deg,var(--green),var(--green-deep))}
.bjob__meta{margin-top:7px; font-family:var(--font-mono); font-size:11.5px; color:var(--ink-soft);
  font-variant-numeric:tabular-nums}
.bjob__fail{color:var(--neg)}

/* ── denní spotřeba (Přístup) ─────────────────────────────────────────── */
.usage-daily{display:flex; align-items:flex-end; gap:3px; height:130px; padding:10px 4px 0;
  border:1px solid var(--line); border-radius:var(--r); background:var(--surface); overflow-x:auto}
.uday{display:flex; flex-direction:column; align-items:center; gap:5px; flex:1; min-width:20px; height:100%}
.uday__bar{flex:1; display:flex; align-items:flex-end; width:100%; min-height:0}
.uday__bar>i{display:block; width:100%; max-width:14px; margin:0 auto; border-radius:3px 3px 0 0;
  min-height:1px; background:linear-gradient(180deg,#8590e8,var(--accent))}
.uday:hover .uday__bar>i{filter:brightness(1.08)}
.uday__x{font-family:var(--font-mono); font-size:9.5px; color:var(--ink-soft); white-space:nowrap}

/* ── stavy ────────────────────────────────────────────────────────────── */
.empty{text-align:center; color:var(--ink-soft); padding:44px 20px; border:1px dashed var(--line-strong);
  border-radius:var(--r); background:var(--surface)}
.muted{color:var(--ink-soft); padding:16px 4px}
.foot{text-align:center; color:var(--ink-soft); font-size:12px; margin:30px auto 0;
  font-family:var(--font-mono)}

/* ── MODELY (admin) ───────────────────────────────────────────────────── */
.mdl-quick{background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
  box-shadow:var(--shadow); padding:18px 20px; margin-bottom:8px}
.mdl-quick__row{display:flex; gap:10px; flex-wrap:wrap; align-items:center}
.mdl-input{flex:1 1 240px; min-width:0; background:var(--surface); border:1px solid var(--line-strong);
  color:var(--ink); border-radius:var(--r-sm); padding:10px 13px; font:inherit; font-family:var(--font-mono); font-size:13.5px}
.mdl-input::placeholder{color:var(--ink-soft)}
.mdl-input:focus{outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(59,76,202,.16)}
.mdl-select{flex:0 1 210px; background:var(--surface); border:1px solid var(--line-strong); color:var(--ink);
  border-radius:var(--r-sm); padding:10px 12px; font:inherit; font-size:13px; cursor:pointer}
.mdl-select:focus{outline:none; border-color:var(--accent)}
.mdl-quick .btn{flex:0 0 auto; white-space:nowrap}
.mdl-chips{display:flex; flex-wrap:wrap; gap:7px; align-items:center; margin-top:13px}
.mdl-chips__lbl{font-family:var(--font-mono); font-size:10.5px; text-transform:uppercase; letter-spacing:.06em;
  color:var(--ink-soft); margin-right:2px}
.mdl-chip{font-family:var(--font-mono); font-size:11.5px; padding:5px 11px; border-radius:99px;
  background:var(--surface-2); border:1px solid var(--line); color:var(--ink-2); cursor:pointer; transition:.12s}
.mdl-chip:hover{border-color:var(--accent); color:var(--accent-600)}
.mdl-hint{font-family:var(--font-mono); font-size:11px; color:var(--ink-soft); margin-top:10px; line-height:1.45}
.mdl-std{display:flex; flex-wrap:wrap; align-items:center; gap:7px 12px; margin:2px 2px 12px;
  font-family:var(--font-mono); font-size:12px; color:var(--ink-2)}
.mdl-std:empty{display:none}
.mdl-std__lbl{text-transform:uppercase; letter-spacing:.06em; font-size:10.5px; color:var(--ink-soft)}
.mdl-std__i{display:inline-flex; align-items:center; gap:6px}
.mdl-std__i code{color:var(--ink); font-family:var(--font-mono)}
.mdl-std__ok,.mdl-std__tick{color:var(--pos); font-variant-numeric:tabular-nums}
.mdl-std__bad,.mdl-std__x{color:var(--neg); font-variant-numeric:tabular-nums}
.mdl-std__sep{color:var(--line-strong)}
.mdl-fill{background:var(--pos-weak); border:1px solid var(--pos); color:var(--pos);
  font:inherit; font-size:11px; font-weight:600; padding:3px 9px; border-radius:99px; cursor:pointer;
  transition:.12s; white-space:nowrap}
.mdl-fill:hover{background:#d4ecdf}
.mdl-matrix{overflow-x:auto; border:1px solid var(--line); border-radius:var(--r); background:var(--surface);
  box-shadow:var(--shadow); -webkit-overflow-scrolling:touch}
.mx{border-collapse:separate; border-spacing:0; width:max-content; min-width:100%; font-size:12.5px;
  font-variant-numeric:tabular-nums}
.mx th,.mx td{border-bottom:1px solid var(--line); border-right:1px solid var(--line)}
.mx thead th{position:sticky; top:0; background:var(--surface-2); z-index:2; padding:9px 11px; vertical-align:bottom}
.mx-corner{position:sticky; left:0; z-index:3; text-align:left; font-family:var(--font-mono);
  text-transform:uppercase; letter-spacing:.06em; font-size:10.5px; color:var(--ink-soft); background:var(--surface-2)}
.mx-col{text-align:center; min-width:104px}
.mx-col__n{display:block; font-weight:600; font-size:12.5px; color:var(--ink); white-space:nowrap}
.mx-col__d{display:block; font-family:var(--font-mono); font-size:10px; color:var(--ink-soft); margin-top:3px; white-space:nowrap}
.mx-col.is-off{opacity:.62}
.mx-col.is-off .mx-col__n{color:var(--ink-soft)}
.mx-col.is-ws .mx-col__n::after{content:"●"; color:var(--pos); font-size:7px; vertical-align:middle; margin-left:6px}
.mx-col.is-off .mx-col__n::after{content:"○"; color:var(--off); font-size:7px; vertical-align:middle; margin-left:6px}
.mx-row{position:sticky; left:0; z-index:1; background:var(--surface); text-align:left; padding:8px 12px;
  font-family:var(--font-mono); font-size:12px; color:var(--ink-2); white-space:nowrap; max-width:230px;
  overflow:hidden; text-overflow:ellipsis}
.mx tbody tr:hover .mx-row{color:var(--ink)}
.mx tbody tr:hover td{background:var(--surface-2)}
.mx-row--req{color:var(--ink); box-shadow:inset 3px 0 0 var(--pos)}
.mx-req{display:inline-block; margin-left:8px; font-family:var(--font-mono); font-size:9px; font-weight:600;
  text-transform:uppercase; letter-spacing:.05em; color:var(--pos); background:var(--pos-weak);
  border:1px solid var(--pos); padding:1px 6px; border-radius:20px; vertical-align:middle}
.mx-c{text-align:center; padding:6px 8px}
.mx-btn{width:26px; height:26px; border-radius:7px; border:1px solid var(--line-strong); cursor:pointer;
  font-size:15px; font-weight:600; line-height:1; display:inline-grid; place-items:center; transition:.12s}
.mx-btn--add{background:var(--surface-2); color:var(--ink-soft)}
.mx-btn--add:hover{border-color:var(--pos); color:var(--pos); background:var(--pos-weak)}
.mx-btn--on{background:var(--pos-weak); border-color:var(--pos); color:var(--pos)}
.mx-btn--on:hover{border-color:var(--neg); color:var(--neg); background:var(--neg-weak)}
.mx-pend{font-family:var(--font-mono); font-size:10.5px; color:var(--gold-ink); white-space:nowrap; padding:0 4px}
.mx-dot{font-size:12px; line-height:1}
.mx-dot--on{color:var(--pos)}
.mx-dot--na{color:var(--off)}
.mx-empty{text-align:center; color:var(--ink-soft); padding:26px 16px}

/* ── CHAT ─────────────────────────────────────────────────────────────── */
.chat{display:flex; flex-direction:column; gap:14px}
.chat__thread{display:flex; flex-direction:column; gap:12px; min-height:340px; max-height:58vh;
  overflow-y:auto; padding:18px; border:1px solid var(--line); border-radius:var(--r);
  background:var(--surface); box-shadow:var(--shadow)}
.chat__empty{margin:auto; text-align:center; color:var(--ink-soft); max-width:460px; padding:26px 10px}
.chat__empty-mark{font-size:38px; margin-bottom:10px; opacity:.85}
.chat__empty p{margin:0; line-height:1.65; font-size:13.5px}
.bubble{max-width:82%; display:flex; flex-direction:column; gap:5px}
.bubble--user{align-self:flex-end; align-items:flex-end}
.bubble--bot{align-self:flex-start; align-items:flex-start}
.bubble__body{padding:11px 15px; border-radius:16px; font-size:14px; line-height:1.55; word-break:break-word}
.bubble--user .bubble__body{background:var(--accent); color:#fff; border-bottom-right-radius:5px}
.bubble--bot .bubble__body{background:var(--surface-2); border:1px solid var(--line); color:var(--ink);
  border-bottom-left-radius:5px}
.bubble.is-pending .bubble__body{color:var(--ink-soft); font-family:var(--font-mono);
  animation:pulse-fade 1.2s ease-in-out infinite}
@keyframes pulse-fade{0%,100%{opacity:.45}50%{opacity:.9}}
.bubble__meta{font-family:var(--font-mono); font-size:10.5px; color:var(--ink-soft); letter-spacing:.02em;
  display:flex; gap:7px; flex-wrap:wrap; padding:0 4px}
.bubble__node{color:var(--accent-600)} .bubble__model{color:var(--gold-ink)}
.chat__meta{display:flex; flex-wrap:wrap; gap:12px}
.chat__stat{display:flex; flex-direction:column; gap:2px; padding:11px 15px; border-radius:var(--r-sm);
  background:var(--surface); border:1px solid var(--line); box-shadow:var(--shadow); flex:1 1 150px}
.chat__stat-k{font-size:10px; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-soft);
  font-family:var(--font-mono)}
.chat__stat b{font-family:var(--font-mono); font-size:18px; color:var(--ink); font-variant-numeric:tabular-nums}
.chat__stat b.is-us{color:var(--pos)}
.chat__stat:last-child b{color:var(--gold-ink)}
.chat__composer{display:flex; flex-direction:column; gap:10px; background:var(--surface);
  border:1px solid var(--line-strong); border-radius:var(--r); padding:12px 14px; box-shadow:var(--shadow);
  transition:border-color var(--step),box-shadow var(--step)}
.chat__composer:focus-within{border-color:var(--accent); box-shadow:0 0 0 3px rgba(59,76,202,.14)}
.chat__input{width:100%; min-height:26px; resize:none; background:transparent; border:0; color:var(--ink);
  font:inherit; font-size:15px; padding:2px; line-height:1.5}
.chat__input::placeholder{color:var(--ink-soft)}
.chat__input:focus{outline:none}
.chat__controls{display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap}
.chat__controls-r{display:flex; align-items:center; gap:14px; margin-left:auto}
.chat__cmp-wrap{display:flex; align-items:center; gap:7px; font-size:11px; color:var(--ink-soft);
  text-transform:uppercase; letter-spacing:.05em; font-family:var(--font-mono)}
.chat__cmp,.mini-cmp{background:var(--surface); border:1px solid var(--line-strong); color:var(--ink);
  border-radius:8px; padding:6px 9px; font:inherit; font-size:12px; cursor:pointer}
.chat__cmp:focus,.mini-cmp:focus{outline:none; border-color:var(--accent)}
.mini-cmp{padding:3px 7px; font-size:12px; margin-left:4px}
.chat__send{white-space:nowrap; padding:9px 22px}
.chat__clear{font-size:12.5px}

/* ── PŘÍSTUP: login ───────────────────────────────────────────────────── */
.login{display:flex; justify-content:center; padding:16px 0}
.login__card{width:100%; max-width:430px; background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r); box-shadow:var(--shadow-md); padding:26px}
.login__head{display:flex; gap:13px; align-items:flex-start; margin-bottom:18px}
.login__mark{font-size:26px; line-height:1}
.login__title{margin:0 0 5px; font-family:var(--font-display); font-size:20px; font-weight:500}
.login__sub{margin:0; font-size:12.5px; color:var(--ink-2); line-height:1.55}
.login__form{display:flex; flex-direction:column; gap:12px}
.login__btn{margin-top:4px; justify-content:center}
.login__err{margin:12px 0 0; color:var(--neg); font-size:12.5px; font-family:var(--font-mono)}
.fld{display:flex; flex-direction:column; gap:5px}
.fld__k{font-size:11px; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-soft);
  font-family:var(--font-mono)}
.fld__i{background:var(--surface); border:1px solid var(--line-strong); border-radius:var(--r-sm);
  color:var(--ink); font:inherit; font-size:14px; padding:10px 12px}
.fld__i::placeholder{color:var(--ink-soft)}
.fld__i:focus{outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(59,76,202,.14)}
.whoami{color:var(--accent-600); font-family:var(--font-mono)}

/* ── PŘÍSTUP: formuláře klíč/uživatel ─────────────────────────────────── */
.keygen{display:flex; gap:10px; flex-wrap:wrap; margin:2px 0 14px}
.keygen__i{flex:1 1 200px; min-width:0}
.keygen .btn{flex:0 0 auto; white-space:nowrap}
.keynew{display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin:-6px 0 16px; padding:11px 14px;
  border-radius:var(--r-sm); background:var(--pos-weak); border:1px solid var(--pos)}
.keynew__k{font-size:12px; color:var(--ink-2)}
.keynew__v{font-family:var(--font-mono); font-size:13px; color:var(--pos); word-break:break-all;
  background:var(--surface); padding:4px 8px; border-radius:6px; border:1px solid #bfe0cd}

/* ── PŘÍSTUP: tabulky ─────────────────────────────────────────────────── */
.tablewrap{overflow-x:auto; margin-bottom:8px; border:1px solid var(--line); border-radius:var(--r);
  background:var(--surface); box-shadow:var(--shadow)}
.tbl{width:100%; border-collapse:collapse; font-size:13px; min-width:540px}
.tbl thead th{text-align:left; font-size:10px; text-transform:uppercase; letter-spacing:.07em;
  color:var(--ink-soft); font-weight:600; padding:12px 14px; border-bottom:1px solid var(--line-strong);
  background:var(--surface-2)}
.tbl td{padding:12px 14px; border-bottom:1px solid var(--line); vertical-align:top}
.tbl tbody tr:last-child td{border-bottom:0}
.tbl tbody tr:hover{background:var(--surface-2)}
.tbl tr.is-paused{opacity:.55}
.tbl__num{text-align:right; font-family:var(--font-mono); font-variant-numeric:tabular-nums; white-space:nowrap}
.tbl th.tbl__num,.tbl th.tbl__act{text-align:right}
.tbl__ago{color:var(--ink-soft); font-family:var(--font-mono); font-size:11.5px; white-space:nowrap}
.tbl__act{text-align:right; white-space:nowrap}
.tbl__act .linkbtn{margin-left:12px}
.tbl__sub{margin-top:3px}
.tbl__sub code{font-family:var(--font-mono); font-size:11px; color:var(--ink-soft)}
.tbl__empty{text-align:center; color:var(--ink-soft); padding:20px}
.kdot{display:inline-block; width:8px; height:8px; border-radius:50%; margin-right:7px; vertical-align:middle}
.kdot.is-on{background:var(--pos)}
.kdot.is-off{background:var(--off)}

/* ── responzivita ─────────────────────────────────────────────────────── */
@media (max-width:1000px){
  .mtop{display:flex; align-items:center; gap:12px; position:sticky; top:0; z-index:44;
    background:linear-gradient(180deg,var(--brand),#10132e); color:#fff;
    padding:11px 16px; border-bottom:1px solid rgba(255,255,255,.08)}
  .mtop__brand{font-weight:600; font-size:16px; letter-spacing:-.01em; display:flex; align-items:center; gap:8px}
  .mtop__mark{font-size:15px}
  .mtop__live{margin-left:auto}
  .hamb{display:flex; flex-direction:column; justify-content:center; gap:4px; width:40px; height:40px;
    background:rgba(255,255,255,.10); border:0; border-radius:9px; cursor:pointer; padding:0 10px; flex:none}
  .hamb span{display:block; height:2px; width:100%; background:#fff; border-radius:2px;
    transition:transform .22s, opacity .22s}
  .hamb[aria-expanded="true"] span:nth-child(1){transform:translateY(6px) rotate(45deg)}
  .hamb[aria-expanded="true"] span:nth-child(2){opacity:0}
  .hamb[aria-expanded="true"] span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}
  .sidebar{transform:translateX(-100%); transition:transform .24s cubic-bezier(.2,.7,.3,1);
    box-shadow:8px 0 40px rgba(0,0,0,.42); z-index:50; width:min(280px,86vw)}
  .sidebar.is-open{transform:none}
  .scrim{display:block; position:fixed; inset:0; background:rgba(10,12,25,.5); z-index:45;
    -webkit-backdrop-filter:blur(2px); backdrop-filter:blur(2px)}
  .content{margin-left:0}
  .content__inner{padding:22px 18px 48px}
  body.menu-open{overflow:hidden}
  .hero{grid-template-columns:1fr}
}
@media (max-width:640px){
  .taskrow{grid-template-columns:14px 1fr; gap:4px 10px}
  .spark{grid-column:2}
  .taskrow__v{grid-column:2}
  .nb{grid-template-columns:1fr; gap:4px}
  .card--wide{grid-column:span 1}
  .clusterlive__vitals{display:none}
}
@media (max-width:560px){
  .content__inner{padding:18px 14px 40px}
  .hero{padding:20px 18px}
  .hero__gauges{justify-content:center; gap:18px}
  .nodes{grid-template-columns:1fr}
  .node{gap:11px; padding:16px 16px 12px 19px}
  .nbody{padding:12px 14px 11px}
  .nmetrics{gap:12px 22px}
  .nvitals{gap:14px}
  .mdl-select,.mdl-quick .btn{flex:1 1 100%}
  .keygen .btn{flex:1 1 100%}
  .chat__thread{max-height:54vh; padding:14px}
  .bubble{max-width:92%}
  .chat__stat{flex:1 1 45%}
  .chat__cmp-wrap{flex:1 1 100%}
  .chat__controls-r{margin-left:0; width:100%; justify-content:space-between}
}
@media (pointer:coarse){
  .linkbtn{padding:6px 4px}
  .tbl__act .linkbtn{display:inline-block; min-height:32px; line-height:20px}
}
@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms !important; animation-iteration-count:1 !important}
  .gauge-ring,.bar__cols>i{transition:none}
  .tab.is-active{animation:none}
}

/* (stavy broken/env chipů jsou definované v bloku NODY výše) */

/* ══ KARTY NODŮ — přístrojový panel v3 (kompletní redesign 2026-07-21) ══════
   Tři zóny oddělené hairlines od hrany k hraně: štítek stroje / přístrojová
   deska (tónovaná) / konfigurační zásuvka. Hostname v mono = strojní štítek.
   Bary = obsazení zdroje (≥92 % červená). Ovladače srostlé s prefixem. */
.nodes{display:grid; grid-template-columns:repeat(auto-fill,minmax(330px,1fr)); gap:16px; align-items:stretch}
.node{position:relative; display:flex; flex-direction:column; gap:0; padding:0; overflow:hidden;
  background:var(--surface); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow);
  transition:box-shadow var(--step)}
.node:hover{box-shadow:var(--shadow-md)}
.node::before{content:""; position:absolute; left:0; top:0; bottom:0; width:3px; z-index:1}
.nz{padding:13px 18px}
.nzhead{padding:14px 18px 11px}
.nzid{display:flex; align-items:center; justify-content:space-between; gap:10px; min-width:0}
.node__name{font-family:var(--mono); font-weight:600; font-size:15px; letter-spacing:.01em; color:var(--ink);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0}
.nsub{display:flex; align-items:center; gap:7px; margin-top:5px; font-family:var(--mono); font-size:11px;
  color:var(--ink-soft); min-width:0}
.nsub__gpu{white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0}
.nsub__x{white-space:nowrap}
.nstate{flex:none; display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:600;
  padding:3px 11px; border-radius:99px; white-space:nowrap}
.nstate__dot{width:7px; height:7px; border-radius:50%; background:currentColor; flex:none}
.nstate--free{background:var(--pos-weak); color:var(--pos)}
.nstate--busy{background:var(--gold-weak); color:var(--gold-ink)}
.nstate--render{background:var(--neg-weak); color:var(--neg)}
.nstate--render .nstate__dot{animation:dotpulse 1.6s infinite}
.nstate--broken{background:var(--neg-weak); color:var(--neg)}
.nstate--sched{background:var(--rest-weak); color:var(--rest)}
.nstate--manual,.nstate--offline{background:var(--surface-3); color:var(--ink-soft)}
@keyframes dotpulse{0%,100%{opacity:1}50%{opacity:.3}}
@media (prefers-reduced-motion:reduce){.nstate--render .nstate__dot{animation:none}}

/* zóna 2: přístrojová deska */
.nzpanel{background:var(--surface-2); border-top:1px solid var(--line); border-bottom:1px solid var(--line);
  display:flex; flex-direction:column; gap:12px; padding:14px 18px}
.nmetrics{display:grid; grid-template-columns:1fr 1fr; gap:13px 20px}
.nm{min-width:0}
.nm__row{display:flex; justify-content:space-between; align-items:baseline; gap:8px; min-width:0}
.nm__k{font:600 10px/1.4 var(--font-sans); text-transform:uppercase; letter-spacing:.05em; color:var(--ink-soft); white-space:nowrap}
.nm__v{font:600 13.5px/1.4 var(--mono); font-variant-numeric:tabular-nums; color:var(--ink);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0}
.nm__bar{height:4px; border-radius:99px; background:#E2E5F0; margin-top:7px; overflow:hidden}
.nm__bar>i{display:block; height:100%; border-radius:99px; transition:width .5s ease}
.bar-gpu>i,.bar-cpu>i{background:var(--accent)}
.bar-vram>i,.bar-ram>i{background:var(--green-deep)}
.bar--hot>i{background:var(--neg)}
.nvitals{display:grid; grid-template-columns:1.25fr 0.9fr 1.15fr 0.9fr; gap:10px; border-top:1px solid var(--line); padding-top:11px; min-width:0}
.nv{min-width:0; overflow:hidden}
.nv__k{display:block; font:600 10px/1.4 var(--font-sans); text-transform:uppercase; letter-spacing:.05em; color:var(--ink-soft); white-space:nowrap}
.nv__v{display:block; margin-top:2px; font:600 13px/1.4 var(--mono); font-variant-numeric:tabular-nums; color:var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.nv__v--warn{color:var(--gold-ink)}
.nv__dim{color:var(--ink-soft); font-weight:500}
.temp--ok{color:var(--pos)} .temp--warm{color:var(--gold-ink)} .temp--hot{color:var(--neg)}
.npips{display:flex; gap:3px; margin-top:6px}
.pip{width:12px; height:5px; border-radius:2px; background:#E2E5F0; box-shadow:inset 0 0 0 1px var(--line)}
.pip.on{background:var(--gold); box-shadow:none}
/* klidové stavy uvnitř desky */
.nzpanel .nrest{display:flex; gap:12px; align-items:flex-start; padding:4px 0; background:transparent; border:0; border-radius:0}
.nzpanel .nrest__ic{border:0}
.nrest__ic{flex:none; width:34px; height:34px; border-radius:50%; display:grid; place-items:center;
  font-size:15px; background:var(--surface-3); color:var(--ink-soft)}
.node--broken .nrest__ic,.node--render .nrest__ic{background:var(--neg-weak); color:var(--neg)}
.node--sched .nrest__ic{background:var(--rest-weak); color:var(--rest)}
.nrest__t{font-weight:600; font-size:13.5px; color:var(--ink)}
.nrest__d{font-family:var(--mono); font-size:11.5px; color:var(--ink-soft); margin-top:3px; overflow-wrap:anywhere}
.nwarn{font-size:12px; font-weight:600; color:var(--gold-ink); background:var(--gold-weak);
  border:1px solid #e6d3a8; border-radius:8px; padding:6px 10px}
.ninfo{font-size:12px; font-weight:600; color:#39418f; background:#eef0fc;
  border:1px solid #cdd3f4; border-radius:8px; padding:6px 10px}
.ninstall{font-size:12px; font-weight:500; color:var(--gold-ink); background:var(--gold-weak);
  border:1px solid #e6d3a8; border-radius:8px; padding:6px 10px; margin-top:9px}

/* zóna 3: konfigurační zásuvka */
.nzconf{padding:12px 18px 13px; flex:1; display:flex; flex-direction:column}
.nstack{flex:1}
.node--offline .nzconf,.node--manual .nzconf,.node--sched .nzconf,.node--render .nzconf,.node--broken .nzconf{flex:0 0 auto}
.node--offline .nstack,.node--manual .nstack,.node--sched .nstack,.node--render .nstack,.node--broken .nstack{flex:0 0 auto}
.node--offline .nzpanel,.node--manual .nzpanel,.node--sched .nzpanel,.node--render .nzpanel,.node--broken .nzpanel{flex:1}
.nchips{display:flex; flex-wrap:nowrap; gap:6px; overflow:hidden; min-width:0; height:24px}
.nchips .chip{flex:none}
.nchips .chip--more{flex:none; background:var(--surface-3); color:var(--ink-soft); font-weight:600}
.nconf__none{font-family:var(--mono); font-size:11px; line-height:inherit; color:var(--ink-soft)}
.nchips .chip{font:500 12px/18px var(--mono); padding:2px 10px; border-radius:8px;
  background:var(--surface-2); border:1px solid var(--line); color:var(--ink-2);
  max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.nchips .chip--act{background:var(--accent-weak); border-color:var(--accent-weak-2); color:var(--accent-600); font-weight:600}
.nchips .chip--act::before{content:""; display:inline-block; width:5px; height:5px; border-radius:50%;
  background:currentColor; margin-right:6px; vertical-align:2px}
.nchips .chip--emb{background:transparent; border-style:dashed; color:var(--ink-soft)}
.nchips .chip--muted{opacity:.55}
.nenvline{margin-top:9px; height:17px; line-height:17px; font-family:var(--mono); font-size:11px;
  color:var(--ink-soft); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0}
.ntool{display:flex; align-items:center; gap:7px; margin-top:11px; flex-wrap:wrap; min-width:0}
.ntool--btns{margin-top:8px}
.ntool__gap{flex:1}
.ctl{display:inline-flex; align-items:stretch; border:1px solid var(--line-strong); border-radius:9px;
  overflow:hidden; background:var(--surface); max-width:100%; min-width:0; flex:1 1 100%}
.ctl>select{width:100%}
.ctl__k{display:flex; align-items:center; padding:0 8px; font:600 9.5px var(--font-sans); text-transform:uppercase;
  letter-spacing:.06em; color:var(--ink-soft); background:var(--surface-2); border-right:1px solid var(--line); flex:none}
.ctl>select{border:none; font:600 12.5px/1 var(--mono); color:var(--ink); background:transparent;
  padding:7px 22px 7px 9px; appearance:none; -webkit-appearance:none; cursor:pointer; min-width:0;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='6'%3E%3Cpath d='M1 1l3.5 3.5L8 1' stroke='%235B6178' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 8px center}
.ctl>select.is-set{color:var(--accent-600)}
.ctl>select:disabled{color:var(--ink-soft); cursor:default}
.node-env,.node-heal,.node-del{font:600 12px var(--font-sans); color:var(--ink-soft); background:none;
  border:none; padding:7px 6px; border-radius:8px; cursor:pointer}
.node-env:hover,.node-heal:hover{color:var(--accent-600); background:var(--accent-weak)}
.node-del:hover{color:var(--neg); background:var(--neg-weak)}
.node-toggle{font:600 12px var(--font-sans); padding:7px 13px; border-radius:9px; cursor:pointer; flex:none}
.node-toggle.is-on{color:var(--ink-2); background:var(--surface); border:1px solid var(--line-strong)}
.node-toggle.is-on:hover{color:var(--neg); border-color:var(--neg); background:var(--neg-weak)}
.node-toggle.is-off{color:#fff; background:var(--pos); border:1px solid var(--pos)}
.node-toggle.is-off:hover{background:#186644; border-color:#186644}
.nfoot{display:flex; justify-content:space-between; align-items:baseline; gap:8px;
  margin-top:11px; padding-top:10px; border-top:1px solid var(--line);
  font-family:var(--mono); font-size:10.5px; color:var(--ink-soft)}
.nfoot span:first-child{flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.nfoot span:last-child{white-space:nowrap; flex:none}
.ntr{flex:none; font:600 9.5px var(--mono); letter-spacing:.05em; padding:1px 7px; border-radius:99px}
.ntr--ws{background:var(--accent-weak); color:var(--accent-600)}
.ntr--http{background:var(--gold-weak); color:var(--gold-ink)}
.nsite{flex:none; font:600 9.5px var(--mono); letter-spacing:.05em; background:#ece8fa; color:#493c97;
  padding:1px 7px; border-radius:99px}
@media (max-width:560px){
  .nz,.nzhead,.nzpanel,.nzconf{padding-left:14px; padding-right:14px}
}


/* hromadná lišta nad mřížkou nodů */
.nodes .empty{grid-column:1/-1}
.bulkbar{display:flex; align-items:center; flex-wrap:wrap; gap:8px; margin:0 0 16px;
  padding:10px 14px; background:var(--surface); border:1px solid var(--line); border-radius:12px}
.bulkbar__t{font:600 10px var(--font-sans); text-transform:uppercase; letter-spacing:.08em; color:var(--ink-soft); margin-right:2px}
.bulkbar .ctl{flex:0 1 auto !important}
.bulkbar .ctl>select{width:auto; max-width:180px}
.bulk-apply{font:600 12px var(--font-sans); color:var(--ink-2); background:var(--surface-2);
  border:1px solid var(--line-strong); padding:7px 11px; border-radius:9px; cursor:pointer}
.bulk-apply:hover{color:var(--accent-600); border-color:var(--accent); background:var(--accent-weak)}
@media (max-width:560px){.bulkbar{padding:9px 11px}}

/* ══ SYSTÉM OVLADAČŮ — jediný zdroj pravdy pro tlačítka a selecty ═══════════
   Vše v kartách i hromadné liště: výška 30 px, radius 9, Inter 600 12px
   (hodnoty selectů mono). Varianty jen sémantikou barev: neutrální /
   akcentový hover / destruktivní hover / pozitivní. */
:root{--ctl-h:30px}
.node-env,.node-heal,.node-del,.node-toggle,.bulk-apply{
  display:inline-flex; align-items:center; justify-content:center; height:var(--ctl-h);
  padding:0 12px; border-radius:9px; font:600 12px var(--font-sans); cursor:pointer;
  color:var(--ink-2); background:var(--surface); border:1px solid var(--line-strong);
  transition:color var(--step),background var(--step),border-color var(--step)}
.node-env:hover,.node-heal:hover,.bulk-apply:hover{color:var(--accent-600); border-color:var(--accent); background:var(--accent-weak)}
.node-del:hover{color:var(--neg); border-color:var(--neg); background:var(--neg-weak)}
.node-toggle.is-on:hover{color:var(--neg); border-color:var(--neg); background:var(--neg-weak)}
.node-toggle.is-off{color:#fff; background:var(--pos); border-color:var(--pos)}
.node-toggle.is-off:hover{background:#186644; border-color:#186644}
.bulkbar .bulk-apply{background:var(--surface-2)}
.ctl{height:var(--ctl-h); border-radius:9px}
.ctl__k{font:600 9.5px var(--font-sans); text-transform:uppercase; letter-spacing:.06em}
.ctl>select{height:100%; padding:0 24px 0 9px; line-height:normal}
.bulkbar .ctl>select{width:auto}
/* stav „otevřeno": akcentový rámeček celého ovladače */
.ctl:has(>select:focus-visible){border-color:var(--accent)}
@supports selector(select:open){
  .ctl:has(>select:open){border-color:var(--accent)}
}

/* ── OTEVŘENÝ DROPDOWN ──────────────────────────────────────────────────────
   Fallback: stylované options (font/barvy) i v nativním popupu. */
select{color-scheme:light}
select option{font-family:var(--mono); font-size:12.5px; color:var(--ink); background:var(--surface)}
/* Chrome 135+: plně stylovatelný picker — popup jako karta v designu aplikace */
@supports selector(::picker(select)){
  .ctl>select,.bulkbar select{appearance:base-select; display:flex; align-items:center}
  .ctl>select selectedcontent{display:flex; align-items:center; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
  .ctl>select::picker-icon,.bulkbar select::picker-icon{display:none}
  .ctl>select::picker(select),.bulkbar select::picker(select){
    appearance:base-select; background:var(--surface); border:1px solid var(--line-strong);
    border-radius:11px; box-shadow:var(--shadow-md); padding:5px; margin-top:5px; min-width:anchor-size(width)}
  .ctl>select option,.bulkbar select option{
    position:relative; display:flex; align-items:center; padding:8px 11px 8px 31px; border-radius:8px;
    font:600 12.5px var(--mono); color:var(--ink); background:transparent; cursor:pointer}
  .ctl>select option::checkmark,.bulkbar select option::checkmark{
    position:absolute; left:10px; top:50%; transform:translateY(-50%); width:14px}
  .ctl>select option:hover,.ctl>select option:focus,
  .bulkbar select option:hover,.bulkbar select option:focus{background:var(--accent-weak); color:var(--accent-600)}
  .ctl>select option:checked,.bulkbar select option:checked{color:var(--accent-600)}
  .ctl>select option::checkmark,.bulkbar select option::checkmark{color:var(--accent-600)}
}

/* bulkbar: select a jeho „nastavit všem" tvoří jednu srostlou skupinu */
.bulkgrp{display:inline-flex; align-items:stretch}
.bulkgrp .ctl{border-radius:9px 0 0 9px; border-right:0}
.bulkgrp .bulk-apply{border-radius:0 9px 9px 0}
