/* Sports Wire v2.4 — Complete Styles */

/* v2.52.225 — Bebas Neue self-hosted (SIL OFL 1.1, assets/fonts/OFL-BebasNeue.txt).
   Was a render-blocking stylesheet from fonts.googleapis.com plus a second
   origin for the woff2, on every chrome page. One 21 KB file, same origin,
   font-display: swap so text never waits on it. */
@font-face {
    font-family: 'Bebas Neue';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('../fonts/BebasNeue-Regular.woff2') format('woff2');
}

/* Container */
.swv2-container {
    max-width: 800px;
    margin: 0 auto;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
    line-height: 1.5;
    color: #1a1a1a;
    background: #fff;
}

/* Remove Astra/theme chrome */
.page .entry-title,
.page .entry-header,
.page .page-header,
.page .ast-archive-description {
    display: none !important;
}

.page .site-content > .ast-container {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    max-width: 100% !important;
}

.page .entry-content {
    margin-top: 0 !important;
    padding-top: 0 !important;
}

/* Kill any remaining Astra spacing */
.page #primary {
    margin-top: 0 !important;
    padding-top: 0 !important;
}

.page .site-content {
    padding-top: 0 !important;
}

.ast-separate-container .ast-article-single {
    padding-top: 0 !important;
    margin-top: 0 !important;
}

.ast-separate-container .entry-content {
    margin-top: 0 !important;
}

.ast-separate-container .ast-article-post,
.ast-separate-container .ast-article-single {
    background: transparent !important;
    box-shadow: none !important;
    padding: 0 !important;
}

/* v2.52.149 / .151 — the theme-chrome resets above are scoped to .page, so a
   post rendered with Astra's entry-header spacing intact: the white gap above
   the site bar that no other page type has.

   Keyed on BOTH selectors deliberately. The body_class filter runs before the
   loop and can be defeated by page caching; .single-post is emitted by core and
   is always present. These sites have no other posts, so the wider selector
   costs nothing. */
.swv2-analysis-post .entry-title,
.single-post .entry-title,
.swv2-analysis-post .entry-header,
.single-post .entry-header,
.swv2-analysis-post .page-header,
.single-post .page-header,
.swv2-analysis-post .ast-archive-description,
.single-post .ast-archive-description {
    display: none !important;
}

.swv2-analysis-post .site-content > .ast-container,
.single-post .site-content > .ast-container {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    max-width: 100% !important;
}

.swv2-analysis-post .entry-content,
.single-post .entry-content {
    margin-top: 0 !important;
    padding-top: 0 !important;
}

.swv2-analysis-post #primary,
.single-post #primary {
    margin-top: 0 !important;
    padding-top: 0 !important;
}

.swv2-analysis-post .site-content,
.single-post .site-content {
    padding-top: 0 !important;
}

.swv2-analysis-post .ast-article-single,
.single-post .ast-article-single,
.swv2-analysis-post .ast-article-post,
.single-post .ast-article-post {
    padding: 0 !important;
    margin-top: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
}

/* v2.52.154 — REMOVED the width hacks from .152 and .153.

   Both were fixing a problem that did not exist. The live body class is:
     ... swv2-analysis-post ast-page-builder-template ast-no-sidebar ...
   There is no sidebar, so .152's #primary/#secondary overrides were inert, and
   .153's viewport trick was actively wrong: left:50% resolves against the
   PARENT, not the viewport, so an 800px element inside a 900px parent got
   pushed 50px right instead of centred.

   The real fix was .149 — mirroring the .page theme resets onto
   .swv2-analysis-post / .single-post. Once those apply, .swv2-container's own
   max-width:800px + margin:0 auto centres the article exactly as it does on
   every page. Nothing further is needed. */

/* Site Name Bar */
.swv2-site-bar {
    background: #1a1a1a;
    padding: 14px 20px;
    text-align: center;
    border-bottom: 3px solid #cc0000;
}

.swv2-site-name {
    color: #ffffff !important;
    text-decoration: none !important;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 32px;
    font-weight: 400;
    letter-spacing: 3px;
    text-transform: uppercase;
    line-height: 1;
}

.swv2-site-name:hover {
    color: #cccccc !important;
}

/* Header */
.swv2-header {
    color: #fff !important;
    padding: 0;
    margin-bottom: 0;
}

.swv2-header-inner {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px 20px 8px;
}

.swv2-header-left {
    display: flex;
    align-items: center;
    gap: 12px;
}

.swv2-sport-badge {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 1px;
    padding: 3px 8px;
    border: 1px solid rgba(255,255,255,0.5);
    border-radius: 3px;
    text-transform: uppercase;
    color: #ffffff !important;
}

.swv2-team-name {
    font-size: 22px;
    font-weight: 700;
    margin: 0;
    padding: 0;
    line-height: 1.2;
    color: #ffffff !important;
}

.swv2-header-right {
    display: flex;
    gap: 16px;
    font-size: 12px;
    color: rgba(255,255,255,0.85) !important;
    align-items: center;
}

.swv2-header-meta {
    color: rgba(255,255,255,0.85) !important;
}

/* "X new today" badge in header */
.swv2-header-today {
    background: rgba(255,255,255,0.2);
    padding: 2px 10px;
    border-radius: 12px;
    font-size: 11px;
    font-weight: 700;
    color: #fff !important;
    letter-spacing: 0.3px;
}

/* Team navigation */
.swv2-team-nav {
    display: flex;
    gap: 0;
    padding: 0 20px;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    background: rgba(0,0,0,0.15);
    /* v2.52.246: the row scrolls but hides its scrollbar, so on a mouse the
       last team just looked cut off ("Notre Dame Fighting" on Chicago).
       Fade the right edge so the row reads as continuing — same cue the
       news strip uses. No layout change. */
    -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 48px), transparent);
            mask-image: linear-gradient(90deg, #000 calc(100% - 48px), transparent);
}

.swv2-team-nav::-webkit-scrollbar { display: none; }

.swv2-nav-link {
    color: rgba(255,255,255,0.7) !important;
    text-decoration: none !important;
    font-size: 12px;
    font-weight: 600;
    padding: 8px 12px;
    white-space: nowrap;
    border-bottom: 2px solid transparent;
    transition: all 0.15s;
}

.swv2-nav-link:hover {
    color: #fff !important;
    background: rgba(255,255,255,0.08);
}

.swv2-nav-link.active {
    color: #fff !important;
    border-bottom-color: #fff;
}

/* Breadcrumb + affiliate disclosure share one row (v2.51.96).
   Breadcrumb left, disclosure right. Wraps rather than truncates on narrow
   phones — a clipped disclosure would be worse than a second line. */
.swv2-crumbbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 2px 16px;
    padding: 7px 16px;
    background: #f8f8f8;
    border-bottom: 1px solid #eee;
}

.swv2-breadcrumbs {
    font-size: 12px;
    color: #999;
}

.swv2-breadcrumbs a {
    color: #555;
    text-decoration: none;
}

.swv2-breadcrumbs a:hover {
    text-decoration: underline;
}

.swv2-bc-sep {
    margin: 0 6px;
    color: #ccc;
}

.swv2-bc-short { display: none; }

.swv2-bc-current {
    color: #333;
    font-weight: 500;
}

/* Affiliate disclosure — the whole phrase is the link, so no trailing
   "Learn more". Deliberately NOT --text-muted: the FTC standard is clear
   AND conspicuous, and this sits above the Shop/Tickets affiliate tabs. */
.swv2-disclosure {
    font-size: 11px;
    margin-left: auto;
}

/* v2.52.201 — original editorial intro on team news pages. Sits between the
   utility bar and the article timeline.

   Styled as a standfirst, not a card: a left accent rail in the team's primary
   colour (set inline per team), a faint tinted ground, and the same 16px
   gutter as .swv2-article so the left text edge lines up with the headlines
   below it. Earlier it was bare text on white and read as something that had
   escaped its container.

   Kept compact on purpose: on mobile the fold is already spent on header, team
   nav, breadcrumb and page tabs, and this page type carries most of the
   network's traffic, so the first headline must stay reachable.

   v2.52.203: bottom padding trimmed and a right border added.
   v2.52.204: .203 was too timid to see — 3px of padding and a hairline the
   same colour as the article rows is not a visible change at reading scale.
   Three changes together this time: bottom padding 9px -> 6px (12px -> 6px
   since .202, halved); line-height 1.6 -> 1.5, which removes more apparent
   slack than padding does because the block runs to three lines; and the right
   border darkened to #cfd6dd so it reads as an edge rather than dissolving
   into the #e0e0e0 article rows beside it. Bottom hairline nudged to #e4e8ec
   to sit between the ground and the date bar. */
.swv2-news-intro {
    margin: 0;
    padding: 10px 16px 6px 14px;
    background: #fafbfc;
    border-left: 3px solid #d8dde3;
    border-right: 1px solid #cfd6dd;
    border-bottom: 1px solid #e4e8ec;
}

.swv2-news-intro__text {
    margin: 0;
    max-width: 74ch;
    font-size: 14.5px;
    line-height: 1.5;
    color: #3d4550;
}

.swv2-news-intro__lede {
    color: #14181d;
    font-weight: 700;
}

@media (max-width: 600px) {
    .swv2-news-intro {
        padding: 9px 12px 6px 11px;
    }
    .swv2-news-intro__text {
        font-size: 13.5px;
        line-height: 1.45;
    }
}

.swv2-disclosure a {
    color: #6f6f6f;
    text-decoration: none;
}

.swv2-disclosure a:hover {
    text-decoration: underline;
}

/* v2.51.97: nav tiers. 'swing' items live in BOTH the utility bar and the
   More drawer; exactly one copy is visible at any viewport. Desktop shows
   them in the bar (8 tabs, one line). Phones show them in the drawer, so the
   bar is 4 tabs and fits one row instead of three. No PHP branching — the
   HTML is identical for every device, which keeps page cache simple. */
.swv2-more-row .swv2-more-swing {
    display: none;
}

@media (max-width: 767px) {
    /* v2.52.5: scoped to the container on purpose. The unscoped
       `.swv2-util-swing` lost to `.swv2-util-link { display: flex }` inside the
       later `@media (max-width: 600px)` block — same specificity, and that rule
       comes further down the file, so source order decided it. Result: swing
       items rendered in BOTH the bar and the drawer on phones, which is the
       three-row nav this whole change existed to remove. Two classes beats one
       regardless of order. */
    .swv2-utility-bar .swv2-util-swing {
        display: none;
    }

    .swv2-more-row .swv2-more-swing {
        display: inline-flex;
    }
}

/* v2.52.7: a drawer whose ONLY contents are swing items is empty on desktop,
   because the swing copies are hidden there (they live in the bar instead).
   Rutgers rendered exactly that: an expandable "More pages" toggle that opened
   onto nothing. Hide the whole disclosure above the breakpoint; on phones it
   still holds the swing items and stays useful. */
@media (min-width: 768px) {
    .swv2-more-strip.swv2-more-swingonly {
        display: none;
    }
}

/* Utility bar — Tickets, Shop, Schedule, Watch, RSS */
.swv2-utility-bar {
    display: flex;
    align-items: center;
    gap: 0;
    padding: 0 12px;
    background: #fafafa;
    border-bottom: 2px solid #333;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
}

.swv2-utility-bar::-webkit-scrollbar { display: none; }

/* v2.42.53: "More pages" strip below the utility bar */
.swv2-more-strip { background: #fafafa; border-bottom: 1px solid #e5e5e5; }
.swv2-more-toggle {
    list-style: none;
    cursor: pointer;
    font-size: 11px;
    font-weight: 600;
    color: #666;
    padding: 6px 14px;
    user-select: none;
}
.swv2-more-toggle::-webkit-details-marker { display: none; }
.swv2-more-toggle:hover { color: #222; }
.swv2-more-toggle-active { color: #222; }
.swv2-more-caret { font-size: 10px; }
.swv2-more-strip[open] .swv2-more-caret { display: inline-block; transform: rotate(180deg); }
.swv2-more-row {
    display: flex;
    flex-wrap: wrap;
    gap: 0;
    padding: 0 6px 6px;
}
.swv2-more-row .swv2-util-link { padding: 6px 12px; }

.swv2-util-link {
    font-size: 12px;
    font-weight: 600;
    color: #444 !important;
    text-decoration: none !important;
    padding: 8px 14px;
    white-space: nowrap;
    word-spacing: 3px; /* v2.14.2: gap between emoji and label */
    transition: background 0.15s, color 0.15s;
}

.swv2-util-link:hover {
    background: #eee;
    color: #000 !important;
}

/* v2.14.7: highlight the section the visitor is currently on */
.swv2-util-active {
    background: #e3e3e3;
    color: #111 !important;
    border-radius: 5px 5px 0 0;
}
.swv2-util-active:hover {
    background: #d9d9d9;
}

/* Feed */
.swv2-feed {
    border: 1px solid #e0e0e0;
    border-top: none;
}

/* Date headers */
.swv2-date-header {
    color: #fff;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.5px;
    padding: 8px 16px;
    text-transform: capitalize;
}

/* Article rows */
.swv2-article {
    padding: 10px 16px;
    border-bottom: 1px solid #f0f0f0;
    transition: background 0.1s;
}

.swv2-article:hover {
    background: #f8f9fa;
}

.swv2-article-meta {
    display: flex;
    align-items: center;
    gap: 5px;
    margin-bottom: 2px;
}

.swv2-time {
    font-size: 12px;
    font-weight: 700;
    color: #c00;
}

.swv2-dot {
    color: #999;
}

.swv2-badge {
    font-size: 9px;
    font-weight: 800;
    color: #fff;
    padding: 1px 5px;
    border-radius: 2px;
    letter-spacing: 0.5px;
}

.swv2-source {
    font-size: 11px;
    color: #999;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    white-space: nowrap;
    margin-left: auto;
}

/* Source reputation badges */
.swv2-source-type {
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 0.3px;
    padding: 1px 6px;
    border-radius: 2px;
    white-space: nowrap;
}

.swv2-src-official {
    background: #e8f5e9;
    color: #2e7d32;
}

.swv2-src-beat {
    background: #e3f2fd;
    color: #1565c0;
}

.swv2-src-fan {
    background: #f3e5f5;
    color: #7b1fa2;
}

.swv2-src-rumors {
    background: #fff3e0;
    color: #e65100;
}

.swv2-src-analysis {
    background: #fce4ec;
    color: #c62828;
}

.swv2-src-guide {
    background: #fff8e1;
    color: #f57f17;
    font-weight: 800;
}

.swv2-promoted {
    border-left: 3px solid #f57f17;
    padding-left: 12px;
}

.swv2-promoted-link {
    font-weight: 700 !important;
}

.swv2-link {
    color: #1a1a1a;
    text-decoration: none;
    font-size: 15px;
    font-weight: 500;
    line-height: 1.3;
    display: block;
}

.swv2-link:hover {
    text-decoration: underline;
}

/* Article snippet — the SEO goldmine */
.swv2-snippet {
    font-size: 13px;
    color: #666;
    line-height: 1.4;
    margin: 3px 0 0;
    padding: 0;
}

.swv2-article.swv2-new {
    background: #fffdf5;
}

.swv2-article.swv2-new:hover {
    background: #fffbe6;
}

/* Ad banners */
.swv2-ad {
    padding: 18px 16px;
    border-bottom: 1px solid #f0f0f0;
}
.swv2-ad + .swv2-ad {
    margin-top: 8px;
    padding-top: 24px;
    border-top: 1px solid #f0f0f0;
}

.swv2-banner {
    display: flex;
    text-decoration: none !important;
    border-radius: 6px;
    overflow: hidden;
    transition: transform 0.15s, box-shadow 0.15s;
    position: relative;
    box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}

.swv2-banner:hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 12px rgba(0,0,0,0.2);
}

.swv2-banner-left {
    flex: 0 0 35%;
    padding: 24px 16px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
    gap: 2px;
}

.swv2-banner-sport-label {
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 1.5px;
    opacity: 0.7;
}

.swv2-banner-team {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 36px;
    line-height: 1;
    letter-spacing: 2px;
}

.swv2-banner-action {
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 2px;
    opacity: 0.7;
    margin-top: 4px;
}

.swv2-banner-right {
    flex: 1;
    padding: 20px 24px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 6px;
}

.swv2-banner-cta-text {
    font-size: 18px;
    font-weight: 700;
}

.swv2-banner-cta-sub {
    font-size: 13px;
    opacity: 0.7;
}

.swv2-banner-cta-btn {
    display: inline-block;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 1px;
    padding: 10px 24px;
    border-radius: 4px;
    margin-top: 8px;
    align-self: flex-start;
    text-transform: uppercase;
}

.swv2-banner-disclosure {
    position: absolute;
    bottom: 4px;
    right: 8px;
    font-size: 8px;
    opacity: 0.4;
    color: inherit;
}

.swv2-banner-ad-label {
    position: absolute;
    top: 0;
    left: 0;
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 0.5px;
    color: #fff;
    background: rgba(0,0,0,0.6);
    padding: 3px 8px;
    border-radius: 0 0 4px 0;
    z-index: 1;
}

/* v2.52.90 — Slot-1 creative-agnostic container. Reserved min-height so
   swapping the slot-1 creative (affiliate ↔ share CTA ↔ AdSense unit)
   never shifts layout under the reader (CLS). 90px ≈ the shortest creative
   this slot serves; taller creatives grow the box once, at render. */
.swv2-slot1 {
    min-height: 90px;
}

/* Share CTA (slot-1 mode 'share') */
.swv2-share-slot {
    display: flex;
    align-items: center;
    background: #f7f5f0;
    border-left: 4px solid var(--swv2-ad-accent, #1a1a1a);
}
.swv2-share-slot__inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    width: 100%;
    padding: 20px 24px;
    flex-wrap: wrap;
}
.swv2-share-slot__msg {
    font-weight: 600;
    font-size: 16px;
    color: #1a1a1a;
}
.swv2-share-slot__btn {
    flex-shrink: 0;
    padding: 10px 22px;
    border: 0;
    border-radius: 4px;
    background: var(--swv2-ad-accent, #1a1a1a);
    color: #fff;
    font-weight: 700;
    font-size: 14px;
    cursor: pointer;
}
.swv2-share-slot__btn[disabled] {
    opacity: 0.7;
    cursor: default;
}

/* Image banners (Canva/custom) */
.swv2-banner-img-wrap {
    position: relative;
    border-radius: 6px;
    overflow: hidden;
    box-shadow: 0 2px 8px rgba(0,0,0,0.15);
    transition: transform 0.15s, box-shadow 0.15s;
}

/* Guide promotion banners (slot 2) */
.swv2-guide-banner {
    border: 2px solid #f57f17;
    position: relative;
}

.swv2-guide-banner::before {
    content: attr(data-site-label);
    position: absolute;
    top: 0;
    left: 0;
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 0.5px;
    color: #f57f17;
    background: rgba(0,0,0,0.8);
    padding: 3px 8px;
    border-radius: 0 0 4px 0;
    z-index: 1;
}

.swv2-banner-img-wrap:hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 12px rgba(0,0,0,0.2);
}

.swv2-banner-img-wrap a {
    display: block;
    line-height: 0;
}

.swv2-banner-img {
    width: 100%;
    height: auto;
    display: block;
}

/* Fubo SPORT banner (v2.51.91) — the tall ~16:9 sport-matched creative on
   Tonight pages. Capped so a big image doesn't dominate desktop, centered.
   On mobile it fills the column (peak watch-intent, big is good there). */
.swv2-fubo-sport {
    max-width: 620px;
    margin-left: auto;
    margin-right: auto;
}
/* Fubo WIDE strip (News 2nd slot) — the skinny 1500×290 leaderboard. Full
   column width like the other news banners; its own ratio keeps it short. */
.swv2-fubo-wide {
    max-width: 970px;
    margin-left: auto;
    margin-right: auto;
}

/* Empty state */
.swv2-error {
    padding: 20px;
    background: #fff3cd;
    border: 1px solid #ffc107;
    border-radius: 4px;
    color: #856404;
}

.swv2-empty {
    padding: 40px 20px;
    text-align: center;
    color: #666;
}

/* Load More */
.swv2-load-more-wrap {
    padding: 16px;
    text-align: center;
    border: 1px solid #e0e0e0;
    border-top: none;
}

.swv2-load-more {
    display: inline-block;
    padding: 12px 32px;
    font-size: 14px;
    font-weight: 600;
    color: #333;
    background: #f5f5f5;
    border: 1px solid #ddd;
    border-radius: 4px;
    cursor: pointer;
    transition: all 0.15s;
}

.swv2-load-more:hover {
    background: #e8e8e8;
    border-color: #ccc;
}

.swv2-load-more:disabled {
    opacity: 0.6;
    cursor: wait;
}

.swv2-end-of-feed {
    font-size: 13px;
    color: #999;
    margin: 0;
}

.swv2-pagination {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 16px;
    padding: 12px 0;
    font-size: 14px;
}

.swv2-pagination a {
    color: #c00;
    text-decoration: none;
    font-weight: 600;
}

.swv2-pagination a:hover {
    text-decoration: underline;
}

/* Footer */
.swv2-footer {
    padding: 16px 20px;
    text-align: center;
    font-size: 13px;
    color: #666;
}

.swv2-footer p {
    margin: 4px 0;
}

.swv2-footer-small {
    font-size: 11px;
    color: #999;
}

.swv2-footer-links {
    font-size: 11px;
    margin-top: 8px !important;
}

.swv2-footer-links a {
    color: #666;
    text-decoration: none;
}

.swv2-footer-links a:hover {
    text-decoration: underline;
}

.swv2-footer-disclaimer {
    font-size: 10px;
    color: #bbb;
    margin-top: 10px !important;
    line-height: 1.6;
    max-width: 680px;
    margin-left: auto;
    margin-right: auto;
}

/* ── Homepage ────────────────────────────────────────── */

.swv2-home-intro {
    text-align: center;
    padding: 28px 24px 8px;
}

.swv2-home-title {
    font-size: 22px;
    font-weight: 700;
    color: #1a1a1a;
    margin: 0 0 10px;
}

.swv2-home-desc {
    font-size: 14px;
    color: #666;
    line-height: 1.6;
    max-width: 580px;
    margin: 0 auto 12px;
    text-align: justify;
}

.swv2-home-stats {
    font-size: 13px;
    color: #999;
}

.swv2-home-stats strong {
    color: #333;
}

.swv2-home-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
    max-width: 780px;
    gap: 12px;
    padding: 16px 24px 24px;
    margin: 0 auto;
}

.swv2-home-card {
    display: flex;
    text-decoration: none !important;
    border: 1px solid #e0e0e0;
    border-radius: 6px;
    overflow: hidden;
    transition: transform 0.15s, box-shadow 0.15s;
}

.swv2-home-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}

.swv2-home-card-accent {
    width: 6px;
    flex-shrink: 0;
}

.swv2-home-card-body {
    padding: 14px 16px;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.swv2-home-sport {
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 1px;
    color: #999;
    text-transform: uppercase;
}

.swv2-home-team {
    font-size: 16px;
    font-weight: 600;
    color: #1a1a1a;
}

.swv2-home-count {
    font-size: 12px;
    color: #999;
    margin-top: 4px;
}

.swv2-home-count strong {
    color: #c00;
}

/* SEO text block on homepage */
.swv2-home-seo-text {
    padding: 20px 24px;
    border-top: 1px solid #eee;
    max-width: 640px;
    margin: 0 auto;
}

.swv2-home-seo-text h2 {
    font-size: 16px;
    font-weight: 600;
    color: #333;
    margin: 0 0 8px;
    text-align: center;
}

.swv2-home-seo-text p {
    font-size: 13px;
    color: #888;
    line-height: 1.7;
    margin: 0 0 10px;
    text-align: justify;
}

/* ── Responsive ──────────────────────────────────────── */

@media (max-width: 600px) {
    .swv2-container {
        margin: 0;
    }

    .swv2-site-bar {
        padding: 10px 14px;
    }

    .swv2-site-name {
        font-size: 24px;
        letter-spacing: 2px;
    }

    .swv2-header-inner {
        flex-direction: column;
        align-items: flex-start;
        gap: 6px;
        padding: 12px 14px 6px;
    }

    .swv2-header-right {
        font-size: 11px;
        flex-wrap: wrap;
        gap: 8px;
    }

    .swv2-team-name {
        font-size: 18px;
    }

    .swv2-crumbbar {
        padding: 6px 12px;
    }

    .swv2-breadcrumbs {
        font-size: 11px;
    }

    /* v2.51.96: drop the Home crumb on phones — the site header already
       goes home, so it's a redundant link costing horizontal room. Shorten
       the breadcrumb, never the disclosure. */
    /* v2.52.8: phones drop BOTH the Home and team crumbs. The team name is
       already in the header directly above, and the active nav tab already
       names the page — so the full crumb was pure repetition, and it was long
       enough to wrap the disclosure onto a second line. The current-page crumb
       stays, so there is still a breadcrumb; the BreadcrumbList schema is
       unaffected either way, since these are hidden, not removed. */
    /* v2.52.9: phones drop the Home crumb and swap the team's full name for its
       curated short_name — "Yankees" rather than "New York Yankees". The team
       crumb itself stays: it is the team hub's strongest internal-link source,
       and a two-item breadcrumb is more useful than one. Both strings are always
       in the DOM; CSS picks which is visible, so the markup stays cacheable. */
    .swv2-bc-home,
    .swv2-bc-sep-home,
    .swv2-bc-full {
        display: none;
    }

    .swv2-bc-short {
        display: inline;
    }

    /* Vanity metric; no user value. "All times {TZ}" stays — that one is
       genuinely useful. */
    .swv2-header-count {
        display: none;
    }

    .swv2-article {
        padding: 8px 12px;
    }

    .swv2-link {
        font-size: 14px;
    }

    .swv2-snippet {
        font-size: 12px;
    }

    .swv2-time {
        font-size: 11px;
    }

    .swv2-nav-link {
        font-size: 11px;
        padding: 6px 8px;
    }

    .swv2-banner {
        flex-direction: column;
    }

    .swv2-banner-left {
        flex: none;
        padding: 16px;
    }

    .swv2-banner-team {
        font-size: 30px;
    }

    .swv2-banner-right {
        padding: 14px 16px;
    }

    .swv2-banner-cta-btn {
        align-self: center;
        text-align: center;
        width: 100%;
    }

    .swv2-home-grid {
        grid-template-columns: 1fr 1fr;
        padding: 12px 12px 20px;
    }

    .swv2-home-title {
        font-size: 17px;
    }
}
/* ============================================================
   Network-Wide Guides Hub — appended 2026-04-24
   Renders at /guides/ via [sports_wire_guides_hub]
   Reuses .swv2-site-bar / .swv2-home-intro / .swv2-home-seo-text
   / .swv2-footer from the existing homepage styles. The new
   .swv2-ngh-* class family covers the team card + 3-guide stack.
   ============================================================ */

/* Override container width — guides hub needs more horizontal room
   than the 800px news container so 2-column team cards breathe. */
.swv2-container.swv2-network-guides-hub {
    max-width: 1100px;
}

/* Grid of team cards — 2 columns on desktop, 1 on mobile */
.swv2-network-guides-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 16px;
    padding: 16px 24px 24px;
    max-width: 1060px;
    margin: 0 auto;
}
@media (min-width: 720px) {
    .swv2-network-guides-grid {
        grid-template-columns: repeat(2, 1fr);
        gap: 20px;
    }
}

/* Team card — visually descends from .swv2-home-card (left accent +
   rounded body) but is taller and contains a 3-row guide stack. */
.swv2-ngh-card {
    display: flex;
    background: #fff;
    border: 1px solid #e0e0e0;
    border-radius: 6px;
    overflow: hidden;
    transition: box-shadow 0.15s, transform 0.15s;
    min-height: 100%;
}
.swv2-ngh-card:hover {
    box-shadow: 0 4px 14px rgba(0,0,0,0.08);
}

.swv2-ngh-card-accent {
    width: 6px;
    flex-shrink: 0;
}

.swv2-ngh-card-body {
    flex: 1;
    display: flex;
    flex-direction: column;
    padding: 16px 18px 14px;
    min-width: 0;
}

.swv2-ngh-card-head {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin-bottom: 12px;
    padding-bottom: 10px;
    border-bottom: 1px solid #eee;
}
.swv2-ngh-sport {
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 1px;
    color: #999;
    text-transform: uppercase;
}
.swv2-ngh-team {
    font-size: 17px;
    font-weight: 600;
    color: #1a1a1a;
    margin: 0;
    line-height: 1.2;
}

/* 3-guide stack */
.swv2-ngh-guides {
    list-style: none;
    margin: 0;
    padding: 0;
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 0;
}
.swv2-ngh-guide {
    margin: 0;
    padding: 0;
}
.swv2-ngh-guide + .swv2-ngh-guide {
    border-top: 1px solid #f3f3f3;
}

.swv2-ngh-guide-link {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 0;
    text-decoration: none !important;
    color: inherit;
    transition: opacity 0.15s;
}
.swv2-ngh-guide-link:hover {
    opacity: 0.8;
}
.swv2-ngh-guide-link:hover .swv2-ngh-guide-title {
    text-decoration: underline;
}

.swv2-ngh-guide-thumb {
    flex-shrink: 0;
    width: 56px;
    height: 56px;
    background: #f5f5f0;
    border-radius: 4px;
    overflow: hidden;
    display: block;
}
.swv2-ngh-guide-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.swv2-ngh-guide-meta {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 1px;
}
.swv2-ngh-guide-kicker {
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    color: #999;
}
.swv2-ngh-guide-title {
    font-size: 14px;
    font-weight: 600;
    color: #1a1a1a;
    line-height: 1.3;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}

/* "See all N guides" CTA — uses team's primary_color via inline style */
.swv2-ngh-card-cta {
    display: block;
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid #eee;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.6px;
    text-transform: uppercase;
    text-decoration: none !important;
    transition: opacity 0.15s;
}
.swv2-ngh-card-cta:hover {
    opacity: 0.7;
}

/* Coming Soon placeholder for teams without featured guides */
.swv2-ngh-card.is-coming-soon .swv2-ngh-card-body {
    opacity: 0.7;
}
.swv2-ngh-coming-soon {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: flex-start;
    padding: 12px 0;
    min-height: 220px;
}
.swv2-ngh-cs-label {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    color: #999;
    margin: 0 0 6px;
}
.swv2-ngh-cs-text {
    font-size: 13px;
    color: #666;
    line-height: 1.5;
    margin: 0;
}

/* Tighten the home-intro / home-seo-text padding within the wider container */
.swv2-network-guides-hub .swv2-home-intro {
    padding: 32px 24px 12px;
    max-width: 760px;
    margin: 0 auto;
}
.swv2-network-guides-hub .swv2-home-seo-text {
    max-width: 720px;
}

/* Mobile tightening */
@media (max-width: 480px) {
    .swv2-ngh-card-body {
        padding: 14px 14px 12px;
    }
    .swv2-ngh-team {
        font-size: 16px;
    }
    .swv2-ngh-guide-thumb {
        width: 48px;
        height: 48px;
    }
    .swv2-ngh-guide-title {
        font-size: 13px;
    }
}

/* ─────────────────────────────────────────────────────────────────────
 * v2.11.1: Mobile action strip — wraps to 4-column grid at ≤600px
 *
 * On mobile, the horizontal-scroll action strip hides items behind a
 * swipe gesture most users won't discover. This media query switches
 * the strip to a CSS grid with 4 columns, naturally wrapping to a
 * second row when there are more than 4 items.
 *
 * Item order (set in render_team_chrome) is engineered for this layout:
 *   Row 1: News, Tickets, Schedule, Watch (highest conversion intent)
 *   Row 2: Tonight, Shop, Gift Guides (secondary navigation)
 *
 * Optional items (Tickets, Schedule, Watch, Tonight, Shop) only render
 * when their URL is non-empty, so a team with fewer items will see a
 * shorter row 2 (or no row 2 at all). Grid auto-flow handles this
 * gracefully.
 *
 * Cells are 44px+ tall to meet Apple's recommended minimum touch
 * target. Text wraps inside the cell when needed (e.g. "Gift Guides"
 * → "Gift\nGuides" on the narrowest screens) rather than overflowing
 * or being truncated.
 * ───────────────────────────────────────────────────────────────────── */
@media (max-width: 600px) {
    .swv2-utility-bar {
        display: grid;
        grid-template-columns: repeat(4, 1fr);
        gap: 1px;          /* v2.14.2: was 2px */
        padding: 3px;      /* v2.14.2: was 4px */
        overflow-x: visible;
        align-items: stretch;
    }
    .swv2-util-link {
        padding: 6px 4px;  /* v2.14.2: was 10px 6px */
        font-size: 11px;
        line-height: 1.35;
        white-space: normal;
        text-align: center;
        min-height: 38px;  /* v2.14.2: was 44px */
        display: flex;
        align-items: center;
        justify-content: center;
    }
}

/* ─────────────────────────────────────────────────────────────────────
 * v2.12.0: MLB schedule page styles
 *
 * MLB teams have 162 regular-season games — far too many for the card
 * layout used on NFL schedule pages. We use a compact table layout
 * instead, with three sections: Next 14 (upcoming), Recent Results
 * (last 14 with scores), and Full Schedule (collapsible <details>).
 * ───────────────────────────────────────────────────────────────────── */
.swv2-mlb-section {
    margin: 18px 0 24px;
}
.swv2-mlb-games {
    width: 100%;
    border-collapse: collapse;
    font-size: 14px;
    margin-top: 8px;
}
.swv2-mlb-games thead th {
    text-align: left;
    padding: 8px 10px;
    border-bottom: 2px solid #ddd;
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    color: #666;
    letter-spacing: 0.4px;
}
.swv2-mlb-games tbody tr {
    border-bottom: 1px solid #f0f0f0;
}
.swv2-mlb-games tbody tr:hover {
    background: #fafafa;
}
.swv2-mlb-games td {
    padding: 10px;
    color: #333;
    line-height: 1.4;
}
.swv2-mlb-games__date {
    width: 60px;
    font-weight: 600;
    color: #555;
    white-space: nowrap;
}
.swv2-mlb-games__matchup {
    font-weight: 600;
}
.swv2-mlb-games__time {
    width: 90px;
    color: #666;
    white-space: nowrap;
}
.swv2-mlb-games__bc {
    width: 130px;
    color: #555;
    font-size: 13px;
}
.swv2-mlb-games__result {
    width: 80px;
    font-weight: 600;
    white-space: nowrap;
}
.swv2-mlb-outcome--w { color: #15803d !important; font-weight: 700; }
.swv2-mlb-outcome--l { color: #c62828 !important; font-weight: 700; }
.swv2-mlb-outcome--t { color: #666 !important; font-weight: 700; }
.swv2-mlb-outcome--d { color: #666 !important; font-weight: 700; } /* soccer draw */
.swv2-mls-wcbreak { margin: 14px 0; padding: 12px 16px; background: #eef3fc; border-left: 4px solid #1a3a8f; border-radius: 4px; font-size: 14px; line-height: 1.5; color: #1a2540; }
.swv2-mlb-game--upcoming { color: #444; }
.swv2-mlb-game--final { color: #666; }
/* Schedule tickets column (v2.42.22) — compact, upcoming games only */
.swv2-mlb-games__tix { width: 84px; white-space: nowrap; text-align: right; }
.swv2-mlb-tix {
    display: inline-block; padding: 4px 12px; border-radius: 999px;
    border: 1px solid var(--tix, #003087); color: var(--tix, #003087);
    font-size: 12px; font-weight: 700; text-decoration: none; line-height: 1.4;
    transition: background .12s ease, color .12s ease;
}
.swv2-mlb-tix:hover { background: var(--tix, #003087); color: #fff; }

.swv2-mlb-fullschedule {
    margin: 24px 0;
    padding: 0;
}
.swv2-mlb-fullschedule > summary {
    padding: 12px 16px;
    background: #f5f5f5;
    cursor: pointer;
    font-weight: 600;
    color: #333;
    border-radius: 4px;
    list-style: none;
    position: relative;
}
.swv2-mlb-fullschedule > summary::-webkit-details-marker { display: none; }
.swv2-mlb-fullschedule > summary::after {
    content: '▼';
    float: right;
    font-size: 10px;
    color: #888;
    transition: transform 0.15s;
}
.swv2-mlb-fullschedule[open] > summary::after {
    transform: rotate(180deg);
}

/* Mobile: tighten the MLB table */
@media (max-width: 600px) {
    .swv2-mlb-games {
        font-size: 12px;
    }
    .swv2-mlb-games td {
        padding: 8px 6px;
    }
    .swv2-mlb-games__bc {
        width: auto;
        font-size: 11px;
    }
    .swv2-mlb-games__time {
        width: 70px;
    }
}

/* v2.12.1: MLB Watch quick-answer scenario list */
.swv2-watch-quickanswer__list {
    margin: 12px 0 0 4px;
    padding-left: 20px;
    font-size: 14px;
    line-height: 1.6;
    color: #333;
}
.swv2-watch-quickanswer__list li {
    margin-bottom: 8px;
}

/* ─────────────────────────────────────────────────────────────────────
 * v2.13.0: NFL Draft Recap page styles
 * ───────────────────────────────────────────────────────────────────── */
.swv2-draft-hero {
    margin-bottom: 24px;
}
.swv2-draft-watch {
    margin: 24px 0;
}
.swv2-draft-players {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
    gap: 16px;
    margin-top: 16px;
}
.swv2-draft-player {
    padding: 16px;
    border: 2px solid #ddd;
    border-radius: 6px;
    background: #fafafa;
}
.swv2-draft-player__meta {
    color: #555;
    font-size: 13px;
    margin: 4px 0 12px;
}
.swv2-draft-player__cta {
    margin-top: 12px;
    text-align: right;
}
.swv2-draft-jersey-link {
    display: inline-block;
    padding: 6px 12px;
    border: 2px solid;
    border-radius: 4px;
    font-size: 13px;
    font-weight: 600;
    text-decoration: none;
    transition: opacity 0.15s;
}
.swv2-draft-jersey-link:hover {
    opacity: 0.8;
    text-decoration: none !important;
}

.swv2-draft-table {
    margin-top: 8px;
}
.swv2-draft-table th,
.swv2-draft-table td {
    text-align: left;
}
.swv2-draft-table__round,
.swv2-draft-table__pick {
    width: 60px;
    text-align: center !important;
}
.swv2-draft-row--featured {
    background: #fffbe6;
    font-weight: 600;
}

.swv2-draft-team-shop {
    margin: 24px 0;
    text-align: center;
}
.swv2-draft-team-shop a {
    display: inline-block;
    padding: 14px 24px;
    color: #fff;
    text-decoration: none;
    font-weight: 700;
    font-size: 16px;
    border-radius: 6px;
    transition: opacity 0.15s;
}
.swv2-draft-team-shop a:hover {
    opacity: 0.9;
    color: #fff !important;
}

@media (max-width: 600px) {
    .swv2-draft-players {
        grid-template-columns: 1fr;
    }
    .swv2-draft-table {
        font-size: 12px;
    }
    .swv2-draft-table__college {
        max-width: 100px;
    }
}

/* ─────────────────────────────────────────────────────────────────────
 * v2.13.1: 2026 MLB All-Star Game page styles
 * ───────────────────────────────────────────────────────────────────── */
.swv2-allstar-hero {
    margin-bottom: 24px;
}
.swv2-allstar-tickets {
    margin: 24px 0;
}
.swv2-allstar-cta-row {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
    margin: 16px 0;
}
.swv2-allstar-cta {
    display: inline-block;
    padding: 14px 24px;
    color: #fff;
    text-decoration: none;
    font-weight: 700;
    font-size: 16px;
    border-radius: 6px;
    transition: opacity 0.15s;
    flex: 1 1 auto;
    text-align: center;
    min-width: 240px;
}
.swv2-allstar-cta:hover {
    opacity: 0.9;
    text-decoration: none !important;
}
.swv2-allstar-cta--secondary {
    background: #fff !important;
    border: 2px solid;
    font-weight: 700;
}
.swv2-allstar-cta--secondary:hover {
    background: #f5f5f5 !important;
}
.swv2-allstar-tickets-note {
    margin-top: 12px;
    font-size: 14px;
    color: #555;
    line-height: 1.5;
}

.swv2-allstar-week {
    display: grid;
    gap: 12px;
    margin-top: 16px;
}
.swv2-allstar-day {
    border-left: 4px solid;
    padding: 12px 16px;
    background: #fafafa;
    border-radius: 0 4px 4px 0;
}
.swv2-allstar-day__heading {
    margin: 0 0 8px 0;
    display: flex;
    gap: 12px;
    align-items: baseline;
    font-size: 16px;
}
.swv2-allstar-day__day {
    font-weight: 700;
}
.swv2-allstar-day__date {
    color: #666;
    font-weight: 400;
    font-size: 14px;
}
.swv2-allstar-event {
    padding: 8px 0;
    border-top: 1px solid #eee;
}
.swv2-allstar-event:first-of-type {
    border-top: none;
}
.swv2-allstar-event__title {
    font-weight: 600;
    font-size: 14px;
    color: #333;
}
.swv2-allstar-event__meta {
    font-size: 12px;
    color: #666;
    margin: 2px 0 6px 0;
}
.swv2-allstar-event__desc {
    font-size: 13px;
    line-height: 1.5;
    color: #444;
    margin: 0;
}

.swv2-allstar-voting {
    margin: 24px 0;
}
.swv2-allstar-team-block {
    margin: 16px 0;
    padding: 12px 16px;
    background: #fafafa;
    border-radius: 0 4px 4px 0;
}
.swv2-allstar-team-name {
    margin: 0 0 8px 0;
    font-size: 16px;
}

@media (max-width: 600px) {
    .swv2-allstar-cta-row {
        flex-direction: column;
    }
    .swv2-allstar-cta {
        min-width: 0;
    }
}

/* ─────────────────────────────────────────────────────────────────────
 * v2.13.2: Event banner — slim time-sensitive callout that appears at
 * the top of contextual pages (e.g., 2026 MLB All-Star Game banner on
 * MLB team pages from May 29 through July 14, then auto-hides).
 * ───────────────────────────────────────────────────────────────────── */
.swv2-event-banner {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 16px;
    margin: 12px 0 16px 0;
    background: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%);
    color: #fff;
    text-decoration: none;
    border-radius: 6px;
    transition: transform 0.15s, box-shadow 0.15s;
    box-shadow: 0 2px 4px rgba(0,0,0,0.08);
}
.swv2-event-banner:hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 8px rgba(0,0,0,0.12);
    color: #fff !important;
    text-decoration: none !important;
}
.swv2-event-banner__emoji {
    font-size: 22px;
    flex-shrink: 0;
}
.swv2-event-banner__text {
    flex: 1 1 auto;
    line-height: 1.35;
}
.swv2-event-banner__headline {
    display: block;
    font-size: 15px;
    font-weight: 700;
}
.swv2-event-banner__subhead {
    display: block;
    font-size: 13px;
    opacity: 0.92;
    margin-top: 2px;
}
.swv2-event-banner__arrow {
    font-size: 22px;
    flex-shrink: 0;
    opacity: 0.7;
}

@media (max-width: 600px) {
    .swv2-event-banner {
        padding: 10px 12px;
        gap: 10px;
    }
    .swv2-event-banner__headline {
        font-size: 14px;
    }
    .swv2-event-banner__subhead {
        font-size: 12px;
    }
}

/* ─────────────────────────────────────────────────────────────────────
 * v2.14.0: WNBA Schedule + Tonight + Watch renderers
 * All styling reuses MLB classes (.swv2-mlb-section, .swv2-mlb-games,
 * .swv2-mlb-fullschedule) plus the shared .swv2-tonight-* and
 * .swv2-watch-* class families. No new CSS required — pure renderer
 * additions in PHP only.
 * ───────────────────────────────────────────────────────────────────── */

/* ───────────────────────────────────────────────────────────────
   v2.17.0 — header standing line, outbound-link marker, A2HS banner
   ─────────────────────────────────────────────────────────────── */

/* Stack team name + record/standing subline inside header-left */
.swv2-header-title {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}
/* v2.52.286 — Football | Basketball switch for dual-sport schools */
.swv2-sport-switch {
    display: inline-flex;
    gap: 4px;
    margin-top: 6px;
    padding: 2px;
    border-radius: 999px;
    background: rgba(0,0,0,0.22);
}
.swv2-sport-switch__opt {
    font-size: 12px;
    font-weight: 700;
    line-height: 1;
    padding: 5px 12px;
    border-radius: 999px;
    text-decoration: none !important;
    color: rgba(255,255,255,0.82) !important;
}
.swv2-sport-switch__opt.is-active {
    background: #fff;
    color: #111 !important;
}
.swv2-sport-switch__opt:focus-visible {
    outline: 2px solid #fff;
    outline-offset: 2px;
}
.swv2-team-standing {
    font-size: 12px;
    font-weight: 600;
    line-height: 1.2;
    color: rgba(255,255,255,0.82) !important;
    white-space: nowrap;
}
.swv2-standing-record,
.swv2-standing-streak { color: #ffffff !important; }
.swv2-standing-sep { opacity: 0.5; margin: 0 5px; }

/* Inline line icons in the utility bar (v2.17.1) — replace emoji */
.swv2-util-link { word-spacing: normal; } /* v2.17.1: emoji-gap hack no longer needed */
.swv2-util-ico {
    width: 15px;
    height: 15px;
    vertical-align: -3px;
    margin-right: 6px;
    flex: none;
}

/* Outbound-link marker on the utility bar (Tickets / Shop / external Watch/Schedule).
   v2.17.1: ESPN-style "open in new window" box+arrow (masked SVG, inherits color). */
.swv2-util-ext::after {
    content: "";
    display: inline-block;
    width: 0.78em;
    height: 0.78em;
    margin-left: 5px;
    vertical-align: -0.04em;
    background-color: currentColor;
    opacity: 0.6;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'/%3E%3Cpolyline points='15 3 21 3 21 9'/%3E%3Cline x1='10' y1='14' x2='21' y2='3'/%3E%3C/svg%3E") no-repeat center / contain;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'/%3E%3Cpolyline points='15 3 21 3 21 9'/%3E%3Cline x1='10' y1='14' x2='21' y2='3'/%3E%3C/svg%3E") no-repeat center / contain;
}

/* Add to Home Screen banner */
.swv2-a2hs {
    position: fixed;
    left: 12px; right: 12px; bottom: 12px;
    z-index: 9999;
    display: flex;
    align-items: center;
    gap: 10px;
    max-width: 560px;
    margin: 0 auto;
    background: #ffffff;
    color: #1a1a1a;
    border: 1px solid #e3e3e3;
    border-left: 4px solid var(--swv2-a2hs-accent, #111);
    border-radius: 10px;
    padding: 12px 14px;
    box-shadow: 0 6px 24px rgba(0,0,0,0.16);
    font-size: 14px;
    line-height: 1.35;
}
.swv2-a2hs-text { flex: 1; }
.swv2-a2hs-add {
    background: var(--swv2-a2hs-accent, #111);
    color: #fff;
    border: none;
    border-radius: 7px;
    padding: 8px 16px;
    font-size: 14px;
    font-weight: 700;
    cursor: pointer;
    white-space: nowrap;
}
.swv2-a2hs-close {
    background: none;
    border: none;
    font-size: 22px;
    line-height: 1;
    color: #888;
    cursor: pointer;
    padding: 0 4px;
}
.swv2-a2hs-share {
    display: inline-block;
    border: 1px solid #bbb;
    border-radius: 4px;
    padding: 0 5px;
    font-weight: 700;
}
@media (min-width: 600px) {
    .swv2-a2hs { left: auto; right: 16px; width: 380px; margin: 0; }
}

/* ───────────────────────────────────────────────────────────────
   v2.18.0 — daily roundup signup (footer)
   ─────────────────────────────────────────────────────────────── */
.swv2-roundup {
    max-width: 520px;
    margin: 0 auto 24px;
    padding: 20px 22px;
    background: #fff;
    border: 1px solid #e3e3e3;
    border-top: 3px solid #d8332e;
    border-radius: 10px;
    text-align: center;
}
.swv2-roundup-head {
    font-size: 18px;
    font-weight: 700;
    color: #111;
    margin-bottom: 4px;
}
.swv2-roundup-sub {
    font-size: 13px;
    color: #555;
    margin: 0 0 14px;
    line-height: 1.4;
}
.swv2-roundup-form {
    display: flex;
    gap: 8px;
    justify-content: center;
    flex-wrap: wrap;
}
.swv2-roundup-email {
    flex: 1;
    min-width: 200px;
    max-width: 320px;
    padding: 10px 12px;
    font-size: 14px;
    border: 1px solid #ccc;
    border-radius: 7px;
}
.swv2-roundup-email:focus {
    outline: none;
    border-color: #d8332e;
    box-shadow: 0 0 0 2px rgba(216,51,46,0.15);
}
.swv2-roundup-btn {
    padding: 10px 20px;
    font-size: 14px;
    font-weight: 700;
    color: #fff;
    background: #d8332e;
    border: none;
    border-radius: 7px;
    cursor: pointer;
    white-space: nowrap;
}
.swv2-roundup-btn:hover { background: #bf2a26; }
.swv2-roundup-btn:disabled { opacity: 0.6; cursor: default; }
.swv2-roundup-msg {
    font-size: 13px;
    margin: 10px 0 0;
    min-height: 1em;
}
.swv2-roundup-ok  { color: #1a7f37; }
.swv2-roundup-err { color: #c0392b; }
.swv2-roundup-rss {
    font-size: 12px;
    color: #777;
    margin: 12px 0 0;
}
.swv2-roundup-rss a { color: #777; text-decoration: underline; }

/* ── Fan guide canvas (v2.42.13) ─────────────────────────────── */
.swv2-fan-guide-canvas { margin: 0; }
.swv2-fan-guide { font-size: 1.05rem; line-height: 1.7; padding: 4px 18px 64px; }
.swv2-fan-guide img { max-width: 100%; height: auto; }
.swv2-fan-guide figure { margin: 1.5em 0; }
.swv2-fan-guide figcaption { font-size: .85rem; color: #666; margin-top: .4em; }
.swv2-fan-guide h2 { margin-top: 1.8em; }
.swv2-fan-guide h3 { margin-top: 1.3em; }
.swv2-fg-banner-wrap { margin: 28px 0; }

/* Fan-guide CTA card (v2.42.17) — compact icon card + taller media variant */
.swv2-fg-cta {
    display: flex; align-items: stretch; text-decoration: none;
    background: #ffffff; border: 1px solid #dfe4ee; border-radius: 12px;
    overflow: hidden; line-height: 1.3;
    transition: transform .15s ease, box-shadow .15s ease;
}
.swv2-fg-cta:hover { transform: translateY(-1px); box-shadow: 0 6px 18px rgba(0,0,0,.12); }
.swv2-fg-cta__icon {
    flex: none; width: 92px; background: var(--cta-bg, #003087);
    color: var(--cta-on, #fff); display: flex; align-items: center; justify-content: center; padding: 12px;
}
.swv2-fg-cta__icon svg { width: 38px; height: 38px; }
.swv2-fg-cta__body {
    flex: 1; min-width: 0; display: flex; flex-direction: column; justify-content: center;
    gap: 2px; padding: 13px 18px;
}
.swv2-fg-cta__title { color: #10233f; font-size: 1.08rem; font-weight: 800; line-height: 1.2; }
.swv2-fg-cta__sub { color: #5d6b82; font-size: .88rem; line-height: 1.35; }
.swv2-fg-cta__btn {
    flex: none; align-self: center; margin-right: 18px; line-height: 1;
    background: var(--cta-bg, #003087); color: var(--cta-on, #fff);
    font-weight: 700; font-size: .9rem; padding: 11px 18px; border-radius: 8px; white-space: nowrap;
}
/* Media variant — taller, fronted by a product image (e.g. gear) */
.swv2-fg-cta--media .swv2-fg-cta__media {
    flex: none; width: 130px; background: var(--cta-bg, #003087);
    display: flex; align-items: center; justify-content: center; overflow: hidden;
}
.swv2-fg-cta--media .swv2-fg-cta__media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.swv2-fg-cta--media .swv2-fg-cta__body { padding: 24px 20px; gap: 4px; }
.swv2-fg-cta--media .swv2-fg-cta__title { font-size: 1.22rem; }
@media (max-width: 560px) {
    .swv2-fg-cta { flex-direction: column; }
    .swv2-fg-cta__icon { width: 100%; padding: 14px; }
    .swv2-fg-cta--media .swv2-fg-cta__media { width: 100%; height: 160px; }
    .swv2-fg-cta__btn { align-self: stretch; margin: 0 18px 16px; text-align: center; }
}

/* Fan Guides hub (v2.42.19) — chrome + card grid of a team's guides */
.swv2-fg-hub { padding: 8px 0 36px; }
.swv2-fg-hub__head { padding: 20px 4px 6px; }
.swv2-fg-hub__title { font-size: 1.85rem; font-weight: 800; color: #10233f; margin: 0 0 6px; line-height: 1.2; }
.swv2-fg-hub__intro { color: #5d6b82; font-size: 1rem; margin: 0; line-height: 1.5; }
.swv2-fg-hub__grid {
    display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 18px; padding: 18px 4px 4px;
}
.swv2-fg-card {
    display: flex; flex-direction: column; text-decoration: none; background: #fff;
    border: 1px solid #dfe4ee; border-radius: 12px; overflow: hidden;
    transition: transform .15s ease, box-shadow .15s ease;
}
.swv2-fg-card:hover { transform: translateY(-2px); box-shadow: 0 8px 22px rgba(0,0,0,.12); }
.swv2-fg-card__img {
    display: block; width: 100%; padding-top: 56%;
    background-size: cover; background-position: center; background-color: #e9eef6;
}
.swv2-fg-card__body { display: flex; flex-direction: column; gap: 6px; padding: 14px 16px 16px; }
.swv2-fg-card__title { color: #10233f; font-size: 1.1rem; font-weight: 700; line-height: 1.3; }
.swv2-fg-card__excerpt { color: #5d6b82; font-size: .9rem; line-height: 1.45; }
.swv2-fg-card__more { color: var(--team-primary, #003087); font-weight: 700; font-size: .9rem; margin-top: 2px; }
.swv2-fg-hub__empty { color: #5d6b82; padding: 18px 4px; }
@media (max-width: 560px) { .swv2-fg-hub__grid { grid-template-columns: 1fr; } }

/* v2.49.1: homepage Sports Tonight CTA (below the gift-guide promo) */
.swv2-home-tonight { text-align: center; margin: 18px 0 26px; }
.swv2-home-tonight-q { font-size: 14px; color: #555; margin: 0 0 8px; }
.swv2-home-tonight-cta {
    display: inline-block; background: #0F172A; color: #fff;
    padding: 10px 18px; border-radius: 4px; font-size: 14px; font-weight: 600;
    text-decoration: none;
}
.swv2-home-tonight-cta:hover { background: #1E293B; color: #fff; }


/* v2.51.61: internal player links — Leaders, HR Race, Status Board,
   Probable Pitchers, Injury Report all point at /players/{team}/{name}/.
   Subtle by design: these are in-content links inside data tables, not CTAs. */
.swv2-plink { text-decoration: none; border-bottom: 1px dotted currentColor; }
.swv2-plink:hover { border-bottom-style: solid; }

/* StubHub text CTA (v2.51.75) — StubHub ships no image creatives, so its ad
   slot renders as a labelled link. Styled as a clear CTA card, team-accented,
   distinct from the in-content .swv2-plink links. The affiliate disclosure in
   the page chrome sits above this per StubHub Program Terms §7. */
.swv2-ad-stubhub {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 14px 18px; margin: 0 auto; max-width: 728px;
  border: 2px solid var(--swv2-ad-accent, #003087); border-radius: 10px;
  text-decoration: none; background: #fff;
  transition: background .15s ease, transform .15s ease;
}
.swv2-ad-stubhub:hover { background: #f7f9fc; transform: translateY(-1px); }
.swv2-ad-stubhub__label { font-weight: 700; color: #111; font-size: 15px; }
.swv2-ad-stubhub__cta {
  font-weight: 800; color: var(--swv2-ad-accent, #003087);
  white-space: nowrap; font-size: 15px;
}
@media (max-width: 480px) {
  .swv2-ad-stubhub { flex-direction: column; text-align: center; gap: 6px; }
}

/* ══════════════════════════════════════════════════════════════════
   v2.52.99 — Mobile bottom anchor (news pages)
   Hidden ≥1024px (display:none also keeps the IntersectionObserver
   from ever firing a false impression on desktop). 64px band + safe-
   area inset — deliberately inside the 50–90px standard anchor range
   and far under the ~30%sw-viewport Better Ads Standards line. Body
   padding (via .swv2-has-anchor, added by script.js) keeps the bar
   from covering the last story or the footer.
   ══════════════════════════════════════════════════════════════════ */
.swv2-anchor { display: none; }

@media (max-width: 1023px) {
    .swv2-anchor {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 9990;
        display: flex;
        align-items: center;
        gap: 8px;
        min-height: 64px;
        padding: 8px;
        padding-bottom: calc(8px + env(safe-area-inset-bottom, 0px));
        background: #fff;
        border-top: 1px solid #ddd;
        box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.10);
    }
    body.swv2-has-anchor {
        padding-bottom: calc(80px + env(safe-area-inset-bottom, 0px));
    }
    .swv2-anchor__ad-label {
        flex: 0 0 auto;
        writing-mode: vertical-rl;
        font-size: 9px;
        font-weight: 700;
        letter-spacing: 0.12em;
        color: #999;
        text-transform: uppercase;
    }
    .swv2-anchor__cta {
        flex: 1 1 auto;
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 10px;
        min-height: 48px;
        padding: 0 14px;
        border-radius: 6px;
        text-decoration: none;
    }
    .swv2-anchor__msg {
        font-size: 14px;
        font-weight: 600;
        line-height: 1.25;
    }
    .swv2-anchor__btn {
        flex: 0 0 auto;
        font-size: 12px;
        font-weight: 700;
        letter-spacing: 0.03em;
        padding: 7px 10px;
        border-radius: 4px;
        background: rgba(255, 255, 255, 0.92);
        color: #1a1a1a;
        white-space: nowrap;
    }
    .swv2-anchor__html { flex: 1 1 auto; overflow: hidden; max-height: 90px; }
    .swv2-anchor__close {
        flex: 0 0 auto;
        width: 34px;
        height: 34px;
        display: flex;
        align-items: center;
        justify-content: center;
        border: 1px solid #ccc;
        border-radius: 50%;
        background: #f6f6f6;
        color: #444;
        font-size: 18px;
        line-height: 1;
        cursor: pointer;
        padding: 0;
    }
}

/* ══════════════════════════════════════════════════════════════════
   v2.52.100 — CSS banner style variants (s1 needs no rules: it IS the
   base look; s2 is pure color inversion, handled inline). Same DOM in
   all four, so the rail's block override and the beacon selector keep
   working untouched.
   ══════════════════════════════════════════════════════════════════ */

/* s3 — solid, centered stack */
.swv2-banner--s3 { flex-direction: column; text-align: center; }
.swv2-banner--s3 .swv2-banner-left { flex: 0 0 auto; padding: 18px 16px 2px; }
.swv2-banner--s3 .swv2-banner-right { align-items: center; padding: 2px 24px 20px; }
.swv2-banner--s3 .swv2-banner-cta-btn { align-self: center; }

/* s4 — light card with a team-color spine */
.swv2-banner--s4 { border: 1px solid #e2e2e2; }
.swv2-banner--s4 .swv2-banner-left { flex: 0 0 14px; padding: 0; }
.swv2-banner--s4 .swv2-banner-left > * { display: none; }
.swv2-banner--s4 .swv2-banner-cta-text { font-size: 20px; }

/* Narrow rail: s4's spine becomes a top bar when the rail override
   stacks the banner; give it height so the team color survives. */
.swv2-rail-ad .swv2-banner--s4 .swv2-banner-left { height: 6px; width: 100%; }

/* ══════════════════════════════════════════════════════════════════
   v2.52.104 — Amazon antenna CTA (watch pages, free-to-watch section)
   The disclosure is legally required to sit with the link, but it is
   fine print, not body copy: block-level under the button, muted and
   smaller, with real space above and below so the section doesn't run
   into the FAQ heading beneath it.
   ══════════════════════════════════════════════════════════════════ */
.swv2-amazon-cta {
    margin: 20px 0 28px;
}
.swv2-amazon-cta .swv2-howtowatch__btn {
    display: inline-block;
}
.swv2-amazon-disclosure {
    display: block;
    margin-top: 10px;
    font-size: 12px;
    line-height: 1.5;
    color: #6b6b6b;
}

/* ------------------------------------------------------------------
   v2.52.141 / .155 — Editorial article (class renamed: .swv2-article
   is the news-feed ROW class and was being clobbered): pull-quote tiles + related block.
   Colour comes from --swv2-team, set on .swv2-analysis-body by
   SWv2_Post_Chrome::wrap() from the post's swv2_teams meta. No inline
   per-post styling, so a team re-colour in config propagates everywhere.
   ------------------------------------------------------------------ */
.swv2-analysis-body { --swv2-team: #333; --swv2-team-2: #666; }

.swv2-pull {
  margin: 2rem 0;
  padding: 1.25rem 1.25rem 1.25rem 1.5rem;
  border-left: 6px solid var(--swv2-team);
  background: color-mix(in srgb, var(--swv2-team) 6%, transparent);
  border-radius: 4px;
}
/* Older browsers without color-mix() get a flat neutral wash instead of
   a transparent background — still legible, just less branded. */
@supports not (background: color-mix(in srgb, red 5%, transparent)) {
  .swv2-pull { background: #f6f6f7; }
}
.swv2-pull p {
  margin: 0;
  font-family: 'Bebas Neue', Impact, sans-serif;
  font-size: clamp(1.25rem, 2.6vw, 1.75rem);
  line-height: 1.25;
  letter-spacing: .02em;
  color: var(--swv2-team);
}
@media (prefers-color-scheme: dark) {
  .swv2-pull p { color: inherit; }
  .swv2-pull { background: rgba(255,255,255,.04); }
}

.swv2-related {
  margin: 2.5rem 0 0;
  padding: 1rem 1.25rem;
  border-top: 4px solid var(--swv2-team);
  background: #fafafa;
}
.swv2-related h2 {
  margin: 0 0 .5rem;
  font-family: 'Bebas Neue', Impact, sans-serif;
  font-size: 1.35rem;
  letter-spacing: .03em;
  color: var(--swv2-team);
}
.swv2-related ul { margin: 0; padding-left: 1.1rem; }
.swv2-related li { margin: .3rem 0; }

/* v2.52.295 — analysis tables ("By the numbers"), team links, sources.
   display:block on the table lets a wide table scroll inside the 800px
   column on phones instead of widening the page. */
.swv2-analysis-body table {
  display: block;
  overflow-x: auto;
  max-width: 100%;
  border-collapse: collapse;
  margin: 1.25rem 0;
  font-size: .95rem;
}
.swv2-analysis-body caption {
  text-align: left;
  font-weight: 700;
  padding: 0 0 .4rem;
  color: var(--swv2-team);
}
.swv2-analysis-body th,
.swv2-analysis-body td {
  padding: .45rem .75rem;
  border-bottom: 1px solid #e5e5e5;
  text-align: left;
  white-space: nowrap;
}
.swv2-analysis-body th { background: #f4f4f4; font-weight: 700; }
.swv2-team-links { margin-top: 2rem; }
.swv2-sources {
  margin: 1.5rem 0 0;
  font-size: .85rem;
  color: #555;
}
.swv2-sources h2 {
  font-size: 1rem;
  margin: 0 0 .25rem;
  text-transform: uppercase;
  letter-spacing: .05em;
}
.swv2-sources p { margin: 0 0 .35rem; }
.swv2-analysis-body > .swv2-ai-note {
  margin: 1.25rem 0 0;
  padding: .6rem 1rem;
  font-size: .8rem;
  color: #666;
  border-left: 3px solid #ddd;
}
.swv2-sources ul { margin: 0; padding-left: 1.1rem; }
@media (prefers-color-scheme: dark) {
  .swv2-analysis-body th { background: rgba(255,255,255,.06); }
  .swv2-analysis-body th, .swv2-analysis-body td { border-bottom-color: rgba(255,255,255,.12); }
  .swv2-sources { color: inherit; opacity: .8; }
}

/* v2.52.142 — hub/homepage "Latest coverage" list. Inherits --swv2-team on a
   team hub; on the region homepage there is no single team, so it falls back
   to the .swv2-analysis-body default set above. */
.swv2-related--hub { background: #fff; border-top-width: 3px; }
.swv2-related--hub li {
  display: flex; justify-content: space-between; gap: 1rem; align-items: baseline;
}
.swv2-related-date {
  flex: none; font-size: .8rem; color: #767676; font-variant-numeric: tabular-nums;
}

/* v2.52.144 / .147 — SWN Analysis panel. Row shape mirrors the news feed:
   timestamp, team badge, headline. Badge colour is inline per row because the
   region homepage mixes teams. */
.swv2-analysis-panel {
  --swv2-team: #333;
  margin: 1.5rem 0;
  border: 1px solid #e3e3e6;
  border-top: 3px solid var(--swv2-team);
  border-radius: 4px;
  background: #fff;
  padding: 1rem 1.15rem 1.15rem;
}
.swv2-analysis-head {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 1rem; margin-bottom: .75rem;
}
.swv2-analysis-head h2 {
  margin: 0; font-family: 'Bebas Neue', Impact, sans-serif;
  font-size: 1.05rem; letter-spacing: .06em; text-transform: uppercase;
  color: var(--swv2-team);
}
.swv2-analysis-tag {
  font-size: .68rem; letter-spacing: .08em; text-transform: uppercase;
  color: #767676; white-space: nowrap; text-decoration: none;
}
a.swv2-analysis-tag:hover { color: var(--swv2-team); text-decoration: underline; }
.swv2-analysis-list { list-style: none; margin: 0; padding: 0; }
.swv2-analysis-item { padding: .7rem 0; border-top: 1px solid #f0f0f2; }
.swv2-analysis-item:first-child { border-top: 0; padding-top: 0; }

.swv2-analysis-line {
  display: flex; align-items: center; gap: .5rem;
  margin-bottom: .25rem; flex-wrap: wrap;
}
.swv2-analysis-time {
  font-size: .76rem; font-weight: 600; color: #c8102e;
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.swv2-analysis-badge {
  display: inline-block; padding: .12rem .45rem; border-radius: 3px;
  font-family: 'Bebas Neue', Impact, sans-serif;
  font-size: .72rem; letter-spacing: .07em; line-height: 1.4;
  color: #fff; white-space: nowrap;
}
.swv2-analysis-title {
  display: block; font-weight: 600; line-height: 1.3; text-decoration: none;
}
.swv2-analysis-title:hover { text-decoration: underline; }
.swv2-analysis-ex {
  margin: .3rem 0 0; font-size: .82rem; line-height: 1.45; color: #55555c;
}
@media (min-width: 700px) {
  .swv2-analysis-list {
    display: grid; grid-template-columns: 1fr 1fr; gap: 0 1.5rem;
  }
  .swv2-analysis-item:nth-child(2) { border-top: 0; padding-top: 0; }
}

/* v2.52.145 — editorial article body inside the standard .swv2-container. */
/* v2.52.150: pad the PROSE by name, never "everything except X".
   The previous rule excluded .swv2-chrome* / .swv2-teamheader — neither class
   exists. The real chrome children are .swv2-site-bar, .swv2-header,
   .swv2-crumbbar and .swv2-more-row, so all of them picked up 1rem of side
   padding and rendered inset from the container edge while the hub's identical
   chrome sat flush. A positive list cannot fail this way: a chrome element
   added later is simply not padded. */
.swv2-analysis-body { padding: 0 0 2rem; }
.swv2-analysis-body > p,
.swv2-analysis-body > h2,
.swv2-analysis-body > h3,
.swv2-analysis-body > h4,
.swv2-analysis-body > ul,
.swv2-analysis-body > ol,
.swv2-analysis-body > blockquote,
.swv2-analysis-body > table,
.swv2-analysis-body > hr,
.swv2-analysis-body > .swv2-pull,
.swv2-analysis-body > .swv2-related,
.swv2-analysis-body > .swv2-analysis-title-h1,
.swv2-analysis-body > .swv2-analysis-byline,
.swv2-analysis-body > .swv2-sources,
.swv2-analysis-body > .swv2-analysis-content {
  padding-left: 1rem; padding-right: 1rem;
}
/* v2.52.296: the body now sits in .swv2-analysis-content (padded as a block,
   above), so its own children must not be padded a second time. */
/* (Pull-quote tiles keep their own padding: not listed.) */
.swv2-analysis-content > p, .swv2-analysis-content > h2, .swv2-analysis-content > h3,
.swv2-analysis-content > h4, .swv2-analysis-content > ul, .swv2-analysis-content > ol,
.swv2-analysis-content > blockquote, .swv2-analysis-content > table,
.swv2-analysis-content > hr { padding-left: 0; padding-right: 0; }
.swv2-analysis-title-h1 {
  margin: 1.25rem 0 .35rem;
  font-family: 'Bebas Neue', Impact, sans-serif;
  font-size: clamp(1.9rem, 5vw, 2.6rem);
  line-height: 1.08;
  letter-spacing: .01em;
  color: #111;
}
.swv2-analysis-byline {
  margin: 0 0 1.5rem;
  font-size: .78rem; letter-spacing: .06em; text-transform: uppercase;
  color: var(--swv2-team);
  padding-bottom: .75rem; border-bottom: 2px solid var(--swv2-team);
}
.swv2-analysis-body h2 { margin: 2rem 0 .6rem; line-height: 1.2; }
.swv2-analysis-body h3 { margin: 1.5rem 0 .4rem; }
.swv2-analysis-body p  { margin: 0 0 1rem; }
.swv2-analysis-body ul, .swv2-analysis-body ol { margin: 0 0 1rem; padding-left: 1.3rem; }
.swv2-analysis-body li { margin: .35rem 0; }
.swv2-analysis-body hr { margin: 2rem 0; border: 0; border-top: 1px solid #e6e6e9; }
.swv2-analysis-body table { width: 100%; border-collapse: collapse; margin: 0 0 1.25rem; }
.swv2-analysis-body th, .swv2-analysis-body td {
  text-align: left; padding: .5rem .6rem; border-bottom: 1px solid #ececef;
  font-size: .92rem;
}
.swv2-analysis-body th { background: #fafafa; font-weight: 600; }

/* v2.52.164 — region-wide analysis archive page. Reuses the panel row styles;
   these only cover the page frame. */
.swv2-analysis-archive { padding-bottom: 2.5rem; }
.swv2-analysis-archive > .swv2-analysis-title-h1,
.swv2-analysis-archive > .swv2-analysis-byline { padding-left: 1rem; padding-right: 1rem; }
.swv2-analysis-archive > .swv2-analysis-panel { margin: 1.25rem 1rem; }
.swv2-analysis-archive .swv2-analysis-byline {
  border-bottom: 0; padding-bottom: 0; margin-bottom: .5rem; color: #6b6b72;
  text-transform: none; letter-spacing: 0; font-size: .95rem;
}
/* One column: this page is a reading list, not a dashboard. */
@media (min-width: 700px) {
  .swv2-analysis-archive .swv2-analysis-list { grid-template-columns: 1fr; }
  .swv2-analysis-archive .swv2-analysis-item:nth-child(2) {
    border-top: 1px solid #f0f0f2; padding-top: .7rem;
  }
}

/* v2.52.165 — nav strip on the region archive. The team header supplies the
   background colour on team pages; this page has no single team, so the wrapper
   carries the neutral dark tone itself. */
.swv2-analysis-navwrap {
  background: #1f2430;
  padding: 0;
}
.swv2-analysis-navwrap .swv2-team-nav { background: transparent; }

/* v2.52.173 — tighten the utility bar so 8 tabs fit without clipping.
   The v2.52.172 backfill takes the bar to 8 items, and MLB teams carry the
   longest labels ("Giveaway Nights", "Probable Pitchers") — Chicago White Sox
   clipped at the right edge. Reclaims ~48px across 8 tabs:
     horizontal padding 14 -> 10px  (8px per tab, 64px total)
     icon gap             6 -> 5px  (1px per tab, 8px total)
   Applied only >=768px: the phone layout is a 4-column grid with its own
   padding rules further down, and is unaffected by the backfill.
   The label stays "Giveaway Nights" deliberately — it is anchor text for a
   page that targets that phrase, and shortening it would trade a real
   internal-linking signal for pixels available elsewhere. */
@media (min-width: 768px) {
  .swv2-utility-bar .swv2-util-link { padding-left: 10px; padding-right: 10px; }
  .swv2-utility-bar .swv2-util-ico  { margin-right: 5px; }
}

/* v2.52.231 — house units (internal promos). Deliberately NOT named
   swv2-ad*: ad blockers hide those wrappers, and this is site navigation,
   not advertising. Visually a card, not a banner, so it does not read as
   an ad the reader has learned to skip. */
.swv2-house {
    margin: 18px 0;
    border: 1px solid #e3e3e3;
    border-left: 4px solid var(--swv2-house-accent, #1a1a1a);
    border-radius: 8px;
    background: #fafafa;
}
.swv2-house__link { display: block; padding: 14px 16px; text-decoration: none; color: inherit; }
.swv2-house__link:hover { background: #f2f2f2; }
.swv2-house__title {
    display: block; font-weight: 700; font-size: 15px;
    color: var(--swv2-house-accent, #1a1a1a); margin-bottom: 3px;
}
.swv2-house__sub { display: block; font-size: 13px; color: #666; line-height: 1.4; }

/* ── v2.52.245: region news strip (appended at the END of the file on purpose:
   test-nav-tier-css.php reads the FIRST @media (max-width:767px) block, so a new
   media query earlier in the file would hijack that test) ("ticker") ─────────────────────────────
   A native horizontally-scrollable row, not a marquee: nothing animates, so
   there is nothing for prefers-reduced-motion to suppress. Height is fixed
   so the strip never shifts layout when ticker.js swaps in fresher items. */
.swv2-ticker {
    display: flex;
    align-items: stretch;
    height: 36px;
    background: #111;
    color: #ddd;
    border-bottom: 1px solid #333;
    font-size: 13px;
    line-height: 36px;
    overflow: hidden;
}
.swv2-ticker__label {
    flex: 0 0 auto;
    padding: 0 12px;
    background: #cc0000;
    color: #fff;
    font-weight: 700;
    font-size: 11px;
    letter-spacing: .12em;
    text-transform: uppercase;
}
.swv2-ticker__list {
    flex: 1 1 auto;
    display: flex;
    /* v2.52.254 — !important + doubled-class on the box properties: the
     * ticker renders inside the theme's .entry-content, and content rules
     * like Astra's `.entry-content ul` (0,1,1) outgun a single class
     * (0,1,0). On production the theme's 1em list margins shrank this — a
     * stretch flex item — to a 9px-tall clip window while the inherited
     * 36px line strut centered the text BELOW it: perfectly colored,
     * perfectly animated, fully clipped. Chrome lists must never take
     * content-list styling. */
    margin: 0 !important;
    padding: 0 8px !important;
    list-style: none !important;
    line-height: 36px !important;
    overflow-x: auto;
    overflow-y: hidden;
    white-space: nowrap;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    /* fade the right edge so the row reads as continuing */
    -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 40px), transparent);
            mask-image: linear-gradient(90deg, #000 calc(100% - 40px), transparent);
}
.swv2-ticker .swv2-ticker__list { margin: 0 !important; }
.swv2-ticker__list::-webkit-scrollbar { display: none; }
.swv2-ticker__item,
.swv2-ticker .swv2-ticker__item {
    flex: 0 0 auto;
    margin: 0 !important;
    padding: 0 18px 0 0 !important;
    list-style: none !important;
    text-indent: 0 !important;
}
.swv2-ticker__item + .swv2-ticker__item::before {
    content: "";
    display: inline-block;
    width: 1px;
    height: 14px;
    margin-right: 18px;
    background: #444;
    vertical-align: middle;
}
.swv2-ticker__link {
    color: #ddd !important;
    text-decoration: none !important;
}
/* v2.52.253 — defensive: on one production region the link text rendered
 * invisible (near-black on the #111 bar) despite the !important above —
 * an external stylesheet was winning on the spans or via text-fill. Doubled
 * specificity plus the fill-color guard beats anything short of an inline
 * !important. Root culprit never conclusively identified; keep this. */
.swv2-ticker .swv2-ticker__link,
.swv2-ticker .swv2-ticker__link span {
    color: #ddd !important;
    -webkit-text-fill-color: currentColor !important;
}
.swv2-ticker .swv2-ticker__team { color: #fff !important; }
/* v2.52.253 — marquee (applied by ticker.js; static row is the no-JS,
 * reduced-motion, and fits-anyway fallback). The JS wraps the items in one
 * .swv2-ticker__copy and appends an aria-hidden clone; translating the pair
 * by -50% is exactly one copy width, so the loop point is invisible. */
.swv2-ticker__copy {
    display: flex;
    flex: 0 0 auto;
    white-space: nowrap;
}
.swv2-ticker__list--marquee {
    overflow: hidden;
    -webkit-mask-image: none;
            mask-image: none;
}
.swv2-ticker__list--marquee .swv2-ticker__copy {
    animation: swv2-ticker-scroll var(--swv2-ticker-dur, 40s) linear infinite;
}
.swv2-ticker:hover        .swv2-ticker__list--marquee .swv2-ticker__copy,
.swv2-ticker:focus-within .swv2-ticker__list--marquee .swv2-ticker__copy,
.swv2-ticker--held        .swv2-ticker__list--marquee .swv2-ticker__copy {
    animation-play-state: paused;
}
@keyframes swv2-ticker-scroll {
    from { transform: translateX(0); }
    to   { transform: translateX(-100%); } /* one copy width: sibling copies, identical joints, seamless reset */
}
@media (prefers-reduced-motion: reduce) {
    .swv2-ticker__list--marquee .swv2-ticker__copy { animation: none; }
    .swv2-ticker__list--marquee { overflow-x: auto; }
}
.swv2-ticker__link:hover,
.swv2-ticker__link:focus { color: #fff !important; text-decoration: underline !important; }
.swv2-ticker__link:focus-visible { outline: 2px solid #fff; outline-offset: -2px; }
.swv2-ticker__team {
    color: #fff;
    font-weight: 700;
    margin-right: 6px;
}
@media (max-width: 767px) {
    .swv2-ticker { font-size: 12px; }
    .swv2-ticker__label { padding: 0 10px; font-size: 10px; }
}
@media print {
    .swv2-ticker { display: none; }
}
