/* ==========================================================================
   Docházka Collegů — design systém
   Jeden soubor, žádné závislosti. Světlý + tmavý režim přes CSS proměnné.
   Optimalizováno pro slabý hardware (Rpi 3B): žádný backdrop-filter,
   animace pouze transform/opacity.
   ========================================================================== */

/* ---------- Proměnné ---------- */
:root {
    color-scheme: light;

    --bg: #f1f5f9;
    --surface: #ffffff;
    --surface-2: #f8fafc;
    --surface-3: #eef2f7;
    --border: #e2e8f0;
    --border-strong: #cbd5e1;
    --text: #1e293b;
    --text-2: #64748b;
    --text-3: #94a3b8;

    --accent: #4f46e5;
    --accent-hover: #4338ca;
    --accent-soft: #eef2ff;
    --accent-border: #c7d2fe;
    --accent-text: #4338ca;
    --on-accent: #ffffff;

    --success: #059669;
    --success-hover: #047857;
    --success-soft: #ecfdf5;
    --success-border: #a7f3d0;
    --success-text: #047857;

    --danger: #e11d48;
    --danger-hover: #be123c;
    --danger-soft: #fff1f2;
    --danger-border: #fecdd3;
    --danger-text: #be123c;

    --warning: #d97706;
    --warning-soft: #fffbeb;
    --warning-border: #fde68a;
    --warning-text: #b45309;

    --info: #2563eb;
    --info-soft: #eff6ff;
    --info-border: #bfdbfe;
    --info-text: #1d4ed8;

    --sickday: #ea580c;
    --sickday-soft: #fff7ed;
    --sickday-border: #fed7aa;
    --sickday-text: #c2410c;

    --homeoffice: #0891b2;
    --homeoffice-soft: #ecfeff;
    --homeoffice-border: #a5f3fc;
    --homeoffice-text: #0e7490;

    --event: #7c3aed;
    --event-soft: #f5f3ff;
    --event-border: #ddd6fe;
    --event-text: #6d28d9;

    --business: #4f46e5;
    --business-soft: #eef2ff;
    --business-border: #c7d2fe;
    --business-text: #4338ca;

    --shadow-sm: 0 1px 2px rgba(2, 6, 23, .06);
    --shadow-md: 0 4px 12px rgba(2, 6, 23, .08);
    --radius: 12px;
    --radius-lg: 16px;
    --radius-sm: 8px;
    --font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}

[data-theme="dark"] {
    color-scheme: dark;

    --bg: #0f172a;
    --surface: #1e293b;
    --surface-2: #1a2438;
    --surface-3: #283548;
    --border: #334155;
    --border-strong: #475569;
    --text: #e2e8f0;
    --text-2: #94a3b8;
    --text-3: #64748b;

    --accent: #818cf8;
    --accent-hover: #a5b4fc;
    --accent-soft: rgba(99, 102, 241, .16);
    --accent-border: rgba(129, 140, 248, .35);
    --accent-text: #a5b4fc;
    --on-accent: #1e1b4b;

    --success: #10b981;
    --success-hover: #34d399;
    --success-soft: rgba(16, 185, 129, .13);
    --success-border: rgba(16, 185, 129, .35);
    --success-text: #6ee7b7;

    --danger: #f43f5e;
    --danger-hover: #fb7185;
    --danger-soft: rgba(244, 63, 94, .13);
    --danger-border: rgba(244, 63, 94, .35);
    --danger-text: #fda4af;

    --warning: #f59e0b;
    --warning-soft: rgba(245, 158, 11, .13);
    --warning-border: rgba(245, 158, 11, .35);
    --warning-text: #fcd34d;

    --info: #3b82f6;
    --info-soft: rgba(59, 130, 246, .13);
    --info-border: rgba(59, 130, 246, .35);
    --info-text: #93c5fd;

    --sickday: #fb923c;
    --sickday-soft: rgba(249, 115, 22, .13);
    --sickday-border: rgba(249, 115, 22, .35);
    --sickday-text: #fdba74;

    --homeoffice: #22d3ee;
    --homeoffice-soft: rgba(6, 182, 212, .13);
    --homeoffice-border: rgba(6, 182, 212, .35);
    --homeoffice-text: #67e8f9;

    --event: #a78bfa;
    --event-soft: rgba(139, 92, 246, .15);
    --event-border: rgba(139, 92, 246, .4);
    --event-text: #c4b5fd;

    --business: #818cf8;
    --business-soft: rgba(99, 102, 241, .16);
    --business-border: rgba(129, 140, 248, .4);
    --business-text: #c7d2fe;

    --shadow-sm: none;
    --shadow-md: none;
}

/* ---------- Reset / základ ---------- */
*, *::before, *::after { box-sizing: border-box; }

html, body { height: 100%; }

body {
    margin: 0;
    font-family: var(--font);
    font-size: 15px;
    line-height: 1.5;
    color: var(--text);
    background: var(--bg);
    display: flex;
    flex-direction: column;
    -webkit-font-smoothing: antialiased;
    /* Pojistka proti vodorovnému přetečení stránky na mobilu (kvůli zoomu).
       clip (ne hidden) neruší position:sticky navigace ani vnitřní scroll tabulek. */
    overflow-x: clip;
}

h1, h2, h3, h4, p { margin: 0; }
a { color: var(--accent-text); text-decoration: none; }
a:hover { text-decoration: underline; }
img, svg { vertical-align: middle; }
button { font-family: inherit; }

/* Mobilní dotyková zpětná vazba: pryč se šedým blikáním při ťuknutí,
   jemné „stlačení" u interaktivních prvků. */
a, button, .btn, .icon-btn, .nav-link, .tab-btn, .dropdown-item, summary, .check-row {
    -webkit-tap-highlight-color: transparent;
}
.icon-btn, .nav-link, .tab-btn { transition: color .15s, background-color .15s, transform .1s; }
.icon-btn:active, .nav-link:active, .tab-btn:active { transform: scale(.93); }
.dropdown-item:active { background: var(--surface-3); }

main {
    flex: 1 0 auto;
    padding: 1.75rem 0 2.5rem;
}

html { overflow-x: clip; }

.container {
    max-width: 80rem;
    margin: 0 auto;
    padding: 0 1rem;
}
@media (min-width: 640px) { .container { padding: 0 1.5rem; } }

/* Ochrana proti vodorovnému přetečení na mobilu (příčina „zoomu"):
   flex/grid prvky mají default min-width:auto a odmítají se zmenšit pod obsah,
   což roztáhne stránku přes šířku obrazovky. min-width:0 to uvolní. */
main, .container, .stack, .grid, .grid-2, .grid-3, .grid-side,
.card, .card-body, .table-wrap, .spread, .cluster { min-width: 0; }
/* Dlouhá nezalomitelná slova (URL, e-maily) nesmí roztáhnout layout */
.card, .note, .table td, .presence-card { overflow-wrap: anywhere; }

/* ---------- Layout pomocníci ---------- */
.grid { display: grid; gap: 1.25rem; }
.grid-2 { display: grid; gap: 1.25rem; grid-template-columns: 1fr; }
.grid-3 { display: grid; gap: 1.25rem; grid-template-columns: 1fr; }
.grid-side { display: grid; gap: 1.25rem; grid-template-columns: 1fr; }
@media (min-width: 1024px) {
    .grid-2 { grid-template-columns: repeat(2, 1fr); }
    .grid-3 { grid-template-columns: repeat(3, 1fr); }
    .grid-side { grid-template-columns: 1fr 2fr; align-items: start; }
    .span-2 { grid-column: span 2; }
}
.stack { display: flex; flex-direction: column; gap: 1.25rem; }
.stack-sm { display: flex; flex-direction: column; gap: .6rem; }
.cluster { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.spread { display: flex; align-items: center; justify-content: space-between; gap: .75rem; flex-wrap: wrap; }

/* ---------- Navigace ---------- */
.nav {
    background: var(--surface);
    border-bottom: 1px solid var(--border);
    position: sticky;
    top: 0;
    z-index: 50;
    box-shadow: var(--shadow-sm);
}
.nav-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .5rem;
    min-height: 60px;
    flex-wrap: wrap;
    padding: .35rem 0;
}
.nav-brand {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    font-size: 1.15rem;
    font-weight: 800;
    letter-spacing: -.02em;
    color: var(--text);
    text-decoration: none;
}
.nav-brand:hover { text-decoration: none; opacity: .85; }
.nav-brand svg { color: var(--accent); }
.nav-brand .brand-accent { color: var(--accent-text); }
/* Logo v hlavičce – průhledné, přepíná se světlá/tmavá varianta podle motivu */
.brand-logo {
    display: block;
    height: 44px;
    width: auto;
}
/* Velké logo na přihlašovací / veřejné stránce */
.auth-logo {
    display: block;
    width: 100%;
    max-width: 300px;
    height: auto;
    margin: 0 auto 1.25rem;
}
/* Ve výchozím (světlém) režimu skryj tmavé varianty */
.brand-logo-dark,
.auth-logo-dark { display: none; }
/* V tmavém režimu prohoď varianty (světlý text loga) */
[data-theme="dark"] .brand-logo-light,
[data-theme="dark"] .auth-logo-light { display: none; }
[data-theme="dark"] .brand-logo-dark { display: block; }
[data-theme="dark"] .auth-logo-dark { display: block; }
.nav-links {
    display: flex;
    align-items: center;
    gap: .25rem;
    margin-left: 1rem;
    padding-left: 1rem;
    border-left: 1px solid var(--border);
}
.nav-link {
    padding: .4rem .7rem;
    border-radius: var(--radius-sm);
    font-size: .8rem;
    font-weight: 700;
    color: var(--text-2);
    border: 1px solid transparent;
    text-decoration: none;
    transition: color .15s, background-color .15s;
}
.nav-link:hover { background: var(--surface-3); color: var(--text); text-decoration: none; }
.nav-link.active {
    background: var(--accent-soft);
    color: var(--accent-text);
    border-color: var(--accent-border);
}
.nav-user { display: flex; align-items: center; gap: .65rem; }
.nav-user-info { text-align: right; line-height: 1.2; }
.nav-user-info .name { display: block; font-size: .8rem; font-weight: 700; color: var(--text); }
.nav-user-info .role { display: block; font-size: .65rem; font-weight: 600; color: var(--text-3); }

/* Hamburger — na desktopu skrytý, na mobilu přepíná menu.
   Vyšší specificita (button.nav-toggle) kvůli kolizi s .icon-btn { display:inline-flex }. */
button.nav-toggle { display: none; margin-right: .15rem; }
.nav-toggle .icon-close { display: none; }
.nav-toggle[aria-expanded="true"] .icon-menu { display: none; }
.nav-toggle[aria-expanded="true"] .icon-close { display: inline-flex; }

@media (max-width: 640px) {
    .nav-user-info { display: none; }
    /* Na telefonu jen ikona odhlášení bez textu, ať se lišta vejde na jeden řádek */
    .btn-label { display: none; }
    /* Řádky s inline flex-wrap:nowrap, které se mají na mobilu zalomit */
    .wrap-mobile { flex-wrap: wrap !important; gap: .5rem; }
}

@media (max-width: 768px) {
    button.nav-toggle { display: inline-flex; }
    /* Rozbalené menu = dropdown panel přes celou šířku pod lištou.
       .nav je position:sticky, takže tvoří kontext pro absolutní pozici. */
    .nav-links {
        display: none;
        position: absolute;
        left: 0;
        right: 0;
        top: 100%;
        flex-direction: column;
        align-items: stretch;
        gap: .2rem;
        margin: 0;
        padding: .6rem 1rem calc(.6rem + env(safe-area-inset-bottom, 0px));
        background: var(--surface);
        border-top: 1px solid var(--border);
        border-bottom: 1px solid var(--border);
        border-left: none;
        box-shadow: var(--shadow-md);
    }
    .nav-links.open { display: flex; }
    .nav-links .nav-link {
        padding: .7rem .8rem;   /* větší dotykové cíle pro prst */
        font-size: .9rem;
    }
}

.avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.3rem;
    height: 2.3rem;
    border-radius: 50%;
    background: var(--accent-soft);
    border: 1px solid var(--accent-border);
    color: var(--accent-text);
    font-weight: 800;
    font-size: .8rem;
    user-select: none;
    flex-shrink: 0;
}

/* Ikonové tlačítko (zvoneček, přepínač tématu) */
.icon-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: .45rem;
    background: none;
    border: none;
    border-radius: var(--radius-sm);
    color: var(--text-3);
    cursor: pointer;
    position: relative;
    transition: color .15s, background-color .15s;
}
.icon-btn:hover { color: var(--accent-text); background: var(--surface-3); }

/* Přepínač tématu: ikony řízené atributem na <html> */
[data-theme="dark"] .icon-sun { display: none; }
:root:not([data-theme="dark"]) .icon-moon { display: none; }

.bell-badge {
    position: absolute;
    top: 1px;
    right: 1px;
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 1rem;
    height: 1rem;
    padding: 0 .2rem;
    border-radius: 999px;
    background: var(--danger);
    color: #fff;
    font-size: .58rem;
    font-weight: 900;
    border: 2px solid var(--surface);
}

/* ---------- Dropdown (zvoneček) ---------- */
.dropdown { position: relative; display: flex; align-items: center; }
.dropdown-panel {
    position: absolute;
    right: 0;
    top: 100%;
    margin-top: .5rem;
    width: min(20rem, calc(100vw - 2rem));
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    box-shadow: var(--shadow-md);
    z-index: 60;
    overflow: hidden;
}
[data-theme="dark"] .dropdown-panel { box-shadow: 0 8px 24px rgba(0, 0, 0, .45); }
.dropdown-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .5rem;
    padding: .65rem 1rem;
    background: var(--surface-2);
    border-bottom: 1px solid var(--border);
    font-size: .75rem;
    font-weight: 700;
}
.dropdown-list { max-height: 20rem; overflow-y: auto; }
.dropdown-item {
    display: block;
    padding: .7rem 1rem;
    border-bottom: 1px solid var(--border);
    text-decoration: none;
    color: var(--text);
    transition: background-color .15s;
}
.dropdown-item:last-child { border-bottom: none; }
.dropdown-item:hover { background: var(--surface-2); text-decoration: none; }
.dropdown-empty {
    padding: 1.4rem 1rem;
    text-align: center;
    font-size: .78rem;
    color: var(--text-3);
    font-style: italic;
}

/* ---------- Karty ---------- */
.card {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
}
.card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    flex-wrap: wrap;
    padding: .9rem 1.25rem;
    border-bottom: 1px solid var(--border);
}
.card-body { padding: 1.25rem; }
.card-title {
    font-size: .72rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .07em;
    color: var(--text-3);
}
.card-title-lg { font-size: 1.05rem; font-weight: 800; color: var(--text); letter-spacing: -.01em; }

/* Plnobarevná „hero" karta (nejbližší událost apod.) */
.card-hero {
    background: var(--accent);
    color: #fff;
    border: none;
    border-radius: var(--radius-lg);
    padding: 1.25rem;
}
[data-theme="dark"] .card-hero { background: #4338ca; }
.card-hero a { color: #fff; }

/* ---------- Tlačítka ---------- */
.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .4rem;
    padding: .5rem 1rem;
    border-radius: var(--radius-sm);
    border: 1px solid transparent;
    font-size: .82rem;
    font-weight: 700;
    line-height: 1.2;
    cursor: pointer;
    text-decoration: none;
    white-space: nowrap;
    transition: background-color .15s, color .15s, border-color .15s, transform .1s;
}
.btn:hover { text-decoration: none; }
.btn:active { transform: scale(.97); }
.btn:disabled { opacity: .55; cursor: not-allowed; }

.btn-primary { background: var(--accent); color: var(--on-accent); }
.btn-primary:hover { background: var(--accent-hover); }
.btn-success { background: var(--success); color: #fff; }
.btn-success:hover { background: var(--success-hover); }
.btn-danger { background: var(--danger); color: #fff; }
.btn-danger:hover { background: var(--danger-hover); }
.btn-secondary {
    background: var(--surface);
    color: var(--text-2);
    border-color: var(--border-strong);
}
.btn-secondary:hover { background: var(--surface-2); color: var(--text); }
.btn-ghost { background: transparent; color: var(--text-2); }
.btn-ghost:hover { background: var(--surface-3); color: var(--text); }

.btn-soft-primary { background: var(--accent-soft); color: var(--accent-text); border-color: var(--accent-border); }
.btn-soft-primary:hover { background: var(--accent-soft); filter: brightness(.96); }
.btn-soft-success { background: var(--success-soft); color: var(--success-text); border-color: var(--success-border); }
.btn-soft-danger { background: var(--danger-soft); color: var(--danger-text); border-color: var(--danger-border); }
.btn-soft-warning { background: var(--warning-soft); color: var(--warning-text); border-color: var(--warning-border); }
.btn-soft-info { background: var(--info-soft); color: var(--info-text); border-color: var(--info-border); }

.btn-sm { padding: .3rem .65rem; font-size: .72rem; }
.btn-lg { padding: .7rem 1.4rem; font-size: .95rem; }
.btn-block { display: flex; width: 100%; }

/* Velké akční dlaždice (příchod / odchod) */
.btn-action {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: .35rem;
    width: 100%;
    padding: 1.4rem 1rem;
    border: none;
    border-radius: var(--radius);
    font-size: 1.05rem;
    font-weight: 800;
    color: #fff;
    cursor: pointer;
    transition: transform .1s, background-color .15s;
}
.btn-action:active { transform: scale(.98); }
.btn-action small { font-size: .72rem; font-weight: 600; opacity: .85; }
.btn-action-success { background: var(--success); }
.btn-action-success:hover { background: var(--success-hover); }
.btn-action-danger { background: var(--danger); }
.btn-action-danger:hover { background: var(--danger-hover); }

/* ---------- Odznaky a tečky ---------- */
.badge {
    display: inline-flex;
    align-items: center;
    gap: .3rem;
    padding: .15rem .55rem;
    border-radius: 999px;
    border: 1px solid transparent;
    font-size: .66rem;
    font-weight: 800;
    letter-spacing: .02em;
    white-space: nowrap;
}
.badge-success { background: var(--success-soft); color: var(--success-text); border-color: var(--success-border); }
.badge-danger { background: var(--danger-soft); color: var(--danger-text); border-color: var(--danger-border); }
.badge-warning { background: var(--warning-soft); color: var(--warning-text); border-color: var(--warning-border); }
.badge-info { background: var(--info-soft); color: var(--info-text); border-color: var(--info-border); }
.badge-accent { background: var(--accent-soft); color: var(--accent-text); border-color: var(--accent-border); }
.badge-muted { background: var(--surface-3); color: var(--text-2); border-color: var(--border); }
.badge-sickday { background: var(--sickday-soft); color: var(--sickday-text); border-color: var(--sickday-border); }
.badge-homeoffice { background: var(--homeoffice-soft); color: var(--homeoffice-text); border-color: var(--homeoffice-border); }
.badge-event { background: var(--event-soft); color: var(--event-text); border-color: var(--event-border); }

.dot {
    display: inline-block;
    width: .55rem;
    height: .55rem;
    border-radius: 50%;
    flex-shrink: 0;
}
.dot-success { background: var(--success); }
.dot-danger { background: var(--danger); }
.dot-warning { background: var(--warning); }
.dot-info { background: var(--info); }
.dot-accent { background: var(--accent); }
.dot-muted { background: var(--text-3); }

/* Pulsující indikátor přítomnosti */
.dot-ping { position: relative; display: inline-flex; width: .55rem; height: .55rem; flex-shrink: 0; }
.dot-ping::before {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 50%;
    background: inherit;
    animation: ping 1.6s cubic-bezier(0, 0, .2, 1) infinite;
}
.dot-ping::after {
    content: "";
    position: relative;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    background: inherit;
}

/* ---------- Tabulky ---------- */
.table-wrap {
    overflow-x: auto;
    border: 1px solid var(--border);
    border-radius: var(--radius);
    background: var(--surface);
}
.table {
    width: 100%;
    border-collapse: collapse;
    font-size: .82rem;
}
.table th {
    padding: .6rem .9rem;
    text-align: left;
    font-size: .65rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .06em;
    color: var(--text-3);
    background: var(--surface-2);
    border-bottom: 1px solid var(--border);
    white-space: nowrap;
}
.table td {
    padding: .6rem .9rem;
    border-bottom: 1px solid var(--border);
    color: var(--text-2);
    vertical-align: middle;
}
.table tbody tr:last-child td { border-bottom: none; }
.table tbody tr { transition: background-color .12s; }
.table tbody tr:hover { background: var(--surface-2); }

.table-danger { border-color: var(--danger-border); }
.table-danger .table th { background: var(--danger-soft); color: var(--danger-text); }

.cell-strong { font-weight: 700; color: var(--text); }
.cell-muted { color: var(--text-3); font-size: .75rem; }

/* Na telefonu se řádky tabulky překlopí do přehledných karet (label: hodnota).
   Popisky (data-label) doplní JS z hlaviček tabulky – bez editace šablon. */
@media (max-width: 640px) {
    .table thead { display: none; }
    .table, .table tbody, .table tr, .table td { display: block; width: 100%; }
    .table tr {
        margin: .55rem;
        border: 1px solid var(--border);
        border-radius: var(--radius-sm);
        background: var(--surface);
        overflow: hidden;
    }
    .table tbody tr:hover { background: var(--surface); }
    .table td {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;
        align-items: center;
        gap: .35rem 1rem;
        text-align: right;
        padding: .5rem .8rem;
        border-bottom: 1px solid var(--border);
    }
    .table td:last-child { border-bottom: none; }
    .table td::before {
        content: attr(data-label);
        text-align: left;
        font-size: .6rem;
        font-weight: 800;
        text-transform: uppercase;
        letter-spacing: .05em;
        color: var(--text-3);
        flex-shrink: 0;
    }
    /* Buňky přes celou šířku (prázdné stavy, řádky logu) bez popisku */
    .table td[colspan] { text-align: center; }
    .table td[colspan]::before { content: none; }
    /* Buňka bez popisku (nedostala data-label) – bez prázdné mezery vlevo */
    .table td:not([data-label])::before { content: none; }
}

/* ---------- Záložky ---------- */
.tabs {
    display: flex;
    flex-wrap: wrap;
    gap: .35rem;
    padding: .35rem;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius);
}
.tab-btn {
    position: relative;
    padding: .45rem .85rem;
    border: 1px solid transparent;
    border-radius: var(--radius-sm);
    background: none;
    font-size: .78rem;
    font-weight: 700;
    color: var(--text-2);
    cursor: pointer;
    transition: color .15s, background-color .15s;
}
.tab-btn:hover { color: var(--text); background: var(--surface-3); }
.tab-btn.active {
    background: var(--accent-soft);
    color: var(--accent-text);
    border-color: var(--accent-border);
}
.tab-indicator {
    position: absolute;
    top: -2px;
    right: -2px;
    width: .55rem;
    height: .55rem;
    border-radius: 50%;
    background: var(--danger);
}

/* Na telefonu se záložky nezalamují, ale jedou jako vodorovně scrollovatelný pás */
@media (max-width: 640px) {
    .tabs {
        flex-wrap: nowrap;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;   /* Firefox */
    }
    .tabs::-webkit-scrollbar { display: none; }   /* WebKit */
    .tabs .tab-btn {
        flex: 0 0 auto;
        white-space: nowrap;
    }
}

/* ---------- Formuláře ---------- */
.field { display: flex; flex-direction: column; gap: .3rem; }
.label {
    font-size: .68rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .05em;
    color: var(--text-2);
}
.required-mark { color: var(--danger); }
.input {
    width: 100%;
    padding: .55rem .75rem;
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm);
    background: var(--surface);
    color: var(--text);
    font-family: inherit;
    font-size: .88rem;
    transition: border-color .15s, box-shadow .15s;
}
.input:focus {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 3px var(--accent-soft);
}
textarea.input { resize: vertical; min-height: 4.5rem; }
.input::placeholder { color: var(--text-3); }

/* iOS Safari přiblíží stránku při zaostření inputu s font-size < 16px a už neodzoomuje.
   Na dotykových zařízeních proto vynutíme min. 16px u všech formulářových prvků. */
@media (pointer: coarse) {
    .input,
    select.input,
    textarea.input { font-size: 16px; }
}

.checkbox {
    width: 1rem;
    height: 1rem;
    accent-color: var(--accent);
    cursor: pointer;
}
.check-row { display: flex; align-items: center; gap: .5rem; font-size: .85rem; color: var(--text); cursor: pointer; }
.help-text { font-size: .72rem; color: var(--text-3); }

.input-icon-wrap { position: relative; }
.input-icon-wrap .input { padding-left: 2.4rem; }
.input-icon {
    position: absolute;
    left: .75rem;
    top: 50%;
    transform: translateY(-50%);
    color: var(--text-3);
    pointer-events: none;
}

.form-grid { display: grid; gap: 1rem; grid-template-columns: 1fr; }
@media (min-width: 640px) { .form-grid { grid-template-columns: repeat(2, 1fr); } .form-grid .field-full { grid-column: 1 / -1; } }

/* Mobilní doladění formulářových mřížek:
   šablony mají inline grid-template-columns:repeat(3/4, 1fr), což by na telefonu
   vytvořilo zmáčknuté sloupce. !important přebije inline styl a složí je pod sebe. */
@media (max-width: 640px) {
    .form-grid { grid-template-columns: 1fr !important; }
}
@media (min-width: 641px) and (max-width: 1023px) {
    .form-grid { grid-template-columns: repeat(2, 1fr) !important; }
}

/* ---------- Toasty (flash zprávy) ---------- */
.toast-stack {
    position: fixed;
    top: 1rem;
    right: 1rem;
    z-index: 100;
    display: flex;
    flex-direction: column;
    gap: .6rem;
    width: min(24rem, calc(100vw - 2rem));
    pointer-events: none;
}
.toast {
    display: flex;
    align-items: flex-start;
    gap: .65rem;
    padding: .85rem 1rem;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    box-shadow: var(--shadow-md);
    pointer-events: auto;
    animation: toast-in .3s ease-out;
    transition: transform .4s ease, opacity .4s ease;
}
[data-theme="dark"] .toast { box-shadow: 0 8px 24px rgba(0, 0, 0, .45); }
@keyframes toast-in {
    from { transform: translateX(120%); opacity: 0; }
    to { transform: translateX(0); opacity: 1; }
}
.toast-icon {
    display: inline-flex;
    padding: .3rem;
    border-radius: var(--radius-sm);
    border: 1px solid transparent;
    flex-shrink: 0;
}
.toast-icon-success { background: var(--success-soft); color: var(--success-text); border-color: var(--success-border); }
.toast-icon-error { background: var(--danger-soft); color: var(--danger-text); border-color: var(--danger-border); }
.toast-icon-warning { background: var(--warning-soft); color: var(--warning-text); border-color: var(--warning-border); }
.toast-icon-info { background: var(--info-soft); color: var(--info-text); border-color: var(--info-border); }
.toast-body { flex: 1; font-size: .85rem; font-weight: 600; padding-top: .15rem; }
.toast-close {
    background: none;
    border: none;
    color: var(--text-3);
    cursor: pointer;
    padding: .15rem;
    transition: color .15s;
}
.toast-close:hover { color: var(--text); }

/* ---------- Kalendář ---------- */
.cal {
    --cal-head-h: 1.9rem;   /* horní pruh pro číslo dne */
    --cal-lane-h: 1.5rem;   /* výška jednoho řádku (lane) s pruhem */
    border: 1px solid var(--border);
    border-radius: var(--radius);
    overflow: hidden;
}
.cal-head {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    background: var(--surface-2);
}
.cal-weekday {
    padding: .5rem .25rem;
    text-align: center;
    font-size: .65rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .05em;
    color: var(--text-3);
    border-left: 1px solid var(--border);
}
.cal-weekday:first-child { border-left: none; }

.cal-week { position: relative; }
.cal-week-days {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
}
.cal-day {
    /* dost vysoké, aby se vešly všechny pruhy daného týdne */
    min-height: max(5.5rem, calc(var(--cal-head-h) + var(--lanes, 1) * var(--cal-lane-h) + .5rem));
    padding: .3rem;
    background: var(--surface);
    border-left: 1px solid var(--border);
    border-top: 1px solid var(--border);
    overflow: hidden;
}
.cal-day:first-child { border-left: none; }
.cal-day-outside { background: var(--surface-2); }
.cal-day-outside .cal-day-num { color: var(--text-3); opacity: .6; }
.cal-day-num {
    float: right;
    font-size: .72rem;
    font-weight: 700;
    color: var(--text-2);
    width: 1.5rem;
    height: 1.5rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
}
.cal-today { background: var(--accent-soft); }
.cal-today .cal-day-num { background: var(--accent); color: var(--on-accent); font-weight: 800; }

/* Vrstva se spojitými pruhy přes celý týden (dovolené, události) */
.cal-week-bars {
    position: absolute;
    inset: 0;
    pointer-events: none;
}
.cal-bar {
    position: absolute;
    height: calc(var(--cal-lane-h) - .3rem);
    padding: 0 .45rem;
    box-sizing: border-box;
    border: 1px solid transparent;
    border-radius: 6px;
    font-size: .62rem;
    font-weight: 700;
    line-height: calc(var(--cal-lane-h) - .3rem - 2px);
    white-space: nowrap;
    overflow: hidden;
    pointer-events: auto;
}
.cal-bar-label { display: block; overflow: hidden; text-overflow: ellipsis; }
/* Napojení na sousední týden – srovnat hranu a zaoblení */
.cal-bar-cont-left { border-top-left-radius: 0; border-bottom-left-radius: 0; }
.cal-bar-cont-right { border-top-right-radius: 0; border-bottom-right-radius: 0; }

.cal-bar-vacation { background: var(--success-soft); color: var(--success-text); border-color: var(--success-border); }
.cal-bar-sick { background: var(--danger-soft); color: var(--danger-text); border-color: var(--danger-border); }
.cal-bar-sickday { background: var(--sickday-soft); color: var(--sickday-text); border-color: var(--sickday-border); }
.cal-bar-homeoffice { background: var(--homeoffice-soft); color: var(--homeoffice-text); border-color: var(--homeoffice-border); }
.cal-bar-business { background: var(--business-soft); color: var(--business-text); border-color: var(--business-border); }
.cal-bar-event { background: var(--event-soft); color: var(--event-text); border-color: var(--event-border); }
.cal-bar-reminder { background: var(--warning-soft); color: var(--warning-text); border-color: var(--warning-border); }
.cal-bar-muted { background: var(--surface-3); color: var(--text-2); border-color: var(--border); }

.legend-swatch {
    display: inline-block;
    width: .7rem;
    height: .7rem;
    border-radius: 4px;
    flex-shrink: 0;
}

@media (max-width: 640px) {
    .cal { --cal-lane-h: 1.3rem; }
    .cal-day {
        min-height: max(4rem, calc(var(--cal-head-h) + var(--lanes, 1) * var(--cal-lane-h) + .4rem));
        padding: .2rem;
    }
    .cal-bar { font-size: .52rem; padding: 0 .3rem; }
}

/* ---------- Přehled přítomnosti ---------- */
.presence-grid {
    display: grid;
    gap: .6rem;
    grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
}
.presence-card {
    display: flex;
    align-items: center;
    gap: .6rem;
    padding: .6rem .75rem;
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
}
.presence-card .who { min-width: 0; }
.presence-card .who .name {
    display: block;
    font-size: .78rem;
    font-weight: 700;
    color: var(--text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.presence-card .who .state { display: block; font-size: .65rem; color: var(--text-3); font-weight: 600; }

/* ---------- Grafy (čisté CSS sloupce) ---------- */
.chart {
    display: flex;
    align-items: flex-end;
    gap: 4px;
    height: 10rem;
    padding-top: 1rem;
}
.chart-col {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    height: 100%;
    min-width: 0;
    gap: .2rem;
}
.chart-bar-track {
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    width: 100%;
    max-width: 2.6rem;
    flex: 1;
}
.chart-bar {
    width: 100%;
    background: var(--accent);
    border-radius: 5px 5px 0 0;
    min-height: 2px;
    transition: opacity .15s;
}
.chart-bar:hover { opacity: .8; }
.chart-success .chart-bar { background: var(--success); }
.chart-bar-value { font-size: .62rem; font-weight: 800; color: var(--text-2); white-space: nowrap; }
.chart-bar-label {
    font-size: .6rem;
    font-weight: 600;
    color: var(--text-3);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
}
.chart-empty {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 10rem;
    color: var(--text-3);
    font-size: .8rem;
    font-style: italic;
}

/* ---------- Stavová karta docházky ---------- */
.status-banner {
    display: flex;
    align-items: center;
    gap: .6rem;
    padding: .75rem 1rem;
    border-radius: var(--radius);
    border: 1px solid;
    font-size: .85rem;
    font-weight: 700;
}
.status-banner-success { background: var(--success-soft); border-color: var(--success-border); color: var(--success-text); }
.status-banner-warning { background: var(--warning-soft); border-color: var(--warning-border); color: var(--warning-text); }
.status-banner-danger { background: var(--danger-soft); border-color: var(--danger-border); color: var(--danger-text); }
.status-banner-info { background: var(--info-soft); border-color: var(--info-border); color: var(--info-text); }

.live-clock {
    font-size: 2.2rem;
    font-weight: 800;
    letter-spacing: .02em;
    color: var(--text);
    font-variant-numeric: tabular-nums;
}

/* Souhrn (dvojice popisek/hodnota) */
.kv-list { display: flex; flex-direction: column; gap: .4rem; }
.kv-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: .75rem;
    padding: .45rem .65rem;
    background: var(--surface-2);
    border-radius: var(--radius-sm);
    font-size: .82rem;
}
.kv-row .k { color: var(--text-2); font-weight: 600; }
.kv-row .v { color: var(--text); font-weight: 800; font-variant-numeric: tabular-nums; }

/* ---------- Rozbalovací sekce (details) ---------- */
.disclosure summary {
    list-style: none;
    cursor: pointer;
    user-select: none;
}
.disclosure summary::-webkit-details-marker { display: none; }
.disclosure .chevron { transition: transform .2s; }
.disclosure[open] .chevron { transform: rotate(180deg); }

/* ---------- Animace ---------- */
@keyframes pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: .45; }
}
.animate-pulse { animation: pulse 2s ease-in-out infinite; }

@keyframes ping {
    75%, 100% { transform: scale(2.2); opacity: 0; }
}
.animate-ping { animation: ping 1.6s cubic-bezier(0, 0, .2, 1) infinite; }

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .01ms !important;
    }
}

/* ---------- Utility ---------- */
.hidden { display: none !important; }
.rotate-180 { transform: rotate(180deg); }
.text-center { text-align: center; }
.text-right { text-align: right; }
.muted { color: var(--text-3); }
.small { font-size: .78rem; }
.flex-1 { flex: 1; }
.w-full { width: 100%; }
.mt-1 { margin-top: .35rem; }
.mt-2 { margin-top: .7rem; }
.mt-3 { margin-top: 1.05rem; }
.mb-2 { margin-bottom: .7rem; }
.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;
}

.custom-scrollbar { scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent; }
.custom-scrollbar::-webkit-scrollbar { width: 6px; height: 6px; }
.custom-scrollbar::-webkit-scrollbar-track { background: transparent; }
.custom-scrollbar::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 3px; }

.scroll-y { overflow-y: auto; }
.max-h-90 { max-height: 22.5rem; }
.max-h-80 { max-height: 20rem; }

.divider { border: none; border-top: 1px solid var(--border); margin: 1rem 0; }

/* Prázdný stav */
.empty-state {
    padding: 2rem 1rem;
    text-align: center;
    color: var(--text-3);
    font-size: .85rem;
    font-style: italic;
}
.empty-state::before {
    content: "";
    display: block;
    width: 2.1rem;
    height: 2.1rem;
    margin: 0 auto .55rem;
    background-color: var(--text-3);
    opacity: .5;
    -webkit-mask: center / contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 14h4l2 3h6l2-3h4'/%3E%3Cpath d='M3 14 6 6h12l3 8v4a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1z'/%3E%3C/svg%3E");
    mask: center / contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 14h4l2 3h6l2-3h4'/%3E%3Cpath d='M3 14 6 6h12l3 8v4a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1z'/%3E%3C/svg%3E");
}

/* ---------- Patička ---------- */
.footer {
    flex-shrink: 0;
    background: var(--surface);
    border-top: 1px solid var(--border);
    padding: 1.1rem 0;
    text-align: center;
    font-size: .72rem;
    color: var(--text-3);
}

/* ---------- Úzké stránky s formulářem ---------- */
.page-sm { max-width: 28rem; margin: 0 auto; }
.page-md { max-width: 42rem; margin: 0 auto; }

.back-link {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    font-size: .82rem;
    font-weight: 600;
    color: var(--text-2);
    text-decoration: none;
    transition: color .15s;
}
.back-link:hover { color: var(--text); text-decoration: none; }

/* Informační boxy ve formulářích */
.note {
    padding: .75rem 1rem;
    border-radius: var(--radius-sm);
    border: 1px solid;
    font-size: .76rem;
}
.note-warning { background: var(--warning-soft); border-color: var(--warning-border); color: var(--warning-text); }
.note-info { background: var(--info-soft); border-color: var(--info-border); color: var(--info-text); }
.note-danger { background: var(--danger-soft); border-color: var(--danger-border); color: var(--danger-text); }
.note-muted { background: var(--surface-2); border-color: var(--border); color: var(--text-2); }

.form-actions {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: .65rem;
    padding-top: 1rem;
    border-top: 1px solid var(--border);
}

/* ---------- Stránka přihlášení ---------- */
.auth-wrap {
    max-width: 26rem;
    margin: 3rem auto 0;
    padding: 0 1rem;
}
