/* /Components/Pages/Admin/AdminErrors.razor.rz.scp.css */
/* A list of lines, newest at the top: a level, who wrote it, when, and the message. Not a
   table, for the same reason the jobs page is not one — a message has no column width. */
.admin-errors[b-dxityh2gf8] {
    list-style: none;
    margin: 0;
    padding: 0;
}

.admin-errors li[b-dxityh2gf8] {
    padding: 0.7rem 0.9rem;
    border-bottom: 1px solid var(--line);
}

.admin-errors li:last-child[b-dxityh2gf8] {
    border-bottom: 0;
}

/* An error should be findable while scrolling past the warnings. */
.admin-errors li.bad[b-dxityh2gf8] {
    border-left: 3px solid var(--warn, var(--text));
}

.entry-head[b-dxityh2gf8] {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.6rem;
    font-size: 0.75rem;
    color: var(--muted);
}

.entry-head .level[b-dxityh2gf8] {
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-weight: 600;
}

.admin-errors li.bad .entry-head .level[b-dxityh2gf8] {
    color: var(--warn, var(--text));
}

.entry-head .source[b-dxityh2gf8] {
    font-weight: 600;
    color: var(--text);
}

.message[b-dxityh2gf8] {
    margin: 0.25rem 0 0;
    overflow-wrap: anywhere;
}

/* Wrapped rather than scrolled sideways, and capped: one long stack trace should not push
   the next five lines off the screen. */
.entry-detail[b-dxityh2gf8] {
    margin: 0.4rem 0 0;
    padding: 0.5rem 0.6rem;
    background: var(--surface-2, transparent);
    border: 1px solid var(--line);
    border-radius: 4px;
    font-size: 0.75rem;
    white-space: pre-wrap;
    overflow-wrap: anywhere;
    max-height: 12rem;
    overflow-y: auto;
}

.meta[b-dxityh2gf8] {
    margin: 0.6rem 0 0;
    font-size: 0.8rem;
    color: var(--muted);
}
/* /Components/Pages/Admin/AdminHome.razor.rz.scp.css */
/* The audit reads as a list of sentences, not a table: who did what is one line of prose,
   and the stamp under it in the muted voice the rest of the app uses for metadata. */
.admin-actions[b-ljssxuq8yy] {
    list-style: none;
    margin: 0;
    padding: 0;
}

.admin-actions li[b-ljssxuq8yy] {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    padding: 0.6rem 0.9rem;
    border-bottom: 1px solid var(--line);
}

.admin-actions li:last-child[b-ljssxuq8yy] {
    border-bottom: 0;
}

.admin-actions .who[b-ljssxuq8yy] {
    color: var(--muted);
    font-size: 0.8rem;
}

.admin-tools[b-ljssxuq8yy] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    color: var(--muted);
}

.admin-tools a[b-ljssxuq8yy] {
    color: var(--text);
    font-weight: 600;
}

/* Not an alert bar at the top: it sits in the flow, because it should read as part of the
   page rather than as something to dismiss. */
.admin-failing[b-ljssxuq8yy] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    color: var(--muted);
}

.admin-failing a[b-ljssxuq8yy] {
    color: var(--warn, var(--text));
    font-weight: 600;
}
/* /Components/Pages/Admin/AdminIngestion.razor.rz.scp.css */
.no-nodes[b-i41ueu1c73] {
    padding: 0.7rem 0.9rem;
    border-left: 3px solid var(--warn, var(--text));
}

.rows[b-i41ueu1c73] {
    list-style: none;
    margin: 0;
    padding: 0;
}

.rows li[b-i41ueu1c73] {
    padding: 0.7rem 0.9rem;
    border-bottom: 1px solid var(--line);
}

.rows li:last-child[b-i41ueu1c73] {
    border-bottom: 0;
}

.rows li.flagged[b-i41ueu1c73] {
    border-left: 3px solid var(--warn, var(--text));
}

.rows .name[b-i41ueu1c73] {
    font-weight: 600;
    margin-right: 0.6rem;
}

.state[b-i41ueu1c73] {
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--muted);
}

.when[b-i41ueu1c73] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.9rem;
    margin: 0.3rem 0 0;
    font-size: 0.8rem;
    color: var(--muted);
}

.error[b-i41ueu1c73] {
    margin: 0.3rem 0 0;
    font-size: 0.85rem;
    word-break: break-word;
}

.lookup[b-i41ueu1c73] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
}

.lookup input[b-i41ueu1c73] {
    flex: 1 1 16rem;
}

.lookup select[b-i41ueu1c73] {
    flex: 1 1 10rem;
}

.body[b-i41ueu1c73] {
    max-height: 24rem;
    overflow: auto;
    white-space: pre-wrap;
    word-break: break-all;
}
/* /Components/Pages/Admin/AdminJobs.razor.rz.scp.css */
/* A list of four things, not a table: each job is a small paragraph — what it does, when it
   ran, and the error when there is one — and an error message has no column width. */
.admin-jobs[b-nvx67qz7ti] {
    list-style: none;
    margin: 0;
    padding: 0;
}

.admin-jobs li[b-nvx67qz7ti] {
    padding: 0.8rem 0.9rem;
    border-bottom: 1px solid var(--line);
}

.admin-jobs li:last-child[b-nvx67qz7ti] {
    border-bottom: 0;
}

/* The one that is broken should be findable without reading the other three. */
.admin-jobs li.failing[b-nvx67qz7ti] {
    border-left: 3px solid var(--warn, var(--text));
}

.job-head[b-nvx67qz7ti] {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.6rem;
}

.job-head .name[b-nvx67qz7ti] {
    font-weight: 600;
}

.state[b-nvx67qz7ti] {
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.state.good[b-nvx67qz7ti] {
    color: var(--muted);
}

.state.bad[b-nvx67qz7ti],
.state.dead[b-nvx67qz7ti] {
    color: var(--warn, var(--text));
}

.what[b-nvx67qz7ti] {
    margin: 0.2rem 0 0;
    color: var(--muted);
}

.when[b-nvx67qz7ti] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.9rem;
    margin: 0.35rem 0 0;
    font-size: 0.8rem;
    color: var(--muted);
}

/* Wrapped rather than scrolled sideways: a stack trace read half a line at a time is the
   dashboard experience this page replaces. */
.job-error[b-nvx67qz7ti] {
    margin: 0.5rem 0 0;
    padding: 0.5rem 0.6rem;
    background: var(--surface-2, transparent);
    border: 1px solid var(--line);
    border-radius: 4px;
    font-size: 0.75rem;
    white-space: pre-wrap;
    overflow-wrap: anywhere;
    max-height: 12rem;
    overflow-y: auto;
}

.retries[b-nvx67qz7ti] {
    margin: 0.3rem 0 0;
    font-size: 0.8rem;
    color: var(--muted);
}

.actions[b-nvx67qz7ti] {
    margin-top: 0.5rem;
    display: flex;
    gap: 0.4rem;
}

.said[b-nvx67qz7ti] {
    color: var(--muted);
}
/* /Components/Pages/Admin/AdminMatches.razor.rz.scp.css */
/* A table rather than the shared MatchList: this screen is about a match's state and the
   three buttons that change it, which a manager's fixture list has no business showing. */
.match-find[b-o9kttnonjy] {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
}

.match-find label[b-o9kttnonjy] {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    font-size: 0.8rem;
    color: var(--muted);
}

.admin-matches[b-o9kttnonjy] {
    width: 100%;
    border-collapse: collapse;
}

.admin-matches th[b-o9kttnonjy] {
    text-align: left;
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--muted);
    padding: 0.5rem 0.9rem;
    border-bottom: 1px solid var(--line);
}

.admin-matches td[b-o9kttnonjy] {
    padding: 0.55rem 0.9rem;
    border-bottom: 1px solid var(--line);
}

.admin-matches tr:last-child td[b-o9kttnonjy] {
    border-bottom: 0;
}

.admin-matches .name[b-o9kttnonjy] {
    font-weight: 600;
}

.admin-matches .when[b-o9kttnonjy] {
    color: var(--muted);
    white-space: nowrap;
}

/* Provisional is the state that matters — final is the resting one, so it stays quiet. */
.state[b-o9kttnonjy] {
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.state.final[b-o9kttnonjy] {
    color: var(--muted);
}

.state.open[b-o9kttnonjy] {
    color: var(--warn, var(--text));
}

.admin-matches .actions[b-o9kttnonjy] {
    text-align: right;
    white-space: nowrap;
}

.admin-matches .actions button[b-o9kttnonjy] {
    margin-left: 0.4rem;
}

.impact[b-o9kttnonjy] {
    font-weight: 600;
}

.impact-leagues[b-o9kttnonjy] {
    margin: 0.3rem 0 0;
    padding-left: 1.1rem;
    color: var(--muted);
}

.said[b-o9kttnonjy] {
    color: var(--muted);
}
/* /Components/Pages/Admin/AdminNodes.razor.rz.scp.css */
.add-node[b-g3rc6kdwim] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
}

.add-node input[b-g3rc6kdwim] {
    flex: 1 1 14rem;
}

/* The one thing on the page that is copied, so it wraps rather than scrolls. */
.join-command[b-g3rc6kdwim] {
    white-space: pre-wrap;
    word-break: break-all;
    user-select: all;
}

.admin-nodes[b-g3rc6kdwim] {
    list-style: none;
    margin: 0;
    padding: 0;
}

.admin-nodes li[b-g3rc6kdwim] {
    padding: 0.8rem 0.9rem;
    border-bottom: 1px solid var(--line);
}

.admin-nodes li:last-child[b-g3rc6kdwim] {
    border-bottom: 0;
}

.admin-nodes li.paused[b-g3rc6kdwim],
.admin-nodes li.revoked[b-g3rc6kdwim] {
    color: var(--muted);
}

.node-head[b-g3rc6kdwim] {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.6rem;
}

.node-head .name[b-g3rc6kdwim] {
    font-weight: 600;
}

.state[b-g3rc6kdwim] {
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--muted);
}

.when[b-g3rc6kdwim] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.9rem;
    margin: 0.35rem 0 0;
    font-size: 0.8rem;
    color: var(--muted);
}

.actions[b-g3rc6kdwim] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-top: 0.6rem;
}

.said[b-g3rc6kdwim] {
    margin: 0.8rem 0.9rem;
    color: var(--muted);
}

.benched[b-g3rc6kdwim] {
    margin: 0.35rem 0 0;
    font-size: 0.85rem;
    color: var(--danger, inherit);
}
/* /Components/Pages/Admin/AdminPlayers.razor.rz.scp.css */
/* The found players are a list of short paragraphs with buttons; the queue of players
   waiting or rejected is a table, below. */
.admin-players[b-wxe64cg1lv] {
    list-style: none;
    margin: 0;
    padding: 0;
}

.admin-players li[b-wxe64cg1lv] {
    padding: 0.8rem 0.9rem;
    border-bottom: 1px solid var(--line);
}

.admin-players li:last-child[b-wxe64cg1lv] {
    border-bottom: 0;
}

.player-head[b-wxe64cg1lv] {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.6rem;
}

.player-head .name[b-wxe64cg1lv] {
    font-weight: 600;
}

.meta[b-wxe64cg1lv] {
    margin: 0.2rem 0 0;
    font-size: 0.8rem;
    color: var(--muted);
}

.player-search[b-wxe64cg1lv] {
    display: flex;
    gap: 0.4rem;
}

.player-search input[b-wxe64cg1lv] {
    flex: 1;
    min-width: 0;
}

.actions[b-wxe64cg1lv] {
    margin-top: 0.5rem;
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
}

.said[b-wxe64cg1lv] {
    color: var(--muted);
}

/* The queue is a table at every width. On a phone it scrolls sideways inside its card with
   the player's name frozen at the left, as the Players page does. */
.queue-scroll[b-wxe64cg1lv] {
    overflow-x: auto;
    position: relative;
}

.admin-queue[b-wxe64cg1lv] {
    width: 100%;
    border-collapse: collapse;
}

.admin-queue th[b-wxe64cg1lv] {
    text-align: left;
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--muted);
    padding: 0.5rem 0.9rem;
    border-bottom: 1px solid var(--line);
    white-space: nowrap;
}

.admin-queue td[b-wxe64cg1lv],
.admin-queue tbody th[b-wxe64cg1lv] {
    padding: 0.55rem 0.9rem;
    border-bottom: 1px solid var(--line);
    vertical-align: middle;
}

.admin-queue tbody tr:last-child td[b-wxe64cg1lv],
.admin-queue tbody tr:last-child th[b-wxe64cg1lv] {
    border-bottom: 0;
}

.admin-queue .who[b-wxe64cg1lv] {
    position: sticky;
    left: 0;
    z-index: 1;
    background: var(--surface);
    box-shadow: 1px 0 0 var(--line);
    white-space: nowrap;
}

.admin-queue tbody .who[b-wxe64cg1lv] {
    font-size: 0.95rem;
    font-weight: 600;
    text-transform: none;
    letter-spacing: 0;
    color: inherit;
}

.admin-queue .club[b-wxe64cg1lv],
.admin-queue .when[b-wxe64cg1lv] {
    white-space: nowrap;
}

.admin-queue .when[b-wxe64cg1lv] {
    color: var(--muted);
    font-size: 0.8rem;
}

.admin-queue .note[b-wxe64cg1lv] {
    display: block;
}

.admin-queue td.actions[b-wxe64cg1lv] {
    display: table-cell;
    margin: 0;
    white-space: nowrap;
}

.admin-queue td.actions button + button[b-wxe64cg1lv] {
    margin-left: 0.4rem;
}

.visually-hidden[b-wxe64cg1lv] {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}

/* The controls above the queue: search and club side by side, the count, and the bulk
   button. On a phone they stack, and nothing here is wider than the screen. */
.queue-controls[b-wxe64cg1lv] {
    padding: 0.75rem 0.9rem 0.5rem;
    border-bottom: 1px solid var(--line);
}

.queue-controls .filters[b-wxe64cg1lv] {
    padding: 0;
}

.queue-controls .filters .search[b-wxe64cg1lv] {
    flex: 1 1 12rem;
    min-width: 0;
}

.queue-controls .showing[b-wxe64cg1lv] {
    margin: 0.4rem 0 0;
}

.queue-controls .bulk[b-wxe64cg1lv] {
    margin-top: 0.5rem;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4rem 0.75rem;
}

.queue-controls .bulk .meta[b-wxe64cg1lv] {
    margin: 0;
}

.queue-empty[b-wxe64cg1lv] {
    padding: 0.5rem 0;
}

@media (max-width: 40rem) {
    .queue-controls .filters[b-wxe64cg1lv],
    .queue-controls .bulk[b-wxe64cg1lv] {
        flex-direction: column;
        align-items: stretch;
    }

    .queue-controls .filters .search[b-wxe64cg1lv] {
        flex: none;
        width: 100%;
    }
}
/* /Components/Pages/Admin/AdminPositionReview.razor.rz.scp.css */
.review[b-54l166cxr0] {
    list-style: none;
    margin: 0;
    padding: 0;
}

.review li[b-54l166cxr0] {
    padding: 0.8rem 0.9rem;
    border-bottom: 1px solid var(--line);
}

.review li:last-child[b-54l166cxr0] {
    border-bottom: 0;
}

.review li.flagged[b-54l166cxr0] {
    border-left: 3px solid var(--warn, var(--text));
}

.head[b-54l166cxr0] {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.6rem;
}

.head .name[b-54l166cxr0] {
    font-weight: 600;
}

.meta[b-54l166cxr0] {
    margin: 0.2rem 0 0;
    font-size: 0.8rem;
    color: var(--muted);
}

.filters[b-54l166cxr0] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
    align-items: center;
}

.filters input[type="search"][b-54l166cxr0] {
    flex: 1 1 10rem;
    min-width: 0;
}

.check[b-54l166cxr0] {
    display: flex;
    gap: 0.3rem;
    align-items: center;
}

.actions[b-54l166cxr0] {
    margin-top: 0.5rem;
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
}

.actions button.suggested[b-54l166cxr0] {
    font-weight: 700;
}

.note[b-54l166cxr0],
.said[b-54l166cxr0] {
    color: var(--muted);
}
/* /Components/Pages/NotificationsPage.razor.rz.scp.css */
/* What to tell you: a row a topic, the box on the left and the words beside it, so a tick
   reads as belonging to the line it sits against. */
.topics[b-chao4iv7av] { display:flex; flex-direction:column; }
.topic[b-chao4iv7av] { display:flex; flex-direction:row; align-items:flex-start; gap:.75rem; padding:.6rem 0; border-top:1px solid var(--line); cursor:pointer; }
.topic:first-of-type[b-chao4iv7av] { border-top:0; padding-top:.1rem; }
.topic input[b-chao4iv7av] { flex:none; width:1.1rem; height:1.1rem; margin:.2rem 0 0; accent-color:var(--accent); }
.words[b-chao4iv7av] { display:flex; flex-direction:column; min-width:0; }
.name[b-chao4iv7av] { font-weight:500; }
.help[b-chao4iv7av] { color:var(--muted); font-size:.85rem; }
.modes[b-chao4iv7av] { border:0; margin:0 0 .6rem 1.85rem; padding:0; display:flex; flex-direction:column; gap:.3rem; }
.modes legend[b-chao4iv7av] { padding:0; margin-bottom:.2rem; }
.mode[b-chao4iv7av] { display:flex; gap:.5rem; align-items:flex-start; font-size:.9rem; cursor:pointer; }
.mode input[b-chao4iv7av] { flex:none; margin:.2rem 0 0; accent-color:var(--accent); }
.save[b-chao4iv7av] { display:flex; align-items:center; gap:.75rem; padding-top:.75rem; border-top:1px solid var(--line); }

.device[b-chao4iv7av] { display:flex; align-items:center; justify-content:space-between; gap:.75rem; flex-wrap:wrap; }
.device p[b-chao4iv7av] { margin:0; }
.hint[b-chao4iv7av] { margin:.5rem 0 0; font-size:.85rem; }

/* The inbox draws its own rows edge to edge, like the feed: a dot for what is unread, the
   title and its line stacked, and the time at the right where it can be scanned down. */
.inbox[b-chao4iv7av] { list-style:none; margin:0; padding:0; }
.inbox li[b-chao4iv7av] { border-top:1px solid var(--line); }
.inbox li:first-child[b-chao4iv7av] { border-top:0; }
.inbox form[b-chao4iv7av] { margin:0; }
.line[b-chao4iv7av] { display:grid; grid-template-columns:.6rem 1fr auto; align-items:start; gap:.75rem; width:100%;
  padding:.65rem 1rem; border:0; border-radius:0; background:none; color:var(--ink); text-align:left; cursor:pointer; }
.line:hover[b-chao4iv7av] { background:var(--tint); }
.dot[b-chao4iv7av] { width:.55rem; height:.55rem; border-radius:50%; margin-top:.4rem; }
.unread .dot[b-chao4iv7av] { background:var(--accent); }
.text[b-chao4iv7av] { display:flex; flex-direction:column; min-width:0; }
.title[b-chao4iv7av] { font-weight:400; }
.unread .title[b-chao4iv7av] { font-weight:700; }
.body[b-chao4iv7av] { color:var(--muted); font-size:.88rem; overflow-wrap:anywhere; }
.when[b-chao4iv7av] { color:var(--muted); font-size:.8rem; font-variant-numeric:tabular-nums; white-space:nowrap; padding-top:.1rem; }
.empty[b-chao4iv7av] { padding:.65rem 1rem .85rem; }
.empty[b-chao4iv7av]  p { margin:0; }

@media (max-width: 40rem) {
  /* The time drops under the words: three columns would leave the text a sliver. */
  .line[b-chao4iv7av] { grid-template-columns:.6rem 1fr; }
  .line .when[b-chao4iv7av] { grid-column:2; padding-top:0; }
}
/* /Components/Pages/Team.razor.rz.scp.css */
/* The bench: the same grass and the same chips as the pitch, with no shape to stand in.
   It carries the `pitch` class because that is the ancestor every chip rule is written
   under — a chip is only ever styled standing somewhere that is a pitch — but the grass
   itself has to be repeated here rather than inherited, because the pitch's own rules are
   scoped to the pitch component and do not reach a wrapper this page draws.

   A wrapping row rather than lines, because a bench has no formation: laying substitutes
   out in rows would invite a manager to read position into where a man is sitting. */
.pitch.bench[b-gxbbqwrulk] { display:flex; flex-direction:row; flex-wrap:wrap; align-items:flex-start;
  justify-content:flex-start; gap:1rem .25rem;
  padding:1rem .75rem; border-radius:8px;
  background:repeating-linear-gradient(#2c8a46 0 12.5%, #26803f 12.5% 25%); }
/* On the pitch a chip takes an equal share of its line; on the bench it takes only its own
   width, so four substitutes do not stretch across the whole bench like a back four. */
.pitch.bench[b-gxbbqwrulk]  .player { flex:0 0 4.5rem; }

.bench h2[b-gxbbqwrulk] { margin-bottom:.5rem; }

/* The round's own state, said in the bar rather than on a chip: "still to play" is about
   the lineup as a whole. Green while there is something left to decide, quiet grey once
   there is not — a finished round is not a warning, it is just over. */
.bar .live[b-gxbbqwrulk] { color:#4ade80; }
.bar .done[b-gxbbqwrulk] { color:#94a3b8; }

/* The week, with the way either side of it. Spaced apart rather than crowded into a
   group, so the round you are on reads as the heading it is and the two steps read as
   somewhere else to go. */
.rounds[b-gxbbqwrulk] { display:flex; align-items:baseline; gap:1rem; margin-bottom:.75rem; }
.rounds strong[b-gxbbqwrulk] { font-size:1.05rem; }
/* /Components/Shared/AddPanel.razor.rz.scp.css */
.add-panel[b-0eurmtt3cm] { display:flex; flex-wrap:wrap; align-items:center; gap:.6rem;
  padding:.5rem .6rem; background:var(--sunk); border-left:3px solid var(--accent); }
.add-panel select[b-0eurmtt3cm] { max-width:100%; }
.add-panel .nothing[b-0eurmtt3cm] { color:var(--muted); }
/* /Components/Shared/AvailabilityBadge.razor.rz.scp.css */
/* The mark itself: shape and colour only. Where it goes is the caller's, because a pitch
   chip hangs it off the shoulder of a circle and a table row sits it after a name, and
   those are the two things that genuinely differ.

   Sized in em throughout, so whoever places it sets how big it is with font-size and the
   drawing stays in proportion rather than needing a second set of numbers per surface. */
.avail[b-ci7tk8kq5f] { display:inline-flex; align-items:center; justify-content:center; flex:none;
         width:1em; height:1em; font-size:.95rem; line-height:0; }

/* Filled disc with a white saltire on it. The disc is the badge's own background rather
   than part of the drawing, so one file serves both colours; a mask paints one colour only.
   Colour is doing the shouting, but the shape is what carries at twelve pixels — which is
   the whole reason this is a cross and not a dot. */
.avail.cross[b-ci7tk8kq5f], .avail.cross-amber[b-ci7tk8kq5f] { border-radius:50%; }
.avail.cross[b-ci7tk8kq5f] { background:#e0262b; }

/* The same disc in amber: same kind of trouble, less certain about it. Deeper than a
   highlighter yellow, because the white cross has to survive being laid over it. */
.avail.cross-amber[b-ci7tk8kq5f] { background:#e8a100; }

/* Short of the disc's edge, the way the cut-out version was. */
.avail.cross[b-ci7tk8kq5f]  .glyph, .avail.cross-amber[b-ci7tk8kq5f]  .glyph { color:#fff; width:.8em; height:.8em; }

.avail.card[b-ci7tk8kq5f]  .glyph { color:#e0262b; }

/* Not injured, not banned — just not available. Grey, because it is a fact rather than a
   warning, and colour is how the eye sorts those two apart before it reads anything. */
.avail.dot[b-ci7tk8kq5f]  .glyph { color:#94a3b8; }

/* On a pitch chip, where it shares a circle with the goals, the cards and the padlock.
   White ring around it so the shape stays separate from the photograph underneath — the
   grass and a kit are both mid-tone, and a red cross laid straight on either of them loses
   its edge. */
.avail.compact[b-ci7tk8kq5f] { font-size:.72rem; border-radius:50%; box-shadow:0 0 0 1.5px #fff; }

/* Only the undrawn-on marks get a white backing. The crosses bring their own disc, and a
   white one here would paint over it at the same specificity — leaving a white cross on
   white, which reads as a blank dot. */
.avail.compact.card[b-ci7tk8kq5f], .avail.compact.dot[b-ci7tk8kq5f] { background:#fff; }
/* /Components/Shared/AvailabilityNotice.razor.rz.scp.css */
/* A band rather than a chip: this is the sheet's one warning, and a warning that has to be
   hunted for is not doing its job. Tinted with the state's own colour so it matches the
   glyph beside the player's name elsewhere rather than introducing a second vocabulary.

   The kind is prefixed here rather than used raw: a suspension's kind is "card", and the
   site already has a .card that lays its contents out in a narrow column — which turned
   this one band into a different shape from the other three. */
/* Spaced like a card, because it sits in the run of them: the cards around it carry a
   rem beneath and nothing above, and a band that hugged the statistics under it read as
   that card's heading rather than as its own warning. */
.notice[b-nf8p28l0am] { display:flex; align-items:center; gap:.55rem; margin:0 0 1rem;
          padding:.55rem .85rem; border-radius:.7rem; line-height:1.35;
          border:1px solid currentColor;
          background:color-mix(in srgb, currentColor 12%, transparent); }

/* Colour on the band itself, and the text a readable weight of it rather than the raw
   hue: a whole sentence in signal red is harder to read than the word that matters. */
.notice.mark-cross[b-nf8p28l0am], .notice.mark-card[b-nf8p28l0am] { color:#e0262b; }
.notice.mark-cross-amber[b-nf8p28l0am] { color:#c47700; }
.notice.mark-dot[b-nf8p28l0am] { color:#64748b; }

.notice span[b-nf8p28l0am] { color:var(--text); }
.notice[b-nf8p28l0am]  .avail { font-size:1.15rem; }
/* /Components/Shared/BackButton.razor.rz.scp.css */
.back[b-avjxoja27g] { background:none; border:1px solid var(--line); border-radius:999px;
  padding:.25rem .8rem; color:var(--ink); font:inherit; cursor:pointer; }
.back:hover[b-avjxoja27g] { background:var(--sunk); }
/* /Components/Shared/Bench.razor.rz.scp.css */
/* The dugout: a strip of the same grass, darker and flat, so the men on it read as the
   same team standing off the pitch rather than as a list under it. */
.bench[b-zmxq4yyf1w] { position:relative; margin:.75rem auto 0; width:100%; max-width:26rem;
  padding:1.4rem .5rem .9rem; border-radius:8px;
  background:#1f5f33; border:1px solid rgba(255,255,255,.12); }
.bench .label[b-zmxq4yyf1w] { position:absolute; top:.35rem; left:0; right:0; text-align:center; font-size:.65rem; font-weight:700;
  letter-spacing:.06em; text-transform:uppercase; color:rgba(255,255,255,.7); }
.bench .line[b-zmxq4yyf1w] { display:flex; flex-wrap:wrap; justify-content:space-evenly; gap:.5rem .25rem; }
/* /Components/Shared/BetaBanner.razor.rz.scp.css */
.beta-banner[b-vifpd2yi2m] {
    padding: .35rem 1.25rem;
    font-size: .85rem;
    text-align: center;
    color: var(--warn);
    background: var(--sunk);
    border-bottom: 1px solid var(--line);
}
/* /Components/Shared/Card.razor.rz.scp.css */
.card-box[b-w3e1qlphkf] { background:var(--surface); border:1px solid var(--line); border-radius:.75rem;
  margin-bottom:1rem; min-width:0; box-shadow:var(--lift); }
/* One header for every card: a tinted band with a rule under it, and the title in the ink
   colour at a title's weight, so a card is named rather than captioned. */
.card-head[b-w3e1qlphkf] { display:flex; align-items:center; justify-content:space-between; gap:.75rem;
  padding:.6rem 1rem; min-height:2.6rem; background:var(--head); border-bottom:1px solid var(--line);
  border-radius:.7rem .7rem 0 0; }
/* A table header band right under the card header is the same band: no rule between them. */
.card-head:has(+ .card-body > table > thead)[b-w3e1qlphkf] { border-bottom-color:var(--head); }
h2[b-w3e1qlphkf] { margin:0; font-size:.95rem; color:var(--ink); font-weight:700; }
.card-actions[b-w3e1qlphkf] { display:flex; align-items:center; gap:.5rem; margin-left:auto; font-size:.85rem; }
.card-body[b-w3e1qlphkf] { padding:.65rem 1rem .85rem; }
.flush .card-body[b-w3e1qlphkf] { padding:0; overflow-x:auto; border-radius:inherit; }
/* Under a header the body only rounds its bottom: its top corners would show the card behind. */
.flush .card-head + .card-body[b-w3e1qlphkf] { border-radius:0 0 .7rem .7rem; }
/* /Components/Shared/CardTabs.razor.rz.scp.css */
.card-tabs[b-9xw3e4wkxc] { display:flex; gap:1rem; }
button[b-9xw3e4wkxc], a[b-9xw3e4wkxc] { background:none; border:0; padding:.2rem .5rem; cursor:pointer; text-decoration:none; font:inherit;
  font-size:.95rem; font-weight:700;
  color:var(--muted); border-bottom:2px solid transparent; }
/* The same mark as the top bar's current tab: accent text and a tinted pill under the underline. */
button.on[b-9xw3e4wkxc] { color:var(--accent); background:color-mix(in srgb, var(--accent) 16%, transparent); border-bottom-color:var(--accent); border-radius:6px 6px 0 0; padding:.2rem .5rem; }
a.on[b-9xw3e4wkxc] { color:var(--accent); background:color-mix(in srgb, var(--accent) 16%, transparent); border-bottom-color:var(--accent); border-radius:6px 6px 0 0; }
button:focus-visible[b-9xw3e4wkxc], a:focus-visible[b-9xw3e4wkxc] { outline:2px solid var(--accent); outline-offset:2px; }
/* /Components/Shared/ClaimPanel.razor.rz.scp.css */
/* A small card floating at the bottom-right, clear of the page's own flow so it stays in
   view while the squad scrolls under it. Its parts are the app's own: a header band, then
   the player in a nested card with his numbers in a strip under his name. */
.claim-dock[b-ddnaakcmos] { position:fixed; right:1rem; bottom:1rem; z-index:40; width:min(21rem, calc(100vw - 2rem));
  display:flex; flex-direction:column; gap:.45rem; padding:0 0 .85rem; background:var(--surface); color:var(--ink);
  border:1px solid var(--accent); border-radius:.8rem; box-shadow:0 10px 30px rgb(0 0 0 / .28); overflow:hidden; }
.claim-dock > :not(.claim-dock-head)[b-ddnaakcmos], .claim-dock[b-ddnaakcmos] >  .claim-card { margin:0 .85rem; }
.claim-dock.minimized[b-ddnaakcmos] { padding-bottom:.85rem; }
.claim-dock-head[b-ddnaakcmos] { display:flex; align-items:center; justify-content:space-between; gap:.5rem;
  padding:.4rem .4rem .4rem .75rem; background:var(--head); border-bottom:1px solid var(--edge); }
.claim-dock-title[b-ddnaakcmos] { font-size:.9rem; line-height:1.2; }
.claim-dock-tools[b-ddnaakcmos] { display:flex; flex:none; }
.claim-dock-head .tool[b-ddnaakcmos] { border:0; background:transparent; font-size:1.15rem; line-height:1; padding:.1rem .45rem; color:var(--muted); }
.claim-says[b-ddnaakcmos] { margin:0; font-size:.9rem; white-space:normal; text-align:left; }
/* Why the claim is shut: the reason is the part to read. */
.claim-blocked[b-ddnaakcmos] { color:var(--warn); }
.claim-actions[b-ddnaakcmos] { display:flex; flex-wrap:wrap; gap:.4rem; }
.claim-actions button[b-ddnaakcmos] { flex:1 1 auto; }
@media (max-width:40rem) { .claim-dock[b-ddnaakcmos] { right:.5rem; bottom:.5rem; width:calc(100vw - 1rem); } }
/* /Components/Shared/ClaimPlayerCard.razor.rz.scp.css */
/* A player in a nested card; only the + and − take colour, green in and red out. */
.claim-card[b-vosb3r7x5k] { display:flex; flex-direction:column; gap:.3rem; padding:.35rem .5rem .4rem; background:var(--nest);
  border:1px solid var(--edge); border-radius:.6rem; box-shadow:var(--lift-sm); min-width:0; }
.claim-card-who[b-vosb3r7x5k] { display:flex; align-items:center; gap:.4rem; font-size:.95rem; font-weight:700; min-width:0; }
.sign[b-vosb3r7x5k] { flex:none; width:1.1rem; text-align:center; font-size:1.2rem; line-height:1; }
.add .sign[b-vosb3r7x5k] { color:#2f8a24; }
.drop .sign[b-vosb3r7x5k] { color:#c92c22; }
.claim-dock-name[b-vosb3r7x5k] { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.claim-card-who[b-vosb3r7x5k]  .crest { width:1.4rem; height:1.4rem; flex:none; }
.badge[b-vosb3r7x5k] { flex:none; display:inline-grid; place-items:center; min-width:1.35rem; height:1.1rem; padding:0 .2rem;
  border-radius:.55rem; font-size:.62rem; font-weight:700; color:#fff; }
.badge.gk[b-vosb3r7x5k] { background:#f0a12f; }
.badge.def[b-vosb3r7x5k] { background:#3b9ae8; }
.badge.mid[b-vosb3r7x5k] { background:#4caf3f; }
.badge.fwd[b-vosb3r7x5k] { background:#ef3b30; }
.claim-stats[b-vosb3r7x5k] { display:flex; flex-wrap:wrap; gap:.25rem; margin:0; padding:0; }
.claim-stats > div[b-vosb3r7x5k] { flex:1 1 2.6rem; display:flex; flex-direction:column; align-items:center; padding:.1rem .25rem;
  background:var(--surface); border:1px solid var(--edge); border-radius:.5rem; }
.claim-stats > div.form[b-vosb3r7x5k] { flex:2 1 6rem; }
.claim-stats dt[b-vosb3r7x5k] { font-size:.62rem; color:var(--muted); font-weight:600; }
.claim-stats dd[b-vosb3r7x5k] { margin:0; display:flex; align-items:center; gap:.2rem; font-size:.8rem; min-height:1.1rem; font-weight:400; }
.claim-stats dd.strong[b-vosb3r7x5k] { font-weight:700; }
.claim-stats dd[b-vosb3r7x5k]  .crest { width:1.1rem; height:1.1rem; }
.claim-stats small[b-vosb3r7x5k] { font-size:.65rem; color:var(--muted); }
/* /Components/Shared/CommissionerMenu.razor.rz.scp.css */
/* The actions in a row that wraps on a phone, with the app's own button styles. */
.commissioner-actions[b-dnz6atozwg] { display:flex; flex-wrap:wrap; gap:.5rem; }

.commissioner-field[b-dnz6atozwg] { display:flex; flex-direction:column; gap:.25rem; margin-bottom:.75rem; }
/* /Components/Shared/ConfirmDialog.razor.rz.scp.css */
/* Over everything, the player sheet included — a drop can be asked from inside it. */
.confirm-backdrop[b-zh4mi7rzam] { position:fixed; inset:0; z-index:60; display:grid; place-items:center;
  padding:1rem; background:rgba(0,0,0,.45); }
.confirm[b-zh4mi7rzam] { width:100%; max-width:26rem; box-sizing:border-box; background:var(--surface);
  border:1px solid var(--line); border-radius:.75rem; padding:1rem 1.1rem;
  box-shadow:0 10px 30px rgba(0,0,0,.25);
  text-align:left; white-space:normal; }
h2[b-zh4mi7rzam] { margin:0 0 .5rem; font-size:1.1rem; }
.body[b-zh4mi7rzam] { color:var(--ink); }
.body :deep(p)[b-zh4mi7rzam] { margin:.35rem 0; }
.body :deep(ul)[b-zh4mi7rzam] { margin:.35rem 0; padding-left:1.2rem; }
.actions[b-zh4mi7rzam] { display:flex; justify-content:flex-end; gap:.5rem; margin-top:1rem; }

/* A phone: the box hugs the screen's width, scrolls inside itself if it is ever taller than
   the screen, and the two buttons share the row rather than crowding one corner. */
.confirm[b-zh4mi7rzam] { max-height:calc(100dvh - 2rem); overflow-y:auto; overflow-wrap:anywhere; }
@media (max-width:40rem) {
  .confirm-backdrop[b-zh4mi7rzam] { padding:.75rem; }
  .confirm[b-zh4mi7rzam] { padding:.8rem .9rem; font-size:.9rem; }
  h2[b-zh4mi7rzam] { font-size:1rem; }
  .actions[b-zh4mi7rzam] { gap:.4rem; margin-top:.75rem; }
  .actions button[b-zh4mi7rzam] { flex:1; padding:.4rem .6rem; font-size:.85rem; }
}
/* /Components/Shared/CupCount.razor.rz.scp.css */
/* Sized by the text around it, like the glyph inside it: beside a name in a table it is
   that name's size, in a heading it is the heading's. */
.cup-count[b-kiycut6814] { display:inline-flex; align-items:center; gap:.3rem; flex:none; white-space:nowrap; }
.metal[b-kiycut6814] { display:inline-flex; align-items:center; gap:.05rem; }
.n[b-kiycut6814] { font-size:.75em; font-weight:700; font-variant-numeric:tabular-nums; color:var(--muted); }
/* /Components/Shared/DraftOrderCard.razor.rz.scp.css */
.order[b-8u6djhhgi7] { list-style:none; padding:0; margin:.5rem 0; }
.order li[b-8u6djhhgi7] { display:flex; align-items:center; gap:.75rem; padding:.5rem .6rem; border:1px solid var(--line); border-radius:8px; margin-bottom:.35rem; background:var(--surface); }
.order li[draggable="true"][b-8u6djhhgi7] { cursor:grab; }
.order li.dragging[b-8u6djhhgi7] { opacity:.5; }
.pos[b-8u6djhhgi7] { width:1.5rem; font-weight:600; color:var(--muted); text-align:right; }
.nudge[b-8u6djhhgi7] { margin-left:auto; display:flex; gap:.25rem; }
.nudge button[b-8u6djhhgi7] { padding:.1rem .5rem; }
.order-actions[b-8u6djhhgi7] { display:flex; justify-content:flex-end; gap:.5rem; }
/* /Components/Shared/DropConfirm.razor.rz.scp.css */
.warn[b-facyi8yyt8] { color:var(--warn); }
/* /Components/Shared/DropPlayer.razor.rz.scp.css */
/* Red outline rather than a red fill: the fill is kept for the confirm, which is the
   button that actually cannot be taken back. */
/* /Components/Shared/EventIcon.razor.rz.scp.css */
.event-icon[b-8zf0nsf11k] { display:inline-block; flex:none; width:1em; height:1em; background:currentColor;
  -webkit-mask:var(--icon) center / contain no-repeat; mask:var(--icon) center / contain no-repeat; }
.event-icon.goal[b-8zf0nsf11k] { --icon:url("/icons/goal.svg"); }
/* The boot is long and thin, so at the ball's size it looks the smaller of the two. */
/* A penalty is the ball in front of the net, and a miss is that struck through: one
   drawing so the two read as the same moment going either way. */
.event-icon.penalty[b-8zf0nsf11k] { --icon:url("/icons/penalty.svg"); }
.event-icon.penalty-miss[b-8zf0nsf11k] { --icon:url("/icons/penalty-miss.svg"); }
/* The strike is red whatever the theme, and a mask paints one colour only. So a miss drops
   the mask from itself: the drawing (with a gap cut where the strike goes) is masked onto
   ::before in the text colour, and the red strike is laid over it on ::after. */
.event-icon.penalty-miss[b-8zf0nsf11k] { position:relative; background:none; -webkit-mask:none; mask:none; }
.event-icon.penalty-miss[b-8zf0nsf11k]::before, .event-icon.penalty-miss[b-8zf0nsf11k]::after { content:""; position:absolute; inset:0; }
.event-icon.penalty-miss[b-8zf0nsf11k]::before { background:currentColor;
  -webkit-mask:var(--icon) center / contain no-repeat; mask:var(--icon) center / contain no-repeat; }
.event-icon.penalty-miss[b-8zf0nsf11k]::after { background:url("/icons/penalty-slash.svg") center / contain no-repeat; }
.event-icon.assist[b-8zf0nsf11k] { --icon:url("/icons/assist.svg"); transform:scale(1.2); }
/* Coming on and going off: a green triangle up, a red one down, whatever the theme — so no
   mask and no text colour, just the shape cut from a coloured square. */
.event-icon.on[b-8zf0nsf11k], .event-icon.off[b-8zf0nsf11k] { -webkit-mask:none; mask:none; }
.event-icon.on[b-8zf0nsf11k] { background:#4caf3f; clip-path:polygon(50% 20%, 85% 75%, 15% 75%); }
.event-icon.off[b-8zf0nsf11k] { background:#ef3b30; clip-path:polygon(15% 25%, 85% 25%, 50% 80%); }
/* /Components/Shared/FeedRow.razor.rz.scp.css */
/* A neutral edge on every line; only a claim the viewer lost is coloured, because that is
   the one line on the page that asks something of them. */
.feed-row[b-ha6jm8g5lx] { display:grid; grid-template-columns:1.15rem 4.5rem 1fr; align-items:start; gap:.75rem; padding:.45rem .6rem .45rem .4rem;
  border-top:1px solid var(--line); border-left:3px solid var(--line); }
.feed-row.lost[b-ha6jm8g5lx] { border-left-color:var(--bad); }
.feed-row.auto .what[b-ha6jm8g5lx] { color:var(--warn); }
/* Quiet, not alarming: the feed is doing its job by keeping the line at all. */
.feed-row.unreadable .what[b-ha6jm8g5lx] { color:var(--muted); font-style:italic; }
.when[b-ha6jm8g5lx] { color:var(--muted); font-size:.8rem; font-variant-numeric:tabular-nums; padding-top:.1rem; }
/* The empty slot on a line nobody owns: it holds the column open and draws nothing. */
.team-avatar.blank[b-ha6jm8g5lx] { background:none; }
/* A long line — the draft order — wraps inside the column instead of widening the page on a phone. */
.feed-row .what[b-ha6jm8g5lx] { min-width:0; overflow-wrap:anywhere; }
/* /Components/Shared/FilterMenu.razor.rz.scp.css */
/* A filter as the league's own apps draw one: a quiet name and a caret, dropping a list. */
.filter-menu[b-1ln9r975ys] { position:relative; }

.trigger[b-1ln9r975ys] { display:inline-flex; align-items:center; gap:.35rem; border:0; background:none;
  padding:.3rem .4rem; font-weight:600; font-size:.9rem; color:inherit; }
/* Narrowed, and saying so while shut. */
.trigger.on[b-1ln9r975ys] { color:var(--accent); background:none; }
.caret[b-1ln9r975ys] { width:.4rem; height:.4rem; border:solid currentColor; border-width:0 1.5px 1.5px 0;
  transform:translateY(-.12rem) rotate(45deg); }
.trigger[aria-expanded="true"] .caret[b-1ln9r975ys] { transform:translateY(.1rem) rotate(225deg); }

.scrim[b-1ln9r975ys] { position:fixed; inset:0; z-index:20; border:0; border-radius:0; padding:0;
  background:transparent; cursor:default; }

.options[b-1ln9r975ys] { position:absolute; top:calc(100% + .3rem); left:0; z-index:21; min-width:11rem;
  max-height:20rem; overflow-y:auto; margin:0; padding:.35rem; list-style:none;
  background:var(--surface); border:1px solid var(--line); border-radius:.6rem;
  box-shadow:0 8px 24px rgb(0 0 0 / .18); }
.options button[b-1ln9r975ys] { display:flex; align-items:center; justify-content:space-between; gap:1rem;
  width:100%; border:0; border-radius:.4rem; background:none; padding:.5rem .7rem;
  text-align:left; font-weight:600; color:inherit; white-space:nowrap; }
.end .options[b-1ln9r975ys] { left:auto; right:0; }
.options button:hover[b-1ln9r975ys] { background:var(--sunk); }
.options button:disabled[b-1ln9r975ys] { opacity:.45; cursor:not-allowed; background:none; }
.options button.on[b-1ln9r975ys] { background:var(--accent); color:#fff; }
.options button.on .tick[b-1ln9r975ys] { width:.35rem; height:.7rem; border:solid currentColor;
  border-width:0 2px 2px 0; transform:translateY(-.1rem) rotate(45deg); }

@media (max-width:40rem) {
  /* A phone: the list is a sheet at the foot of the screen, inside a gutter, so it is on
     screen wherever its button is. Long labels wrap, and a tall list scrolls inside. */
  .scrim[b-1ln9r975ys] { background:rgb(0 0 0 / .35); }
  .options[b-1ln9r975ys], .end .options[b-1ln9r975ys] { position:fixed; top:auto; left:.75rem; right:.75rem; bottom:.75rem;
    min-width:0; max-height:70dvh; }
  .options button[b-1ln9r975ys] { white-space:normal; }
  .trigger[b-1ln9r975ys] { gap:.25rem; padding:.3rem .2rem; font-size:.78rem; white-space:nowrap; }
  .caret[b-1ln9r975ys] { width:.32rem; height:.32rem; }
}
/* /Components/Shared/FormRun.razor.rz.scp.css */
/* The chips and their tones are ScoreChip's; a run only lines them up. */
.run[b-h5a1kfcg1c] { white-space:nowrap; }
.run[b-h5a1kfcg1c]  .chip { margin-left:.15rem; }

/* Every week is kept on a phone too: the tables that hold a run scroll sideways rather than
   dropping what is past the edge. */
/* /Components/Shared/Glyph.razor.rz.scp.css */
/* The shape is a mask rather than a background image, so background-color paints it and a
   class can recolour it. --icon is the only thing that changes per drawing. */
.glyph[b-n9n80y0txv] { display:inline-block; flex:none; width:1em; height:1em; background:currentColor;
  -webkit-mask:var(--icon) center / contain no-repeat; mask:var(--icon) center / contain no-repeat; }

/* Whether a man can play: the cross for injured and doubtful (the disc behind it is the
   caller's, so one drawing serves both colours), the card for a suspension, the dot for
   simply not available. */
.glyph.avail-cross[b-n9n80y0txv] { --icon:url("/icons/avail-cross.svg"); }
.glyph.card[b-n9n80y0txv] { --icon:url("/icons/card.svg"); }
.glyph.dot[b-n9n80y0txv] { --icon:url("/icons/dot.svg"); }

/* Who has him, and the facts down a player's header. */
.glyph.person[b-n9n80y0txv] { --icon:url("/icons/person.svg"); }
.glyph.born[b-n9n80y0txv] { --icon:url("/icons/born.svg"); }
.glyph.height[b-n9n80y0txv] { --icon:url("/icons/height.svg"); }

/* A man we have no photograph of, and the menu's drawing pin. */
.glyph.silhouette[b-n9n80y0txv] { --icon:url("/icons/silhouette.svg"); }
.glyph.pin[b-n9n80y0txv] { --icon:url("/icons/pin.svg"); }

/* Last season's podium, beside a name in the table (#269). One drawing for all three: the
   colour is the medal, and the caller picks it. */
.glyph.medal[b-n9n80y0txv] { --icon:url("/icons/medal.svg"); }

/* A Survival's cup (#299): gold for one won outright, silver for one shared in a draw. The
   same two metals as the medals, so the caller picks the colour here too. */
.glyph.cup[b-n9n80y0txv] { --icon:url("/icons/cup.svg"); }

/* The top bar's destinations: one drawing a link, in the football vocabulary (#467). */
.glyph.podium[b-n9n80y0txv] { --icon:url("/icons/podium.svg"); }
.glyph.shirt[b-n9n80y0txv] { --icon:url("/icons/shirt.svg"); }
.glyph.calendar[b-n9n80y0txv] { --icon:url("/icons/calendar.svg"); }
.glyph.players[b-n9n80y0txv] { --icon:url("/icons/players.svg"); }
.glyph.heart[b-n9n80y0txv] { --icon:url("/icons/heart.svg"); }
.glyph.bell[b-n9n80y0txv] { --icon:url("/icons/bell.svg"); }

/* A toast says what happened: a tick for done, an exclamation for refused. */
.glyph.toast-ok[b-n9n80y0txv] { --icon:url("/icons/toast-ok.svg"); }
.glyph.toast-bad[b-n9n80y0txv] { --icon:url("/icons/toast-bad.svg"); }

/* The side menu's entries: each row carries one, so a glance finds the place. */
/* Not ".draft": app.css has a page-layout class of that name that put a margin and a grid on the icon. */
.glyph.draft-sheet[b-n9n80y0txv] { --icon:url("/icons/draft-sheet.svg"); }
.glyph.settings[b-n9n80y0txv] { --icon:url("/icons/settings.svg"); }
.glyph.switch[b-n9n80y0txv] { --icon:url("/icons/switch.svg"); }
.glyph.plus[b-n9n80y0txv] { --icon:url("/icons/plus.svg"); }
.glyph.admin[b-n9n80y0txv] { --icon:url("/icons/admin.svg"); }
.glyph.clock[b-n9n80y0txv] { --icon:url("/icons/clock.svg"); }
.glyph.key[b-n9n80y0txv] { --icon:url("/icons/key.svg"); }
.glyph.sign-out[b-n9n80y0txv] { --icon:url("/icons/sign-out.svg"); }

/* Takes something out of a list: the draft queue's Remove on a phone (#512). */
.glyph.remove[b-n9n80y0txv] { --icon:url("/icons/remove.svg"); }
/* /Components/Shared/InjuredListBlockNotice.razor.rz.scp.css */
/* A warning band, as the availability notice draws one: claims are shut until it is dealt
   with, so it has to be seen rather than found. */
.injured-list-block[b-70ln6tot4z] { display:flex; flex-wrap:wrap; align-items:center; gap:.55rem .85rem;
                      margin:0 0 1rem; padding:.55rem .85rem; border-radius:.7rem; line-height:1.35;
                      color:var(--warn); border:1px solid currentColor;
                      background:color-mix(in srgb, currentColor 12%, transparent); }
.injured-list-block span[b-70ln6tot4z] { color:var(--ink); flex:1 1 16rem; }
/* /Components/Shared/InjuredListConfirm.razor.rz.scp.css */
.il-drop[b-syscehiizn] { display:flex; gap:.5rem; align-items:center; }
.il-drop select[b-syscehiizn] { flex:1; }
.il-stranded[b-syscehiizn] { margin:.6rem 0 0; color:var(--warn); }

@media (max-width:40rem) {
  .il-drop[b-syscehiizn] { flex-wrap:wrap; }
  .il-drop select[b-syscehiizn] { min-width:0; max-width:100%; }
}
/* /Components/Shared/InjuredListTag.razor.rz.scp.css */
.on-il[b-z1uyzruw3k] { flex:none; display:inline-block; vertical-align:middle; margin-left:.35rem;
  padding:0 .35rem; border-radius:.55rem; font-size:.62rem; font-weight:700;
  line-height:1.1rem; white-space:nowrap; color:#fff; background:#b91c1c; }
/* /Components/Shared/KeyButton.razor.rz.scp.css */
.key-link[b-d2gmsjt0x3] { padding:0; border:0; background:none; font:inherit; font-size:.75rem;
  color:var(--muted); cursor:pointer; }
.key-link:hover[b-d2gmsjt0x3] { color:var(--ink); }
.key-body[b-d2gmsjt0x3] { display:flex; flex-direction:column; align-items:flex-start; gap:.6rem;
  font-size:.85rem; color:var(--muted); }
.key-body[b-d2gmsjt0x3]  .item { display:inline-flex; align-items:center; flex-wrap:wrap; gap:.35rem; }
.key-body[b-d2gmsjt0x3]  .band { display:inline-flex; align-items:center; gap:.2rem; }
.key-body[b-d2gmsjt0x3]  b { color:var(--ink); font-weight:600; }
/* /Components/Shared/LaunchSplash.razor.rz.scp.css */
/* Hidden until launch-splash.js sets data-splash on <html>; the colour is the manifest's
   background_color, so the app's first paint and the splash are the same dark ground. */
.launch-splash[b-kwmklzwr2z] { display:none; }

:root[data-splash] .launch-splash[b-kwmklzwr2z] {
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1.25rem;
    position:fixed; inset:0; z-index:1000; cursor:pointer;
    background:radial-gradient(circle at 50% 45%, #1d0b4a 0, #0b0721 60%);
    transition:opacity .7s ease-in-out;
}
:root[data-splash="leaving"] .launch-splash[b-kwmklzwr2z] { opacity:0; pointer-events:none; }

/* The logo and name swell a touch and soften as the splash fades into the app. */
.launch-splash > *[b-kwmklzwr2z] { transition:transform .7s ease-in-out; }
:root[data-splash="leaving"] .launch-splash > *[b-kwmklzwr2z] { transform:scale(1.06); }

.launch-splash-mark[b-kwmklzwr2z] { width:min(70vw, 22rem); height:auto; overflow:visible; }
.launch-splash-mark path[b-kwmklzwr2z] { stroke-dasharray:1; stroke-dashoffset:0; }
.launch-splash-name[b-kwmklzwr2z] {
    margin:0; font-family:"Avenir Next", system-ui, sans-serif; font-weight:200; font-size:2.3rem;
    letter-spacing:.28em; text-indent:.28em; white-space:nowrap;
}
/* The logo's own purple-to-cyan across the whole word: each letter clips its own slice of it,
   so the letters can appear one by one without the gradient restarting on each. */
.launch-splash-name span[b-kwmklzwr2z] {
    display:inline-block; color:transparent; -webkit-text-fill-color:transparent;
    background:linear-gradient(90deg, #c13cff, #4f7bff, #1fe3ff);
    background-size:calc(var(--n) * 100%) 100%;
    background-position:calc(var(--j) / (var(--n) - 1) * 100%) 0;
    -webkit-background-clip:text; background-clip:text;
}

/* Reduced motion gets the still logo: nothing below applies, and the fade is cut as well. */
@media (prefers-reduced-motion: no-preference) {
    :root[data-splash] .launch-splash-mark path[b-kwmklzwr2z] {
        stroke-dashoffset:1;
        animation:launch-draw-b-kwmklzwr2z .95s ease-out forwards;
        animation-delay:calc(var(--i) * .18s);
    }
    :root[data-splash] .launch-splash-name span[b-kwmklzwr2z] {
        opacity:0; animation:launch-letter-b-kwmklzwr2z .6s cubic-bezier(.2,.8,.2,1) forwards;
        animation-delay:calc(.45s + var(--j) * .15s);
    }
}
@media (prefers-reduced-motion: reduce) {
    :root[data-splash] .launch-splash[b-kwmklzwr2z] { transition:none; }
}
@keyframes launch-draw-b-kwmklzwr2z { to { stroke-dashoffset:0; } }
@keyframes launch-in-b-kwmklzwr2z { to { opacity:1; } }
@keyframes launch-letter-b-kwmklzwr2z { from { opacity:0; transform:translateY(.45em) scale(.85); } to { opacity:1; transform:none; } }
/* /Components/Shared/LeftLeague.razor.rz.scp.css */
.left-pl[b-ht1je9a3th] { flex:none; display:inline-block; vertical-align:middle; margin-left:.35rem;
  padding:0 .35rem; border-radius:.55rem; font-size:.62rem; font-weight:700;
  line-height:1.1rem; white-space:nowrap; color:#fff; background:#6b7280; }
/* /Components/Shared/LineupShortlist.razor.rz.scp.css */
/* In the middle of the screen over a dimmed page: a choice to make before going on. Sized to
   its cards rather than to the page, so two candidates make a small box and not a sheet. */
.shortlist-backdrop[b-vi4942tq6c] { position:fixed; inset:0; z-index:30; background:rgba(0,0,0,.55); }
.shortlist[b-vi4942tq6c] { position:fixed; z-index:31; top:50%; left:50%; transform:translate(-50%, -50%);
  box-sizing:border-box; width:min(26rem, calc(100vw - 2rem)); max-height:calc(100vh - 2rem);
  overflow-y:auto; padding:1rem; background:var(--surface); border:1px solid var(--line);
  border-radius:.9rem; box-shadow:0 1rem 2.5rem rgba(0,0,0,.35); }

header[b-vi4942tq6c] { display:flex; align-items:center; justify-content:space-between; gap:.5rem; }
h3[b-vi4942tq6c] { display:flex; align-items:center; gap:.4rem; margin:0; font-size:1rem; }
.close[b-vi4942tq6c] { flex:none; width:2rem; height:2rem; border:0; border-radius:50%; background:var(--sunk);
  color:var(--ink); font-size:1.2rem; line-height:1; cursor:pointer; }

ul[b-vi4942tq6c] { list-style:none; margin:.8rem 0 0; padding:0; display:grid; gap:.5rem; }
.option[b-vi4942tq6c] { display:grid; grid-template-columns:auto auto 1fr auto; align-items:center; gap:.6rem;
  padding:.6rem .7rem; border:1px solid var(--line); border-radius:.6rem; background:var(--sunk);
  box-sizing:border-box; width:100%; font:inherit; color:var(--ink); text-align:left; cursor:pointer; }
.option:hover:not(:disabled)[b-vi4942tq6c] { border-color:var(--accent); }
/* Shut while saving, and the man already there is not a choice: neither greys out, since
   both are still being read. */
.option:disabled[b-vi4942tq6c] { cursor:default; opacity:1; color:var(--ink); }
/* The man already in the place, marked the way a picked man is everywhere else: amber, as
   his ring on the pitch and his row in the squad table. */
.option.lined[b-vi4942tq6c] { border-color:var(--warn); box-shadow:inset 3px 0 0 var(--warn); }
.option.lined .name[b-vi4942tq6c] { color:var(--warn); }
.crest-slot[b-vi4942tq6c]  .crest { width:1.3rem; height:1.3rem; }

/* The pitch's circle: his photograph, ringed and tinted in his position's colour, with his
   season's points slung under it on a chip shaped like the position badge. */
.face[b-vi4942tq6c] { position:relative; width:2.6rem; height:2.6rem; margin-bottom:.35rem; border-radius:50%;
  border:2px solid; color:#1f2937; }
.face.gk[b-vi4942tq6c] { background:#fde68a; border-color:#eab308; }
.face.def[b-vi4942tq6c] { background:#bfdbfe; border-color:#3b9ae8; }
.face.mid[b-vi4942tq6c] { background:#bbf7d0; border-color:#4caf3f; }
.face.fwd[b-vi4942tq6c] { background:#fecaca; border-color:#ef3b30; }
.points[b-vi4942tq6c] { position:absolute; left:50%; bottom:-.5rem; transform:translateX(-50%);
  display:inline-grid; place-items:center; min-width:1.1rem; height:1.1rem; padding:0 .3rem;
  box-sizing:border-box; border-radius:.55rem; font-size:.62rem; font-weight:700; color:#fff;
  font-variant-numeric:tabular-nums; white-space:nowrap; }
.points.gk[b-vi4942tq6c] { background:#eab308; color:#1f2937; }
.points.def[b-vi4942tq6c] { background:#3b9ae8; }
.points.mid[b-vi4942tq6c] { background:#4caf3f; }
.points.fwd[b-vi4942tq6c] { background:#ef3b30; }

.about[b-vi4942tq6c] { display:grid; gap:.2rem; min-width:0; }
.name[b-vi4942tq6c] { font-weight:700; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.splits[b-vi4942tq6c] { display:flex; gap:.7rem; font-size:.8rem; color:var(--muted); font-variant-numeric:tabular-nums; }

.next[b-vi4942tq6c] { display:flex; justify-content:flex-end; }
.fixture[b-vi4942tq6c] { display:grid; grid-template-columns:1ch 1.3rem; align-items:center; gap:.4rem; }
.fixture[b-vi4942tq6c]  .crest { width:1.3rem; height:1.3rem; }

footer[b-vi4942tq6c] { display:flex; justify-content:center; margin-top:.8rem; padding-top:.8rem; border-top:1px solid var(--line); }
.leave[b-vi4942tq6c] { padding:.35rem .9rem; border:1px solid var(--line); border-radius:999px; background:var(--sunk);
  color:var(--ink); font:inherit; font-size:.75rem; font-weight:700; text-transform:uppercase; cursor:pointer; }
.leave:disabled[b-vi4942tq6c] { opacity:.5; cursor:default; }

@media (max-width:40rem) {
  .shortlist[b-vi4942tq6c] { width:calc(100vw - 1rem); max-height:calc(100dvh - 1rem); padding:.75rem; font-size:.9rem; }
  .option[b-vi4942tq6c] { gap:.4rem; padding:.45rem .5rem; }
  .face[b-vi4942tq6c] { width:2.2rem; height:2.2rem; }
}
/* /Components/Shared/ManagerPointsCard.razor.rz.scp.css */
.bars[b-ystfbjugg2] { list-style:none; margin:0; padding:0; }
.bars li[b-ystfbjugg2] { border-top:1px solid var(--line); }
.round-link[b-ystfbjugg2] { display:grid; grid-template-columns:2.4rem 1fr 2.6rem; align-items:center; gap:.5rem;
  padding:.3rem 0; color:inherit; text-decoration:none; border-radius:.35rem; }
.round-link:hover[b-ystfbjugg2], .round-link:focus-visible[b-ystfbjugg2] { background:var(--sunk); }
.round[b-ystfbjugg2] { display:inline-grid; place-items:center; padding:.1rem .3rem; border-radius:.3rem;
  background:var(--sunk); font-size:.78rem; font-weight:600; }
.track[b-ystfbjugg2] { display:block; min-width:0; }
.bar[b-ystfbjugg2] { display:block; min-height:1.5rem; line-height:1.5rem; padding:0 .45rem; border-radius:.35rem;
  background:#4caf3f; color:#fff; text-align:right; font-weight:700; white-space:nowrap;
  font-variant-numeric:tabular-nums; }
.bar[style^="width:0%"][b-ystfbjugg2] { background:none; color:var(--muted); text-align:left; padding:0; }
.total[b-ystfbjugg2] { display:flex; justify-content:space-between; margin:.5rem 0 0; padding-top:.5rem;
  border-top:1px solid var(--line); }

/* The card names itself, so it draws its own heading rather than handing Card a title —
   and a heading written here needs the look Card gives the ones it writes itself. */
h2[b-ystfbjugg2] { margin:0; font-size:.78rem; text-transform:uppercase; letter-spacing:.05em;
  color:var(--muted); font-weight:600; }
/* /Components/Shared/ManagerProfileCard.razor.rz.scp.css */
.manager-card[b-fafpk5gmok] { background:var(--surface); border:1px solid var(--line); border-radius:.75rem;
  padding:.75rem 1rem; margin-bottom:1rem; }
.who[b-fafpk5gmok] { display:flex; align-items:center; gap:.75rem; flex-wrap:wrap; }
h1[b-fafpk5gmok] { margin:0; font-size:1.35rem; }
.owner[b-fafpk5gmok] { margin:0; color:var(--muted); font-size:.85rem; }
.recent[b-fafpk5gmok] { list-style:none; display:flex; gap:.3rem; margin:0 0 0 auto; padding:0; }
.stats[b-fafpk5gmok] { display:grid; grid-template-columns:repeat(auto-fit, minmax(7rem, 1fr)); gap:.5rem;
  margin:.75rem 0 0; padding-top:.75rem; border-top:1px solid var(--line); }
.stats div[b-fafpk5gmok] { display:flex; flex-direction:column; }
dt[b-fafpk5gmok] { color:var(--muted); font-size:.75rem; }
dd[b-fafpk5gmok] { margin:0; font-weight:700; font-variant-numeric:tabular-nums; }

.honours[b-fafpk5gmok] { margin:.75rem 0 0; padding-top:.75rem; border-top:1px solid var(--line); }
.honours h2[b-fafpk5gmok] { margin:0 0 .4rem; font-size:.75rem; font-weight:600; color:var(--muted);
  text-transform:uppercase; letter-spacing:.04em; }
.honours ol[b-fafpk5gmok] { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:.3rem; }
.honours li[b-fafpk5gmok] { display:flex; align-items:center; gap:.5rem; font-size:.9rem; }
.honours a[b-fafpk5gmok] { color:inherit; text-decoration:none; }
.honours a:hover[b-fafpk5gmok] { text-decoration:underline; }
.honours[b-fafpk5gmok]  .glyph { font-size:1.1rem; flex:none; }
/* Non-podium seasons are listed too, and a dot keeps their text on the same left edge as
   the medalled ones rather than shunting it back and forth down the list. */
.pip[b-fafpk5gmok] { flex:none; width:1.1rem; display:flex; justify-content:center; color:var(--muted); }
.pip[b-fafpk5gmok]::before { content:""; width:.35rem; height:.35rem; border-radius:50%; background:currentColor; }
/* /Components/Shared/MatchEvents.razor.rz.scp.css */
.match-events[b-sdnh3c0sin] { display:inline-flex; align-items:center; gap:.3rem; font-size:.75rem;
  font-weight:700; white-space:nowrap; }
.ev[b-sdnh3c0sin] { display:inline-flex; align-items:center; gap:1px; }
.ev[b-sdnh3c0sin]  .event-icon { font-size:.9rem; }
/* The pitch's card, at a size for a line of text. */
.card[b-sdnh3c0sin] { display:inline-block; width:.5rem; height:.7rem; border-radius:1px;
  border:1px solid rgba(0,0,0,.35); }
.card.yellow[b-sdnh3c0sin] { background:#f2c200; }
.card.red[b-sdnh3c0sin] { background:#e0362a; }
/* /Components/Shared/MatchHeaderLine.razor.rz.scp.css */
.match-header[b-5nbdvsk6b1] { display:flex; align-items:center; justify-content:center; gap:.9rem; width:100%; font-size:.9rem; }
.match-header.compact[b-5nbdvsk6b1] { display:inline-flex; width:auto; gap:.5rem; }
.side[b-5nbdvsk6b1] { display:flex; }
.side[b-5nbdvsk6b1]  .crest { width:1.8rem; height:1.8rem; flex:none; }
.match-header.compact .side[b-5nbdvsk6b1]  .crest { width:1.4rem; height:1.4rem; }
.score[b-5nbdvsk6b1] { font-variant-numeric:tabular-nums; white-space:nowrap; font-size:1.05rem; }
.match-header.compact .score[b-5nbdvsk6b1] { font-size:inherit; }
/* /Components/Shared/MatchSheetDialog.razor.rz.scp.css */
.empty[b-7bhnt697q0] { margin:.5rem 0; text-align:center; }
/* Home beside away where there is room, one under the other on a phone. */
.sides[b-7bhnt697q0] { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:1rem; }
@media (max-width:40rem) { .sides[b-7bhnt697q0] { grid-template-columns:minmax(0, 1fr); } }
h4[b-7bhnt697q0] { display:flex; align-items:center; gap:.4rem; margin:0 0 .4rem; font-size:.85rem; }
h4[b-7bhnt697q0]  .crest { width:1.2rem; height:1.2rem; }
.team-sheet[b-7bhnt697q0] { list-style:none; margin:0; padding:0; display:grid; gap:.25rem; }
/* Each man is a small card of his own, lifted off the sheet by its fill and edge, so the rows
   stand apart in either theme without leaning on a thin rule. */
.team-sheet li[b-7bhnt697q0] { display:grid; grid-template-columns:1.5rem minmax(0, 1fr) auto; align-items:center;
  gap:.4rem; padding:.35rem .5rem; background:var(--surface); border:1px solid var(--edge);
  border-radius:.5rem; font-size:.82rem; }
/* The eleven from the bench: a clear gap before the first substitute, and the bench is tinted. */
.team-sheet li:not(.sub) + li.sub[b-7bhnt697q0] { margin-top:.6rem; }
.team-sheet li.sub[b-7bhnt697q0] { background:var(--sunk); }
.team-sheet li.unused[b-7bhnt697q0] { opacity:.55; }
.shirt[b-7bhnt697q0] { color:var(--muted); font-variant-numeric:tabular-nums; text-align:right; font-size:.75rem; }
.who[b-7bhnt697q0] { min-width:0; display:grid; gap:.15rem; }
.line[b-7bhnt697q0] { display:flex; align-items:center; gap:.35rem; min-width:0; }
.name[b-7bhnt697q0] { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.meta[b-7bhnt697q0] { font-size:.72rem; color:var(--muted); flex-wrap:wrap; }
.meta[b-7bhnt697q0]  .owner-chip { font-size:.68rem; }
.mins[b-7bhnt697q0] { display:inline-flex; align-items:center; gap:.35rem; }
/* The points in the tones of the form run, a size up so they read at a glance. */
.pts[b-7bhnt697q0] { display:flex; justify-content:flex-end; }
.pts[b-7bhnt697q0]  .chip { font-size:.75rem; }
/* On a phone a row is one line: number, position, name, events, then the minutes and owner chip
   on the same line as the name when they fit. The name gives way first, and truncates. */
@media (max-width:40rem) {
  .team-sheet li[b-7bhnt697q0] { padding:.3rem .4rem; gap:.3rem; }
  .who[b-7bhnt697q0] { display:flex; align-items:center; gap:.4rem; }
  .who .line:first-child[b-7bhnt697q0] { flex:1 1 auto; min-width:0; }
  .who .meta[b-7bhnt697q0] { flex:0 1 auto; flex-wrap:nowrap; min-width:0; justify-content:flex-end; }
  .meta[b-7bhnt697q0]  .owner-chip { max-width:6.5rem; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
}
/* /Components/Shared/ModalSheet.razor.rz.scp.css */
/* The shortlist's box: in the middle of the screen, sized to what it holds, scrolling
   inside itself rather than pushing the page. Over the pitch and the bench, under a
   confirmation. */
.sheet-backdrop[b-tgwvx3bht5] { position:fixed; inset:0; z-index:40; background:rgba(0,0,0,.55); }
.sheet[b-tgwvx3bht5] { position:fixed; z-index:41; top:50%; left:50%; transform:translate(-50%, -50%);
  box-sizing:border-box; width:min(28rem, calc(100vw - 2rem)); max-height:calc(100vh - 2rem);
  overflow-y:auto; padding:1rem; background:var(--surface); border:1px solid var(--line);
  border-radius:.9rem; box-shadow:0 1rem 2.5rem rgba(0,0,0,.35); outline:none; }
.sheet.narrow[b-tgwvx3bht5] { width:min(22rem, calc(100vw - 2rem)); }
.sheet.wide[b-tgwvx3bht5] { width:min(44rem, calc(100vw - 2rem)); }

/* The × is pinned to the sheet's corner (the sheet is itself positioned) so it takes no width
   from the heading; the header leaves room for it instead. A 2.75rem target is the touch
   minimum, drawn as a smaller disc. */
header[b-tgwvx3bht5] { position:relative; display:flex; align-items:center; gap:.5rem;
  margin-bottom:.75rem; padding-right:2.5rem; }
/* A match header is centred on the sheet, so it keeps the same room on both sides, and sits
   midway between the sheet's top edge and the rule below (the header's margin is part of the
   room below, so the padding only tops it up to the 1rem the sheet leaves above). */
header:has(.match-header:not(.compact))[b-tgwvx3bht5] { padding-left:2.5rem; padding-bottom:.25rem; }
.title[b-tgwvx3bht5] { min-width:0; flex:1; }
.title[b-tgwvx3bht5]  h3 { display:flex; align-items:center; gap:.4rem; margin:0; font-size:1rem; }
.close[b-tgwvx3bht5] { position:absolute; top:.15rem; right:.15rem; width:2.75rem; height:2.75rem; border:0;
  border-radius:50%; color:var(--ink); font-size:1.5rem; line-height:1; cursor:pointer;
  background:radial-gradient(circle, var(--sunk) 0 1rem, transparent calc(1rem + 1px)); }

@media (max-width:40rem) {
  .sheet[b-tgwvx3bht5], .sheet.narrow[b-tgwvx3bht5], .sheet.wide[b-tgwvx3bht5] { width:calc(100vw - 1rem); max-height:calc(100dvh - 1rem);
    padding:.75rem; font-size:.9rem; border-radius:.7rem; }
  header[b-tgwvx3bht5] { margin-bottom:.5rem; }
  /* The match header gets a row of its own below the corner ×, the full width of the sheet. */
  header:has(.match-header:not(.compact))[b-tgwvx3bht5] { padding:1.25rem 0 .75rem; }
  .title[b-tgwvx3bht5]  h3 { font-size:.95rem; }
}
/* /Components/Shared/NodeHistory.razor.rz.scp.css */
.node-history[b-v0qd11a7ha] {
    margin-top: 0.6rem;
    font-size: 0.85rem;
}

.node-history h4[b-v0qd11a7ha] {
    margin: 0.6rem 0 0.2rem;
}

.node-history ul[b-v0qd11a7ha] {
    margin: 0;
    padding-left: 1.1rem;
}

.node-history .when[b-v0qd11a7ha] {
    margin: 0;
    color: var(--muted);
}
/* /Components/Shared/OwnerChip.razor.rz.scp.css */
/* The claimed chip's pill: rounded, small, bold. Yours is filled with the accent so it stands
   out in a list; another manager's is outlined in ink; the pool reads in its own tone. A long
   team name ellipsises instead of wrapping the pill. */
.owner-chip[b-1rfhiob14y] { display:inline-flex; align-items:center; gap:.35rem; max-width:100%; border:1px solid var(--line);
  border-radius:999px; padding:.15rem .6rem .15rem .45rem; font-size:.8rem; font-weight:600; color:var(--ink); }
.owner-chip .name[b-1rfhiob14y] { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.owner-chip.yours[b-1rfhiob14y] { color:var(--accent); background:var(--tint); border-color:currentColor; }
.owner-chip.waivers[b-1rfhiob14y] { color:var(--warn); border-color:currentColor; }
.owner-chip.free[b-1rfhiob14y] { color:var(--ok); border-color:currentColor; }
.owner-chip.link[b-1rfhiob14y] { text-decoration:none; cursor:pointer; }
.owner-chip.link:hover[b-1rfhiob14y] { border-color:currentColor; }
.owner-chip[b-1rfhiob14y]  .team-avatar { --avatar:1.1rem; margin-left:-.3rem; }

/* Compact (#507): on a phone the status column holds FA, WW or the manager's avatar. The words
   stay in the markup, clipped rather than hidden, so they are still read aloud. */
.owner-chip .short[b-1rfhiob14y] { display:none; }
@media (max-width:40rem) {
  .owner-chip.compact .name[b-1rfhiob14y] { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
  .owner-chip.compact[b-1rfhiob14y] { position:relative; }
  .owner-chip.compact .short[b-1rfhiob14y] { display:inline; }
  .owner-chip.compact.free[b-1rfhiob14y], .owner-chip.compact.waivers[b-1rfhiob14y] { padding:.1rem .5rem; }
  .owner-chip.compact.free[b-1rfhiob14y]  .glyph, .owner-chip.compact.waivers[b-1rfhiob14y]  .glyph { display:none; }
  .owner-chip.compact.yours[b-1rfhiob14y], .owner-chip.compact.owned[b-1rfhiob14y] { padding:.15rem; }
  .owner-chip.compact[b-1rfhiob14y]  .team-avatar { margin-left:0; }
}
/* /Components/Shared/PageErrorBoundary.razor.rz.scp.css */
.page-error[b-aeyw49hpt6] { max-width: 32rem; margin: 2rem auto; text-align: center; }
.page-error code[b-aeyw49hpt6] { user-select: all; }
/* /Components/Shared/PageHeader.razor.rz.scp.css */
/* The site bar's global header rule (a rule under it, padding) is not this one's. */
.page-header[b-neghk0pp4f] { display:block; margin-bottom:1rem; padding:0; border-bottom:none; }
.title-row[b-neghk0pp4f] { display:flex; flex-wrap:wrap; align-items:center; gap:.6rem; }
.has-back .title-row[b-neghk0pp4f] { margin-top:.75rem; }
.who[b-neghk0pp4f] { display:flex; flex-wrap:wrap; align-items:center; gap:.6rem; min-width:0; flex:1 1 auto; }
h1[b-neghk0pp4f] { margin:0; min-width:0; font-size:1.5rem; }
.actions[b-neghk0pp4f] { display:flex; align-items:center; gap:.5rem; margin-left:auto; }
.subtitle[b-neghk0pp4f] { margin:.2rem 0 0; }
.page-header[b-neghk0pp4f]  .claim-panel { margin-top:.75rem; }

/* With a portrait the heading is a card: the picture, round, and beside it the name, actions
   and muted line. The picture fills the circle; what goes in it is the caller's. */
.hero[b-neghk0pp4f] { display:flex; align-items:center; gap:1rem; margin-top:.75rem; padding:1rem;
  border:1px solid var(--line); border-radius:.9rem; background:var(--card, var(--sunk)); }
.portrait[b-neghk0pp4f] { flex:none; position:relative; width:6.5rem; height:6.5rem; border-radius:50%; overflow:hidden;
  background:var(--sunk); color:var(--muted); }
.identity[b-neghk0pp4f] { flex:1 1 auto; min-width:0; }
.hero .title-row[b-neghk0pp4f] { margin-top:0; }
/* Beside a portrait there is little width: the actions sit under the name at its left edge,
   where the eye is, rather than adrift at the far right of a wrapped line. */
.hero .title-row[b-neghk0pp4f] { gap:.4rem .6rem; }
.hero .actions[b-neghk0pp4f] { margin-left:0; flex-wrap:wrap; }
.hero .actions[b-neghk0pp4f]  button { padding:.3rem .8rem; font-size:.85rem; }
.hero h1[b-neghk0pp4f] { font-size:1.6rem; line-height:1.15; overflow-wrap:anywhere; }
@media (max-width: 30rem) {
  .portrait[b-neghk0pp4f] { width:5rem; height:5rem; }
  .hero h1[b-neghk0pp4f] { font-size:1.15rem; }
  .hero[b-neghk0pp4f] { gap:.7rem; padding:.7rem; }
}
/* /Components/Shared/PendingClaims.razor.rz.scp.css */
.pending-claims[b-ry3682lail] { display:grid; gap:.5rem; margin-bottom:1rem; }

details[b-ry3682lail] { background:var(--surface); border:1px solid var(--line); border-radius:.75rem; overflow:hidden; }
summary[b-ry3682lail] { display:flex; align-items:center; gap:.6rem; padding:.6rem .9rem; cursor:pointer;
  list-style:none; background:var(--tint); }
summary[b-ry3682lail]::-webkit-details-marker { display:none; }
/* The open/close arrow: a disc like the round picker's paging arrows, big enough to find and
   tap, rather than a bare glyph at text size. */
summary[b-ry3682lail]::after { content:"▾"; margin-left:auto; flex:none; display:grid; place-items:center;
  width:2rem; height:2rem; border:1px solid var(--line); border-radius:999px;
  background:var(--surface); color:var(--ink); font-size:1.1rem; line-height:1;
  transition:transform .15s, border-color .15s; }
summary:hover[b-ry3682lail]::after { border-color:var(--accent); }
summary:focus-visible[b-ry3682lail] { outline:2px solid var(--accent); outline-offset:-2px; }
details:not([open]) summary[b-ry3682lail]::after { transform:rotate(-90deg); }
.count[b-ry3682lail] { display:inline-grid; place-items:center; min-width:1.5rem; height:1.5rem; border-radius:999px;
  background:var(--accent); color:#fff; font-size:.8rem; font-weight:700; }
.title[b-ry3682lail] { font-weight:600; }
summary .muted[b-ry3682lail] { font-size:.85rem; }

.claims-scroll[b-ry3682lail] { overflow-x:auto; }
table[b-ry3682lail] { width:100%; }
.claims-scroll > table[b-ry3682lail] { width:max-content; min-width:100%; }
table[b-ry3682lail] { border-collapse:collapse; font-size:.9rem; }
th[b-ry3682lail] { text-align:left; color:var(--muted); font-weight:500; font-size:.8rem; padding:.35rem .6rem; }
td[b-ry3682lail] { padding:.35rem .6rem; border-top:1px solid var(--line); }
.num[b-ry3682lail] { width:2.5rem; text-align:center; font-variant-numeric:tabular-nums; }
.order[b-ry3682lail], .remove[b-ry3682lail] { width:1%; white-space:nowrap; text-align:right; }
td[b-ry3682lail] { white-space:nowrap; }
span.name[b-ry3682lail] { font-weight:500; }
button.name[b-ry3682lail] { background:none; border:0; padding:0; font:inherit; font-weight:500; color:var(--accent);
  cursor:pointer; text-align:left; }
.rule[b-ry3682lail] { margin:0; padding:0 .9rem .6rem; color:var(--muted); font-size:.8rem; }
details.how[b-ry3682lail] { border:0; border-top:1px solid var(--line); border-radius:0; background:none; }
details.how > summary[b-ry3682lail] { background:none; padding:.45rem .9rem; font-size:.8rem; color:var(--muted); }
details.how > summary[b-ry3682lail]::after { content:none; }
.sr-only[b-ry3682lail] { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); }

/* Surnames are for a phone only; the full name shows everywhere else. */
.last[b-ry3682lail] { display:none; }
@media (max-width:40rem) {
  summary .muted[b-ry3682lail] { display:none; }
  th:nth-child(3)[b-ry3682lail], td:nth-child(3)[b-ry3682lail] { display:none; }
  /* Nothing to scroll to: last names, a tight table, and a name that gives way with an
     ellipsis rather than pushing the buttons off the card. */
  .claims-scroll[b-ry3682lail] { overflow-x:visible; }
  .claims-scroll > table[b-ry3682lail] { width:100%; min-width:0; table-layout:auto; }
  th[b-ry3682lail], td[b-ry3682lail] { padding-left:.35rem; padding-right:.35rem; }
  .name[b-ry3682lail] { display:none; }
  .last[b-ry3682lail] { display:inline-block; max-width:7.5rem; overflow:hidden; text-overflow:ellipsis; vertical-align:bottom; font-weight:500; }
  button.last[b-ry3682lail] { background:none; border:0; padding:0; font:inherit; font-weight:500; color:var(--accent); cursor:pointer; }
}
td[b-ry3682lail]  .badge { margin-right:.4rem; }
.drop-under[b-ry3682lail] { display:none; }
@media (max-width:40rem) {
  .drop-under[b-ry3682lail] { display:block; margin:.1rem 0 0 1.9rem; font-size:.75rem; color:var(--muted); }
}

/* The reorder arrows and Remove are row tools, not the point of the card: small, and close
   together, so a phone shows more of the claim beside them. */
.order button[b-ry3682lail], .remove button[b-ry3682lail] { padding:.1rem .4rem; font-size:.75rem; line-height:1.3; border-radius:5px; }
.order[b-ry3682lail], .remove[b-ry3682lail] { padding-left:.25rem; padding-right:.25rem; }
/* /Components/Shared/Pitch.razor.rz.scp.css */
/* Grass, mown in bands. No image to load and nothing to keep in step with the palette —
   the stripes and the chalk below are the whole pitch. */
/* Kept narrow and upright. Left to fill the page the pitch came out half as tall as it
   was wide, which is no shape a football pitch has ever been: the lines sat almost on top
   of one another, the centre circle swelled to fill the gap between them, and a back three
   stood so far apart it read as three separate men rather than a defence. A cap on the
   width and a portrait ratio give it the proportions of the thing it is a picture of.
   The cap is the size the pitch is worth drawing at on a desktop, not the size it fits in:
   on the rounds screen the sheet's own 26rem still holds it in beside the table, so it is
   only the Team page — where the pitch is the page — that takes the extra. */
.pitch[b-cpqxu8uejr] { position:relative; overflow:hidden;
  display:flex; flex-direction:column; justify-content:space-around; gap:.5rem;
  padding:1rem .5rem; border-radius:0 0 8px 8px;
  width:100%; max-width:25.5rem; aspect-ratio:3 / 4; margin-inline:auto;
  background:repeating-linear-gradient(#2c8a46 0 12.5%, #26803f 12.5% 25%); }

/* The chalk. Sized in percentages throughout so one set of rules serves a pitch at any
   width, and laid under the players rather than over them: a marking is the thing you
   stop seeing once there is a team standing on it. */
.pitch .markings[b-cpqxu8uejr] { position:absolute; inset:2.5% 3.5%; z-index:0; pointer-events:none;
  border:2px solid rgba(255,255,255,.5); border-radius:2px; }
.pitch .line[b-cpqxu8uejr] { position:relative; z-index:1; }
.pitch .markings .half[b-cpqxu8uejr] { position:absolute; left:0; right:0; top:50%;
  border-top:2px solid rgba(255,255,255,.5); }
/* The centre circle keeps its shape rather than its size: a tall pitch would otherwise
   draw an oval. */
.pitch .markings .centre[b-cpqxu8uejr] { position:absolute; top:50%; left:50%; width:26%;
  aspect-ratio:1; transform:translate(-50%, -50%); border-radius:50%;
  border:2px solid rgba(255,255,255,.5); }
/* Each penalty area brings its own six-yard box and its own D, so one span draws the
   three markings that always arrive together. */
.pitch .markings .box[b-cpqxu8uejr] { position:absolute; left:21%; width:58%; height:15%;
  border:2px solid rgba(255,255,255,.5); }
.pitch .markings .box[b-cpqxu8uejr]::before, .pitch .markings .box[b-cpqxu8uejr]::after { content:"";
  position:absolute; border:2px solid rgba(255,255,255,.5); }
.pitch .markings .box[b-cpqxu8uejr]::before { left:25%; width:50%; height:45%; }
.pitch .markings .box[b-cpqxu8uejr]::after { left:27.5%; width:45%; height:38%; }
.pitch .markings .box:not(.bottom)[b-cpqxu8uejr] { top:0; border-top:0; }
.pitch .markings .box:not(.bottom)[b-cpqxu8uejr]::before { top:0; border-top:0; }
.pitch .markings .box:not(.bottom)[b-cpqxu8uejr]::after { top:100%; border-top:0;
  border-radius:0 0 50% 50% / 0 0 100% 100%; }
.pitch .markings .box.bottom[b-cpqxu8uejr] { bottom:0; border-bottom:0; }
.pitch .markings .box.bottom[b-cpqxu8uejr]::before { bottom:0; border-bottom:0; }
.pitch .markings .box.bottom[b-cpqxu8uejr]::after { bottom:100%; border-bottom:0;
  border-radius:50% 50% 0 0 / 100% 100% 0 0; }
.pitch .line[b-cpqxu8uejr] { display:flex; justify-content:space-evenly; gap:.25rem; }
/* Every place on a line takes an equal share of it and no more: a five-man midfield has to
   fit the same pitch a back three does, and a chip that keeps its width instead walks off
   the grass. */
/* /Components/Shared/PitchChip.razor.rz.scp.css */
/* One man on a team sheet. Split from the pitch's own stylesheet because the chip is
   drawn on the bench too, and a bench chip that dimmed or padlocked differently from a
   pitch chip would make one gesture look like two. Every rule here is written under
   `.pitch` — the ancestor the parent draws — so a chip only ever gets these styles
   standing somewhere that is a pitch or a bench. */
.pitch .player[b-u3bs9q04r6] { position:relative; z-index:1; }
.pitch .player[b-u3bs9q04r6] { display:flex; flex-direction:column; align-items:center; gap:.2rem;
  flex:1 1 0; min-width:0; max-width:5.5rem; }
.pitch .name[b-u3bs9q04r6] { font-size:.7rem; width:100%; color:#fff; text-align:center; line-height:1.2;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:100%; }
/* The circle his photograph sits in — PlayerPhoto fills it, a silhouette until there are
   pictures. The ring and the tint stay here, so a photo never hides which position he plays. */
.pitch .face[b-u3bs9q04r6] { position:relative; width:3.1rem; height:3.1rem; border-radius:999px;
  background:rgba(255,255,255,.82); border:2px solid rgba(255,255,255,.55);
  margin-bottom:.45rem; flex:none; color:#1f2937; }
/* The score is the point of the chip, so it is the loudest thing on the pitch — slung
   under the face and overlapping it, where it reads as this player's number rather than
   as a caption. */
.pitch .badge[b-u3bs9q04r6] { position:absolute; left:50%; bottom:-.55rem; transform:translateX(-50%);
  display:flex; align-items:center; justify-content:center;
  min-width:1.9rem; height:1.1rem; padding:0 .25rem; border-radius:3px;
  font-weight:700; font-size:.7rem;
  font-variant-numeric:tabular-nums; color:#fff; background:#4b5563; }
/* What he did, not just what it was worth: a ball for a goal and a boot for an assist,
   over the shoulder of the face. The count only appears past one, because "1" beside a
   ball says nothing the ball did not. */
.pitch .mark[b-u3bs9q04r6] { position:absolute; z-index:1; display:flex; align-items:center; gap:1px;
  padding:0 3px; height:.95rem; border-radius:999px; font-size:.55rem; font-weight:700;
  background:#f8fafc; color:#111827; border:1px solid rgba(0,0,0,.25);
  line-height:1; white-space:nowrap; }
/* The ball and the boot are EventIcon's, painted in the badge's dark ink. */
.pitch .mark[b-u3bs9q04r6]  .event-icon { font-size:.75rem; }
.pitch .mark.goal[b-u3bs9q04r6] { top:-.25rem; right:-.4rem; }
.pitch .mark.assist[b-u3bs9q04r6] { top:.8rem; right:-.55rem; }
/* A clean sheet and saves on the left shoulder, mirroring the assist on the right. Green,
   because keeping them out is the defence's good news. */
.pitch .mark.defence[b-u3bs9q04r6] { top:.8rem; left:-.6rem; background:#dcfce7; color:#14532d; }
/* His shirt number, set just ahead of the name the way it is on the back of the shirt. */
.pitch .name .shirt[b-u3bs9q04r6] { margin-right:.25rem; font-weight:700; opacity:.75;
  font-variant-numeric:tabular-nums; }
/* A round he did not play: the whole face drained, so a blank reads as a blank before
   anyone reads the badge. */
.pitch .face.dnp[b-u3bs9q04r6] { filter:grayscale(1); opacity:.6; }
/* A booking drawn as a booking: nothing else on a pitch is a small coloured rectangle,
   so it needs no legend and no emoji that renders differently on every machine. */
.pitch .card[b-u3bs9q04r6] { position:absolute; top:-.3rem; left:-.35rem; width:.5rem; height:.7rem;
  border-radius:1px; border:1px solid rgba(0,0,0,.35); }
.pitch .card.yellow[b-u3bs9q04r6] { background:#f2c200; }
.pitch .card.red[b-u3bs9q04r6] { background:#e0362a; }
/* The scoring table's own bands, so a badge on the pitch and a row in the rules are the
   same colour: blue from ten, green from six, orange from one, grey for nothing at all,
   red for a game that cost points. */
.pitch .badge.great[b-u3bs9q04r6] { background:#3b9ae8; }
.pitch .badge.good[b-u3bs9q04r6] { background:#4caf3f; }
.pitch .badge.low[b-u3bs9q04r6] { background:#f0a12f; }
.pitch .badge.nil[b-u3bs9q04r6] { background:#9ca3af; }
.pitch .badge.poor[b-u3bs9q04r6] { background:#ef3b30; }
/* Still to kick off. Mid-round this is the one that matters — it is how a manager tells a
   player who blanked from one who simply has not played yet — and it was outlined to say
   so, which made it the only badge on the pitch with an edge. Every other one is a flat
   fill, so against the grass the outlined one read as a bigger, heavier block than the
   score beside it even though the two measure the same. A band of its own says the same
   thing without breaking the row: the question mark is doing the talking anyway. */
.pitch .badge.soon[b-u3bs9q04r6] { background:#64748b; }
/* Did not play and nobody filled the place read as absences, not as scores. */
.pitch .badge.none[b-u3bs9q04r6] { background:#4b5563; }
.pitch .badge.gap[b-u3bs9q04r6] { background:#4b5563; }
/* Where he plays, for a team being picked rather than one that has been played. Four
   colours a manager already has in his head from every other fantasy game he has used —
   a keeper is amber, a defender blue, a midfielder green, a forward red — because the
   point of them is to be read at a glance while scanning a bench for someone who fits a
   hole, and a palette nobody knows would have to be read twice. Deliberately outside the
   scoring bands above: those say how well he did, these say only what he is. */
.pitch .badge.gk[b-u3bs9q04r6] { background:#eab308; color:#1f2937; }
.pitch .badge.def[b-u3bs9q04r6] { background:#3b9ae8; }
.pitch .badge.mid[b-u3bs9q04r6] { background:#4caf3f; }
.pitch .badge.fwd[b-u3bs9q04r6] { background:#ef3b30; }
/* The circle in the colour of his position, the same four the position badges use but
   softened, so the badge under it — the score — stays the loudest thing on the chip. */
.pitch .face.gk[b-u3bs9q04r6] { background:#fde68a; border-color:#eab308; }
.pitch .face.def[b-u3bs9q04r6] { background:#bfdbfe; border-color:#3b9ae8; }
.pitch .face.mid[b-u3bs9q04r6] { background:#bbf7d0; border-color:#4caf3f; }
.pitch .face.fwd[b-u3bs9q04r6] { background:#fecaca; border-color:#ef3b30; }
/* An unfilled place is marked on the circle rather than on the badge, which is where the
   absence actually is: nobody is standing here, and the badge below is only what it cost. */
.pitch .player.empty .face[b-u3bs9q04r6] { background:rgba(255,255,255,.28);
  border:2px dashed rgba(255,255,255,.6); }
.pitch .player.empty .name[b-u3bs9q04r6] { color:#cbd5e1; font-style:italic; }

/* ---- Picking a side -------------------------------------------------------
   Only the team screen turns these on. A chip that can be moved says so by
   lifting under the cursor; one that cannot says so by sitting still, going
   quiet and wearing a padlock. */
.pitch .player.pick[b-u3bs9q04r6] { background:none; border:0; padding:0; font:inherit; color:inherit;
  cursor:pointer; }
.pitch .face[b-u3bs9q04r6] { transition:transform .12s ease, box-shadow .12s ease; }
.pitch .player.pick:hover .face[b-u3bs9q04r6] { transform:translateY(-3px);
  box-shadow:0 3px 8px rgba(0,0,0,.4); }
.pitch .player.pick:focus-visible[b-u3bs9q04r6] { outline:none; }
.pitch .player.pick:focus-visible .face[b-u3bs9q04r6] { box-shadow:0 0 0 3px rgba(255,255,255,.9); }
/* The man waiting for someone to change places with. Amber rather than white so it is
   plainly a held selection and not merely the keyboard's focus passing through. */
.pitch .player.picked .face[b-u3bs9q04r6] { border-color:#fbbf24;
  box-shadow:0 0 0 3px rgba(251,191,36,.75); }
/* Already out on the pitch. Dimmed and drained of colour so the eye passes over it, and
   padlocked so the reason is on the chip rather than only in a tooltip a phone will never
   show. The element itself is a disabled button, so it is out of the tab order too: this
   is what the chip looks like, not what stops it being pressed. */
.pitch .player.locked[b-u3bs9q04r6] { cursor:not-allowed; background:none; border:0; padding:0;
  font:inherit; color:inherit; opacity:.72; }
.pitch .player.locked .face[b-u3bs9q04r6] { filter:saturate(.55); }
.pitch .player.locked .name[b-u3bs9q04r6] { color:#e2e8f0; }

/* Shut for now, not settled: no use to the gesture half made, but pressable again the
   moment the manager changes his mind. So it fades rather than padlocks — a padlock is a
   promise about the rest of the round, and this is a promise about the next tap. Faded
   further than a locked chip on purpose, because a screen showing both at once has to say
   which one is only temporary, and the temporary one is the one receding. */
.pitch .player.shut[b-u3bs9q04r6] { cursor:not-allowed; background:none; border:0; padding:0;
  font:inherit; color:inherit; opacity:.3; transition:opacity .15s ease; }
/* A padlock, drawn rather than typed: an emoji lock is a different shape on every machine,
   and this one has to read at fourteen pixels. Every part of it is sized as a fraction of
   the disc, because the shape only survives that small if the shackle stays a third of the
   width and the body a half — drawn any finer, the shackle disappears and what is left
   reads as a dot. Bottom-left is the one corner of the face a goal, an assist, a card or
   the badge never wants. */
.pitch .lock[b-u3bs9q04r6] { position:absolute; z-index:2; bottom:.05rem; left:-.45rem;
  width:.95rem; height:.95rem; border-radius:999px;
  background:#111827; border:1px solid rgba(255,255,255,.7); }
/* The body. */
.pitch .lock[b-u3bs9q04r6]::before { content:""; position:absolute; left:50%; bottom:19%;
  transform:translateX(-50%); width:.5rem; height:.34rem; border-radius:1px;
  background:#f8fafc; }
/* The shackle, standing on it. */
.pitch .lock[b-u3bs9q04r6]::after { content:""; position:absolute; left:50%; bottom:47%;
  transform:translateX(-50%); width:.3rem; height:.22rem;
  border:2px solid #f8fafc; border-bottom:0; border-radius:999px 999px 0 0; }

/* The one corner of the face nothing else claims: a goal sits top-right, a card top-left
   and the padlock bottom-left. An empty wrapper when the man is fit — the badge draws
   nothing for that — which costs a span and keeps the corner from shifting when an injury
   appears mid-week. */
.pitch .avail-mark[b-u3bs9q04r6] { position:absolute; z-index:2; bottom:.05rem; right:-.35rem;
                     display:flex; line-height:0; }
/* /Components/Shared/PlayerFactsRow.razor.rz.scp.css */
/* One line when it fits, wrapping between facts (never inside one) on a phone. */
.facts[b-s5jk82fgw1] { display:flex; flex-wrap:wrap; align-items:center; column-gap:1.1rem; row-gap:.35rem;
  margin-top:.5rem; color:var(--muted); font-size:.85rem; font-weight:600; }
.fact[b-s5jk82fgw1] { display:inline-flex; align-items:center; gap:.35rem; white-space:nowrap; }
.fact[b-s5jk82fgw1]  .glyph { width:1.1em; height:1.1em; }
.flag[b-s5jk82fgw1] { width:1.2em; height:1.2em; flex:none; border-radius:50%; object-fit:cover;
  box-shadow:0 0 0 1px var(--line); }
/* /Components/Shared/PlayerMatchDialog.razor.rz.scp.css */
.player-match[b-fxmd888p6m] { display:grid; gap:.4rem; padding:.6rem 0; border-top:1px solid var(--line); }
.player-match:first-child[b-fxmd888p6m] { border-top:0; padding-top:0; }
.how[b-fxmd888p6m] { display:flex; align-items:center; gap:.6rem; flex-wrap:wrap; font-size:.82rem; }
.involvement[b-fxmd888p6m] { display:inline-flex; align-items:center; gap:.35rem; }
/* His points in the tones of the form run, a size up from the pitch. */
.pts[b-fxmd888p6m] { margin-left:auto; display:flex; }
.pts[b-fxmd888p6m]  .chip { font-size:.8rem; }
.breakdown[b-fxmd888p6m] { list-style:none; margin:0; padding:.4rem .6rem; border-radius:.5rem; background:var(--sunk);
  display:grid; gap:.2rem; font-size:.8rem; }
.breakdown li[b-fxmd888p6m] { display:flex; justify-content:space-between; gap:1rem; }
.breakdown b[b-fxmd888p6m] { font-variant-numeric:tabular-nums; }
/* /Components/Shared/PlayerPhoto.razor.rz.scp.css */
/* Fills the circle it is put in and is clipped to it, so the circle — its size, its ring in
   the colour of his position — stays the caller's. */
.photo[b-4auazs26ow] { display:block; width:100%; height:100%; border-radius:inherit; overflow:hidden;
  object-fit:cover; object-position:top; }
.blank[b-4auazs26ow] { display:flex; align-items:flex-end; justify-content:center; }
.blank[b-4auazs26ow]  .glyph { width:88%; height:88%; opacity:.35; }
/* /Components/Shared/PlayerSheet.razor.rz.scp.css */
/* The page's own column, like every other page: main sets the width and the gutters, the
   bar above stays where it is, and the window scrolls as it always does. The list it was
   opened from is stood down by app.css rather than covered over. */
.player-sheet[b-dri6nh65v3] { min-width:0; }

/* A player in the pool is claimed from his sheet; one already claimed says so in the same
   filled accent chip the Players list uses. The form opens under the header. */
.claimed[b-dri6nh65v3] { display:inline-block; border:1px solid currentColor; border-radius:999px; padding:.15rem .6rem;
  font-size:.8rem; font-weight:600; color:var(--accent); background:var(--tint); }
.claim-player.chosen[b-dri6nh65v3], .add-player.chosen[b-dri6nh65v3] { filter:brightness(.85); }

/* The site-wide header rule pads every <header> in from the sides and rules it off, which
   left the card under it narrower than the points and stats cards below. The sheet's header
   is only a way back and the card, so it takes the full width and needs no rule. */
.player-sheet[b-dri6nh65v3]  .page-header { padding:0; border-bottom:none; }

/* The ring round his photo, in his position's colour. The card itself is PageHeader's. */
.ring[b-dri6nh65v3] { position:relative; display:block; width:100%; height:100%; border-radius:50%; }
/* Drawn over the photo rather than behind it, or the picture would cover it. */
.ring[b-dri6nh65v3]::after { content:""; position:absolute; inset:0; border-radius:50%; box-shadow:inset 0 0 0 3px var(--ring); }
.ring.gk[b-dri6nh65v3] { --ring:#f0a12f; } .ring.def[b-dri6nh65v3] { --ring:#3b9ae8; } .ring.mid[b-dri6nh65v3] { --ring:#4caf3f; } .ring.fwd[b-dri6nh65v3] { --ring:#ef3b30; }
.line[b-dri6nh65v3] { display:block; margin-top:.2rem; }
.line[b-dri6nh65v3]  .crest { vertical-align:middle; margin-right:.35rem; }

.badge[b-dri6nh65v3] { flex:none; display:inline-grid; place-items:center; width:1.4rem; height:1.4rem;
  border-radius:.3rem; font-size:.72rem; font-weight:700; color:#fff; }
.badge.gk[b-dri6nh65v3] { background:#f0a12f; }
.badge.def[b-dri6nh65v3] { background:#3b9ae8; }
.badge.mid[b-dri6nh65v3] { background:#4caf3f; }
.badge.fwd[b-dri6nh65v3] { background:#ef3b30; }

/* One line a round: which, against whom, how much, and what happened. */
/* The fixture takes a fixed column rather than a share of the row. It was written to hold
   two team names and kept that room after the names became crests, so on a wide page the
   two badges drifted apart and sat a long way from the round they belong to — a result
   read as three separate things rather than as one scoreline. Two crests and a score is a
   known width, so it is given exactly that and left against the round chip. */
/* The rows share one grid, each row a subgrid of it. The icons stay on one line always, so
   their column is as wide as the busiest round needs — and because every row shares that
   column, every bar still runs in the same track and a 6 and a 27 compare by length. */
.bars[b-dri6nh65v3] { list-style:none; margin:0; padding:0; display:grid;
  grid-template-columns:2.2rem 7.5rem 1fr max-content; column-gap:.5rem; }
.bars li[b-dri6nh65v3] { grid-column:1 / -1; display:grid; grid-template-columns:subgrid;
  align-items:center; padding:.3rem 0; border-top:1px solid var(--line); }
.round[b-dri6nh65v3] { display:inline-grid; place-items:center; min-width:2rem; padding:.1rem .3rem;
  border-radius:.3rem; background:var(--sunk); font-size:.8rem; font-weight:600; }
.fixture[b-dri6nh65v3] { display:flex; align-items:center; gap:.3rem; font-size:.8rem; min-width:0; }
.side[b-dri6nh65v3] { flex:none; color:var(--muted); }
.side.his[b-dri6nh65v3] { color:var(--ink); font-weight:600; }
/* His side's crest carries a ring, now that a crest rather than a name marks the side. */
.side[b-dri6nh65v3]  .crest { vertical-align:middle; width:1.3rem; height:1.3rem; font-size:.45rem; }
.side.his[b-dri6nh65v3]  .crest { box-shadow:0 0 0 2px var(--accent); border-radius:50%; }
.score[b-dri6nh65v3] { flex:none; font-weight:700; font-variant-numeric:tabular-nums; }

/* Where his position changed: one line across the grid, set apart from the rounds. */
.bars li.position-move[b-dri6nh65v3] { background:var(--sunk); border-radius:.4rem; border-left:3px solid var(--accent);
  padding:.45rem .65rem; margin:.3rem 0; }
.position-move .move-text[b-dri6nh65v3] { grid-column:1 / -1; display:flex; flex-wrap:wrap; align-items:baseline; gap:.1rem .5rem; min-width:0; }
.position-move small[b-dri6nh65v3] { color:var(--muted); }
.played-as[b-dri6nh65v3] { display:inline-flex; margin-right:.25rem; }
.played-as[b-dri6nh65v3]  .badge { font-size:.65rem; }

.track[b-dri6nh65v3] { display:block; min-width:0; }
.bar[b-dri6nh65v3] { display:block; height:1.5rem; line-height:1.5rem; padding:0 .45rem; border-radius:.35rem;
  text-align:right; font-weight:700; color:#fff; white-space:nowrap;
  font-variant-numeric:tabular-nums; min-width:1.6rem; box-sizing:border-box; }
.bar.great[b-dri6nh65v3] { background:#3b9ae8; }
.bar.good[b-dri6nh65v3] { background:#4caf3f; }
.bar.low[b-dri6nh65v3] { background:#f0a12f; }
.bar.nil[b-dri6nh65v3] { background:#9ca3af; }
.bar.poor[b-dri6nh65v3] { background:#ef3b30; }
/* No bar at all, just the reason, for the weeks with no score to measure. */
.bar.none[b-dri6nh65v3], .bar.unknown[b-dri6nh65v3] { width:auto !important; text-align:left; padding:0;
  color:var(--muted); font-weight:400; font-size:.8rem; }

.events[b-dri6nh65v3] { display:flex; flex-wrap:nowrap; gap:.2rem; justify-content:flex-end; align-items:center; }
.event[b-dri6nh65v3] { display:inline-block; width:.8rem; height:.8rem; }
/* The ball and the boot come from EventIcon; here they are only sized to the row. */
.events[b-dri6nh65v3]  .event-icon { font-size:1.15rem; }
.event.yellow[b-dri6nh65v3] { width:.55rem; background:#facc15; border-radius:1px; }
.event.red[b-dri6nh65v3] { width:.55rem; background:#ef3b30; border-radius:1px; }

.total[b-dri6nh65v3] { display:flex; justify-content:space-between; margin:.5rem 0 0; padding-top:.5rem;
  border-top:1px solid var(--line); }

/* One line a game: the round on the left, the match dead centre, the kickoff on the right.
   Equal outer columns keep every match on the same centre line down the list. */
.fixtures-ahead[b-dri6nh65v3] { list-style:none; margin:0; padding:0; display:grid; gap:.5rem; }
/* One tile per match: round tag at the edge, crests either side of the kickoff. */
.fixtures-ahead li[b-dri6nh65v3] { position:relative; display:grid; grid-template-columns:1fr auto 1fr; align-items:center;
  justify-items:center; min-height:3.5rem; padding:.5rem 1rem .5rem 3rem; border-radius:.5rem;
  background:var(--surface-2, rgba(255,255,255,.04)); overflow:hidden; }
.fixtures-ahead .round[b-dri6nh65v3] { position:absolute; left:0; top:0; bottom:0; width:2.4rem; display:flex; align-items:center;
  padding-left:.45rem; font-weight:700; font-size:.8rem; background:var(--line);
  clip-path:polygon(0 0, 75% 0, 100% 50%, 75% 100%, 0 100%); }
.fixtures-ahead li[b-dri6nh65v3]  img, .fixtures-ahead li[b-dri6nh65v3]  .crest { width:2rem; height:2rem; }
.fixtures-ahead .kickoff[b-dri6nh65v3] { display:flex; flex-direction:column; align-items:center; line-height:1.2; padding:0 1rem; }
.fixtures-ahead .day[b-dri6nh65v3] { font-size:.85rem; }
.fixtures-ahead .time[b-dri6nh65v3] { font-size:.85rem; color:var(--muted); }

/* Three to a row: the headline number, then how it splits. Six rows since the position
   row and rating joined, drawn tight so the card stays the height its four rows had: small
   labels, snug boxes, the headline only a step bigger than the rest. */
dl[b-dri6nh65v3] { display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:.3rem; margin:0; }
dl div[b-dri6nh65v3] { border:1px solid var(--line); border-radius:.45rem; padding:.2rem .3rem; text-align:center; min-width:0; }
dl div.lead[b-dri6nh65v3] { border-color:transparent; }
dt[b-dri6nh65v3] { color:var(--muted); font-size:.68rem; line-height:1.2; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
dd[b-dri6nh65v3] { margin:0; overflow-wrap:anywhere; font-weight:700; font-size:.95rem; line-height:1.2; }
dl div.lead dd[b-dri6nh65v3] { font-size:1.1rem; }

@media (max-width:40rem) {
  .bars[b-dri6nh65v3] { grid-template-columns:1.7rem 5.9rem 1fr max-content; column-gap:.3rem; }
  .bars li[b-dri6nh65v3] { padding:.2rem 0; }
  .round[b-dri6nh65v3] { min-width:1.7rem; padding:.05rem .2rem; font-size:.7rem; }
  .fixture[b-dri6nh65v3] { gap:.3rem; font-size:.72rem; }
  .side[b-dri6nh65v3]  .crest { width:1.1rem; height:1.1rem; }
  .bar[b-dri6nh65v3] { height:1.2rem; line-height:1.2rem; padding:0 .35rem; font-size:.75rem; }
  .events[b-dri6nh65v3]  .event-icon { font-size:.9rem; }
  .total[b-dri6nh65v3] { margin-top:.35rem; padding-top:.35rem; font-size:.85rem; }
}

/* On a computer screen the sheet splits in two rather than stretching one column across it:
   who he is, his numbers and his next games down the left, the season's points down the
   right. Grid areas place the cards, so the markup keeps the phone's order (header, points,
   next, stats) and the phone keeps its single column. The points card spans every row, and
   the last left-hand row takes the slack, so a long season never pushes the stats apart.

   The header opens into the grid (display:contents) so its Back button can take a row of
   its own across both columns: left inside the header, it sat above the player's card and
   pushed that card below the top of the points card beside it. Now the two cards start on
   the same line. A claim form, which opens under the card, gets its own left-hand row.

   Two columns share what one had, so the type and spacing step down a size to keep the
   room around things rather than cramming them. */
@media (min-width:64rem) {
  .player-sheet[b-dri6nh65v3] { display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, 1.25fr);
    grid-template-rows:auto auto auto auto auto 1fr;
    grid-template-areas:"back back" "head points" "avail points" "claim points" "stats points" "next points";
    column-gap:1rem; align-content:start; align-items:start; }
  .player-sheet[b-dri6nh65v3] >  .page-header { display:contents; }
  .player-sheet[b-dri6nh65v3]  .back { grid-area:back; justify-self:start; margin-bottom:.75rem; }
  .player-sheet[b-dri6nh65v3]  .hero { grid-area:head; margin:0 0 1rem; }
  .player-sheet[b-dri6nh65v3]  .claim-panel { grid-area:claim; margin:0 0 1rem; }
  /* Its own row under his card, above any claim form: both can be open at once on a free
     agent, and sharing a row would lay one over the other. */
  .player-sheet[b-dri6nh65v3]  .notice { grid-area:avail; }
  .player-sheet[b-dri6nh65v3] >  .points { grid-area:points; }
  .player-sheet[b-dri6nh65v3] >  .stats { grid-area:stats; }
  .player-sheet[b-dri6nh65v3] >  .next { grid-area:next; }
  .player-sheet[b-dri6nh65v3] >  .loading { grid-column:1 / -1; }

  .bars li[b-dri6nh65v3] { padding:.2rem 0; }
  .bar[b-dri6nh65v3] { height:1.25rem; line-height:1.25rem; font-size:.8rem; }
  .round[b-dri6nh65v3], .fixture[b-dri6nh65v3] { font-size:.72rem; }
  .side[b-dri6nh65v3]  .crest { width:1.1rem; height:1.1rem; }
  .events[b-dri6nh65v3]  .event-icon { font-size:1rem; }

  .fixtures-ahead[b-dri6nh65v3] { gap:.35rem; }
  .fixtures-ahead li[b-dri6nh65v3] { min-height:2.75rem; padding-top:.35rem; padding-bottom:.35rem; }
  .fixtures-ahead li[b-dri6nh65v3]  img, .fixtures-ahead li[b-dri6nh65v3]  .crest { width:1.6rem; height:1.6rem; }
  .fixtures-ahead .day[b-dri6nh65v3], .fixtures-ahead .time[b-dri6nh65v3] { font-size:.78rem; }

}

.history h4:first-child[b-dri6nh65v3] { margin-top:0; }
.history h4[b-dri6nh65v3], .history h5[b-dri6nh65v3] { margin: .75rem 0 .25rem; }
.history ol[b-dri6nh65v3] { list-style: none; margin: 0; padding: 0; }
.history li[b-dri6nh65v3] { display: grid; gap: .1rem; padding: .4rem 0; border-top: 1px solid var(--line, #0001); }
.history li.current strong[b-dri6nh65v3]::after { content: " · now"; font-weight: normal; opacity: .7; }
.history strong.left[b-dri6nh65v3] { opacity: .6; text-decoration: line-through; }
.history small[b-dri6nh65v3] { opacity: .7; }
/* /Components/Shared/PoolFreezeNotice.razor.rz.scp.css */
/* Information rather than a warning: nothing is wrong, the pool is only waiting. */
.pool-freeze[b-iyh84i04qg] { margin:0 0 1rem; padding:.55rem .85rem; border-radius:.7rem; line-height:1.35;
               border:1px solid var(--line);
               background:color-mix(in srgb, var(--accent) 8%, transparent); }
/* /Components/Shared/PositionBadge.razor.rz.scp.css */
.badge[b-381pqcbmkb] { flex:none; display:inline-grid; place-items:center; vertical-align:middle;
  width:1.1rem; height:1.1rem; padding:0; border-radius:.55rem;
  font-size:.62rem; font-weight:700; color:#fff; }
.gk[b-381pqcbmkb] { background:#f0a12f; }
.def[b-381pqcbmkb] { background:#3b9ae8; }
.mid[b-381pqcbmkb] { background:#4caf3f; }
.fwd[b-381pqcbmkb] { background:#ef3b30; }
/* /Components/Shared/RankChip.razor.rz.scp.css */
.rank[b-zykr0igbn9] { display:inline-flex; align-items:center; justify-content:center;
  min-width:2.3rem; height:1.5rem; padding:0 .3rem; border-radius:5px; background:var(--sunk);
  border:1px solid var(--line); font-size:.78rem; font-weight:700;
  font-variant-numeric:tabular-nums; }
/* /Components/Shared/RecentActivity.razor.rz.scp.css */
a[b-tyl5kirr8w] { font-size:.85rem; color:var(--muted); }
ol[b-tyl5kirr8w] { list-style:none; margin:0; padding:0; }
p[b-tyl5kirr8w] { margin:0; }
/* /Components/Shared/RoundCard.razor.rz.scp.css */
/* The round picker as the card's heading: across the whole head, and a size down from the
   page title it used to be, so it reads as this card's title rather than the page's. */
.round-card-head[b-wihx2yf01b] { flex:1; min-width:0; }
.round-card-head[b-wihx2yf01b]  .round-picker { grid-template-columns:2rem 1fr 2rem; }
.round-card-head[b-wihx2yf01b]  .step { width:2rem; height:2rem; font-size:1rem; }
.round-card-head[b-wihx2yf01b]  h2 { font-size:1rem; text-transform:none; letter-spacing:0; color:var(--ink); }
.round-card-head[b-wihx2yf01b]  .round-note { margin-top:-.4rem; padding-bottom:.35rem; font-size:.72rem; line-height:1.2; }
/* /Components/Shared/RoundPicker.razor.rz.scp.css */
/* Three columns rather than a row: the name sits on the middle of the frame, not on the
   middle of whichever arrows this round happens to have. The first week of a season has
   nothing behind it, and a title that slid left on that one week would be the only thing on
   the screen out of line with the pitch under it. */
.round-picker[b-ch2ijlk5gn] { display:grid; grid-template-columns:2.25rem 1fr 2.25rem; align-items:center;
  gap:.5rem; }

/* Whatever the page puts in the middle, on the middle. ::deep because the heading is the
   page's markup rendered in here — the table hangs a menu off it and the team sheet does
   not, and neither of them should have to know what this frame calls its columns. */
.round-picker .which[b-ch2ijlk5gn] { position:relative; display:flex; align-items:center;
  justify-content:center; gap:.35rem; }
.round-picker[b-ch2ijlk5gn]  h2, .round-picker strong[b-ch2ijlk5gn] { margin:0; font-size:1.15rem; }
/* The name, its caret and the real select stacked on one spot: the select is invisible but
   still the thing being clicked, so the native menu opens where a native menu should and
   nothing has to be reimplemented to make a title look pressable. */
.round-picker[b-ch2ijlk5gn]  .caret { font-size:.7rem; color:var(--muted); }
.round-picker[b-ch2ijlk5gn]  select { position:absolute; inset:0; width:100%; height:100%;
  opacity:0; cursor:pointer; }

/* Paging arrows: discs, so a chevron sits in the middle of one rather than in a button
   shaped for a word. Styled on the class and not on the element, because the same arrow is
   a link on a page that steps by navigating and a button on one that steps in place — and
   it should not read as a bare chevron on one screen and a disc on the other. */
.round-picker .step[b-ch2ijlk5gn] { display:flex; align-items:center; justify-content:center;
  width:2.25rem; height:2.25rem; padding:0; font:inherit; font-size:1.1rem; line-height:1;
  border:1px solid var(--line); border-radius:999px; background:var(--surface);
  color:var(--ink); text-decoration:none; cursor:pointer; }
.round-picker .step:disabled[b-ch2ijlk5gn] { opacity:.45; cursor:not-allowed; }
.round-picker a.step:hover[b-ch2ijlk5gn] { border-color:var(--accent); }

/* Whatever the page has to say about this round — that it is still being played, mostly —
   on the same centre line as the name. */
.round-note[b-ch2ijlk5gn] { margin:0; text-align:center; }
/* /Components/Shared/ScoreChip.razor.rz.scp.css */
/* Small enough that four of them still fit beside a name on a phone; a surface that wants
   it bigger sets font-size and the chip grows with it. */
.chip[b-t3c896siey] { display:inline-grid; place-items:center; min-width:1.85em; height:1.7em; padding:0 .25em;
  border-radius:.2rem; font-size:.62rem; font-weight:700; color:#fff;
  font-variant-numeric:tabular-nums; }
.chip.great[b-t3c896siey] { background:#3b9ae8; }
.chip.good[b-t3c896siey] { background:#4caf3f; }
.chip.low[b-t3c896siey] { background:#f0a12f; }
.chip.nil[b-t3c896siey] { background:#9ca3af; }
.chip.poor[b-t3c896siey] { background:#ef3b30; }
/* A week he did not play, drawn as an absence rather than as a bad game. */
.chip.none[b-t3c896siey] { background:transparent; color:var(--muted);
  box-shadow:inset 0 0 0 1px var(--line); }
/* And a week nothing has scored, drawn as neither: our gap, not his bad game. The dashes
   are the tell — an outline that is not quite a chip, for a week that is not quite a fact. */
.chip.unknown[b-t3c896siey] { background:transparent; color:var(--muted);
  border:1px dashed var(--line); }
.chip-none[b-t3c896siey] { color:var(--muted); }
/* /Components/Shared/SettingField.razor.rz.scp.css */
.setting-field[b-6s1djlg90w] { display:flex; flex-direction:column; gap:.25rem; }
.setting-label[b-6s1djlg90w] { font-size:.85rem; font-weight:500; }
fieldset[b-6s1djlg90w] { border:0; padding:0; margin:0; display:flex; flex-wrap:wrap; gap:.5rem; align-items:center; min-width:0; }
.setting-why[b-6s1djlg90w] { font-size:.8rem; color:var(--muted); }
.locked .setting-label[b-6s1djlg90w] { color:var(--muted); }
/* /Components/Shared/ShellMenu.razor.rz.scp.css */
/* The button. A summary marker would put a disclosure triangle beside it, which is the one
   thing about <details> that reads as a folded-up paragraph rather than as a menu. */
.shell-menu > summary[b-0snjms84xg] { list-style:none; display:flex; align-items:center;
  justify-content:center; gap:.6rem; min-width:2.25rem; height:2.25rem; padding:0 .65rem;
  border:1px solid var(--line); border-radius:8px; cursor:pointer; font-size:.85rem; }
/* The word beside the bars says what the button does now: Menu, or Close once it is open. */
.shell-menu .when-open[b-0snjms84xg], .shell-menu[open] .when-shut[b-0snjms84xg] { display:none; }
.shell-menu[open] .when-open[b-0snjms84xg] { display:inline; }
.shell-menu > summary[b-0snjms84xg]::-webkit-details-marker { display:none; }
.shell-menu > summary:hover[b-0snjms84xg] { border-color:var(--accent); }

/* Over the panel, not under it, and never moved: the button is also the close button, so it
   stays exactly where it was pressed — a button that jumps into the panel leaves a hole in
   the bar, and one the panel has slid across is a button nobody can press. */
.shell-menu > summary[b-0snjms84xg] { position:relative; z-index:22; }

/* Three bars, drawn rather than typed: an ASCII hamburger sits at whatever height the font
   puts it and lines up with nothing. */
.shell-menu .bars[b-0snjms84xg], .shell-menu .bars[b-0snjms84xg]::before, .shell-menu .bars[b-0snjms84xg]::after {
  display:block; width:1rem; height:1px; background:var(--ink); }
.shell-menu .bars[b-0snjms84xg] { position:relative; }
.shell-menu .bars[b-0snjms84xg]::before, .shell-menu .bars[b-0snjms84xg]::after { content:""; position:absolute; }
.shell-menu .bars[b-0snjms84xg]::before { top:-5px; }
.shell-menu .bars[b-0snjms84xg]::after { top:5px; }

/* Open, the bars become a cross: the button that opened the menu is also the one that shuts
   it, and it should say which of those it is about to do. */
.shell-menu[open] .bars[b-0snjms84xg] { background:transparent; }
.shell-menu[open] .bars[b-0snjms84xg]::before { top:0; transform:rotate(45deg); }
.shell-menu[open] .bars[b-0snjms84xg]::after { top:0; transform:rotate(-45deg); }

/* What a click outside the panel lands on. Nothing needs to listen for that click: the page
   under it is covered, so the click is on the shade, and the shade shuts the details. */
.shell-menu .shade[b-0snjms84xg] { position:fixed; inset:var(--shell-top, 0) 0 0 0; z-index:20;
  background:rgba(0,0,0,.32); animation:shell-menu-dim-b-0snjms84xg .18s ease-out; }

/* In from the leading edge, over the page rather than beside it: the app is read on a phone
   as often as not, and a column that pushes the pitch sideways is a column that leaves no
   room for the pitch. Rounded on its open edge and shadowed like the Players page's pinned
   columns, so it sits above the page as the cards do. It is as tall as its content, up to the
   screen, so a short menu is not a slab of nothing. */
.shell-menu .panel[b-0snjms84xg] { position:fixed; top:var(--shell-top, 0); left:0; z-index:21;
  display:flex; flex-direction:column; gap:.5rem; width:min(17.5rem, 82vw);
  max-height:calc(100dvh - var(--shell-top, 0px)); padding:.6rem; overflow-y:auto;
  background:var(--page); border-radius:0 .9rem .9rem 0;
  box-shadow:.4rem 0 .9rem -.2rem rgba(0,0,0,.3); animation:shell-menu-in-b-0snjms84xg .18s ease-out; }

/* It is pulled in from the edge it lives on rather than simply being there: an opening a
   hand can follow. A <details> shows its panel the instant the attribute lands, so this is
   an animation on arrival, not a transition between two states we never hold. --shell-top
   is the bottom of the header, measured in shell-menu.js: the banner above the bar is not
   a fixed height, and a guessed one had the panel cutting the bar in half. */
@keyframes shell-menu-in-b-0snjms84xg { from { transform:translateX(-100%); } }
@keyframes shell-menu-dim-b-0snjms84xg { from { opacity:0; } }

/* Anyone who has asked for less movement gets the menu without the slide. */
@media (prefers-reduced-motion: reduce) {
  .shell-menu .panel[b-0snjms84xg], .shell-menu .shade[b-0snjms84xg] { animation:none; }
}


/* Groups are small cards, not runs of rows between rules: the same fill, edge and rounding as
   the cards on the pages. */
.shell-menu .panel section[b-0snjms84xg] { display:flex; flex-direction:column; gap:.1rem; padding:.3rem;
  background:var(--surface); border:1px solid var(--edge); border-radius:.7rem; }
.shell-menu .panel h2[b-0snjms84xg] { margin:.2rem .5rem .15rem; font-size:.78rem; font-weight:600;
  color:var(--muted); overflow-wrap:anywhere; }

/* One row shape for every entry: an icon, its words, a rounded fill on hover and press. Touch
   sized, and no taller than that. */
.shell-menu .panel a[b-0snjms84xg], .shell-menu .panel button.link[b-0snjms84xg] { display:flex; align-items:center; gap:.6rem;
  width:100%; min-height:2.5rem; padding:.4rem .6rem; border:0; border-radius:.55rem;
  background:none; font:inherit; font-size:.9rem; text-align:left; color:var(--ink);
  text-decoration:none; cursor:pointer; }
/* The words, not the icon: Glyph is a span too, so :not(.glyph) keeps its box out of this. */
.shell-menu .panel a > span:not(.glyph)[b-0snjms84xg], .shell-menu .panel button.link > span:not(.glyph)[b-0snjms84xg] { min-width:0;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; line-height:1.3; }
/* The icon is another component's markup, so it carries that component's isolation scope, not
   this one's: without ::deep none of these rules reached it, and the icon was left at the
   row's own text size, painted in the text colour, as an inline-block. A block, the height of
   a line of words and centred on the row, is the same box in every row whatever drawing is in it. */
.shell-menu .panel a[b-0snjms84xg]  .glyph, .shell-menu .panel button.link[b-0snjms84xg]  .glyph {
  display:block; align-self:center; font-size:1.15rem; color:var(--muted); }
.shell-menu .panel a:hover[b-0snjms84xg], .shell-menu .panel button.link:hover[b-0snjms84xg] { background:var(--tint); }
.shell-menu .panel a:active[b-0snjms84xg], .shell-menu .panel button.link:active[b-0snjms84xg] {
  background:color-mix(in srgb, var(--accent) 24%, transparent); }

/* Where you are: the accent colour, weight and a tinted row. Distinct from keyboard focus,
   which is a ring and only appears for the keyboard (the script moves focus into the panel on
   open, and that must not read as a selection). */
.shell-menu .panel a.here[b-0snjms84xg] { color:var(--accent); font-weight:600;
  background:color-mix(in srgb, var(--accent) 16%, transparent); }
.shell-menu .panel a.here[b-0snjms84xg]  .glyph { color:var(--accent); }
.shell-menu .panel a:focus:not(:focus-visible)[b-0snjms84xg], .shell-menu .panel button:focus:not(:focus-visible)[b-0snjms84xg] { outline:none; }
.shell-menu .panel a:focus-visible[b-0snjms84xg], .shell-menu .panel button:focus-visible[b-0snjms84xg],
.shell-menu > summary:focus-visible[b-0snjms84xg] { outline:2px solid var(--accent); outline-offset:-2px; }

/* Signing out ends something, so it reads as the destructive entry, not one more place to go. */
.shell-menu .panel button.danger[b-0snjms84xg], .shell-menu .panel button.danger[b-0snjms84xg]  .glyph { color:var(--bad); }
.shell-menu .panel button.danger:hover[b-0snjms84xg] { background:color-mix(in srgb, var(--bad) 14%, transparent); }
.shell-menu .panel button.danger:active[b-0snjms84xg] { background:color-mix(in srgb, var(--bad) 24%, transparent); }

/* The account is one block at the foot, pushed down on a tall screen. Its heading is the
   email, shown as typed and cut with an ellipsis rather than wrapped. */
.shell-menu .panel .you[b-0snjms84xg] { margin-top:auto; }
.shell-menu .panel .you h2[b-0snjms84xg] { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; overflow-wrap:normal; }

/* A phone: narrower and denser. */
@media (max-width:40rem) {
  .shell-menu .panel[b-0snjms84xg] { width:min(15rem, 78vw); gap:.4rem; padding:.5rem; }
  .shell-menu .panel a[b-0snjms84xg], .shell-menu .panel button.link[b-0snjms84xg] { min-height:2.4rem; padding:.3rem .55rem; font-size:.88rem; }
}

/* The draft is running (#513): a dot on the button, and the draft room's row picked out. */
.shell-menu > summary .live-dot[b-0snjms84xg] { position:absolute; top:-.2rem; right:-.2rem; width:.6rem; height:.6rem;
  border-radius:50%; background:var(--accent); box-shadow:0 0 0 2px var(--surface); }
.shell-menu .panel a.live[b-0snjms84xg] { font-weight:700; background:color-mix(in srgb, var(--accent) 12%, transparent); }
.shell-menu .panel a.live[b-0snjms84xg]  .glyph { color:var(--accent); }
@media (prefers-reduced-motion: no-preference) {
  .shell-menu > summary .live-dot[b-0snjms84xg] { animation:live-pulse-b-0snjms84xg 1.6s ease-in-out infinite; }
}
@keyframes live-pulse-b-0snjms84xg { 50% { opacity:.45; } }
/* /Components/Shared/ShellTabs.razor.rz.scp.css */
/* One row; each link an icon above its label (#467). The links share the width, so six fit a
   phone; the row still scrolls as a last resort rather than wrapping onto two lines. */
.shell-tabs[b-r4xm5kxd7q] { display:flex; gap:.25rem; min-width:0; overflow-x:auto; scrollbar-width:none; }
.shell-tabs[b-r4xm5kxd7q]::-webkit-scrollbar { display:none; }
.shell-tabs a[b-r4xm5kxd7q] { flex:1 0 auto; display:flex; flex-direction:column; align-items:center; gap:.1rem;
  padding:.35rem .7rem; border-radius:6px; color:var(--muted);
  text-decoration:none; font-weight:500; white-space:nowrap; }
.shell-tabs a:hover[b-r4xm5kxd7q] { color:var(--ink); background:var(--sunk); }
/* The current page: the accent on icon and label over a tinted pill, with the underline as a
   second cue. Hover stays the plain grey wash, so "here" is never mistaken for "under the
   pointer" (#485). */
.shell-tabs a.here[b-r4xm5kxd7q] { color:var(--accent); font-weight:700; background:color-mix(in srgb, var(--accent) 16%, transparent);
  box-shadow:inset 0 -2px 0 var(--accent); border-radius:6px 6px 0 0; }
.shell-tabs a.here:hover[b-r4xm5kxd7q] { background:color-mix(in srgb, var(--accent) 16%, transparent); color:var(--accent); }
.shell-tabs a:focus:not(:focus-visible)[b-r4xm5kxd7q] { outline:none; }
.shell-tabs a:focus-visible[b-r4xm5kxd7q] { outline:2px solid var(--accent); outline-offset:-2px; }

/* Six links on a phone: tighter, so most of them fit before the row has to scroll. */
@media (max-width: 30rem) {
  .shell-tabs[b-r4xm5kxd7q] { gap:0; }
  .shell-tabs a[b-r4xm5kxd7q] { flex:1 1 auto; min-width:0; padding:.3rem .45rem; font-size:.6rem; }
}
.shell-tabs a[b-r4xm5kxd7q]  .glyph { font-size:1.1rem; }

/* The draft is running (#513): its tab is set in bold, in the accent, so it cannot be missed
   without looking like the selected tab's fill. */
.shell-tabs a.live[b-r4xm5kxd7q] { color:var(--accent); font-weight:800; }
/* /Components/Shared/SquadTable.razor.rz.scp.css */
/* What the squad table is when it is also the thing the manager picks his eleven with.

   The table itself — its columns, its badges, its numbers — is app.css's, because the
   Players page draws the same table over the whole league and the two must not drift.
   What is here is only the picking: which row is in the eleven, which is settled, and
   which man is currently in hand.
*/
/* The one thing this table exists to show at a glance: which of these fifteen is actually
   playing on Saturday. A bar down the left and a wash behind, the same way the standings
   mark the row that is yours — a heavier tint would fight the badge and the form chips,
   which are the other coloured things in the row. */
.squad tbody tr.out > *[b-a71gq5zo52] { background:var(--tint); }
.squad tbody tr.out > *:first-child[b-a71gq5zo52] { box-shadow:inset 3px 0 0 var(--ok); }
.squad tbody tr.il > *:first-child[b-a71gq5zo52] { box-shadow:inset 3px 0 0 var(--bad); }

.squad tbody tr.locked[b-a71gq5zo52] { opacity:.55; }
.squad tbody tr.shut[b-a71gq5zo52] { opacity:.35; }

/* Chosen, and waiting for somewhere to go. Said with the row's own left edge and the name
   turning amber, rather than a box drawn round it: an outline reads as a control the cursor
   has landed on, where this is a man the manager has picked up and is carrying. */
.squad tbody tr.picked > *[b-a71gq5zo52] { background:var(--sunk); }
.squad tbody tr.picked > *:first-child[b-a71gq5zo52] { box-shadow:inset 3px 0 0 var(--warn); }
.squad tbody tr.picked .name[b-a71gq5zo52] { color:var(--warn); font-weight:700; }

/* The bench, offered as somewhere to drop him. Amber to match the man in hand, dashed
   because it is a place rather than a thing — the same language the empty places on the
   pitch are drawn in. */
.drop[b-a71gq5zo52] { display:block; width:100%; margin:0 0 .5rem; padding:.5rem;
  background:none; border:1px dashed var(--warn); border-radius:.4rem;
  color:var(--warn); font:inherit; font-weight:600; cursor:pointer; }
.drop:hover:not(:disabled)[b-a71gq5zo52] { background:var(--sunk); }
.drop:disabled[b-a71gq5zo52] { cursor:default; opacity:.5; }

/* The name cell is the control. A button that fills its cell and looks like the text in it:
   the row is what gets pressed, and nothing should suggest a smaller target inside it. */
.squad th.who button[b-a71gq5zo52] { display:flex; align-items:center; gap:.45rem; width:100%;
  background:none; border:0; border-radius:0; padding:0; font:inherit; color:inherit;
  text-align:left; cursor:pointer; }
.squad th.who button:disabled[b-a71gq5zo52] { cursor:default; }
.squad tbody tr.pick:hover > *[b-a71gq5zo52] { background:var(--sunk); }

/* Out on the pitch and no longer anyone's to move: the same padlock the chips draw. */
.squad .lock[b-a71gq5zo52] { flex:none; width:.5rem; height:.6rem; border-radius:1px;
  border:1px solid var(--muted); position:relative; }
.squad .lock[b-a71gq5zo52]::before { content:""; position:absolute; left:.05rem; top:-.22rem;
  width:.3rem; height:.25rem; border:1px solid var(--muted); border-bottom:0;
  border-radius:.2rem .2rem 0 0; }

/* The table keeps its columns and takes the width it needs; the box around it is what gives
   way on a narrow screen. min-width so it still fills a wide one. */
.squad-scroll[b-a71gq5zo52] { overflow-x:auto; }
.squad-scroll > table.squad[b-a71gq5zo52] { width:max-content; min-width:100%; }

/* A shade smaller than the name it follows, so the row still reads as a name with a note
   against it rather than as two things of equal weight. */
.squad th.who button[b-a71gq5zo52]  .avail { font-size:.85rem; }
/* /Components/Shared/StatGroups.razor.rz.scp.css */
/* Folds under the Statistics card's boxes: a hairline between each, a heading that reads as
   a row of the card rather than a panel of its own, and label-left, number-right lines. */
.stat-groups[b-nqklwm1tv0] { margin-top:.6rem; border-top:1px solid var(--line); }
details[b-nqklwm1tv0] { border-bottom:1px solid var(--line); }
summary[b-nqklwm1tv0] { display:flex; align-items:center; padding:.5rem 0; cursor:pointer; list-style:none;
  font-size:.8rem; font-weight:600; text-transform:uppercase; letter-spacing:.04em; }
summary[b-nqklwm1tv0]::-webkit-details-marker { display:none; }
summary[b-nqklwm1tv0]::after { content:"▾"; margin-left:auto; color:var(--muted); transition:transform .15s; }
details:not([open]) summary[b-nqklwm1tv0]::after { transform:rotate(-90deg); }
summary:focus-visible[b-nqklwm1tv0] { outline:2px solid var(--accent); outline-offset:2px; }
dl[b-nqklwm1tv0] { margin:0 0 .5rem; }
dl div[b-nqklwm1tv0] { display:flex; justify-content:space-between; gap:1rem; padding:.25rem 0; font-size:.85rem; }
dl div + div[b-nqklwm1tv0] { border-top:1px solid var(--line); }
dt[b-nqklwm1tv0] { color:var(--muted); min-width:0; }
dd[b-nqklwm1tv0] { margin:0; font-weight:600; font-variant-numeric:tabular-nums; white-space:nowrap; }
/* /Components/Shared/StatusKey.razor.rz.scp.css */
.status-key[b-qtkoncczc0] { margin:.5rem 0; }
/* /Components/Shared/SubMarks.razor.rz.scp.css */
.sub-mark[b-h4txk5tkgl] { display:inline-flex; align-items:center; gap:.1rem; white-space:nowrap;
  font-variant-numeric:tabular-nums; }
.sub-mark[b-h4txk5tkgl]  .event-icon { font-size:1.1em; }
/* /Components/Shared/SurvivalDrawNotice.razor.rz.scp.css */
/* Above the picker: an answer the whole Survival is waiting on comes before this round's pick. */
.survival-draw[b-v3nra4998g] { border:1px solid var(--line); border-left:3px solid #9aa3ab; border-radius:.5rem;
  padding:.5rem .75rem; margin-bottom:.75rem; background:var(--sunk); }
.survival-draw p[b-v3nra4998g] { margin:0; }
.answer[b-v3nra4998g] { display:flex; flex-wrap:wrap; gap:.5rem; margin-top:.5rem; }
/* /Components/Shared/SurvivalGrid.razor.rz.scp.css */
/* Wide Survivals scroll sideways inside their card rather than pushing the page wider. */
.survival-grid-wrap[b-7mf1xwo6ac] { overflow-x:auto; }
.survival-grid[b-7mf1xwo6ac] { border-collapse:collapse; width:100%; font-size:.9rem; }
.survival-grid th[b-7mf1xwo6ac], .survival-grid td[b-7mf1xwo6ac] { padding:.35rem .4rem; text-align:center; white-space:nowrap; }
.survival-grid thead th[b-7mf1xwo6ac] { font-size:.75rem; text-transform:uppercase; letter-spacing:.04em; color:var(--ink); font-weight:700; background:var(--head); border-bottom:1px solid var(--edge); }
.survival-grid .who[b-7mf1xwo6ac] { text-align:left; font-weight:500; }
.survival-grid .standing[b-7mf1xwo6ac] { display:block; font-size:.75rem; color:var(--muted); font-weight:400; }
.survival-grid .lives[b-7mf1xwo6ac] { color:var(--bad); letter-spacing:.05em; }
.survival-grid tbody tr[b-7mf1xwo6ac] { border-top:1px solid var(--line); }
.survival-grid tr.me .who[b-7mf1xwo6ac] { font-weight:700; }
.survival-grid tr.out[b-7mf1xwo6ac] { opacity:.55; }

/* Each pick sits on its result's colour: green through, amber a draw, red a loss. */
.survival-grid .pick[b-7mf1xwo6ac] { border-radius:.4rem; }
.survival-grid .pick.won[b-7mf1xwo6ac] { background:color-mix(in srgb, var(--ok) 22%, transparent); }
.survival-grid .pick.drew[b-7mf1xwo6ac] { background:color-mix(in srgb, var(--warn) 25%, transparent); }
.survival-grid .pick.lost[b-7mf1xwo6ac] { background:color-mix(in srgb, var(--bad) 22%, transparent); }
.survival-grid .pick.missed[b-7mf1xwo6ac] { background:color-mix(in srgb, var(--bad) 10%, transparent); }
.survival-grid .pick.pending[b-7mf1xwo6ac], .survival-grid .pick.hidden[b-7mf1xwo6ac] { background:color-mix(in srgb, var(--muted) 14%, transparent); }
.survival-grid .pick.void[b-7mf1xwo6ac] { background:color-mix(in srgb, var(--muted) 6%, transparent); }
.survival-grid .mark[b-7mf1xwo6ac] { opacity:.7; }
.survival-grid[b-7mf1xwo6ac]  .crest { width:1.4rem; height:1.4rem; vertical-align:middle; }
/* /Components/Shared/SurvivalPicker.razor.rz.scp.css */
.picker-status[b-5oqtor0ayu] { display:flex; flex-wrap:wrap; justify-content:space-between; gap:.25rem .75rem; margin:0 0 .25rem; }
.picker-lives[b-5oqtor0ayu] { color:var(--muted); white-space:nowrap; }
.picker-lives span[b-5oqtor0ayu] { color:var(--bad); }
.picker-locks[b-5oqtor0ayu] { margin:0 0 .5rem; color:var(--muted); font-size:.9rem; }

/* Home, kickoff, away: a scoreboard's shape, with each side a button to back. */
.picker-matches[b-5oqtor0ayu] { list-style:none; margin:.5rem 0 1.25rem; padding:0; display:flex; flex-direction:column; gap:.4rem; }
.picker-matches li[b-5oqtor0ayu] { display:grid; grid-template-columns:1fr auto 1fr; gap:.5rem; align-items:center; }
.picker-when[b-5oqtor0ayu] { font-size:.75rem; color:var(--muted); text-align:center; white-space:nowrap; }
.picker-club[b-5oqtor0ayu] { background:var(--nest); border-color:var(--edge); box-shadow:var(--lift-sm); display:flex; align-items:center; gap:.4rem; min-width:0; }
.picker-matches li > .picker-club:last-child[b-5oqtor0ayu] { flex-direction:row-reverse; }
.picker-club .club[b-5oqtor0ayu] { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.picker-club[b-5oqtor0ayu]  .crest { width:1.5rem; height:1.5rem; flex:none; }
.picker-club.picked[b-5oqtor0ayu] { border-color:var(--accent); background:color-mix(in srgb, var(--accent) 15%, var(--surface)); font-weight:600; }
.picker-club.picked:disabled[b-5oqtor0ayu] { opacity:1; }
.picker-club.used[b-5oqtor0ayu], .picker-club.kickedoff[b-5oqtor0ayu], .picker-club.locked[b-5oqtor0ayu] { opacity:.45; }
.picker-club.used .club[b-5oqtor0ayu] { text-decoration:line-through; }

/* Kickoff drops under the sides on a phone, so each club keeps a readable name. */
@media (max-width: 30rem) {
    .picker-matches li[b-5oqtor0ayu] { grid-template-columns:1fr 1fr; }
    .picker-when[b-5oqtor0ayu] { grid-column:1 / -1; grid-row:1; }
    .picker-matches li[b-5oqtor0ayu] { gap:.3rem; }
    .picker-club[b-5oqtor0ayu] { gap:.25rem; padding:.3rem .4rem; font-size:.75rem; }
    .picker-club[b-5oqtor0ayu]  .crest { width:1.2rem; height:1.2rem; }
}
/* /Components/Shared/SurvivalStandings.razor.rz.scp.css */
.survival-standings[b-vl4kmvw8t1] { border-collapse:collapse; width:100%; font-size:.9rem; }
.survival-standings th[b-vl4kmvw8t1], .survival-standings td[b-vl4kmvw8t1] { padding:.4rem .75rem; }
.survival-standings thead th[b-vl4kmvw8t1] { font-size:.75rem; text-transform:uppercase; letter-spacing:.04em;
  color:var(--ink); font-weight:700; background:var(--head); border-bottom:1px solid var(--edge); }
.survival-standings tbody tr[b-vl4kmvw8t1] { border-top:1px solid var(--line); }
.survival-standings .who[b-vl4kmvw8t1] { text-align:left; font-weight:500; }
.survival-standings .num[b-vl4kmvw8t1] { text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
.survival-standings tr.me .who[b-vl4kmvw8t1] { font-weight:700; }
.named[b-vl4kmvw8t1] { display:flex; align-items:center; gap:.4rem; min-width:0; }
.named a[b-vl4kmvw8t1] { color:inherit; text-decoration:none; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.named a:hover[b-vl4kmvw8t1] { text-decoration:underline; }
.diamond-holder[b-vl4kmvw8t1] { display:flex; align-items:center; gap:.5rem; margin:0; padding:.6rem .75rem;
    border-top:1px solid var(--line); font-size:.85rem; color:var(--muted); }
/* /Components/Shared/TableLegend.razor.rz.scp.css */
.table-legend[b-ipqy9c4rej] { box-sizing:border-box; padding:.4rem .75rem; border-top:1px solid var(--line); }
/* The squad table's own starter mark: a bar down a tinted edge. */
.bar[b-ipqy9c4rej] { width:.9rem; height:.9rem; border-radius:.15rem; background:var(--tint);
  box-shadow:inset 3px 0 0 var(--ok); }
.bar.il[b-ipqy9c4rej] { box-shadow:inset 3px 0 0 var(--bad); }
/* /Components/Shared/TeamAvatar.razor.rz.scp.css */
.picker-backdrop[b-3bhufhrkte] { position:fixed; inset:0; z-index:60; display:grid; place-items:center;
  padding:1rem; background:rgba(0,0,0,.45); }
.picker[b-3bhufhrkte] { width:100%; max-width:26rem; box-sizing:border-box; background:var(--surface);
  border:1px solid var(--line); border-radius:.75rem; padding:1rem 1.1rem;
  box-shadow:0 10px 30px rgba(0,0,0,.25); text-align:left; }
h2[b-3bhufhrkte] { margin:0 0 .75rem; font-size:1.1rem; }
.actions[b-3bhufhrkte] { display:flex; justify-content:flex-end; margin-top:1rem; }

@media (max-width:40rem) {
  .picker-backdrop[b-3bhufhrkte] { padding:.75rem; }
  .picker[b-3bhufhrkte] { max-height:calc(100dvh - 1.5rem); overflow-y:auto; overflow-wrap:anywhere; padding:.8rem .9rem; font-size:.9rem; }
  h2[b-3bhufhrkte] { margin-bottom:.5rem; font-size:1rem; }
  .actions[b-3bhufhrkte] { margin-top:.75rem; }
}
/* /Components/Shared/TeamAvatarPicker.razor.rz.scp.css */
.avatar-picker[b-7dd3lbo2tk] { display:flex; align-items:center; gap:1rem; flex-wrap:wrap; }
.choose[b-7dd3lbo2tk] { display:flex; flex-direction:column; align-items:flex-start; gap:.35rem; }
/* The file input is left as the browser's: it is the one control people already know, and
   a prettier one that does not open the dialog is worse than a plain one that does.
   align-items undoes the centring every label gets by default: turned upright, that centring
   floats the caption over the button instead of starting where the text under it starts. */
.file[b-7dd3lbo2tk] { display:flex; flex-direction:column; align-items:flex-start; gap:.25rem; font-weight:600; }
.hint[b-7dd3lbo2tk] { margin:0; color:var(--muted); font-size:.8rem; }
/* /Components/Shared/TeamChoice.razor.rz.scp.css */
.team-choice[b-nprv2fb1iq] { border:0; padding:0; margin:0; display:grid; gap:.5rem; min-width:0; }
.option[b-nprv2fb1iq] { display:grid; grid-template-columns:auto 1fr; column-gap:.5rem; align-items:start;
          padding:.5rem .75rem; border:1px solid var(--line); border-radius:.5rem; cursor:pointer; }
/* Marked by the checked radio, not a class: registration has no circuit to move a class
   when the choice changes, and the one it was rendered with would stay lit (#346). */
.option:has(input:checked)[b-nprv2fb1iq] { border-color:var(--accent); }
.option input[b-nprv2fb1iq] { grid-row:span 2; margin-top:.2rem; }
.title[b-nprv2fb1iq] { font-weight:500; }
.why[b-nprv2fb1iq] { font-size:.8rem; color:var(--muted); }
/* /Components/Shared/Toaster.razor.rz.scp.css */
/* Over everything, away from where a thumb or the screen's own action sits: the bottom right
   on a desktop, the top on a phone. */
.toasts[b-t7q5vbzt5l] {
    position:fixed; right:1rem; bottom:1rem; z-index:50;
    display:flex; flex-direction:column; gap:.5rem; align-items:flex-end;
    pointer-events:none;
}

/* Feedback, not page content: a tint of its own colour over the surface, a ring of that
   colour, an icon, and a heavier shadow than any card, so it separates from the page in both
   themes. The colours are the app's own tokens. */
.toast[b-t7q5vbzt5l] {
    --tone:var(--ok);
    pointer-events:auto;
    display:flex; align-items:center; gap:.5rem;
    max-width:min(22rem, calc(100vw - 2rem));
    padding:.35rem .25rem .35rem .6rem;
    border:1px solid var(--tone); border-radius:.6rem;
    background:color-mix(in srgb, var(--tone) 16%, var(--surface));
    color:var(--ink);
    box-shadow:0 6px 18px rgb(0 0 0 / .3), 0 2px 5px rgb(0 0 0 / .2);
    font-size:.85rem; font-weight:600; line-height:1.3;
    /* Arrives quickly and leaves slowly: the fade is the warning that it is going, so a
       manager reading the last of a sentence is not cut off mid-word. The length comes from
       the tray, so the two never disagree about how long a toast lives. */
    animation:toast-in-b-t7q5vbzt5l .18s ease-out, toast-out-b-t7q5vbzt5l .5s ease-in forwards;
    animation-delay:0s, calc(var(--life) - .5s);
}
.toast.bad[b-t7q5vbzt5l] { --tone:var(--bad); }
/* Being read: it stays, and starts its life again when let go. */
.toast.held[b-t7q5vbzt5l] { animation:toast-in-b-t7q5vbzt5l .18s ease-out; }

.toast .text[b-t7q5vbzt5l] { min-width:0; flex:1; overflow-wrap:anywhere; }

.toast .icon[b-t7q5vbzt5l] { flex:none; display:grid; place-items:center; width:1.3rem; height:1.3rem; border-radius:50%;
    background:var(--tone); color:var(--surface); font-size:.95rem; }

/* The same close glyph and disc as a popup's, in the toast's own colours, on a target
   a finger can hit. */
.toast .close[b-t7q5vbzt5l] { flex:none; width:2.5rem; height:2.5rem; margin:-.45rem 0; padding:0; border:0;
    border-radius:50%; color:var(--ink); font-size:1.3rem; line-height:1; cursor:pointer;
    background:radial-gradient(circle, color-mix(in srgb, var(--tone) 22%, var(--sunk)) 0 .7rem, transparent calc(.7rem + 1px)); }
.toast .close:hover[b-t7q5vbzt5l] { background:radial-gradient(circle, color-mix(in srgb, var(--tone) 40%, var(--sunk)) 0 .7rem, transparent calc(.7rem + 1px)); }
.toast .close:focus-visible[b-t7q5vbzt5l] { outline:2px solid var(--tone); outline-offset:-2px; }

@keyframes toast-in-b-t7q5vbzt5l { from { opacity:0; transform:translateY(.5rem); } }
@keyframes toast-drop-b-t7q5vbzt5l { from { opacity:0; transform:translateY(-.5rem); } }
@keyframes toast-out-b-t7q5vbzt5l { to { opacity:0; } }

@media (prefers-reduced-motion:reduce) {
    .toast[b-t7q5vbzt5l], .toast.held[b-t7q5vbzt5l] { animation:none; }
}

/* A phone: full width with a gutter, at the top and clear of the notch, so it never sits on
   the tab bar, the sheet's actions or the claim dock at the bottom. */
@media (max-width:40rem) {
    .toasts[b-t7q5vbzt5l] { left:.75rem; right:.75rem; bottom:auto; top:calc(env(safe-area-inset-top, 0px) + .5rem);
        align-items:stretch; }
    .toast[b-t7q5vbzt5l] { max-width:none; }
    .toast[b-t7q5vbzt5l] { animation-name:toast-drop-b-t7q5vbzt5l, toast-out-b-t7q5vbzt5l; }
    .toast.held[b-t7q5vbzt5l] { animation-name:toast-drop-b-t7q5vbzt5l; }
}
/* /Components/Shared/UserAgentBlockedNotice.razor.rz.scp.css */
/* A warning, not information: nothing is fetched until someone acts. */
.ua-blocked[b-lqkn0jp8ba] { margin:0 0 1rem; padding:.55rem .85rem; border-radius:.7rem; line-height:1.35;
              border:1px solid var(--danger, currentColor);
              background:color-mix(in srgb, var(--danger, currentColor) 10%, transparent);
              display:flex; flex-wrap:wrap; align-items:center; gap:.6rem; }
.ua-blocked p[b-lqkn0jp8ba] { margin:0; flex:1 1 18rem; }
/* /Components/Shared/Waiting.razor.rz.scp.css */
.waiting[b-1274ob0jy5] {
    list-style: none;
    margin: 0;
    padding: 0;
}

.waiting li[b-1274ob0jy5] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.2rem 0.8rem;
    padding: 0.5rem 0.9rem;
    border-bottom: 1px solid var(--line);
}

.waiting li:last-child[b-1274ob0jy5] {
    border-bottom: 0;
}

.waiting code[b-1274ob0jy5] {
    word-break: break-all;
}

.waiting .when[b-1274ob0jy5] {
    color: var(--muted);
    font-size: 0.8rem;
}
