/* =============================================================================
   Explore Hub — the /explore analytics + media hub.
   "Athlete asset terminal": market-data density (ticker tape, tabular
   numerals, sparklines, Δ pills) on the site's established dark chrome.
   Scoped under .xh; the hero brand/search styles stay in explore-v2.css.
   ============================================================================= */

.xh {
  /* Surface recipe shared with /about, /newsletter, /leaderboard:
     0.025 card shade, 0.08 hairline, 0.16 hover line, 14px radius. */
  --xh-line: rgba(255, 255, 255, 0.08);
  --xh-line-strong: rgba(255, 255, 255, 0.16);
  --xh-card: rgba(255, 255, 255, 0.025);
  --xh-strip: rgba(255, 255, 255, 0.03);
  --xh-ink: rgba(255, 255, 255, 0.92);
  --xh-ink-2: rgba(255, 255, 255, 0.55);
  --xh-ink-3: rgba(255, 255, 255, 0.35);
  --xh-accent: #00a8ff;
  --xh-pos: #4ade80;
  --xh-neg: #f87171;
  font-variant-numeric: tabular-nums;
}

/* Fluid width: the content tracks the viewport (with breathing room) instead
   of stopping at a fixed max — Pico's .container cap is lifted for this page. */
.page-explore main.container { max-width: 100%; width: 100%; padding-left: 0; padding-right: 0; }
.xh .xh-section { max-width: none; margin: 0 0 28px; padding: 0 32px; }

/* Staggered load-in */
@keyframes xhFadeUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
.xh .xh-in { animation: xhFadeUp 0.45s cubic-bezier(0.2, 0.7, 0.3, 1) both; }

/* ---- Ticker tape — part of the chrome: fixed full-width strip pinned
   directly below the global nav at all times (fixed, not sticky, so no
   ancestor overflow rule can unstick it). .xh-has-ticker pads the page so
   the hero isn't covered. */
.xh-ticker {
  position: fixed; top: var(--xh-nav-h, 54px); left: 0; right: 0; z-index: 900;
  height: 36px;
  display: flex; align-items: stretch;
  border-bottom: 1px solid var(--xh-line);
  /* Mirrors the global nav on this page: transparent at the top of the page,
     solid + blurred once the hero search scrolls away (.hero-search-hidden
     is toggled on <body> by the same observer the nav uses). */
  background: transparent;
  transition: background 0.3s, backdrop-filter 0.3s;
  overflow: hidden;
}
.page-explore.hero-search-hidden .xh-ticker {
  background: rgba(20, 23, 27, 0.65);
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
}
.xh.xh-has-ticker { padding-top: 36px; }
.xh-ticker-label {
  display: flex; align-items: center; padding: 8px 14px; flex: none;
  font-size: 0.62rem; font-weight: 800; font-style: italic; letter-spacing: 0.12em;
  color: #fff; border-right: 1px solid var(--xh-line);
}
.xh-ticker-viewport { overflow: hidden; flex: 1; display: flex; align-items: center; }
@keyframes xhTicker { from { transform: translateX(0); } to { transform: translateX(-50%); } }
.xh-ticker-track {
  display: inline-flex; align-items: center; gap: 22px; padding-left: 22px;
  white-space: nowrap; width: max-content;
  animation: xhTicker 55s linear infinite;
}
.xh-ticker:hover .xh-ticker-track { animation-play-state: paused; }
.xh-tick { display: inline-flex; align-items: baseline; gap: 8px; text-decoration: none; }
/* School mark before the name — align-self centers it inside the baseline row */
.xh-tick-logo { width: 16px; height: 16px; object-fit: contain; flex: none; align-self: center; }
.xh-tick-name { font-size: 0.74rem; font-weight: 700; color: var(--xh-ink); }
.xh-tick-val { font-size: 0.7rem; font-weight: 600; color: var(--xh-ink-2); }
.xh-tick-val.up { color: var(--xh-pos); }
.xh-tick-sep { color: var(--xh-ink-3); }

/* ---- Analytics rows: Top Articles (wide, hero + list) | Headlines (narrow)
   up top; Featured Athlete | Influence Score | Stat Leaders beneath. -------- */
/* ---- Conference filter bar ------------------------------------------------------ */
.xh-conf-bar { margin-bottom: 18px; }
.xh-conf-tabs { display: flex; flex-wrap: wrap; gap: 8px; }
/* Free-standing text+logo tabs; only the SELECTED one gets a surface — the
   same card recipe as the panels below (0.025 shade + hairline) so the chip
   reads as part of the family, not a brighter button. */
.xh-conf-tab {
  appearance: none; margin: 0; width: auto; cursor: pointer; flex: none;
  display: inline-flex; align-items: center; gap: 8px;
  padding: 8px 16px; border-radius: 9px;
  border: 1px solid transparent; background: transparent; color: var(--xh-ink-2);
  font-size: 0.84rem; font-weight: 600; font-family: inherit; letter-spacing: 0.02em;
  white-space: nowrap; transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.xh-conf-logo { width: 26px; height: 26px; object-fit: contain; display: block; flex: none; margin: -4px 0; }
.xh-conf-tab:hover { color: #fff; }
.xh-conf-tab.on { background: var(--xh-card); border-color: var(--xh-line); color: #fff; }
/* dim the scoped sections while a filtered hub payload loads */
.xh-panels, .xh-market { transition: opacity 0.18s ease; }
.xh-filtering { opacity: 0.45; pointer-events: none; }
.xh-conf-empty { padding: 28px; text-align: center; color: var(--xh-ink-3); font-size: 0.85rem; }

.xh-panels { display: block; }
.xh-row-top {
  display: grid; grid-template-columns: 1.5fr 1.25fr; gap: 14px;
  align-items: stretch; margin-bottom: 14px;
}
.xh-row-bottom {
  display: grid; grid-template-columns: 1.25fr 1.25fr 1.1fr; gap: 14px;
  align-items: stretch;
}
/* In card heads the button right-aligns; italic/uppercase/spacing resets live
   on the base .xh-more-link rule since it's a button everywhere now. */
.xh-card-head .xh-more-link { margin-left: auto; }
/* "?" info badge + tooltip — same treatment as the athlete-tab block cards */
.xh-info {
  position: relative; width: 15px; height: 15px; border-radius: 50%; flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 0.6rem; font-weight: 700; font-style: normal; letter-spacing: 0; cursor: help;
  color: rgba(255, 255, 255, 0.4); background: rgba(255, 255, 255, 0.06);
}
.xh-tip {
  position: absolute; top: calc(100% + 8px); left: 0; width: 230px; padding: 9px 11px;
  background: #101316; border: 1px solid rgba(255, 255, 255, 0.14); border-radius: 7px;
  font-size: 0.7rem; font-weight: 400; font-style: normal; letter-spacing: 0; text-transform: none;
  color: rgba(255, 255, 255, 0.72); line-height: 1.4; opacity: 0; pointer-events: none;
  transform: translateY(-4px); transition: opacity 0.14s, transform 0.14s; z-index: 60;
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.5);
}
.xh-info:hover .xh-tip, .xh-info:focus .xh-tip { opacity: 1; transform: translateY(0); }
/* Body-level twin of .xh-tip for triggers whose context clips/out-paints an
   in-place tooltip (band lede "?", the table's Influence header). Every
   visual property mirrors .xh-tip EXACTLY — if you touch one, touch both.
   position:fixed + wireFloatTip's JS replace the absolute placement. */
.xh-tip-float {
  position: fixed; width: 230px; padding: 9px 11px;
  background: #101316; border: 1px solid rgba(255, 255, 255, 0.14); border-radius: 7px;
  font-family: inherit; font-size: 0.7rem; font-weight: 400; font-style: normal;
  letter-spacing: 0; text-transform: none;
  color: rgba(255, 255, 255, 0.72); line-height: 1.4; opacity: 0; pointer-events: none;
  transform: translateY(-4px); transition: opacity 0.14s, transform 0.14s; z-index: 1300;
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.5);
}
.xh-tip-float.show { opacity: 1; transform: translateY(0); }

/* Right column: one card rotating Stat Leaders ⇄ Most Covered. Panes stack in
   the same grid cell and crossfade (compound selector beats .xh-card's flex). */
.xh-card.xh-rot-card { position: relative; display: grid; }
.xh-rot-pane {
  grid-area: 1 / 1; display: flex; flex-direction: column; min-width: 0;
  opacity: 0; pointer-events: none; transition: opacity 0.45s ease;
}
.xh-rot-pane.on { opacity: 1; pointer-events: auto; }
.xh-rot-dots { position: absolute; bottom: 12px; right: 14px; display: flex; gap: 5px; z-index: 2; }
.xh-rot-dot {
  appearance: none; margin: 0; padding: 0; width: 7px; height: 7px; border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.3); background: transparent; cursor: pointer;
  transition: background 0.15s ease;
}
.xh-rot-dot.on { background: rgba(255, 255, 255, 0.65); border-color: transparent; }

/* Influence Score preview chart (pane in the rotating mini card) */
.xh-infl-chart { width: 100%; flex: 1; min-height: 62px; }
.xh-infl-grid { stroke: rgba(255, 255, 255, 0.06); stroke-width: 1; }
.xh-infl-axis { fill: rgba(255, 255, 255, 0.35); font-size: 10px; }
.xh-infl-legend { display: flex; flex-wrap: wrap; gap: 5px 12px; padding-top: 9px; }
.xh-infl-key {
  display: inline-flex; align-items: center; gap: 6px; text-decoration: none;
  font-size: 0.66rem; font-weight: 600; color: var(--xh-ink-2); white-space: nowrap;
}
.xh-infl-key:hover { color: #fff; }
.xh-infl-key i { width: 9px; height: 9px; border-radius: 2px; flex: none; }

/* Coverage Volume mini chart — weekly bars stacked by school */
.xh-cov-chart { flex: 1; display: flex; align-items: flex-end; gap: 3px; min-height: 62px; padding-top: 6px; }
.xh-cov-col {
  flex: 1; height: 100%; min-width: 0;
  display: flex; flex-direction: column-reverse; justify-content: flex-start;
}
.xh-cov-seg { width: 100%; opacity: 0.85; transition: opacity 0.14s ease; }
.xh-cov-seg:last-child { border-radius: 2px 2px 0 0; }
.xh-cov-col:hover .xh-cov-seg { opacity: 1; }
.xh-cov-axis { display: flex; justify-content: space-between; padding-top: 7px; font-size: 0.62rem; color: var(--xh-ink-3); }

/* Coverage bar tooltip — position:fixed (set inline by JS) so it escapes the
   card's overflow:hidden; anchored above the hovered column. */
.xh-cov-tip {
  position: fixed; z-index: 1200; transform: translate(-50%, -100%);
  min-width: 168px; max-width: 240px; padding: 9px 11px;
  border: 1px solid rgba(255, 255, 255, 0.14); border-radius: 9px;
  background: rgba(16, 20, 26, 0.97); box-shadow: 0 8px 22px rgba(0, 0, 0, 0.55);
  font-size: 0.68rem; line-height: 1.5; color: rgba(255, 255, 255, 0.85);
  opacity: 0; pointer-events: none; transition: opacity 0.12s ease;
}
.xh-cov-tip.show { opacity: 1; }
.xh-cov-tip-wk { font-weight: 700; color: #fff; padding-bottom: 4px; }
.xh-cov-tip-row { display: flex; align-items: center; gap: 7px; }
.xh-cov-tip-row i { width: 8px; height: 8px; border-radius: 2px; flex: none; }
.xh-cov-tip-row .n { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.xh-cov-tip-row b { font-variant-numeric: tabular-nums; }
.xh-cov-tip-total {
  display: flex; justify-content: space-between; gap: 10px; margin-top: 5px;
  padding-top: 5px; border-top: 1px solid rgba(255, 255, 255, 0.1);
  font-weight: 600; color: #fff;
}
.xh-card {
  display: flex; flex-direction: column; min-width: 0; overflow: hidden;
  padding: 14px 16px;
  border: 1px solid var(--xh-line); border-radius: 14px;
  background: var(--xh-card);
}
.xh-card-head {
  display: flex; align-items: center; gap: 8px; padding-bottom: 10px;
  font-size: 0.7rem; font-weight: 700; font-style: italic; letter-spacing: 0.05em;
  text-transform: uppercase; color: rgba(255, 255, 255, 0.75);
}
.xh-panel-rows { flex: 1; display: flex; flex-direction: column; }
.xh-panel-note { margin-left: auto; font-size: 0.62rem; font-weight: 600; color: var(--xh-ink-3); letter-spacing: 0.04em; }

/* Headlines — mock cited summaries (athlete links + citation markers live),
   led by the primary topic's image, with topic pills beneath. Each brief is
   its own .xh-card panel, stacked under a slim header line. */
.xh-ai-stack { display: flex; flex-direction: column; gap: 12px; min-width: 0; flex: 1; }
/* Sports Index mark inside each brief — carries the attribution since the
   stack has no header. Right-aligned on the pills row; hovering reveals the
   explainer tooltip (opens upward so the card's overflow can't clip it). */
.xh-ai-brand {
  position: relative; margin-left: auto; display: inline-flex; align-items: center; gap: 5px;
  font-size: 0.62rem; font-weight: 600; font-style: italic;
  color: var(--xh-ink-3); white-space: nowrap; cursor: help;
}
.xh-ai-brand img { width: 14px; height: 14px; border-radius: 4px; display: block; }
.xh-ai-brand:hover { color: var(--xh-ink-2); }
.xh-ai-brand:hover .xh-tip, .xh-ai-brand:focus .xh-tip { opacity: 1; transform: translateY(0); }
.xh-tip.xh-tip-up-right {
  top: auto; bottom: calc(100% + 7px); left: auto; right: 0;
  white-space: normal;   /* the brand mark is nowrap; the tip must wrap */
}
.xh-card.xh-ai-row {
  flex: 1; display: grid; grid-template-columns: 54px 1fr; gap: 13px;
  align-items: center;
  overflow: visible;   /* the brand-mark tooltip extends past the card box */
}
.xh-ai-img { display: block; }
.xh-ai-artimg { background-size: cover; background-position: center; border-radius: 10px !important; }
/* Team-logo variant: contain on transparent (img.<class> beats the global
   lazy-img placeholder bg — see the Pico/global-CSS gotchas) */
img.xh-ai-artlogo {
  object-fit: contain; border-radius: 0 !important;
  background: transparent; padding: 3px;
}
.xh-ai-headshot, .xh-ai-img .xh-headshot-empty {
  width: 54px; height: 54px; border-radius: 50%; object-fit: cover;
  background: rgba(255, 255, 255, 0.06); display: block;
}
.xh-ai-body { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.xh-ai-headline { font-size: 0.82rem; font-weight: 700; color: var(--xh-ink); line-height: 1.4; }
.xh-ai-headline a { color: #fff; text-decoration: none; }
.xh-ai-headline a:hover { color: var(--xh-accent); }
.xh-ai-desc { font-size: 0.72rem; color: var(--xh-ink-2); line-height: 1.5; }
.xh-ai-cite a {
  color: var(--xh-accent); text-decoration: none; font-size: 0.62rem; font-weight: 700;
  margin-left: 2px;
}
.xh-ai-cite a:hover { text-decoration: underline; }

/* Top Articles — UNBOXED hero zone (full width of the top row's left
   column) beside the AI stack; the sub-article row spans the full section
   width beneath both. */
.xh-artzone { display: flex; flex-direction: column; min-width: 0; }
/* Integrated hero card: full-bleed image up top, padded text body below */
.xh-art-hero-col {
  position: relative; display: grid; min-width: 0; flex: 1;
  border: 1px solid var(--xh-line); border-radius: 12px;
  background: rgba(255, 255, 255, 0.02); overflow: hidden;
}
/* The pane (not the anchor) carries the bottom padding so the pills row —
   a sibling of the anchor — sits inside it, with or without tags. */
.xh-art-hero-col > .xh-rot-pane { grid-area: 1 / 1; }
.xh-artlist-row {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px;
  margin: 4px 0 14px;
}

/* ---- Trending Now — market-data athlete cards in the old news-row slot.
   Same surface tokens as news cards; the content grammar (delta badge,
   sparkline, hook line — no thumbs/sources/timestamps) is what differs. */
.xh-tn { margin: 4px 0 14px; }
.xh-tn-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.xh-tn-label {
  display: inline-flex; align-items: center; gap: 7px;
  font-size: 0.66rem; font-weight: 700; font-style: italic;
  letter-spacing: 0.08em; text-transform: uppercase; color: rgba(255, 255, 255, 0.6);
}
.xh-tn-live {
  width: 7px; height: 7px; border-radius: 50%; flex: none;
  background: var(--xh-pos); box-shadow: 0 0 6px var(--xh-pos);
  animation: xhTnPulse 2.2s ease-in-out infinite;
}
@keyframes xhTnPulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } }
.xh-tn-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
.xh-tn-card { gap: 8px; min-width: 0; text-decoration: none; transition: border-color 0.15s ease; }
.xh-tn-card:hover { border-color: var(--xh-line-strong); }
.xh-tn-top { display: flex; align-items: center; gap: 10px; min-width: 0; }
.xh-tn-img,
.xh img.xh-tn-img {
  width: 40px; height: 40px; border-radius: 50%; object-fit: cover;
  background: rgba(255, 255, 255, 0.06); flex: none;
}
.xh-tn-initials {
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 0.78rem; font-weight: 700; color: rgba(255, 255, 255, 0.75);
  background: linear-gradient(135deg, #2a3340, #1a212b);
}
.xh-tn-id { display: flex; flex-direction: column; min-width: 0; flex: 1; }
.xh-tn-name { font-size: 0.88rem; font-weight: 600; color: var(--xh-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.xh-tn-sub {
  display: flex; align-items: center; gap: 5px; min-width: 0; margin-top: 1px;
  font-size: 0.7rem; color: var(--xh-ink-3);
}
.xh-tn-sub > span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.xh-tn-data { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; flex: none; }
.xh-tn-badge {
  display: inline-flex; align-items: center; padding: 2px 7px; border-radius: 999px;
  font-size: 0.7rem; font-weight: 700; letter-spacing: -0.01em; white-space: nowrap;
}
.xh-tn-badge.up { color: var(--xh-pos); background: rgba(74, 222, 128, 0.12); }
.xh-tn-badge.down { color: var(--xh-neg); background: rgba(248, 113, 113, 0.12); }
.xh-tn-spark .xh-spark { width: 56px; height: 14px; }
.xh-tn-hook {
  font-size: 0.74rem; line-height: 1.45; color: var(--xh-ink-2);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.xh-tn-endcap { display: none; align-items: center; justify-content: center; font-size: 0.8rem; font-weight: 600; color: var(--xh-ink-2); }
/* Loading skeletons (the template's initial panels content, pre-payload) */
.xh-tn-skel .xh-tn-img, .xh-tn-skel .xh-tn-bar, .xh-tn-skel .xh-tn-pill {
  animation: xhTnPulse 1.4s ease-in-out infinite; background: rgba(255, 255, 255, 0.07);
}
.xh-tn-skel .xh-tn-bar { height: 11px; border-radius: 5px; width: 70%; }
.xh-tn-skel .xh-tn-bar + .xh-tn-bar { width: 45%; margin-top: 5px; }
.xh-tn-skel .xh-tn-pill { width: 54px; height: 18px; border-radius: 999px; }
@media (max-width: 880px) {
  .xh-tn-row {
    display: flex; overflow-x: auto; gap: 12px; padding-bottom: 4px;
    scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch;
  }
  .xh-tn-row > * { flex: 0 0 78vw; scroll-snap-align: start; }
  .xh-tn-headlink { display: none; }
  .xh-tn-endcap { display: inline-flex; flex: 0 0 52vw; }
}
/* Sub-article mini-cards — the hero card's grammar at small scale:
   full-bleed thumb on the left edge, padded text beside it. */
.xh-art {
  display: grid; grid-template-columns: 96px 1fr; gap: 12px; align-items: center;
  text-decoration: none; min-width: 0;
  border: 1px solid var(--xh-line); border-radius: 10px;
  background: rgba(255, 255, 255, 0.02); overflow: hidden;
  padding-right: 12px;
  transition: border-color 0.15s ease;
}
.xh-art:hover { border-color: var(--xh-line-strong); }
.xh-art-link { display: flex; flex-direction: column; gap: 3px; min-width: 0; text-decoration: none; }
.xh-art-link:hover .xh-art-title { color: #fff; }
.xh-art-thumb {
  width: 96px; height: 100%; min-height: 76px; border-radius: 0; flex: none;
  background-size: cover; background-position: center;
  background-color: rgba(255, 255, 255, 0.05);
}
.xh-art-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; padding: 10px 0; }
.xh-art-title {
  font-size: 0.73rem; font-weight: 600; color: var(--xh-ink); line-height: 1.38;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}

/* Featured rotation pane: image, title, source */
.xh-arthero { flex: 1; display: flex; flex-direction: column; gap: 0; min-height: 0; text-decoration: none; }
.xh-arthero-body { display: flex; flex-direction: column; gap: 6px; padding: 13px 16px 4px; }
.xh-arthero-foot { padding: 0 16px 14px; }
.xh-arthero-foot .xh-news-tags { margin-top: 6px; }
.xh-arthero:hover .xh-arthero-title { text-decoration: underline; text-underline-offset: 3px; }
.xh-arthero-img {
  /* 16:9 natural size, but flex-grow lets the image absorb any slack height
     (rotation panes share the tallest sibling's height — short-titled panes
     show a slightly taller image instead of blank space under the pills). */
  flex: 1 1 auto; width: 100%; aspect-ratio: 16 / 9; min-height: 0;
  border-radius: 0;
  background-size: cover; background-position: center;
  background-color: rgba(255, 255, 255, 0.04);
}
.xh-arthero-title {
  font-size: 0.98rem; font-weight: 700; color: var(--xh-ink); line-height: 1.35;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.xh-art-src { font-size: 0.62rem; color: var(--xh-ink-3); }

.xh-prow {
  flex: 1; min-height: 66px;
  display: grid; grid-template-columns: 20px 54px 1fr auto; align-items: center; gap: 12px;
  padding: 10px 4px; text-decoration: none; border-top: 1px solid rgba(255, 255, 255, 0.035);
  transition: background 0.12s ease;
}
.xh-prow:first-of-type { border-top: none; }
.xh-prow:hover { background: rgba(255, 255, 255, 0.03); }
.xh-prow-rank { font-size: 0.74rem; font-weight: 700; color: var(--xh-ink-3); text-align: center; }
.xh-prow-img, .xh-headshot-empty {
  width: 54px; height: 54px; border-radius: 50%; object-fit: cover;
  background: rgba(255, 255, 255, 0.06); display: inline-block; flex: none;
}
.xh-prow-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.xh-prow-name { font-size: 0.96rem; font-weight: 700; color: var(--xh-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.xh-prow-sub {
  display: flex; align-items: center; gap: 6px;
  font-size: 0.76rem; color: var(--xh-ink-3); white-space: nowrap; overflow: hidden;
}
.xh-prow-sub > span { overflow: hidden; text-overflow: ellipsis; }
img.xh-prow-school, .xh-prow-school {
  width: 17px; height: 17px; object-fit: contain; flex: none; background: transparent;
}
.xh-prow-val { display: flex; align-items: center; }
.xh-prow-num { font-size: 0.95rem; font-weight: 700; color: var(--xh-ink); }
/* Category tabs: always one row — overflow scrolls horizontally (scrollbar hidden) */
.xh-ptabs {
  display: flex; flex-wrap: nowrap; gap: 4px; padding: 0 0 6px;
  overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none;
}
.xh-ptabs::-webkit-scrollbar { display: none; }

/* ---- Topic pills — same look as the News & Media tab's .ce-news-grid-tag ---- */
.xh-news-tags { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 2px; }
.xh-news-tag {
  font-size: 10px; padding: 2px 7px; border-radius: 4px;
  background: rgba(255, 255, 255, 0.08); color: rgba(255, 255, 255, 0.6);
  text-decoration: none; white-space: nowrap;
  transition: background 0.15s, color 0.15s;
}
.xh-news-tag:hover { background: rgba(255, 255, 255, 0.14); color: rgba(255, 255, 255, 0.9); }
.xh-ptab {
  appearance: none; margin: 0; width: auto; cursor: pointer; flex: none;
  padding: 4px 9px; border-radius: 6px; border: 1px solid transparent;
  background: transparent; color: var(--xh-ink-3);
  font-size: 0.64rem; font-weight: 600; font-family: inherit; letter-spacing: 0.02em;
  white-space: nowrap;
  transition: all 0.12s ease;
}
.xh-ptab:hover { color: rgba(255, 255, 255, 0.8); }
.xh-ptab.on { background: rgba(255, 255, 255, 0.07); color: #fff; }

/* ---- Section headers ----------------------------------------------------------- */
.xh-section-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-bottom: 12px; flex-wrap: wrap; }
.xh-section-title h2 {
  margin: 0; font-size: 1.02rem; font-weight: 800; font-style: italic;
  letter-spacing: 0.04em; text-transform: uppercase; color: var(--xh-ink);
}
.xh-section-sub { font-size: 0.7rem; color: var(--xh-ink-3); }
/* "by Sports Index" byline — same treatment as /leaderboard's .lb-byline */
.xh-byline { display: flex; align-items: center; gap: 6px; margin-top: 4px; font-size: 0.8rem; text-decoration: none; width: fit-content; }
.xh-byline-by { color: rgba(255, 255, 255, 0.5); }
.xh-byline-logo {
  width: 18px; height: 18px; border-radius: 4px;
  box-shadow: 0 0 10px rgba(0, 168, 255, 0.4); transition: transform 0.2s ease;
  background: transparent;
}
.xh-byline-brand {
  display: inline-block; font-weight: 600; color: rgba(255, 255, 255, 0.92);
  transform: skewX(-10deg); transform-origin: 0 100%;
  text-shadow: 0 0 6px rgba(255, 255, 255, 0.15); transition: color 0.2s ease;
}
.xh-byline:hover .xh-byline-logo { transform: scale(1.08); }
.xh-byline:hover .xh-byline-brand { color: var(--xh-accent); }
/* Panel link buttons — small outlined chip ("View data →" treatment) */
.xh-more-link {
  display: inline-flex; align-items: center;
  padding: 2px 8px;
  border: 1px solid var(--xh-line-strong); border-radius: 6px;
  background: rgba(255, 255, 255, 0.04);
  font-size: 0.64rem; font-weight: 600; font-style: normal;
  letter-spacing: 0; text-transform: none;
  color: var(--xh-ink-2); text-decoration: none; white-space: nowrap;
  transition: color 0.15s, border-color 0.15s, background 0.15s;
}
.xh-more-link:hover {
  color: var(--xh-ink);
  border-color: rgba(255, 255, 255, 0.28);
  background: rgba(255, 255, 255, 0.07);
}

/* ---- Market table ---------------------------------------------------------------- */
.xh-market-controls { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }

/* Two-column market: the compressed table left, the highlight rail
   (Featured Athlete / charts / Stat Leaders, stacked) filling the right.
   The rail's collective height is pinned to the table's: stretch-aligned
   grid + minmax(0,1fr) auto rows let the cards share the height equally
   (overflow hidden absorbs anything that doesn't fit). */
.xh-market-grid {
  display: grid; grid-template-columns: minmax(0, 880px) minmax(300px, 1fr);
  gap: 14px; align-items: stretch;
}
.xh-market-rail {
  display: grid; grid-auto-rows: minmax(0, 1fr); gap: 14px;
  min-width: 0; min-height: 0;
}
.xh-market-rail > .xh-card { min-height: 0; overflow: hidden; }
@media (max-width: 1100px) {
  .xh-market-grid { grid-template-columns: 1fr; }
  .xh-market-rail { grid-auto-rows: auto; }
}

/* Same flat surface as /leaderboard's .lb-table-wrap — no opaque header strip */
.xh-table-wrap {
  max-width: 880px;   /* compressed: ~half the fluid page width */
  border: 1px solid var(--xh-line); border-radius: 14px; overflow-x: auto;
  background: var(--xh-card);
}
.xh-table { width: 100%; min-width: 620px; margin: 0; border-collapse: collapse; font-size: 0.85rem; }
.xh-table thead th {
  background: transparent;
  text-align: right; padding: 11px 9px;
  font-size: 0.66rem; font-weight: 600; font-style: italic; letter-spacing: 0.05em;
  text-transform: uppercase; color: rgba(255, 255, 255, 0.6); white-space: nowrap;
  border-bottom: 1px solid var(--xh-line-strong);
}
.xh-table thead th.xh-col-rank, .xh-table thead th.xh-col-athlete,
.xh-table thead th.xh-col-school, .xh-table thead th.xh-col-pos,
.xh-table thead th.xh-col-spark { text-align: left; }
.xh-sortable { cursor: pointer; user-select: none; transition: color 0.12s ease; }
.xh-sortable:hover { color: rgba(255, 255, 255, 0.85); }
.xh-sort-active { color: var(--xh-accent) !important; }
.xh-table tbody td {
  padding: 9px 9px; border-bottom: 1px solid rgba(255, 255, 255, 0.04);
  color: var(--xh-ink-2); white-space: nowrap; vertical-align: middle; text-align: right;
  /* Pico paints td with its blue-dark --pico-background-color; the leaderboard
     resets it the same way. */
  background: transparent;
}
.xh-table tbody td.xh-col-rank, .xh-table tbody td.xh-col-athlete,
.xh-table tbody td.xh-col-school, .xh-table tbody td.xh-col-pos,
.xh-table tbody td.xh-col-spark { text-align: left; }
.xh-table tbody tr { cursor: pointer; transition: background 0.12s ease; }
.xh-table tbody tr:hover { background: rgba(0, 168, 255, 0.045); }
.xh-table tbody tr:last-child td { border-bottom: none; }
.xh-col-rank { width: 40px; color: var(--xh-ink-3); font-weight: 700; }
.xh-cell-athlete { display: inline-flex; align-items: center; gap: 10px; }
.xh-athlete-meta { display: inline-flex; flex-direction: column; }
/* Socials under the name — same treatment as .lb-athlete-socials */
.xh-athlete-socials { display: flex; gap: 8px; margin-top: 4px; }
.xh-social-link {
  display: inline-flex; align-items: center; justify-content: center;
  color: rgba(255, 255, 255, 0.5); text-decoration: none; transition: color 0.2s ease;
}
.xh-social-link:hover { color: var(--xh-accent); }
.xh-social-link svg { display: block; }
.xh-row-img { width: 36px; height: 36px; border-radius: 50%; object-fit: cover; background: rgba(255, 255, 255, 0.06); }
.xh-cell-name { font-weight: 700; color: var(--xh-ink); }
/* School cell mirrors the /leaderboard one: 28px logo + stacked name/conference.
   img.xh-school-logo (not just the class) so the transparent background
   outranks the global img[loading=lazy] placeholder bg (#0c0c0e) — same
   override leaderboard.css needs for its logos. */
.xh-cell-school { display: inline-flex; align-items: center; gap: 10px; }
.xh-school-logo,
.xh img.xh-school-logo { width: 28px; height: 28px; object-fit: contain; background: transparent; flex-shrink: 0; }
.xh-school-logo-empty { display: inline-block; }
.xh-school-text { display: inline-flex; flex-direction: column; line-height: 1.25; }
.xh-school-name { color: var(--xh-ink-2); }
.xh-school-conf { font-size: 0.72rem; color: var(--xh-ink-3); }
.xh-pos-badge {
  display: inline-block; padding: 2px 7px; border-radius: 5px;
  font-size: 0.64rem; font-weight: 700; letter-spacing: 0.04em;
  color: var(--xh-ink-2); background: rgba(255, 255, 255, 0.05);
}
.xh-cell-total { font-weight: 800; color: var(--xh-ink); }
.xh-delta { font-size: 0.72rem; font-weight: 700; }
.xh-delta.up { color: var(--xh-pos); }
.xh-delta.down { color: var(--xh-neg); }
.xh-delta.flat { color: var(--xh-ink-3); font-weight: 500; }
/* Mentions (30d) column — attributed-mention count + Δ vs the prior window */
.xh-col-mentions { width: 112px; }
.xh-mentions-zero { color: var(--xh-ink-3); }
/* Influence column — locked/blurred preview pill (mirrors .lb-inf-locked) +
   lock-labelled header. Its tooltip is the body-level fixed one (wired in
   initTableControls) — an in-table absolute tooltip clips against and
   widens the wrap's overflow-x scroll area even while hidden. */
.xh-col-influence { width: 84px; }
.xh-th-lock-label { display: inline-flex; align-items: center; gap: 5px; cursor: help; }
.xh-th-lock { width: 11px; height: 11px; flex: none; opacity: 0.7; }
.xh-inf-locked {
  display: inline-block;
  width: 34px; height: 11px; border-radius: 5px;
  background: linear-gradient(90deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0.1));
  filter: blur(2.5px);
}
.xh-col-spark { width: 114px; }
.xh-spark { width: 104px; height: 28px; display: block; }
.xh-spark.up polyline { stroke: var(--xh-pos); }
.xh-spark.down polyline { stroke: var(--xh-neg); }
.xh-spark.flat polyline { stroke: rgba(255, 255, 255, 0.35); }
.xh-spark-flat { color: var(--xh-ink-3); font-size: 0.72rem; }
.xh-loading { text-align: center !important; padding: 28px !important; color: var(--xh-ink-3) !important; font-size: 0.8rem; }

/* ---- Responsive ------------------------------------------------------------------------ */
@media (max-width: 1000px) {
  .xh-stats { grid-template-columns: repeat(2, 1fr); }
  .xh-panels { grid-template-columns: 1fr; }
  .xh-row-top { grid-template-columns: 1fr; }
  .xh-row-bottom { grid-template-columns: 1fr; }
  .xh-artlist-row { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
  .xh-stats { grid-template-columns: 1fr 1fr; gap: 10px; }
  .xh-stat-v { font-size: 1.5rem; }
  .xh-ticker-label { display: none; }
}

/* =============================================================================
   Right column: Featured Athlete over the half-height Stat Leaders ⇄ Most
   Covered rotator — equal halves, bottom edge aligned with the mini-row.
   ============================================================================= */

/* Featured Athlete */
.xh-feat-main { display: flex; align-items: center; gap: 14px; padding: 6px 2px 10px; text-decoration: none; }
.xh-feat-img, .xh-feat-main .xh-headshot-empty {
  width: 72px; height: 72px; border-radius: 50%; object-fit: cover;
  background: rgba(255, 255, 255, 0.06); display: block; flex: none;
}
.xh-feat-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.xh-feat-name { font-size: 1.18rem; font-weight: 800; color: #fff; line-height: 1.2; }
.xh-feat-main:hover .xh-feat-name { color: var(--xh-accent); }
.xh-feat-stats { display: flex; align-items: center; gap: 16px; padding: 0 2px 8px; }
.xh-feat-stat { font-size: 0.72rem; color: var(--xh-ink-3); }
.xh-feat-stat b { font-size: 0.95rem; font-weight: 800; color: var(--xh-ink); margin-right: 4px; }
.xh-feat-blurb { margin: 0; padding: 0 2px; font-size: 0.74rem; color: var(--xh-ink-2); line-height: 1.5; }

/* ---- Index band — full-bleed editorial break between the panel grid and the
   leaderboard table. Deliberately NOT a card: a flat strip one shade lighter
   than the page, hairline-bounded; typographic left (the leaderboard
   lead-in), daily-brief signup right. */
.xh-band {
  margin: 34px 0 30px;   /* unboxed: plain whitespace, no surface or hairlines */
  /* The xh-in load-in animations hold a stacking context per section, so a
     later sibling (the market table) out-paints the band's tooltip no matter
     its z-index. Lift the band's whole context above its siblings. */
  position: relative; z-index: 5;
}
.xh-band-inner {
  display: grid; grid-template-columns: 1.5fr 1fr; gap: 48px; align-items: center;
  padding: 0 32px;
}
.xh-band-lede { margin: 0 0 12px; max-width: 680px; font-size: 1.08rem; line-height: 1.55; color: var(--xh-ink-2); }
.xh-band-lede-strong { color: #fff; font-weight: 700; }
.xh-band-info { margin-left: 8px; vertical-align: 2px; }
.xh-band-links { display: flex; gap: 10px; }
/* Subscribe form — same treatment as /content's (.nl-subscribe-*): ghost-pill
   input with the mail icon, white primary pill button. Pico styles bare
   input/button elements, so the !important resets are load-bearing.
   Right-aligned so the button's edge meets the table edge below. */
.xh-band-nl-form { display: flex; align-items: stretch; justify-content: flex-end; gap: 8px; margin: 0; }
.xh-band-nl-input {
  flex: 1 1 auto;
  max-width: 280px;
  width: auto !important;
  height: 36px;
  margin: 0 !important;
  padding: 0 14px 0 40px !important;   /* left room for the mail icon */
  border: 1px solid rgba(255, 255, 255, 0.16) !important;
  background-color: rgba(255, 255, 255, 0.04) !important;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2'/%3E%3Cpath d='m3 7 9 6 9-6'/%3E%3C/svg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: 14px center !important;
  border-radius: 999px !important;
  color: var(--xh-ink) !important;
  font-size: 0.84rem;
  line-height: 36px !important;
  box-shadow: none !important;
  outline: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  transition: border-color 0.15s ease;
}
.xh-band-nl-input::placeholder { color: var(--xh-ink-3); opacity: 1; }
.xh-band-nl-input:focus {
  border-color: rgba(255, 255, 255, 0.3) !important;
  background-color: rgba(255, 255, 255, 0.04) !important;
  box-shadow: none !important;
  outline: none !important;
}
.xh-band-nl-btn {
  flex: 0 0 auto;
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  min-width: 100px;
  width: auto !important;
  margin: 0 !important;
  padding: 0 1.25rem !important;
  border: 1px solid #fff !important;
  border-radius: 999px !important;
  background: #fff !important;
  color: #0b0d10 !important;
  font-size: 0.82rem;
  font-weight: 600;
  line-height: 1 !important;
  text-decoration: none;
  box-shadow: none !important;
  cursor: pointer;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  transition: all 0.18s ease;
}
.xh-band-nl-btn:hover { background: rgba(255, 255, 255, 0.88) !important; }
.xh-band-nl-btn:disabled { opacity: 0.6; cursor: default; }
.xh-band-nl-msg { margin: 8px 0 0; min-height: 1em; text-align: right; font-size: 0.72rem; color: var(--xh-ink-2); }
.xh-band-nl-msg.is-success { color: var(--xh-pos); }
.xh-band-nl-msg.is-error { color: var(--xh-neg); }
@media (max-width: 880px) {
  .xh-band-inner { grid-template-columns: 1fr; gap: 22px; }
  .xh-band-lede { max-width: none; }
}

/* ---- Page-footer band — newsletter pinned right; the left slot is open for
   future content (the brand/social treatment lives in the site footer).
   .xh prefix outranks the .xh .xh-section margin reset; the smaller bottom
   margin offsets the site footer's own ~110px top spacing so the block sits
   visually centered between the panels above and the footer below. --------- */
/* 80px visual gap on both sides: the site footer's 80px margin-top + main's
   20px padding-bottom sit below the band, so the negative bottom margin
   cancels them down to a symmetric 80. */
.xh .xh-nl-footer { margin: 80px 0 -30px; }
.xh-foot-grid {
  display: grid; grid-template-columns: 1fr auto; gap: 48px; align-items: center;
}
/* Right-pinned column, left-aligned text within it */
.xh-foot-right { display: flex; flex-direction: column; align-items: flex-start; }
.xh-nl-footer-msg {
  margin: 0 0 12px; max-width: 430px; text-align: left;
  font-size: 0.95rem; font-weight: 600; line-height: 1.5; color: #fff;
}
.xh-nl-footer .xh-band-nl-form { justify-content: flex-start; width: 100%; max-width: 430px; }
.xh-nl-footer .xh-band-nl-msg { text-align: left; }
@media (max-width: 880px) {
  .xh-foot-grid { grid-template-columns: 1fr; gap: 26px; }
}

/* Top-row loading skeletons — same pulse treatment as the Trending Now ones */
.xh-skel .xh-sk-bar, .xh-skel .xh-sk-imgfill, .xh-skel .xh-sk-circle, .xh-skel .xh-sk-thumb {
  animation: xhTnPulse 1.4s ease-in-out infinite; background: rgba(255, 255, 255, 0.07);
}
.xh-skel .xh-sk-bar { display: block; height: 11px; border-radius: 5px; }
.xh-skel .xh-sk-bar + .xh-sk-bar { margin-top: 7px; }
.xh-skel .xh-sk-imgfill { display: block; width: 100%; aspect-ratio: 16 / 9; }
.xh-skel .xh-sk-body { display: block; padding: 14px 16px 16px; }
.xh-sk-airow { flex-direction: row !important; align-items: center; gap: 13px; }
.xh-skel .xh-sk-circle { width: 48px; height: 48px; border-radius: 50%; flex: none; }
.xh-skel .xh-sk-lines { flex: 1; min-width: 0; }
.xh-skel .xh-sk-thumb { width: 96px; height: 76px; flex: none; }
.xh-skel.xh-artlist-row .xh-art { align-items: center; }
