/* /Components/Layout/MainLayout.razor.rz.scp.css */
#blazor-error-ui[b-hem2zd0kc3] {
    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-hem2zd0kc3] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-hnqj7log3w],
.components-reconnect-repeated-attempt-visible[b-hnqj7log3w],
.components-reconnect-failed-visible[b-hnqj7log3w],
.components-pause-visible[b-hnqj7log3w],
.components-resume-failed-visible[b-hnqj7log3w],
.components-rejoining-animation[b-hnqj7log3w] {
    display: none;
}

#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible[b-hnqj7log3w],
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation[b-hnqj7log3w],
#components-reconnect-modal.components-reconnect-paused .components-pause-visible[b-hnqj7log3w],
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible[b-hnqj7log3w],
#components-reconnect-modal.components-reconnect-retrying[b-hnqj7log3w],
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible[b-hnqj7log3w],
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation[b-hnqj7log3w],
#components-reconnect-modal.components-reconnect-failed[b-hnqj7log3w],
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible[b-hnqj7log3w] {
    display: block;
}


#components-reconnect-modal[b-hnqj7log3w] {
    background-color: white;
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 0;
    border-radius: 0.5rem;
    box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-hnqj7log3w 0.5s both;
    &[open]

{
    animation: components-reconnect-modal-slideUp-b-hnqj7log3w 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity-b-hnqj7log3w 0.5s ease-in-out 0.3s;
    animation-fill-mode: both;
}

}

#components-reconnect-modal[b-hnqj7log3w]::backdrop {
    background-color: rgba(0, 0, 0, 0.4);
    animation: components-reconnect-modal-fadeInOpacity-b-hnqj7log3w 0.5s ease-in-out;
    opacity: 1;
}

@keyframes components-reconnect-modal-slideUp-b-hnqj7log3w {
    0% {
        transform: translateY(30px) scale(0.95);
    }

    100% {
        transform: translateY(0);
    }
}

@keyframes components-reconnect-modal-fadeInOpacity-b-hnqj7log3w {
    0% {
        opacity: 0;
    }

    100% {
        opacity: 1;
    }
}

@keyframes components-reconnect-modal-fadeOutOpacity-b-hnqj7log3w {
    0% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

.components-reconnect-container[b-hnqj7log3w] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
}

#components-reconnect-modal p[b-hnqj7log3w] {
    margin: 0;
    text-align: center;
}

#components-reconnect-modal button[b-hnqj7log3w] {
    border: 0;
    background-color: #6b9ed2;
    color: white;
    padding: 4px 24px;
    border-radius: 4px;
}

    #components-reconnect-modal button:hover[b-hnqj7log3w] {
        background-color: #3b6ea2;
    }

    #components-reconnect-modal button:active[b-hnqj7log3w] {
        background-color: #6b9ed2;
    }

.components-rejoining-animation[b-hnqj7log3w] {
    position: relative;
    width: 80px;
    height: 80px;
}

    .components-rejoining-animation div[b-hnqj7log3w] {
        position: absolute;
        border: 3px solid #0087ff;
        opacity: 1;
        border-radius: 50%;
        animation: components-rejoining-animation-b-hnqj7log3w 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
    }

        .components-rejoining-animation div:nth-child(2)[b-hnqj7log3w] {
            animation-delay: -0.5s;
        }

@keyframes components-rejoining-animation-b-hnqj7log3w {
    0% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    4.9% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    5% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 1;
    }

    100% {
        top: 0px;
        left: 0px;
        width: 80px;
        height: 80px;
        opacity: 0;
    }
}
/* /Components/Pages/ResultInput/Components/ComponentResultInputSimple.razor.rz.scp.css */
/* Portrait-lock overlay. Hidden by default; the mobile @media block flips
   it on for landscape orientation only. Browsers can't actually force
   orientation outside of an installed PWA, so we cover the workspace with a
   "rotate" message until the user complies. */
.sui-rotate-overlay[b-r1xw06ci6j] {
    display: none;
}

.sui-result-input[b-r1xw06ci6j] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    /* Desktop: cap to HD width, anchor to the start. Mobile: ignored — content
       fills the viewport. */
    max-width: 1080px;
    margin-left: 0;
    margin-right: auto;
    width: 100%;
}

.sui-result-input-header[b-r1xw06ci6j] {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 4px;
}

/* ::deep — .slot-card sits on the MudPaper child component's root element,
   which does not carry this component's scoped-CSS attribute.
   No overflow:hidden — it would clip the position:sticky mobile numpad. */
.sui-result-input[b-r1xw06ci6j]  .slot-card {
    position: relative;
    background-color: var(--mud-palette-surface);
}

.slot-card-accent[b-r1xw06ci6j] {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 4px;
}

.slot-card-previous .slot-card-accent[b-r1xw06ci6j] {
    background-color: var(--mud-palette-info);
}

.slot-card-current .slot-card-accent[b-r1xw06ci6j] {
    background-color: var(--mud-palette-primary);
}

.slot-card-next .slot-card-accent[b-r1xw06ci6j] {
    background-color: var(--mud-palette-success);
}

.slot-card-body[b-r1xw06ci6j] {
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 16px 16px 16px 20px;
}

/* Card body now splits into two columns on desktop (info | action) so the
   current card spreads horizontally instead of stacking name → input → footer.
   On mobile the two segments stack again (see @media (max-width: 768px)). */
.slot-card-info[b-r1xw06ci6j] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    min-width: 0;
    flex: 1 1 auto;
}

.slot-card-action[b-r1xw06ci6j] {
    display: flex;
    flex-direction: column;
    gap: 12px;
    flex: 0 0 auto;
}

.slot-athlete-row[b-r1xw06ci6j] {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 10px;
}

.slot-bib[b-r1xw06ci6j] {
    font-weight: 700;
    color: var(--mud-palette-primary);
    flex: 0 0 auto;
}

/* Name truncates with an ellipsis so the row stays single-line and the
   EntryState selector keeps its place in the row. */
.slot-name[b-r1xw06ci6j] {
    font-weight: 700;
    font-size: 1.1rem;
    flex: 0 1 auto;
    min-width: 2ch;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.slot-try[b-r1xw06ci6j],
.slot-status[b-r1xw06ci6j] {
    color: var(--mud-palette-text-secondary);
    flex: 0 0 auto;
}

/* Qualification badge (Q / q) — sits next to the rank circle. Background
   colour comes from the inline GetQualificationStyle. Hidden when no Q. */
.slot-qual[b-r1xw06ci6j] {
    flex: 0 0 auto;
    min-width: 22px;
    height: 22px;
    padding: 0 6px;
    border-radius: 11px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-size: 0.78rem;
    color: var(--mud-palette-text-primary);
}

/* Attempt strip wrapper. Mobile-only: desktop spreads horizontally and the
   strip would compete with the input area for width. The mobile @media block
   re-enables it. (MudHidden inside .slot-card-info also targets this, but the
   CSS is the source of truth — it works even when SignalR hasn't yet pushed
   the operator's current viewport size.) */
.slot-info-line[b-r1xw06ci6j] {
    display: none;
    flex-wrap: wrap;
    gap: 16px;
    color: var(--mud-palette-text-secondary);
    font-size: 0.9rem;
}

/* Attempt strip — 6 tiles shown on the previous / current / next cards.
   Desktop: larger, square. Mobile: smaller, rectangular (see @media below). */
.attempt-strip[b-r1xw06ci6j] {
    display: flex;
    gap: 8px;
    width: 100%;
    max-width: 380px;
}

.attempt-tile[b-r1xw06ci6j] {
    position: relative;
    flex: 1 1 0;
    min-width: 0;
    aspect-ratio: 1 / 1;
    max-width: 56px;
    border-radius: 6px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-size: 0.78rem;
    box-sizing: border-box;
    /* Light border so empty / future tiles stay visible on the dark card. */
    border: 1px solid var(--mud-palette-lines-default);
}

.attempt-tile-box[b-r1xw06ci6j] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    padding: 0 2px;
}

.attempt-tile-valid[b-r1xw06ci6j] {
    background-color: var(--mud-palette-success-darken);
    color: var(--mud-palette-success-text);
    border-color: var(--mud-palette-success-darken);
}

.attempt-tile-best[b-r1xw06ci6j] {
    background-color: var(--mud-palette-success-darken);
    color: var(--mud-palette-success-text);
    border: 2px solid var(--mud-palette-text-primary);
}

.attempt-tile-failed[b-r1xw06ci6j] {
    background-color: var(--mud-palette-error-darken);
    color: var(--mud-palette-error-text);
    border-color: var(--mud-palette-error-darken);
}

.attempt-tile-retired[b-r1xw06ci6j] {
    background-color: var(--mud-palette-warning-darken);
    color: var(--mud-palette-warning-text);
    border-color: var(--mud-palette-warning-darken);
}

.attempt-tile-skipped[b-r1xw06ci6j] {
    background-color: var(--mud-palette-info-darken);
    color: var(--mud-palette-info-text);
    border-color: var(--mud-palette-info-darken);
}

.attempt-tile-future[b-r1xw06ci6j] {
    background-color: var(--mud-palette-dark-lighten);
    color: var(--mud-palette-text-disabled);
}

/* Current = the attempt the card points at — primary border layered on top of
   the result colour. Listed last so it overrides the per-state borders. */
.attempt-tile-current[b-r1xw06ci6j] {
    border: 2px solid var(--mud-palette-primary);
}

/* Corner badge — wind reading, or the O/X sequence for vertical jump. */
.attempt-badge[b-r1xw06ci6j] {
    position: absolute;
    top: -7px;
    right: -7px;
    background-color: var(--mud-palette-dark);
    color: var(--mud-palette-text-primary);
    font-size: 0.58rem;
    font-weight: 700;
    line-height: 1.5;
    padding: 0 5px;
    border-radius: 8px;
    border: 1px solid var(--mud-palette-lines-default);
    white-space: nowrap;
}

.slot-entry-state[b-r1xw06ci6j] {
    margin-left: auto;
    flex: 0 0 auto;
}

/* Slot identity chip — does not shrink in the athlete row. */
.sui-result-input[b-r1xw06ci6j]  .slot-chip {
    flex: 0 0 auto;
    margin: 0;
}

.slot-rank[b-r1xw06ci6j] {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--mud-palette-text-primary);
    font-weight: 700;
    flex: 0 0 auto;
}

/* No rank yet — a dim dashed placeholder keeps the row aligned. */
.slot-rank-empty[b-r1xw06ci6j] {
    background-color: transparent;
    border: 1px dashed var(--mud-palette-lines-default);
    color: var(--mud-palette-text-disabled);
    font-weight: 400;
}

.slot-input-area[b-r1xw06ci6j] {
    display: flex;
    justify-content: center;
}

.slot-footer[b-r1xw06ci6j] {
    display: flex;
    gap: 8px;
}

.sui-result-input[b-r1xw06ci6j]  .slot-footer-btn {
    flex: 1 1 0;
    min-width: 0;
}

.numeric-input[b-r1xw06ci6j],
.vj-input[b-r1xw06ci6j] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 14px;
    width: 100%;
    max-width: 460px;
}

.numeric-displays[b-r1xw06ci6j] {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    width: 100%;
}

.numeric-display[b-r1xw06ci6j] {
    flex: 1 1 160px;
    cursor: pointer;
    border-radius: 4px;
}

/* Input highlight. The MudBlazor outlined-input border turns 2px primary on
   focus; the active numpad-target field gets the identical treatment so the
   operator always sees the selected input — focused or not, same look.
   :not(.mud-disabled) — a disabled field never highlights. */
.sui-result-input[b-r1xw06ci6j]  .mud-input.mud-input-outlined:not(.mud-disabled):focus-within > .mud-input-outlined-border,
.sui-result-input[b-r1xw06ci6j]  .mud-input.mud-input-outlined:not(.mud-disabled):focus-within .mud-shrink > .mud-input-outlined-border,
.sui-result-input[b-r1xw06ci6j]  .numeric-display-active .mud-input.mud-input-outlined:not(.mud-disabled) > .mud-input-outlined-border,
.sui-result-input[b-r1xw06ci6j]  .numeric-display-active .mud-input.mud-input-outlined:not(.mud-disabled) .mud-shrink > .mud-input-outlined-border {
    border-width: 2px;
    border-color: var(--mud-palette-primary);
}

.sui-result-input[b-r1xw06ci6j]  .mud-input:not(.mud-disabled):focus-within ~ label.mud-input-label.mud-input-label-inputcontrol,
.sui-result-input[b-r1xw06ci6j]  .numeric-display-active .mud-input:not(.mud-disabled) ~ label.mud-input-label.mud-input-label-inputcontrol {
    color: var(--mud-palette-primary);
}

.vj-glyphs[b-r1xw06ci6j] {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    justify-content: center;
}

/* min-height equalises the text glyph buttons and the icon-only undo button. */
.sui-result-input[b-r1xw06ci6j]  .vj-glyph {
    min-width: 64px;
    min-height: 48px;
    font-size: 1.3rem;
    font-weight: 700;
}

.sui-result-input[b-r1xw06ci6j]  .result-display input {
    font-family: 'Roboto Mono', ui-monospace, monospace;
    font-size: 1.5rem;
    font-weight: 600;
}

/* Sticky numpad host — full-bleed bar at the bottom of the viewport on
   mobile. Lives at the root of .sui-result-input so it isn't constrained to a
   single card's body padding. Hidden by default — only the mobile @media block
   makes it visible. */
.numpad-host[b-r1xw06ci6j],
.vj-actions-host[b-r1xw06ci6j] {
    display: none;
}

/* Back-chip on the Previous card. The Previous card is a low-traffic escape
   hatch — kept visible / clickable but visually deferential so it doesn't
   compete with the Current card's input area. */
.sui-result-input[b-r1xw06ci6j]  .slot-chip-back {
    height: 24px;
    min-width: 0;
    padding: 0 10px;
    font-size: 0.72rem;
    font-weight: 500;
    text-transform: none;
    line-height: 1;
    cursor: pointer;
    opacity: 0.85;
    transition: opacity 0.1s ease;
}

.sui-result-input[b-r1xw06ci6j]  .slot-chip-back:hover:not(:disabled) {
    opacity: 1;
}

.sui-result-input[b-r1xw06ci6j]  .slot-chip-back .mud-button-icon-start {
    margin-right: 4px;
}

.sui-result-input[b-r1xw06ci6j]  .slot-chip-back .mud-button-icon-start .mud-icon-root {
    font-size: 0.9rem;
}

/* Desktop spread: athlete info on top, input area + footer share one row
   beneath. Inputs grow to use the available width; the footer keeps its
   natural size on the right. */
/* All these target descendants of .slot-card-current — which sits on MudPaper
   and therefore does NOT carry this component's scoped-CSS attribute. Use
   ::deep on the parent (.sui-result-input) so the rule reads
   `.sui-result-input[b-xx] .slot-card-current ...`. */
@media (min-width: 769px) {
    .sui-result-input[b-r1xw06ci6j]  .slot-card-current .slot-card-action {
        flex-direction: row;
        align-items: center;
        gap: 16px;
    }

    .sui-result-input[b-r1xw06ci6j]  .slot-card-current .slot-input-area {
        flex: 1 1 auto;
        justify-content: flex-start;
        min-width: 0;
    }

    .sui-result-input[b-r1xw06ci6j]  .slot-card-current .slot-footer {
        flex: 0 0 auto;
        align-self: center;
    }

    .sui-result-input[b-r1xw06ci6j]  .slot-card-current .numeric-input,
    .sui-result-input[b-r1xw06ci6j]  .slot-card-current .vj-input {
        max-width: none;
        width: 100%;
        align-items: stretch;
    }

    /* Wind + distance side by side rather than wrapped. */
    .sui-result-input[b-r1xw06ci6j]  .slot-card-current .numeric-displays {
        flex-wrap: nowrap;
    }

    /* VJ desktop: Ergebnis input + glyph row share one line. Glyphs scaled
       up so they fill the available width rather than huddling left. */
    .sui-result-input[b-r1xw06ci6j]  .slot-card-current .vj-input {
        flex-direction: row;
        align-items: center;
        gap: 16px;
    }

    .sui-result-input[b-r1xw06ci6j]  .slot-card-current .vj-input > :first-child {
        flex: 0 0 220px;
    }

    .sui-result-input[b-r1xw06ci6j]  .slot-card-current .vj-glyphs {
        flex: 1 1 auto;
        flex-wrap: nowrap;
        justify-content: flex-start;
    }

    .sui-result-input[b-r1xw06ci6j]  .slot-card-current .vj-glyph {
        flex: 1 1 0;
        min-width: 0;
        min-height: 60px;
        font-size: 1.8rem;
    }
}

/* Compact layout on phones — spread by height, keep dense. */
@media (max-width: 768px) {
    .sui-result-input[b-r1xw06ci6j] {
        gap: 6px;
    }

    /* Only reserve numpad clearance when a numpad is actually rendered (non-VJ
       events). Vertical jump uses inline glyphs and does not need the gutter.
       Uses :has() — supported in Chromium/WebKit/Firefox 121+. */
    .sui-result-input:has(.numpad-host)[b-r1xw06ci6j] {
        padding-bottom: 260px;
    }

    .slot-card-body[b-r1xw06ci6j] {
        gap: 8px;
        padding: 10px 12px 10px 16px;
    }

    .slot-card-action[b-r1xw06ci6j] {
        gap: 8px;
    }

    /* Mobile: hide the in-card footer; Save + Continue live in the sticky
       numpad-host / vj-actions-host bars below. */
    .slot-footer[b-r1xw06ci6j] {
        display: none;
    }

    .slot-name[b-r1xw06ci6j] {
        font-size: 1rem;
    }

    .slot-info-line[b-r1xw06ci6j] {
        display: flex;
        gap: 10px;
        font-size: 0.82rem;
    }

    .slot-rank[b-r1xw06ci6j] {
        width: 32px;
        height: 32px;
        font-size: 0.9rem;
    }

    .numeric-input[b-r1xw06ci6j],
    .vj-input[b-r1xw06ci6j] {
        gap: 8px;
    }

    .sui-result-input[b-r1xw06ci6j]  .result-display input {
        font-size: 1.3rem;
    }

    /* Attempt strip: smaller, rectangular tiles to save vertical space. */
    .attempt-strip[b-r1xw06ci6j] {
        max-width: none;
    }

    .attempt-tile[b-r1xw06ci6j] {
        aspect-ratio: 9 / 5;
        max-width: none;
        font-size: 0.7rem;
        border-radius: 4px;
    }

    /* Full-bleed FIXED numpad — pinned to the viewport regardless of any
       ancestor scroll/overflow state. Fixed (not sticky) sidesteps the
       common "ancestor has overflow: hidden so sticky never engages"
       failure mode. The scroll container compensates via
       .sui-result-input:has(.numpad-host) { padding-bottom: 260px } above. */
    .numpad-host[b-r1xw06ci6j] {
        display: block;
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        z-index: 1200;
        padding: 8px 12px calc(8px + env(safe-area-inset-bottom));
        background-color: var(--mud-palette-surface);
        border-top: 1px solid var(--mud-palette-lines-default);
        box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.35);
    }

    /* VJ mobile sticky bar — two rows:
       1) glyph row (-, X, O, r) — full width, four big tap targets.
       2) action row — Backspace (when an outcome is recorded) + Continue.
       Bigger keys than the previous single-row layout, mirrors the numpad
       footprint vertically. */
    .vj-actions-host[b-r1xw06ci6j] {
        display: flex;
        flex-direction: column;
        gap: 8px;
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        z-index: 1200;
        padding: 8px 12px calc(8px + env(safe-area-inset-bottom));
        background-color: var(--mud-palette-surface);
        border-top: 1px solid var(--mud-palette-lines-default);
        box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.35);
    }

    .vj-actions-glyphs[b-r1xw06ci6j] {
        display: grid;
        grid-template-columns: repeat(4, 1fr);
        gap: 8px;
    }

    .vj-actions-row[b-r1xw06ci6j] {
        display: flex;
        gap: 8px;
    }

    .sui-result-input[b-r1xw06ci6j]  .vj-actions-glyph {
        min-width: 0;
        min-height: 80px;
        font-size: 2rem;
        font-weight: 700;
        padding: 0;
    }

    /* Backspace = compact icon button on the left of row 2; Continue takes
       the rest of the row. */
    .sui-result-input[b-r1xw06ci6j]  .vj-actions-btn-back {
        flex: 0 0 auto;
        min-width: 84px;
        min-height: 64px;
        padding: 0;
    }

    .sui-result-input[b-r1xw06ci6j]  .vj-actions-btn-continue {
        flex: 1 1 auto;
        min-height: 64px;
        font-weight: 700;
        font-size: 1.05rem;
    }

    /* Sticky bar height ≈ 170px on mobile (80 glyph + 64 action + gaps +
       padding); reserve that much under the last card. */
    .sui-result-input:has(.vj-actions-host)[b-r1xw06ci6j] {
        padding-bottom: 200px;
    }

    /* Mobile: hide the in-card vj-glyphs row — the glyphs live in the sticky
       bar instead. Card body keeps just the Ergebnis input. */
    .vj-glyphs[b-r1xw06ci6j] {
        display: none;
    }

    /* Portrait-lock overlay. Only kicks in below 900px viewport width AND in
       landscape orientation — phone-sized devices held sideways. Covers the
       workspace so the operator can't tap broken layout. */
    @media (orientation: landscape) and (max-height: 500px) {
        .sui-rotate-overlay[b-r1xw06ci6j] {
            display: flex;
            position: fixed;
            inset: 0;
            z-index: 2000;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            gap: 16px;
            background-color: var(--mud-palette-surface);
            color: var(--mud-palette-text-primary);
            font-size: 1.1rem;
            text-align: center;
            padding: 24px;
        }
    }
}
/* /Components/Pages/ResultInput/Components/ResultNumpad.razor.rz.scp.css */
.result-numpad[b-mp2pf7vesx] {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 8px;
    width: 100%;
    max-width: 460px;
}

/* Continue variant: extra tall column on the right for the "next athlete"
   command, dominating the right edge so the operator can advance one-handed. */
.result-numpad-with-continue[b-mp2pf7vesx] {
    grid-template-columns: repeat(4, 1fr) 1.4fr;
    grid-template-rows: repeat(4, 1fr);
    max-width: none;
}

.result-numpad[b-mp2pf7vesx]  .result-numpad-key {
    aspect-ratio: 3 / 2;
    min-width: 0;
    font-size: 1.4rem;
    font-weight: 600;
}

/* In the Continue layout, the keys themselves don't need a fixed aspect — the
   grid rows size them. Letting them stretch keeps the tall Continue button
   matched in height to the four key rows. */
.result-numpad-with-continue[b-mp2pf7vesx]  .result-numpad-key {
    aspect-ratio: auto;
    height: 100%;
    min-height: 56px;
}

.result-numpad[b-mp2pf7vesx]  .result-numpad-key-outcome {
    font-weight: 700;
}

.result-numpad[b-mp2pf7vesx]  .result-numpad-key-ok {
    font-size: 1.2rem;
}

/* Continue: column 5, spans all four rows. Vertical layout for icon + label
   keeps the button readable even at narrow phone widths. */
.result-numpad[b-mp2pf7vesx]  .result-numpad-key-continue {
    grid-column: 5;
    grid-row: 1 / -1;
    aspect-ratio: auto;
    font-weight: 700;
    font-size: 1rem;
    padding: 8px;
}

.result-numpad-key-continue-label[b-mp2pf7vesx] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    line-height: 1.1;
    text-transform: none;
}

/* On phones the parent .numpad-host (in ComponentResultInputSimple) handles the
   full-bleed sticky bar — the keypad itself just needs to fill the host. */
@media (max-width: 768px) {
    .result-numpad[b-mp2pf7vesx] {
        max-width: none;
    }
}
/* /Components/Pages/StartList/AvailablePanel.razor.rz.scp.css */
.available-panel[b-29t40bj0z8] {
    display: flex;
    flex-direction: column;
    border-radius: 12px;
    background-color: var(--mud-palette-dark-lighten);
    border: 1px solid var(--mud-palette-divider);
    overflow: hidden;
    padding: 10px;
    width: 100%;
    min-width: 260px;
}

.ap-header[b-29t40bj0z8] {
    display: flex;
    align-items: baseline;
    gap: 6px;
    margin-bottom: 8px;
    padding: 0 4px;
}

.ap-title[b-29t40bj0z8] {
    font-weight: 600;
    font-size: 1.05rem;
}

.ap-count[b-29t40bj0z8] {
    color: var(--mud-palette-text-secondary);
    font-size: 0.9rem;
}

.ap-selected[b-29t40bj0z8] {
    color: var(--mud-palette-primary);
    font-size: 0.9rem;
    font-weight: 500;
}

.ap-toolbar[b-29t40bj0z8] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    margin-bottom: 8px;
}

.ap-search-row[b-29t40bj0z8] {
    display: flex;
    align-items: center;
    gap: 4px;
}

.ap-search-row[b-29t40bj0z8]  .ap-search {
    flex: 1 1 auto;
}

.ap-search-row[b-29t40bj0z8]  .ap-sort {
    flex: 0 0 auto;
}

.ap-list[b-29t40bj0z8] {
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    max-height: calc(100vh - 320px);
    gap: 2px;
}

.ap-drop[b-29t40bj0z8] {
    min-height: 96px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: bold;
    font-size: 1rem;
    text-align: center;
    padding: 12px;
}

.ap-empty[b-29t40bj0z8] {
    padding: 24px 8px;
    text-align: center;
    color: var(--mud-palette-text-secondary);
    font-size: 0.9rem;
}
/* /Components/Pages/StartList/HeatGroupCard.razor.rz.scp.css */
.heat-group-card[b-vzbnww518l] {
    border-radius: 12px;
    background-color: var(--mud-palette-dark-lighten);
    padding: 0;
    margin-bottom: 20px;
    overflow: hidden;
    border: 1px solid var(--mud-palette-divider);
}

.hgc-header[b-vzbnww518l] {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 14px;
    background-color: var(--mud-palette-dark-darken);
    border-bottom: 1px solid var(--mud-palette-divider);
}

.hgc-title[b-vzbnww518l] {
    font-size: 1.05rem;
    font-weight: 600;
    color: var(--mud-palette-text-primary);
    flex: 1 1 auto;
    min-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.hgc-actions[b-vzbnww518l] {
    display: flex;
    align-items: center;
    gap: 2px;
    flex: 0 0 auto;
}

.hgc-body[b-vzbnww518l] {
    padding: 8px;
    background-color: var(--mud-palette-surface);
}

/* Must mirror .row-desktop grid in StartListEntryRow.razor.css. */
.hgc-column-header[b-vzbnww518l] {
    display: grid;
    grid-template-columns:
        40px            /* pos */
        48px            /* bib */
        minmax(0, 2fr)  /* name */
        minmax(0, 2fr)  /* club */
        40px            /* age */
        48px            /* nation */
        64px            /* perf */
        92px;           /* actions */
    align-items: center;
    gap: 6px;
    padding: 4px 8px 6px;
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--mud-palette-text-secondary);
    border-bottom: 1px solid var(--mud-palette-divider);
    margin-bottom: 4px;
}

.hgc-column-header .col-name[b-vzbnww518l],
.hgc-column-header .col-club[b-vzbnww518l] {
    text-align: left;
}

.hgc-column-header .col-pos[b-vzbnww518l],
.hgc-column-header .col-bib[b-vzbnww518l],
.hgc-column-header .col-age[b-vzbnww518l],
.hgc-column-header .col-nation[b-vzbnww518l],
.hgc-column-header .col-perf[b-vzbnww518l],
.hgc-column-header .col-actions[b-vzbnww518l] {
    text-align: center;
}
/* /Components/Pages/StartList/StartListEntryRow.razor.rz.scp.css */
.row-root[b-1ufjfv2xl9] {
    position: relative;
    border-radius: 6px;
    background-color: var(--mud-palette-surface);
    margin-bottom: 2px;
    overflow: hidden;
    flex: 0 0 auto; /* never shrink when inside flex-column container (e.g. AvailablePanel) */
    transition: transform 120ms ease-out, background-color 80ms ease-out;
}

.row-root:hover[b-1ufjfv2xl9] {
    background-color: var(--mud-palette-table-hover);
}

/* Empty placeholder slot — muted, no metadata cells filled in */
.row-root.is-empty-slot[b-1ufjfv2xl9] {
    background-color: transparent;
    border: 1px dashed var(--mud-palette-divider);
    min-height: 36px;
}

.row-root.is-empty-slot:hover[b-1ufjfv2xl9] {
    background-color: var(--mud-palette-action-default-hover);
    border-color: var(--mud-palette-primary);
}

.row-root.is-empty-slot .cell-pos[b-1ufjfv2xl9] {
    color: var(--mud-palette-text-secondary);
    font-style: italic;
}

.row-root.is-empty-slot .row-desktop > .cell:not(.cell-pos)[b-1ufjfv2xl9]::after {
    content: "—";
    color: var(--mud-palette-divider);
}

.row-root.drag-enabled[b-1ufjfv2xl9] {
    cursor: move;
}

/* ----- desktop layout -----
   Fixed columns trimmed so name/club still breathe at HD (1366) widths.
   Total fixed = 40+48+40+48+64+92 = 332 px (+ gaps); leaves the name/club fr columns
   roughly 220 px each in the heat-table column on a 1366-px viewport. */
.row-desktop[b-1ufjfv2xl9] {
    display: grid;
    grid-template-columns:
        40px            /* pos */
        48px            /* bib */
        minmax(0, 2fr)  /* name */
        minmax(0, 2fr)  /* club */
        40px            /* age */
        48px            /* nation */
        64px            /* perf */
        92px;           /* actions (qualification absorbed inside) */
    align-items: center;
    min-height: 44px;
    padding: 0 8px;
    gap: 6px;
}

.cell[b-1ufjfv2xl9] {
    padding: 4px 4px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cell-pos[b-1ufjfv2xl9],
.cell-bib[b-1ufjfv2xl9],
.cell-age[b-1ufjfv2xl9],
.cell-nation[b-1ufjfv2xl9],
.cell-perf[b-1ufjfv2xl9],
.cell-qual[b-1ufjfv2xl9],
.cell-actions[b-1ufjfv2xl9],
.cell-select[b-1ufjfv2xl9],
.cell-add[b-1ufjfv2xl9] {
    text-align: center;
}

.cell-name[b-1ufjfv2xl9],
.cell-club[b-1ufjfv2xl9] {
    text-align: left;
}

.row-actions[b-1ufjfv2xl9] {
    display: flex;
    gap: 2px;
    justify-content: center;
}

/* ----- compact card layout (mobile assigned + Available rail) ----- */
.row-mobile[b-1ufjfv2xl9] {
    position: relative;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 10px;
    background-color: var(--mud-palette-surface);
    z-index: 1;
    transition: transform 120ms ease-out;
}

.row-available[b-1ufjfv2xl9] {
    padding: 10px 12px;
    gap: 10px;
    min-height: 48px;
    border-bottom: 1px solid var(--mud-palette-divider);
}

.row-available:last-child[b-1ufjfv2xl9] {
    border-bottom: none;
}

.row-available .meta-primary[b-1ufjfv2xl9] {
    flex-wrap: wrap;
}

.row-available .meta-primary .name[b-1ufjfv2xl9] {
    font-size: 0.95rem;
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
}

.row-available .meta-secondary[b-1ufjfv2xl9] {
    font-size: 0.78rem;
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
}

.row-available[b-1ufjfv2xl9]  .row-available-add {
    min-width: 36px;
    min-height: 36px;
    padding: 6px;
}

.pos-badge[b-1ufjfv2xl9] {
    flex: 0 0 auto;
    min-width: 30px;
    height: 30px;
    border-radius: 50%;
    background-color: var(--mud-palette-dark-lighten);
    color: var(--mud-palette-text-primary);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.meta[b-1ufjfv2xl9] {
    flex: 1 1 0;
    min-width: 0;
}

.meta-primary[b-1ufjfv2xl9] {
    display: flex;
    gap: 4px;
    align-items: baseline;
    min-width: 0;
}

.meta-primary .bib[b-1ufjfv2xl9] {
    font-weight: 600;
    flex: 0 0 auto;
}

.meta-primary .name[b-1ufjfv2xl9] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.meta-secondary[b-1ufjfv2xl9] {
    color: var(--mud-palette-text-secondary);
    font-size: 0.78rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.row-mobile .mobile-actions[b-1ufjfv2xl9] {
    display: flex;
    align-items: center;
    gap: 2px;
    flex: 0 0 auto;
}
/* /Components/Pages/StartList/ViewStartList.razor.rz.scp.css */
/* Top "current event" tile — clickable, navigates to time plan */
.startlist-header[b-tduzvu07ln] {
    margin-bottom: 16px;
    background-color: var(--mud-palette-dark-lighten);
    padding: 12px 16px;
    border-radius: 12px;
    cursor: pointer;
    border: 1px solid var(--mud-palette-divider);
    transition: background-color 120ms ease-out, transform 120ms ease-out;
    user-select: none;
    display: flex;
    align-items: center;
    gap: 12px;
}

.startlist-header:hover[b-tduzvu07ln] {
    background-color: var(--mud-palette-table-hover);
    transform: translateY(-1px);
}

.startlist-header-info[b-tduzvu07ln] {
    display: flex;
    flex-direction: row;
    gap: 12px;
    align-items: baseline;
    flex: 1 1 auto;
    min-width: 0;
}

.startlist-header-chevron[b-tduzvu07ln] {
    color: var(--mud-palette-text-secondary);
    flex: 0 0 auto;
}

/* Reset + Done lifted into the header tile (right side, before chevron). */
.startlist-header-actions[b-tduzvu07ln] {
    display: flex;
    gap: 8px;
    align-items: center;
    flex: 0 0 auto;
    cursor: default;
}

/* Finale section header — title + Auto-Setzen + Add group */
.section-header[b-tduzvu07ln] {
    background-color: transparent;
    padding: 4px 4px 12px 4px;
    margin-bottom: 6px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    border-bottom: 1px solid var(--mud-palette-divider);
}

.section-header > :first-child[b-tduzvu07ln] {
    font-size: 1.1rem;
    font-weight: 600;
}

.section-header .actions[b-tduzvu07ln] {
    display: flex;
    gap: 8px;
    align-items: center;
}

/* Mobile: tighter buttons in section header, wrap header actions under info */
@media (max-width: 959.98px) {
    .section-header[b-tduzvu07ln] {
        flex-wrap: wrap;
        gap: 6px;
        padding: 4px 0 8px 0;
    }

    .section-header > :first-child[b-tduzvu07ln] {
        flex: 1 1 100%;
    }

    .section-header .actions[b-tduzvu07ln]  .mud-button-root {
        font-size: 0.78rem;
        padding: 4px 10px;
        min-width: 0;
    }

    .startlist-header[b-tduzvu07ln] {
        padding: 10px 12px;
        flex-wrap: wrap;
    }

    .startlist-header-info[b-tduzvu07ln] {
        flex: 1 1 100%;
        flex-direction: column;
        gap: 2px;
    }

    .startlist-header-actions[b-tduzvu07ln] {
        flex: 1 1 auto;
        justify-content: flex-end;
    }

    .startlist-header-actions[b-tduzvu07ln]  .mud-button-root {
        font-size: 0.78rem;
        padding: 4px 10px;
        min-width: 0;
    }

    .startlist-footer[b-tduzvu07ln] {
        padding: 8px 4px;
    }
}
