/* Administrácia (/sprava/) aj zákaznícky portál (/portal/*.php).
   Tokeny sú v /assets/tokens.css — načítava sa PRED týmto súborom.

   Redizajn 6. 8. 2026 podľa handoffu „UR Portál". Rovnaká reč ako marketingové
   stránky: serif nadpisy, mono metadáta a čísla, vlásočnicové linky, hranaté
   plochy, žiadne tiene. Farba sa v ÚDAJOCH nepoužíva — závažnosť nesie typografia.
   Výnimkou sú hlášky a validácia formulárov, kde je farba funkčná. */

*{box-sizing:border-box}
body{margin:0;font-family:var(--font-sans);color:var(--ink);background:var(--page-bg);
  line-height:1.6;font-size:var(--text);-webkit-font-smoothing:antialiased}
a{color:var(--ink);text-decoration:none;border-bottom:1px solid var(--line)}
a:hover{color:var(--action-d);border-bottom-color:var(--action-d);text-decoration:none}
.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}
.muted{color:var(--steel)}
.sm{font-size:12.5px}
.right{text-align:right}
.nowrap{white-space:nowrap}
.spacer{flex:1}

/* ---------- tlačidlá ---------- */
/* Mono verzálky, hranaté, bez tieňa a bez posunu. */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;
  font-family:var(--font-mono);font-weight:500;font-size:var(--btn-size);letter-spacing:var(--btn-ls);
  text-transform:uppercase;padding:var(--btn-pad);cursor:pointer;
  border:var(--btn-border,1px) solid var(--btn-2-line,#cbd3d9);background:var(--paper,#fff);color:var(--ink,#1b2127);
  text-decoration:none;min-height:var(--tap,44px)}
.btn:hover{background:var(--btn-2-hover);border-color:var(--action);color:var(--ink)}
/* Náhradné hodnoty vo var() nie sú kozmetika. Keď prehliadač servíruje starý
   tokens.css z cache, --action neexistuje, background zmizne — a ostane biely
   text na bielom podklade. Presne takto sa stratilo „Otvoriť dizajnér"
   a akcie v tabuľke projektov. Farba tlačidla musí prežiť aj bez tokenov. */
.btn.primary{background:var(--action,#3e7fb4);color:#fff;border-color:var(--action-d,#35709f)}
.btn.primary:hover{background:var(--action-d,#35709f);border-color:var(--action-d,#35709f);color:#fff}
.btn.ghost{background:transparent;color:var(--steel,#333c44)}
.btn.ghost:hover{color:var(--ink);border-color:var(--ink)}
.btn.danger{background:var(--red,#b23f35);color:#fff;border-color:var(--red,#b23f35)}
.btn.danger:hover{background:#8c3030;border-color:#8c3030;color:#fff}
.btn.royal{background:var(--action,#3e7fb4);color:#fff;border-color:var(--action-d,#35709f)}
.btn.royal:hover{background:var(--action-d,#35709f);border-color:var(--action-d,#35709f);color:#fff}
.btn.sm{padding:7px 12px;font-size:10.5px;min-height:0}
.btn.lg{padding:14px 24px;font-size:12.5px}
.btn.full{width:100%;justify-content:center}

/* ---------- topbar ---------- */
.adm-top{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:var(--space-5);
  height:var(--topbar-h);padding:0 var(--space-5);background:var(--paper);
  border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:10px;font-weight:600;font-size:15px;
  letter-spacing:-.01em;color:var(--ink);border:0}
.brand:hover{text-decoration:none;color:var(--ink)}
.brand b{color:inherit;font-weight:600}
.brand .mark{width:24px;height:24px;display:block;background:none;box-shadow:none;color:var(--ink)}
.brand .mark svg{width:24px;height:24px;display:block}

.adm-nav{display:flex;gap:10px;margin-left:var(--space-5)}
.adm-nav a{padding:8px 14px;border:1px solid var(--tab-line);background:var(--tab-bg);
  font-family:var(--font-mono);font-size:var(--nav);letter-spacing:var(--ls-nav);
  text-transform:uppercase;color:var(--steel);display:inline-flex;align-items:center}
.adm-nav a:hover{background:var(--tab-hover);color:var(--ink)}
.adm-nav a.on{background:var(--action,#3e7fb4);border-color:var(--action-d,#35709f);color:#fff}
.adm-user{margin-left:auto;display:flex;align-items:center;gap:var(--space-3);
  font-family:var(--font-mono);font-size:var(--nav);letter-spacing:var(--ls-nav);
  text-transform:uppercase;color:var(--steel-2)}

.adm-main{max-width:var(--shell);margin:0 auto;padding:var(--pad-y) var(--pad-x) var(--space-8)}
.adm-foot{color:var(--steel-2);padding:var(--space-5) var(--pad-x);
  font-family:var(--font-mono);font-size:var(--nav);letter-spacing:var(--ls-nav);
  text-transform:uppercase;max-width:var(--shell);margin:0 auto}

/* Hlavička stránky: nadpis a pod ním 1px ink linka — rovnako ako na webe. */
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4);
  flex-wrap:wrap;margin:0 0 var(--block-gap);padding-bottom:0;border:0}
.page-head h1{font-family:var(--font-serif);font-size:var(--h1-sub);margin:0;
  letter-spacing:var(--ls-h1);font-weight:600;line-height:1.15}

/* ---------- hlášky ---------- */
/* Jediné miesto, kde farba nesie význam. Bez zaoblenia, farba je v ľavej linke. */
.flash{padding:12px 16px;margin-bottom:var(--space-5);font-size:var(--text);
  border:1px solid var(--line);border-left:3px solid var(--steel);background:var(--paper-2)}
.flash.ok{background:var(--green-bg);color:var(--green-text);border-color:var(--line);border-left-color:var(--green)}
.flash.err{background:var(--red-bg);color:var(--red-text);border-color:var(--line);border-left-color:var(--red)}

/* ---------- štatistiky ---------- */
/* Veľké mono číslo, mono popis nad ním. Bez rámu, oddeľuje ich linka. */
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--block-gap);margin-bottom:var(--block-gap)}
.stat{background:var(--paper);border:1px solid var(--line);padding:16px 18px}
.stat .k{font-family:var(--font-mono);font-size:var(--meta);letter-spacing:var(--ls-meta);
  text-transform:uppercase;color:var(--steel-2);font-weight:400}
.stat .v{font-family:var(--font-mono);font-size:var(--num-lg);font-weight:400;
  letter-spacing:-.01em;margin:6px 0 2px;font-variant-numeric:tabular-nums;color:var(--ink)}
.stat .s{color:var(--steel);font-size:13px}
/* Handoff: závažnosť údaja sa nenesie farbou. Číslo zostáva ink, rozdiel robí popis. */
.stat.ok .v{color:var(--ok-text)} .stat.warn .v{color:var(--warn-text)} .stat.bad .v{color:var(--error-text)}

/* ---------- panely ---------- */
/* v2: panel je jediný nosič obsahu — biela výplň, vlásočnicový rám, hlavička
   s vlastnou výplňou a mono názvom. Obsah NIKDY neleží priamo na ploche stránky. */
.panel{background:var(--paper);border:1px solid var(--line);padding:0;margin-bottom:var(--block-gap)}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);
  background:var(--panel-head);border-bottom:1px solid var(--line);
  padding:12px var(--panel-pad);margin:0}
.panel-head h2{font-family:var(--font-mono);font-size:var(--meta);letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-2);margin:0;font-weight:400}
.panel > :not(.panel-head){padding-left:var(--panel-pad);padding-right:var(--panel-pad)}
.panel > .tbl{width:calc(100% - 2*var(--panel-pad));margin:4px var(--panel-pad) 14px}
.panel-body{padding:4px var(--panel-pad) 14px}
.card2{display:grid;grid-template-columns:1.4fr 1fr;gap:var(--block-gap)}
.quick{display:flex;flex-direction:column;gap:var(--space-2);align-items:flex-start}
.quick .btn{width:100%;justify-content:flex-start}

/* ---------- tabuľky ---------- */
.tbl{width:100%;border-collapse:collapse;font-size:var(--text)}
.tbl th{text-align:left;font-family:var(--font-mono);font-size:var(--meta);
  letter-spacing:var(--ls-meta);text-transform:uppercase;color:var(--steel-2);font-weight:400;
  padding:14px var(--space-3) 10px 0;border-bottom:1px solid var(--line-strong)}
.tbl td{padding:14px var(--space-3) 14px 0;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl tr:hover td{background:var(--paper-2)}
.tbl td.right,.tbl th.right{text-align:right;padding-right:0}
.tbl .mono{font-size:var(--num)}

/* ---------- odznaky stavu ---------- */
/* Mono nálepka namiesto farebnej pilulky — presne ako ■ MERANÉ / ◐ ODHAD v handoffe. */
.chip{display:inline-flex;align-items:center;gap:6px;padding:0;background:none;
  font-family:var(--font-mono);font-size:var(--nav);letter-spacing:var(--ls-nav);
  text-transform:uppercase;color:var(--steel)}
.chip-ok{background:var(--ok-bg);color:var(--ok-text);border:1px solid var(--ok);padding:3px 8px}
.chip-warn{background:var(--warn-bg);color:var(--warn-text);border:1px solid var(--warn);padding:3px 8px}
.chip-bad{background:var(--error-bg);color:var(--error-text);border:1px solid var(--error);padding:3px 8px}
.chip .ci{font-size:10px;line-height:1}

/* nástroje nad tabuľkou */
.tbl-tools{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;margin-bottom:var(--space-4)}
.tbl-tools input[type=search]{min-width:230px}
.tbl-tools .count{font-family:var(--font-mono);font-size:var(--nav);letter-spacing:var(--ls-nav);
  text-transform:uppercase;color:var(--steel-2);margin-left:auto}
.tbl thead th{position:sticky;top:var(--topbar-h);background:var(--paper);z-index:1}
.tbl th.sortable{cursor:pointer;user-select:none;white-space:nowrap}
.tbl th.sortable:hover{color:var(--ink)}
.tbl th .arw{opacity:.35;font-size:10px}
.tbl th[aria-sort] .arw{opacity:1;color:var(--action)}
.tbl tr.hide{display:none}
.tbl-empty{padding:var(--space-5) 0;color:var(--steel-2);
  font-family:var(--font-mono);font-size:var(--nav);letter-spacing:var(--ls-nav);text-transform:uppercase}

/* Tabuľka URCap verzií: vyšší riadok s obsahom pod sebou. */
.tbl.rows-tall td{padding-top:16px;padding-bottom:16px;vertical-align:top}
.cell-stack{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
.cell-stack .sub{color:var(--steel);font-size:12.5px}
.cell-stack .ver{font-family:var(--font-mono);font-size:16px;font-weight:500;line-height:1.1}
.cell-acts{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
.cell-acts .btn{margin:0}
@media (max-width:900px){ .cell-acts{justify-content:flex-start} }

/* ---------- prázdny stav ---------- */
/* Handoff: prerušovaný rám a mono text, žiadny farebný podklad. */
.empty{display:flex;flex-direction:column;align-items:center;gap:var(--space-3);
  padding:var(--space-7) var(--space-5);text-align:center;
  background:transparent;border:1px dashed var(--placeholder)}
.empty .ei{width:44px;height:44px;display:grid;place-items:center;background:none;
  color:var(--placeholder-2);font-size:24px;box-shadow:none}
.empty h3{margin:0;font-family:var(--font-sans);font-size:16px;font-weight:600}
.empty p{margin:0;color:var(--steel);font-size:var(--text);max-width:440px}

/* ---------- nezvratná akcia ---------- */
.danger-zone{border:1px solid var(--line);border-left:3px solid var(--red);
  background:var(--red-bg);padding:var(--space-4)}
.danger-zone h3{margin:0 0 var(--space-2);font-family:var(--font-sans);font-size:16px;
  color:var(--red-text);font-weight:600}
.danger-zone ul{margin:var(--space-2) 0;padding-left:20px;color:var(--ink-2);font-size:var(--text)}

/* ---------- formuláre ---------- */
.form-panel form{margin:0}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4)}
.grid2 .col2{grid-column:1 / -1}
label{display:flex;flex-direction:column;gap:6px;font-size:var(--text);font-weight:500;color:var(--ink)}
label .hint{font-weight:400;color:var(--steel);font-size:12.5px}
label.chk{flex-direction:row;align-items:center;gap:9px}
input,select,textarea{font-family:var(--font-sans);font-size:var(--text);padding:10px 12px;
  border:1px solid var(--line-2);background:var(--paper);color:var(--ink)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--action);
  box-shadow:0 0 0 2px rgba(62,127,180,.25)}
input[type=checkbox]{width:18px;height:18px}
.form-actions{display:flex;align-items:center;gap:var(--space-3);margin-top:var(--space-5);flex-wrap:wrap}
.inline-form{display:flex;align-items:flex-end;gap:var(--space-3)}
.inline-lbl{flex-direction:column;font-family:var(--font-mono);font-size:var(--meta);
  letter-spacing:var(--ls-meta);text-transform:uppercase;color:var(--steel-2)}
.panel-head .inline-form{margin:0}

/* Riadok formulára, kde sa polia MUSIA zarovnať aj pri rôzne dlhých vysvetlivkách.
   Flex s align-items:flex-end to nedokáže — zarovná spodky, takže pole s kratšou
   vysvetlivkou klesne nižšie. Preto grid s tromi pevnými riadkami:
   1. popisky · 2. polia a tlačidlo · 3. vysvetlivky. */
.field-row{display:grid;grid-template-columns:minmax(180px,1fr) minmax(180px,1fr) auto;
  gap:6px var(--space-4);margin:0}
.field-row > label{grid-row:1;display:block;align-self:end;margin:0}
.field-row > input,
.field-row > select{grid-row:2}
.field-row > input[type=hidden]{display:none}
.field-row > .hint{grid-row:3;font-weight:400;color:var(--steel);font-size:12.5px;margin:0}
.field-row > .btn{grid-row:2;grid-column:-2 / -1;white-space:nowrap}
@media (max-width:760px){
  .field-row{grid-template-columns:1fr}
  .field-row > label,
  .field-row > input,
  .field-row > select,
  .field-row > .hint,
  .field-row > .btn{grid-row:auto;grid-column:1}
  .field-row > .btn{justify-self:start;margin-top:6px}
}

/* ---------- odhalenie prístupových údajov ---------- */
.reveal-box{background:var(--paper-2);border:1px solid var(--line);padding:var(--space-5);
  margin-bottom:var(--space-5)}
.rb-title{font-family:var(--font-sans);font-size:16px;font-weight:600;margin-bottom:4px}
.reveal-box p{margin:0 0 var(--space-3);color:var(--steel);font-size:var(--text)}
.cred{display:flex;gap:var(--space-6);flex-wrap:wrap}
.cred>div{display:flex;flex-direction:column;gap:5px}
.cred span{font-family:var(--font-mono);font-size:var(--meta);letter-spacing:var(--ls-meta);
  text-transform:uppercase;color:var(--steel-2);font-weight:400}
.cred code{font-family:var(--font-mono);font-size:19px;font-weight:500;background:var(--paper);
  border:1px solid var(--line);padding:8px 14px;user-select:all}

/* ---------- prihlásenie a inštalácia ---------- */
.auth-body{min-height:100vh;display:grid;place-items:center;padding:var(--space-5);background:var(--page-bg)}
.auth-card{background:var(--paper);border:1px solid var(--line);box-shadow:none;
  padding:var(--space-6);width:min(420px,92vw)}
.auth-top{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);
  margin-bottom:var(--space-4)}
.auth-brand{display:flex;align-items:center;gap:10px;font-weight:600;font-size:15px;
  letter-spacing:-.01em}
.auth-top .auth-brand{margin-bottom:0}
.auth-brand .mark{width:24px;height:24px;display:block;background:none;color:var(--ink)}
.auth-brand .mark svg{width:24px;height:24px;display:block}
.auth-card h1{font-family:var(--font-serif);font-size:26px;margin:var(--space-4) 0 6px;font-weight:600}
.auth-card form{display:flex;flex-direction:column;gap:var(--space-4);margin-top:var(--space-5)}

@media (max-width:1100px){
  .adm-main,.adm-foot{padding-left:var(--space-5);padding-right:var(--space-5)}
  .adm-top{padding:0 var(--space-5)}
}
@media (max-width:820px){
  .stat-grid{grid-template-columns:1fr 1fr;gap:var(--space-5)}
  .card2{grid-template-columns:1fr}
  .grid2{grid-template-columns:1fr}
  .adm-nav{gap:var(--space-4);margin-left:var(--space-4)}
  .page-head h1{font-size:28px}
}

/* Lockup je na CELOM urportal.sk rovnaký: „URportal HMI". Portál ani správa
   si už názov nemenia — kde treba rozlíšiť rozhranie, ide za lockup mono
   štítok (.sek-tag), nie iné slovo v samotnej značke. */
.sekcia{margin-left:6px; font-weight:400; color:var(--steel-2,#4a555f)}
.sek-tag{margin-left:10px; padding:3px 8px; border:1px solid var(--line-strong,#cbd3d9);
  font-family:var(--font-mono); font-size:var(--nav,11px); letter-spacing:var(--ls-nav,.12em);
  text-transform:uppercase; font-weight:400; color:var(--steel-2,#4a555f)}
