﻿/* ========== BRAND COLORS ========== */
:root {
    --ases-red: #C00000; /* Hlavní červená - všude */
    --ases-red-dark: #A00000; /* Tmavší - jen hover a gradienty */
    --ases-red-light: #D50000; /* Světlejší - jen akcenty */
    --ases-gray-dark: #2C2C2C;
    --ases-gray-medium: #4A4A4A;
    --ases-gray: #6B6B6B;
    --ases-gray-light: #D0D0D0;
    --ases-white: #FFFFFF;
    --ases-bg-light: #F5F5F5;
    --ases-bg-lighter: #FAFAFA;
    --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.08);
    --shadow-md: 0 4px 8px rgba(0, 0, 0, 0.12);
    --shadow-lg: 0 8px 16px rgba(0, 0, 0, 0.15);
    --shadow-xl: 0 12px 24px rgba(0, 0, 0, 0.2);
}

/* ========== GLOBAL STYLES ========== */
html, body {
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    margin: 0;
    padding: 0;
    height: 100%;
    background-color: var(--ases-bg-light);
}

/* ========== LAYOUT ========== */
.page {
    position: relative;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

/* ========== SIDEBAR ========== */
.sidebar {
    background: linear-gradient(180deg, var(--ases-red) 0%, var(--ases-red) 50%, var(--ases-red-dark) 100%);
    width: 260px;
    /*
     * Na telefonu není 100vh to, co je vidět: počítá se s schovanou adresní
     * lištou, takže spodek nabídky zůstane za okrajem obrazovky a na
     * poslední položku (Profil) se nedá dorolovat. Jednotka dvh měří to,
     * co je vidět teď; vh zůstává pro starší prohlížeče.
     */
    height: 100vh;
    height: 100dvh;
    position: fixed;
    top: 0;
    left: 0;
    z-index: 1000;
    overflow-y: auto;
    /*
     * Bez tohohle se po dojetí na konec nabídky posouvá stránka pod ní —
     * prst zůstane na nabídce, ale hýbe se obsah vzadu.
     */
    overscroll-behavior: contain;
    box-shadow: 4px 0 20px rgba(192, 0, 0, 0.3);
    border-right: 1px solid rgba(0, 0, 0, 0.1);
    padding-top: 0;
}

/* Logo Section - FIXNÍ nahoře */

.sidebar-logo {
    padding: 1.5rem 1rem;
    text-align: center;
    background: transparent;
    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
    position: sticky;
}

    .sidebar-logo .ases-logo-main {
        max-width: 200px;
        height: auto;
        filter: brightness(0) invert(1); /* Bílé logo */
        opacity: 0.95;
        transition: opacity 0.3s ease;
    }

        .sidebar-logo .ases-logo-main:hover {
            opacity: 1;
        }

/* Navigation */
.nav-menu {
    padding: 0;
    margin: 0;
}

.nav-item {
    margin: 0.25rem 0.75rem;
}

.nav-link {
    color: rgba(255, 255, 255, 0.9) !important;
    padding: 0.875rem 1rem;
    border-radius: 8px;
    transition: all 0.3s ease;
    display: flex;
    align-items: center;
    font-weight: 500;
    font-size: 1.11rem;
    position: relative;
    overflow: hidden;
}

    .nav-link::before {
        content: '';
        position: absolute;
        left: 0;
        top: 0;
        height: 100%;
        width: 0;
        background: linear-gradient(90deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.05) 100%);
        transition: width 0.3s ease;
    }

    .nav-link:hover {
        background: rgba(255, 255, 255, 0.15);
        color: white !important;
        transform: translateX(5px);
        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
    }

        .nav-link:hover::before {
            width: 100%;
        }

    .nav-link.active {
        background: linear-gradient(90deg, rgba(44, 44, 44, 0.4) 0%, rgba(44, 44, 44, 0.2) 100%);
        color: white !important;
        font-weight: 600;
        box-shadow: inset 4px 0 0 white, 0 4px 8px rgba(0, 0, 0, 0.2);
    }

    .nav-link i {
        margin-right: 0.875rem;
        font-size: 1.15rem;
    }

/* ===== TREE NAVIGATION ===== */

/* Parent section button — styled like a nav-link */
.nav-parent-link {
    width: 100%;
    background: none;
    border: none;
    color: rgba(255, 255, 255, 0.9) !important;
    padding: 0.875rem 1rem;
    border-radius: 8px;
    display: flex;
    align-items: center;
    font-weight: 600;
    font-size: 0.8rem;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    cursor: pointer;
    transition: all 0.3s ease;
    position: relative;
    overflow: hidden;
}

    .nav-parent-link:hover {
        background: rgba(255, 255, 255, 0.12);
        color: white !important;
        transform: translateX(3px);
    }

    .nav-parent-link.expanded {
        background: rgba(255, 255, 255, 0.1);
        color: white !important;
    }

.nav-parent-icon {
    margin-right: 0.75rem;
    font-size: 1.05rem;
    opacity: 0.85;
}

/* Rotating chevron */
.nav-chevron {
    font-size: 0.7rem;
    color: rgba(255, 255, 255, 0.5);
    transition: transform 0.25s ease;
    flex-shrink: 0;
}

.nav-parent-link.expanded .nav-chevron {
    transform: rotate(90deg);
}

/* Collapsible children container — CSS max-height trick for smooth animation */
.nav-subitems {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.3s ease;
    border-left: 2px solid rgba(255, 255, 255, 0.18);
    margin-left: 1.75rem;
    margin-right: 0.75rem;
    border-radius: 0 0 6px 6px;
    margin-bottom: 0.25rem;
}

    .nav-subitems.open {
        max-height: 900px;
    }

/* Sub-links: slightly smaller, more compact */
.nav-sublink {
    font-size: 0.9rem !important;
    padding: 0.55rem 0.875rem !important;
    color: rgba(255, 255, 255, 0.8) !important;
    border-radius: 6px !important;
}

    .nav-sublink:hover {
        color: white !important;
        transform: translateX(3px);
    }

    .nav-sublink.active {
        color: white !important;
        background: linear-gradient(90deg, rgba(44, 44, 44, 0.45) 0%, rgba(44, 44, 44, 0.2) 100%) !important;
        box-shadow: inset 3px 0 0 rgba(255, 255, 255, 0.7), 0 2px 6px rgba(0, 0, 0, 0.15) !important;
        font-weight: 600 !important;
    }

    .nav-sublink i {
        font-size: 0.95rem !important;
        margin-right: 0.6rem !important;
    }

/* Legacy section title (kept for compatibility) */
.nav-section-title {
    padding: 1rem 1rem 0.5rem;
}

    .nav-section-title small {
        text-transform: uppercase;
        letter-spacing: 1px;
        font-size: 0.7rem;
    }


/* ========== MAIN CONTENT ========== */
main {
    flex: 1;
    margin-left: 260px;
    background: linear-gradient(135deg, var(--ases-bg-lighter) 0%, var(--ases-bg-light) 100%);
}

/* Top Bar */
.top-row {
    background: white;
    border-bottom: 3px solid var(--ases-red);
    height: 70px;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    padding: 0 2rem;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
    position: relative;
    z-index: 10;
}

    .top-row::after {
        content: '';
        position: absolute;
        bottom: -3px;
        left: 0;
        width: 100%;
        height: 3px;
        background: linear-gradient(90deg, var(--ases-red) 0%, var(--ases-red-light) 100%);
    }

/* Content Area */
.content {
    padding: 2rem;
    min-height: calc(100vh - 70px);
}

/* ========== BUTTONS ========== */
.btn {
    font-weight: 600;
    padding: 0.625rem 1.5rem;
    border-radius: 8px;
    transition: all 0.3s ease;
    border: none;
    position: relative;
    overflow: hidden;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    font-size: 0.875rem;
}

    .btn::before {
        content: '';
        position: absolute;
        top: 50%;
        left: 50%;
        width: 0;
        height: 0;
        border-radius: 50%;
        background: rgba(255, 255, 255, 0.3);
        transform: translate(-50%, -50%);
        transition: width 0.6s, height 0.6s;
    }

    .btn:hover::before {
        width: 300px;
        height: 300px;
    }

    /* Primary Button */
    .btn-primary,
    a.btn-primary,
    button.btn-primary,
    .btn.btn-primary,
    a.btn.btn-primary {
        background: linear-gradient(135deg, var(--ases-red) 0%, var(--ases-red-dark) 100%) !important;
        background-color: var(--ases-red) !important;
        color: white !important;
        border: none !important;
        box-shadow: 0 4px 8px rgba(192, 0, 0, 0.3), 0 1px 3px rgba(0, 0, 0, 0.2) !important;
    }

        .btn-primary:hover,
        a.btn-primary:hover,
        button.btn-primary:hover,
        .btn.btn-primary:hover {
            background: linear-gradient(135deg, var(--ases-red-dark) 0%, var(--ases-red-dark) 100%) !important;
            background-color: var(--ases-red-dark) !important;
            transform: translateY(-2px);
            box-shadow: 0 6px 12px rgba(192, 0, 0, 0.4), 0 2px 4px rgba(0, 0, 0, 0.2) !important;
        }

        .btn-primary:active {
            transform: translateY(0);
            box-shadow: 0 2px 4px rgba(192, 0, 0, 0.3) !important;
        }

        .btn-primary:focus {
            box-shadow: 0 0 0 0.25rem rgba(192, 0, 0, 0.25), 0 4px 8px rgba(192, 0, 0, 0.3) !important;
        }

/* Large Button */
.btn-lg {
    padding: 1rem 2rem;
    font-size: 1rem;
    border-radius: 10px;
}

/* Small Button
   Bootstrap sizes .btn-sm through --bs-btn-padding-* custom properties, but the
   .btn rule above sets padding and font-size to literal values, so those
   properties were never read and small buttons rendered at full size - most
   visibly as oversized icon-only buttons in table action columns. Restated here
   at the same steps as .btn and .btn-lg. */
.btn-sm,
.btn-group-sm > .btn {
    padding: 0.375rem 0.875rem;
    font-size: 0.75rem;
    border-radius: 6px;
}

/* Outline Primary */
.btn-outline-primary {
    color: var(--ases-red) !important;
    border: 2px solid var(--ases-red) !important;
    background: white !important;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
}

    .btn-outline-primary:hover {
        background: var(--ases-red) !important;
        border-color: var(--ases-red) !important;
        color: white !important;
        transform: translateY(-2px);
        box-shadow: 0 6px 12px rgba(192, 0, 0, 0.3);
    }

/* Outline Secondary - červené ohraničení */
.btn-outline-secondary {
    color: var(--ases-gray-dark) !important;
    border: 2px solid var(--ases-red) !important;
    background: white !important;
}

    .btn-outline-secondary:hover {
        background: var(--ases-red) !important;
        border-color: var(--ases-red) !important;
        color: white !important;
    }

/* Secondary Button */
.btn-secondary {
    background: linear-gradient(135deg, var(--ases-gray-dark) 0%, var(--ases-gray-medium) 100%) !important;
    color: white !important;
    box-shadow: 0 4px 8px rgba(44, 44, 44, 0.3);
}

    .btn-secondary:hover {
        background: linear-gradient(135deg, #1A1A1A 0%, var(--ases-gray-dark) 100%) !important;
        transform: translateY(-2px);
    }

/* ========== CARDS ========== */
.card {
    border: none;
    border-radius: 12px;
    box-shadow: var(--shadow-md);
    background: white;
    transition: all 0.3s ease;
    overflow: hidden;
}

    .card:hover {
        transform: translateY(-4px);
        box-shadow: var(--shadow-lg);
    }

.card-header {
    background: linear-gradient(135deg, var(--ases-gray-dark) 0%, var(--ases-gray-medium) 100%);
    color: white;
    font-weight: 700;
    padding: 1.25rem 1.5rem;
    border-bottom: 3px solid var(--ases-red);
    text-transform: uppercase;
    letter-spacing: 1px;
    font-size: 0.9rem;
}

    /* The typography rule below sets a dark colour on every h1-h6. Being a rule
       on the element itself, it beats the white this header passes down by
       inheritance, so headings rendered dark-on-dark and were invisible. Card
       headers are always dark here (the gradient above paints over any bg-*
       utility), so headings must take the header's colour. Utilities such as
       .text-warning still win, as they are !important. */
    .card-header h1,
    .card-header h2,
    .card-header h3,
    .card-header h4,
    .card-header h5,
    .card-header h6 {
        color: inherit;
    }

.card-body {
    padding: 1.5rem;
}

/* ========== STAT CARDS ========== */
.stat-card {
    border-radius: 12px;
    padding: 1.5rem;
    background: white;
    box-shadow: var(--shadow-md);
    transition: all 0.3s ease;
    position: relative;
    overflow: hidden;
}

    .stat-card::before {
        content: '';
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 4px;
        background: linear-gradient(90deg, var(--ases-red) 0%, var(--ases-red-light) 100%);
    }

    .stat-card:hover {
        transform: translateY(-6px);
        box-shadow: var(--shadow-xl);
    }

.stat-icon {
    width: 64px;
    height: 64px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.75rem;
    border-radius: 12px;
    box-shadow: var(--shadow-md);
}

    .stat-icon.bg-primary {
        background: linear-gradient(135deg, var(--ases-red) 0%, var(--ases-red-dark) 100%) !important;
        color: white;
    }

    .stat-icon.bg-secondary {
        background: linear-gradient(135deg, var(--ases-gray-dark) 0%, var(--ases-gray-medium) 100%) !important;
        color: white;
    }

/* ========== TYPOGRAPHY ========== */
h1, h2, h3, h4, h5, h6 {
    color: var(--ases-gray-dark);
    font-weight: 700;
}

.display-6 {
    color: var(--ases-gray-dark);
    font-weight: 800;
}

/* ========== LINKS ========== */
a {
    color: var(--ases-red);
    text-decoration: none;
    transition: all 0.2s ease;
}

    a:hover {
        color: var(--ases-red-dark);
        text-decoration: none;
    }

/* ========== BADGES ========== */
.badge {
    padding: 0.5rem 1rem;
    border-radius: 6px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    font-size: 0.75rem;
    box-shadow: var(--shadow-sm);
}

    .badge.bg-primary {
        background: linear-gradient(135deg, var(--ases-red) 0%, var(--ases-red-dark) 100%) !important;
    }

/* ========== FORMS ========== */
.form-control,
.form-select {
    border-radius: 8px;
    border: 2px solid var(--ases-gray-light);
    padding: 0.75rem 1rem;
    transition: all 0.3s ease;
    box-shadow: var(--shadow-sm);
}

    .form-control:focus,
    .form-select:focus {
        border-color: var(--ases-red);
        box-shadow: 0 0 0 0.25rem rgba(192, 0, 0, 0.15), var(--shadow-md);
    }

.form-check-input:checked {
    background-color: var(--ases-red);
    border-color: var(--ases-red);
    box-shadow: var(--shadow-sm);
}

/* ========== TABLES ========== */
.table {
    background-color: white;
    border-radius: 12px;
    overflow: hidden;
    box-shadow: var(--shadow-md);
}

    .table thead {
        background: linear-gradient(135deg, var(--ases-gray-dark) 0%, var(--ases-gray-medium) 100%);
        color: white;
    }

        .table thead th {
            border: none;
            padding: 1rem;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.5px;
            font-size: 0.85rem;
        }

    .table tbody tr {
        transition: all 0.2s ease;
    }

        /*
         * Zvýraznění řádku dělá jen podbarvení.
         *
         * Dřív se řádek při najetí zvětšoval o procento. Vypadalo to jako
         * rozbité formátování: písmo v tom řádku bylo znatelně větší než
         * ve zbytku tabulky, sloupce se rozjely proti hlavičce a text
         * vylezl z karty, která ho ořízla. Zvětšovat řádek uvnitř tabulky
         * nejde — buňky drží společnou mřížku a ta se zvětšit nemůže.
         */
        .table tbody tr:hover {
            background-color: rgba(192, 0, 0, 0.05);
        }

/* ========== MODAL ========== */
.modal-header {
    background: linear-gradient(135deg, var(--ases-gray-dark) 0%, var(--ases-gray-medium) 100%);
    color: white;
    border-bottom: 3px solid var(--ases-red);
}

.modal-title {
    color: white !important;
}

.modal-header .btn-close {
    filter: brightness(0) invert(1);
}

.modal-content {
    border-radius: 12px;
    box-shadow: var(--shadow-xl);
    border: none;
}

/* ========== ALERTS ========== */
.alert {
    border-radius: 10px;
    border-left: 4px solid;
    box-shadow: var(--shadow-md);
    padding: 1.25rem;
}

.alert-primary {
    background-color: rgba(192, 0, 0, 0.1);
    border-color: var(--ases-red);
    color: var(--ases-red-dark);
}

/* ========== MOBILE ========== */
.mobile-menu-toggle {
    display: none;
    position: fixed;
    top: 1rem;
    left: 1rem;
    z-index: 1001;
    background: linear-gradient(135deg, var(--ases-red) 0%, var(--ases-red-dark) 100%);
    color: white;
    border: none;
    padding: 0.875rem;
    border-radius: 10px;
    font-size: 1.25rem;
    box-shadow: var(--shadow-lg);
    transition: all 0.3s ease;
}

    .mobile-menu-toggle:hover {
        transform: scale(1.05);
        box-shadow: var(--shadow-xl);
    }

@media (max-width: 768px) {
    .sidebar {
        transform: translateX(-100%);
        transition: transform 0.3s ease;
    }

        .sidebar.show {
            transform: translateX(0);
        }

    main {
        margin-left: 0;
    }

    .mobile-menu-toggle {
        /*
         * Do toku lišty, ne nad ni. Jako plovoucí prvek se obsah lišty
         * podsunul pod něj: na 390 px utekl přepínač jazyka na souřadnici
         * -36 px, tedy z poloviny za levý okraj obrazovky.
         *
         * Odsazení vpravo tlačítko drží vlevo a zbytek lišty odtlačí doprava.
         */
        display: inline-flex;
        align-items: center;
        position: static;
        margin-right: auto;
        padding: 0.5rem 0.7rem;
        font-size: 1.1rem;
        box-shadow: var(--shadow-sm);
        flex: 0 0 auto;
    }

    /* Hamburger je nově součástí lišty, odsazení pro něj tedy netřeba. */
    .top-row {
        padding-left: 0.75rem;
    }

    /* Sidebar backdrop/overlay */
    .sidebar-backdrop {
        position: fixed;
        inset: 0;
        background: rgba(0, 0, 0, 0.45);
        z-index: 999;
        animation: fadeInOverlay 0.2s ease;
        /* Tažení po zakryté ploše nemá stránkou hýbat, jen zavírat nabídku. */
        touch-action: none;
    }

    /*
     * Dokud je nabídka otevřená, stránka pod ní stojí. Jinak se při rolování
     * hýbe jednou nabídka, jednou obsah vzadu, podle toho, kde prst začal.
     */
    body:has(.sidebar.show) {
        overflow: hidden;
    }

    /* Make all tables horizontally scrollable on mobile */
    .table-responsive {
        -webkit-overflow-scrolling: touch;
    }

    /* Ensure cards don't overflow */
    .card {
        overflow: hidden;
    }

    /* Reduce content padding on small screens */
    article.content {
        padding-left: 0.75rem !important;
        padding-right: 0.75rem !important;
    }

    /* Allow flex headers with title+button to wrap */
    .d-flex.justify-content-between.align-items-center.mb-4,
    .d-flex.justify-content-between.align-items-start.mb-4 {
        flex-wrap: wrap;
        gap: 0.5rem;
    }

    /* Admin stats grids */
    .row.g-4 > [class*="col-lg"],
    .row.g-3 > [class*="col-lg"] {
        min-width: 0;
    }
}

@keyframes fadeInOverlay {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* ========== SCROLLBAR ========== */
.sidebar::-webkit-scrollbar {
    width: 8px;
}

.sidebar::-webkit-scrollbar-track {
    background: rgba(0, 0, 0, 0.1);
}

.sidebar::-webkit-scrollbar-thumb {
    background: rgba(255, 255, 255, 0.4);
    border-radius: 4px;
}

    .sidebar::-webkit-scrollbar-thumb:hover {
        background: rgba(255, 255, 255, 0.6);
    }

/* ========== LANGUAGE SWITCHER ========== */
.language-switcher {
    margin-right: 1rem;
}

    .language-switcher .dropdown-item.active {
        background-color: var(--ases-red);
        color: white;
    }

/* Stat Cards - Kliknutelné */
.stat-card-clickable {
    transition: all 0.3s ease;
}

    .stat-card-clickable:hover {
        transform: translateY(-5px);
        box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2) !important;
    }

    .stat-card-clickable:active {
        transform: translateY(-2px);
    }

.nav-tabs {
    border-bottom: 2px solid #E5E5E5;
}

    .nav-tabs .nav-link {
        background-color: #aea9a9; /* ← ZMĚŇ z white na světle šedou */
        color: #6B6B6B;
        font-weight: 500;
        border: 1px solid #E5E5E5; /* ← PŘIDEJ border */
        margin-right: 0.25rem;
        padding: 0.75rem 1.5rem;
        border-radius: 8px 8px 0 0;
        transition: all 0.2s ease;
    }

        .nav-tabs .nav-link:hover {
            background-color: rgba(192, 0, 0, 0.05);
            color: #C00000;
            border-color: transparent;
        }

        .nav-tabs .nav-link.active {
            background-color: #C00000 !important;
            color: white !important;
            font-weight: 600;
            border-color: #C00000 !important;
        }

        .nav-tabs .nav-link i {
            margin-right: 0.5rem;
        }

/* Year Selector - širší */
.reports-page .form-select {
    min-width: 150px;
}

/* Employee Filter Card - čistší */
.reports-page .card {
    border: 1px solid #E5E5E5;
    border-radius: 10px;
}

.reports-page .card-body {
    padding: 1.25rem;
}

/* Remove inline styles conflict */
.stat-card-clickable:hover {
    transform: translateY(-5px);
    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15) !important;
}


.home-dashboard {
    padding: 2rem;
    max-width: 1400px;
    margin: 0 auto;
}

/* Welcome Card */
.welcome-card {
    border: none;
    border-radius: 12px;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
    background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);
    min-height: 300px;
}

.welcome-icon {
    width: 64px;
    height: 64px;
    background: linear-gradient(135deg, #C00000 0%, #A00000 100%);
    border-radius: 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-right: 1rem;
    box-shadow: 0 4px 8px rgba(192, 0, 0, 0.2);
}

    .welcome-icon i {
        font-size: 2rem;
        color: white;
    }

.welcome-card h5 {
    color: #6B6B6B;
    font-size: 1rem;
    font-weight: 500;
}

.welcome-card h3 {
    color: #2C2C2C;
    font-size: 1.75rem;
}

.today-info {
    background: white;
    padding: 1.25rem;
    border-radius: 10px;
    margin-top: 1.5rem;
    border: 1px solid #E5E5E5;
}

.date-display {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    font-size: 1rem;
    color: #2C2C2C;
    font-weight: 600;
    margin-bottom: 0.5rem;
}

    .date-display i {
        color: #C00000;
        font-size: 1.25rem;
    }

.nameday-display {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    font-size: 0.9rem;
    color: #6B6B6B;
}

    .nameday-display i {
        color: #10B981;
        font-size: 1rem;
    }

    .nameday-display strong {
        color: #2C2C2C;
    }

.quick-actions {
    display: flex;
    gap: 0.75rem;
}

    .quick-actions .btn {
        flex: 1;
    }

/* Balance Card */
.balance-card {
    border: none;
    border-radius: 12px;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
    min-height: 300px;
}

    .balance-card .card-header {
        border-radius: 12px 12px 0 0;
        padding: 1.25rem;
    }

.balance-list {
    display: flex;
    flex-direction: column;
    gap: 1.25rem;
}

.balance-item {
    padding: 1rem;
    background: #F8F9FA;
    border-radius: 8px;
    transition: all 0.2s ease;
}

    .balance-item:hover {
        background: #F0F1F2;
        transform: translateX(4px);
    }

    .balance-item h6 {
        color: #2C2C2C;
        font-weight: 600;
        font-size: 0.95rem;
        margin: 0;
    }

.balance-numbers {
    font-size: 1.25rem;
    font-weight: 700;
}

    .balance-numbers .used {
        color: #C00000;
    }

    .balance-numbers .separator {
        color: #D0D0D0;
        margin: 0 0.25rem;
    }

    .balance-numbers .total {
        color: #6B6B6B;
    }

.progress {
    border-radius: 4px;
    background-color: #E5E5E5;
}

.progress-bar {
    transition: width 0.6s ease;
}

/* Stat Cards */
.stat-card {
    border: none;
    border-radius: 12px;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
    transition: all 0.3s ease;
}

    .stat-card:hover {
        transform: translateY(-4px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
    }

.stat-icon {
    width: 56px;
    height: 56px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
}

    .stat-icon i {
        font-size: 1.75rem;
    }

.stat-card h3 {
    color: #2C2C2C;
    font-weight: 700;
    font-size: 2rem;
    margin-bottom: 0;
}

.stat-card small {
    font-size: 0.875rem;
    color: #6B6B6B;
}

.bg-success-subtle {
    background-color: rgba(16, 185, 129, 0.1);
}

.bg-warning-subtle {
    background-color: rgba(251, 191, 36, 0.1);
}

.bg-danger-subtle {
    background-color: rgba(239, 68, 68, 0.1);
}

/* Hero Section (for non-authenticated) */
.hero-section {
    min-height: 80vh;
    display: flex;
    align-items: center;
    padding: 2rem 0;
}

.text-gradient {
    background: linear-gradient(135deg, #C00000 0%, #A00000 100%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
}

/* Responsive */
@media (max-width: 768px) {
    .home-dashboard {
        padding: 1rem;
    }

    .welcome-card h3 {
        font-size: 1.5rem;
    }

    .quick-actions {
        flex-direction: column;
    }

    .balance-numbers {
        font-size: 1rem;
    }

    .stat-card h3 {
        font-size: 1.5rem;
    }
}

.login-container {
    min-height: 100vh;
    background: linear-gradient(135deg, #C00000 0%, #A00000 100%);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1rem;
    position: relative;
    overflow: hidden;
}

    /* Floating background elements */
    .login-container::before {
        content: '';
        position: absolute;
        top: -50%;
        right: -10%;
        width: 500px;
        height: 500px;
        background: rgba(255, 255, 255, 0.05);
        border-radius: 50%;
        animation: float 20s infinite ease-in-out;
    }

    .login-container::after {
        content: '';
        position: absolute;
        bottom: -30%;
        left: -5%;
        width: 400px;
        height: 400px;
        background: rgba(255, 255, 255, 0.03);
        border-radius: 50%;
        animation: float 15s infinite ease-in-out reverse;
    }

@keyframes float {
    0%, 100% {
        transform: translateY(0) rotate(0deg);
    }

    50% {
        transform: translateY(-20px) rotate(5deg);
    }
}

.login-card {
    width: 100%;
    max-width: 440px;
    position: relative;
    z-index: 1;
    animation: slideUp 0.6s ease-out;
}

@keyframes slideUp {
    from {
        opacity: 0;
        transform: translateY(30px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.card {
    border-radius: 1.5rem;
    backdrop-filter: blur(10px);
}

.logo-container {
    width: 150px;
    height: 150px;
    background: linear-gradient(135deg, #C00000 0%, #A00000 100%);
    border-radius: 20px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 10px 30px rgba(192, 0, 0, 0.3);
    padding: 10px;
}

    .logo-container .logo-img {
        width: 100%;
        height: 100%;
        object-fit: contain;
        filter: brightness(0) invert(1);
    }

    .logo-container i {
        font-size: 2.5rem;
        color: white;
    }

.card-title {
    font-weight: 700;
    font-size: 1.75rem;
}

.input-group-modern {
    border-radius: 0.75rem;
    overflow: hidden;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
    transition: all 0.3s ease;
    border: 1px solid #e0e0e0;
}

    .input-group-modern:focus-within {
        box-shadow: 0 4px 12px rgba(192, 0, 0, 0.15);
        border-color: #C00000;
    }

.input-group-text {
    background-color: #f8f9fa;
    border: none;
    color: #6c757d;
}

.input-group-modern .form-control {
    border: none;
    padding: 0.75rem 1rem;
}

    .input-group-modern .form-control:focus {
        box-shadow: none;
        outline: none;
    }

.btn-primary {
    background: linear-gradient(135deg, #C00000 0%, #A00000 100%);
    border: none;
    border-radius: 0.75rem;
    font-weight: 600;
    padding: 0.75rem;
    transition: all 0.3s ease;
}

    .btn-primary:hover:not(:disabled) {
        background: linear-gradient(135deg, #A00000 0%, #A00000 100%);
        transform: translateY(-2px);
        box-shadow: 0 6px 20px rgba(192, 0, 0, 0.4);
    }

    .btn-primary:disabled {
        background: linear-gradient(135deg, #999 0%, #777 100%);
        cursor: not-allowed;
    }

.link-primary {
    color: #C00000;
    font-weight: 500;
    transition: all 0.2s ease;
}

    .link-primary:hover {
        color: #A00000;
        text-decoration: underline !important;
    }

.alert {
    border-radius: 0.75rem;
    border: none;
}

.border-top {
    border-color: #e9ecef !important;
}

/* Responsive */
@media (max-width: 576px) {
    .login-card {
        max-width: 100%;
    }

    .card-body {
        padding: 2rem !important;
    }

    .logo-container {
        width: 60px;
        height: 60px;
    }

        .logo-container i {
            font-size: 2rem;
        }

    .card-title {
        font-size: 1.5rem;
    }
}

/*  home SECTION - COMPLETE DESIGN  */

.home-section {
    background: linear-gradient(135deg, var(--ases-red) 0%, var(--ases-red-dark) 100%);
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    padding: 4rem 2rem;
}

/* Dekorativní pozadí */
.home-decoration {
    position: absolute;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.05);
    pointer-events: none;
}

.home-decoration-1 {
    width: 600px;
    height: 600px;
    top: -200px;
    right: -150px;
    animation: float 20s infinite ease-in-out;
}

.home-decoration-2 {
    width: 400px;
    height: 400px;
    bottom: -150px;
    left: -100px;
    animation: float 15s infinite ease-in-out reverse;
}

@keyframes float {
    0%, 100% {
        transform: translateY(0) rotate(0deg);
    }

    50% {
        transform: translateY(-30px) rotate(5deg);
    }
}

/* Logo wrapper */
.home-logo-wrapper {
    margin-bottom: 3rem;
    animation: fadeInDown 0.8s ease-out;
}

.home-logo-img {
    max-width: 280px;
    width: 100%;
    height: auto;
    filter: brightness(0) invert(1);
    opacity: 0.95;
    transition: all 0.3s ease;
}

    .home-logo-img:hover {
        opacity: 1;
        transform: scale(1.05);
    }

/* Hlavní nadpis */
.home-title {
    color: white !important;
    font-size: 3.5rem;
    font-weight: 700;
    margin-bottom: 1.5rem;
    letter-spacing: -0.5px;
    line-height: 1.2;
    animation: fadeInUp 0.8s ease-out 0.2s both;
}

/* Popisný text */
.home-description {
    color: rgba(255, 255, 255, 0.9) !important;
    font-size: 1.5rem;
    line-height: 1.8;
    margin-bottom: 3rem;
    max-width: 600px;
    margin-left: auto;
    margin-right: auto;
    animation: fadeInUp 0.8s ease-out 0.4s both;
}

/* CTA sekce */
.home-cta {
    animation: fadeInUp 0.8s ease-out 0.6s both;
}

/* home tlačítko */
.btn-home {
    background: white !important;
    color: var(--ases-red) !important;
    border: 3px solid white;
    font-weight: 700;
    padding: 1rem 3rem;
    border-radius: 50px;
    font-size: 1.125rem;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    transition: all 0.3s ease;
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
}

    .btn-home:hover {
        background: transparent !important;
        color: white !important;
        border-color: white;
        transform: translateY(-4px);
        box-shadow: 0 15px 40px rgba(0, 0, 0, 0.3);
    }

    .btn-home:active {
        transform: translateY(-2px);
    }

/* Animace */
@keyframes fadeInDown {
    from {
        opacity: 0;
        transform: translateY(-30px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(30px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* ========== RESPONSIVE ========== */

/* Tablet */
@media (max-width: 992px) {
    .home-title {
        font-size: 3rem;
    }

    .home-description {
        font-size: 1.25rem;
    }

    .home-logo-img {
        max-width: 220px;
    }
}

/* Mobile */
@media (max-width: 768px) {
    .home-section {
        min-height: 100vh;
        padding: 3rem 1.5rem;
    }

    .home-logo-wrapper {
        margin-bottom: 2rem;
    }

    .home-logo-img {
        max-width: 180px;
    }

    .home-title {
        font-size: 2.25rem;
        margin-bottom: 1rem;
    }

    .home-description {
        font-size: 1.125rem;
        margin-bottom: 2rem;
    }

    .btn-home {
        padding: 0.875rem 2.5rem;
        font-size: 1rem;
    }

    .home-decoration-1 {
        width: 400px;
        height: 400px;
        top: -150px;
        right: -100px;
    }

    .home-decoration-2 {
        width: 300px;
        height: 300px;
        bottom: -100px;
        left: -80px;
    }
}

/* Small Mobile */
@media (max-width: 576px) {
    .home-title {
        font-size: 1.875rem;
    }

    .home-description {
        font-size: 1rem;
    }

    .home-logo-img {
        max-width: 150px;
    }

    .btn-home {
        padding: 0.75rem 2rem;
        font-size: 0.95rem;
    }
}

/*    Change Password Page Styles   */

.change-password-page {
    animation: fadeIn 0.5s ease-in;
}

    .change-password-page .input-group-text {
        background-color: #f8f9fa;
        border-right: none;
    }

    .change-password-page .form-control {
        border-left: none;
    }

        .change-password-page .form-control:focus {
            border-color: #f39c12;
            box-shadow: 0 0 0 0.25rem rgba(243, 156, 18, 0.25);
        }

    .change-password-page .progress {
        border-radius: 10px;
    }

    .change-password-page .progress-bar {
        border-radius: 10px;
        transition: width 0.3s ease;
    }

@keyframes fadeIn {
    from {
        opacity: 0;
        transform: translateY(-10px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Main container animation */
::deep .change-password-page {
    animation: fadeIn 0.5s ease-in;
}

/*
 * Vstup slepený s popiskem ve skupině (input-group).
 *
 * Obě pravidla ruší okraj mezi popiskem a polem, aby vypadaly jako jeden
 * prvek. Dokud .form-control nebylo zúžené na skupinu, přišel o levý okraj
 * KAŽDÝ vstup v aplikaci — pole vypadala zleva otevřená.
 */
.input-group .input-group-text {
    background-color: #f8f9fa;
    border-right: none;
}

.input-group .input-group-text + .form-control {
    border-left: none;
}

    .form-control:focus {
        border-color: #f39c12;
        box-shadow: 0 0 0 0.25rem rgba(243, 156, 18, 0.25);
    }

/* Password strength indicator */
.progress {
    border-radius: 10px;
}

.progress-bar {
    border-radius: 10px;
    transition: width 0.3s ease;
}

/* Fade in animation */
@keyframes fadeIn {
    from {
        opacity: 0;
        transform: translateY(-10px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Button hover effects */
.btn-outline-secondary:hover {
    background-color: #6c757d;
    border-color: #6c757d;
    color: white;
}

.btn-warning:hover {
    background-color: #e08e0b;
    border-color: #d58512;
}

/* Alert styling */
.alert {
    border-radius: 0.5rem;
    animation: slideDown 0.3s ease-out;
}

@keyframes slideDown {
    from {
        opacity: 0;
        transform: translateY(-20px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Card styling */
.card {
    transition: transform 0.2s ease, box-shadow 0.2s ease;
}

/*
 * Hlášky u polí formuláře.
 *
 * Tohle pravidlo dřív mířilo na .text-danger, tedy na VŠECHNO červené
 * v aplikaci. Číslo v dlaždici, ikona, štítek i nadpis tím dostaly
 * velikost 14 px a display: block. V přehledu certifikací pak byla dvě
 * čísla ve stejném <h4> různě velká podle toho, jakou měla barvu.
 *
 * Blazor své hlášky značí třídou validation-message, takže míří tam,
 * kam mířit má.
 */
.validation-message {
    font-size: 0.875rem;
    margin-top: 0.25rem;
    display: block;
}

/* Password requirements checklist */
.text-success {
    font-weight: 500;
}

/*
 * .text-muted je barva, ne průhlednost. Bootstrap ji už ztlumil; dalších
 * 40 % průhlednosti navrch dělalo z popisků a druhotných údajů sotva
 * čitelnou šeď — a protože se průhlednost dědí, ztmavla i ikona nebo
 * štítek uvnitř takového bloku.
 */

/* Input group button styling */
.input-group .btn {
    border-left: none;
    padding: 0.375rem 0.75rem;
}

/* Progress bar colors (already handled by Bootstrap, but for clarity) */
.bg-danger {
    background-color: #dc3545 !important;
}

.bg-warning {
    background-color: #ffc107 !important;
}

.bg-info {
    background-color: #0dcaf0 !important;
}

.bg-success {
    background-color: #198754 !important;
}

/* ===========================
   Dashboard Page
   Přidej do wwwroot/app.css
   =========================== */

.dashboard {
    animation: fadeIn 0.5s ease-in;
}

    .dashboard .stat-card {
        transition: transform 0.2s ease-in-out;
    }

        .dashboard .stat-card:hover {
            transform: translateY(-2px);
        }

    .dashboard .stat-icon {
        width: 50px;
        height: 50px;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 1.5rem;
    }

    .dashboard .progress {
        border-radius: 10px;
        overflow: hidden;
    }

    .dashboard .progress-bar {
        border-radius: 10px;
    }

    .dashboard .admin-stat-number {
        font-size: 2rem;
        font-weight: bold;
        color: #3498db;
    }

    .dashboard .admin-stat-label {
        color: #6c757d;
        font-size: 0.9rem;
        margin-bottom: 0.5rem;
    }

@keyframes fadeIn {
    from {
        opacity: 0;
        transform: translateY(10px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* ========== RESPONSIVE UTILITIES ========== */

/* Stats rows: show 2 cards per row on mobile instead of stacking 1 per row */
@media (max-width: 767.98px) {
    .stats-row > [class*="col-"] {
        flex: 0 0 50%;
        max-width: 50%;
        width: 50%;
    }
}

/* Page headers: allow title + action buttons to wrap on very small screens */
@media (max-width: 576px) {
    .justify-content-between.mb-4 {
        flex-wrap: wrap;
        row-gap: 0.5rem;
    }
}


/* ------------------------------------------------------------------
   Rámeček kolem nadpisu po přechodu na stránku

   Router má <FocusOnNavigate Selector="h1" />, což po každé navigaci
   zaostří nadpis kvůli čtečkám obrazovky. Prohlížeč kolem zaostřeného
   prvku nakreslí focus ring — odsud ten rámeček, ve všech prohlížečích.

   Nejdřív jsem to omezil na :not(:focus-visible) v naději, že se ring
   zachová aspoň pro ovládání klávesnicí. Jenže když na stránku přijdete
   klávesnicí, :focus-visible platí a rámeček je zpátky — tedy přesně
   v situaci, kdy uživatele nejvíc ruší.

   Ruší se proto pro nadpis natvrdo. Přijít o ring na nadpisu nevadí:
   není to ovládací prvek, nikam se z něj netabuje a čtečka ohlásí
   změnu stránky bez ohledu na to, jestli je ring vidět. Interaktivní
   prvky si své zvýraznění drží — tohle pravidlo se jich netýká.
   ------------------------------------------------------------------ */
h1:focus,
h1:focus-visible,
[tabindex="-1"]:focus,
[tabindex="-1"]:focus-visible {
    outline: none;
    box-shadow: none;
}

/* ------------------------------------------------------------------
   Detekce automaticky vyplněných polí

   Prohlížeč při autofillu nastaví hodnotu přímo do DOM a nevyvolá
   událost change — Blazor se o ní tedy nedozví a jeho model zůstane
   prázdný. Na tuhle animaci se dá v JS pověsit posluchač
   (js/autofill.js) a change vyvolat ručně.
   ------------------------------------------------------------------ */
@keyframes onAutoFillStart {
    from { /* prázdné schválně — jde jen o to, že se animace spustí */ }
    to { }
}

input:-webkit-autofill {
    animation-name: onAutoFillStart;
    animation-duration: 1ms;
}

/* ========== FILTRY S VÍCENÁSOBNÝM VÝBĚREM ========== */

/*
 * Pravidlo výše dává všem kartám overflow: hidden, aby z nich nic nevyčnívalo.
 * Rozbalená nabídka filtru z ní ale vyčnívat musí — jinak ji karta uřízne
 * a zbude z ní pruh vysoký dva řádky schovaný pod tabulkou.
 *
 * Zvednutá vrstva je tu proto, že následující karta s tabulkou se kreslí
 * později a bez toho by nabídku překryla.
 */
.filtr-karta {
    overflow: visible;
    position: relative;
    z-index: 20;
}

    /* Karty se při najetí myší nadzvedávají. U karty s filtry by se posunula
       i rozbalená nabídka pod ní. */
    .filtr-karta:hover,
    .filtr-nabidka:hover {
        transform: none;
    }

    .filtr-karta:hover {
        box-shadow: var(--shadow-md);
    }

/* ========== TABULKA JAKO KARTY NA TELEFONU ========== */

/*
 * Přehled certifikací má na šířku 841 px. V okně telefonu širokém 390 px
 * je vidět necelá polovina a zbytek se musí odrolovat do strany —
 * .table-responsive sice zabrání rozbití stránky, ale sloupce se stavem
 * a akcemi jsou mimo obrazovku a nikdo je nenajde.
 *
 * Řádek se proto na úzké obrazovce překlopí do karty: buňky pod sebe,
 * ke každé popisek z hlavičky. Popisek nese atribut data-popisek na <td>,
 * protože hlavička se skrývá a CSS na ni odsud nedosáhne.
 *
 * Použití:
 *   <table class="table tabulka-karty">
 *     <td data-popisek="@Loc["ExpiryDate"]">…</td>
 */
@media (max-width: 767.98px) {

    .tabulka-karty > thead {
        display: none;
    }

    .tabulka-karty,
    .tabulka-karty > tbody,
    .tabulka-karty > tbody > tr,
    .tabulka-karty > tbody > tr > td {
        display: block;
        width: auto;
    }

    .tabulka-karty > tbody > tr {
        border: 1px solid #e3e3e3;
        border-radius: 12px;
        padding: 0.75rem 1rem;
        margin: 0 0.75rem 0.75rem;
        background: white;
    }

        /* Zvýraznění řádku podbarvením tady nedává smysl — karta má okraj. */
        .tabulka-karty > tbody > tr:hover {
            background: white;
        }

    /*
     * Popisek nad hodnotou, ne vedle ní. Vedle sebe se na 390 px nevešly
     * delší štítky ("Bez odpovědné osoby") a přetékaly z obrazovky —
     * dva sloupce se do té šířky prostě nevejdou.
     */
    .tabulka-karty > tbody > tr > td {
        border: 0;
        padding: 0.35rem 0;
        text-align: left;
    }

        .tabulka-karty > tbody > tr > td[data-popisek]::before {
            content: attr(data-popisek);
            display: block;
            margin-bottom: 0.15rem;
            font-size: 0.7rem;
            font-weight: 700;
            letter-spacing: 0.03em;
            text-transform: uppercase;
            color: #8a8a8a;
        }

        /* Dlouhá čísla certifikátů a názvy se musí umět zalomit. */
        .tabulka-karty > tbody > tr > td {
            overflow-wrap: anywhere;
        }

    /*
     * Krátké údaje vedle sebe, ne pod sebou.
     *
     * Výrobní přehled Leonarda má čtrnáct sloupců, z toho šest jsou kódy
     * dílů — krátká hodnota, krátký popisek. Každý na vlastním řádku dělal
     * kartu vysokou 687 px, tedy skoro celou obrazovku telefonu na jediný
     * záznam. Ve třech sloupcích zaberou dva řádky místo šesti.
     */
    .tabulka-karty > tbody > tr > td.bunka-kompaktni {
        display: inline-block;
        width: 33.33%;
        vertical-align: top;
        padding-right: 0.5rem;
    }

    /* Uvnitř karty už není co odrolovat do strany. */
    .table-responsive:has(> .tabulka-karty) {
        overflow-x: visible;
    }
}

/* ========== HLAVIČKY KARET NA TELEFONU ========== */

/*
 * Hlavička karty bývá "název sekce vlevo, tlačítko vpravo". Na 390 px se
 * obojí vedle sebe nevejde: tlačítko se smrskne na svou nejmenší šířku
 * a nápis se v něm zlomí uprostřed slova ("PŘEDÁN / Í"). Kromě toho, že
 * to vypadá rozbitě, je do takového tlačítka těžké trefit prstem.
 *
 * Zalomení má už dřívější pravidlo pro hlavičky stránek (.mb-4), tyhle
 * ale žádné odsazení nemají, takže na ně nedosáhne.
 */
@media (max-width: 767.98px) {

    .card-header.d-flex {
        flex-wrap: wrap;
        gap: 0.5rem;
    }

        /* Tlačítko raději na vlastní řádek celé než zlomené uprostřed slova. */
        .card-header .btn {
            white-space: nowrap;
        }
}

/* ========== HORNÍ LIŠTA NA TELEFONU ========== */

@media (max-width: 575.98px) {

    /*
     * Přepínač jazyka, zvonek a jméno se na 390 px vedle sebe nevejdou.
     * Jméno jde pryč jako první — kdo je přihlášen, je poznat z podobizny
     * a ze štítku role, kdežto jazyk ani upozornění se ničím nenahradí.
     */
    .top-row .user-info .dropdown-toggle > span:not(.badge):not(:first-child) {
        display: none;
    }

    .top-row {
        gap: 0.35rem;
        padding-right: 0.75rem !important;
    }
}

/* ========== OVLÁDACÍ PRVKY HORNÍ LIŠTY ========== */

/*
 * Hamburger, přepínač jazyka, zvonek a uživatelská nabídka měly každý jinou
 * výšku — naměřeno 42, 66, 45 a 52 px. Nejvyšší byl jazyk, protože se mu
 * ikona a zkratka na úzké obrazovce zalomily pod sebe.
 *
 * Výška je proto pevná a společná, obsah se nezalamuje. Lišta je jediný
 * pruh, kde jsou prvky vedle sebe, takže nesourodost je tam vidět nejvíc.
 */
.top-row .btn,
.top-row .mobile-menu-toggle {
    height: 42px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    white-space: nowrap;
    gap: 0.3rem;
}

@media (max-width: 575.98px) {

    /*
     * Na 390 px se čtyři prvky s odsazením 1 rem mezi sebou nevejdou —
     * lišta přeteče a hamburger skončí částečně za levým okrajem.
     * Mezery se tedy stáhnou a výplň prvků taky.
     */
    .top-row {
        padding-left: 0.5rem !important;
        padding-right: 0.5rem !important;
    }

        .top-row .dropdown {
            margin-right: 0.35rem !important;
        }

        .top-row .btn,
        .top-row .mobile-menu-toggle {
            height: 38px;
            padding: 0 0.55rem;
            font-size: 0.9rem;
        }
}

/* ========== VODOROVNÉ ŘADY NA TELEFONU ========== */

/*
 * "Něco vlevo, něco vpravo" je v portálu nejčastější rozvržení: nadpis
 * a tlačítka, popisek a hodnota, skupina tlačítek pod formulářem. Na 390 px
 * se obsah často nevejde a bez zalomení pak přeteče z karty — u profilu
 * takhle skončilo tlačítko "Uložit profil" useknuté v půlce.
 *
 * Zalomení se projeví jen tehdy, když se obsah nevejde. Kde se vejde,
 * nezmění se nic.
 */
@media (max-width: 767.98px) {

    .d-flex.justify-content-between {
        flex-wrap: wrap;
        gap: 0.5rem;
    }

        /* Skupina tlačítek uvnitř takové řady se musí umět zalomit taky. */
        .d-flex.justify-content-between > div {
            display: flex;
            flex-wrap: wrap;
            gap: 0.5rem;
        }
}

/* ========== ČITELNOST ŽLUTÉ A TYRKYSOVÉ NA BÍLÉ ========== */

/*
 * Bootstrapová žlutá (#ffc107) má na bílé kontrast 1,63:1 a tyrkysová
 * (#0dcaf0) 1,96:1. Norma žádá 4,5:1 pro běžný text. Změřeno v prohlížeči
 * na skutečných stránkách: takhle byly nečitelné odkazy "Změnit heslo"
 * a "Zůstatek dovolené" v profilu, hlášky v nastavení i statistiky.
 *
 * Jako VÝPLŇ jsou ty barvy v pořádku — štítek se žlutým pozadím a tmavým
 * textem má kontrastu dost. Ztmavuje se proto jen jejich použití pro text
 * a pro obrysová tlačítka.
 */
.text-warning,
.btn-outline-warning {
    color: #7a5c00 !important;   /* 6,25:1 */
}

.btn-outline-warning {
    border-color: #7a5c00;
}

    /* Po najetí je pozadí žluté a text tmavý — tam ztmavovat netřeba. */
    .btn-outline-warning:hover,
    .btn-outline-warning:focus {
        color: #212529 !important;
        background-color: #ffc107;
        border-color: #ffc107;
    }

.text-info,
.btn-outline-info {
    color: #0a6f85 !important;   /* 5,79:1 */
}

.btn-outline-info {
    border-color: #0a6f85;
}

    .btn-outline-info:hover,
    .btn-outline-info:focus {
        color: #fff !important;
        background-color: #0a6f85;
        border-color: #0a6f85;
    }

/*
 * Dvě místa těsně pod hranicí čitelnosti — změřeno v prohlížeči.
 *
 * Popisek u vstupní skupiny stál na 4,45:1 proti svému šedému pozadí,
 * norma žádá 4,5:1. Chybělo pět setin, ale chybělo.
 *
 * Ukázka kódu uvnitř žlutého upozornění měla 4,06:1 — Bootstrap počítá
 * s bílým pozadím, ne se žlutým.
 */
.input-group-text {
    color: #5c636a;
}

.alert code,
.alert-warning code {
    color: #8a1f4f;
}

/* ========== VELIKOST DOTYKOVÝCH CÍLŮ ========== */

/*
 * Textové odkazy a odkazová tlačítka byly na telefonu vysoké 16 až 21 px.
 * Norma žádá aspoň 24 px a prst je širší než kurzor — do takového odkazu
 * se špatně trefuje a snadno se místo něj klikne na sousední.
 *
 * Zvětšuje se jen výška plochy, na kterou se dá klepnout. Písmo zůstává
 * malé, takže se vzhled nemění; jen kolem textu je víc místa.
 */
@media (max-width: 767.98px), (pointer: coarse) {

    .btn-link,
    a.small,
    a.text-decoration-none {
        display: inline-flex;
        align-items: center;
        min-height: 32px;
    }

        /* p-0 na odkazovém tlačítku ruší výplň; svislou vrátíme zpět. */
        .btn-link.p-0 {
            padding-top: 0.35rem !important;
            padding-bottom: 0.35rem !important;
        }
}

/* ========== AKČNÍ TLAČÍTKA V ŘÁDCÍCH NA TELEFONU ========== */

/*
 * Tlačítko s jednou ikonou (upravit, smazat) měřilo v řádku tabulky
 * 32×16 px — změřeno v prohlížeči na 390 px. Norma žádá aspoň 24 px
 * a prst potřebuje víc; je to přitom hlavní akce celého řádku.
 *
 * Na počítači zůstává drobné schválně: v husté tabulce je to správně
 * a myší se do něj trefí každý.
 */
@media (max-width: 767.98px), (pointer: coarse) {

    /*
     * Zaškrtávátko i s popiskem měřilo na výšku 21 px. Kliká se na obojí
     * dohromady, ale i tak je to pod hranicí 24 px, kterou žádá norma.
     */
    .form-check {
        min-height: 32px;
        display: flex;
        align-items: center;
        flex-wrap: wrap;
    }

        /* Klikací je popisek, ne obal — plochu tedy musí dostat on. */
        .form-check .form-check-label {
            display: flex;
            align-items: center;
            min-height: 32px;
        }

    td .btn {
        min-width: 40px;
        min-height: 40px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
    }
}

/* ========== ORGANIZAČNÍ STROM ==========
   Strom se kreslí shora dolů: nadřízený uprostřed nad svými lidmi, spojený
   čarami. Dřív pro tyhle třídy žádné CSS nebylo — vnořené <ul> se vykreslily
   jako odsazený seznam zleva, což strom nepřipomínalo.

   Čáry jsou z ::before/::after, žádný JavaScript ani SVG: svislá čára dolů
   z každé karty, vodorovná přes šířku sourozenců, svislá nahoru do každé
   karty. Krajní děti mají vodorovnou čáru jen k sobě, ne za sebe. */
.org-chart {
    overflow-x: auto;
    padding: 0.5rem 0 1rem;
}

.org-root,
.org-children {
    display: flex;
    justify-content: center;
    align-items: flex-start;
    list-style: none;
    margin: 0;
    padding: 0;
}

/* Kořen je široký jako celý strom, ne jako karta. Se šířkou karty se
   vystředěný strom ořízl na obou stranách; takhle se do karty vejde,
   a když ne, posouvá se — .org-chart má overflow-x. */
.org-root {
    display: inline-flex;
    min-width: 100%;
}

.org-node {
    position: relative;
    padding: 1.5rem 0.5rem 0;
    display: flex;
    flex-direction: column;
    align-items: center;
}

.org-root > .org-node { padding-top: 0; }

/* svislá čára nahoru z karty k vodorovné spojnici sourozenců */
.org-children > .org-node::before {
    content: "";
    position: absolute;
    top: 0;
    left: 50%;
    width: 2px;
    height: 1.5rem;
    background: var(--bs-border-color, #dee2e6);
}

/* vodorovná spojnice: každé dítě kreslí kus nad sebou od kraje ke kraji */
.org-children > .org-node::after {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 2px;
    background: var(--bs-border-color, #dee2e6);
}

.org-children > .org-node:first-child::after { left: 50%; }
.org-children > .org-node:last-child::after  { right: 50%; }
.org-children > .org-node:only-child::after  { display: none; }

/* svislá čára dolů z karty k dětem */
.org-node > .org-children {
    position: relative;
    padding-top: 1.5rem;
}

.org-node > .org-children::before {
    content: "";
    position: absolute;
    top: 0;
    left: 50%;
    width: 2px;
    height: 1.5rem;
    background: var(--bs-border-color, #dee2e6);
}

.org-card {
    width: 15.5rem;
    background: #fff;
    border: 1px solid var(--bs-border-color, #dee2e6);
    border-radius: 0.5rem;
    padding: 0.75rem;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
}

/* Bootstrap žádnou třídu min-w-0 nemá. Bez min-width: 0 se položka flexu
   nesmí zmenšit pod šířku svého obsahu, takže se e-mail nezkrátí — přeteče
   přes okraj karty. Celý e-mail je v titulku po najetí. */
.org-card .flex-grow-1 {
    min-width: 0;
}

/* Pozice pod jménem: stejná velikost jako e-mail, ale tmavší — je to
   informace o roli ve struktuře, e-mail je jen kontakt. */
.org-position {
    font-size: 0.8rem;
    color: #495057;
}

.org-card-highlight {
    border-color: var(--ases-red, #c00000);
    box-shadow: 0 0 0 3px rgba(192, 0, 0, 0.12);
}

.org-avatar {
    width: 2rem;
    height: 2rem;
    border-radius: 50%;
    background: #6c757d;
    color: #fff;
    font-size: 0.8rem;
    font-weight: 600;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.org-deputy {
    font-size: 0.8rem;
    color: #664d03;
    background: #fff3cd;
    border-radius: 0.25rem;
    padding: 0.25rem 0.5rem;
}

/* Na telefonu se strom šíře nevejde. Přepne se na svislý: děti pod
   rodičem, odsazené, s čarou po levé straně — strom zůstane čitelný
   a nikdo nemusí posouvat do strany. */
@media (max-width: 767.98px) {
    .org-root,
    .org-children {
        flex-direction: column;
        align-items: stretch;
    }

    .org-root { display: flex; }

    .org-node {
        align-items: stretch;
        padding: 0.75rem 0 0 1rem;
        min-width: 0;
    }

    .org-children { min-width: 0; }

    .org-root > .org-node { padding-left: 0; }

    .org-children > .org-node::before {
        top: 0;
        bottom: auto;
        left: 0;
        width: 1.25rem;
        height: 2px;
        transform: translateY(2.25rem);   /* do středu karty */
    }

    .org-children > .org-node::after {
        top: 0;
        bottom: 0;
        left: 0;
        right: auto;
        width: 2px;
        height: auto;
    }

    .org-children > .org-node:first-child::after,
    .org-children > .org-node:last-child::after,
    .org-children > .org-node:only-child::after { display: block; left: 0; right: auto; }

    .org-children > .org-node:last-child::after { height: 2.25rem; }

    .org-node > .org-children { padding-top: 0; }
    .org-node > .org-children::before { display: none; }

    .org-card { width: auto; min-width: 0; }
}

/* ========== PLNĚNÍ PLÁNU ==========
   Pruh plnění v tabulce plán vs. skutečnost. Bez JavaScriptu: šířka výplně
   je procento plnění, barva říká, jestli je pod 90, pod 100, nebo splněno. */
.plneni-pruh {
    height: 0.5rem;
    background: #e9ecef;
    border-radius: 0.25rem;
    overflow: hidden;
    min-width: 4rem;
}

.plneni-pruh-vypln {
    height: 100%;
    border-radius: 0.25rem;
}

/* Součtový řádek tabulky se na telefonu nepřeklápí do karty a přetéká.
   Součty jsou v dlaždicích nad tabulkou, takže o nic nepřijde. */
@media (max-width: 767.98px) {
    .tabulka-karty > tfoot { display: none; }
}

/* Červený text má na světlém podkladu tabulky (table-light) kontrast 4,3:1,
   norma žádá 4,5. Stejně jako u žluté a tyrkysové se ztmavuje jen text;
   výplně a rámečky zůstávají. #b02a37 je Bootstrapův danger-text-emphasis. */
.text-danger { color: #b02a37 !important; }

/* ========== PŘEHLED CERTIFIKACÍ PODLE ZAŘÍZENÍ (MATICE) ========== */

/*
 * Tvar převzatý z tabulky, kterou firma vedla v Excelu: zařízení v řádcích,
 * druhy certifikace ve sloupcích. Sloupců je přes dvacet, takže tabulka
 * roluje do strany — první sloupec a hlavička zůstávají přilepené, aby
 * bylo pořád vidět, u kterého zařízení a jaké certifikace člověk je.
 * Barvy odpovídají vysvětlivkám z původní tabulky.
 */
.matice-obal {
    max-height: calc(100vh - 260px);
    max-height: calc(100dvh - 260px);
}

.matice {
    font-size: 0.8rem;
    white-space: nowrap;
    margin-bottom: 0;
}

.matice thead th {
    position: sticky;
    top: 0;
    z-index: 2;
    background: #fff;
    vertical-align: bottom;
}

.matice .matice-produkt {
    position: sticky;
    left: 0;
    z-index: 1;
    background: #fff;
    font-weight: 600;
    min-width: 11rem;
}

.matice thead .matice-produkt {
    z-index: 3;
}

.matice-hlavicka {
    min-width: 7.5rem;
    max-width: 10rem;
    white-space: normal;
    font-size: 0.75rem;
    line-height: 1.2;
}

.matice-bunka {
    text-align: center;
    vertical-align: middle;
}

/* Celá buňka je cíl pro prst. I jednořádkové „NE" musí mít aspoň 24 px. */
.matice-odkaz {
    display: block;
    min-height: 1.75rem;
    padding: 0.25rem 0;
    color: inherit;
    text-decoration: none;
}

.matice-odkaz:hover .matice-ano-ne {
    text-decoration: underline;
}

.matice-ano-ne {
    display: block;
    font-weight: 600;
}

.matice-datum {
    display: block;
    font-size: 0.75rem;
}

/*
 * Barvy stavů — podklad světlý, text tmavý, kontrast nad 4,5:1.
 *
 * Bootstrap maluje pozadí buněk přes --bs-table-bg a pravidlem s vyšší
 * specificitou, než má jedna třída; obyčejné background by nic neudělalo.
 * Proměnná se proto nastavuje taky — v legendě (span) platí background,
 * v tabulce (td) proměnná.
 */
.matice-platna  { --bs-table-bg: #d1e7dd; background: #d1e7dd; color: #0a3622; }
.matice-brzy    { --bs-table-bg: #fff3cd; background: #fff3cd; color: #664d03; }
.matice-prosla  { --bs-table-bg: #f8d7da; background: #f8d7da; color: #58151c; }
.matice-proces  { --bs-table-bg: #cfe2ff; background: #cfe2ff; color: #052c65; }
.matice-ceka    { --bs-table-bg: #e2d9f3; background: #e2d9f3; color: #3b2a6b; }
.matice-ne      { --bs-table-bg: #e9ecef; background: #e9ecef; color: #495057; }
.matice-prazdna { --bs-table-bg: #fff;    background: #fff; }

.matice-legenda {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    font-size: 0.8rem;
}

.matice-legenda .matice-bunka {
    padding: 0.2rem 0.6rem;
    border: 1px solid #dee2e6;
    border-radius: 0.25rem;
}

/*
 * Na telefonu se řádek překlopí do karty (viz tabulka-karty výš). Dvacet
 * prázdných polí by kartu zaplevelilo, takže se ukážou jen certifikace,
 * které zařízení skutečně má nebo řeší.
 */
@media (max-width: 767.98px) {
    .matice-obal {
        max-height: none;
    }

    .matice .matice-produkt,
    .matice .matice-bunka {
        position: static;
        white-space: normal;
        text-align: left;
    }

    .matice .matice-prazdna {
        display: none;
    }
}


/* ========== DETAIL CERTIFIKACE ========== */

/* Karta platnosti nese barvu stavu po celém okraji. */
.detail-platnost.border-danger,
.detail-platnost.border-warning,
.detail-platnost.border-success {
    border-width: 2px;
}

.dokumenty .dokument-vybrany {
    background: #f1f5fb;
}

/* Ikonová tlačítka u dokumentů jsou cíl pro prst — aspoň 24 px i bez fontu ikon. */
.dokumenty .btn,
.nahled-zavrit {
    min-height: 2rem;
    min-width: 2.25rem;
}

/*
 * Náhled dokumentu přímo na stránce. PDF jde do rámu z úložiště (CSP to
 * povoluje přes frame-src), obrázek do <img>. Výška podle okna, ať se
 * dá číst bez rolování stránky; na telefonu nižší, jinak zabere všechno.
 */
.nahled-ram {
    width: 100%;
    height: 70vh;
    height: 70dvh;
    min-height: 420px;
    border: 1px solid #dee2e6;
    border-radius: 0.375rem;
    background: #f8f9fa;
}

.nahled-obrazek {
    max-width: 100%;
    max-height: 70vh;
    max-height: 70dvh;
    border: 1px solid #dee2e6;
    border-radius: 0.375rem;
}

@media (max-width: 767.98px) {
    .nahled-ram {
        height: 60vh;
        height: 60dvh;
        min-height: 320px;
    }
}
