/* ==========================================================================
   Dervion – vzhled konzole
   Postaveno nad Bootstrap 5.3, světlý i tmavý režim (data-bs-theme).
   Bezpečnostní pravidla (CSP) nepovolují styly vepsané do stránky: vše je tady, šířky ukazatelů jsou třídy dv-w-*.
   Písmo IBM Plex Sans (OFL; dřív Inter) a ikony Bootstrap Icons (MIT) jsou v wwwroot/lib, nic se nenačítá z cizích serverů.
   Vzhled 2026-11-02 (přání uživatele: „ne jako od AI“): vlastní technická modrá místo indigové, téměř rovné rohy
   odstupňované podle významu (panel 4 px, ovládací prvek 3 px, štítek 2 px), rámečky 1 px bez stínů, bez ikon u nadpisů
   a bez popisků VELKÝMI PROLOŽENÝMI písmeny.
   Vzhled 2026-11-03 (blok na konci souboru): neutrální šedé povrchy a menu, akcent fialový z loga, stav jako čtvercová kontrolka, štítky bez
   podkladu a ikon, počty v jednom pruhu, menu 16 px.
   ========================================================================== */

/* Písmo nápisu Dervion (Righteous, vybral uživatel 2026-10-07; u nás na serveru, licence OFL). */
@font-face {
    font-family: "Righteous";
    font-style: normal;
    font-display: swap;
    font-weight: 400;
    src: url("../lib/righteous/righteous-latin-400-normal.woff2") format("woff2");
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+20AC, U+2122, U+2212, U+FEFF, U+FFFD;
}

@font-face {
    font-family: "Righteous";
    font-style: normal;
    font-display: swap;
    font-weight: 400;
    src: url("../lib/righteous/righteous-latin-ext-400-normal.woff2") format("woff2");
    unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
    font-family: "IBM Plex Sans";
    font-style: normal;
    font-display: swap;
    font-weight: 400;
    src: url("../lib/ibm-plex-sans/ibm-plex-sans-latin-400-normal.woff2") format("woff2");
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
    font-family: "IBM Plex Sans";
    font-style: normal;
    font-display: swap;
    font-weight: 400;
    src: url("../lib/ibm-plex-sans/ibm-plex-sans-latin-ext-400-normal.woff2") format("woff2");
    unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
    font-family: "IBM Plex Sans";
    font-style: normal;
    font-display: swap;
    font-weight: 500;
    src: url("../lib/ibm-plex-sans/ibm-plex-sans-latin-500-normal.woff2") format("woff2");
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
    font-family: "IBM Plex Sans";
    font-style: normal;
    font-display: swap;
    font-weight: 500;
    src: url("../lib/ibm-plex-sans/ibm-plex-sans-latin-ext-500-normal.woff2") format("woff2");
    unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
    font-family: "IBM Plex Sans";
    font-style: normal;
    font-display: swap;
    font-weight: 600;
    src: url("../lib/ibm-plex-sans/ibm-plex-sans-latin-600-normal.woff2") format("woff2");
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
    font-family: "IBM Plex Sans";
    font-style: normal;
    font-display: swap;
    font-weight: 600;
    src: url("../lib/ibm-plex-sans/ibm-plex-sans-latin-ext-600-normal.woff2") format("woff2");
    unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
    font-family: "IBM Plex Sans";
    font-style: normal;
    font-display: swap;
    font-weight: 700;
    src: url("../lib/ibm-plex-sans/ibm-plex-sans-latin-700-normal.woff2") format("woff2");
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
    font-family: "IBM Plex Sans";
    font-style: normal;
    font-display: swap;
    font-weight: 700;
    src: url("../lib/ibm-plex-sans/ibm-plex-sans-latin-ext-700-normal.woff2") format("woff2");
    unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}


:root,
[data-bs-theme="light"] {
    /* Jemně modrá škála (2026-11-03 večer, přání uživatele: bílá byla moc ostrá): modrošedé pozadí, karty lehce do modra. */
    --dv-bg: #e9eef5;
    --dv-surface: #fbfcfe;
    --dv-surface-2: #f1f5fa;
    --dv-border: #d9e1ec;
    /* Rámeček oken (karty, okna, nabídky): ve světlém režimu výrazný, ať je vidět i na slabě kontrastním monitoru. */
    --dv-frame: #c5d0de;
    --dv-frame-width: 1px;
    --dv-text: #172030;
    --dv-muted: #56637a;
    /* Hlavní barva = fialová z loga (obrys v logo.svg; přání uživatele 2026-11-03). */
    --dv-primary: #4f46e5;
    --dv-primary-hover: #4338ca;
    --dv-primary-soft: #eeedfc;
    --dv-success: #2e7d32;
    --dv-success-soft: #eaf3ea;
    --dv-warning: #a35f00;
    --dv-warning-soft: #f7f0e4;
    --dv-danger: #b42318;
    --dv-danger-soft: #f8e9e7;
    --dv-info: #2a6788;
    --dv-info-soft: #e8f0f4;
    /* Boční menu: světle modré (přání uživatele 2026-10-07, vráceno 2026-11-03). */
    --dv-sidebar: #dbe6f5;
    --dv-sidebar-border: #c3d2e8;
    --dv-sidebar-text: #3d4d66;
    --dv-sidebar-strong: #1b2840;
    --dv-sidebar-section: #61728e;
    --dv-sidebar-hover: rgba(27, 40, 64, .06);
    --dv-sidebar-active: rgba(255, 255, 255, .7);
    --dv-sidebar-active-icon: #4f46e5;
    --dv-sidebar-box: rgba(255, 255, 255, .6);
    --dv-sidebar-role: #5b6b84;
    /* Kontrolka stavu PC, která nic nehlásí (offline, prázdný ukazatel). */
    --dv-idle: #9aa6b8;
    --dv-shadow: none;

    --bs-body-bg: var(--dv-bg);
    --bs-body-color: var(--dv-text);
    --bs-border-color: var(--dv-border);
    --bs-primary: var(--dv-primary);
    --bs-primary-rgb: 79, 70, 229;
    --bs-success: var(--dv-success);
    --bs-success-rgb: 46, 125, 50;
    --bs-warning: var(--dv-warning);
    --bs-warning-rgb: 163, 95, 0;
    --bs-danger: var(--dv-danger);
    --bs-danger-rgb: 180, 35, 24;
    --bs-info: var(--dv-info);
    --bs-info-rgb: 42, 103, 136;
    --bs-link-color: var(--dv-primary);
    --bs-link-color-rgb: 79, 70, 229;
    --bs-link-hover-color: var(--dv-primary-hover);
    --bs-link-hover-color-rgb: 67, 56, 202;
    --bs-secondary-color: var(--dv-muted);
    --bs-tertiary-bg: var(--dv-surface-2);
    --bs-font-sans-serif: "IBM Plex Sans", "Segoe UI", system-ui, -apple-system, sans-serif;
}

/* Tmavý režim: tmavá modročerná (námořnická) místo neutrální šedé (přání uživatele 2026-11-03). */
[data-bs-theme="dark"] {
    --dv-bg: #0f141d;
    --dv-surface: #151c27;
    --dv-surface-2: #1a2230;
    --dv-border: #253042;
    --dv-frame: #2e3a4f;
    --dv-frame-width: 1px;
    --dv-text: #e4e9f1;
    --dv-muted: #9aa5b8;
    --dv-primary: #9b98f8;
    --dv-primary-hover: #b7b5fa;
    --dv-primary-soft: rgba(155, 152, 248, .12);
    --dv-success: #6cbf70;
    --dv-success-soft: rgba(108, 191, 112, .11);
    --dv-warning: #e0a44a;
    --dv-warning-soft: rgba(224, 164, 74, .11);
    --dv-danger: #e57368;
    --dv-danger-soft: rgba(229, 115, 104, .11);
    --dv-info: #74b0cf;
    --dv-info-soft: rgba(116, 176, 207, .11);
    --dv-sidebar: #0b1018;
    --dv-sidebar-border: rgba(160, 180, 220, .08);
    --dv-sidebar-text: #9aa5b8;
    --dv-sidebar-strong: #e4e9f1;
    --dv-sidebar-section: #7a879c;
    --dv-sidebar-hover: rgba(160, 180, 220, .06);
    --dv-sidebar-active: #1a2333;
    --dv-sidebar-active-icon: #9b98f8;
    --dv-sidebar-box: rgba(160, 180, 220, .05);
    --dv-sidebar-role: #7a879c;
    --dv-idle: #5d6a80;
    --dv-shadow: none;

    --bs-body-bg: var(--dv-bg);
    --bs-body-color: var(--dv-text);
    --bs-border-color: var(--dv-border);
    --bs-primary: var(--dv-primary);
    --bs-primary-rgb: 155, 152, 248;
    --bs-success: var(--dv-success);
    --bs-success-rgb: 108, 191, 112;
    --bs-warning: var(--dv-warning);
    --bs-warning-rgb: 224, 164, 74;
    --bs-danger: var(--dv-danger);
    --bs-danger-rgb: 229, 115, 104;
    --bs-info: var(--dv-info);
    --bs-info-rgb: 116, 176, 207;
    --bs-link-color: var(--dv-primary);
    --bs-link-color-rgb: 155, 152, 248;
    --bs-link-hover-color: var(--dv-primary-hover);
    --bs-link-hover-color-rgb: 183, 181, 250;
    --bs-secondary-color: var(--dv-muted);
    --bs-tertiary-bg: var(--dv-surface-2);
}

html { font-size: 16px; } /* dřív 14 px; uživatel chtěl čitelnější text (2026-10-07) */

body {
    font-family: "IBM Plex Sans", "Segoe UI", system-ui, -apple-system, sans-serif;
    background: var(--dv-bg);
    color: var(--dv-text);
    -webkit-font-smoothing: antialiased;
}

a { text-decoration: none; }
a:hover { text-decoration: underline; }
.text-muted, .text-secondary { color: var(--dv-muted) !important; }
.fw-medium { font-weight: 500; }
.tabular { font-variant-numeric: tabular-nums; }
.min-w-0 { min-width: 0; }
.mono { font-family: ui-monospace, "Cascadia Code", Consolas, monospace; font-size: .92em; }
h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5 { letter-spacing: 0; font-weight: 600; }

/* ---------- Rozvržení: postranní menu + obsah ---------- */
.app { display: flex; min-height: 100vh; }

.sidebar {
    width: 268px;
    flex-shrink: 0;
    background: var(--dv-sidebar);
    color: var(--dv-sidebar-text);
    display: flex;
    flex-direction: column;
    position: sticky;
    top: 0;
    height: 100vh;
    overflow-y: auto;
    border-right: 1px solid var(--dv-sidebar-border);
}

.sidebar .brand {
    display: flex;
    align-items: center;
    gap: .6rem;
    padding: 1.3rem 1.5rem 1.15rem;
    color: var(--dv-sidebar-strong);
    font-family: "Righteous", "IBM Plex Sans", sans-serif;
    font-weight: 400;
    font-size: 1.75rem;
    line-height: 1.1;
    letter-spacing: 0;
}

.sidebar .brand:hover { text-decoration: none; color: var(--dv-sidebar-strong); }

/* Název firmy (admin firmy) pod logem. */
.sidebar-tenant {
    display: flex;
    align-items: center;
    gap: .6rem;
    margin: 0 .75rem .5rem;
    padding: .6rem .75rem;
    border-radius: 3px;
    background: var(--dv-sidebar-box);
    border: 1px solid var(--dv-sidebar-border);
    color: var(--dv-sidebar-strong);
    font-weight: 600;
    font-size: .9rem;
}

.sidebar-tenant i { color: var(--dv-sidebar-active-icon); }
.sidebar-tenant span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Přepínač firem (admin ve více firmách): název firmy je tlačítko s nabídkou. */
.sidebar-tenant-switch { margin: 0 .75rem .5rem; }
.sidebar-tenant-switch .sidebar-tenant { margin: 0; width: 100%; text-align: left; cursor: pointer; font-family: inherit; }
.sidebar-tenant-switch .sidebar-tenant:hover, .sidebar-tenant-switch .sidebar-tenant:focus-visible { border-color: var(--dv-sidebar-active-icon); }
.tenant-menu { min-width: 16rem; max-height: 70vh; overflow-y: auto; }
.tenant-menu .dropdown-item { display: flex; align-items: center; gap: .5rem; }

.sidebar .nav-section {
    padding: 1.1rem 1.4rem .4rem;
    font-size: .85rem;
    color: var(--dv-sidebar-section);
    font-weight: 600;
}

.sidebar .nav-link {
    display: flex;
    align-items: center;
    gap: .75rem;
    margin: 2px .75rem;
    padding: .6rem .75rem;
    border-radius: 3px;
    color: var(--dv-sidebar-text);
    font-weight: 500;
    font-size: 1.125rem; /* větší názvy v menu (přání uživatele 2026-11-02) */
}

.sidebar .nav-link i { font-size: 1.2rem; width: 1.35rem; text-align: center; }
.sidebar .nav-link:hover { color: var(--dv-sidebar-strong); background: var(--dv-sidebar-hover); text-decoration: none; }
.sidebar .nav-link.active { color: var(--dv-sidebar-strong); background: var(--dv-sidebar-active); }
.sidebar .nav-link.active i { color: var(--dv-sidebar-active-icon); }

.sidebar-footer {
    margin-top: auto;
    padding: 1rem;
    border-top: 1px solid var(--dv-sidebar-border);
}

.sidebar-user {
    display: flex;
    align-items: center;
    gap: .65rem;
    padding: .5rem;
    border-radius: 3px;
    color: var(--dv-sidebar-strong);
}

.sidebar-user:hover, .sidebar-user.active { background: var(--dv-sidebar-hover); text-decoration: none; color: var(--dv-sidebar-strong); }
.sidebar-user-role { color: var(--dv-sidebar-role); }

.avatar {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: #2b4a6f;
    color: #e4edf7;
    font-weight: 600;
    font-size: .85rem;
    text-transform: uppercase;
    flex-shrink: 0;
}

.sidebar .btn-icon { color: var(--dv-sidebar-text); }
.sidebar .btn-icon:hover { color: var(--dv-sidebar-strong); background: var(--dv-sidebar-hover); }

.main { flex: 1; min-width: 0; display: flex; flex-direction: column; }

.topbar {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 1rem 2rem;
    background: var(--dv-surface);
    border-bottom: 1px solid var(--dv-border);
    position: sticky;
    top: 0;
    z-index: 10;
}

.topbar-end { margin-left: auto; display: flex; align-items: center; gap: .5rem; }
.topbar .search { max-width: 380px; flex: 1; min-width: 0; margin-left: auto; position: relative; }
.topbar .search + .topbar-end { margin-left: 0; }
.topbar .search i { position: absolute; left: .8rem; top: 50%; transform: translateY(-50%); color: var(--dv-muted); pointer-events: none; }
.topbar .search input { padding-left: 2.3rem; background: var(--dv-surface-2); }
.topbar .btn-icon { color: var(--dv-muted); font-size: 1.1rem; }
.topbar .btn-icon:hover { color: var(--dv-text); }

/* Ikona tlačítka vzhledu podle volby (atribut nastavuje js/theme.js). */
.dv-vzhled-ikona { display: none; }
html:not([data-vzhled-volba]) .dv-vzhled-auto,
html[data-vzhled-volba="auto"] .dv-vzhled-auto,
html[data-vzhled-volba="light"] .dv-vzhled-light,
html[data-vzhled-volba="dark"] .dv-vzhled-dark { display: inline-block; }

/* Přepínač jazyka: zkratka jazyka (CS / EN) místo ikony, v tlačítku i v nabídce. */
.dv-jazyk-kod { font-size: .72rem; font-weight: 700; letter-spacing: .04em; line-height: 1; }
.dropdown-item .dv-jazyk-kod { display: inline-block; min-width: 1.4rem; margin-right: .5rem; color: var(--dv-muted); }
.dropdown-item.active .dv-jazyk-kod { color: inherit; }

.dropdown-menu {
    --bs-dropdown-bg: var(--dv-surface);
    --bs-dropdown-border-color: var(--dv-frame);
    --bs-dropdown-border-width: var(--dv-frame-width);
    --bs-dropdown-link-hover-bg: var(--dv-surface-2);
    --bs-dropdown-link-active-bg: var(--dv-primary-soft);
    --bs-dropdown-link-active-color: var(--dv-primary);
    border-radius: 4px;
    box-shadow: 0 4px 14px rgba(20, 30, 40, .14);
    padding: .35rem;
}

.dropdown-item { border-radius: 2px; display: flex; align-items: center; gap: .6rem; padding: .45rem .7rem; font-weight: 500; }

.content { padding: 1.75rem 2rem 3rem; }

.page-header { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 1rem; margin-bottom: 1.5rem; }
.page-title { font-size: 1.5rem; font-weight: 600; margin: 0; }
.page-subtitle { color: var(--dv-muted); margin: .25rem 0 0; }
.section-title { font-size: 1.05rem; font-weight: 700; margin: 0; }

@media (max-width: 991.98px) {
    .sidebar { position: fixed; left: -280px; z-index: 1045; transition: left .2s ease; }
    .sidebar.open { left: 0; box-shadow: 0 0 0 100vmax rgba(0, 0, 0, .45); }
    .topbar, .content { padding-left: 1rem; padding-right: 1rem; }
}

@media (prefers-reduced-motion: reduce) {
    .sidebar { transition: none; }
}

/* ---------- Karty ---------- */
.card {
    background: var(--dv-surface);
    border: var(--dv-frame-width) solid var(--dv-frame);
    border-radius: 4px;
    box-shadow: var(--dv-shadow);
    --bs-card-cap-bg: transparent;
    --bs-card-bg: var(--dv-surface);
    --bs-card-border-color: var(--dv-frame);
    --bs-card-border-width: var(--dv-frame-width);
}

.card-header {
    background: transparent;
    border-bottom: 1px solid var(--dv-border);
    padding: 1rem 1.25rem;
    font-weight: 600;
    display: flex;
    align-items: center;
    gap: .5rem;
    flex-wrap: wrap;
}

.card-header > i { color: var(--dv-muted); }
.card-header .count { background: var(--dv-surface-2); border: 1px solid var(--dv-border); border-radius: 2px; padding: 0 3px; font-size: .75rem; color: var(--dv-muted); }
.card-header .header-action { margin-left: auto; font-weight: 500; font-size: .875rem; }
.card-header .header-note { font-weight: 400; font-size: .8rem; color: var(--dv-muted); }
.card-header .header-filter { margin-left: auto; max-width: 260px; }
.card-body { padding: 1.25rem; }
/* Tabulka v kartě: zaoblené rohy uvnitř rámečku (vnitřní poloměr = 12px - šířka rámečku), jinak pozadí záhlaví
   tabulky přečnívá přes zaoblený roh a rámeček vypadá nedokreslený. */
.card > .table-responsive:first-child, .card > .table-scroll:first-child {
    border-top-left-radius: calc(4px - var(--dv-frame-width)); border-top-right-radius: calc(4px - var(--dv-frame-width));
}
.card > .table-responsive:last-child, .card > .table-scroll:last-child {
    border-bottom-left-radius: calc(4px - var(--dv-frame-width)); border-bottom-right-radius: calc(4px - var(--dv-frame-width));
}

/* Statistické dlaždice */
.stat, .card.stat {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 1rem;
    padding: 1.15rem 1.25rem;
    height: 100%;
}

.stat-icon {
    width: 46px;
    height: 46px;
    border-radius: 4px;
    display: grid;
    place-items: center;
    font-size: 1.3rem;
    flex-shrink: 0;
}

.stat-value { font-size: 1.6rem; font-weight: 600; line-height: 1.1; font-variant-numeric: tabular-nums; }
.stat-label { color: var(--dv-muted); font-size: .825rem; font-weight: 500; }

.soft-primary { background: var(--dv-primary-soft); color: var(--dv-primary); }
.soft-success { background: var(--dv-success-soft); color: var(--dv-success); }
.soft-warning { background: var(--dv-warning-soft); color: var(--dv-warning); }
.soft-danger { background: var(--dv-danger-soft); color: var(--dv-danger); }
.soft-info { background: var(--dv-info-soft); color: var(--dv-info); }
.soft-muted { background: var(--dv-surface-2); color: var(--dv-muted); }

/* ---------- Štítky a stavy ---------- */
.pill {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    padding: .2rem .6rem;
    border-radius: 2px;
    font-size: .775rem;
    font-weight: 600;
    white-space: nowrap;
    line-height: 1.5;
    vertical-align: middle;
}

.pill i { font-size: .8rem; }
.pill-success { background: var(--dv-success-soft); color: var(--dv-success); }
.pill-warning { background: var(--dv-warning-soft); color: var(--dv-warning); }
.pill-danger { background: var(--dv-danger-soft); color: var(--dv-danger); }
.pill-info { background: var(--dv-info-soft); color: var(--dv-info); }
.pill-primary { background: var(--dv-primary-soft); color: var(--dv-primary); }
.pill-muted { background: var(--dv-surface-2); color: var(--dv-muted); border: 1px solid var(--dv-border); }
.pills { display: inline-flex; flex-wrap: wrap; gap: .35rem; }
/* Dlouhý štítek (Klíč PC): na úzké obrazovce se zalomí a nevyteče z karty. */
.pill.pill-wrap { white-space: normal; overflow-wrap: anywhere; max-width: 100%; border-radius: 4px; }
.pill.pill-wrap i { flex-shrink: 0; }

.dot { display: inline-block; width: 3px; height: 3px; border-radius: 50%; flex-shrink: 0; vertical-align: middle; }
.dot-online { background: var(--dv-success); box-shadow: 0 0 0 3px var(--dv-success-soft); }
.dot-offline { background: var(--dv-idle); }
.dot-blocked { background: var(--dv-danger); box-shadow: 0 0 0 3px var(--dv-danger-soft); }

/* Čeká se na vyžádané údaje ("Aktualizovat nyní"): tečka bliká. */
.dot-waiting { animation: dv-blink 1.1s ease-in-out infinite; }

@keyframes dv-blink {
    50% { opacity: .25; }
}

@media (prefers-reduced-motion: reduce) {
    .dot-waiting, .spinner-border { animation: none; }
}

/* ---------- Tabulky ---------- */
.table { --bs-table-bg: transparent; --bs-table-color: var(--dv-text); --bs-table-striped-bg: var(--dv-surface-2); margin: 0; }
.table > :not(caption) > * > * { padding: .8rem 1rem; border-bottom-color: var(--dv-border); }

.table thead th {
    font-size: .875rem;
    color: var(--dv-muted);
    font-weight: 600;
    background: var(--dv-surface-2);
    white-space: nowrap;
}

.table tbody tr:last-child > * { border-bottom: 0; }
.table-hover > tbody > tr:hover > * { --bs-table-bg-state: var(--dv-surface-2); }
.table td { vertical-align: middle; }
.table-sm > :not(caption) > * > * { padding: .55rem 1rem; }
.table th[scope="row"] { font-weight: 600; }
.table tr.row-danger > * { --bs-table-bg-state: var(--dv-danger-soft); }
.table tr.row-muted > * { color: var(--dv-muted); }

.table tbody + tbody { border-top: 1px solid var(--dv-border); }

/* Záhlaví skupiny jako tlačítko: rozbalit / sbalit (js/groups.js). */
.group-toggle {
    display: flex;
    width: 100%;
    align-items: center;
    gap: .35rem;
    padding: 0;
    border: 0;
    background: none;
    color: inherit;
    font: inherit;
    letter-spacing: inherit;
    text-transform: inherit;
    cursor: pointer;
}

.group-toggle:focus-visible { outline: 2px solid var(--dv-primary); outline-offset: 3px; border-radius: 4px; }
.group-chevron { transition: transform .15s ease; }
.group-toggle[aria-expanded="false"] .group-chevron { transform: rotate(-90deg); }
tbody.sbaleno > tr:not(.group-row) { display: none; }

@media (prefers-reduced-motion: reduce) {
    .group-chevron { transition: none; }
}

.table tr.group-row > td {
    background: var(--dv-surface-2);
    font-weight: 600;
    font-size: .9rem;
    color: var(--dv-text);
    padding-top: .55rem;
    padding-bottom: .55rem;
}

.table tr.group-row i { margin-right: .35rem; }
.table tr.group-row .count { background: var(--dv-surface); border: 1px solid var(--dv-border); border-radius: 2px; padding: 0 3px; margin-left: .35rem; }
.table-hover > tbody > tr.group-row:hover > * { --bs-table-bg-state: var(--dv-surface-2); }
.table tr.group-empty > td { color: var(--dv-muted); font-size: .875rem; }

/* Celý řádek otevře detail (js/rows.js). */
tr[data-odkaz] { cursor: pointer; }

/* Dlouhé tabulky v detailu: posuvník uvnitř karty, záhlaví zůstává nahoře. */
.table-scroll { max-height: 34rem; overflow: auto; }
.table-scroll thead th { position: sticky; top: 0; z-index: 1; }

.device-cell { display: flex; align-items: center; gap: .8rem; }

.device-icon {
    width: 38px;
    height: 38px;
    border-radius: 4px;
    display: grid;
    place-items: center;
    background: var(--dv-primary-soft);
    color: var(--dv-primary);
    font-size: 1.1rem;
    flex-shrink: 0;
}

.device-icon.is-blocked { background: var(--dv-danger-soft); color: var(--dv-danger); }
.device-cell .name { font-weight: 600; color: var(--dv-text); white-space: nowrap; }
.device-cell .name:hover { color: var(--dv-primary); }
.device-cell .sub { color: var(--dv-muted); font-size: .8rem; }
.device-cell .pill { margin-left: .35rem; }

.disk-cell { min-width: 170px; }
.disk-cell .disk-text { display: flex; gap: .35rem; align-items: baseline; margin-bottom: .3rem; white-space: nowrap; }

.mini-bar { height: 2px; border-radius: 2px; background: var(--dv-border); overflow: hidden; min-width: 70px; }
.mini-bar > div { height: 100%; border-radius: 2px; }
.mini-bar.mini-bar-lg { height: 12px; }
.bar-success { background: var(--dv-success); }
.bar-warning { background: var(--dv-warning); }
.bar-danger { background: var(--dv-danger); }
.bar-primary { background: var(--dv-primary); }
.bar-muted { background: var(--dv-idle); }

/* Šířky ukazatelů po 5 % (DeviceFormat.Width). Šířka nejde zapsat do stránky: CSP nepovoluje styly ve stránce. */
.dv-w-0 { width: 0%; }
.dv-w-5 { width: 5%; }
.dv-w-10 { width: 10%; }
.dv-w-15 { width: 15%; }
.dv-w-20 { width: 20%; }
.dv-w-25 { width: 25%; }
.dv-w-30 { width: 30%; }
.dv-w-35 { width: 35%; }
.dv-w-40 { width: 40%; }
.dv-w-45 { width: 45%; }
.dv-w-50 { width: 50%; }
.dv-w-55 { width: 55%; }
.dv-w-60 { width: 60%; }
.dv-w-65 { width: 65%; }
.dv-w-70 { width: 70%; }
.dv-w-75 { width: 75%; }
.dv-w-80 { width: 80%; }
.dv-w-85 { width: 85%; }
.dv-w-90 { width: 90%; }
.dv-w-95 { width: 95%; }
.dv-w-100 { width: 100%; }

/* Ukazatel s popisem nad ním (disky, zatížení). */
.meter + .meter { margin-top: 1rem; }
.meter-head { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; margin-bottom: .45rem; }
.meter-head .meter-value { font-weight: 600; font-variant-numeric: tabular-nums; }
.meter-head .fw-semibold i { color: var(--dv-muted); margin-right: .25rem; }

.process-bar { display: flex; align-items: center; gap: .75rem; min-width: 200px; }
.process-bar .mini-bar { flex: 1; }
.process-bar span { min-width: 4.5rem; text-align: right; }

/* ---------- Klíč–hodnota seznamy ---------- */
.kv { display: grid; grid-template-columns: minmax(130px, 40%) 1fr; gap: .55rem 1rem; margin: 0; }
.kv dt { color: var(--dv-muted); font-weight: 500; }
.kv dd { margin: 0; font-weight: 500; word-break: break-word; }

@media (max-width: 575.98px) {
    .kv { grid-template-columns: 1fr; gap: .1rem; }
    .kv dd { margin-bottom: .5rem; }
}

/* Údaj chybí (starší agent, chyba sběru). */
.dv-chybi {
    display: flex;
    gap: .5rem;
    align-items: flex-start;
    color: var(--dv-muted);
    font-size: .875rem;
    font-weight: 400;
    padding: .55rem .75rem;
    border: 1px dashed var(--dv-border);
    border-radius: 3px;
    background: var(--dv-surface-2);
}

.dv-chybi + .dv-chybi, .dv-chybi + .kv, .dv-chybi + .check-list { margin-top: .75rem; }
.card > .dv-chybi { margin: 1rem 1.25rem; }

/* ---------- Detail zařízení ---------- */
.device-hero { display: flex; flex-wrap: wrap; gap: 1.25rem; align-items: center; }
.device-hero .device-icon { width: 64px; height: 64px; border-radius: 4px; font-size: 1.9rem; }
.device-hero > .hero-actions { margin-left: auto; align-self: flex-start; flex-shrink: 0; display: flex; gap: .5rem; flex-wrap: wrap; }
.device-hero > .hero-actions form { margin: 0; }
.device-hero h1 { font-size: 1.5rem; font-weight: 600; margin: 0; word-break: break-word; }
@media (min-width: 992px) { .device-hero { flex-wrap: nowrap; } }

.chips { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: .5rem; }

.chip {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    padding: .25rem .65rem;
    border-radius: 3px;
    background: var(--dv-surface-2);
    border: 1px solid var(--dv-border);
    color: var(--dv-muted);
    font-size: .8rem;
    font-weight: 500;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.chip i { font-size: .85rem; }

.freshness {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .5rem 1.5rem;
    font-size: .8rem;
    color: var(--dv-muted);
    padding: .6rem 1rem;
    background: var(--dv-surface);
    border: 1px solid var(--dv-border);
    border-radius: 4px;
}

.freshness i { margin-right: .25rem; }
.freshness strong { color: var(--dv-text); font-weight: 600; }
.freshness .freshness-state { margin-left: auto; display: inline-flex; align-items: center; gap: .4rem; }

.metric .metric-label { color: var(--dv-muted); font-size: .8rem; font-weight: 500; display: flex; align-items: center; gap: .4rem; }
.metric .metric-value { font-size: 1.15rem; font-weight: 600; margin: .25rem 0 .5rem; }
.metric .metric-sub { color: var(--dv-muted); font-size: .8rem; }

.nav-tabs-ns { border-bottom: 1px solid var(--dv-border); gap: .1rem; margin-bottom: 1.25rem; flex-wrap: nowrap; overflow-x: auto; overflow-y: hidden; }

.nav-tabs-ns .nav-link {
    border: 0;
    border-bottom: 2px solid transparent;
    border-radius: 0;
    color: var(--dv-muted);
    font-weight: 600;
    padding: .7rem .6rem;
    white-space: nowrap;
    display: flex;
    align-items: center;
    gap: .45rem;
    background: transparent;
}

.nav-tabs-ns .nav-link:hover { color: var(--dv-text); text-decoration: none; }
.nav-tabs-ns .nav-link.active { color: var(--dv-primary); border-bottom-color: var(--dv-primary); }
.nav-tabs-ns .count { background: var(--dv-surface-2); border: 1px solid var(--dv-border); border-radius: 2px; padding: 0 .45rem; font-size: .78rem; }
.nav-tabs-ns .count-danger { background: var(--dv-danger-soft); border-color: transparent; color: var(--dv-danger); }

.check-list { list-style: none; margin: 0; padding: 0; }
.check-list li { display: flex; align-items: center; gap: .85rem; padding: .8rem 1.25rem; border-bottom: 1px solid var(--dv-border); }
.check-list li:last-child { border-bottom: 0; }
.check-list .check-icon { width: 32px; height: 32px; border-radius: 3px; display: grid; place-items: center; flex-shrink: 0; }
.check-list .check-title { font-weight: 600; }
.check-list .check-detail { color: var(--dv-muted); font-size: .825rem; word-break: break-word; }
.check-list .check-end { margin-left: auto; display: flex; gap: .35rem; flex-wrap: wrap; justify-content: flex-end; flex-shrink: 0; }
.check-list li > .pill { margin-left: auto; }
.check-list li.is-disabled .check-title { color: var(--dv-muted); }
.card-body .check-list li { padding-left: 0; padding-right: 0; }

/* Instalace agenta: dva sloupce (s omezením / pro GPO), nahoře stažení, pod ním vlastnosti */
.install-card .card-body { flex: 0 0 auto; }
.install-card .check-list { border-top: 1px solid var(--dv-border); }
.install-download { display: flex; flex-wrap: wrap; gap: .5rem; align-items: flex-start; }
.install-download .install-note { flex: 1 1 10rem; min-width: 0; }
.install-table .disk-cell { min-width: 0; width: 6.5rem; }
.install-table .install-name { min-width: 11rem; }

/* Změna hardwaru PC (Upozornění, detail PC): co bylo a co je teď */
.hardware-diff { list-style: none; margin: .3rem 0 0; padding: 0; color: var(--dv-muted); font-size: .825rem; overflow-wrap: anywhere; }

/* Grafika paměťových slotů na základní desce */
.ram-board {
    background: var(--dv-surface-2);
    border: 1px solid var(--dv-border);
    border-radius: 4px;
    padding: .9rem 1rem 1rem;
}

.ram-board-title { display: flex; justify-content: space-between; gap: 1rem; color: var(--dv-muted); font-size: .8rem; font-weight: 500; margin-bottom: .75rem; }
.ram-slots { display: flex; gap: 1.25rem; flex-wrap: wrap; }
.ram-slot { display: flex; flex-direction: column; align-items: center; gap: .35rem; min-width: 46px; }

.ram-slot-stick {
    width: 22px;
    height: 86px;
    border-radius: 2px;
    border: 2px dashed var(--dv-border);
    background: transparent;
}

[data-bs-theme="dark"] .ram-slot-stick { border-color: #33405a; }

.ram-slot.used .ram-slot-stick {
    border: 0;
    background:
        repeating-linear-gradient(180deg, rgba(255, 255, 255, .28) 0 5px, transparent 5px 12px) center / 8px 70% no-repeat,
        var(--dv-primary);
}

.ram-slot-size { font-size: .78rem; font-weight: 600; color: var(--dv-muted); white-space: nowrap; }
.ram-slot.used .ram-slot-size { color: var(--dv-primary); }
.ram-slot-label { font-size: .78rem; font-weight: 700; font-family: ui-monospace, "Cascadia Code", Consolas, monospace; }
.ram-slot:not(.used) .ram-slot-label { color: var(--dv-muted); font-weight: 500; }

.big-value { font-size: 1.5rem; font-weight: 600; }

.empty-state { text-align: center; padding: 3rem 1rem; color: var(--dv-muted); }
.empty-state i { font-size: 2.4rem; display: block; margin-bottom: .75rem; opacity: .6; }
.empty-state p { margin: 0; }
.empty-state .btn { margin-top: 1rem; }

/* Síť: firma ještě neprohledávala (popis a výrazné tlačítko), jinak "Naposledy prohledáno" vedle tlačítka. */
.network-intro .card-body { padding: 2rem; }
.network-intro h2 { font-size: 1.4rem; font-weight: 700; margin: 1rem 0 .5rem; }
.network-intro-lead { font-size: 1.05rem; max-width: 48rem; margin-bottom: 1.25rem; }
.network-intro-points { list-style: none; padding: 0; margin: 0 0 1.5rem; display: grid; gap: .7rem; max-width: 48rem; }
.network-intro-points li { display: flex; gap: .7rem; align-items: flex-start; }
.network-intro-points i { color: var(--dv-primary); font-size: 1.1rem; line-height: 1.4; flex-shrink: 0; }
.network-scan-bar { margin-left: auto; display: flex; flex-wrap: wrap; align-items: center; gap: .75rem; }
.network-last-scan { color: var(--dv-muted); font-weight: 500; }

.list-plain { list-style: none; margin: 0 0 .75rem; padding: 0; }
.list-plain li { padding: .35rem 0; border-bottom: 1px solid var(--dv-border); font-weight: 500; }
.list-plain li:last-child { border-bottom: 0; }

.hint { color: var(--dv-muted); font-size: .825rem; margin: 0; }
.hint i { margin-right: .3rem; }

/* ---------- Formuláře a tlačítka ---------- */
.form-control, .form-select {
    border-radius: 3px;
    border-color: var(--dv-border);
    background-color: var(--dv-surface);
    color: var(--dv-text);
    padding: .55rem .85rem;
}

.form-control-sm { padding: .35rem .7rem; }
/* Výběrová pole: vpravo místo pro šipku (obecné odsazení výš by ho jinak přepsalo a text by zajel pod šipku). */
.form-select { padding-right: 2.25rem; background-position: right .75rem center; }
.form-select-sm { padding: .35rem 2rem .35rem .7rem; background-position: right .6rem center; }
.form-control:focus, .form-select:focus { border-color: var(--dv-primary); box-shadow: 0 0 0 3px var(--dv-primary-soft); background-color: var(--dv-surface); color: var(--dv-text); }
.form-control[readonly] { background-color: var(--dv-surface-2); }
.form-label { font-weight: 500; font-size: .875rem; }
.form-check-input { border-color: #b4c1d3; }
[data-bs-theme="dark"] .form-check-input { border-color: #46546b; background-color: var(--dv-surface-2); }
.form-check-input:checked { background-color: var(--dv-primary); border-color: var(--dv-primary); }
.form-check-input:focus { box-shadow: 0 0 0 3px var(--dv-primary-soft); border-color: var(--dv-primary); }
.field-validation-error { font-size: .825rem; }

.btn { border-radius: 3px; font-weight: 600; padding: 3px 1rem; display: inline-flex; align-items: center; justify-content: center; gap: 3px; }
.btn-sm { padding: .3rem .7rem; font-size: .825rem; }
.btn-lg { padding: .7rem 1.2rem; font-size: 1rem; }
.btn:focus-visible { box-shadow: 0 0 0 3px var(--dv-primary-soft); }

.btn-primary {
    --bs-btn-bg: var(--dv-primary);
    --bs-btn-border-color: var(--dv-primary);
    --bs-btn-hover-bg: var(--dv-primary-hover);
    --bs-btn-hover-border-color: var(--dv-primary-hover);
    --bs-btn-active-bg: #3730a3;
    --bs-btn-active-border-color: #3730a3;
    --bs-btn-disabled-bg: var(--dv-primary);
    --bs-btn-disabled-border-color: var(--dv-primary);
}

[data-bs-theme="dark"] .btn-primary {
    --bs-btn-color: #0b1018;
    --bs-btn-hover-bg: var(--dv-primary-hover);
    --bs-btn-hover-border-color: var(--dv-primary-hover);
    --bs-btn-hover-color: #0b1018;
    --bs-btn-active-bg: #cfcdfc;
    --bs-btn-active-border-color: #cfcdfc;
    --bs-btn-active-color: #0b1018;
    --bs-btn-disabled-color: #0b1018;
}

.btn-light {
    --bs-btn-bg: var(--dv-surface);
    --bs-btn-border-color: var(--dv-border);
    --bs-btn-hover-bg: var(--dv-surface-2);
    --bs-btn-hover-border-color: var(--dv-border);
    --bs-btn-active-bg: var(--dv-surface-2);
    --bs-btn-active-border-color: var(--dv-border);
    --bs-btn-color: var(--dv-text);
    --bs-btn-hover-color: var(--dv-text);
    --bs-btn-active-color: var(--dv-text);
}

.btn-outline-primary {
    --bs-btn-color: var(--dv-primary);
    --bs-btn-border-color: var(--dv-primary);
    --bs-btn-hover-bg: var(--dv-primary);
    --bs-btn-hover-border-color: var(--dv-primary);
    --bs-btn-active-bg: var(--dv-primary);
    --bs-btn-active-border-color: var(--dv-primary);
}

.btn-outline-success { --bs-btn-color: var(--dv-success); --bs-btn-border-color: var(--dv-success); --bs-btn-hover-bg: var(--dv-success); --bs-btn-hover-border-color: var(--dv-success); }
.btn-outline-danger { --bs-btn-color: var(--dv-danger); --bs-btn-border-color: var(--dv-danger); --bs-btn-hover-bg: var(--dv-danger); --bs-btn-hover-border-color: var(--dv-danger); }
.btn-outline-secondary { --bs-btn-color: var(--dv-muted); --bs-btn-border-color: var(--dv-border); --bs-btn-hover-bg: var(--dv-surface-2); --bs-btn-hover-border-color: var(--dv-border); --bs-btn-hover-color: var(--dv-text); }
[data-bs-theme="dark"] .btn-outline-success:hover, [data-bs-theme="dark"] .btn-outline-danger:hover { --bs-btn-hover-color: #0b1018; }

.btn-icon {
    width: 34px;
    height: 34px;
    padding: 0;
    display: inline-grid;
    place-items: center;
    border-radius: 3px;
    border: 0;
    background: transparent;
    color: inherit;
}

.btn-icon:hover { background: var(--dv-surface-2); }

.code-key { font-family: ui-monospace, "Cascadia Code", Consolas, monospace; font-size: .92em; background: var(--dv-surface-2); border: 1px solid var(--dv-border); border-radius: 2px; padding: .1rem 3px; color: var(--dv-text); word-break: break-all; }
code { color: var(--dv-primary); }

.codes { list-style: none; display: grid; grid-template-columns: repeat(2, 1fr); gap: .35rem .75rem; margin: 3px 0 0; padding: .75rem 1rem; background: var(--dv-surface-2); border: 1px solid var(--dv-border); border-radius: 3px; font-family: ui-monospace, "Cascadia Code", Consolas, monospace; color: var(--dv-text); }

.qr { display: block; background: #fff; padding: 3px; border-radius: 4px; border: 1px solid var(--dv-border); }

.step-title { display: flex; align-items: center; gap: .6rem; font-size: 1rem; font-weight: 700; margin: 1.5rem 0 .75rem; }
.step-title .step-no { width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center; background: var(--dv-primary-soft); color: var(--dv-primary); font-size: .8rem; }

/* ---------- Hlášky ---------- */
.alert { border-radius: 4px; border: 0; display: flex; align-items: flex-start; gap: .6rem; }
.alert > i { margin-top: .1rem; }
.alert > div { min-width: 0; flex: 1; }
.alert-success { --bs-alert-bg: var(--dv-success-soft); --bs-alert-color: var(--dv-success); }
.alert-danger { --bs-alert-bg: var(--dv-danger-soft); --bs-alert-color: var(--dv-danger); }
.alert-warning { --bs-alert-bg: var(--dv-warning-soft); --bs-alert-color: var(--dv-warning); }
.alert-info { --bs-alert-bg: var(--dv-info-soft); --bs-alert-color: var(--dv-info); }
.alert-secondary { --bs-alert-bg: var(--dv-surface-2); --bs-alert-color: var(--dv-muted); border: 1px solid var(--dv-border); }
.alert .form-control { color: var(--dv-text); }

.breadcrumb { --bs-breadcrumb-divider-color: var(--dv-muted); --bs-breadcrumb-item-active-color: var(--dv-muted); }

/* ---------- Přihlášení a další samostatné stránky ---------- */
.auth-page {
    min-height: 100vh;
    display: grid;
    place-items: center;
    padding: 1.5rem;
    background: var(--dv-bg);
}

.auth-wrap { width: 100%; max-width: 420px; }
.auth-wrap.auth-wide { max-width: 560px; }
.auth-card { width: 100%; border: 1px solid var(--dv-frame); border-radius: 4px; box-shadow: none; }
.auth-card .card-body { padding: 2.25rem; }
.auth-card h1 { font-size: 1.35rem; font-weight: 700; margin-bottom: .25rem; }
.auth-lead { color: var(--dv-muted); margin-bottom: 1.5rem; }
.auth-brand { display: flex; align-items: center; justify-content: center; gap: .75rem; text-align: center; color: var(--dv-text); font-family: "Righteous", "IBM Plex Sans", sans-serif; font-size: 2.5rem; font-weight: 400; margin-bottom: 1.25rem; letter-spacing: 0; }
.auth-brand:hover { color: var(--dv-text); text-decoration: none; }
[data-bs-theme="dark"] .auth-brand,
[data-bs-theme="dark"] .auth-brand:hover { color: #fff; }
.auth-foot { text-align: center; font-size: .875rem; margin-top: 1.5rem; color: var(--dv-muted); }
/* Přepínač vzhledu na přihlášení: vpravo nahoře, jako v horní liště konzole. */
.auth-tools { position: fixed; top: 1rem; right: 1.25rem; z-index: 10; display: flex; gap: .5rem; }
.auth-tools .btn-icon { color: var(--dv-muted); background: var(--dv-surface); border: 1px solid var(--dv-border); }
.auth-tools .btn-icon:hover { color: var(--dv-text); background: var(--dv-surface-2); }
[data-bs-theme="dark"] .auth-tools .btn-icon { color: #9aa5b8; background: rgba(255, 255, 255, .04); border-color: rgba(255, 255, 255, .1); }
[data-bs-theme="dark"] .auth-tools .btn-icon:hover { color: #e4e9f1; background: rgba(255, 255, 255, .08); }

@media (max-width: 575.98px) {
    .auth-card .card-body { padding: 1.5rem; }
}
.auth-card .card { border: 0; box-shadow: none; }
.auth-card .empty-state { padding: 1rem 0; }

/* Rozdělení fyzického disku (Hardware): pruh s oddíly a seznam. Šířky dílků třídami dv-w-*, malé oddíly part-tiny. */
.check-list li.has-parts { border-bottom: 0; padding-bottom: .4rem; }
.check-list li.part-row { display: block; padding-top: 0; }
.part-bar { display: flex; gap: 3px; height: 22px; border-radius: 3px; overflow: hidden; background: var(--dv-border); }
.part-seg { flex: 0 1 auto; min-width: 6px; height: 100%; }
.part-seg.part-tiny { flex: 0 0 8px; width: 8px; }
.part-system { background: var(--dv-info); }
.part-reserved { background: var(--dv-idle); }
.part-recovery { background: var(--dv-warning); }
.part-data { background: var(--dv-primary); }
.part-other { background: #c5d0de; }
[data-bs-theme="dark"] .part-reserved { background: #5d6a80; }
[data-bs-theme="dark"] .part-other { background: #3a4659; }
.part-list { list-style: none; margin: .8rem 0 0; padding: 0; font-size: 1rem; }
.part-list li { padding: .45rem 0; }
.check-list .part-list li { display: block; border-bottom: 0; padding: .45rem 0; }
.part-line { display: flex; align-items: center; gap: .5rem; }
.part-dot { width: 4px; height: 4px; border-radius: 3px; flex-shrink: 0; }
.part-name { font-weight: 500; }
.part-size { margin-left: auto; color: var(--dv-muted); white-space: nowrap; }
.part-free { display: flex; align-items: center; gap: 1rem; margin: .45rem 0 0 1.3rem; }
.part-free .mini-bar { flex: 1; }
.part-free span { white-space: nowrap; font-weight: 600; }
.part-free .mini-bar { height: 10px; }

/* Zařízení USB: součásti počítače sbalené pod seznamem připojených (details, bez skriptu). */
.usb-internal { border-top: 1px solid var(--dv-border); }
.usb-internal > summary { padding: .7rem 1.25rem; color: var(--dv-muted); font-size: .85rem; cursor: pointer; }
.usb-internal > summary i { margin-right: .4rem; }
.usb-internal > summary .count { background: var(--dv-surface-2); border: 1px solid var(--dv-border); border-radius: 2px; padding: 0 .45rem; font-size: .78rem; margin-left: .25rem; }
.check-list-sm li { padding-top: .5rem; padding-bottom: .5rem; }
.check-list-sm .check-icon { width: 26px; height: 26px; font-size: .85rem; }
.check-list-sm .check-title { font-weight: 500; font-size: .875rem; }
.usb-internal .check-list { border-top: 1px solid var(--dv-border); }

/* Stav PC: karta "Co je potřeba vyřešit" v Přehledu (barevný proužek podle nejvážnějšího problému). */
.health-card { border-left: 4px solid var(--dv-warning); }
.health-card.is-critical { border-left-color: var(--dv-danger); }
.health-card.is-warning .card-header i { color: var(--dv-warning); }
.health-card.is-critical .card-header i { color: var(--dv-danger); }
.health-list { list-style: none; margin: 0; padding: 0; }
.health-list li { display: flex; align-items: baseline; gap: .75rem; padding: .6rem 1.25rem; border-bottom: 1px solid var(--dv-border); }
.health-list li:last-child { border-bottom: 0; }
.health-list .pill { flex-shrink: 0; min-width: 5.5rem; justify-content: center; }

/* Dlaždice, která zároveň filtruje (Upozornění). */
a.stat-link { color: inherit; text-decoration: none; transition: border-color .15s; }
a.stat-link:hover { border-color: var(--dv-primary); }
a.stat-link.is-active { border-color: var(--dv-primary); box-shadow: 0 0 0 1px var(--dv-primary); }

/* Restart a vypnutí: historie příkazů v detailu PC. */
.command-list { list-style: none; margin: 1rem 0 0; padding: 0; border-top: 1px solid var(--dv-border); }
.command-list li { display: flex; align-items: baseline; gap: .75rem; padding: .5rem 0; border-bottom: 1px solid var(--dv-border); }
.command-list li:last-child { border-bottom: 0; }

/* Ztráta klíče PC: časová osa kroků systému (docs/phase5-key-recovery.md). */
.key-steps { list-style: none; margin: 0 0 .75rem; padding: 0 0 0 1rem; border-left: 2px solid var(--dv-border); }
.key-steps li { display: flex; flex-wrap: wrap; gap: .25rem .75rem; padding: .35rem 0; position: relative; }
.key-steps li::before { content: ""; position: absolute; left: calc(-1rem - 2px); top: .8rem; width: 3px; height: 3px; border-radius: 50%; background: var(--dv-muted); }

/* Seznam PC: tlačítko restart/vypnutí v řádku. */
.row-action { padding: .35rem .65rem; font-size: 1.1rem; line-height: 1; border: 1px solid var(--dv-border); }
.row-action:hover { color: var(--dv-danger); border-color: var(--dv-danger); }
.dropdown-menu .dropdown-item i { margin-right: .5rem; }

/* Naplánovaný restart/vypnutí v detailu PC (se zrušením) a v seznamu PC. */
.scheduled-box { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem; padding: .85rem 1rem; margin-bottom: 1rem;
    border: 1px solid var(--dv-warning); border-left-width: 4px; border-radius: 4px; background: var(--dv-warning-soft); }
.scheduled-box .bi { color: var(--dv-warning); margin-right: .25rem; }

/* Kategorie PC od admina (správa pod seznamem PC). */
.category-list { list-style: none; margin: 0; padding: 0; }
.category-list li { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; padding: .5rem 0; border-bottom: 1px solid var(--dv-border); }
.category-list li:last-child { border-bottom: 0; }
.category-name { max-width: 22rem; }

/* Síť: výběr jedné sítě (zařízení z různých sítí se jinak smíchají). */
.network-filter { display: flex; flex-wrap: wrap; gap: .5rem; }
.network-filter .btn { display: inline-flex; align-items: center; gap: .4rem; }

/* Přesun PC mezi kategoriemi: zaškrtávátka, lišta a přetažení myší (js/move.js). */
.move-bar { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.select-cell { width: 2.5rem; }
/* Kurzory jen systémové (pointer, move): vlastní kurzor prohlížeče „grab“ se v Chromiu na Windows někdy vykreslí bíle nebo
   vůbec (změněná velikost/barva kurzoru, zvětšení obrazovky; hlášeno 2026-10-28). Řádek PC je hlavně odkaz, přetáhnout jde i tak. */
tr[draggable="true"] { cursor: pointer; }
tr.is-dragged { opacity: .5; }
tbody.drop-target > tr > td { background: var(--dv-info-soft); }
tbody.drop-target > tr.group-row > td { outline: 2px dashed var(--dv-info); outline-offset: -2px; }
/* Pořadí PC ve skupině (js/move.js) a sloupců (js/columns.js): čára, kam se přetahovaný řádek/sloupec vloží. */
tr.drop-before > td { box-shadow: inset 0 3px 0 var(--dv-primary); }
tr.drop-after > td { box-shadow: inset 0 -3px 0 var(--dv-primary); }
th[draggable="true"] { cursor: move; user-select: none; }
th.is-dragged { opacity: .5; }
th.drop-before { box-shadow: inset 3px 0 0 var(--dv-primary); }
th.drop-after { box-shadow: inset -3px 0 0 var(--dv-primary); }
/* Nastavení přehledu (js/field-order.js): vlevo zobrazené údaje v pořadí sloupců (shora dolů = zleva doprava), vpravo
   nabídka dalších údajů po skupinách. */
.column-settings { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 1.25rem; align-items: start; }
@media (max-width: 991.98px) { .column-settings { grid-template-columns: minmax(0, 1fr); } }
.column-settings .card-header { display: flex; align-items: center; gap: .5rem; }
.column-preview {
    display: flex; flex-wrap: wrap; gap: .25rem; margin-bottom: 1rem; padding: 3px; border-radius: 3px;
    background: var(--dv-surface-2); font-size: .875rem; color: var(--dv-muted);
}
.column-preview span span, .column-preview-fixed { padding: .125rem 3px; border-radius: 2px; background: var(--dv-surface); border: 1px solid var(--dv-border); }
.column-preview-fixed { font-weight: 600; color: var(--dv-text); }
.column-preview [data-poradi-nahled] { display: contents; }
.column-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: .375rem; }
.column-shown { counter-reset: column; }
.column-row {
    display: flex; align-items: center; gap: .5rem; padding: .375rem .5rem; min-height: 2.75rem;
    border: var(--dv-frame-width) solid var(--dv-border); border-radius: 3px; background: var(--dv-surface);
}
.column-shown .column-row { cursor: move; }
.column-row.is-dragged { opacity: .5; }
.column-row.drop-before { box-shadow: 0 -3px 0 var(--dv-primary); }
.column-row.drop-after { box-shadow: 0 3px 0 var(--dv-primary); }
.column-name { flex: 1 1 auto; min-width: 0; padding-left: 1.75em; }
.column-grip { color: var(--dv-muted); }
.column-index { min-width: 1.75rem; text-align: right; font-weight: 600; color: var(--dv-primary); font-variant-numeric: tabular-nums; }
.column-shown .column-index::before { counter-increment: column; content: counter(column) "."; }
.column-actions { display: flex; gap: .25rem; flex: 0 0 auto; }
.column-move, .column-remove { padding: .125rem .375rem; line-height: 1; }
.column-available .column-grip, .column-available .column-index, .column-available .column-move, .column-available .column-remove,
.column-shown .column-add { display: none; }
.column-available .column-row { min-height: 2.5rem; }
.column-empty, .column-group-empty { margin: .5rem 0 0; color: var(--dv-muted); font-size: .9rem; }
.column-group + .column-group { margin-top: 1.25rem; }
.column-group-title { display: flex; align-items: center; gap: .5rem; margin: 0 0 .5rem; font-size: 1rem; font-weight: 600; }
.column-settings .card-body > .hint { margin-bottom: 1rem; }
.column-available { display: grid; grid-template-columns: repeat(auto-fill, minmax(17.5rem, 1fr)); }
/* Se skriptem stačí tlačítka Přidat / × (zaškrtávátko zůstává pro odeslání formuláře a pro prohlížeč bez skriptu). */
.column-settings.is-enhanced .column-name .form-check-input { position: absolute; opacity: 0; pointer-events: none; }
.column-settings.is-enhanced .column-name { padding-left: 0; }

/* Vzdálená správa PC (Firma/Vzdalene, js/remote.js) */
.remote-bar { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; margin-bottom: .5rem; }
.remote-status { font-weight: 600; }
/* Běžící sezení: jen zelená tečka (js/remote.js status). */
.remote-status.is-connected { display: inline-block; width: .7rem; height: .7rem; border-radius: 50%; background: var(--dv-success); flex: none; overflow: hidden; font-size: 0; color: transparent; }
.remote-view { position: relative; background: #111; border-radius: 3px; overflow: hidden; display: flex; justify-content: center; }
.remote-screen { display: block; flex: none; outline: none; } /* velikost nastaví js/remote.js (fit) */
.remote-screen:focus-visible { outline: 2px solid var(--dv-info); }
.remote-cursor { position: absolute; width: 0; height: 0; pointer-events: none; }
.remote-cursor.has-shape { background-size: 100% 100%; background-repeat: no-repeat; }
.remote-cursor.has-shape::before { display: none; }
.remote-cursor::before { content: ""; position: absolute; left: -1px; top: -1px; border-style: solid; border-width: 0 0 14px 9px;
    border-color: transparent transparent transparent #fff; filter: drop-shadow(0 0 1px #000); }
.remote-note { display: inline-flex; align-items: center; gap: .35rem; padding: .2rem .6rem; border-radius: 3px; max-width: 100%;
    overflow-wrap: anywhere; unicode-bidi: isolate;
    background: var(--dv-info-soft); color: var(--dv-info); font-size: .875rem; }
.remote-group { display: inline-flex; flex-wrap: wrap; gap: .25rem; }
/* Cesta spojení (část 15): přímé spojení zeleně, přes server neutrálně; zpoždění a datový tok menším písmem */
.remote-link { display: inline-flex; align-items: center; gap: .35rem; padding: .2rem .6rem; border-radius: 3px; font-size: .875rem;
    background: var(--dv-surface-2, rgba(127,127,127,.12)); color: var(--dv-text); white-space: nowrap; }
.remote-link.is-direct { background: var(--dv-success-soft); color: var(--dv-success); }
.remote-link-stats { opacity: .8; font-variant-numeric: tabular-nums; }
.remote-link-stats:empty { display: none; }
.remote-group .bi-star-fill { font-size: .75em; }
.remote-combos .dropdown-item { display: flex; align-items: center; gap: .75rem; }
.remote-combos kbd { min-width: 7.5rem; text-align: center; }
.remote:fullscreen { background: #000; padding: 0; display: flex; flex-direction: column; }
.remote:fullscreen .remote-view { flex: 1 1 auto; min-height: 0; align-items: center; border-radius: 0; }
/* Schránka a soubory (js/remote-files.js): přetahování souborů do obrazu PC a správce souborů (dvě strany jako Supremo) */
.remote-drop { outline: 3px dashed var(--dv-info); outline-offset: -3px; }
.remote-confirm { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 3px; padding: .2rem .6rem; border-radius: 3px;
    background: var(--dv-warning-soft); color: var(--dv-text); }
.remote-files { width: min(1280px, 96vw); height: min(860px, 92vh); max-width: none; max-height: none; padding: 1rem;
    border: var(--dv-frame-width) solid var(--dv-frame); border-radius: 4px; background: var(--dv-surface); color: var(--dv-text); }
.remote-files[open] { display: flex; flex-direction: column; gap: .75rem; }
.remote-files::backdrop { background: rgba(15, 20, 29, .55); }
.remote-files-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.remote-files-title { display: flex; align-items: center; gap: .5rem; margin: 0; font-size: 1.25rem; font-weight: 600; }
.remote-files-panes { flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
.remote-pane { display: flex; flex-direction: column; gap: .5rem; min-height: 0; min-width: 0; }
.remote-pane-title { margin: 0; font-size: 1.1rem; font-weight: 600; color: var(--dv-primary); }
.remote-pane-path, .remote-pane-actions, .remote-pane-prompt { display: flex; align-items: center; gap: .5rem; }
.remote-pane-path .form-control { flex: 1 1 auto; min-width: 0; }
.remote-path-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; background: var(--dv-surface-2); }
.remote-places { flex: 0 0 auto; width: 9.5rem; }
.remote-pane-prompt { flex-wrap: wrap; padding: 3px; border-radius: 3px; background: var(--dv-warning-soft); }
.remote-pane-prompt .form-control { flex: 1 1 12rem; width: auto; }
.remote-pane-status { margin: 0; color: var(--dv-muted); }
.remote-table-wrap { flex: 1 1 auto; min-height: 0; overflow: auto; border: 1px solid var(--dv-border); border-radius: 3px; }
.remote-table { margin: 0; }
.remote-table thead th { position: sticky; top: 0; z-index: 1; background: var(--dv-surface-2); white-space: nowrap; }
.remote-table thead .link-button { font-weight: 600; color: inherit; }
.remote-table th[aria-sort="ascending"] .link-button::after { content: " \25B2"; font-size: .75em; }
.remote-table th[aria-sort="descending"] .link-button::after { content: " \25BC"; font-size: .75em; }
.remote-table tbody tr { cursor: default; user-select: none; }
.remote-table tbody td { white-space: nowrap; }
.remote-table tbody tr.selected > td { background: var(--dv-primary-soft); }
.remote-table tbody tr:focus-visible { outline: 2px solid var(--dv-primary); outline-offset: -2px; }
.remote-file-name { max-width: 22rem; overflow: hidden; text-overflow: ellipsis; }
.remote-file-name .bi { margin-right: .5rem; color: var(--dv-muted); }
.remote-file-name .bi-folder-fill, .remote-file-name .bi-folder-symlink-fill { color: var(--dv-warning); }
.remote-pane-empty { margin: 1rem; color: var(--dv-muted); }
.remote-transfers { max-height: 9rem; overflow: auto; display: flex; flex-direction: column; gap: .25rem;
    border-top: 1px solid var(--dv-border); padding-top: .5rem; }
.remote-transfer { display: grid; grid-template-columns: auto minmax(8rem, 1fr) 10rem minmax(10rem, 1.5fr) auto; align-items: center; gap: .5rem; }
.remote-transfer-name, .remote-transfer-state { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.remote-transfer.done .remote-transfer-state { color: var(--dv-muted); }
.remote-transfer progress { width: 100%; }
@media (max-width: 900px) {
    .remote-files-panes { grid-template-columns: 1fr; overflow: auto; }
    .remote-pane { min-height: 22rem; }
}
/* Tlačítko formuláře vzhledu odkazu (přechod do firmy z profilu Vše: POST, ne odkaz). */
.link-button { background: none; border: 0; padding: 0; font: inherit; text-align: left; cursor: pointer; }
.link-button:hover { text-decoration: underline; }

/* ---------- Okna (Bootstrap modal) a lišta nad tabulkou PC ---------- */
.modal {
    --bs-modal-bg: var(--dv-surface);
    --bs-modal-color: var(--dv-text);
    --bs-modal-border-color: var(--dv-frame);
    --bs-modal-border-width: var(--dv-frame-width);
    --bs-modal-header-border-color: var(--dv-border);
    --bs-modal-footer-border-color: var(--dv-border);
    --bs-modal-border-radius: 4px;
}
.modal-title { display: flex; align-items: center; gap: .5rem; margin: 0; font-size: 1.25rem; font-weight: 600; }
.modal-backdrop { --bs-backdrop-bg: #0f141d; --bs-backdrop-opacity: .55; }
.modal .column-settings .card { box-shadow: none; }
.table-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; margin-bottom: .75rem; }
/* Pole formulářů: ve světlém režimu výraznější okraj (jako rámečky oken). */
.form-control, .form-select { border-color: var(--dv-frame); }

/* ---------- Aplikace Dervion (stránky /App, docs/desktop-app.md) ---------- */
.aplikace-bar { padding: .75rem 1.5rem; gap: .9rem; }
.aplikace-brand { display: inline-flex; align-items: center; gap: .5rem; font-family: "Righteous", "IBM Plex Sans", sans-serif; font-size: 1.5rem; line-height: 1; color: var(--dv-text); white-space: nowrap; }
/* Logo (D ze sítě propojených PC) u názvu Dervion: v panelu, na přihlášení a v aplikaci. */
.sidebar .brand img, .auth-brand img, .aplikace-brand img { flex: none; }
.aplikace-firma {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    max-width: 18rem;
    padding: .45rem .75rem;
    border-radius: 3px;
    border: 1px solid var(--dv-border);
    background: var(--dv-surface-2);
    color: var(--dv-text);
    font-weight: 600;
    font-size: .9rem;
    font-family: inherit;
}
.aplikace-firma > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.aplikace-firma > i:first-child { color: var(--dv-primary); }
.aplikace-firma > .bi-chevron-expand { color: var(--dv-muted); margin-left: .15rem; }
button.aplikace-firma:hover, button.aplikace-firma:focus-visible { border-color: var(--dv-primary); }
.aplikace-firma.is-static { cursor: default; }
.topbar .search.aplikace-hledat { max-width: 420px; margin-left: 0; }
.aplikace-content { padding: 1.25rem 1.5rem 2rem; }
.aplikace-souhrn { margin-left: auto; display: inline-flex; align-items: center; gap: .5rem; font-weight: 500; font-size: .85rem; color: var(--dv-muted); }
.aplikace-nazev { display: flex; align-items: center; gap: .5rem; flex-wrap: nowrap; white-space: nowrap; }
.aplikace-nazev .dot { margin-right: .1rem; }
.aplikace-nazev .pill { margin-left: 0; }
.aplikace-tabulka td { vertical-align: middle; }
/* Akce u PC: velká tlačítka s textem (Připojit se, Otevřít ve webové konzoli). */
.aplikace-akce-skupina { display: inline-flex; gap: .5rem; align-items: center; justify-content: flex-end; flex-wrap: wrap; }
/* Užší okno: tlačítka pod sebou místo vodorovného posuvníku. */
.aplikace-tabulka > :not(caption) > * > * { padding: .75rem .8rem; }
.aplikace-tabulka .disk-cell { min-width: 140px; }
.aplikace-akce { display: inline-flex; align-items: center; gap: .5rem; padding: .55rem 1rem; font-weight: 600; white-space: nowrap; }
.aplikace-akce i { font-size: 1.1rem; }
.aplikace-prazdne { padding: 2rem 1.25rem; margin: 0; color: var(--dv-muted); text-align: center; }
.aplikace-karta { max-width: 40rem; margin: 2rem auto; }
.aplikace-odhlaseno-ikona { font-size: 2.5rem; color: var(--dv-muted); }
.aplikace-prejmenovat { width: 28px; height: 28px; color: var(--dv-muted); }
.aplikace-prejmenovat:hover, .aplikace-prejmenovat:focus-visible { color: var(--dv-primary); }
.aplikace-uzivatel { display: inline-flex; align-items: center; gap: .5rem; min-width: 0; max-width: 18rem; font-size: .9rem; font-weight: 500; color: var(--dv-text); }
.aplikace-uzivatel-jmeno { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 1100px) { .aplikace-uzivatel-jmeno { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); } }

@media (max-width: 767.98px) {
    .aplikace-bar { flex-wrap: wrap; }
    .topbar .search.aplikace-hledat { order: 3; max-width: none; flex-basis: 100%; }
}

/* Počet nových oznámení u ikony v horní liště (Notifications). */
.dv-badge-count { position: absolute; top: 2px; right: 0; min-width: 1.1rem; height: 1.1rem; padding: 0 .3rem; border-radius: 2px;
  background: var(--bs-danger); color: #fff; font-size: .72rem; font-weight: 600; line-height: 1.1rem; text-align: center; }
/* Okno vzdálené správy v aplikaci (Firm/Remote, _AppLayout bez lišty): obraz PC přes co největší část okna. */
.aplikace-vzdalene .aplikace-content { padding: .25rem .25rem 0; }
/* Okno sezení v aplikaci bez posuvníku stránky: obraz se vejde vždy (fit), posuvník by jen rozkmital velikost obrazu. */
html:has(body.aplikace-vzdalene), body.aplikace-vzdalene { overflow: hidden; }
.aplikace-vzdalene .remote-bar { margin-bottom: .25rem; gap: .35rem; }
.aplikace-vzdalene .remote-view { border-radius: 0; }
.aplikace-vzdalene .alert { margin-bottom: .25rem; }

/* Kompaktní aplikace (přání uživatele 2026-10-20: menší okno jako Supremo, víc PC na obrazovce). Jen stránky aplikace
   (_AppLayout); webová konzole zůstává 16 px. Drobné texty nejméně ~12–13 px. */
html:has(> body.aplikace) { font-size: 14px; }
.aplikace .aplikace-bar { padding: .4rem .75rem; gap: .6rem; }
.aplikace .aplikace-brand { font-size: 1.2rem; }
.aplikace .aplikace-firma { padding: .3rem .6rem; max-width: 14rem; }
.aplikace .topbar .search.aplikace-hledat { max-width: 320px; }
.aplikace .topbar .search.aplikace-hledat .form-control { padding-top: .3rem; padding-bottom: .3rem; }
.aplikace .aplikace-content { padding: .6rem .75rem 1rem; }
.aplikace .aplikace-seznam > .card-header { padding: .5rem .75rem; gap: .5rem; }
.aplikace .aplikace-tabulka > :not(caption) > * > * { padding: .35rem .5rem; }
.aplikace .aplikace-tabulka thead th { font-size: .9rem; }
.aplikace .aplikace-tabulka .device-cell { gap: .5rem; }
.aplikace .aplikace-tabulka .device-icon { width: 28px; height: 28px; border-radius: 3px; font-size: .95rem; }
.aplikace .aplikace-tabulka .device-cell .sub { font-size: .9rem; }
.aplikace .aplikace-tabulka .disk-cell { min-width: 110px; }
.aplikace .aplikace-tabulka .disk-text { margin-bottom: .15rem; }
.aplikace .aplikace-tabulka .pill { font-size: .85rem; }
.aplikace .aplikace-tabulka tr.group-row > td { padding: .3rem .5rem; }
.aplikace .aplikace-akce-skupina { gap: .3rem; flex-wrap: nowrap; }
.aplikace .aplikace-akce { padding: .25rem .6rem; gap: .35rem; font-size: .93rem; }
.aplikace .aplikace-akce i { font-size: 1rem; }
.aplikace-ikona { padding: .25rem .45rem; line-height: 1.2; }
.aplikace .aplikace-prejmenovat { width: 22px; height: 22px; }
.aplikace-obnovit { display: inline-flex; align-items: center; gap: .35rem; white-space: nowrap; }
.aplikace-souhrn + form { margin-left: .5rem !important; }
.aplikace-skupina-oddel { margin: 0 .35rem; color: var(--dv-muted); }
.aplikace-zjistuji { color: var(--dv-info); animation: dv-otacet 1.2s linear infinite; }
@keyframes dv-otacet { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .aplikace-zjistuji { animation: none; } }

.aplikace-kategorie-pc { width: 28px; height: 28px; color: var(--dv-muted); }

/* Aplikace: PC ve skupině odsazená pod záhlaví kategorie (přání vlastníka 2026-10-20), se svislou čarou pod ikonou
   složky jako ve stromu a výrazným oddělením skupin, ať je hned vidět, kde která kategorie končí. Jen skupiny se záhlavím
   (firma bez kategorií záhlaví nemá). */
.aplikace .aplikace-tabulka tbody.aplikace-skupina-odsazena > tr:not(.group-row) > td:first-child {
  padding-left: 2.6rem;
  background-image: linear-gradient(color-mix(in srgb, var(--dv-muted) 45%, transparent), color-mix(in srgb, var(--dv-muted) 45%, transparent));
  background-size: 2px 100%; background-position: 1.15rem 0; background-repeat: no-repeat; }
.aplikace .aplikace-tabulka tbody.aplikace-skupina-odsazena > tr:not(.group-row):last-child > td:first-child { background-size: 2px 50%; }
.aplikace .aplikace-tabulka tbody + tbody > tr.group-row > td { border-top: 2px solid var(--dv-border); padding-top: .55rem; }
.aplikace .aplikace-tabulka tbody.aplikace-skupina-odsazena > tr:not(.group-row):last-child > td { border-bottom: 0; padding-bottom: .55rem; }

/* Vzdálená správa v celé obrazovce (přání vlastníka 2026-10-20, jako Supremo): lišta se schová a vysune najetím myší
   k hornímu okraji; obraz zabere celou obrazovku. Tenký proužek nahoře ukazuje, kde lišta je. */
.remote-bar-handle { display: none; }
.remote:fullscreen { position: relative; }
.remote:fullscreen .remote-bar { position: absolute; top: 0; left: 0; right: 0; z-index: 5; margin: 0; padding: .4rem .6rem;
  background: rgba(15, 20, 29, .92); color: #e4e9f1; box-shadow: 0 2px 12px rgba(0, 0, 0, .5);
  transform: translateY(-100%); transition: transform .18s ease-out; }
.remote:fullscreen.remote-bar-shown .remote-bar { transform: none; }
.remote:fullscreen .remote-bar-handle { display: block; position: absolute; top: 0; left: 50%; z-index: 4; width: 6rem; height: 6px;
  margin-left: -3rem; border-radius: 0 0 2px 2px; background: rgba(148, 163, 184, .55); }
.remote:fullscreen.remote-bar-shown .remote-bar-handle { display: none; }
/* Měřítko 100 %: obraz ve skutečné velikosti, oblast obrazu se posouvá. */
.remote-view.remote-actual { overflow: auto; justify-content: flex-start; align-items: flex-start; }

/* Síť serveru (Admin/Network): graf provozu po hodinách (SVG z webu, barvy třídami kvůli CSP). */
.net-chart { width: 100%; height: auto; max-height: 220px; display: block; }
.net-chart .net-in, .net-legend.net-in { fill: var(--bs-primary); background: var(--bs-primary); }
.net-chart .net-out, .net-legend.net-out { fill: var(--bs-success); background: var(--bs-success); }
.net-chart .net-axis { fill: var(--dv-muted); font-size: 11px; }
.net-legend { display: inline-block; width: .7rem; height: .7rem; border-radius: 2px; margin-right: .3rem; vertical-align: middle; }

/* Podpora (Support, Admin/Support): počet nepřečtených v menu, konverzace podnětu. */
.sidebar .nav-count { margin-left: auto; min-width: 1.3rem; padding: 0 3px; border-radius: 2px; font-size: .75rem; font-weight: 600;
  line-height: 1.3rem; text-align: center; background: var(--dv-primary-soft); color: var(--dv-primary); }
.sidebar .nav-count.nav-count-danger { background: var(--bs-danger); color: #fff; }
.support-list .list-group-item.unread .support-subject { font-weight: 700; }
.support-dot { display: inline-block; width: .55rem; height: .55rem; border-radius: 50%; background: var(--dv-primary); flex-shrink: 0; }
.support-messages { display: flex; flex-direction: column; gap: .85rem; }
.support-message { max-width: 85%; padding: .75rem 1rem; border-radius: 4px; border: 1px solid var(--dv-border); background: var(--dv-surface-2); }
.support-message.from-me { align-self: flex-end; background: var(--dv-primary-soft); border-color: transparent; }
.support-message .support-meta { font-size: .8rem; color: var(--dv-muted); margin-bottom: .3rem; }
.support-message .support-body { white-space: pre-wrap; overflow-wrap: anywhere; margin: 0; }
/* Celý řádek podnětu je odkaz (stretched-link na předmětu). */
.support-item { cursor: pointer; }
.support-item:hover { background: var(--dv-surface-2); }
.support-item .support-subject { color: inherit; text-decoration: none; }
.support-item:hover .support-subject { color: var(--dv-primary); }
/* Nabídka aktualizace v aplikaci (App/UpdateAvailable): přes celé okno pod lištou. */
.aplikace-aktualizace { min-height: calc(100vh - 80px); display: grid; place-items: center; padding: 2rem 1.5rem; }
.aplikace-aktualizace-obsah { max-width: 34rem; text-align: center; }
.aplikace-aktualizace-ikona { width: 43px; height: 43px; margin: 0 auto 1.25rem; border-radius: 50%; display: grid; place-items: center;
  background: var(--dv-primary-soft); color: var(--dv-primary); font-size: 2.2rem; }
.aplikace-aktualizace h1 { font-size: 1.6rem; font-weight: 700; margin-bottom: .75rem; }
.aplikace-aktualizace .lead { font-weight: 600; margin-bottom: .5rem; }
.aplikace-aktualizace-tlacitka { display: flex; gap: .75rem; justify-content: center; flex-wrap: wrap; margin: 1.5rem 0 1rem; }
.aplikace-aktualizace-tlacitka .btn { display: inline-flex; align-items: center; gap: .5rem; }
.aplikace-aktualizace-stav { min-height: 1.5em; font-weight: 500; margin-bottom: .5rem; }
.aplikace-aktualizace-pozn { font-size: .85rem; color: var(--dv-muted); margin: 0; }
/* Odeslané e-maily (Admin/Mail): adresa celá na jednom řádku (lámat se smí jen extrémně dlouhá), druh se zalomí,
   výsledek s chybou má dost místa (dřív se adresy dělily uprostřed, protože druh se nesměl zalomit). */
.mail-kind { min-width: 9rem; }
.mail-recipient { white-space: nowrap; }
.mail-result { max-width: 26rem; }
.mail-result > div { min-width: 14rem; } /* min-width buňky tabulka nedodrží, obsah ano */
.mail-result .mono { overflow-wrap: anywhere; }


/* Nástroje na pozadí (Pages/Firm/Tools.cshtml, docs/phase8-background-tools.md) */
.tools-search { max-width: 22rem; }
.tools-status { min-height: 1.5rem; }
.tools-table td { vertical-align: baseline; }
.tools-message { white-space: pre-wrap; word-break: break-word; max-width: 48rem; }

/* ---------- Vzhled 2026-11-02: méně ozdob (přání uživatele „ne jako od AI“) ----------
   Ikony zůstávají v menu, v tlačítkách a v záložkách; nadpisy, dlaždice a seznamy je nepotřebují. Barevné podklady jen tam,
   kde něco hlásí (štítek stavu, upozornění), ne pod každou ikonou. */
.card-header { padding: .7rem 1rem; }
.card-header > i.bi:first-child { display: none; }
.card-body { padding: 1rem; }

.stat-icon { display: none; }
.stat, .card.stat { padding: .85rem 1rem; }

.device-icon, .device-icon.is-blocked { background: none; width: 1.6rem; height: auto; font-size: 1.15rem; color: var(--dv-muted); }
.device-icon.is-blocked { color: var(--dv-danger); }
.device-hero .device-icon { width: 2.4rem; height: auto; font-size: 2rem; }
.check-list .check-icon { background: none; width: 1.5rem; height: auto; font-size: 1.1rem; }

.dot-online, .dot-blocked { box-shadow: none; }

/* Aktivní položka menu: svislá značka vlevo, ne bílá dlaždice. */
.sidebar .nav-link.active { box-shadow: inset 3px 0 0 var(--dv-sidebar-active-icon); }

.btn { font-weight: 500; }
.btn-primary { font-weight: 600; }

.table thead th { border-bottom: 1px solid var(--dv-frame); }
.pill { padding: .1rem .45rem; font-size: .78rem; }
.mini-bar, .mini-bar > div { border-radius: 1px; }

/* Nástroje na pozadí: hutnější tabulky, čísla na jednom řádku. */
.tools-table td.text-end, .tools-table th.text-end { white-space: nowrap; }
.tools-table .btn-sm { padding: .2rem .45rem; }
.metric .metric-label i, .freshness > span > i, .meter-head .fw-semibold i { display: none; }
.kv dd { font-weight: 400; }
.page-title > i.bi:first-child { display: none; }

/* ---------------------------------------------------------------- skripty a terminál (docs/phase9-scripts-terminal.md) */
.script-text { min-height: 18rem; font-size: .9rem; }
.script-output { max-height: 32rem; overflow: auto; white-space: pre-wrap; word-break: break-word; font-size: .85rem; }
.terminal-bar { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; margin-bottom: .5rem; }
.terminal-shell { width: auto; }
.terminal-screen { height: 32rem; background: #000; padding: .25rem; border: 1px solid var(--bs-border-color); border-radius: 3px; }

/* ---------- Vzhled 2026-11-03: neutrální šedá, kontrolka stavu, tiché štítky (přání uživatele „méně jako od AI“) ----------
   Povrchy, menu a rámečky jsou šedé; fialová (z loga) jen u hlavní akce, výběru a odkazů. Barevně se hlásí jen stav (kontrolka). Logo a
   písmo nápisu zůstávají (rozhodnutí uživatele). Menu 16 px jako obsah. */
.mono, .code-key, .codes, .ram-slot-label { font-family: "Cascadia Mono", "Cascadia Code", Consolas, ui-monospace, monospace; }

/* Boční menu: hutnější řádky, nadpis skupiny blíž ke svým položkám než k předchozí skupině. */
.sidebar .brand { padding: 1.25rem 1.5rem 1rem; }
.sidebar-tenant { font-weight: 600; font-size: 1.125rem; }
.sidebar-tenant i { color: var(--dv-sidebar-section); }
.sidebar .nav-section { padding: 1.5rem 1.5rem .5rem; font-size: .8125rem; font-weight: 500; }
.sidebar .nav-link { margin: 2px .75rem; padding: .375rem .75rem; gap: .625rem; font-size: 1rem; font-weight: 400; }
.sidebar .nav-link i { font-size: 1rem; width: 1.25rem; color: var(--dv-sidebar-section); }
.sidebar .nav-link:hover i { color: var(--dv-sidebar-text); }
.sidebar .nav-link.active { font-weight: 500; box-shadow: inset 2px 0 0 var(--dv-sidebar-active-icon); }
.sidebar .nav-count { background: transparent; color: var(--dv-sidebar-section); font-family: "Cascadia Mono", Consolas, monospace; font-weight: 400; }
.sidebar .nav-count.nav-count-danger { background: var(--dv-danger); color: #fff; }
.sidebar-footer { padding: .75rem; }

/* Horní lišta a nadpisy stránek */
.topbar { padding: .75rem 2rem; height: 68px; } /* pevná výška: seznam PC u detailu začíná hned pod ní */
.topbar .search input { background: var(--dv-surface); }
.page-title { font-size: 1.625rem; font-weight: 500; }
.card-header { font-weight: 500; }
.table thead th { font-size: .8125rem; font-weight: 500; }

/* Souhrn počtů a údaje v detailu PC: jeden pruh s předěly místo řady stejných dlaždic. */
.row:has(> [class*="col"] > .stat), .row:has(> [class*="col"] > .card > .metric) {
    --bs-gutter-x: 0;
    --bs-gutter-y: 0;
    margin-left: 0;
    margin-right: 0;
    background: var(--dv-surface);
    border: var(--dv-frame-width) solid var(--dv-frame);
    border-radius: 4px;
    overflow: hidden;
}
.row:has(> [class*="col"] > .stat) > [class*="col"], .row:has(> [class*="col"] > .card > .metric) > [class*="col"] {
    box-shadow: 1px 0 0 var(--dv-border), 0 1px 0 var(--dv-border);
}
.row > [class*="col"] > .card:has(> .metric) { border: 0; border-radius: 0; background: transparent; }
.metric .metric-label { font-size: .8125rem; font-weight: 400; }
.metric .metric-value { font-weight: 500; }
.row > [class*="col"] > .card.stat { border: 0; border-radius: 0; background: transparent; flex-direction: column-reverse; align-items: flex-start; justify-content: flex-end; gap: .25rem; padding: .875rem 1.25rem 1rem; }
.stat-value { font-size: 1.75rem; font-weight: 500; }
.stat-label { font-size: .8125rem; font-weight: 400; }
a.stat-link { transition: background-color .15s cubic-bezier(.22, 1, .36, 1); }
.row > [class*="col"] > a.stat-link:hover { background: var(--dv-surface-2); text-decoration: none; }
.row > [class*="col"] > a.stat-link.is-active { box-shadow: inset 0 -2px 0 var(--dv-primary); }

/* Kontrolka stavu PC: malý čtverec jako LED na přístroji, všude stejný. */
.dot { width: 8px; height: 8px; border-radius: 1px; }
.dot-offline { background: var(--dv-idle); }

/* Štítky: text s kontrolkou, bez barevného podkladu a bez ikon. */
.pill {
    background: transparent;
    padding: 0;
    gap: .375rem;
    font-weight: 500;
    font-size: .8125rem;
}
.pill > i.bi { display: none; }
.pill::before { content: ""; width: 6px; height: 6px; border-radius: 1px; background: currentColor; flex-shrink: 0; }
.pill:has(> .dot)::before { display: none; }
.pill-muted { border: 0; }
.device-cell .pill, .pills .pill + .pill { margin-left: .5rem; }
.health-list .pill { justify-content: flex-start; }
.pill-muted::before { background: var(--dv-idle); }

/* Záložky detailu PC: jen text a počet. */
.nav-tabs-ns .nav-link { font-weight: 500; }
.nav-tabs-ns .nav-link > i.bi { display: none; }
.nav-tabs-ns .nav-link.active { color: var(--dv-text); }
.nav-tabs-ns .count { background: transparent; border: 0; padding: 0; color: var(--dv-muted); font-family: "Cascadia Mono", Consolas, monospace; font-size: .875rem; font-weight: 400; }
.nav-tabs-ns .count-danger { background: transparent; color: var(--dv-danger); }
.card-header .count, .table tr.group-row .count, .usb-internal > summary .count {
    background: transparent; border: 0; padding: 0; color: var(--dv-muted); font-family: "Cascadia Mono", Consolas, monospace; font-weight: 400;
}

/* Hlavička detailu PC jako inventární štítek: název neproporcionálním písmem, údaje jako prostý text. */
.device-hero h1 { font-family: "Cascadia Mono", "Cascadia Code", Consolas, monospace; font-weight: 600; font-size: 1.5rem; }
.chips { gap: .25rem 1.25rem; margin-top: .25rem; }
.chip { background: transparent; border: 0; padding: 0; border-radius: 0; color: var(--dv-muted); font-size: .875rem; font-weight: 400; }
.chip > i.bi { display: none; }

/* Hlášky a naplánovaný restart: neutrální podklad, barvu nese proužek vlevo a ikona. */
.alert, .scheduled-box {
    background: var(--dv-surface);
    border: var(--dv-frame-width) solid var(--dv-frame);
    border-left: 3px solid var(--dv-frame);
    color: var(--dv-text);
}
.alert { --bs-alert-bg: var(--dv-surface); --bs-alert-color: var(--dv-text); --bs-alert-link-color: var(--dv-primary); }
.alert-success { border-left-color: var(--dv-success); }
.alert-success > i { color: var(--dv-success); }
.alert-danger { border-left-color: var(--dv-danger); }
.alert-danger > i { color: var(--dv-danger); }
.alert-warning, .scheduled-box { border-left-color: var(--dv-warning); }
.alert-warning > i { color: var(--dv-warning); }
.alert-info { border-left-color: var(--dv-info); }
.alert-info > i { color: var(--dv-info); }
.alert-secondary { --bs-alert-color: var(--dv-muted); }
.health-card { border-left-width: 3px; }

.btn-success {
    --bs-btn-bg: var(--dv-success);
    --bs-btn-border-color: var(--dv-success);
    --bs-btn-hover-bg: color-mix(in srgb, var(--dv-success) 85%, #000);
    --bs-btn-hover-border-color: color-mix(in srgb, var(--dv-success) 85%, #000);
}
[data-bs-theme="dark"] .btn-success { --bs-btn-color: #0b1018; --bs-btn-hover-color: #0b1018; --bs-btn-active-color: #0b1018; }
.auth-card h1 { font-weight: 600; }

/* Menu na úzké obrazovce: vysouvá se posunem (transform), ne změnou polohy. */
@media (max-width: 991.98px) {
    .sidebar { left: 0; transform: translateX(-100%); transition: transform .2s cubic-bezier(.22, 1, .36, 1); }
    .sidebar.open { left: 0; transform: none; }
    .topbar { padding-left: 1rem; padding-right: 1rem; }
}
@media (prefers-reduced-motion: reduce) {
    .sidebar { transition: none; }
}

/* ---------- Úzké menu s ikonami (2026-11-03, přání uživatele, inspirace UniFi) ----------
   Výchozí na širší obrazovce: jen ikony (64 px); po najetí myší se menu plynule rozbalí s názvy a obsah se posune. Tlačítkem dole se menu
   připne v plné šířce (<html data-menu="wide">, js/menu-state.js). Na úzké obrazovce zůstává vysouvací menu s názvy. */
.sidebar-toggle {
    display: flex;
    align-items: center;
    gap: .625rem;
    margin: auto .75rem .5rem;
    padding: .375rem .75rem;
    border: 0;
    border-radius: 3px;
    background: transparent;
    color: var(--dv-sidebar-section);
    font: inherit;
    font-size: .875rem;
    text-align: left;
}
.sidebar-toggle:hover { color: var(--dv-sidebar-strong); background: var(--dv-sidebar-hover); }
.sidebar-toggle:focus-visible { outline: 2px solid var(--dv-primary); outline-offset: -2px; }
.sidebar-toggle i { font-size: 1rem; width: 1.25rem; text-align: center; }
.sidebar-toggle + .sidebar-footer { margin-top: 0; }
.sidebar-toggle[aria-pressed="true"] i { color: var(--dv-sidebar-active-icon); }
.sidebar-footer-row { display: flex; align-items: center; gap: .25rem; }
@media (max-width: 991.98px) { .sidebar-toggle { display: none; } .sidebar-footer { margin-top: auto; } }

/* Vnitřek menu se zužuje s menu; popisky jsou na jednom řádku a v úzkém menu se schovají (ne useknou). Posuvník uvnitř. */
.sidebar { display: block; overflow: hidden; }
.sidebar-inner { width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto; overflow-x: hidden; }
.sidebar .brand, .sidebar .nav-section, .sidebar .nav-link, .sidebar-tenant, .sidebar-toggle { white-space: nowrap; overflow: hidden; }
.sidebar-footer { overflow: hidden; }
.sidebar-inner > * { min-width: 0; }
/* Bootstrap .nav zalamuje (flex-wrap): sloupec by pak byl široký jako nejdelší popisek. */
.sidebar .nav { flex-wrap: nowrap; }

@media (min-width: 992px) {
    /* Úzké menu (64 px) je součástí stránky: po najetí myší se plynule rozbalí a obsah stránky se posune s ním (nic
       nepřekrývá). Rozbalení po 150 ms nad menu (třída is-open, js/menu.js), klávesnice :focus-visible. */
    html:not([data-menu="wide"]) .sidebar { width: 64px; transition: width .24s cubic-bezier(.22, 1, .36, 1); }
    html:not([data-menu="wide"]) .sidebar.is-open, html:not([data-menu="wide"]) .sidebar:has(:focus-visible), html:not([data-menu="wide"]) .sidebar:has(.dropdown-menu.show) { width: 268px; }

    /* Ikony na středu úzkého menu, v obou šířkách na stejném místě (8 px okraj + 14 px odsazení + ikona 20 px). Položky
       (zvýraznění, rámeček firmy) mají okraj 8 px z obou stran, takže v úzkém menu jsou celé (48 px) i se zaoblením. */
    html:not([data-menu="wide"]) .sidebar .brand { padding-left: 1rem; }
    html:not([data-menu="wide"]) .sidebar .brand img { width: 32px; height: 32px; }
    html:not([data-menu="wide"]) .sidebar-tenant, html:not([data-menu="wide"]) .sidebar-tenant-switch { margin-left: .5rem; margin-right: .5rem; }
    html:not([data-menu="wide"]) .sidebar-tenant-switch .sidebar-tenant { margin: 0; }
    html:not([data-menu="wide"]) .sidebar-tenant { padding-left: 13px; }
    html:not([data-menu="wide"]) .sidebar-tenant > i:first-child { width: 20px; flex-shrink: 0; text-align: center; font-size: 1.125rem; }
    html:not([data-menu="wide"]) .sidebar .nav-link { position: relative; margin-left: .5rem; margin-right: .5rem; padding-left: 14px; }
    html:not([data-menu="wide"]) .sidebar .nav-link i { width: 20px; flex-shrink: 0; font-size: 1.125rem; }
    html:not([data-menu="wide"]) .sidebar-toggle { margin-left: .5rem; margin-right: .5rem; padding-left: 14px; }
    html:not([data-menu="wide"]) .sidebar-toggle i { width: 20px; flex-shrink: 0; }
    html:not([data-menu="wide"]) .sidebar-footer { padding-left: .5rem; padding-right: .5rem; }

    /* Popisky se plynule objeví a schovají (barva/průhlednost), ikony zůstávají. */
    html:not([data-menu="wide"]) .sidebar .brand,
    html:not([data-menu="wide"]) .sidebar .nav-link,
    html:not([data-menu="wide"]) .sidebar-tenant > span,
    html:not([data-menu="wide"]) .sidebar .nav-section,
    html:not([data-menu="wide"]) .sidebar-toggle-text,
    html:not([data-menu="wide"]) .sidebar-user > .min-w-0 { transition: color .18s cubic-bezier(.22, 1, .36, 1), opacity .18s cubic-bezier(.22, 1, .36, 1); }
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .brand,
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .nav-link,
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .nav-link:hover { color: transparent; }
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .nav-link i { color: var(--dv-sidebar-section); }
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .nav-link.active i { color: var(--dv-sidebar-active-icon); }
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .sidebar-tenant > span,
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .sidebar-tenant > .bi-chevron-expand,
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .nav-section,
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .sidebar-toggle-text,
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .sidebar-user > .min-w-0 { opacity: 0; }
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .sidebar-footer-row form { display: none; }
    /* Počet (nové odpovědi podpory) v úzkém menu jako malá značka u ikony. */
    html:not([data-menu="wide"]) .sidebar:not(.is-open):not(:has(:focus-visible)):not(:has(.dropdown-menu.show)) .nav-count {
        position: absolute; top: 2px; left: 28px; margin: 0; min-width: 1rem; padding: 0 2px; line-height: 1rem; font-size: .625rem;
        background: var(--dv-primary); color: #fff; border-radius: 2px;
    }
}

@media (min-width: 992px) and (prefers-reduced-motion: reduce) {
    html:not([data-menu="wide"]) .sidebar { transition: none; }
}

/* ---------- Detail PC se seznamem PC vlevo (2026-11-03, přání uživatele, inspirace UniFi) ----------
   Vlevo od detailu úzký seznam počítačů a skupin (_DeviceList), detail zabírá zbytek. Z přehledu PC detail plynule vyjede
   zprava, křížkem zajede zpět; mezi PC v seznamu se detail jen prolne. Animace prohlížeče (View Transitions mezi stránkami,
   Edge/Chrome, i aplikace Dervion), bez skriptu; jinde se stránka jen přepne. */
.device-layout {
    display: grid;
    grid-template-columns: 260px minmax(0, 1fr);
    margin: -1.75rem -2rem -3rem;
    min-height: calc(100vh - 68px);
}
.device-main { position: relative; min-width: 0; padding: 1.75rem 2rem 3rem; }
.device-close { position: absolute; top: 1.25rem; right: 1.5rem; color: var(--dv-muted); font-size: 1.125rem; }
.device-close:hover { color: var(--dv-text); text-decoration: none; }
.device-main > nav[aria-label] { padding-right: 3rem; }

.device-list {
    position: sticky;
    top: 68px;
    height: calc(100vh - 68px);
    overflow-y: auto;
    padding: .75rem .5rem 1.5rem;
    background: var(--dv-surface);
    border-right: 1px solid var(--dv-border);
}
.device-list-head { display: flex; align-items: baseline; gap: .5rem; padding: .25rem .625rem .5rem; font-weight: 500; }
.device-list-head a { color: var(--dv-text); }
.device-list .count { margin-left: auto; color: var(--dv-muted); font-family: "Cascadia Mono", Consolas, monospace; font-size: .8125rem; font-weight: 400; }
.device-list-group + .device-list-group { margin-top: .25rem; }
.device-list-group-name.group-toggle {
    display: flex; align-items: center; gap: .375rem; width: 100%; padding: .375rem .625rem; border-radius: 3px;
    font-size: .8125rem; font-weight: 500; color: var(--dv-muted); text-align: left;
    transition: background-color .15s cubic-bezier(.22, 1, .36, 1), color .15s cubic-bezier(.22, 1, .36, 1);
}
.device-list-group-name.group-toggle:hover { background: var(--dv-surface-2); color: var(--dv-text); }
.device-list-group-name .group-chevron { font-size: .75rem; }
.device-list-group.sbaleno > ul { display: none; }
.device-list-group-name > span:first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.device-list ul { list-style: none; margin: 0; padding: 0; }
.device-list-item {
    display: flex;
    align-items: center;
    gap: .5rem;
    padding: .375rem .625rem;
    border-radius: 3px;
    color: var(--dv-text);
    font-size: .9375rem;
    transition: background-color .15s cubic-bezier(.22, 1, .36, 1);
}
.device-list-item:hover { background: var(--dv-surface-2); text-decoration: none; color: var(--dv-text); }
.device-list-item.active { background: var(--dv-primary-soft); box-shadow: inset 2px 0 0 var(--dv-primary); font-weight: 500; }
.device-list-item:focus-visible { outline: 2px solid var(--dv-primary); outline-offset: -2px; }
.device-list-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.device-list-problem { width: 6px; height: 6px; border-radius: 1px; flex-shrink: 0; }
.device-list-problem.is-critical { background: var(--dv-danger); }
.device-list-problem.is-warning { background: var(--dv-warning); }

@media (max-width: 991.98px) {
    .device-layout { display: block; margin: 0; min-height: 0; }
    .device-list { display: none; }
    .device-main { padding: 0; }
    .device-close { top: -.25rem; right: 0; }
}

/* Animace mezi stránkami: z přehledu PC detail vyjede zprava, křížkem zajede doprava. Mezi dvěma PC (klik v seznamu vlevo)
   se nový detail jen objeví na místě: žádné přelévání starého detailu do nového (posunutý/odscrollovaný detail by jinak
   „vylétl nahoru“). Menu, horní lišta a zbytek stránky se přepnou bez animace. */
@view-transition { navigation: auto; }
.device-list { view-transition-name: dv-pc-list; }
.device-main { view-transition-name: dv-pc-detail; }
::view-transition-old(root), ::view-transition-new(root) { animation: none; }
::view-transition-group(dv-pc-list), ::view-transition-group(dv-pc-detail) { animation: none; }
::view-transition-old(dv-pc-list), ::view-transition-new(dv-pc-list) { animation: none; }
::view-transition-old(dv-pc-detail) { animation: none; opacity: 0; }
::view-transition-new(dv-pc-detail) { animation: dv-fade-in .16s cubic-bezier(.22, 1, .36, 1) both; }
::view-transition-new(dv-pc-detail):only-child { animation: dv-detail-in .38s cubic-bezier(.22, 1, .36, 1) both; }
::view-transition-old(dv-pc-detail):only-child { opacity: 1; animation: dv-detail-out .3s cubic-bezier(.22, 1, .36, 1) both; }
@keyframes dv-detail-in { from { transform: translateX(100%); } }
@keyframes dv-detail-out { to { transform: translateX(100%); } }
@keyframes dv-fade-in { from { opacity: 0; } }
@media (prefers-reduced-motion: reduce) {
    ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; }
}
.device-list-group-name.group-toggle:focus-visible { outline-offset: -2px; border-radius: 3px; }

/* Záhlaví skupiny PC: rozbalení přes celou šířku, vpravo tužka pro úpravu kategorie (Firm/Index). */
.group-head { display: flex; align-items: center; gap: .25rem; }
.group-head .group-toggle { flex: 1 1 auto; width: auto; }
.table tr.group-row .group-edit { padding: 0 .35rem; color: var(--dv-muted); line-height: 1; }
.table tr.group-row .group-edit i { margin-right: 0; }
.table tr.group-row .group-edit:hover, .table tr.group-row .group-edit:focus-visible { color: var(--dv-primary); }
