@import 'A2G.Web.Client.iw3z537g8f.bundle.scp.css';

/* /Components/Layout/MainLayout.razor.rz.scp.css */
#blazor-error-ui[b-0j7fxiftui] {
    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-0j7fxiftui] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* /Components/Layout/NotificationBell.razor.rz.scp.css */
/* Something waiting: the bell is filled and takes the brand colour - no count, no dot. */
.nb-active .bi[b-hktcbjprgb] {
    color: var(--lm-accent-text);
}

.nb-menu[b-hktcbjprgb] {
    min-width: 15rem;
}
/* /Components/Pages/Calendar.razor.rz.scp.css */
.cal-grid[b-2ku4kinjn4] {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
}

.cal-grid th[b-2ku4kinjn4] {
    text-align: center;
    padding: 6px;
    font-weight: 600;
    color: #aaa;
    font-size: 0.85rem;
}

.cal-grid td[b-2ku4kinjn4] {
    vertical-align: top;
    height: 100px;
    width: calc(100% / 7);
    border: 1px solid #2a2a2a;
    padding: 4px;
}

.cal-day-other[b-2ku4kinjn4] {
    opacity: 0.3;
}

.cal-day-num[b-2ku4kinjn4] {
    font-size: 0.8rem;
    color: #aaa;
    margin-bottom: 4px;
    line-height: 1.2;
}

.cal-day-today[b-2ku4kinjn4] {
    background: var(--lm-surface-3);
}

.cal-day-today .cal-day-num[b-2ku4kinjn4] {
    color: var(--lm-accent-text);
    font-weight: 600;
}

.cal-time[b-2ku4kinjn4] {
    font-size: 0.68rem;
    font-weight: 700;
    color: var(--lm-text-muted);
    padding: 2px 2px 1px;
    margin-top: 3px;
}

.cal-event[b-2ku4kinjn4] {
    font-size: 0.72rem;
    background: var(--lm-surface-2);
    color: var(--lm-text);
    border: 1px solid var(--lm-border);
    border-radius: 3px;
    padding: 3px 5px;
    margin-bottom: 2px;
    cursor: pointer;
    display: block;
    overflow: hidden;
}

.cal-event-title[b-2ku4kinjn4] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 4px;
    overflow: hidden;
}

.cal-event-title span[b-2ku4kinjn4] {
    min-width: 0;
    overflow-wrap: anywhere;
    word-break: break-word;
}

.cal-event-sub[b-2ku4kinjn4] {
    font-size: 0.65rem;
    color: var(--lm-text-muted);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    margin-top: 1px;
}

.cal-event:hover[b-2ku4kinjn4] {
    background: var(--lm-surface-3);
}

.cal-event .bi[b-2ku4kinjn4] {
    vertical-align: middle;
    margin-right: 2px;
}

.stream-btn[b-2ku4kinjn4] {
    width: 1.75rem;
    height: 1.75rem;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.view-label[b-2ku4kinjn4] {
    color: #ffffff;
}

.view-label.active[b-2ku4kinjn4] {
    color: var(--bs-danger);
    font-weight: 600;
}

.subscribe-menu .bi[b-2ku4kinjn4] {
    width: 1.25rem;
    display: inline-block;
}
/* /Components/Pages/DayjaysFunMapCup.razor.rz.scp.css */
h1[b-gfnovvfty6], h2[b-gfnovvfty6], h3[b-gfnovvfty6], h4[b-gfnovvfty6], h5[b-gfnovvfty6], h6[b-gfnovvfty6] {
    color: #e35997 !important;
}

.handbook-sidebar-nav .nav-link[b-gfnovvfty6] {
    color: #000000 !important;
}

.handbook-sidebar-nav .nav-link:hover[b-gfnovvfty6] {
    background-color: var(--bs-info) !important;
    color: #fff !important;
}

.handbook-sidebar-nav .nav-link.active[b-gfnovvfty6] {
    background-color: #e35997 !important;
    color: #fff !important;
}

.card[b-gfnovvfty6] {
    --bs-card-bg: #ddf0fb;
    --bs-card-border-color: rgba(0, 0, 0, 0.1);
    box-shadow: none !important;
}

.card:hover[b-gfnovvfty6] {
    border-color: #e35997 !important;
}

.card .card-body .fw-bold[b-gfnovvfty6] {
    color: #000000;
}
/* /Components/Pages/DiscordTimestamp.razor.rz.scp.css */
.dt-input[b-ohipiu9663] {
    width: auto;
    flex: 0 1 auto;
}

.dt-table th[b-ohipiu9663] {
    color: var(--lm-text-muted);
    font-weight: 600;
    font-size: 0.85rem;
}

.dt-code[b-ohipiu9663] {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 4px;
    background: var(--lm-surface-3);
    border: 1px solid var(--lm-border);
    color: var(--lm-text);
    cursor: pointer;
    user-select: all;
}

.dt-code:hover[b-ohipiu9663] {
    border-color: var(--lm-accent);
}

.dt-preview[b-ohipiu9663] {
    font-weight: 600;
}

.dt-lang[b-ohipiu9663] {
    display: inline-flex;
    gap: 4px;
}

.dt-lang-btn[b-ohipiu9663] {
    display: inline-flex;
    padding: 3px;
    border: 1px solid transparent;
    border-radius: 5px;
    background: transparent;
    line-height: 0;
    opacity: 0.45;
    filter: grayscale(0.6);
    transition: opacity 0.15s, filter 0.15s, border-color 0.15s;
}

.dt-lang-btn img[b-ohipiu9663] {
    border-radius: 2px;
}

.dt-lang-btn:hover[b-ohipiu9663] {
    opacity: 0.85;
    filter: none;
}

.dt-lang-btn.active[b-ohipiu9663] {
    opacity: 1;
    filter: none;
    border-color: var(--lm-accent);
    background: var(--lm-accent-soft);
}

@media (max-width: 575.98px) {
    .dt-table thead[b-ohipiu9663] {
        display: none;
    }

    .dt-table tr[b-ohipiu9663] {
        display: grid;
        grid-template-columns: 1fr auto;
        border-bottom: 1px solid var(--lm-border);
        padding: 6px 0;
    }

    .dt-table td[b-ohipiu9663] {
        border: 0;
        padding: 2px 4px;
    }

    .dt-code-cell[b-ohipiu9663] {
        grid-row: 1;
        grid-column: 1;
    }

    .dt-preview[b-ohipiu9663] {
        grid-row: 2;
        grid-column: 1;
    }

    .dt-copy-cell[b-ohipiu9663] {
        grid-row: 1 / 3;
        grid-column: 2;
        align-self: center;
    }
}
/* /Components/Pages/NoobsOfTheDesert2.razor.rz.scp.css */

.handbook-sidebar-nav .nav-link[b-i44rku39ex] {
    color: #ffffff !important;
}

.handbook-sidebar-nav .nav-link:hover[b-i44rku39ex] {
    background-color: var(--bs-danger) !important;
    color: #fff !important;
}

.handbook-sidebar-nav .nav-link.active[b-i44rku39ex] {
    background-color: var(--bs-warning) !important;
    color: #fff !important;
}

/* /Components/Pages/NoobsOfTheDesert3.razor.rz.scp.css */

.handbook-sidebar-nav .nav-link[b-5yjvoi9644] {
    color: #ffffff !important;
}

.handbook-sidebar-nav .nav-link:hover[b-5yjvoi9644] {
    background-color: var(--bs-danger) !important;
    color: #fff !important;
}

.handbook-sidebar-nav .nav-link.active[b-5yjvoi9644] {
    background-color: var(--bs-warning) !important;
    color: #fff !important;
}

/* /Components/Pages/PlayerTournamentHistory.razor.rz.scp.css */
.mv-back[b-s79nd2feur] {
    display: inline-block;
    font-size: .88rem;
    color: var(--lm-text-muted);
    text-decoration: none;
    margin-bottom: .5rem;
}

.mv-back:hover[b-s79nd2feur] { color: var(--lm-accent-text); }

/* --- Header ------------------------------------------------------------ */

.mv-header[b-s79nd2feur] {
    display: flex;
    align-items: center;
    gap: 1.25rem;
    margin: .5rem 0 1.25rem;
}

.mv-logo[b-s79nd2feur] {
    height: 4.5rem;
    width: auto;
    max-width: 30%;
    object-fit: contain;
}

.mv-sub[b-s79nd2feur] {
    display: flex;
    flex-wrap: wrap;
    gap: .25rem 1rem;
    color: var(--lm-text-muted);
    font-size: .9rem;
}

/* --- Stage chain: where the player finished in each stage --------------- */

.mv-chain[b-s79nd2feur] {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    list-style: none;
    padding: 0;
    margin: 0 0 1.25rem;
}

.mv-chain-step[b-s79nd2feur] {
    position: relative;
    display: flex;
    flex-direction: column;
    padding: .5rem .9rem;
    background: var(--lm-surface);
    border: 1px solid var(--lm-border);
    border-radius: .45rem;
}

/* An arrow between two stages - the chain reads left to right. */
.mv-chain-step + .mv-chain-step[b-s79nd2feur]::before {
    content: "\F285";
    font-family: "bootstrap-icons";
    position: absolute;
    left: -.45rem;
    top: 50%;
    transform: translate(-50%, -50%);
    font-size: .7rem;
    color: var(--lm-text-dim);
}

.mv-chain-stage[b-s79nd2feur] {
    font-size: .8rem;
    color: var(--lm-text-muted);
}

.mv-chain-place[b-s79nd2feur] { font-weight: 600; }

.mv-chain-first[b-s79nd2feur] {
    border-color: rgba(255, 215, 0, .45);
}

.mv-chain-first .mv-chain-place[b-s79nd2feur] { color: #ffd700; }

.mv-chain-live .mv-chain-place[b-s79nd2feur] { color: var(--lm-text-muted); font-weight: 500; }

@media (max-width: 575.98px) {
    .mv-logo[b-s79nd2feur] { height: 3.25rem; }
}
/* /Components/Pages/PlayerTournaments.razor.rz.scp.css */
/* --- Registration banner ----------------------------------------------- */

.mt-registration[b-e6bx0dzuo3] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .75rem 1rem;
    padding: .85rem 1rem;
    margin-bottom: 1.5rem;
    border: 1px solid var(--lm-accent-ring);
    border-radius: .5rem;
}

.mt-registration-icon[b-e6bx0dzuo3] {
    font-size: 1.35rem;
    color: var(--lm-accent-text);
}

/* --- Tournament cards -------------------------------------------------- */

/* The outlined badge from /spiele, pinned to the card's corner. It sits on the header artwork,
   so it keeps the card's own colour behind it to stay readable. */
.mt-status[b-e6bx0dzuo3] {
    position: absolute;
    top: .6rem;
    right: .6rem;
    background: var(--lm-surface);
}

.mt-pill-warn[b-e6bx0dzuo3] { border-color: rgba(var(--bs-warning-rgb), .45); color: var(--bs-warning); }

.mt-placement[b-e6bx0dzuo3] {
    display: flex;
    align-items: center;
    gap: .75rem;
    padding: .6rem .75rem;
    border-radius: .4rem;
    background: var(--lm-surface-2);
    border: 1px solid var(--lm-border-soft);
}

.mt-placement > .bi[b-e6bx0dzuo3] {
    font-size: 1.4rem;
    color: var(--lm-text-muted);
}

.mt-placement-first > .bi[b-e6bx0dzuo3] { color: #ffd700; }

.mt-placement-stage[b-e6bx0dzuo3] {
    font-size: .8rem;
    color: var(--lm-text-muted);
}

.mt-placement-text[b-e6bx0dzuo3] {
    font-weight: 600;
}

.mt-todo[b-e6bx0dzuo3] {
    display: flex;
    align-items: center;
    gap: .5rem;
    padding: .5rem .75rem;
    border-radius: .4rem;
    background: var(--lm-accent-soft);
    border: 1px solid var(--lm-accent-ring);
    color: var(--lm-accent-text);
    font-weight: 600;
    font-size: .88rem;
    text-decoration: none;
}

.mt-todo:hover[b-e6bx0dzuo3] {
    color: var(--lm-text);
    border-color: var(--lm-accent);
}
/* /Components/Shared/BracketMatchModal.razor.rz.scp.css */
/* Names either side of the score, the score in the middle - as on the player's own history. */
.bm-score[b-us3r9x0203] {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
    align-items: center;
    gap: 1rem;
}
/* /Components/Shared/BracketMatchTable.razor.rz.scp.css */
/* Blazor scopes CSS per component, so the winner/loser rules from TournamentBracket.razor.css
   do not reach the markup emitted here. The list colours the winner green, like the match window;
   the loser keeps the normal text colour. */

.bracket-winner[b-3dkqsn3iny] {
    font-weight: 600;
    color: var(--bs-success-text-emphasis);
}

/* A cancelled fixture stays visible so the schedule has no unexplained gap, but it is clearly
   not a result: the names are struck through and the whole row recedes. */
.bracket-cancelled td[b-3dkqsn3iny] {
    color: var(--bs-secondary-color, #6c757d);
}

.bracket-cancelled .bracket-name-text[b-3dkqsn3iny] {
    text-decoration: line-through;
}

/* Every round is its own table, so their columns must be pinned to the same widths or the
   pairings drift horizontally from round to round. The two name columns are left unsized and
   therefore split the remaining space evenly, keeping "vs" centred. */
.bracket-match-table[b-3dkqsn3iny] {
    table-layout: fixed;
    width: 100%;
}

.bracket-col-score[b-3dkqsn3iny] {
    width: 5.5rem;
}

/* The date leads the row, the set mode closes it - both fixed, so a round without any date
   still lines up with one that has them. */
.bracket-col-date[b-3dkqsn3iny] {
    width: 7rem;
}

.bracket-col-meta[b-3dkqsn3iny] {
    width: 4rem;
}

/* Fixed layout would otherwise let a long name spill out of its cell. break-word only splits a
   name that cannot fit on its own line - "anywhere" also let the browser break a name mid-word
   whenever the cell was narrow. */
.bracket-match-table td[b-3dkqsn3iny] {
    overflow-wrap: break-word;
}

/* Name and avatar side by side: a long name wraps within its own space instead of pushing the
   avatar onto a line of its own. The home side is right-aligned, towards the score. */
.bracket-side-inner[b-3dkqsn3iny] {
    display: flex;
    align-items: center;
}

.bracket-side-home[b-3dkqsn3iny] {
    justify-content: flex-end;
}

.bracket-name-text[b-3dkqsn3iny] {
    min-width: 0;
}

/* A player's Discord avatar, on the side of the name that faces the score. */
.bracket-avatar[b-3dkqsn3iny] {
    display: inline-flex;
    flex-shrink: 0;
    margin: 0 .35rem;
}

/* The date/mode line under a pairing is for phones only. */
.bracket-meta-row[b-3dkqsn3iny] {
    display: none;
}

/* On a phone the date and mode columns would leave each name about 3.5rem, so names broke apart
   mid-word. Both columns go and their content gets a line of its own under the pairing, which
   leaves the names room for their avatars too. A column's width must go with its cells, or the
   fixed layout keeps reserving it. */
@media (max-width: 575.98px) {
    .bracket-col-date[b-3dkqsn3iny],
    .bracket-col-meta[b-3dkqsn3iny] {
        width: 0;
    }

    /* Not display:none - a missing cell would shift the following cells into its column. */
    .bracket-match-table td.bracket-date[b-3dkqsn3iny],
    .bracket-match-table td.bracket-meta[b-3dkqsn3iny] {
        visibility: hidden;
        padding: 0;
    }

    /* The score column only holds "vs", the result or "abgesagt" now - the widest of the three. */
    .bracket-col-score[b-3dkqsn3iny] {
        width: 4.25rem;
    }

    .bracket-avatar[b-3dkqsn3iny] {
        margin: 0 .25rem;
    }

    /* The pairing and its date line read as one match: no border between them, only after. */
    .bracket-has-meta > td[b-3dkqsn3iny] {
        border-bottom-width: 0;
        padding-bottom: 0;
    }

    .bracket-meta-row[b-3dkqsn3iny] {
        display: table-row;
    }

    .bracket-meta-row > td[b-3dkqsn3iny] {
        padding-top: .15rem;
        padding-bottom: .4rem;
        line-height: 1.2;
    }

    /* The date is wider than the score column. A centred flex column lets it overflow equally to
       both sides, so it stays centred under the "vs" - centred text would only spill to the right. */
    .bracket-meta-stack[b-3dkqsn3iny] {
        display: flex;
        flex-direction: column;
        align-items: center;
        gap: .25rem;
    }
}

/* The end of a row: the stream buttons, then the details button of a match with maps or drafts -
   each a btn-sm icon button (about 2rem). The column holds the details button plus the cell's
   right padding, and 2.25rem more per stream slot the stage needs (set on the col by the table).
   The left padding goes, so the column stays narrow on phones, and so does the vertical padding,
   so a row with buttons is no taller than one without. */
.bracket-col-details[b-3dkqsn3iny] {
    width: calc(3rem + var(--bracket-stream-slots, 0) * 2.25rem);
}

.bracket-match-table td.bracket-details-cell[b-3dkqsn3iny] {
    padding-top: 0;
    padding-bottom: 0;
    padding-left: 0;
}

.bracket-actions[b-3dkqsn3iny] {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: .25rem;
}

.bracket-row-streams[b-3dkqsn3iny],
.bracket-stack-streams[b-3dkqsn3iny] {
    display: inline-flex;
    gap: .25rem;
}

/* On a phone the streams join the date line under the "vs", and the column keeps only the room
   for the details button. */
@media (max-width: 575.98px) {
    .bracket-col-details[b-3dkqsn3iny] {
        width: 3rem;
    }

    .bracket-row-streams[b-3dkqsn3iny] {
        display: none;
    }
}
/* /Components/Shared/BracketRoundTabs.razor.rz.scp.css */
/* A segmented control: one framed bar, so the rounds read as a choice rather than as loose links.
   Only as wide as its rounds; a long season scrolls sideways inside it instead of wrapping. */
.bracket-round-tabs[b-tsvmzy06qr] {
    flex-wrap: nowrap;
    gap: .125rem;
    width: fit-content;
    max-width: 100%;
    margin-top: .75rem;
    padding: .2rem;
    overflow-x: auto;
    scrollbar-width: thin;
    border: 1px solid var(--lm-border);
    border-radius: .5rem;
    background-color: var(--lm-surface);
}

.bracket-round-tabs .nav-link[b-tsvmzy06qr] {
    padding: .2rem .7rem;
    font-size: .8rem;
    white-space: nowrap;
    border-radius: .35rem;
}
/* /Components/Shared/BracketScheduleFilter.razor.rz.scp.css */
/* Compact filter buttons. Unfiltered they read as an outline button; while a filter is set the
   script adds .bracket-filter-active, so it is visible at a glance that the list is cut down. */
.bracket-filter-toggle[b-fyxzvszjwk] {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    max-width: 13rem;
    padding: .15rem .5rem;
    font-size: .8rem;
}

.bracket-filter-toggle.bracket-filter-active[b-fyxzvszjwk] {
    color: var(--bs-primary-text-emphasis);
    border-color: var(--bs-primary);
    background-color: var(--bs-primary-bg-subtle);
}

/* The chosen name can be long; it is cut off rather than widening the button. */
.bracket-filter-label[b-fyxzvszjwk] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* A long player list scrolls inside the menu instead of running off the page. */
.bracket-filter-menu[b-fyxzvszjwk] {
    max-height: 20rem;
    overflow-y: auto;
    font-size: .875rem;
}

/* The search field stays on top while the options scroll beneath it. The menu's own top padding
   moves into the field's row, or options would show through the gap above it. */
.bracket-filter-menu-search[b-fyxzvszjwk] {
    padding-top: 0;
}

/* As wide as the items' highlight, its text where theirs starts (the menu and item padding of
   app.css). */
.bracket-filter-search[b-fyxzvszjwk] {
    position: sticky;
    top: 0;
    z-index: 1;
    padding: .4rem 0 .25rem;
    background-color: var(--bs-dropdown-bg);
}

.bracket-filter-search .form-control[b-fyxzvszjwk] {
    padding-left: calc(.6rem - var(--bs-border-width));
    padding-right: calc(.6rem - var(--bs-border-width));
}

.bracket-filter-option[b-fyxzvszjwk] {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    max-width: 16rem;
}

/* Lets a long name shrink, so text-truncate can cut it off. */
.bracket-filter-option > .text-truncate[b-fyxzvszjwk] {
    min-width: 0;
}

/* The chosen option, copied into the button by the script. innerHTML keeps the scope attribute,
   so these scoped rules still reach it. */
.bracket-filter-label .bracket-filter-option[b-fyxzvszjwk] {
    max-width: 100%;
    gap: .35rem;
    vertical-align: middle;
}
/* /Components/Shared/MatchGamesTable.razor.rz.scp.css */
/* Same sizes as the report form on /spiele, so a game looks the same everywhere. */

/* Civs either side of a fixed "vs": the home side ends at it, the guest starts after it, so the
   "vs" lines up in every row whatever the civ names' lengths. */
.mg-civs[b-24u12o3ijp] {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
    align-items: center;
    gap: .5rem;
}

.mg-civs > :first-child[b-24u12o3ijp] {
    justify-self: end;
    align-items: flex-end;
}

.mg-civs > :last-child[b-24u12o3ijp] {
    justify-self: start;
    align-items: flex-start;
}

.mg-seat-player[b-24u12o3ijp] {
    margin: 0 .25rem;
}

.mg-map-thumb[b-24u12o3ijp] {
    width: 2.25rem;
    height: 1.5rem;
    object-fit: contain;
    flex: 0 0 auto;
}

.mg-civ-icon[b-24u12o3ijp] {
    width: 1.5rem;
    height: 1.5rem;
    object-fit: contain;
    flex: 0 0 auto;
}

/* A team game the viewer sat out, on their own history. */
.mg-dimmed[b-24u12o3ijp] {
    opacity: .55;
}

/* A phone has no room for civ names next to the map and the winner: the icons carry them,
   the name is in the tooltip. */
@media (max-width: 575.98px) {
    .mg-civ-name[b-24u12o3ijp] {
        display: none;
    }
}

.mg-col-rec[b-24u12o3ijp] {
    width: 3rem;
}
/* /Components/Shared/PlayerMatchCard.razor.rz.scp.css */
/* Names either side of the score, the score in the middle of the card. */
.pm-score[b-6xlnq7vwtu] {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
    align-items: center;
    gap: 1rem;
}

/* Byes and cancelled matches: listed, but not part of the record. */
.pm-void[b-6xlnq7vwtu] {
    opacity: .65;
}
/* /Components/Shared/PlayerStatsPanel.razor.rz.scp.css */
/* --- Headline numbers -------------------------------------------------- */

.ps-tiles[b-8npjet4lt8] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(9.5rem, 1fr));
    gap: .6rem;
}

.ps-tile[b-8npjet4lt8] {
    display: flex;
    flex-direction: column;
    gap: .15rem;
    padding: .6rem .75rem;
    background: var(--lm-surface-2);
    border: 1px solid var(--lm-border-soft);
    border-radius: .4rem;
    min-width: 0;
}

.ps-tile-label[b-8npjet4lt8] {
    font-size: .8rem;
    color: var(--lm-text-muted);
}

.ps-tile-value[b-8npjet4lt8] {
    font-size: 1.35rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    line-height: 1.2;
}

.ps-tile-civ[b-8npjet4lt8] {
    display: flex;
    align-items: center;
    gap: .4rem;
    font-size: 1.05rem;
    min-width: 0;
}

.ps-tile-civ > span[b-8npjet4lt8] {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.ps-tile-sub[b-8npjet4lt8] {
    font-size: .78rem;
    color: var(--lm-text-muted);
}

/* --- Civ and map lists ------------------------------------------------- */

.ps-lists[b-8npjet4lt8] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
    gap: 1rem 1.5rem;
    margin-top: 1rem;
}

.ps-list-title[b-8npjet4lt8] {
    font-size: .8rem;
    color: var(--lm-text-muted);
    margin-bottom: .4rem;
}

.ps-list[b-8npjet4lt8] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    gap: .3rem;
}

.ps-row[b-8npjet4lt8] {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 5rem 2.75rem;
    align-items: center;
    gap: .6rem;
    font-size: .88rem;
}

.ps-row-name[b-8npjet4lt8] {
    display: flex;
    align-items: center;
    gap: .45rem;
    min-width: 0;
}

.ps-row-name > span[b-8npjet4lt8] {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.ps-civ-icon[b-8npjet4lt8] {
    width: 1.4rem;
    height: 1.4rem;
    object-fit: contain;
    flex: none;
}

/* Civ icons and map pictures share one box, so both lists have the same row height and their
   names start at the same point. Scaled to fit rather than cropped - the box the match table uses. */
.ps-thumb[b-8npjet4lt8] {
    width: 2.25rem;
    height: 1.5rem;
    object-fit: contain;
    flex: none;
}

/* Win rate as a bar: the whole track is the games played, the fill the share won. */
.ps-bar[b-8npjet4lt8] {
    height: .4rem;
    border-radius: 999px;
    background: rgba(255, 107, 107, .35);
    overflow: hidden;
}

.ps-bar-fill[b-8npjet4lt8] {
    display: block;
    height: 100%;
    background: var(--bs-success);
}

.ps-row-num[b-8npjet4lt8] {
    text-align: right;
    font-variant-numeric: tabular-nums;
    color: var(--lm-text-muted);
}

.ps-list-hint[b-8npjet4lt8] {
    color: var(--lm-text-dim);
}

/* --- Top 3, the rest behind a toggle ------------------------------------ */

.ps-extra[b-8npjet4lt8] {
    display: none !important;
}

.ps-more-toggle:checked ~ .ps-list .ps-extra[b-8npjet4lt8] {
    display: grid !important;
}

.ps-more-label[b-8npjet4lt8] {
    display: inline-block;
    margin-top: .4rem;
    font-size: .8rem;
    color: var(--lm-accent-text);
    cursor: pointer;
    user-select: none;
}

.ps-more-label:hover[b-8npjet4lt8] {
    text-decoration: underline;
}

.ps-more-toggle:focus-visible ~ .ps-more-label[b-8npjet4lt8] {
    outline: 2px solid var(--lm-accent-ring);
    outline-offset: 2px;
    border-radius: .2rem;
}

.ps-more-hide[b-8npjet4lt8],
.ps-more-toggle:checked ~ .ps-more-label .ps-more-show[b-8npjet4lt8] {
    display: none;
}

.ps-more-toggle:checked ~ .ps-more-label .ps-more-hide[b-8npjet4lt8] {
    display: inline;
}
/* /Components/Shared/TournamentBracket.razor.rz.scp.css */
/* Elimination tree. The grid placement is computed server-side by BracketLayout; this only
   paints the boxes and the connecting elbows. Text stays real DOM text so it is selectable
   and indexable - the reason this is CSS grid rather than SVG. */

.bracket-scroll[b-4w4w8lh6nx] {
    overflow-x: auto;
    padding-bottom: .5rem;
}

.bracket-grid[b-4w4w8lh6nx] {
    display: grid;
    gap: 0 2.5rem;
    min-width: min-content;
    align-items: center;
}

.bracket-round-head[b-4w4w8lh6nx] {
    align-self: start;
    font-size: .8rem;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--bs-secondary-color, #6c757d);
    padding-bottom: .25rem;
}

.bracket-match[b-4w4w8lh6nx] {
    position: relative;
    align-self: center;
    border: 1px solid var(--bs-border-color, #dee2e6);
    border-radius: .375rem;
    background: var(--bs-body-bg, #fff);
    overflow: hidden;
}

.bracket-side[b-4w4w8lh6nx] {
    display: flex;
    align-items: center;
    gap: .5rem;
    padding: .3rem .55rem;
    font-size: .9rem;
    line-height: 1.2;
}

.bracket-side + .bracket-side[b-4w4w8lh6nx] {
    border-top: 1px solid var(--bs-border-color, #dee2e6);
}

.bracket-name[b-4w4w8lh6nx] {
    flex: 1;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.bracket-score[b-4w4w8lh6nx] {
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    color: var(--bs-secondary-color, #6c757d);
}

.bracket-winner[b-4w4w8lh6nx] {
    font-weight: 600;
}

.bracket-winner .bracket-score[b-4w4w8lh6nx] {
    color: var(--bs-body-color, #212529);
}

.bracket-loser[b-4w4w8lh6nx] {
    color: var(--bs-secondary-color, #6c757d);
}

/* A played match opens its details on click. */
.bracket-match-details[b-4w4w8lh6nx] {
    cursor: pointer;
}

.bracket-match-details:hover[b-4w4w8lh6nx] {
    border-color: var(--lm-accent-ring, var(--bs-border-color));
}

/* Elbows: a stub out of every match, and a stub into every match that is not in round one.
   Drawn with borders rather than SVG so they scale with the grid gap. */
.bracket-match[b-4w4w8lh6nx]::after {
    content: "";
    position: absolute;
    top: 50%;
    right: -1.25rem;
    width: 1.25rem;
    border-top: 1px solid var(--bs-border-color, #dee2e6);
}

.bracket-match:not([style*="grid-column:1;"])[b-4w4w8lh6nx]::before {
    content: "";
    position: absolute;
    top: 50%;
    left: -1.25rem;
    width: 1.25rem;
    border-top: 1px solid var(--bs-border-color, #dee2e6);
}

/* The last column has nothing to connect to. */
.bracket-grid > .bracket-match:last-of-type[b-4w4w8lh6nx]::after {
    display: none;
}

/* The round list sits under the tree and carries what the boxes have no room for: the date
   and the set mode. Below the breakpoint it stands in for the tree entirely, which reads far
   better on a phone than a horizontally scrolling bracket. */
@media (max-width: 767.98px) {
    .bracket-scroll[b-4w4w8lh6nx] {
        display: none;
    }
}
