/* Movira Design System v3.3 — Dark-first */

*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}

/* ── Dark-first tokens (default = dark) ─────────────────── */
:root{
  color-scheme:dark;
  --c-bg:#0c1222;
  --c-surface:#162032;
  --c-surface-alt:#1a2740;
  --c-border:#1e3050;
  --c-border-strong:#2a4060;
  --c-text:#e2e8f0;
  --c-text-secondary:#94a3b8;
  --c-text-muted:#8b9bb5;
  --c-primary:#3b82f6;
  --c-primary-hover:#60a5fa;
  --c-primary-subtle:rgba(59,130,246,.12);
  --c-success:#059669;
  --c-success-subtle:rgba(5,150,105,.15);
  --c-warning:#e9a23b;
  --c-warning-subtle:rgba(217,119,6,.15);
  --c-danger:#dc2626;
  --c-danger-hover:#b91c1c;
  --c-danger-subtle:rgba(220,38,38,.15);
  /* Podfarbenie a ramik hlasok (10.09.2026, audit N5). Do dnes boli tieto
     hodnoty natvrdo v `.feedback-*`, kym text sa bral z tokenu — polovicna
     tokenizacia, ktora sa pri zmene palety rozide. Odtiene su ZAMERNE ine
     nez `--c-success`/`--c-warning`/`--c-danger`: su to priesvitne tinty
     navrhnute na obe temy a ich kontrast je overeny (AA v oboch). Hodnoty
     preto ostavaju presne ako boli — tokenizuje sa, nemeni sa vzhlad. */
  --c-success-bg:rgba(16,185,129,.08);--c-success-border:rgba(16,185,129,.3);
  --c-warning-bg:rgba(217,119,6,.08);--c-warning-border:rgba(217,119,6,.3);
  --c-danger-bg:rgba(239,68,68,.08);--c-danger-border:rgba(239,68,68,.3);
  --c-user-msg:#2563eb;   /* biela na #3b82f6 = 3,68; na #2563eb = 5,17 (22.08.2026) */
  --c-sidebar:#101828;
  --c-sidebar-hover:rgba(59,130,246,.08);
  --c-sidebar-active:rgba(59,130,246,.15);
  --shadow-sm:0 1px 2px rgba(0,0,0,.2);
  --shadow-md:0 2px 8px rgba(0,0,0,.25);
  --shadow-lg:0 4px 16px rgba(0,0,0,.3);
  --font:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;
  --font-mono:'SF Mono',SFMono-Regular,Menlo,Consolas,monospace;
  --s-xs:4px;--s-sm:8px;--s-md:12px;--s-lg:16px;--s-xl:24px;--s-2xl:32px;--s-3xl:48px;
  /* Typografická škála (X1/D1, audit 26.09.2026). Do v3.49 malo CSS 30 veľkostí
     písma (najčastejšie .7rem = 10,5 px) a 71 % textu na Dokladoch bolo pod 12 px.
     Každé font-size je teraz jeden z týchto tokenov (strážca test_typografia.py);
     minimum je 12 px, údaje a telo 14 px. Hustotu mení [data-hustota] nižšie. */
  --fs-mini:12px;    /* odznaky, pomocné popisy, hlavičky tabuliek */
  --fs-pom:13px;     /* sekundárny text, meta, nápovedy */
  --fs-telo:14px;    /* telo, bunky tabuliek, polia formulárov, zaúčtovanie */
  --fs-citanie:15px; /* dlhý text: odpovede AI, zákony, správy */
  --fs-h3:16px;--fs-h2:18px;--fs-h1:20px;
  --fs-cislo:26px;   /* veľké čísla dlaždíc */
  --fs-hero:36px;    /* kód na prihlásenie QR */
  --lh-tesne:1.3;--lh-telo:1.5;--lh-citanie:1.65;
  --r-sm:6px;--r-md:8px;--r-lg:12px;--r-xl:16px;--r-full:9999px;
  --sidebar-w:240px;--sidebar-w-collapsed:64px;--header-h:56px;
  --c-code-bg:#1e293b;--c-code-text:#e2e8f0;
  --c-user-link:#ffffff;  /* #bfdbfe na bubline = 2,59; biela + podciarknutie = 5,17 */
  --c-link:#60a5fa;       /* --c-primary #3b82f6 na surface = 4,44 (pod AA); #60a5fa = 6,42 */
  /* Primarna farba ako TEXT (v3.41.0). --c-primary #3b82f6 je farba POZADIA/akcentu;
     ako text mala 3,81-4,44 : 1 (45 pravidiel, kontrola 22.09.2026). */
  --c-primary-text:#60a5fa;
  --shadow-modal:0 12px 40px rgba(0,0,0,.3);
  --c-overlay:rgba(0,0,0,.55);--c-overlay-light:rgba(0,0,0,.4);
  --z-header:100;--z-overlay:150;--z-sidebar:200;--z-dropdown:900;--z-modal:1000;--z-confirm:1100;--z-toast:1200;
  /* Audit 20.08.2026 (V3): kontrastne varianty. Povodne tokeny ostavaju pre POZADIA,
     tieto su pre TEXT a pre popredie na farebnom pozadi. Merane voci --c-surface:
     danger 3,38 -> 5,90 · success 4,33 -> 6,43 · biela na warning 2,17 -> 8,62
     (--c-on-warning) · biela na primary 3,68 -> 5,17 (--c-primary-btn) ·
     orámovanie poli 1,24 -> 3,18 (--c-border-input, WCAG 1.4.11). */
  --c-danger-text:#f87171;
  --c-success-text:#10b981;
  --c-on-warning:#0c1222;
  --c-on-success:#0c1222;
  --c-primary-btn:#2563eb;
  --c-primary-btn-hover:#1d4ed8;
  --c-border-input:#556e9c;
  --note-default:#475569;--note-blue:#3b82f6;--note-green:#059669;--note-amber:#d97706;--note-red:#dc2626;--note-purple:#8b5cf6;--c-text-inverse:#fff;--c-purple-subtle:rgba(139,92,246,.12);
}

[data-theme="light"]{
  color-scheme:light;
  /* Tmavsi warning — #e9a23b ma na bielom len ~2.2:1 kontrast (WCAG fail pre text) */
  --c-warning:#b45309;
  --c-bg:#f1f5f9;
  --c-surface:#fff;
  --c-surface-alt:#f8fafc;
  --c-border:#e2e8f0;
  --c-border-strong:#cbd5e1;
  --c-text:#0f172a;
  --c-text-secondary:#475569;
  --c-text-muted:#596981;
  --c-primary:#2563eb;
  --c-primary-hover:#1d4ed8;
  --c-primary-subtle:rgba(37,99,235,.08);
  --c-success-subtle:rgba(5,150,105,.08);
  --c-warning-subtle:rgba(217,119,6,.08);
  --c-danger-hover:#991b1b;
  --c-danger-subtle:rgba(220,38,38,.08);
  --c-user-msg:#2563eb;
  --c-sidebar:#fff;
  --c-sidebar-hover:rgba(37,99,235,.06);
  --c-sidebar-active:rgba(37,99,235,.1);
  --shadow-sm:0 1px 2px rgba(0,0,0,.04);
  --shadow-md:0 2px 8px rgba(0,0,0,.06);
  --shadow-lg:0 4px 16px rgba(0,0,0,.08);
  --c-code-bg:#f1f5f9;--c-code-text:#1e293b;
  --c-user-link:#ffffff;  /* #1d4ed8 na #2563eb bolo 1,30 — prakticky neviditelne */
  --c-link:#1d4ed8;
  --c-primary-text:#1d4ed8;   /* #2563eb na aktivnej polozke menu = 4,50 (bez rezervy) */
  --shadow-modal:0 12px 40px rgba(0,0,0,.12);
  --c-overlay:rgba(0,0,0,.35);--c-overlay-light:rgba(0,0,0,.25);
  --c-danger-text:#b91c1c;
  --c-success:#047857;
  --c-success-text:#047857;
  --c-on-warning:#ffffff;
  --c-on-success:#ffffff;
  --c-primary-btn:#2563eb;
  --c-primary-btn-hover:#1d4ed8;
  --c-border-input:#828fa0;
  --note-default:#64748b;--note-blue:#2563eb;--note-green:#047857;--note-amber:#b45309;--note-red:#b91c1c;--note-purple:#7c3aed;--c-text-inverse:#fff;--c-purple-subtle:rgba(124,58,237,.10);
}

/* Hustota „Pohodlná“ (X1): o 1 px väčšie písmo údajov a pomocného textu.
   Voľba je v hlavičke (Aa), uložená v localStorage, nastavuje ju theme-init.js. */
[data-hustota="pohodlna"]{--fs-mini:13px;--fs-pom:14px;--fs-telo:15px;--fs-citanie:16px}
html{font-size:15px;-webkit-text-size-adjust:100%}
body{font-family:var(--font);background:var(--c-bg);color:var(--c-text);line-height:1.5;min-height:100vh;font-size:var(--fs-citanie)}
a{color:var(--c-link);text-decoration:none}
a:hover{text-decoration:underline}
img,svg{display:block;max-width:100%}
input,textarea,button,select{font-family:inherit;font-size:inherit}

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.skip-link{position:absolute;top:-40px;left:0;background:var(--c-primary-btn);color:var(--c-text-inverse);padding:var(--s-sm) var(--s-md);text-decoration:none;border-radius:0 0 var(--r-md) 0;z-index:var(--z-toast);font-size:var(--fs-telo);font-weight:500;transition:top .15s}
.skip-link:focus{top:0;outline:2px solid var(--c-primary-hover);outline-offset:2px}

.sidebar{position:fixed;top:0;left:0;bottom:0;width:var(--sidebar-w);background:var(--c-sidebar);border-right:1px solid var(--c-border);display:flex;flex-direction:column;z-index:var(--z-sidebar);transition:width .2s ease,transform .2s ease;overflow:hidden}
.sidebar.collapsed{width:var(--sidebar-w-collapsed)}
.sidebar-brand .brand-icon{width:32px;height:32px;border-radius:var(--r-md);display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden}
.sidebar-brand .brand-icon img{width:100%;height:100%;object-fit:contain}
.sidebar-brand{height:var(--header-h);display:flex;align-items:center;gap:var(--s-md);padding:0 var(--s-lg);border-bottom:1px solid var(--c-border);flex-shrink:0;white-space:nowrap;overflow:hidden;cursor:pointer;transition:opacity .15s}
.sidebar-brand:hover{opacity:.8}
.brand-logo-dark{display:block}.brand-logo-light{display:none}
[data-theme="light"] .brand-logo-dark{display:none}
[data-theme="light"] .brand-logo-light{display:block}
.sidebar-brand .brand-text{font-weight:700;font-size:var(--fs-h3);color:var(--c-text)}
.sidebar.collapsed .brand-text{display:none}
.sidebar-nav{flex:1;padding:var(--s-sm);overflow-y:auto}
.nav-section{margin-bottom:var(--s-lg)}
.nav-section-label{font-size:var(--fs-mini);font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--c-text-muted);padding:var(--s-sm) var(--s-md);margin-bottom:2px;white-space:nowrap;overflow:hidden}
.sidebar.collapsed .nav-section-label{opacity:0;height:0;margin:0;padding:0}
/* Zbalená sekcia menu (Systém) — <details>, bez JS (audit U14) */
.nav-section-zbalena>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:var(--s-xs)}
.nav-section-zbalena>summary::-webkit-details-marker{display:none}
.nav-section-zbalena>summary::after{content:'';width:.4em;height:.4em;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);margin-left:auto;transition:transform .15s}
.nav-section-zbalena[open]>summary::after{transform:rotate(45deg)}
.nav-section-zbalena>summary:focus-visible{outline:2px solid var(--c-primary);outline-offset:-2px;border-radius:var(--r-sm)}
/* Zúžené menu: text sekcie skryť, šípku nechať — inak by sa Systém nedal otvoriť */
.sidebar.collapsed .nav-section-zbalena>summary{opacity:1;height:auto;padding:var(--s-sm) var(--s-md);font-size:0;justify-content:center}
.sidebar.collapsed .nav-section-zbalena>summary::after{font-size:var(--fs-mini);width:.5rem;height:.5rem;margin:0}
.nav-item{display:flex;align-items:center;gap:var(--s-md);padding:var(--s-sm) var(--s-md);border-radius:var(--r-md);color:var(--c-text-secondary);cursor:pointer;transition:all .15s;white-space:nowrap;overflow:hidden;text-decoration:none;font-size:var(--fs-telo);font-weight:500}
.nav-item:hover{background:var(--c-sidebar-hover);color:var(--c-text);text-decoration:none}
.nav-item.active{background:var(--c-sidebar-active);color:var(--c-primary-text);font-weight:600}
.nav-item svg{width:20px;height:20px;flex-shrink:0;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.nav-item-label{overflow:hidden;text-overflow:ellipsis;flex:1}
.nav-badge{margin-left:auto;background:var(--c-danger);color:var(--c-text-inverse);font-size:var(--fs-mini);font-weight:700;padding:1px 6px;border-radius:var(--r-full);min-width:16px;text-align:center;line-height:1.4}
.sidebar.collapsed .nav-item-label{display:none}
.sidebar.collapsed .nav-badge{position:absolute;top:1px;right:1px;font-size:var(--fs-mini);padding:0 4px;min-width:18px;line-height:1.4}
.sidebar.collapsed .nav-item{justify-content:center;padding:var(--s-sm)}
.sidebar-footer{padding:var(--s-md);border-top:1px solid var(--c-border);flex-shrink:0;text-align:center}
.sidebar-copyright{font-size:var(--fs-mini);color:var(--c-text-muted);padding:var(--s-xs) var(--s-sm);white-space:nowrap;overflow:hidden}
.sidebar.collapsed .sidebar-copyright{font-size:0}

.content{flex:1;margin-left:var(--sidebar-w);transition:margin-left .2s ease;display:flex;flex-direction:column;min-height:100vh}
.sidebar.collapsed ~ .content{margin-left:var(--sidebar-w-collapsed)}
.content-header{height:var(--header-h);background:var(--c-surface);border-bottom:1px solid var(--c-border);display:flex;align-items:center;justify-content:space-between;padding:0 var(--s-xl);position:sticky;top:0;z-index:var(--z-header);flex-shrink:0}
.content-header h1{font-size:var(--fs-h2);font-weight:600}
.header-actions{display:flex;align-items:center;gap:var(--s-md)}
.header-user{display:flex;align-items:center;gap:var(--s-sm);padding:var(--s-xs) var(--s-sm);border-right:1px solid var(--c-border);margin-right:var(--s-xs)}
.header-user-avatar{width:26px;height:26px;border-radius:var(--r-full);background:var(--c-primary-subtle);color:var(--c-primary-text);display:flex;align-items:center;justify-content:center;font-size:var(--fs-mini);font-weight:600;flex-shrink:0}
.header-user-name{font-size:var(--fs-pom);color:var(--c-text-secondary);white-space:nowrap}
.header-logout,.header-heslo,.header-2fa{padding:var(--s-xs)!important;min-width:32px;min-height:32px;display:inline-flex;align-items:center;justify-content:center}
/* .header-heslo svg nemal rozmer — tlačidlo zmeny hesla malo na mobile 26×10 px (audit U15) */
.header-logout svg,.header-heslo svg,.header-2fa svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
@media(max-width:768px){
  .header-user-name{display:none}
  /* Dotykové ciele min. 40 px (WCAG 2.5.8 žiada 24, pohodlie 44) a hlavička bez pretečenia */
  .content-header{padding:0 var(--s-md);gap:var(--s-sm)}
  .content-header h1{font-size:var(--fs-h3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  .header-actions{gap:var(--s-xs);min-width:0}
  .header-user{padding:0;border-right:0;margin-right:0;gap:2px}
  .header-user-avatar{display:none}
  .header-logout,.header-heslo,.header-2fa,.notif-bell,#menuBtn,#themeToggle,#hustotaToggle{min-width:40px;min-height:40px;justify-content:center}
  /* X7 (audit 26.09.2026): 12 z 22 stránok pri 390 px pretekalo do strán — hlavička
     s nadpisom, 6 ikonami a akciami stránky bola širšia než displej. Nadpis sa teraz
     skracuje (…), akcie hlavičky sa v prípade potreby zalomia do druhého riadku. */
  .content-header{flex-wrap:wrap;height:auto;min-height:var(--header-h);row-gap:var(--s-xs);padding-top:var(--s-xs);padding-bottom:var(--s-xs)}
  .content-header>:first-child{flex:1 1 0;min-width:0}
  .header-actions{flex:0 1 auto;flex-wrap:wrap;justify-content:flex-end}
  /* Stránka s vlastnými ovládačmi v hlavičke (Vozidlá, LLM chat, Vývoj…): celý druhý riadok. */
  .header-actions:has(>select,>.btn-primary,>.btn-secondary){flex-basis:100%}
  .header-actions>select{order:-2;flex:1 1 140px;min-width:0!important}
  .header-actions>.btn-primary,.header-actions>.btn-secondary{order:-1}
}
/* Na telefóne je „Zmeniť heslo“ v bočnom paneli (pätička), v hlavičke by sa nezmestilo. */
.sidebar-footer .sidebar-heslo,.sidebar-footer .sidebar-2fa{display:none}
@media(max-width:480px){
  .header-heslo,.header-2fa{display:none!important}
  .sidebar-footer .sidebar-heslo,.sidebar-footer .sidebar-2fa{display:block;width:100%;margin-bottom:var(--s-xs)}
}
.content-body{flex:1;padding:var(--s-xl);max-width:1400px;width:100%;min-width:0}
@media(max-width:768px){.content-body{padding:var(--s-md)}}   /* X7: okraj 12 px na telefóne */
.content-body.full-width{max-width:none}
.content-body.no-pad{padding:0}

.sidebar-toggle,.theme-toggle{width:32px;height:32px;border-radius:var(--r-md);background:transparent;border:1px solid var(--c-border);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--c-text-secondary);transition:all .15s}
.sidebar-toggle:hover,.theme-toggle:hover{background:var(--c-surface-alt);color:var(--c-text)}
.hustota-toggle{font-size:var(--fs-pom);font-weight:700;letter-spacing:-.02em}
.hustota-toggle[aria-pressed="true"]{background:var(--c-primary-subtle);color:var(--c-primary-text);border-color:var(--c-primary)}
/* Na telefóne sa hlavička s ďalším tlačidlom nezmestí (390 px) a veľkosť písma rieši systém. */
@media(max-width:480px){.hustota-toggle{display:none}}
.sidebar-toggle svg,.theme-toggle svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}

.card{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-xl)}
.card-header{display:flex;gap:var(--s-sm);flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:var(--s-lg);padding-bottom:var(--s-lg);border-bottom:1px solid var(--c-border)}
.card-header h2{font-size:var(--fs-h3);font-weight:600}
.card-header h3{font-size:var(--fs-telo);font-weight:600}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-sm);padding:var(--s-sm) var(--s-lg);border:1px solid transparent;border-radius:var(--r-md);font-size:var(--fs-telo);font-weight:500;cursor:pointer;transition:all .15s;white-space:nowrap;line-height:1.5}
.btn:disabled{opacity:.5;cursor:not-allowed}.btn-loading{position:relative;color:transparent !important}.btn-loading::after{content:"";position:absolute;inset:0;margin:auto;width:16px;height:16px;border:2px solid var(--c-text-muted);border-top-color:transparent;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
.btn-primary{background:var(--c-primary-btn);color:var(--c-text-inverse);border-color:var(--c-primary-btn)}
.btn-primary:hover:not(:disabled){background:var(--c-primary-btn-hover);border-color:var(--c-primary-btn-hover)}
.btn-secondary{background:var(--c-surface);color:var(--c-text);border-color:var(--c-border-input)}
.btn-secondary:hover:not(:disabled){background:var(--c-surface-alt)}
.btn-danger{background:var(--c-danger);color:var(--c-text-inverse)}
.btn-danger:hover:not(:disabled){background:var(--c-danger-hover)}
.btn-ghost{background:transparent;color:var(--c-text-secondary);border-color:transparent}
.btn-ghost:hover:not(:disabled){background:var(--c-surface-alt);color:var(--c-text)}
/* Nevratná akcia mimo hlavného toku (R6): bez červenej plochy, červený len text */
.btn-ghost-danger{color:var(--c-danger-text)}
.btn-ghost-danger:hover:not(:disabled){background:var(--c-danger-subtle);color:var(--c-danger-text)}
.btn-sm{padding:var(--s-xs) var(--s-md);font-size:var(--fs-pom)}
.btn-lg{padding:var(--s-md) var(--s-xl);font-size:var(--fs-citanie)}
.btn-block{width:100%}

/* ── Hero/login input (.input) — large variant for login + hero search bars (laws, sources) ── */
.input,.textarea,.select{width:100%;padding:var(--s-sm) var(--s-md);background:var(--c-surface);color:var(--c-text);border:1px solid var(--c-border-input);border-radius:var(--r-md);transition:border-color .15s,box-shadow .15s;outline:none}
.input:focus,.textarea:focus,.select:focus{border-color:var(--c-primary);box-shadow:0 0 0 3px var(--c-primary-subtle)}
.input::placeholder,.textarea::placeholder{color:var(--c-text-muted)}

/* ── Pole s heslom a prepinacom zobrazenia (v3.24.7) ────────────────────────
   Zdielany komponent: prihlasovacia stranka aj sprava pouzivatelov. Bol
   povodne len v pages/login.css, takze v sprave sa tlacidlo vykreslilo POD
   polom — stranka si login.css nenacitava. */
.heslo-pole{position:relative}
.heslo-pole .input{padding-right:44px}
.heslo-oko{
  position:absolute;top:1px;right:1px;bottom:1px;width:42px;
  display:flex;align-items:center;justify-content:center;
  padding:0;background:none;border:0;
  border-radius:0 var(--r-md) var(--r-md) 0;
  color:var(--c-text-secondary);   /* 6,36:1 dark · 7,58:1 light — WCAG 1.4.11 */
  cursor:pointer;transition:color .15s
}
.heslo-oko:hover{color:var(--c-text)}
.heslo-oko:focus-visible{outline:2px solid var(--c-primary);outline-offset:-2px}
/* ⚑ Ziadny `display` — `.heslo-oko` je flex, takze SVG su flex items a
   baseline medzera nevznika. `display:block` tu bol chyba: ma vyssiu
   specificitu nez `.skryte{display:none}`, takze sa ukazali OBE ikony. */
.heslo-oko svg{pointer-events:none}
.textarea{resize:vertical;min-height:80px;line-height:1.6}
.form-group{margin-bottom:var(--s-lg)}
.form-label{display:block;font-size:var(--fs-pom);font-weight:500;color:var(--c-text-secondary);margin-bottom:var(--s-xs)}

.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--r-full);font-size:var(--fs-mini);font-weight:600;line-height:1.5}
.badge-primary{background:var(--c-primary-subtle);color:var(--c-link)}
.badge-success{background:var(--c-success-subtle);color:var(--c-success-text)}
.badge-warning{background:var(--c-warning-subtle);color:var(--c-warning)}
.badge-danger{background:var(--c-danger-subtle);color:var(--c-danger-text)}
/* ── Mapa stavov (X18/D4, audit 26.09.2026) — jeden význam farby na celom webe:
   hotovo zelená · praca modrá · caka oranžová (čaká na niekoho) · chyba červená ·
   neutral sivá. Texty stavov sú v app.js (STAV_DOKLADU, STAV_*_FARBA). */
.stav-hotovo{background:var(--c-success-subtle);color:var(--c-success-text)}
.stav-praca{background:var(--c-primary-subtle);color:var(--c-primary-text)}
.stav-caka{background:var(--c-warning-subtle);color:var(--c-warning)}
.stav-chyba{background:var(--c-danger-subtle);color:var(--c-danger-text)}
.stav-neutral{background:var(--c-surface-alt);color:var(--c-text-secondary);box-shadow:inset 0 0 0 1px var(--c-border)}

.table{width:100%;border-collapse:collapse}
.table th,.table td{padding:var(--s-sm) var(--s-md);text-align:left;border-bottom:1px solid var(--c-border)}
.table th{font-size:var(--fs-mini);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--c-text-muted)}
.table tbody tr:hover{background:var(--c-surface-alt)}
.table td{font-size:var(--fs-telo)}

.status-row{display:flex;justify-content:space-between;align-items:center;padding:var(--s-sm) 0;border-bottom:1px solid var(--c-border)}
.status-row:last-child{border-bottom:none}
.status-label{font-size:var(--fs-telo);color:var(--c-text-secondary)}
.status-value{font-size:var(--fs-telo);font-weight:500}

.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--s-lg)}
.stat-card{text-align:left}
.stat-card .stat-label{font-size:var(--fs-pom);color:var(--c-text-muted);margin-bottom:var(--s-xs)}
.stat-card .stat-value{font-size:var(--fs-cislo);font-weight:700;line-height:1.2}
.stat-card .stat-sub{font-size:var(--fs-mini);color:var(--c-text-muted);margin-top:2px}

.chat-layout{display:flex;gap:var(--s-xl);height:calc(100vh - var(--header-h));height:calc(100dvh - var(--header-h));padding:var(--s-xl)}
.chat-main{flex:1;display:flex;flex-direction:column;min-width:0}
.chat-sidebar{width:300px;flex-shrink:0;display:flex;flex-direction:column;gap:var(--s-lg)}
.chat-messages{flex:1;overflow-y:auto;padding:var(--s-xl);display:flex;flex-direction:column;gap:var(--s-lg);background:var(--c-bg);border:1px solid var(--c-border);border-radius:var(--r-lg) var(--r-lg) 0 0}
.chat-input-area{background:var(--c-surface);border:1px solid var(--c-border);border-top:none;border-radius:0 0 var(--r-lg) var(--r-lg);padding:var(--s-lg);display:flex;gap:var(--s-sm);align-items:flex-end}
.chat-input-area .textarea{border:none;background:var(--c-surface-alt);min-height:44px;max-height:120px;flex:1}
.chat-input-area .textarea:focus{box-shadow:none;background:var(--c-bg)}
.msg{display:flex;gap:var(--s-md);animation:msg-in .25s ease}
@keyframes msg-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.msg.user{justify-content:flex-end}
.msg-avatar{width:32px;height:32px;border-radius:var(--r-full);display:flex;align-items:center;justify-content:center;font-size:var(--fs-mini);font-weight:600;flex-shrink:0}
.msg.user .msg-avatar{background:var(--c-user-msg);color:var(--c-text-inverse)}
.msg.assistant .msg-avatar{background:var(--c-primary-subtle);color:var(--c-primary-text)}
.msg-body{max-width:72%}
/* X6: odpoveď AI má šírku riadku ~72 znakov a písmo na čítanie (do v3.49 pri 1920 px
   ~140 znakov na riadok pri 13,5 px). */
.msg.assistant .msg-body{max-width:min(100%,calc(60ch + 2 * var(--s-lg)))}
.msg.user .msg-body{text-align:right}
.msg-content{padding:var(--s-md) var(--s-lg);border-radius:var(--r-lg);line-height:1.65;font-size:var(--fs-telo);display:inline-block;text-align:left}
.msg.user .msg-content{background:var(--c-user-msg);color:var(--c-text-inverse);border-bottom-right-radius:var(--s-xs)}
.msg.assistant .msg-content{background:var(--c-surface);border:1px solid var(--c-border);border-bottom-left-radius:var(--s-xs);color:var(--c-text);font-size:var(--fs-citanie);line-height:var(--lh-citanie)}
.msg-content h2{margin:.8em 0 .3em;font-size:var(--fs-citanie);font-weight:700}.msg-content h3{margin:.6em 0 .3em;font-size:var(--fs-citanie);font-weight:600}.msg-content h4{margin:.5em 0 .2em;font-size:var(--fs-telo);font-weight:600}
.msg-content p{margin:.4em 0}
.msg-content li{margin-left:1.25em;margin-bottom:.2em}
.msg-content strong{font-weight:600}
.msg-content a{color:var(--c-primary-text)}
.msg.user .msg-content a{color:var(--c-user-link);text-decoration:underline}
.msg-sources{margin-top:var(--s-md)}
.msg-sources h4{font-size:var(--fs-pom);font-weight:600;color:var(--c-text-muted);margin-bottom:var(--s-sm)}
.msg-source{padding:var(--s-sm) var(--s-md);margin-bottom:var(--s-xs);background:var(--c-surface-alt);border-radius:var(--r-md);border-left:3px solid var(--c-primary);font-size:var(--fs-pom)}
.msg-source a{font-weight:500}
.chat-welcome{text-align:center;padding:var(--s-3xl) var(--s-xl);color:var(--c-text-muted)}
.chat-welcome h2{color:var(--c-text);font-size:var(--fs-h2);margin-bottom:var(--s-sm);font-weight:600}
.source-option{display:flex;align-items:center;gap:var(--s-md);padding:var(--s-md);border:1px solid var(--c-border);border-radius:var(--r-md);cursor:pointer;transition:all .15s}
.source-option:hover{border-color:var(--c-primary)}
.source-option.selected{border-color:var(--c-primary);background:var(--c-primary-subtle)}
.source-option input[type="checkbox"]{width:16px;height:16px;accent-color:var(--c-primary)}
.source-name{font-size:var(--fs-telo);font-weight:500;color:var(--c-text)}
.source-desc{font-size:var(--fs-mini);color:var(--c-text-muted)}
.elapsed{font-size:var(--fs-mini);color:var(--c-text-muted);margin-left:var(--s-sm)}
.loading-dots{display:inline-flex;gap:3px;vertical-align:middle}
.loading-dots span{width:6px;height:6px;border-radius:50%;background:currentColor;animation:dot-bounce 1.2s ease-in-out infinite}
.loading-dots span:nth-child(2){animation-delay:.15s}
.loading-dots span:nth-child(3){animation-delay:.3s}
@keyframes dot-bounce{0%,80%,100%{transform:scale(.4);opacity:.4}40%{transform:scale(1);opacity:1}}

.chart-bar{display:flex;align-items:center;gap:var(--s-sm);margin:var(--s-xs) 0}
.chart-label{width:56px;font-size:var(--fs-mini);color:var(--c-text-muted);text-align:right;flex-shrink:0}
.chart-fill{height:20px;background:var(--c-primary);border-radius:var(--r-sm);min-width:3px;transition:width .3s}
.chart-val{font-size:var(--fs-mini);color:var(--c-text-muted);margin-left:var(--s-xs)}
.keyword-cloud{display:flex;flex-wrap:wrap;gap:var(--s-sm)}
.keyword-tag{padding:var(--s-xs) var(--s-md);border-radius:var(--r-full);background:var(--c-surface-alt);border:1px solid var(--c-border);font-size:var(--fs-pom)}
.keyword-tag .count{color:var(--c-primary-text);font-weight:600;margin-left:var(--s-xs)}
.log-output{background:var(--c-surface-alt);border-radius:var(--r-md);padding:var(--s-lg);font-family:var(--font-mono);font-size:var(--fs-pom);max-height:280px;overflow-y:auto;white-space:pre-wrap;line-height:1.6;color:var(--c-text-secondary)}
.progress{width:100%;height:6px;background:var(--c-surface-alt);border-radius:var(--r-full);overflow:hidden;margin:var(--s-sm) 0}
.progress-fill{height:100%;background:var(--c-primary);border-radius:var(--r-full);transition:width .3s}

.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--c-bg);padding:var(--s-xl)}
.login-box{width:100%;max-width:380px;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-xl);padding:var(--s-2xl);box-shadow:var(--shadow-lg)}
.login-brand{text-align:center;margin-bottom:var(--s-2xl)}
.login-brand .brand-icon{width:48px;height:48px;margin:0 auto var(--s-md);border-radius:var(--r-lg);display:flex;align-items:center;justify-content:center;overflow:hidden}
.login-brand .brand-icon img{width:100%;height:100%;object-fit:contain}
.login-brand h1{font-size:var(--fs-h1);font-weight:700;color:var(--c-text)}
.login-brand p{font-size:var(--fs-telo);color:var(--c-text-muted);margin-top:var(--s-xs)}
.login-error{background:var(--c-danger-subtle);color:var(--c-danger-text);padding:var(--s-sm) var(--s-md);border-radius:var(--r-md);margin-bottom:var(--s-lg);font-size:var(--fs-telo)}   /* skrýva trieda .skryte (22.08.2026) */
.login-footer{text-align:center;margin-top:var(--s-xl);font-size:var(--fs-mini);color:var(--c-text-muted)}
.login-spinner{width:16px;height:16px;border:2px solid var(--c-text-inverse);border-top-color:transparent;border-radius:50%;animation:spin .6s linear infinite;display:inline-block}

@media(max-width:1024px){
  .sidebar{transform:translateX(-100%)}
  .sidebar.open{transform:translateX(0)}
  .content{margin-left:0!important}
  .chat-layout{flex-direction:column;height:auto;min-height:calc(100vh - var(--header-h));min-height:calc(100dvh - var(--header-h))}
  .chat-sidebar{width:100%}
  .chat-messages{min-height:400px}
  .mobile-overlay{position:fixed;inset:0;background:var(--c-overlay-light);z-index:var(--z-overlay);display:none}
  .sidebar.open ~ .mobile-overlay{display:block}
}

/* Code blocks in chat messages (v3.2) */
.msg-content code,.llm-msg-content code{font-family:var(--font-mono);font-size:.9em;padding:2px 5px;border-radius:3px;background:var(--c-surface-alt);border:1px solid var(--c-border)}
.msg-content pre,.llm-msg-content pre{margin:.6em 0;border-radius:var(--r-md);overflow-x:auto;position:relative}
.msg-content pre code,.llm-msg-content pre code{display:block;padding:var(--s-md) var(--s-lg);background:var(--c-code-bg);color:var(--c-code-text);border:none;font-size:var(--fs-pom);line-height:1.6;white-space:pre;overflow-x:auto}
/* light code block colors handled by --c-code-bg/--c-code-text variables */
.msg-content ul,.msg-content ol,.llm-msg-content ul,.llm-msg-content ol{margin:.4em 0 .4em 1.3em}
.code-copy{position:absolute;top:6px;right:6px;padding:3px 8px;font-size:var(--fs-mini);background:var(--c-surface-alt);color:var(--c-text-muted);border:1px solid var(--c-border);border-radius:var(--r-sm);cursor:pointer;opacity:0;transition:opacity .15s}
pre:hover .code-copy{opacity:1}
.code-copy:hover{background:var(--c-primary-subtle);color:var(--c-primary-text)}

::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--c-border);border-radius:3px}
::-webkit-scrollbar-thumb:hover{background:var(--c-border-strong)}

.text-muted{color:var(--c-text-muted)!important}
.text-sm{font-size:var(--fs-pom)!important}
.text-center{text-align:center!important}
.mt-sm{margin-top:var(--s-sm)!important}
.mt-md{margin-top:var(--s-md)!important}
.mt-lg{margin-top:var(--s-lg)!important}
.mb-lg{margin-bottom:var(--s-lg)!important}
.gap-sm{gap:var(--s-sm)!important}
.gap-lg{gap:var(--s-lg)!important}
.flex{display:flex!important}
.flex-col{flex-direction:column!important}
.items-center{align-items:center!important}
.justify-between{justify-content:space-between!important}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-lg)}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s-lg)}
.span-2{grid-column:span 2}
@media(max-width:768px){.grid-2,.grid-3{grid-template-columns:1fr}.span-2{grid-column:span 1}}

/* ── Compact form components (v3.2) ────────────────────── */
.form-input,.form-textarea,.form-select{width:100%;padding:var(--s-xs) var(--s-sm);font-size:var(--fs-pom);background:var(--c-surface);border:1px solid var(--c-border-input);border-radius:var(--r-sm);color:var(--c-text);transition:border-color .15s,box-shadow .15s;outline:none;font-family:inherit}
.form-input:focus,.form-textarea:focus,.form-select:focus{border-color:var(--c-primary);outline:none;box-shadow:0 0 0 2px var(--c-primary-subtle)}
.form-input::placeholder,.form-textarea::placeholder{color:var(--c-text-muted)}
.input-compact{max-width:160px;height:30px;font-size:var(--fs-pom)}
.form-textarea{min-height:60px;resize:vertical}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-sm)}
.form-grid .form-group{display:flex;flex-direction:column;gap:3px;margin-bottom:0}
.form-grid .form-group.full{grid-column:1/-1}
.form-grid .form-label{font-size:var(--fs-pom);font-weight:600;color:var(--c-text-muted)}
@media(max-width:768px){.form-grid{grid-template-columns:1fr}}

/* ── Top bar (search + action buttons) ─────────────────── */
.top-bar{display:flex;align-items:center;gap:var(--s-sm);margin-bottom:var(--s-md);flex-wrap:wrap}
.search-input{flex:1;min-width:180px;padding:var(--s-sm) var(--s-md);font-size:var(--fs-telo);background:var(--c-surface);border:1px solid var(--c-border-input);border-radius:var(--r-md);color:var(--c-text);transition:border-color .15s,box-shadow .15s;outline:none}
.search-input:focus{border-color:var(--c-primary);outline:none;box-shadow:0 0 0 2px var(--c-primary-subtle)}
.search-input::placeholder{color:var(--c-text-muted)}
.filter-select{padding:var(--s-xs) var(--s-sm);font-size:var(--fs-pom);background:var(--c-surface);border:1px solid var(--c-border-input);border-radius:var(--r-md);color:var(--c-text);min-width:140px}
.filter-select:focus{border-color:var(--c-primary);outline:none;box-shadow:0 0 0 2px var(--c-primary-subtle)}

/* ── Tab component ─────────────────────────────────────── */
.tab-bar{display:flex;gap:2px;background:var(--c-surface-alt);border-radius:var(--r-md);padding:2px;margin-bottom:var(--s-md);overflow-x:auto;max-width:100%}
.tab-btn{white-space:nowrap;flex-shrink:0;padding:var(--s-sm) var(--s-lg);border-radius:var(--r-sm);font-size:var(--fs-telo);font-weight:600;cursor:pointer;color:var(--c-text-muted);border:none;background:transparent;transition:all .15s}
.tab-btn:hover{color:var(--c-text)}
.tab-btn.active{background:var(--c-primary-btn);color:var(--c-text-inverse)}

/* ── Modal component ───────────────────────────────────── */
.modal-overlay{display:none;position:fixed;inset:0;background:var(--c-overlay);z-index:var(--z-modal);align-items:center;justify-content:center;animation:confirmFadeIn .15s}
.modal-overlay.open{display:flex}
.modal{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-lg);width:90%;max-width:520px;max-height:85vh;overflow-y:auto;box-shadow:var(--shadow-modal);animation:confirmSlideIn .15s}
.modal-title{font-size:var(--fs-h3);font-weight:700;color:var(--c-text);margin-bottom:var(--s-md)}
.modal-footer{display:flex;justify-content:flex-end;gap:var(--s-sm);margin-top:var(--s-md);padding-top:var(--s-md);border-top:1px solid var(--c-border)}
.modal-box{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);max-width:900px;width:100%;max-height:80vh;overflow-y:auto;padding:var(--s-2xl);position:relative;box-shadow:var(--shadow-modal);animation:confirmSlideIn .15s}
.modal-box h2{margin-bottom:var(--s-lg);padding-right:40px}
.modal-close{position:absolute;top:var(--s-lg);right:var(--s-lg);background:var(--c-surface-alt);border:1px solid var(--c-border);width:32px;height:32px;border-radius:var(--r-md);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--c-text-secondary);transition:all .15s}
.modal-close:hover{background:var(--c-danger-subtle);color:var(--c-danger-text);border-color:var(--c-danger-text)}
.modal-close:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px}

/* ── Card list component ───────────────────────────────── */
.card-list{display:flex;flex-direction:column;gap:var(--s-sm)}
.card-list .card{padding:var(--s-md);cursor:pointer;transition:all .15s}
.card-list .card:hover{border-color:var(--c-border-strong);background:var(--c-surface-alt)}
.card-list .card.expanded{border-color:var(--c-primary);background:var(--c-surface)}
.card-name{font-size:var(--fs-telo);font-weight:600;color:var(--c-text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card-meta{font-size:var(--fs-mini);color:var(--c-text-muted)}
.card-badges{display:flex;gap:var(--s-xs);flex-wrap:wrap;margin-top:var(--s-xs)}

/* ── Badge variants (semantic colors) ──────────────────── */
.badge-company{background:var(--c-surface-alt);color:var(--c-text-secondary);border:1px solid var(--c-border)}
.badge-blocked{background:var(--c-danger-subtle);color:var(--c-danger-text)}
.badge-pending{background:var(--c-warning-subtle);color:var(--c-warning)}
.badge-online{background:var(--c-success-subtle);color:var(--c-success-text)}
.badge-group{background:var(--c-primary-subtle);color:var(--c-primary-text)}
.badge-dph{background:var(--c-surface-alt);color:var(--c-text-secondary);border:1px solid var(--c-border)}
.badge-docs{background:var(--c-surface-alt);color:var(--c-text-muted);border:1px solid var(--c-border)}

/* ── Detail panel (expandable cards) ───────────────────── */
.detail-panel{display:none;margin-top:var(--s-md);padding:var(--s-md);background:var(--c-bg);border:1px solid var(--c-border);border-radius:var(--r-md)}
.card.expanded .detail-panel{display:block}
.section{margin-top:var(--s-md);padding-top:var(--s-md);border-top:1px solid var(--c-border)}
/* R5 (audit 26.09.2026): nadpis sekcie je skutočný nadpis — do v3.49 10,8 px verzálkami,
   teda menší než text tabuľky pod ním (Banka: „Bankové účty“, „Pohyby“). */
.section-title{font-size:var(--fs-h3);font-weight:600;color:var(--c-text);margin-bottom:var(--s-sm);line-height:1.3}
.action-row{display:flex;gap:var(--s-xs);flex-wrap:wrap;margin-top:var(--s-sm)}

/* ── Online indicator ──────────────────────────────────── */
.online-dot{width:8px;height:8px;border-radius:50%;background:var(--c-success);flex-shrink:0}
.online-bar{display:flex;align-items:center;gap:var(--s-sm);padding:var(--s-sm) var(--s-md);background:var(--c-surface-alt);border:1px solid var(--c-border);border-radius:var(--r-md);margin-bottom:var(--s-md);flex-wrap:wrap;font-size:var(--fs-pom)}
.online-count-badge{display:inline-flex;align-items:center;gap:4px;padding:var(--s-xs) var(--s-sm);border-radius:var(--r-full);background:var(--c-success-subtle);color:var(--c-success-text);font-size:var(--fs-pom);font-weight:600}

/* ── Empty state ───────────────────────────────────────── */
.empty-state{text-align:center;padding:var(--s-3xl);color:var(--c-text-muted);font-size:var(--fs-telo)}
.empty-state-icon{width:48px;height:48px;margin:0 auto var(--s-md);opacity:.3}
.empty-state-icon svg{width:100%;height:100%;stroke:currentColor;stroke-width:1.5;fill:none}
.empty-state h3{color:var(--c-text);font-size:var(--fs-citanie);margin-bottom:var(--s-xs);font-weight:600}
.empty-state p{font-size:var(--fs-pom);max-width:320px;margin:0 auto;line-height:1.5}

/* ── Responsive: tablet adjustments ────────────────────── */
@media(max-width:1024px){
  .top-bar{gap:var(--s-xs)}
  .top-bar .search-input{min-width:150px}
  .form-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:768px){
  .top-bar{flex-direction:column}
  .top-bar .search-input{width:100%}
}

/* ── Confirm dialog ────────────────────────────────────── */
/* Spolocne prekrytie pre dialogy prepinane triedou `.skryte` (10.09.2026,
   audit S3). Do dnes malo kazde take prekrytie vlastnu triedu s tou istou
   deklaraciou: `.po-overlay`, `.pr-overlay` a `.tc-overlay` pribudli 01.09.
   naraz a vsetky tri mali fallback `rgba(0,0,0,.5)`, hoci token `--c-overlay`
   ma `.55`/`.35` — fallback sa nikdy nepouzil, len prezradil, ze o tokene
   nikto nevedel. Nova stranka uz nema dovod pridavat jedenastu triedu.
   ⚑ Prekrytia nizsie (`.modal-overlay`, `.confirm-overlay`, ...) su STARSI
     vzor: skryvaju sa cez `display:none` a otvaraju pridanim triedy, nie
     cez `.skryte`. Zamerne sa sem nezlucili — je to ina mechanika. */
.overlay{position:fixed;inset:0;background:var(--c-overlay);display:flex;align-items:center;justify-content:center;padding:var(--s-md);z-index:var(--z-modal)}
.confirm-overlay{display:none;position:fixed;inset:0;background:var(--c-overlay);z-index:var(--z-confirm);align-items:center;justify-content:center;animation:confirmFadeIn .15s}
.confirm-overlay.open{display:flex}
.confirm-box{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-lg);width:90%;max-width:400px;box-shadow:var(--shadow-modal);animation:confirmSlideIn .15s}
.confirm-msg{font-size:var(--fs-telo);color:var(--c-text);line-height:1.6;margin-bottom:var(--s-lg)}
.confirm-actions{display:flex;justify-content:flex-end;gap:var(--s-sm)}
@keyframes confirmFadeIn{from{opacity:0}to{opacity:1}}
@keyframes confirmSlideIn{from{transform:translateY(-12px);opacity:0}to{transform:translateY(0);opacity:1}}
/* Vyber typu problemu — hover bol predtym inline onmouseover/onmouseout (CSP) */
.issue-type-opt:hover{border-color:var(--c-primary)}
/* ── Zmena hesla ───────────────────────────────────────── */
.form-hint{font-size:var(--fs-mini);color:var(--c-text-muted);line-height:1.5;margin-bottom:var(--s-md)}
.heslo-chyba{font-size:var(--fs-pom);color:var(--c-danger-text);min-height:1.1rem;margin-bottom:var(--s-sm)}
.heslo-banner{position:fixed;left:50%;transform:translateX(-50%);bottom:var(--s-xl);z-index:var(--z-toast);
  display:flex;align-items:center;gap:var(--s-md);max-width:min(92vw,640px);
  padding:var(--s-sm) var(--s-md);font-size:var(--fs-pom);color:var(--c-text);
  background:var(--c-surface);border:1px solid var(--c-warning,var(--c-border));border-radius:var(--r-lg);
  box-shadow:var(--shadow-modal)}
.heslo-banner span{flex:1}
.heslo-banner-x{padding:0 var(--s-xs);font-size:var(--fs-h3);line-height:1}
/* ── Dvojfaktorové overenie (2FA, v3.63.0) — dialóg v profile a krok na prihlásení ── */
.mfa-box{max-width:480px;max-height:calc(100vh - 2*var(--s-xl));overflow-y:auto}
.mfa-kroky{margin:0 0 var(--s-sm) var(--s-lg);font-size:var(--fs-pom);color:var(--c-text-secondary);line-height:1.5}
.mfa-qr{display:flex;justify-content:center;margin:var(--s-sm) 0 var(--s-md)}
.mfa-qr img{width:200px;height:200px;border-radius:var(--r-md);border:1px solid var(--c-border)}
.mfa-kluc{font-family:var(--font-mono);font-size:var(--fs-pom);word-break:break-all;user-select:all;
  padding:var(--s-sm);margin-bottom:var(--s-md);background:var(--c-surface-alt);border:1px solid var(--c-border);border-radius:var(--r-md)}
.mfa-kod-pole{font-family:var(--font-mono);font-size:var(--fs-h3);letter-spacing:.15em;text-align:center}
.mfa-kody{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-xs) var(--s-lg);list-style:none;
  margin:var(--s-sm) 0 var(--s-md);padding:var(--s-md);font-family:var(--font-mono);font-size:var(--fs-telo);
  background:var(--c-surface-alt);border:1px solid var(--c-border);border-radius:var(--r-md)}
.mfa-stav{margin-bottom:var(--s-md);font-size:var(--fs-pom);color:var(--c-text-secondary);line-height:1.5}
.mfa-potvrd{display:flex;align-items:center;gap:var(--s-sm);font-size:var(--fs-pom);margin-bottom:var(--s-md)}
.mfa-akcie{display:flex;flex-wrap:wrap;gap:var(--s-sm);margin-bottom:var(--s-md)}
/* ── Toast notifications ───────────────────────────────── */
.toast-container{position:fixed;top:var(--s-xl);right:var(--s-xl);z-index:var(--z-toast);display:flex;flex-direction:column;gap:var(--s-sm);pointer-events:none}
.toast{display:flex;align-items:center;gap:var(--s-sm);padding:var(--s-sm) var(--s-lg);border-radius:var(--r-md);font-size:var(--fs-telo);pointer-events:auto;box-shadow:var(--shadow-lg);transform:translateX(120%);transition:transform .3s ease,opacity .3s;opacity:0;max-width:420px}
.toast.show{transform:translateX(0);opacity:1}
.toast-info{background:var(--c-surface);border:1px solid var(--c-primary);color:var(--c-text)}
.toast-success{background:var(--c-surface);border:1px solid var(--c-success);color:var(--c-success-text)}
.toast-error{background:var(--c-surface);border:1px solid var(--c-danger);color:var(--c-danger-text)}
.toast-warning{background:var(--c-surface);border:1px solid var(--c-warning);color:var(--c-warning)}
.toast-msg{flex:1}
.toast-close{background:none;border:none;color:var(--c-text-muted);cursor:pointer;font-size:var(--fs-h3);padding:0 2px;line-height:1}
.toast-close:hover{color:var(--c-text)}

/* ── Loading spinner inline ────────────────────────────── */
.loading-inline{display:flex;align-items:center;justify-content:center;gap:var(--s-sm);padding:var(--s-xl);color:var(--c-text-muted);font-size:var(--fs-telo)}
.loading-inline .loading-dots{display:inline-flex;gap:3px;vertical-align:middle}
.loading-inline .loading-dots span{width:6px;height:6px;border-radius:50%;background:var(--c-primary);animation:dot-bounce 1.2s ease-in-out infinite}
.loading-inline .loading-dots span:nth-child(2){animation-delay:.15s}
.loading-inline .loading-dots span:nth-child(3){animation-delay:.3s}

/* -- Focus-visible for keyboard accessibility (v3.6) -- */
.btn:focus-visible,.sidebar-toggle:focus-visible,.theme-toggle:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px}
.nav-item:focus-visible{outline:2px solid var(--c-primary);outline-offset:-2px;background:var(--c-sidebar-hover)}
.tab-btn:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px}
.toast-close:focus-visible,.code-copy:focus-visible{outline:2px solid var(--c-primary);outline-offset:1px}
a:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px;border-radius:var(--r-sm)}

/* ── Feedback messages (v3.6.2) ────────────────────────── */
.feedback{margin-top:var(--s-md);padding:var(--s-md);border-radius:var(--r-md);font-size:var(--fs-telo)}
.feedback-sm{margin-top:var(--s-xs);padding:var(--s-sm);border-radius:var(--r-sm);font-size:var(--fs-pom)}
.feedback-success{background:var(--c-success-bg);border:1px solid var(--c-success-border);color:var(--c-success-text)}
.feedback-warning{background:var(--c-warning-bg);border:1px solid var(--c-warning-border);color:var(--c-warning)}
.feedback-error{background:var(--c-danger-bg);border:1px solid var(--c-danger-border);color:var(--c-danger-text)}
.feedback-label{font-weight:600;margin-bottom:var(--s-xs)}

/* ── Reduced motion preference (v3.6.2) ────────────────── */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;scroll-behavior:auto !important}
}

/* ── Note edit overlay (organize.html) ─────────────────── */
.note-edit-overlay{display:none;position:fixed;inset:0;background:var(--c-overlay);z-index:var(--z-modal);align-items:center;justify-content:center}
.note-edit-overlay.open{display:flex}

/* ── Print stylesheet (v3.6.8) ─────────────────────────── */
@media print{
  .sidebar,.mobile-overlay,.sidebar-toggle,.theme-toggle,.header-actions,.toast-container,.confirm-overlay,.modal-overlay,.nav-badge{display:none !important}
  .content{margin-left:0 !important;padding:var(--s-md) !important}
  body,[data-theme="dark"]{background:#fff !important;color:#000 !important}
  .card,.msg-content,.detail-panel{background:#fff !important;color:#000 !important;border-color:#ccc !important;box-shadow:none !important}
  .btn{border:1px solid #999 !important;background:#fff !important;color:#000 !important}
  a{color:#000 !important;text-decoration:underline}
  pre,code{background:#f5f5f5 !important;color:#000 !important;border:1px solid #ddd !important}
  .badge,.badge-primary,.badge-success,.badge-warning,.badge-danger{background:#eee !important;color:#000 !important;border:1px solid #999 !important}
  h1,h2,h3,h4{color:#000 !important}
  .content-header{border-bottom:2px solid #000;margin-bottom:var(--s-md);padding-bottom:var(--s-sm)}
}

/* ── Keyboard shortcuts overlay (v3.6.9) ───────────────── */
.shortcut-overlay{position:fixed;inset:0;background:var(--c-overlay);z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;animation:confirmFadeIn .15s}
.shortcut-panel{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-xl);width:90%;max-width:380px;box-shadow:var(--shadow-modal);animation:confirmSlideIn .15s}
.shortcut-panel h3{font-size:var(--fs-citanie);font-weight:700;margin-bottom:var(--s-lg);color:var(--c-text)}
.shortcut-list{display:flex;flex-direction:column;gap:var(--s-sm);margin-bottom:var(--s-lg)}
.shortcut-row{display:flex;align-items:center;justify-content:space-between;padding:var(--s-xs) 0}
.shortcut-row kbd{display:inline-flex;align-items:center;padding:var(--s-xs) var(--s-sm);background:var(--c-bg);border:1px solid var(--c-border-strong);border-radius:var(--r-sm);font-family:var(--font-mono);font-size:var(--fs-mini);font-weight:600;color:var(--c-text-secondary);min-width:64px;justify-content:center}
.shortcut-row span{font-size:var(--fs-telo);color:var(--c-text)}

/* ── Notification center (v3.6.9) ──────────────────────── */
.notif-wrap{position:relative}
.notif-bell{background:none;border:none;cursor:pointer;padding:var(--s-xs);border-radius:var(--r-md);color:var(--c-text-secondary);position:relative;display:flex;align-items:center;transition:color .15s}
.notif-bell:hover{color:var(--c-text)}
.notif-bell svg{width:20px;height:20px;stroke:currentColor;stroke-width:2;fill:none}
.notif-dot{position:absolute;top:2px;right:2px;width:8px;height:8px;border-radius:50%;background:var(--c-danger)}
.notif-panel{display:none;position:absolute;top:calc(100% + var(--s-sm));right:0;width:340px;max-height:400px;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);box-shadow:var(--shadow-modal);z-index:var(--z-dropdown);overflow:hidden;animation:confirmSlideIn .15s}
.notif-panel.open{display:block}
.notif-header{display:flex;align-items:center;justify-content:space-between;padding:var(--s-md) var(--s-lg);border-bottom:1px solid var(--c-border)}
.notif-title{font-size:var(--fs-telo);font-weight:700;color:var(--c-text)}
.notif-body{overflow-y:auto;max-height:340px}
.notif-item{display:flex;align-items:flex-start;gap:var(--s-sm);padding:var(--s-md) var(--s-lg);border-bottom:1px solid var(--c-border);text-decoration:none;color:var(--c-text);transition:background .1s}
.notif-item:last-child{border-bottom:none}
.notif-item:hover{background:var(--c-surface-alt)}
.notif-item-icon{flex-shrink:0;width:18px;height:18px;margin-top:2px}
.notif-item-icon svg{width:100%;height:100%;stroke:currentColor;stroke-width:2;fill:none}
.notif-info .notif-item-icon{color:var(--c-primary-text)}
.notif-warning .notif-item-icon{color:var(--c-warning)}
.notif-danger .notif-item-icon{color:var(--c-danger-text)}
.notif-item-text{font-size:var(--fs-pom);line-height:1.4;flex:1}
@media(max-width:768px){.notif-panel{width:calc(100vw - 32px);right:-16px}}
@media print{.notif-wrap{display:none !important}}

/* ── Streaming cursor (v3.6.9) ─────────────────────────── */
.stream-cursor{display:inline-block;width:2px;height:1em;background:var(--c-primary);margin-left:2px;animation:blink 1s step-end infinite;vertical-align:text-bottom}
@keyframes blink{50%{opacity:0}}

/* ── Klavesnicova navigacia (audit 01.08.2026, U1) ──────────────────────────
   Tlacidla, odkazy, zalozky a nav polozky uz :focus-visible mali; chybal
   zachytny obrys pre zvysok fokusovatelnych prvkov — checkboxy, prepinace,
   file inputy a vlastne klikatelne prvky s tabindex/role. Bez neho sa pri
   navigacii klavesnicou neda zistit, kde sa uzivatel nachadza. */
input[type="checkbox"]:focus-visible,
input[type="radio"]:focus-visible,
input[type="file"]:focus-visible,
input[type="date"]:focus-visible,
input[type="month"]:focus-visible,
summary:focus-visible,
[tabindex]:not([tabindex="-1"]):focus-visible,
[role="button"]:focus-visible,
[role="tab"]:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px;border-radius:var(--r-sm)}

/* Vstupy maju :focus (mys aj klavesnica) — doplname vyrazny obrys navyse,
   ked prisiel fokus z klavesnice, aby bol zretelny aj na tmavom pozadi. */
.input:focus-visible,.textarea:focus-visible,.select:focus-visible,
.form-input:focus-visible,.form-textarea:focus-visible,.form-select:focus-visible,
.search-input:focus-visible,.filter-select:focus-visible,.filter-search:focus-visible,
.filter-date:focus-visible{outline:2px solid var(--c-primary);outline-offset:1px}

/* ── Utility a zdielane triedy (CSP: boli to inline style atributy) ─── */
.akcent-primary{accent-color:var(--c-primary)}
.app-s1{list-style-type:decimal}
.bez-okraja{margin:0}
.bez-podciarknutia{text-decoration:none;color:inherit}
.flex-1{flex:1}
.items-start{align-items:flex-start}
.mb-md{margin-bottom:var(--s-md)}
.mb-sm{margin-bottom:var(--s-sm)}
.mt-xs{margin-top:var(--s-xs)}
.p-2xl{padding:var(--s-2xl)}
.p-lg{padding:var(--s-lg)}
.p-md{padding:var(--s-md)}
.scroll-x{overflow-x:auto}
.sirka-100{width:100%}
/* !important: stránkové display:flex/grid s vyššou špecificitou alebo neskorším
   poradím skryté prvky znova ukazovali (klienti.css, audit 24.09.2026). Nič v JS
   nezobrazuje prvok cez style.display pri ponechanej triede — overené grepom. */
.skryte{display:none!important}
.text-danger{color:var(--c-danger-text)}
.text-tlmeny{color:var(--c-text-muted)}
.text-vpravo{text-align:right;font-variant-numeric:tabular-nums}  /* cisla v stlpci zarovnane (norma 30-web-is §36-37, v3.41.0) */
.text-warning{color:var(--c-warning)}
.text-zakladny{color:var(--c-text)}
.vlavo-auto{margin-left:auto}
/* Ikona tlačidla Odoslať (v3.41.0) — SVG bez rozmerov a ťahu malo 0×0 px, tlačidlo (AI asistent aj LLM chat) bolo
   od v3.17.1 prázdny modrý ovál (kontrola 22.09.2026). */
#sendBtn{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:40px}
#sendBtn svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

/* ── Globálne hľadanie (Ctrl+K), v3.45.0 ── */
.hladanie-btn{display:inline-flex;align-items:center;gap:var(--s-sm);min-height:32px;padding:var(--s-xs) var(--s-md);border:1px solid var(--c-border);border-radius:var(--r-md);background:var(--c-surface-alt);color:var(--c-text-secondary);font-size:var(--fs-pom);cursor:pointer}
.hladanie-btn:hover{color:var(--c-text);border-color:var(--c-border-input)}
.hladanie-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2}
.hladanie-kbd{font-family:var(--font-mono);font-size:var(--fs-mini);padding:0 4px;border:1px solid var(--c-border);border-radius:4px}
.hladanie-overlay{position:fixed;inset:0;background:var(--c-overlay);z-index:var(--z-modal);display:flex;align-items:flex-start;justify-content:center;padding:10vh var(--s-md) var(--s-md)}
.hladanie-panel{width:min(680px,100%);max-height:75vh;display:flex;flex-direction:column;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);overflow:hidden}
.hladanie-pole{display:flex;align-items:center;gap:var(--s-sm);padding:var(--s-md);border-bottom:1px solid var(--c-border)}
.hladanie-pole svg{width:20px;height:20px;stroke:var(--c-text-muted);fill:none;stroke-width:2;flex-shrink:0}
.hladanie-pole input{flex:1;border:0;background:transparent;color:var(--c-text);font-size:var(--fs-citanie);outline:none;min-width:0}
.hladanie-zoznam{overflow-y:auto;padding:var(--s-xs) 0}
.hladanie-skupina{padding:var(--s-sm) var(--s-md) var(--s-xs);font-size:var(--fs-mini);font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--c-text-muted)}
.hladanie-polozka{display:flex;flex-direction:column;gap:2px;padding:var(--s-sm) var(--s-md);cursor:pointer}
.hladanie-polozka.aktivna{background:var(--c-primary-subtle)}
.hladanie-nazov{color:var(--c-text);font-size:var(--fs-telo)}
.hladanie-popis{font-size:var(--fs-pom);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hladanie-prazdne{padding:var(--s-md)}
.hladanie-paticka{display:flex;justify-content:space-between;gap:var(--s-md);flex-wrap:wrap;padding:var(--s-sm) var(--s-md);border-top:1px solid var(--c-border)}
.hladanie-paticka kbd{font-family:var(--font-mono);font-size:var(--fs-mini);padding:0 4px;border:1px solid var(--c-border);border-radius:4px;margin-right:2px}
@media(max-width:768px){.hladanie-btn-text,.hladanie-kbd{display:none}.hladanie-btn{min-width:40px;min-height:40px;justify-content:center;padding:0}}
/* ── Náhľad súboru (v3.48.0) — spoločný dialóg (app.js: otvorNahlad) ── */
.nahlad-overlay{display:none;position:fixed;inset:0;background:var(--c-overlay);z-index:var(--z-confirm);align-items:center;justify-content:center;padding:var(--s-md);animation:confirmFadeIn .15s}
.nahlad-overlay.open{display:flex}
.nahlad-box{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);width:min(1100px,100%);height:min(92vh,100%);display:flex;flex-direction:column;box-shadow:var(--shadow-modal);animation:confirmSlideIn .15s;overflow:hidden}
.nahlad-hlavicka{display:flex;align-items:center;justify-content:space-between;gap:var(--s-sm);flex-wrap:wrap;padding:var(--s-sm) var(--s-md);border-bottom:1px solid var(--c-border)}
.nahlad-nazov{font-size:var(--fs-citanie);font-weight:600;color:var(--c-text);margin:0;min-width:0;overflow-wrap:anywhere}
.nahlad-nastroje,.nahlad-obr-nastroje{display:flex;align-items:center;gap:var(--s-xs);flex-wrap:wrap}
.nahlad-telo{flex:1;min-height:0;overflow:auto;background:var(--c-surface-alt);display:flex;flex-direction:column}
.nahlad-pdf{flex:1;width:100%;min-height:60vh;border:0;background:var(--c-surface)}
.nahlad-obrazok{display:block;margin:var(--s-md) auto;transition:transform .15s;transform-origin:center center}
.nahlad-obrazok-fit{max-width:calc(100% - 2 * var(--s-md));max-height:calc(100% - 2 * var(--s-md));object-fit:contain}
.nahlad-text{flex:1;margin:0;padding:var(--s-md);font-family:var(--font-mono);font-size:var(--fs-pom);line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--c-text);background:var(--c-surface)}
.nahlad-text:focus-visible{outline:2px solid var(--c-primary);outline-offset:-2px}
.nahlad-orez{margin:0;padding:var(--s-xs) var(--s-md)}
.nahlad-sprava{margin:auto;display:flex;flex-direction:column;align-items:center;gap:var(--s-sm);padding:var(--s-xl);text-align:center;max-width:460px;color:var(--c-text)}
.nahlad-ikona{width:40px;height:40px;fill:none;stroke:var(--c-text-muted);stroke-width:1.5}
.nahlad-prilohy{display:flex;flex-wrap:wrap;gap:var(--s-xs);margin-top:var(--s-sm)}
.nahlad-priloha{display:inline-flex;align-items:center;gap:var(--s-xs);border:1px solid var(--c-border);border-radius:var(--r-md);padding:2px var(--s-xs) 2px var(--s-sm);font-size:var(--fs-pom);background:var(--c-surface);max-width:100%}
.nahlad-priloha-meno{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:260px}
@media(max-width:600px){.nahlad-overlay{padding:0}.nahlad-box{height:100%;border-radius:0}.nahlad-pdf{min-height:50vh}}
@media print{.nahlad-overlay{display:none !important}}
/* ── Pole dátumu d. m. rrrr (X16, v3.50.0) ── */
.pole-datum-obal{position:relative;display:inline-flex;align-items:center}
.pole-datum-obal .pole-datum{padding-right:30px}
.pole-datum-kal{position:absolute;right:2px;top:50%;transform:translateY(-50%);width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--r-sm);background:transparent;color:var(--c-text-secondary);cursor:pointer}
.pole-datum-kal:hover{color:var(--c-text);background:var(--c-surface-alt)}
.pole-datum-kal:focus-visible{outline:2px solid var(--c-primary);outline-offset:1px}
.pole-datum-kal svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2}
.pole-datum-vyber{position:absolute;right:0;bottom:0;width:1px;height:1px;opacity:0;pointer-events:none;border:0;padding:0}
.pole-datum[aria-invalid="true"]{border-color:var(--c-danger-text)}
/* ── Markdown odpovedí AI (X6, v3.50.0): tabuľky, citácie, odkazy na zdroje ── */
.md-tab-obal{overflow-x:auto;margin:.6em 0;max-width:100%}
.md-tab{border-collapse:collapse;font-size:var(--fs-telo);font-variant-numeric:tabular-nums}
.md-tab th,.md-tab td{padding:var(--s-xs) var(--s-sm);border:1px solid var(--c-border);text-align:left;vertical-align:top}
.md-tab th{background:var(--c-surface-alt);font-weight:600}
.md-tab .md-vpravo{text-align:right}.md-tab .md-stred{text-align:center}
.msg-content blockquote,.llm-msg-content blockquote{margin:.5em 0;padding:var(--s-xs) var(--s-md);border-left:3px solid var(--c-border-strong);color:var(--c-text-secondary)}
.msg-content hr{border:0;border-top:1px solid var(--c-border);margin:.8em 0}
a.cit{text-decoration:none;font-weight:600}
a.cit sup{font-size:.9em;vertical-align:super;line-height:0}
a.cit:hover{text-decoration:underline}
.msg-source:target,.msg-source:focus{outline:2px solid var(--c-primary);outline-offset:1px}
.msg-akcie{display:flex;gap:var(--s-xs);flex-wrap:wrap;margin-top:var(--s-sm);padding-top:var(--s-xs);border-top:1px solid var(--c-border)}
.msg-zastavene{color:var(--c-text-secondary);font-style:italic}
#stopBtn{min-height:40px}

/* L5 (audit 09.10.2026): pruh „Server je dočasne nedostupný“ pri overovaní relácie
   počas nočného reštartu — namiesto presmerovania na prihlásenie. */
.server-nedostupny{position:fixed;top:var(--s-md);left:50%;transform:translateX(-50%);z-index:var(--z-toast);margin:0;max-width:calc(100vw - 32px);box-shadow:var(--shadow-md)}
