/* _content/FireSportSystem.Web/Components/Layout/MainLayout.razor.rz.scp.css */
.page[b-w3tm0uurfx] {
    position: relative;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

.site-header[b-w3tm0uurfx] {
    position: sticky;
    top: 0;
    z-index: 1;
}

main[b-w3tm0uurfx] {
    flex: 1;
}

.content[b-w3tm0uurfx] {
    padding-top: 1.5rem;
}

#blazor-error-ui[b-w3tm0uurfx] {
    color-scheme: light only;
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss[b-w3tm0uurfx] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* _content/FireSportSystem.Web/Components/Layout/NavMenu.razor.rz.scp.css */
.navbar[b-bs5s6uz9s1] {
    display: flex;
    align-items: center;
    gap: 1.5rem;
    padding: 0.75rem 1.5rem;
    background-color: var(--color-bg);
    border-bottom: 1px solid var(--color-border);
}

.brand[b-bs5s6uz9s1] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-weight: 700;
    font-size: 1.1rem;
    color: var(--color-text);
    text-decoration: none;
    white-space: nowrap;
}

.brand-icon[b-bs5s6uz9s1] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.75rem;
    height: 1.75rem;
    border-radius: 0.4rem;
    background-color: var(--color-accent);
    font-size: 1rem;
}

.nav-links[b-bs5s6uz9s1] {
    display: flex;
    align-items: center;
    gap: 1rem;
    flex: 1;
}

    .nav-links[b-bs5s6uz9s1]  .nav-link {
        color: var(--color-text);
        text-decoration: none;
        padding: 0.4rem 0.6rem;
        border-radius: 0.3rem;
    }

    .nav-links[b-bs5s6uz9s1]  .nav-link:hover {
        background-color: var(--color-hover-overlay);
    }

    .nav-links[b-bs5s6uz9s1]  .nav-link.active {
        color: var(--color-primary);
        font-weight: 600;
    }

.nav-actions[b-bs5s6uz9s1] {
    display: flex;
    align-items: center;
    gap: 0.75rem;
}

.btn-login[b-bs5s6uz9s1] {
    display: inline-block;
    padding: 0.45rem 1rem;
    border: 1px solid var(--color-border);
    border-radius: 0.4rem;
    background-color: var(--color-bg);
    color: var(--color-text);
    font-weight: 500;
    text-decoration: none;
    cursor: pointer;
}

    .btn-login:hover[b-bs5s6uz9s1] {
        background-color: var(--color-hover-overlay);
    }

.nav-user[b-bs5s6uz9s1] {
    font-weight: 500;
    color: var(--color-text);
}

.navbar-toggler[b-bs5s6uz9s1] {
    display: none;
}

@media (max-width: 640.98px) {
    .navbar[b-bs5s6uz9s1] {
        flex-wrap: wrap;
    }

    .navbar-toggler[b-bs5s6uz9s1] {
        /* Three CSS-drawn bars via var(--color-text) instead of an embedded SVG with a hardcoded
           stroke color — the SVG version was invisible in dark mode (dark icon on dark navbar). */
        appearance: none;
        display: block;
        margin-left: auto;
        width: 2.5rem;
        height: 2.5rem;
        border: 1px solid var(--color-border);
        border-radius: 0.3rem;
        cursor: pointer;
        background-color: transparent;
        background-image:
            linear-gradient(var(--color-text), var(--color-text)),
            linear-gradient(var(--color-text), var(--color-text)),
            linear-gradient(var(--color-text), var(--color-text));
        background-size: 1.2rem 2px;
        background-repeat: no-repeat;
        background-position:
            center calc(50% - 0.4rem),
            center,
            center calc(50% + 0.4rem);
    }

    .nav-links[b-bs5s6uz9s1], .nav-actions[b-bs5s6uz9s1] {
        display: none;
        flex-basis: 100%;
    }

    .navbar-toggler:checked ~ .nav-links[b-bs5s6uz9s1],
    .navbar-toggler:checked ~ .nav-actions[b-bs5s6uz9s1] {
        display: flex;
    }
}
/* _content/FireSportSystem.Web/Components/Pages/Admin/BulkEmail.razor.rz.scp.css */
.page-subtitle[b-wog8zxced9] {
    color: var(--color-text-muted);
    font-size: 0.9rem;
    margin: 0 0 1.25rem;
}

.attachment-list[b-wog8zxced9] {
    list-style: none;
    margin: 0.75rem 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
}

.attachment-list li[b-wog8zxced9] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.6rem;
    background-color: var(--color-bg-muted);
    border: 1px solid var(--color-border);
    border-radius: 0.4rem;
    padding: 0.45rem 0.7rem;
    font-size: 0.85rem;
}

.result-card[b-wog8zxced9] {
    margin-top: 1.25rem;
    border-color: var(--color-primary);
    background-color: var(--color-primary-bg);
}

.result-card h2[b-wog8zxced9] {
    font-size: 1rem;
    margin: 0 0 0.5rem;
}

.failed-list[b-wog8zxced9] {
    margin: 0.75rem 0 0;
    padding: 0.7rem 0.85rem;
    background-color: var(--color-danger-bg);
    border: 1px solid var(--color-danger);
    border-radius: 0.4rem;
    font-size: 0.85rem;
}

.failed-list strong[b-wog8zxced9] {
    color: var(--color-danger);
}

.failed-list ul[b-wog8zxced9] {
    margin: 0.4rem 0 0;
    padding-left: 1.1rem;
}
/* _content/FireSportSystem.Web/Components/Pages/CompetitionOverview.razor.rz.scp.css */
.overview-poster[b-6fpuhqikv3] {
    display: block;
    width: 100%;
    max-width: 16rem;
    border-radius: var(--card-radius);
    object-fit: cover;
}

.overview-poster-fallback[b-6fpuhqikv3] {
    max-width: 6rem;
    object-fit: contain;
}

.overview-header-actions[b-6fpuhqikv3] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    margin-top: 0.75rem;
}

.overview-tabs-card[b-6fpuhqikv3] {
    max-width: 58rem;
    margin: 1.5rem auto 0;
    padding: 0;
    overflow: hidden;
}

.overview-tabs-card .nav-tabs[b-6fpuhqikv3] {
    margin: 0;
    padding: 0 1.25rem;
}

.overview-tabs-card .nav-link[b-6fpuhqikv3] {
    background: none;
    cursor: pointer;
}

.overview-tab-pane[b-6fpuhqikv3] {
    padding: 1.25rem;
}

.startlist-table[b-6fpuhqikv3] {
    table-layout: fixed;
    text-align: center;
    font-size: 0.95rem;
    min-width: 44rem;
}

.startlist-table th:first-child[b-6fpuhqikv3],
.startlist-table td:first-child[b-6fpuhqikv3] {
    width: 2.5rem;
    text-align: center;
    color: var(--color-text-muted);
}

.startlist-table th:nth-child(2)[b-6fpuhqikv3],
.startlist-table td:nth-child(2)[b-6fpuhqikv3] {
    width: 9rem;
    text-align: left;
    font-weight: 600;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.startlist-table th:nth-child(3)[b-6fpuhqikv3],
.startlist-table td:nth-child(3)[b-6fpuhqikv3] {
    text-align: left;
}

.move-cell[b-6fpuhqikv3] {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    white-space: nowrap;
}

/* Same mechanism as .results-table's zebra striping below — background-color on <tr> is hidden by
   Bootstrap's own opaque per-cell background, so this goes through --bs-table-accent-bg instead. */
.startlist-table tbody tr:nth-child(even)[b-6fpuhqikv3] {
    --bs-table-accent-bg: var(--color-zebra-stripe);
}

.results-category + .results-category[b-6fpuhqikv3] {
    margin-top: 1.5rem;
}

.results-category h2[b-6fpuhqikv3] {
    font-size: 1.05rem;
    margin-bottom: 0.5rem;
}

.results-table[b-6fpuhqikv3] {
    table-layout: fixed;
    text-align: center;
    font-size: 0.9rem;
    min-width: 42rem;
}

.results-table th[b-6fpuhqikv3] {
    white-space: nowrap;
}

.results-table th:first-child[b-6fpuhqikv3],
.results-table td:first-child[b-6fpuhqikv3] {
    width: 4rem;
    color: var(--color-text-muted);
}

.results-table th:nth-child(2)[b-6fpuhqikv3],
.results-table td:nth-child(2)[b-6fpuhqikv3] {
    text-align: left;
    width: 26%;
}

/* Bootstrap paints an opaque background on every <td> (var(--bs-table-bg)), which hides any
   background-color set on the parent <tr> — row accent colors have to go through Bootstrap's own
   --bs-table-accent-bg variable (the mechanism .table-striped/.table-hover use internally) instead. */
.results-table tbody tr:nth-child(even)[b-6fpuhqikv3] {
    --bs-table-accent-bg: var(--color-zebra-stripe);
}

.results-table tbody tr.podium-gold[b-6fpuhqikv3] {
    --bs-table-accent-bg: var(--color-gold-bg);
}

.results-table tbody tr.podium-silver[b-6fpuhqikv3] {
    --bs-table-accent-bg: var(--color-silver-bg);
}

.results-table tbody tr.podium-bronze[b-6fpuhqikv3] {
    --bs-table-accent-bg: var(--color-bronze-bg);
}

.results-table tbody tr.podium-gold td:first-child[b-6fpuhqikv3] {
    border-left: 4px solid var(--color-gold-border);
}

.results-table tbody tr.podium-silver td:first-child[b-6fpuhqikv3] {
    border-left: 4px solid var(--color-silver-border);
}

.results-table tbody tr.podium-bronze td:first-child[b-6fpuhqikv3] {
    border-left: 4px solid var(--color-bronze-border);
}

.fastest-table[b-6fpuhqikv3] {
    min-width: 28rem;
}

.fastest-table th:first-child[b-6fpuhqikv3],
.fastest-table td:first-child[b-6fpuhqikv3] {
    text-align: center;
}

.fastest-table th:nth-child(2)[b-6fpuhqikv3],
.fastest-table td:nth-child(2)[b-6fpuhqikv3] {
    width: auto;
    text-align: left;
}

.fastest-table th:last-child[b-6fpuhqikv3],
.fastest-table td:last-child[b-6fpuhqikv3] {
    width: 6rem;
}

/* Mobile-only compact tables (rendered separately, shown via Bootstrap's d-md-none/d-none d-md-*
   utilities — see CompetitionOverview.razor) — merge related columns into one, stacking their
   values as separate lines inside a single cell (Ľ/P/Čas per attempt; poradie+tím together, etc.)
   instead of scrolling a wide table sideways. Desktop's own .results-table/.startlist-table are
   completely untouched by this — requested 2026-08-31. */
.compact-table[b-6fpuhqikv3] {
    width: 100%;
    text-align: left;
    font-size: 0.9rem;
}

.compact-table th[b-6fpuhqikv3],
.compact-table td[b-6fpuhqikv3] {
    padding: 0.5rem 0.4rem;
    vertical-align: top;
    white-space: nowrap;
}

.compact-table thead th[b-6fpuhqikv3] {
    font-size: 0.8rem;
    color: var(--color-text-muted);
    white-space: nowrap;
}

.compact-table tbody tr:nth-child(even)[b-6fpuhqikv3] {
    --bs-table-accent-bg: var(--color-zebra-stripe);
}

.compact-table .rank-line[b-6fpuhqikv3] {
    color: var(--color-text-muted);
    font-size: 0.8rem;
}

.compact-table .team-line[b-6fpuhqikv3] {
    font-weight: 700;
}

.compact-table .category-line[b-6fpuhqikv3] {
    margin-top: 0.15rem;
}

.compact-table tbody tr.podium-gold[b-6fpuhqikv3] {
    --bs-table-accent-bg: var(--color-gold-bg);
}

.compact-table tbody tr.podium-silver[b-6fpuhqikv3] {
    --bs-table-accent-bg: var(--color-silver-bg);
}

.compact-table tbody tr.podium-bronze[b-6fpuhqikv3] {
    --bs-table-accent-bg: var(--color-bronze-bg);
}
/* _content/FireSportSystem.Web/Components/Pages/Competitions.razor.rz.scp.css */
/* Fixed column widths (not just auto-sized per table) so the upcoming and finished tables line up
   with each other — without table-layout: fixed each table sizes its own columns independently
   based only on its own rows' content, so the two tables can end up with visibly different column
   widths even though they share the same three columns. */
.competitions-table[b-je4tu1efg4] {
    table-layout: fixed;
}

.competitions-table th:nth-child(1)[b-je4tu1efg4],
.competitions-table td:nth-child(1)[b-je4tu1efg4] {
    width: 45%;
}

.competitions-table th:nth-child(2)[b-je4tu1efg4],
.competitions-table td:nth-child(2)[b-je4tu1efg4] {
    width: 30%;
}

.competitions-table th:nth-child(3)[b-je4tu1efg4],
.competitions-table td:nth-child(3)[b-je4tu1efg4] {
    width: 25%;
}
/* _content/FireSportSystem.Web/Components/Pages/CompetitionTv.razor.rz.scp.css */
.tv-page[b-5o9p4n3m7j] {
    --tv-bg: #12151a;
    --tv-text: #f5f3ef;
    --tv-muted: #6b7280;
    --tv-muted-2: #9aa0ab;
    --tv-faint: #4b5563;
    --tv-att-text: #cfd3da;
    --tv-border: rgba(255, 255, 255, .07);
    --tv-border-strong: #2a2f38;
    --tv-divider: #262b34;
    --tv-zebra: rgba(255, 255, 255, .035);

    /* 100vw/100vh, not a fixed 1920x1080 — a fixed pixel size only fits a screen/window that is
       exactly that resolution; on anything larger it leaves blank space on the right/bottom
       instead of filling the screen (confirmed live 2026-09-25). vw/vh always exactly matches
       whatever window the page is actually open in, FullHD or not. Row overflow is guaranteed
       fixed regardless of actual size by the fill-mode row logic (see .tv-rows-fill below), so
       there's no longer a reason to pin the canvas to a literal pixel size. */
    width: 100vw;
    height: 100vh;
    box-sizing: border-box;
    background: var(--tv-bg);
    color: var(--tv-text);
    font-family: 'Barlow', system-ui, sans-serif;
    display: flex;
    flex-direction: column;
    padding: 2.2vh 2.5vw;
    gap: 1.2vh;
    overflow: hidden;
}

.tv-page.tv-light[b-5o9p4n3m7j] {
    --tv-bg: #f6f4ef;
    --tv-text: #1c1a16;
    --tv-muted: #8a8578;
    --tv-muted-2: #6b6759;
    --tv-faint: #b0aa9a;
    --tv-att-text: #4b4740;
    --tv-border: rgba(0, 0, 0, .08);
    --tv-border-strong: #ddd8cc;
    --tv-divider: #e4e0d4;
    --tv-zebra: rgba(0, 0, 0, .035);
}

.tv-error[b-5o9p4n3m7j] {
    width: 100vw;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--tv-bg, #12151a);
    color: var(--tv-text, #f5f3ef);
    font-size: 2rem;
    box-sizing: border-box;
}

.tv-header[b-5o9p4n3m7j] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-shrink: 0;
}

.tv-fastest-label[b-5o9p4n3m7j] {
    font-weight: 700;
    font-size: 0.9rem;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--tv-muted);
}

.tv-live[b-5o9p4n3m7j] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    font-size: 1.1rem;
    color: var(--tv-muted-2);
}

.tv-live-dot[b-5o9p4n3m7j] {
    width: 0.7rem;
    height: 0.7rem;
    border-radius: 50%;
    background: #3ecf6e;
    animation: tv-pulse-b-5o9p4n3m7j 2s infinite;
}

@keyframes tv-pulse-b-5o9p4n3m7j {
    0% { box-shadow: 0 0 0 0 rgba(62, 207, 110, .55); }
    70% { box-shadow: 0 0 0 8px rgba(62, 207, 110, 0); }
    100% { box-shadow: 0 0 0 0 rgba(62, 207, 110, 0); }
}

.tv-header-right[b-5o9p4n3m7j] {
    display: flex;
    align-items: center;
    gap: 0.9rem;
    flex-shrink: 0;
}

.tv-icon-toggle[b-5o9p4n3m7j] {
    width: 1.9rem;
    height: 1.9rem;
    border-radius: 50%;
    border: 1px solid var(--tv-border-strong);
    background: transparent;
    color: var(--tv-text);
    font-size: 0.95rem;
    line-height: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    flex-shrink: 0;
    opacity: 0.5;
    transition: opacity .15s ease-in-out;
}

.tv-icon-toggle:hover[b-5o9p4n3m7j],
.tv-icon-toggle:focus-visible[b-5o9p4n3m7j] {
    opacity: 1;
}

.tv-chips[b-5o9p4n3m7j] {
    display: flex;
    gap: 0.9rem;
    flex-shrink: 0;
}

.tv-chip[b-5o9p4n3m7j] {
    flex: 1;
    display: flex;
    align-items: center;
    gap: 0.8rem;
    border-radius: 0.75rem;
    border: 1px solid transparent;
    padding: 0.55rem 1rem;
}

.tv-chip-group[b-5o9p4n3m7j] {
    font-weight: 700;
    font-size: 0.75rem;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--tv-muted);
    flex-shrink: 0;
}

.tv-chip-team[b-5o9p4n3m7j] {
    flex: 1;
    font-size: 1rem;
    font-weight: 600;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.tv-chip-time[b-5o9p4n3m7j] {
    font-size: 1.5rem;
    font-weight: 700;
    flex-shrink: 0;
}

.tv-chip-unit[b-5o9p4n3m7j] {
    font-size: 0.8rem;
    color: var(--tv-muted);
    font-weight: 600;
}

.tv-columns[b-5o9p4n3m7j] {
    display: flex;
    gap: 2.5vw;
    flex: 1;
    min-height: 0;
}

.tv-column[b-5o9p4n3m7j] {
    flex: 1;
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.tv-divider[b-5o9p4n3m7j] {
    width: 1px;
    align-self: stretch;
    background: var(--tv-divider);
}

.tv-col-header[b-5o9p4n3m7j] {
    display: flex;
    align-items: center;
    border-bottom: 2px solid var(--tv-border-strong);
    font-weight: 600;
    font-size: 0.85rem;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--tv-muted);
    padding-bottom: 0.35rem;
    flex-shrink: 0;
}

/* Same width as .tv-att below (keeps the header lined up with the two-line LP/PP data columns), but
   its own class rather than reusing .tv-att directly — .tv-att carries font-size/color/line-height
   tuned for its two-line data rows, which doesn't belong on a plain single-line header label. */
.tv-att-header[b-5o9p4n3m7j] {
    width: 6.6rem;
    text-align: right;
    flex-shrink: 0;
}

.tv-rows[b-5o9p4n3m7j] {
    display: flex;
    flex-direction: column;
    flex: 1;
    min-height: 0;
}

/* Natural (default) mode: rows take exactly their own content height (line-height + padding) and
   stack from the top — leftover column space just stays empty below the last row. Only safe when
   there are few enough rows that their natural total can never exceed the column's available
   height (see .tv-rows-fill below for when there are too many for that to hold). */
.tv-row[b-5o9p4n3m7j] {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    padding: 0.9em 0;
    border-bottom: 1px solid var(--tv-border);
    font-size: var(--tv-row-font, 18px);
}

/* Fill mode: applied via CompetitionTv.razor's ShouldFillRows(count) once a column has "enough"
   rows that natural sizing risks overflowing past the bottom of the screen (a real bug hit at 17
   rows/column — natural sizing isn't reliably precise enough at that density). flex-grow:1 with a
   zero basis divides the column's exact available height evenly across all rows, which by
   construction can never overflow it, regardless of the row count or computed font-size. */
.tv-rows-fill .tv-row[b-5o9p4n3m7j] {
    flex: 1 1 0;
    min-height: 0;
    padding: 0;
}

.tv-row:last-child[b-5o9p4n3m7j] {
    border-bottom: none;
}

.tv-row:nth-child(even)[b-5o9p4n3m7j] {
    background: var(--tv-zebra);
}

/* The id (position/team/category) group is a fixed-content-width block, not a growing flex item —
   so the category badge sits right after the team name's own (fixed, longest-realistic-name-sized)
   column instead of trailing far behind it. It's the row's only growing item, so whatever space it
   doesn't use goes to a single flexible gap before the times group — see .tv-row-times below for
   why that group itself also spaces its own columns out more generously. */
.tv-row-id[b-5o9p4n3m7j] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex: 1;
    min-width: 0;
}

/* Deliberately more breathing room between the individual time columns than the id group above —
   they read as a cluster of numbers, not a name, and felt cramped at the old shared 0.5rem gap. */
.tv-row-times[b-5o9p4n3m7j] {
    display: flex;
    align-items: center;
    gap: 1.8rem;
    flex-shrink: 0;
}

.tv-pos[b-5o9p4n3m7j] {
    width: 2.2rem;
    margin-left: 0.75rem;
    font-size: 1.05em;
    font-weight: 700;
    color: var(--tv-muted);
    flex-shrink: 0;
}

/* Fixed width (rem, not em — see the header/data-row alignment note near .tv-cat/.tv-att/.tv-final/
   .tv-rank below), sized to comfortably fit a realistic long name ("Štefanov nad Oravou") plus a
   small reserve, with ellipsis as a safety net for an outlier longer one. */
.tv-team[b-5o9p4n3m7j] {
    width: 15rem;
    flex-shrink: 0;
    font-size: 1em;
    font-weight: 600;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

.tv-team-free[b-5o9p4n3m7j] {
    color: var(--tv-muted);
    font-weight: 500;
    font-style: italic;
}

/* .tv-cat/.tv-att/.tv-final/.tv-rank all use rem (not em) widths: the header row and every data
   row render at a different font-size (the header's own fixed one vs. each column's dynamic
   --tv-row-font), so an em width would put these columns at different x-positions in the header
   than in the rows below it — rem stays constant regardless, keeping everything lined up. */
.tv-cat[b-5o9p4n3m7j] {
    width: 6.4rem;
    flex-shrink: 0;
    overflow: hidden;
}

.tv-cat .category-badge[b-5o9p4n3m7j] {
    font-size: 0.68em;
}

/* Only present at all when the competition has base assignment enabled (Admin/CompetitionEdit.razor)
   — sits between category and the times, same rem-width-for-alignment reasoning as the columns
   above. */
.tv-base[b-5o9p4n3m7j] {
    width: 2.4rem;
    flex-shrink: 0;
    text-align: center;
    font-weight: 700;
}

/* Same width as .tv-base above, its own class rather than reusing it directly — .tv-base's own
   font-weight would otherwise override the header's inherited formatting, same reasoning as
   .tv-att-header vs. .tv-att. */
.tv-base-header[b-5o9p4n3m7j] {
    width: 2.4rem;
    flex-shrink: 0;
    text-align: center;
}

/* Holds LP (left target) on one line and PP (right target) on the next, each with its own penalty
   annotation — wider and smaller than the single-line value it replaced, since it now needs to fit
   two lines instead of one. */
.tv-att[b-5o9p4n3m7j] {
    width: 6.6rem;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    justify-content: center;
    gap: 0.05em;
    text-align: right;
    font-size: 0.85em;
    line-height: 1.15;
    color: var(--tv-att-text);
    flex-shrink: 0;
}

.tv-side-label[b-5o9p4n3m7j] {
    display: inline-block;
    width: 1.6em;
    font-size: 0.75em;
    font-weight: 400;
    color: var(--tv-muted);
    text-align: left;
}

/* The slower of the two targets is the one that actually determines the attempt's recorded time —
   bolded (and full-brightness, not the muted attempt color) so it reads as "this one counts". */
.tv-side-worse[b-5o9p4n3m7j] {
    font-weight: 700;
    color: var(--tv-text);
}

.tv-final[b-5o9p4n3m7j] {
    width: 4.4rem;
    text-align: right;
    font-size: 1.05em;
    font-weight: 700;
    flex-shrink: 0;
}

.tv-final-empty[b-5o9p4n3m7j] {
    color: var(--tv-faint);
}

.tv-rank[b-5o9p4n3m7j] {
    width: 2.4rem;
    display: flex;
    justify-content: center;
    font-size: 0.98em;
    color: var(--tv-faint);
    flex-shrink: 0;
}

.tv-medal[b-5o9p4n3m7j] {
    width: 1.7em;
    height: 1.7em;
    border-radius: 50%;
    font-size: 0.78em;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
}

.tv-medal-1[b-5o9p4n3m7j] { background: #eab308; color: #1a1400; }
.tv-medal-2[b-5o9p4n3m7j] { background: #9ca3af; color: #14161a; }
.tv-medal-3[b-5o9p4n3m7j] { background: #b45309; color: #fbe9d9; }

/* ==========================================================================
   "Nový" style — an alternate, more colorful skin toggled via ?style=novy
   (CompetitionTv.razor's IsNewStyle), independent of the light/dark theme
   above. Everything before this point is the original/"klasický" look,
   untouched — every rule below only ever adds to it under .tv-style-new, so
   a competition that never opts in renders exactly as before. Agreed with
   the user as a wireframe first (Artifact) before implementation.
   ========================================================================== */

.tv-page.tv-style-new[b-5o9p4n3m7j] {
    background: radial-gradient(ellipse 1400px 700px at 50% -8%, rgba(124, 58, 237, .35), rgba(10, 6, 18, 0) 65%), linear-gradient(180deg, #120a24 0%, #0a0612 55%, #0a0612 100%);
}

.tv-page.tv-style-new.tv-light[b-5o9p4n3m7j] {
    background: radial-gradient(ellipse 1400px 700px at 50% -8%, rgba(255, 138, 76, .14), rgba(253, 250, 246, 0) 65%), #fdfaf6;
}

.tv-style-new .tv-fastest-label[b-5o9p4n3m7j] {
    background: linear-gradient(90deg, #ff8a4c, #ff3d7a);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.tv-style-new .tv-live-dot[b-5o9p4n3m7j] {
    background: linear-gradient(145deg, #ff8a4c, #ff3d3d);
    animation: tv-pulse-fire-b-5o9p4n3m7j 1.6s infinite;
}

@keyframes tv-pulse-fire-b-5o9p4n3m7j {
    0% { box-shadow: 0 0 0 0 rgba(255, 107, 53, .6); }
    70% { box-shadow: 0 0 0 10px rgba(255, 107, 53, 0); }
    100% { box-shadow: 0 0 0 0 rgba(255, 107, 53, 0); }
}

.tv-style-new .tv-chip[b-5o9p4n3m7j] {
    box-shadow: 0 0 20px rgba(255, 138, 76, .1);
}

.tv-style-new .tv-side-worse[b-5o9p4n3m7j] {
    color: #ffb37a;
    text-shadow: 0 0 10px rgba(255, 140, 60, .4);
}

.tv-style-new.tv-light .tv-side-worse[b-5o9p4n3m7j] {
    color: #c8501e;
    text-shadow: none;
}

.tv-style-new .tv-medal-1[b-5o9p4n3m7j] { background: linear-gradient(145deg, #ffd668, #eab308); box-shadow: 0 0 16px rgba(234, 179, 8, .55); }
.tv-style-new .tv-medal-2[b-5o9p4n3m7j] { background: linear-gradient(145deg, #d7dbe0, #9ca3af); box-shadow: 0 0 12px rgba(156, 163, 175, .4); }
.tv-style-new .tv-medal-3[b-5o9p4n3m7j] { background: linear-gradient(145deg, #d6884a, #b45309); box-shadow: 0 0 12px rgba(180, 83, 9, .4); }

.tv-style-new.tv-light .tv-medal-1[b-5o9p4n3m7j] { box-shadow: 0 3px 10px rgba(234, 179, 8, .4); }
.tv-style-new.tv-light .tv-medal-2[b-5o9p4n3m7j] { box-shadow: 0 3px 10px rgba(156, 163, 175, .3); }
.tv-style-new.tv-light .tv-medal-3[b-5o9p4n3m7j] { box-shadow: 0 3px 10px rgba(180, 83, 9, .3); }

/* Base 1/2 are plain, uncolored numbers in the classic style (.tv-base already covers that) — only
   the new style turns them into small glowing gradient "lane" badges, orange vs. cyan so they read
   apart at a glance from across a field. */
.tv-style-new .tv-base-1[b-5o9p4n3m7j] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.3em;
    height: 1.3em;
    border-radius: 50%;
    background: linear-gradient(145deg, #ff8a4c, #ff3d3d);
    box-shadow: 0 0 14px rgba(255, 90, 53, .55);
    color: #1a0800;
    font-size: 0.75em;
}

.tv-style-new .tv-base-2[b-5o9p4n3m7j] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.3em;
    height: 1.3em;
    border-radius: 50%;
    background: linear-gradient(145deg, #4ce0ff, #00a3d4);
    box-shadow: 0 0 14px rgba(0, 196, 255, .5);
    color: #001a22;
    font-size: 0.75em;
}

.tv-style-new.tv-light .tv-base-1[b-5o9p4n3m7j],
.tv-style-new.tv-light .tv-base-2[b-5o9p4n3m7j] {
    color: #fff;
}

/* Marks whichever row(s) most recently got a new/changed result (CompetitionTv.razor's
   flashingRegistrationIds) — stays on the same row across refreshes with no change, and jumps to
   the new one the moment a different team's result comes in (never both, never additive). */
@keyframes tv-row-flash-anim-b-5o9p4n3m7j {
    0%, 100% { box-shadow: inset 4px 0 0 0 #00d4ff, 0 0 0 0 rgba(0, 212, 255, 0); }
    50% { box-shadow: inset 4px 0 0 0 #00d4ff, 0 0 24px 2px rgba(0, 212, 255, .35); }
}

.tv-style-new .tv-row-flash[b-5o9p4n3m7j] {
    animation: tv-row-flash-anim-b-5o9p4n3m7j 1.8s ease-in-out infinite;
    border-radius: 6px;
}

.tv-style-new.tv-light .tv-row-flash[b-5o9p4n3m7j] {
    animation-name: tv-row-flash-anim-light-b-5o9p4n3m7j;
}

@keyframes tv-row-flash-anim-light-b-5o9p4n3m7j {
    0%, 100% { box-shadow: inset 4px 0 0 0 #00a3d4, 0 0 0 0 rgba(0, 163, 212, 0); }
    50% { box-shadow: inset 4px 0 0 0 #00a3d4, 0 0 22px 2px rgba(0, 163, 212, .25); }
}
/* _content/FireSportSystem.Web/Components/Pages/DisciplineResultsEntry.razor.rz.scp.css */
.time-input[b-wmw6qkzhaf] {
    width: 4.5rem;
    text-align: center;
    -moz-appearance: textfield;
}

.time-input[b-wmw6qkzhaf]::-webkit-outer-spin-button,
.time-input[b-wmw6qkzhaf]::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

.results-table[b-wmw6qkzhaf] {
    text-align: center;
    font-size: 0.85rem;
}

.results-table th[b-wmw6qkzhaf] {
    white-space: nowrap;
}

.results-table td:nth-child(1)[b-wmw6qkzhaf] {
    text-align: left;
    white-space: nowrap;
}

/* Same mechanism as ResultsEntry.razor.css's zebra striping — background-color on <tr> is hidden
   by Bootstrap's own opaque per-cell background, so this goes through --bs-table-accent-bg
   instead. */
.results-table tbody tr:nth-child(even)[b-wmw6qkzhaf] {
    --bs-table-accent-bg: var(--color-zebra-stripe);
}

.discipline-search[b-wmw6qkzhaf] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    max-width: 20rem;
}

.discipline-search input[b-wmw6qkzhaf] {
    flex: 1;
}

.add-team-bar[b-wmw6qkzhaf] {
    display: flex;
    gap: 0.6rem;
    align-items: center;
    margin-top: 1.1rem;
    padding: 0.85rem;
    border: 1.5px dashed var(--color-border);
    border-radius: 0.5rem;
    background: var(--color-bg-muted);
    flex-wrap: wrap;
}

.add-team-bar .form-control[b-wmw6qkzhaf] {
    flex: 1;
    min-width: 10rem;
}

.add-team-bar select.form-control[b-wmw6qkzhaf] {
    flex: 0 0 9rem;
}
/* _content/FireSportSystem.Web/Components/Pages/LeagueOverview.razor.rz.scp.css */
.overview-poster[b-qt1m7yhnjh] {
    display: block;
    width: 100%;
    max-width: 16rem;
    border-radius: var(--card-radius);
    object-fit: cover;
}

.overview-poster-fallback[b-qt1m7yhnjh] {
    max-width: 6rem;
    object-fit: contain;
}

.overview-tabs-card[b-qt1m7yhnjh] {
    max-width: 58rem;
    margin: 1.5rem auto 0;
    padding: 0;
    overflow: hidden;
}

.overview-tabs-card .nav-tabs[b-qt1m7yhnjh] {
    margin: 0;
    padding: 0 1.25rem;
}

.overview-tabs-card .nav-link[b-qt1m7yhnjh] {
    background: none;
    cursor: pointer;
}

.overview-tab-pane[b-qt1m7yhnjh] {
    padding: 1.25rem;
}

.results-category + .results-category[b-qt1m7yhnjh] {
    margin-top: 1.5rem;
}

.results-category h2[b-qt1m7yhnjh] {
    font-size: 1.05rem;
    margin-bottom: 0.5rem;
}

/* Same visual treatment as the competition results table (CompetitionOverview.razor.css) — zebra
   striping via --bs-table-accent-bg (background-color on <tr> is hidden by Bootstrap's own opaque
   per-cell background) plus podium colors/medals for the top 3 qualifying (above-the-line) rows.
   Below-the-line rows never get a podium class, only the muted text style. */
.standings-table tbody tr:nth-child(even)[b-qt1m7yhnjh] {
    --bs-table-accent-bg: var(--color-zebra-stripe);
}

.standings-table tbody tr.podium-gold[b-qt1m7yhnjh] {
    --bs-table-accent-bg: var(--color-gold-bg);
}

.standings-table tbody tr.podium-silver[b-qt1m7yhnjh] {
    --bs-table-accent-bg: var(--color-silver-bg);
}

.standings-table tbody tr.podium-bronze[b-qt1m7yhnjh] {
    --bs-table-accent-bg: var(--color-bronze-bg);
}

.standings-table tbody tr.podium-gold td:first-child[b-qt1m7yhnjh] {
    border-left: 4px solid var(--color-gold-border);
}

.standings-table tbody tr.podium-silver td:first-child[b-qt1m7yhnjh] {
    border-left: 4px solid var(--color-silver-border);
}

.standings-table tbody tr.podium-bronze td:first-child[b-qt1m7yhnjh] {
    border-left: 4px solid var(--color-bronze-border);
}

.standings-round-detail-row td[b-qt1m7yhnjh] {
    background-color: var(--color-bg-muted);
    padding: 0.5rem 1rem;
}

/* A round shown in the expanded per-team detail that doesn't count toward the team's total (its
   points/time weren't among the best-N used for TotalPoints/SumResultTimeSeconds) — dedicated
   --color-round-excluded-* tokens (app.css) rather than the shared warning ones, since the two
   themes deliberately diverge here (light: a red tint; dark: a more intense/saturated yellow —
   user's explicit call, 2026-09-15). This row lives inside a nested Bootstrap table
   (.table.table-sm) inside the outer .standings-round-detail-row td, which already sets its own
   background-color on every descendant cell (including this nested table's) — !important is
   needed to win over both that rule and Bootstrap's own per-cell background-color, since the
   --bs-table-accent-bg box-shadow trick used above for the outer table's podium colors turned out
   unreliable this deeply nested. */
.round-not-counted td[b-qt1m7yhnjh] {
    background-color: var(--color-round-excluded-bg) !important;
}

.round-not-counted-label[b-qt1m7yhnjh] {
    margin-left: 0.35rem;
    font-size: 0.85rem;
    color: var(--color-round-excluded-text);
}

.standings-threshold-row td[b-qt1m7yhnjh] {
    border-top: 2px solid var(--color-border);
    font-size: 0.85rem;
    font-style: italic;
    color: var(--color-text-muted);
    padding-top: 0.5rem;
}

/* Postup na superpohár tab — no podium medals here, promoted teams are highlighted instead. */
.super-cup-key[b-qt1m7yhnjh] {
    background-color: var(--color-bg-muted);
    border: 1px solid var(--color-border);
    border-radius: var(--card-radius);
    padding: 0.75rem 1rem;
    margin-bottom: 1.25rem;
}

.super-cup-key-title[b-qt1m7yhnjh] {
    font-weight: 600;
    margin-bottom: 0.35rem;
}

.super-cup-key ul[b-qt1m7yhnjh] {
    margin: 0;
    padding-left: 1.25rem;
}

.super-cup-promotion-summary[b-qt1m7yhnjh] {
    color: var(--color-text-muted);
    font-size: 0.9rem;
    margin-bottom: 0.5rem;
}

.standings-table tbody tr.promoted-row[b-qt1m7yhnjh] {
    --bs-table-accent-bg: var(--color-promotion-bg);
}

.standings-table tbody tr.promoted-row td:first-child[b-qt1m7yhnjh] {
    border-left: 4px solid var(--color-promotion-border);
}

.promoted-badge[b-qt1m7yhnjh] {
    display: inline-block;
    margin-left: 0.5rem;
    padding: 0.1rem 0.5rem;
    border-radius: 1rem;
    font-size: 0.75rem;
    font-weight: 600;
    background-color: var(--color-promotion-border);
    color: #ffffff;
}
/* _content/FireSportSystem.Web/Components/Pages/RegistrationFlow.razor.rz.scp.css */
.competition-sidebar[b-fsx2r6y9wd] {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.competition-icon[b-fsx2r6y9wd] {
    display: block;
    width: 6rem;
    height: 6rem;
    object-fit: contain;
    align-self: center;
}

.competition-sidebar h1[b-fsx2r6y9wd] {
    font-size: 1.4rem;
    margin: 0;
}

.conditions-list[b-fsx2r6y9wd] {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    font-size: 0.85rem;
    color: var(--color-text-muted);
}
/* _content/FireSportSystem.Web/Components/Pages/ResultsEntry.razor.rz.scp.css */
.time-input[b-mt5lze6bsq] {
    width: 4.5rem;
    text-align: center;
    -moz-appearance: textfield;
}

.time-input[b-mt5lze6bsq]::-webkit-outer-spin-button,
.time-input[b-mt5lze6bsq]::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

/* Column widths are set via <colgroup> rather than th/td nth-child — this table's header has two
   rows (rowspan/colspan for "1. pokus"/"2. pokus"), and nth-child counts position within each
   <tr> independently, so a rule like "th:nth-child(1)" also matches the first LP header in the
   second header row, not just P.č. in the first — that caused the LP/PP headers to render with
   the wrong (sticky/narrow) column styling instead of lining up with their input cells below.
   <colgroup> defines real column widths unambiguously regardless of header structure. */
.results-table[b-mt5lze6bsq] {
    table-layout: fixed;
    text-align: center;
    font-size: 0.85rem;
    width: 57rem;
}

.col-position[b-mt5lze6bsq] {
    width: 3rem;
}

.col-team[b-mt5lze6bsq] {
    width: 14rem;
}

.col-category[b-mt5lze6bsq] {
    width: 7rem;
}

/* Only present when the competition has base assignment enabled — the table's own fixed
   `width: 57rem` above doesn't account for it, so it just makes the table a bit wider than that
   when shown; .table-responsive already scrolls horizontally for exactly this case. */
.col-base[b-mt5lze6bsq] {
    width: 3.5rem;
}

.col-time[b-mt5lze6bsq] {
    width: 4.5rem;
}

.col-final[b-mt5lze6bsq] {
    width: 5.5rem;
}

.results-table th[b-mt5lze6bsq] {
    white-space: nowrap;
}

/* P.č. + Tím are pinned while scrolling horizontally (this table has 10 columns — on mobile you
   otherwise lose track of which team's row you're editing once you scroll past them). Bootstrap
   already paints an opaque background on every <td>/<th> (var(--bs-table-bg)), so the sticky
   cells don't need their own background-color to avoid bleed-through from scrolled content.
   Targeting only td:nth-child (not th) for these two is safe — the header row for these two
   columns already carries the .col-position/.col-team classes above, and tbody rows have no
   rowspan/colspan, so nth-child there always matches the real column. */
.results-table th.col-position[b-mt5lze6bsq],
.results-table td:nth-child(1)[b-mt5lze6bsq] {
    position: sticky;
    left: 0;
    z-index: 1;
}

.results-table th.col-team[b-mt5lze6bsq],
.results-table td:nth-child(2)[b-mt5lze6bsq] {
    position: sticky;
    left: 3rem;
    z-index: 1;
    text-align: left;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.results-table td:nth-child(3)[b-mt5lze6bsq] {
    text-align: left;
}

/* Same mechanism as CompetitionOverview.razor.css's zebra striping — background-color on <tr> is
   hidden by Bootstrap's own opaque per-cell background, so this goes through its
   --bs-table-accent-bg variable instead (what .table-striped/.table-hover use internally). */
.results-table tbody tr:nth-child(even)[b-mt5lze6bsq] {
    --bs-table-accent-bg: var(--color-zebra-stripe);
}
