/* ==========================================================================
   DV Open League — public site
   ========================================================================== */
:root {
    --dv-maroon: #a51c30;
    --dv-maroon-dark: #7e1524;
    --dv-maroon-light: #f4dde1;
    --dv-charcoal: #201f1e;
    --dv-charcoal-soft: #35332f;
    --dv-cream: #faf7f2;
    --dv-border: #e6e1d8;
    --dv-ink: #1f1d1b;
    --dv-muted: #766f66;
    --dv-alert-red: #c0392b;
    --dv-alert-red-dark: #962d21;
    --dv-amber: #b5790a;
    --dv-amber-bg: #fff3d6;
    --dv-amber-border: #e0ab3c;
    --font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    --font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    --shadow-sm: 0 1px 2px rgba(32,31,30,.06), 0 1px 1px rgba(32,31,30,.04);
    --shadow-md: 0 8px 24px -8px rgba(32,31,30,.18), 0 2px 8px -2px rgba(32,31,30,.08);
    --shadow-lg: 0 20px 48px -12px rgba(32,31,30,.28);
}

/* ---- Sticky footer ---- */
html, body { height: 100%; }
/* Smooth in-page jumps (season jump-lists, the content-page TOC, anchor links generally). */
@media (prefers-reduced-motion: no-preference) {
    html { scroll-behavior: smooth; }
}
body {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    background: var(--dv-cream);
    color: var(--dv-ink);
    font-family: var(--font-body);
    font-size: .96rem;
}
.site-main { flex: 1 0 auto; display: block; }
.site-footer { flex-shrink: 0; }

h1, h2, h3, h4, h5, .font-display { font-family: var(--font-display); }

a { color: var(--dv-maroon); text-decoration: none; transition: color .15s ease; }
a:hover { color: var(--dv-maroon-dark); }

/* ---- Header ---- */
.site-header {
    background: #fff;
    border-bottom: 1px solid var(--dv-border);
    box-shadow: var(--shadow-sm);
    position: relative;
    z-index: 20;
}
.site-logo-img { height: 76px; width: auto; display: block; } /* fills the header — grows/shrinks together with .site-header-row's padding */
.site-header-row { padding-top: 1rem; padding-bottom: 1rem; }

.site-nav .nav-link {
    color: var(--dv-charcoal-soft);
    font-weight: 600;
    font-size: .92rem;
    padding: .5rem .9rem !important;
    border-radius: .4rem;
    transition: color .15s ease, background-color .15s ease;
}
.site-nav .nav-link:hover { color: var(--dv-maroon); background: var(--dv-maroon-light); }
.site-nav .nav-link.active { color: var(--dv-maroon); }
.site-nav .dropdown-menu {
    border: 1px solid var(--dv-border);
    border-radius: .6rem;
    box-shadow: var(--shadow-md);
    padding: .4rem;
    margin-top: .4rem !important;
}
.site-nav .dropdown-item {
    border-radius: .4rem;
    padding: .5rem .75rem;
    font-weight: 500;
    font-size: .92rem;
}
.site-nav .dropdown-item:hover,
.site-nav .dropdown-item:focus { background: var(--dv-maroon-light); color: var(--dv-maroon-dark); }
/* Group label inside a dropdown (eg. "Turbo Nerd Stats") -- same small-caps treatment as
   .content-toc-category, so a cluster of related links reads as one unit within the menu. */
.site-nav .dropdown-header {
    font-size: .68rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .05em;
    color: var(--dv-maroon);
}
.site-nav .dropdown-menu > li:not(:first-child) > .dropdown-header {
    margin-top: .65rem;
}

/* ---- Site-wide notice banner (renderNoticeBanner(), driven by News.NoticeType) ---- */
/* The outer element is just the full-bleed color band; .notice-banner-inner is a .container
   (same as .site-header and .page-title-band use) so its icon/text/link line up with the logo,
   nav, and page title above and below it instead of hugging the raw viewport edge. */
.notice-banner-inner {
    display: flex; align-items: center; gap: .6rem;
    padding-top: .6rem; padding-bottom: .6rem; font-size: .88rem;
}
.notice-banner-icon { flex-shrink: 0; width: 20px; height: 20px; }
.notice-banner-text { flex: 1; min-width: 0; }
.notice-banner-text b {
    display: block; font-size: .65rem; letter-spacing: .07em;
    text-transform: uppercase; margin-bottom: .1rem;
}
.notice-banner-link { flex-shrink: 0; font-weight: 700; font-size: .82rem; white-space: nowrap; }
.notice-banner--cancellation { background: var(--dv-alert-red); color: #fff; border-bottom: 2px solid var(--dv-alert-red-dark); }
.notice-banner--cancellation .notice-banner-text b { color: #ffd9d4; }
.notice-banner--cancellation .notice-banner-link { color: #fff; text-decoration: underline; text-underline-offset: 2px; }
.notice-banner--reschedule { background: var(--dv-amber-bg); color: #5c4109; border-bottom: 2px solid var(--dv-amber-border); }
.notice-banner--reschedule .notice-banner-icon { color: var(--dv-amber); }
.notice-banner--reschedule .notice-banner-text b { color: var(--dv-amber); }
.notice-banner--reschedule .notice-banner-link { color: var(--dv-alert-red-dark); }
@media (max-width: 575.98px) {
    .notice-banner-inner { flex-wrap: wrap; }
    .notice-banner-link { margin-left: 26px; }
}

/* ---- Full-bleed page title band ---- */
.page-title-band {
    background: linear-gradient(135deg, var(--dv-charcoal) 0%, var(--dv-charcoal-soft) 100%);
    border-bottom: 3px solid var(--dv-maroon);
}
.page-title {
    color: #fff;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(1.2rem, .88rem + 1.28vw, 1.88rem);
    margin: 0;
    padding: .56rem 0; /* ~20% shorter than the original .7rem (which matched .notice-banner-inner's height) */
    letter-spacing: .01em;
}
.page-title .fw-normal { font-family: var(--font-body); font-size: .55em; color: #d8cfc3; font-weight: 500; }

/* ---- Section headers (in-page card headers, not the page band) ---- */
.section-header {
    background: var(--dv-charcoal);
    color: #fff;
    font-weight: 700;
    padding: .65rem 1.1rem;
    font-size: .95rem;
    letter-spacing: .01em;
}
.card {
    border: 1px solid var(--dv-border);
    border-radius: .7rem;
    box-shadow: var(--shadow-sm);
    overflow: hidden;
    transition: box-shadow .2s ease, transform .2s ease;
}
.card > .section-header:first-child { margin: 0; }
a.card-link-wrap { transition: transform .2s ease, box-shadow .2s ease; display: block; }
.card.card-hover:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); }

/* ---- Multi-section content pages (Rules, Format, and embedded areas like Team Records'
   Notable Records) -- sticky left-hand TOC beside a white .content-card, matching the plain
   left-border section-heading style used throughout. ---- */
.content-toc-sticky { position: sticky; top: 1rem; }
.content-toc-label {
    font-size: .7rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--dv-muted);
    margin-bottom: .5rem;
}
.content-toc-nav { display: flex; flex-direction: column; }
.content-toc-link {
    font-size: .85rem;
    line-height: 2;
    padding-left: .6rem;
    border-left: 2px solid transparent;
    color: var(--dv-muted);
}
.content-toc-link:hover { color: var(--dv-maroon); }
.content-toc-link.active {
    border-left-color: var(--dv-maroon);
    color: var(--dv-maroon);
    font-weight: 600;
}
/* Optional grouping (SiteContentSection.Category) -- clusters sections sharing a category into
   their own card, headed by that category (see renderContentSections()); in the TOC they get a
   shared label above their links. A section with no category renders exactly as before. */
.content-toc-category {
    font-size: .68rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .05em;
    color: var(--dv-maroon);
    margin: 1rem 0 .25rem;
}
.content-toc-category:first-child { margin-top: 0; }

/* Mobile jump-menu for the TOC above -- same visual language as renderTabNav()'s tab-nav-select
   (maroon-outlined pill, custom chevron) so it reads as the same "impressive" control elsewhere
   on the site, not a plain browser select. Shown only where the TOC column stacks full-width
   above the content (below 768px, matching col-md-3's own breakpoint). */
.content-toc-mobile { display: none; }
.content-toc-select {
    width: 100%; appearance: none; -webkit-appearance: none;
    font-family: inherit; font-weight: 700; font-size: .95rem; color: var(--dv-ink);
    background: #fff url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23a51c30" stroke-width="2.5"><path d="M6 9l6 6 6-6"/></svg>') no-repeat right .9rem center/16px 16px;
    border: 1.5px solid var(--dv-maroon); border-radius: .6rem; padding: .75rem 2.2rem .75rem 1rem;
}
@media (max-width: 767.98px) {
    .content-toc-desktop { display: none; }
    .content-toc-mobile { display: block; }
}
.content-section-heading {
    font-size: 1.1rem;
    font-weight: 700;
    color: var(--dv-ink);
    border-left: 4px solid var(--dv-maroon);
    padding-left: .75rem;
    margin-bottom: .75rem;
}
.content-body { line-height: 1.65; }
/* Sub-bullet indentation for a list edited through admin/content.php's rich editor: Quill
   represents a nested <ul>/<ol> as one flat list with a ql-indent-N class on the indented <li>s
   rather than true nested <ul> tags, so plain nested-list browser defaults don't apply here. */
.content-body li.ql-indent-1 { margin-left: 1.5em; }
.content-body li.ql-indent-2 { margin-left: 3em; }
.content-body li.ql-indent-3 { margin-left: 4.5em; }
/* Sub-heading for one column of a multi-column section (e.g. League History's Changes/Questions/
   Conveners row) -- one level lighter than .content-section-heading, no maroon accent since the
   section itself already carries that. */
.content-column-heading {
    font-size: .95rem;
    font-weight: 700;
    color: var(--dv-ink);
    margin-bottom: .5rem;
    padding-bottom: .35rem;
    border-bottom: 1px solid var(--dv-border);
}
/* Aside/callout box for content-page prose (rules.php, format.php) -- a "Note:" or cross-reference
   set apart from the surrounding paragraphs, in the same cream/maroon language as the rest of the
   site rather than a full second column. */
.content-note {
    background: var(--dv-cream);
    border: 1px solid var(--dv-border);
    border-left: 3px solid var(--dv-maroon);
    border-radius: .4rem;
    padding: .75rem 1rem;
    margin: 1rem 0;
    font-size: .92rem;
    color: var(--dv-charcoal-soft);
}
.content-body > .content-note:first-child { margin-top: 0; }
.content-body > .content-note:last-child { margin-bottom: 0; }
.content-note strong { color: var(--dv-ink); }
.content-note .content-mini-table { margin: .5rem 0 0; background: #fff; }
.content-note .content-mini-table th, .content-note .content-mini-table td { text-align: center; }
/* Full-width label row inside a content-page data table (e.g. League Decisions' prize-history
   table), marking a new era within the table without leaving the table itself. */
.content-table-divider td {
    background: var(--dv-cream);
    font-weight: 700;
    font-size: .78rem;
    color: var(--dv-charcoal-soft);
    border-top: 2px solid var(--dv-maroon);
}

/* ---- Contact cards (Home) ---- */
.contact-card { background: #fff; border: 1px solid var(--dv-border); box-shadow: var(--shadow-sm); }
.contact-card .card-header {
    background: var(--dv-cream);
    font-weight: 700;
    font-family: var(--font-display);
    border-bottom: 1px solid var(--dv-border);
    color: var(--dv-charcoal);
    font-size: 1.02rem;
}
.contact-icon {
    width: 34px; height: 34px; border-radius: 50%;
    background: var(--dv-maroon-light); color: var(--dv-maroon);
    display: inline-flex; align-items: center; justify-content: center;
    flex-shrink: 0;
}

/* ---- Home sidebar: sticky rail (status card stays in view while news scrolls) ---- */
.home-rail { position: sticky; top: 1rem; }

/* Status/schedule card gets the same charcoal-gradient treatment as .page-title-band and the
   playoff/champion gold badges, so it reads as the page's "live" moment rather than a plain card. */
.hero-status-card { background: linear-gradient(135deg, var(--dv-charcoal) 0%, var(--dv-charcoal-soft) 100%); border: none; }
.hero-status-card .card-header { background: transparent; color: #fff; border-bottom: 1px solid rgba(255, 255, 255, .15); }
.hero-status-card .sched-divider { background: rgba(255, 255, 255, .08); color: #d9b64a; border-bottom: 2px solid #d9b64a; }
.hero-status-card .sched-row { border-bottom-color: rgba(255, 255, 255, .15); }
.hero-status-card .sched-table a { color: #fff; }
.hero-status-card .fst-italic.text-muted { color: rgba(255, 255, 255, .55) !important; }
.hero-status-card .champ-box-row a { color: #fff; }
.hero-status-card p.text-muted { color: rgba(255, 255, 255, .65) !important; }
.hero-status-card .card-footer { background: transparent; border-top: 1px solid rgba(255, 255, 255, .15); }
.hero-status-card .card-footer a { color: #d9b64a; }

/* ---- Win/loss result bar next to a team name ---- */
.result-bar { display: inline-block; width: 4px; height: 1em; vertical-align: middle; margin: 0 .4rem; border-radius: 2px; }
.result-win { background: #2e8b4f; }
.result-loss { background: var(--dv-maroon); }

/* ---- News (card-per-post, matching the schedule card treatment) ---- */
.news-item {
    background: #fff;
    border: 1px solid var(--dv-border);
    border-radius: .7rem;
    box-shadow: var(--shadow-sm);
    padding: 1.25rem 1.4rem;
    margin-bottom: 1rem;
}
.news-item:last-child { margin-bottom: 0; }
.news-item-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: .6rem;
}
.news-title {
    color: var(--dv-ink);
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.3rem;
}
.news-date-pill {
    display: inline-block;
    flex-shrink: 0;
    background: var(--dv-maroon-light);
    color: var(--dv-maroon-dark);
    font-weight: 600;
    font-size: .76rem;
    letter-spacing: .04em;
    text-transform: uppercase;
    padding: .25rem .65rem;
    border-radius: 99px;
}
.news-body { color: var(--dv-charcoal-soft); line-height: 1.65; }

@media (max-width: 575.98px) {
    .news-item-head { flex-direction: column; align-items: flex-start; gap: .4rem; }
}

/* ---- Schedule widget (Home sidebar) — table runs full-bleed to the card edges, only the
   divider heading carries the card's horizontal inset. One heading per (date, time) group,
   same flight-divider-row-style pattern as schedule.php's week-table, adapted for this card's
   dark charcoal/gold background (see .hero-status-card .sched-divider below) since this widget
   only ever renders inside that card. ---- */
.sched-divider {
    font-size: .68rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .05em;
    padding: .45rem 1.1rem;
    margin: 0;
}
.sched-table { width: 100%; table-layout: fixed; border-collapse: collapse; }
.sched-table td { padding: .5rem 1.1rem; }
.sched-row { border-bottom: 1px solid var(--dv-border); }
.sched-row:last-child { border-bottom: none; }

/* ---- Scroll-fade: edge hints for a horizontally-scrollable table/grid, so a phone user sees
   there's more to the left/right instead of it just looking cut off. Table cells paint an opaque
   background of their own, which sits in front of (and fully hides) anything painted behind the
   scroll container -- so a background-image on the wrapper can never show through regardless of
   scroll position, and this needs an actual overlay above the content instead. assets/js/site.js
   toggles .can-scroll-left/-right based on real scroll position; the fade is these two pseudo-
   elements, pinned to the wrapper's edges (unaffected by its own internal scrolling) and faded
   in/out with opacity. Applied only to the specific wide tables/grids that need it, not globally
   to every .table-responsive. */
.scroll-fade { position: relative; }
.scroll-fade::before, .scroll-fade::after {
    content: '';
    position: absolute;
    top: 0; bottom: 0;
    width: 22px;
    pointer-events: none;
    opacity: 0;
    transition: opacity .15s ease;
}
.scroll-fade::before { left: 0; background: linear-gradient(to right, rgba(165, 31, 48, .38), transparent); }
.scroll-fade::after { right: 0; background: linear-gradient(to left, rgba(165, 31, 48, .38), transparent); }
.scroll-fade.can-scroll-left::before { opacity: 1; }
.scroll-fade.can-scroll-right::after { opacity: 1; }

/* ---- Collapsible filter panel: schedule.php / tn-complete-game-list.php. The filter form is
   unchanged -- <details open> just makes it a disclosure that assets/js/site.js closes on first
   load at phone width (several stacked selects otherwise push the actual list well below the
   fold there); it ships open in the markup so desktop and no-JS visitors see it exactly as
   before, with no toggle UI at all (.filter-summary is hidden above the mobile breakpoint). */
.filter-details { margin-bottom: 1.5rem; }
.filter-summary {
    display: none;
    cursor: pointer;
    font-weight: 700;
    font-size: .95rem;
    color: var(--dv-ink);
    background: #fff;
    border: 1.5px solid var(--dv-maroon);
    border-radius: .6rem;
    padding: .75rem 1rem;
}
.filter-summary::marker, .filter-summary::-webkit-details-marker { content: ''; display: none; }
.filter-summary::after {
    content: '';
    float: right;
    width: 16px; height: 16px;
    background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23a51c30" stroke-width="2.5"><path d="M6 9l6 6 6-6"/></svg>') no-repeat center / 16px 16px;
    transition: transform .15s ease;
}
.filter-details[open] .filter-summary::after { transform: rotate(180deg); }
.filter-summary-current { color: var(--dv-muted); font-weight: 500; margin-left: .3rem; }
@media (max-width: 767.98px) {
    .filter-summary { display: block; }
}

table.dv-table { margin-bottom: 0; }
table.dv-table thead th {
    background: var(--dv-cream);
    color: var(--dv-charcoal-soft);
    font-size: .74rem;
    text-transform: uppercase;
    letter-spacing: .05em;
    font-weight: 700;
    border-bottom: 2px solid var(--dv-border);
    white-space: nowrap;
}
table.dv-table td, table.dv-table th { vertical-align: middle; padding: .6rem .75rem; }
table.dv-table tbody tr:hover { background: var(--dv-maroon-light); }

/* ---- Standings: series table columns stay identical width across every flight card ---- */
.standings-table-series { table-layout: fixed; }
.standings-table-series col.c-team   { width: 44%; }
.standings-table-series col.c-pts    { width: 9%; }
.standings-table-series col.c-w,
.standings-table-series col.c-l      { width: 6%; }
.standings-table-series col.c-streak { width: 12%; }
.standings-table-series col.c-pf,
.standings-table-series col.c-pa     { width: 11.5%; }

/* ---- Standings: Season Overall table, mobile only -- pin every numeric column to a narrow
   fixed width (they're never more than 3 digits/chars) and let Team claim whatever's left,
   instead of every column sharing the overflow equally. Flight/Win% are already d-none below
   md on the cells themselves; their <col> also has to disappear here or table-layout:fixed
   still reserves their width even though the cells in it are hidden. */
@media (max-width: 767.98px) {
    .standings-table-season { table-layout: fixed; }
    .standings-table-season col.c-flight,
    .standings-table-season col.c-winpct { display: none; }
    .standings-table-season col.c-rank { width: 7%; }
    .standings-table-season col.c-pts,
    .standings-table-season col.c-pf,
    .standings-table-season col.c-pa { width: 11%; }
    .standings-table-season col.c-w,
    .standings-table-season col.c-l { width: 7%; }
    .standings-table-season col.c-sk { width: 8%; }
    .standings-table-season col.c-team { width: auto; }
    .standings-table-season td, .standings-table-season th { white-space: nowrap; }
    .standings-table-season td:nth-child(3), .standings-table-season th:nth-child(3) { white-space: normal; }
    table.dv-table.standings-table-season td,
    table.dv-table.standings-table-season th { padding-left: .35rem; padding-right: .35rem; }
    table.dv-table.standings-table-season td:nth-child(3),
    table.dv-table.standings-table-season th:nth-child(3) { padding-left: .75rem; }
}

.standings-info-btn {
    width: 26px; height: 26px; border-radius: 50%;
    border: 1px solid var(--dv-border); background: #fff; color: var(--dv-muted);
    font-family: Georgia, serif; font-style: italic; font-weight: 700; font-size: .85rem;
    line-height: 1; display: inline-flex; align-items: center; justify-content: center;
    padding: 0; cursor: pointer;
}
.standings-info-btn:hover { background: var(--dv-maroon-light); color: var(--dv-maroon); border-color: var(--dv-maroon-light); }

/* ---- Standings: permanent playoffs banner -- same charcoal/gold family as .page-title-band and
   the playoff/champion award badges, so "playoffs are on" reads as good news, not a warning
   (that's what red/amber .notice-banner variants are for). No dismiss/JS: it's meant to show
   for as long as $hasPlayoffSeries is true, exactly like the site's other condition-driven
   banners. ---- */
.playoff-banner {
    display: flex; align-items: center; gap: .7rem;
    background: linear-gradient(135deg, var(--dv-charcoal) 0%, var(--dv-charcoal-soft) 100%);
    color: #fff; border-radius: .6rem; padding: .75rem 1rem; margin-bottom: 1.1rem;
}
.playoff-banner-icon { flex-shrink: 0; color: #d9b64a; }
.playoff-banner-msg { flex: 1; font-size: .86rem; }
.playoff-banner-msg b { color: #d9b64a; font-weight: 700; }
.playoff-banner-link { flex-shrink: 0; color: #fff; text-decoration: underline; text-underline-offset: 2px; font-weight: 700; font-size: .84rem; white-space: nowrap; }
@media (max-width: 575.98px) {
    .playoff-banner { flex-wrap: wrap; }
}

/* ---- Standings: mobile-only jump pills between the two stacked cards below (they sit side by
   side on desktop, so there's nothing to jump between there). Plain anchor scrolling, no JS. ---- */
#series-standings-card, #season-overall-card { scroll-margin-top: 1rem; }
.standings-jump-pills { display: flex; gap: .5rem; margin-bottom: 1.1rem; }
.standings-jump-pill {
    font-size: .82rem; font-weight: 700; color: var(--dv-charcoal-soft);
    background: var(--dv-cream); border: 1px solid var(--dv-border); border-radius: 999px;
    padding: .4rem .85rem;
}
.standings-jump-pill:hover { color: var(--dv-maroon); border-color: var(--dv-maroon-light); background: var(--dv-maroon-light); }

table.dv-table.standings-table-series td, table.dv-table.standings-table-series th { padding: .5rem .4rem; }
.standings-table-series tbody tr:not(.flight-divider-row) td:not(:first-child) { white-space: nowrap; }

.text-streak-win  { color: #2e8b4f; white-space: nowrap; }
.text-streak-loss { color: var(--dv-maroon); white-space: nowrap; }

/* Reversible: a bit less vertical padding on the standings tables specifically (not
   site-wide dv-table) -- easy to drop this block if the denser look doesn't stick.
   Only touches padding-top/bottom so it doesn't fight standings-table-series' own
   (tighter) horizontal padding on the series tables. */
table.dv-table.standings-compact td,
table.dv-table.standings-compact th { padding-top: .4rem; padding-bottom: .4rem; }

.series-star { font-size: .7em; margin-left: .1em; color: var(--dv-ink); }

.flight-divider-row td {
    background: var(--dv-maroon-light);
    color: var(--dv-maroon-dark);
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    border-bottom: 2px solid var(--dv-maroon);
}

/* Season Overall: a rough visual guide every 8 ranks, roughly matching playoff flight-size groupings. */
.flight-group-border td { border-bottom: 2px solid var(--dv-maroon); }

.rank-change { font-size: .68rem; font-weight: 700; white-space: nowrap; }

/* Team records: a subtle wash (not the same solid tint as row-hover) marking rows from the
   current season, so it still reads as "highlighted" rather than "hovered" side by side. */
.current-season-row td { background: rgba(165, 28, 48, .06); }
.rank-gap td { text-align: center; color: var(--dv-muted); letter-spacing: .35em; padding: .2rem 0; font-size: .85rem; }

/* ---- Full schedule page: one merged table per week ---- */
.week-header {
    background: var(--dv-charcoal);
    color: #fff;
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    padding: .65rem 1.1rem;
    border-radius: .5rem .5rem 0 0;
    margin: 1.75rem 0 0;
}
.week-header:first-of-type { margin-top: 0; }
.week-header .week-number { font-weight: 700; font-size: 1.05rem; letter-spacing: .01em; }
.week-header .week-dates { font-size: .82rem; color: #cfc9c0; }
.week-table { margin-bottom: 0; table-layout: fixed; }
.week-table col.col-ice    { width: 6%; }
.week-table col.col-team   { width: 33%; }
.week-table col.col-score  { width: 10%; }
.week-table col.col-flight { width: 18%; }
@media (max-width: 767.98px) {
    .week-table col.col-flight { display: none; } /* keep col-flight's width from being reserved once its cells are d-none */
    .week-table col.col-ice   { width: 6%; }
    .week-table col.col-team  { width: 31%; }
    .week-table col.col-score { width: 32%; }
    /* Every game in the week has a score -- the ice sheet stops mattering, so it's dropped on
       mobile too (see $weekAllPlayed in schedule.php) and Team/Score take the room it frees up. */
    .week-table.week-all-played col.col-ice   { display: none; }
    .week-table.week-all-played col.col-team  { width: 34%; }
    .week-table.week-all-played col.col-score { width: 32%; }
}
.week-group-alt td { background: var(--dv-cream); }

/* ---- Schedule: win indicator -- soft green/red pill on the score (same green/red already used
   for the h2h win/lose cells on tn-team-vs-team.php / tn-player-vs-player.php) plus a semi-bold
   winning team name, replacing the old .result-bar green/red bars on this page. A tie gets a
   plain, uncolored pill on both sides rather than being painted as a loss for either team. ---- */
.sched-score-pill { display: inline-block; padding: .1rem .4rem; border-radius: 999px; font-weight: 700; font-variant-numeric: tabular-nums; }
.sched-score-win { background: #e4f0e8; color: #2e6b46; }
.sched-score-lose { background: #f7e4e7; color: var(--dv-maroon-dark); }
.sched-win-team { font-weight: 600; }

/* ---- Line score: inline accordion revealing a game's end-by-end breakdown (GameEnd), wherever
   a final score is shown. The trigger only renders (wrapLineScoreTrigger()) when that game
   actually has end data -- most won't, since entry is new and opt-in per game -- so a game with
   none looks exactly like a plain score. Toggled by assets/js/site.js; the ls-panel-row's <td>
   colspan is set per call site to match that table's real column count. ---- */
.ls-trigger { display: inline-flex; align-items: center; gap: .3rem; background: none; border: 1px solid transparent; border-radius: .4rem; padding: .1rem .3rem; margin: -.1rem -.3rem; cursor: pointer; font: inherit; color: inherit; }
.ls-trigger:hover, .ls-trigger[aria-expanded="true"] { background: var(--dv-cream); border-color: var(--dv-border); }
.ls-trigger .ls-icon { width: 12px; height: 12px; color: var(--dv-muted); flex-shrink: 0; transition: transform .15s ease, color .15s ease; }
.ls-trigger:hover .ls-icon { color: var(--dv-maroon); }
.ls-trigger[aria-expanded="true"] .ls-chevron { transform: rotate(180deg); }
.ls-panel-row td { padding: 0; border-top: none; }
.ls-panel { overflow: hidden; max-height: 0; transition: max-height .2s ease; }
.ls-panel.open { max-height: 14rem; }
.ls-panel-inner { padding: .7rem 1.1rem 1rem; background: var(--dv-cream); }
.ls-table { width: 100%; border-collapse: collapse; font-size: .78rem; margin: 0; }
.ls-table th, .ls-table td { padding: .3rem .5rem; text-align: center; font-variant-numeric: tabular-nums; }
.ls-table th { color: var(--dv-muted); font-weight: 700; font-size: .66rem; text-transform: uppercase; letter-spacing: .03em; border-bottom: 1px solid var(--dv-border); }
.ls-table td:first-child, .ls-table th:first-child { text-align: left; font-weight: 600; color: var(--dv-ink); }
.ls-table td.tot, .ls-table th.tot { font-weight: 800; border-left: 2px solid var(--dv-border); }
.ls-table tr.win-row td.tot { color: #2e6b46; }
.ls-table tr.lose-row td.tot { color: var(--dv-maroon-dark); }
/* Dark charcoal/gold context (index.php's hero-status-card): the cream panel background and
   ink/muted text would be illegible there, so restyle to match that card's own palette. */
.hero-status-card .ls-trigger:hover, .hero-status-card .ls-trigger[aria-expanded="true"] { background: rgba(255, 255, 255, .1); border-color: rgba(255, 255, 255, .2); }
.hero-status-card .ls-trigger:hover .ls-icon, .hero-status-card .ls-trigger[aria-expanded="true"] .ls-icon { color: #d9b64a; }
.hero-status-card .ls-panel-inner { background: rgba(255, 255, 255, .06); }
.hero-status-card .ls-table th { color: rgba(255, 255, 255, .55); border-bottom-color: rgba(255, 255, 255, .15); }
.hero-status-card .ls-table td:first-child { color: #fff; }
.hero-status-card .ls-table td.tot, .hero-status-card .ls-table th.tot { border-left-color: rgba(255, 255, 255, .2); }
.hero-status-card .ls-table tr.win-row td.tot { color: #7fc79b; }
.hero-status-card .ls-table tr.lose-row td.tot { color: #e896a3; }

/* ---- Stat tiles ---- */
.stat-tile {
    border: 1px solid var(--dv-border); border-radius: .6rem; padding: .9rem 1rem;
    text-align: center; background: #fff;
    height: 100%; display: flex; flex-direction: column; justify-content: flex-start;
}
.stat-tile .value { font-family: var(--font-display); font-size: 1.6rem; font-weight: 600; color: var(--dv-maroon); line-height: 1.1; }
.stat-tile .value .pf-sep { color: var(--dv-muted); font-weight: 400; margin: 0 .15rem; }
.stat-tile .label { font-size: .72rem; color: var(--dv-muted); text-transform: uppercase; letter-spacing: .05em; margin-top: .2rem; }
.stat-tile .stat-sub { font-size: .66rem; color: var(--dv-muted); line-height: 1.4; }
.stat-tile .stat-sub:first-of-type { margin-top: .55rem; padding-top: .5rem; border-top: 1px solid var(--dv-border); }
.stat-tile .stat-sub b { color: var(--dv-charcoal-soft); font-weight: 700; }
.stat-subhead {
    font-size: .72rem; text-transform: uppercase; letter-spacing: .05em; color: var(--dv-muted);
    margin: 1.25rem 0 .5rem;
}

/* ---- Team page: flight-by-series + schedule ---- */
.flight-move { font-weight: 700; margin-left: .3rem; }
.flight-move-up { color: #2e8b4f; }
.flight-move-down { color: var(--dv-maroon); }
/* Flight-by-Series' series-win badge shares the site-wide .award-badge system (renderAwardBadge). */
.flight-history-award .award-badge { margin-left: .4rem; vertical-align: 1px; }
.sched-group-row td {
    background: var(--dv-cream); font-weight: 700; font-size: .8rem;
    text-transform: uppercase; letter-spacing: .04em; color: var(--dv-charcoal-soft);
    border-top: 2px solid var(--dv-maroon);
}
.sched-group-row:first-child td { border-top: none; }
.run-record { margin-left: .4rem; font-size: .72rem; color: var(--dv-muted); font-variant-numeric: tabular-nums; }

/* Next Game -- split scouting card: game logistics on the left, opponent scouting on the right */
.next-split { display: grid; grid-template-columns: 1fr 1.15fr; }
.next-split .ns-when { padding: 1.1rem 1.2rem; border-right: 1px solid var(--dv-border); }
.next-split .ns-when .day { font-size: .72rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--dv-maroon); }
.next-split .ns-when .date { font-size: 1.35rem; font-weight: 800; margin: .1rem 0 .55rem; line-height: 1.1; }
.next-split .ns-when .lo { display: flex; flex-direction: column; gap: .3rem; font-size: .86rem; color: var(--dv-charcoal-soft); }
.next-split .ns-when .lo b { color: var(--dv-ink); }
.next-split .ns-scout { padding: 1.1rem 1.2rem; background: var(--dv-cream); }
.next-split .ns-scout .sh { font-size: .68rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--dv-muted); margin-bottom: .1rem; }
.next-split .ns-scout .opp { font-size: 1.2rem; font-weight: 800; margin-bottom: .7rem; }
.next-split .ns-scout .opp a { color: var(--dv-ink); text-decoration: none; }
.next-split .ns-scout .opp a:hover { color: var(--dv-maroon); }
.next-split .ns-scout .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: .5rem; text-align: center; }
.next-split .ns-scout .grid .n { font-size: 1.15rem; font-weight: 800; color: var(--dv-maroon); line-height: 1; font-variant-numeric: tabular-nums; }
.next-split .ns-scout .grid .k { font-size: .6rem; letter-spacing: .05em; text-transform: uppercase; color: var(--dv-muted); margin-top: .2rem; }
.next-split .ns-scout .no-data { font-size: .85rem; color: var(--dv-muted); font-style: italic; }
@media (max-width: 520px) {
    .next-split { grid-template-columns: 1fr; }
    .next-split .ns-when { border-right: none; border-bottom: 1px solid var(--dv-border); }
}

/* Head-to-Head grid -- year x series/round, every column the same width (table-layout: fixed) */
.h2h-scroll { overflow-x: auto; }
.h2h-grid { table-layout: fixed; width: 100%; min-width: 460px; border-collapse: separate; border-spacing: 3px; }
.h2h-grid th { font-size: .62rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--dv-muted); text-align: center; padding: .1rem 0 .3rem; }
.h2h-grid th.po { color: var(--dv-charcoal-soft); }
.h2h-grid th.yr, .h2h-grid td.yr { width: 4.4rem; text-align: left; white-space: nowrap; }
.h2h-grid td.yr { font-size: .78rem; font-weight: 700; color: var(--dv-charcoal-soft); }
.h2h-cell { display: block; border: 2px solid var(--dv-border); border-radius: 5px; text-align: center;
    padding: .3rem .1rem; font-size: .78rem; font-weight: 600; font-variant-numeric: tabular-nums;
    color: var(--dv-muted); white-space: nowrap; min-height: 1.7rem; }
.h2h-cell.empty { border-color: #efe9df; }
.h2h-cell.win { border-color: #2e8b4f; color: #2e8b4f; background: #e4f0e8; }
.h2h-cell.lose { border-color: var(--dv-maroon); color: var(--dv-maroon); background: #f7e4e7; }
/* Head-to-Head lives inside the Next Game card as a second section, under a light divider */
.next-h2h { padding: 1rem 1.2rem 1.1rem; border-top: 2px solid var(--dv-border); }
.next-h2h-head { display: flex; justify-content: space-between; align-items: baseline; gap: .5rem;
    font-size: .8rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
    color: var(--dv-charcoal-soft); margin-bottom: .7rem; }
.next-h2h-rec { font-size: .78rem; font-weight: 500; text-transform: none; letter-spacing: 0; color: var(--dv-muted); white-space: nowrap; }
.next-h2h-rec b { font-weight: 800; }
.next-h2h-rec .h2h-w { color: #2e8b4f; }
.next-h2h-rec .h2h-l { color: var(--dv-maroon); }

/* ---- Nav tabs: bold underline, bigger/bolder text, tinted active band. Used with
   renderTabNav()'s tab-nav-mobile <select> below -- see the phone-width override further down. ---- */
.nav-tabs { border-bottom: 2px solid var(--dv-border); }
.nav-tabs .nav-link {
    border: none; border-bottom: 4px solid transparent;
    color: var(--dv-charcoal-soft); font-weight: 700; font-size: .92rem;
    padding: .65rem 1.05rem; margin-bottom: -2px; border-radius: .4rem .4rem 0 0;
}
.nav-tabs .nav-link:hover { background: var(--dv-cream); color: var(--dv-ink); }
.nav-tabs .nav-link.active { color: var(--dv-maroon); border-color: var(--dv-maroon); background: var(--dv-maroon-light); }

/* renderTabNav(): the desktop tab strip and the phone dropdown trade places at 576px so a page
   with several categories (or long labels) never wraps into a multi-row block on a phone. */
.tab-nav-mobile { display: none; }
.tab-nav-select {
    width: 100%; appearance: none; -webkit-appearance: none;
    font-family: inherit; font-weight: 700; font-size: .95rem; color: var(--dv-ink);
    background: #fff url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23a51c30" stroke-width="2.5"><path d="M6 9l6 6 6-6"/></svg>') no-repeat right .9rem center/16px 16px;
    border: 1.5px solid var(--dv-maroon); border-radius: .6rem; padding: .75rem 2.2rem .75rem 1rem;
}
@media (max-width: 575.98px) {
    .tab-nav-desktop { display: none; }
    .tab-nav-mobile { display: block; }
}

/* ---- Award badges (renderAwardBadge) -- gold champions, black+gold playoff, silver series ---- */
.award-badges { display: flex; flex-wrap: wrap; gap: .3rem; }
.award-badge {
    display: inline-flex; align-items: center; gap: .28rem;
    font-size: .66rem; font-weight: 700; letter-spacing: .03em; text-transform: uppercase;
    padding: .12rem .42rem; border-radius: 4px; border: 1px solid; white-space: nowrap; line-height: 1.5;
}
.award-badge svg { width: .78rem; height: .78rem; flex-shrink: 0; }
.award-badge--gold { background: #f7ecc9; color: #7a5c17; border-color: #dcc17f; }
.award-badge--playoff { background: var(--dv-charcoal); color: #d9b64a; border-color: #5c4e28; }
.award-badge--silver { background: #eceef1; color: #565c64; border-color: #c6cbd1; }
.award-badge--bronze { background: #ecdcc7; color: #6d4a28; border-color: #cdac82; }
/* Home "Season / Series Champions" box: one badge + team name per line */
.champ-box-list { display: flex; flex-direction: column; gap: .55rem; }
.champ-box-row { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; }
.champ-box-row a { font-weight: 600; }

/* player.php "Season by Season" -- keep Season/Team on one line, top-align, give the wide
   Teammates/Awards columns a floor so neither squeezes the other into extra wrapped lines */
.season-by-season td { vertical-align: top; }
.season-by-season .sbs-teammates { min-width: 13rem; line-height: 1.5; }
.season-by-season .sbs-awards { min-width: 11rem; }

/* ---- Buttons ---- */
.btn-dv { background: var(--dv-maroon); border-color: var(--dv-maroon); color: #fff; font-weight: 600; }
.btn-dv:hover { background: var(--dv-maroon-dark); border-color: var(--dv-maroon-dark); color: #fff; }

/* ---- Footer ---- */
.site-footer {
    background: var(--dv-charcoal);
    color: #b9b2a7;
}
.site-footer a { color: #fff; }
.site-footer a:hover { color: var(--dv-maroon-light); }
.footer-info-lines { line-height: 1.35; }
.footer-info-lines div + div { margin-top: .05rem; }

@media (max-width: 991.98px) {
    /* Bootstrap's .navbar-collapse has flex-basis:100% built in, which -- since the logo
       and <nav> are flex siblings in .site-header-row rather than nav being the sole
       full-width flex container -- made the whole nav (toggler included) wrap onto its
       own line and re-center once expanded. Taking the collapse out of flow (absolute,
       anchored below the row) keeps the logo+toggler row intact and drops the menu below
       it instead, edge-to-edge with the row's own gutter. */
    .site-header-row { position: relative; }
    /* Bootstrap's .navbar is itself position:relative, which would otherwise make the
       (small, toggler-width) <nav> the containing block instead of the full-width row. */
    .site-nav { position: static; }
    .site-nav .navbar-collapse {
        position: absolute;
        top: 100%;
        left: 0;
        right: 0;
        margin-top: 0;
        padding: .75rem .75rem 1rem;
        background: #fff;
        border-top: 1px solid var(--dv-border);
        box-shadow: var(--shadow-md);
        max-height: calc(100vh - 100px);
        overflow-y: auto;
        z-index: 30;
    }
}

/* ---- Playoffs page ---- */
/* Same treatment as standings.php's flight-divider-row -- reused here for the
   Qualifiers / Semi Finals / Finals / Champion round labels within each group.
   No margin-bottom: it sits flush against the section header above and the
   pools/matchups/champion content directly below. */
.playoff-round-label {
    display: flex;
    align-items: center;
    background: var(--dv-maroon-light);
    color: var(--dv-maroon-dark);
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    border-bottom: 2px solid var(--dv-maroon);
    padding: .4rem .75rem;
}
.playoff-matchup {
    display: grid; grid-template-columns: 34px 1fr 44px 44px 1fr;
    align-items: center; gap: .4rem;
    padding: .75rem 1rem; border-bottom: 1px solid var(--dv-border);
}
.playoff-matchup:last-child { border-bottom: none; }
.playoff-matchup-tag { font-weight: 700; font-size: .8rem; color: var(--dv-muted); }
.playoff-matchup-rank { font-size: .7rem; color: var(--dv-muted); }
.col-shrink { width: 1%; white-space: nowrap; }

/* Gold variant of .playoff-round-label, for the "X Flight Champion" section specifically. */
.playoff-round-label-gold {
    background: #f7ecc9;
    color: #7a5c17;
    border-bottom: 2px solid #c9a227;
}

/* ---- Past Champions gallery (champions.php) ---- */
/* One band per award a card's team holds. Club/Regular Season Champion get the full gold
   treatment (same as .playoff-round-label-gold); Playoff Champion uses the same almost-black
   background as the page's own title band (.page-title-band), with gold text/border so it
   still reads as part of the same family. */
.champion-band {
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    padding: .4rem .75rem;
    border-bottom: 2px solid;
}
.champion-band-gold {
    background: #f7ecc9;
    color: #7a5c17;
    border-bottom-color: #c9a227;
}
.champion-band-playoff {
    background: var(--dv-charcoal);
    color: #c9a227;
    border-bottom-color: #c9a227;
}
.champion-header-links {
    display: flex;
    gap: .4rem;
    flex-wrap: wrap;
}
.champion-header-link {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    font-size: .7rem;
    font-weight: 700;
    letter-spacing: .02em;
    text-transform: uppercase;
    color: var(--dv-maroon);
    border: 1px solid var(--dv-maroon);
    border-radius: 6px;
    padding: .35rem .65rem;
    white-space: nowrap;
}
.champion-header-link:hover {
    background: var(--dv-maroon-light);
    color: var(--dv-maroon-dark);
    border-color: var(--dv-maroon-dark);
}
.champion-header-link svg { flex-shrink: 0; }
.champion-photo-thumb { cursor: zoom-in; }
/* ---- Series Winners table (series-winners.php) ---- */
/* One continuous ledger: the season prints once, on its first series row, and a maroon rule
   marks each new season. Cells hold one or more team links stacked vertically. */
.series-winners-table td { vertical-align: top; }
.series-winners-table .sw-season { font-weight: 700; color: var(--dv-ink); white-space: nowrap; }
.series-winners-table .sw-series { white-space: nowrap; color: var(--dv-charcoal-soft); }
.series-winners-table tr.sw-season-start td { border-top: 2px solid var(--dv-maroon); }
.series-winners-table tbody tr.sw-season-start:first-child td { border-top: none; }
/* Each tied team keeps its own small faded tag, so a tie's members are never ambiguous -- even
   when the cell also holds a separate outright winner from the other pod. */
.sw-tie { display: flex; align-items: baseline; gap: .35rem; }
.tie-chip {
    font-size: .6rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--dv-muted);
    border: 1px solid var(--dv-border);
    border-radius: 4px;
    padding: 0 .22rem;
    line-height: 1.5;
    flex-shrink: 0;
}

.champion-season-divider {
    width: 66%;
    margin: 2.5rem auto 0;
    border: none;
    border-top: 1px solid var(--dv-border);
}

/* Pool card headers: same small/uppercase treatment as .playoff-round-label, but keep
   the existing .section-header color (charcoal/white) and rounded card-header corners. */
.pool-header {
    padding: .4rem .75rem;
    font-size: .72rem;
    text-transform: uppercase;
    letter-spacing: .05em;
}
.playoff-matchup-score { font-size: 1.6rem; text-align: center; font-family: var(--font-display); }
.playoff-matchup-status { font-size: .68rem; text-transform: uppercase; letter-spacing: .03em; margin-top: .1rem; }
.status-win  { color: #2e8b4f; }
.status-loss { color: var(--dv-maroon); }

/* ---- League Stats (fun-facts page) ---- */
.ls-fact {
    background: var(--dv-cream); border: 1px solid var(--dv-border); border-left: 3px solid var(--dv-maroon);
    border-radius: .4rem; padding: .6rem .85rem; font-size: .9rem; line-height: 1.5;
}
.ls-fact-plain { background: none; border: none; border-left: none; padding: .3rem 0; }
.ls-fact strong { color: var(--dv-charcoal-soft); }
.ls-chip {
    display: inline-block; font-size: .8rem; padding: .2rem .5rem; border-radius: 4px;
    background: #fff; border: 1px solid var(--dv-border); font-variant-numeric: tabular-nums;
}
.ls-subhead {
    font-size: .72rem; text-transform: uppercase; letter-spacing: .05em; color: var(--dv-muted);
    margin: 1.1rem 0 .5rem;
}
.ls-bars { display: flex; flex-direction: column; gap: .3rem; }
.ls-bar-row { display: flex; align-items: center; gap: .6rem; font-size: .82rem; }
.ls-bar-label { flex: 0 0 4.5rem; color: var(--dv-muted); }
.ls-bar-track { flex: 1 1 auto; background: var(--dv-cream); border-radius: 3px; overflow: hidden; }
.ls-bar-fill { display: block; height: .85rem; background: var(--dv-maroon); border-radius: 3px; }
.ls-bar-val { flex: 0 0 3rem; text-align: right; font-variant-numeric: tabular-nums; color: var(--dv-charcoal-soft); }

/* jump menu + record sub-lists on league-stats */
.ls-jump {
    display: flex; flex-wrap: wrap; gap: .4rem; margin: 0 0 1.5rem;
    padding-bottom: 1rem; border-bottom: 1px solid var(--dv-border);
}
.ls-jump a {
    font-size: .72rem; text-transform: uppercase; letter-spacing: .05em; font-weight: 700;
    padding: .3rem .7rem; border: 1px solid var(--dv-border); border-radius: 999px;
    color: var(--dv-charcoal-soft); background: #fff; text-decoration: none;
}
.ls-jump a:hover { background: var(--dv-cream); border-color: var(--dv-maroon); color: var(--dv-maroon); }
.card[id] { scroll-margin-top: 5rem; }
.ls-sublist { margin: 0; font-size: .88rem; line-height: 1.6; color: var(--dv-charcoal-soft); }

/* ---- Turbo Nerd data pages ---- */
table.dv-table.dv-table-sm td, table.dv-table.dv-table-sm th { padding: .35rem .55rem; font-size: .85rem; }
.tn-count { font-size: .9rem; color: var(--dv-charcoal-soft); }
.tn-count strong { color: var(--dv-maroon); }
.tn-ph { color: var(--dv-muted); font-style: italic; }
.tn-ph-eg {
    font-style: italic; color: var(--dv-muted); border: 1px solid var(--dv-border);
    border-radius: 3px; padding: 0 .25rem; font-size: .9em;
}
.tn-season-break td { border-top: 2px solid var(--dv-maroon); }
.tn-flight-scoring tbody tr:first-child td { border-top: none; }
