/* ==========================================================================
   VVHL — "Broadcast" preview
   --------------------------------------------------------------------------
   A second design direction for the league site, laid out like a major sports
   portal: sticky scoreboard strip, dark utility nav with an angled brand block,
   and a three-column front page (left rail / lead story / headlines rail).

   Unlike the rest of the preview this sheet is STANDALONE — it does not load
   styles.css. The portal look is light-on-white, and the donor sheet's dark
   surfaces would fight every rule here rather than cascade with them.

   League colors:
     Primary Teal  #00B3C9
     Secondary     #FFFFFF
     Dark Navy     #00264C
   ========================================================================== */

:root {
  /* Position colors — same standard as AGL (LW green, C red, RW blue,
     LD cyan, RD amber, G violet). Use these anywhere a position is shown. */
  --es-pos-lw: #00e05e;
  --es-pos-c: #ff2d55;
  --es-pos-rw: #0a84ff;
  --es-pos-ld: #00e5ff;
  --es-pos-rd: #ffae00;
  --es-pos-g: #bf5af2;

  --es-navy: #00264c;
  --es-navy-deep: #001b36;
  --es-teal: #00b3c9;
  --es-teal-dark: #008699;
  --es-teal-pale: #e6f7fa;

  --es-page: #f2f4f6;
  --es-card: #ffffff;
  --es-line: #dfe3e8;
  --es-line-soft: #eceef1;

  --es-ink: #16202b;
  --es-ink-soft: #445162;
  --es-muted: #78849a;

  --es-table-head: #f7f8fa;

  --es-shadow: 0 1px 3px rgba(0, 38, 76, 0.12);
  --es-rail: 300px;

  /* Type. Barlow for running text; its condensed cut for headlines, nav, and
     figures — the broadcast-graphics register. Both load from Google Fonts in
     each page's <head>; the fallbacks keep the layout honest if that fails. */
  --es-font-body: "Barlow", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto,
    Helvetica, Arial, sans-serif;
  --es-font-display: "Barlow Condensed", "Arial Narrow", "Segoe UI", -apple-system,
    Roboto, Helvetica, Arial, sans-serif;
}

/* --------------------------------------------------------------------------
   Navy variant
   --------------------------------------------------------------------------
   The same layout with the light surfaces swapped for league navy. Every light
   value above is a token, so this block is a straight palette substitution —
   no component rules are repeated.

   Two things are NOT inverted, on purpose: the elements that were already dark
   (nav, banner, signup and promo cards, lead story, footer) keep their white
   text, and .es-btn-light stays white since it only ever sits on those.
   -------------------------------------------------------------------------- */

body.es-page.is-navy {
  --es-page: #000f1f;
  --es-card: #00264c;
  --es-line: #0d3a68;
  --es-line-soft: #073257;
  --es-table-head: #002f5c;

  --es-ink: #ffffff;
  --es-ink-soft: #b9d3e6;
  --es-muted: #7fa0bd;

  /* Hover tint has to darken rather than brighten, or every hover flashes. */
  --es-teal-pale: #013f57;

  --es-shadow: 0 1px 3px rgba(0, 0, 0, 0.45);
}

/* The scorebar and cards now share the nav's navy, so the chrome drops a shade
   to keep the header reading as a separate band. */
body.es-page.is-navy .es-nav { background: var(--es-navy-deep); }

/* Story art and the promo gradients were tuned against white; on navy they need
   a touch more lift to separate from the card behind them. */
body.es-page.is-navy .es-story-art {
  background:
    radial-gradient(circle at 70% 30%, rgba(53, 217, 236, 0.55), transparent 55%),
    linear-gradient(150deg, #0a4f80, #002348);
}

*,
*::before,
*::after { box-sizing: border-box; }

/* Author-origin display rules (flex, grid, inline-flex) beat the UA's
   [hidden]{display:none} regardless of specificity, so every component that
   sets display would silently ignore the attribute. One guard covers them. */
.es-page [hidden] { display: none !important; }

body.es-page {
  margin: 0;
  min-width: 320px;
  background: var(--es-page);
  color: var(--es-ink);
  font-family: var(--es-font-body);
  font-size: 15.5px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

/* Wrapped in :where() so it contributes zero specificity. Written plainly as
   `.es-page a` it outranks every single-class component rule (0,1,1 beats
   0,1,0), which silently repainted .es-btn-light white-on-white and dropped the
   lead headline to body ink on a dark card. */
:where(.es-page a) { color: inherit; text-decoration: none; }

/* Headlines take the condensed cut. It is narrower than the body face, so
   they run a size up from where the system font sat and drop the negative
   tracking — condensed faces do not need tightening. */
.es-page h1,
.es-page h2,
.es-page h3 {
  margin: 0;
  font-family: var(--es-font-display);
  letter-spacing: 0.01em;
  line-height: 1.1;
  font-weight: 600;
}

/* Everything that reads as a label, a score, or a nav item gets the condensed
   cut too — one register for all the broadcast-graphic elements. */
.es-nav-links a,
.es-tool,
.es-events-pill,
.es-scorebar-league,
.es-game-top,
.es-game-row,
.es-brand span,
.es-banner-mark b,
.es-banner-title,
.es-kicker,
.es-head-tag,
.es-card-head h2,
.es-card-more,
.es-tab,
.es-table,
.es-pill,
.es-rank,
.es-fixture-time,
.es-fixture-score,
.es-list-mark,
.es-chip,
.es-btn,
.es-field > span {
  font-family: var(--es-font-display);
}

.es-shell {
  width: min(1320px, 100% - 2rem);
  margin: 0 auto;
}

/* ==========================================================================
   Scoreboard strip
   ========================================================================== */

.es-scorebar {
  position: relative;
  display: flex;
  align-items: stretch;
  background: var(--es-card);
  border-bottom: 1px solid var(--es-line);
}

.es-scorebar-lead {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  padding: 0 0.75rem;
  border-right: 1px solid var(--es-line);
}

/* Plain text + caret, no box — it reads as part of the strip's chrome. */
.es-events-pill {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.45rem 0.25rem;
  border: 0;
  background: none;
  color: var(--es-ink);
  font: inherit;
  font-family: var(--es-font-display);
  font-size: 0.95rem;
  letter-spacing: 0.02em;
  font-weight: 500;
  cursor: pointer;
  white-space: nowrap;
  transition: color 0.15s ease;
}

.es-events-pill:hover { color: var(--es-teal-dark); }

body.es-page.is-navy .es-events-pill:hover { color: var(--es-teal); }

.es-events-pill::after {
  content: "";
  width: 0;
  height: 0;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-top: 5px solid var(--es-ink-soft);
}

.es-scorebar-league {
  font-size: 0.95rem;
  font-weight: 500;
  letter-spacing: 0.04em;
  color: var(--es-ink);
}

/* The rail scrolls horizontally; its own scrollbar would read as an artifact
   in a band this thin, so the chevron is the affordance instead. */
.es-scorebar-rail {
  flex: 1;
  min-width: 0;
  display: flex;
  overflow-x: auto;
  scroll-behavior: smooth;
  scrollbar-width: none;
}

.es-scorebar-rail::-webkit-scrollbar { display: none; }

/* MATCH DAY: each ticker tile is a condensed match card — away on the left,
   score or VS + game code in the middle, home on the right, the clubs'
   colors washing in from each side with 2px edge lines. Tiles sit 2px
   apart on the rail. */
.es-scorebar-rail { gap: 2px; }

.es-game {
  position: relative;
  flex: 0 0 auto;
  min-width: 226px;
  padding: 0.5rem 0.9rem 0.6rem;
  display: block;
  isolation: isolate;
  cursor: pointer;
  transition: filter 0.15s ease;
}

.es-game:hover { filter: brightness(1.22); }

.es-game::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  opacity: 0.9;
  background:
    radial-gradient(150px 90px at -6% 60%, var(--ac, transparent), transparent 66%),
    radial-gradient(150px 90px at 106% 60%, var(--hc, transparent), transparent 66%);
}

/* Team-color edge lines on each side of the tile, fading toward top/bottom. */
.es-game::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    linear-gradient(180deg, transparent 0%, var(--ac, transparent) 30%, var(--ac, transparent) 70%, transparent 100%) left center/2px 100% no-repeat,
    linear-gradient(180deg, transparent 0%, var(--hc, transparent) 30%, var(--hc, transparent) 70%, transparent 100%) right center/2px 100% no-repeat;
}

.es-game-top {
  display: flex;
  justify-content: center;
  gap: 0.5rem;
  margin-bottom: 0.3rem;
  font-family: var(--es-font-display);
  font-size: 0.62rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--es-muted);
  white-space: nowrap;
}

.es-game-top .is-tonight { color: var(--es-teal); }

.es-game-main {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 0.5rem;
}

.es-game-side {
  display: flex;
  align-items: center;
  gap: 0.45rem;
  min-width: 0;
}

.es-game-side.is-home { flex-direction: row-reverse; }

.es-game-side .es-chip,
.es-game-side .es-chip-logo { width: 30px; height: 30px; font-size: 0.95rem; border-radius: 5px; }

.es-game-col { display: flex; flex-direction: column; gap: 2px; min-width: 0; }

.es-game-side.is-home .es-game-col { align-items: flex-end; }

.es-game-col b {
  font-family: var(--es-font-display);
  font-size: 1.1rem;
  font-weight: 700;
  line-height: 1;
  letter-spacing: 0.04em;
}

.es-game-col small {
  font-family: var(--es-font-display);
  font-size: 0.66rem;
  font-weight: 500;
  line-height: 1.1;
  color: var(--es-ink-soft);
}

.es-game-mid {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
  min-width: 44px;
}

.es-game-score {
  font-family: var(--es-font-display);
  font-size: 1.22rem;
  font-weight: 700;
  line-height: 1;
  letter-spacing: 0.06em;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.es-game-score .is-loser { color: var(--es-muted); }

.es-game-vs {
  font-family: var(--es-font-display);
  font-size: 0.85rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  color: var(--es-muted);
}

.es-game-mid small {
  font-family: var(--es-font-display);
  font-size: 0.56rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--es-muted);
}

/* Team mark: a tinted square carrying the club initial, standing in for logo
   art the preview does not have. The tint is set per club from vvhl-espn.js. */
.es-chip {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 20px;
  height: 20px;
  border-radius: 3px;
  background: var(--es-navy);
  color: #ffffff;
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: 0.02em;
}

/* Uploaded club logo in place of the initial chip. */
.es-chip-logo {
  background: none;
  object-fit: contain;
  width: 22px;
  height: 22px;
}

/* Clubs page tiles: a band in the club's own colors. */
.es-club-tile {
  border-top: 3px solid var(--club, var(--es-teal));
}

.es-club-tile-head {
  display: flex;
  align-items: center;
  gap: 0.8rem;
}

.es-club-tile-head .es-chip { width: 44px; height: 44px; font-size: 1.3rem; border-radius: 6px; }
.es-club-tile-head .es-chip-logo { width: 44px; height: 44px; }
.es-club-tile-head h3 { font-size: 1.25rem; }
.es-club-tile-head .es-kicker { margin: 0.15rem 0 0; }

/* Date separators inside the scores lists. */
.es-sched-date {
  padding: 0.7rem 1rem 0.3rem;
  border-top: 1px solid var(--es-line);
  font-family: var(--es-font-display);
  font-size: 1rem;
  font-weight: 500;
  color: var(--es-ink);
}

.es-sched-date:first-child { border-top: 0; }

/* Time sub-header rows (emitted for Tonight/Upcoming): phones only — on
   wider screens each game keeps its own time column instead. */
.es-sched-time { display: none; }

.es-scorebar-next {
  flex: 0 0 auto;
  width: 46px;
  border: 0;
  border-left: 1px solid var(--es-line);
  background: var(--es-card);
  color: var(--es-ink-soft);
  cursor: pointer;
  font-size: 1.1rem;
}

.es-scorebar-next:hover { background: var(--es-teal-pale); color: var(--es-teal-dark); }

/* ==========================================================================
   Utility nav
   ========================================================================== */

.es-nav {
  position: sticky;
  top: 0;
  z-index: 40;
  background: var(--es-navy);
  color: #ffffff;
}

/* Full-bleed, unlike the content shell: the brand block anchors to the left
   edge of the viewport and the links run from it. */
.es-nav-inner {
  display: flex;
  align-items: stretch;
  gap: 0.4rem;
  width: 100%;
  padding-right: 1rem;
  min-height: 56px;
}

/* Angled brand block, echoing the slanted network bug a sports portal wears. */
.es-brand {
  position: relative;
  isolation: isolate;
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0 2.4rem 0 1.5rem;
  margin-right: 0.6rem;
  color: #ffffff;
}

.es-brand::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(100deg, var(--es-teal-dark), var(--es-teal));
  clip-path: polygon(0 0, 100% 0, calc(100% - 22px) 100%, 0 100%);
}

.es-brand img { width: 34px; height: 34px; object-fit: contain; }

.es-brand span {
  font-size: 1.5rem;
  font-weight: 600;
  letter-spacing: 0.04em;
}

/* flex: 1 1 0 matters — with the tools pinned right via margin-left: auto, a
   plain min-width: 0 item gets squeezed to zero on phones and the site loses
   its navigation. Growing into the leftover space keeps a scrollable strip. */
.es-nav-links {
  display: flex;
  flex: 1 1 0;
  align-items: stretch;
  gap: 0.15rem;
  min-width: 0;
  overflow-x: auto;
  scrollbar-width: none;
}

.es-nav-links::-webkit-scrollbar { display: none; }

.es-nav-links a {
  position: relative;
  display: flex;
  align-items: center;
  padding: 0 0.85rem;
  font-size: 1.05rem;
  font-weight: 500;
  letter-spacing: 0.03em;
  color: rgba(255, 255, 255, 0.88);
  white-space: nowrap;
}

.es-nav-links a:hover { color: #ffffff; background: rgba(255, 255, 255, 0.07); }

/* PREMIUM: the page in view is flanked by full-height bars whose glow bleeds
   inward across the tab, instead of an underline. */
.es-nav-links a.is-active {
  color: #ffffff;
  font-weight: 500;
  background: linear-gradient(90deg, rgba(53, 217, 236, 0.16), transparent 30%, transparent 70%, rgba(53, 217, 236, 0.16));
}

.es-nav-links a.is-active::before,
.es-nav-links a.is-active::after {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  width: 2px;
  background: linear-gradient(180deg, rgba(53, 217, 236, 0.35), #35d9ec 35% 65%, rgba(53, 217, 236, 0.35));
  box-shadow: 0 0 12px rgba(53, 217, 236, 0.85);
}

.es-nav-links a.is-active::before { left: 0; }
.es-nav-links a.is-active::after { right: 0; }

.es-nav-tools {
  flex: 0 0 auto;
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 0.3rem;
}

/* Used on both <a> and <button>, so it carries the button resets — without
   them the toggle renders with the UA's grey fill and black border. */
.es-tool {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  padding: 0.45rem 0.6rem;
  border: 0;
  border-radius: 4px;
  background: none;
  font: inherit;
  font-family: var(--es-font-display);
  font-size: 0.98rem;
  letter-spacing: 0.02em;
  font-weight: 500;
  color: rgba(255, 255, 255, 0.9);
  white-space: nowrap;
  cursor: pointer;
}

.es-tool:hover { background: rgba(255, 255, 255, 0.1); color: #ffffff; }

.es-tool svg { width: 17px; height: 17px; fill: currentColor; }

.es-tool-icon { padding: 0.5rem; }

/* --- dropdown menus ------------------------------------------------------
   A trigger carrying data-es-menu="name" toggles the sibling panel with
   data-es-menu-panel="name". Panels use the hidden attribute; the script
   closes them on outside click and Escape. */

.es-menu-wrap {
  position: relative;
  display: inline-flex;
}

.es-menu {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  z-index: 60;
  min-width: 170px;
  padding: 0.35rem;
  border: 1px solid var(--es-line);
  border-radius: 6px;
  background: var(--es-card);
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);
}

.es-menu a {
  display: block;
  padding: 0.55rem 0.8rem;
  border-radius: 4px;
  font-family: var(--es-font-display);
  font-size: 1rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--es-ink);
}

.es-menu a:hover { background: var(--es-teal-pale); color: var(--es-teal-dark); }

body.es-page.is-navy .es-menu a:hover { color: var(--es-teal); }

/* Left-aligned variant for menus opening from the left edge (the scorebar). */
.es-menu-left { left: 0; right: auto; }

/* The Top Events dropdown: view options, then one entry per club. */
.es-menu-events { min-width: 190px; max-height: 60vh; overflow-y: auto; }

.es-menu-events .es-menu-sep { margin: 0.3rem 0.4rem; border-top: 1px solid var(--es-line-soft); }

.es-menu-events button.es-menu-club { display: flex; align-items: center; gap: 0.5rem; text-align: left; }

.es-menu-events button.is-current { background: var(--es-teal-pale); color: var(--es-teal-dark); }

body.es-page.is-navy .es-menu-events button.is-current { color: var(--es-teal); }

/* A small caret on buttons that open a menu. */
.es-btn-caret::after {
  content: "";
  margin-left: 0.55rem;
  width: 0;
  height: 0;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-top: 5px solid currentColor;
}

@media (max-width: 900px) {
  .es-tool-label { display: none; }
}

/* Phones: brand and tools alone fill a row, so the links strip drops to its
   own scrollable row beneath them instead of being squeezed to nothing. */
@media (max-width: 600px) {
  .es-nav-inner { flex-wrap: wrap; }
  .es-brand { min-height: 52px; }
  .es-nav-links {
    order: 3;
    flex-basis: 100%;
    border-top: 1px solid rgba(255, 255, 255, 0.1);
  }
  .es-nav-links a { padding: 0.55rem 0.7rem; font-size: 0.82rem; }
}

/* ==========================================================================
   Promo banner
   ========================================================================== */

.es-banner {
  display: flex;
  align-items: center;
  gap: clamp(1rem, 4vw, 3rem);
  margin: 1rem auto 0;
  padding: 1.15rem clamp(1rem, 3vw, 2rem);
  border-radius: 4px;
  background:
    radial-gradient(circle at 88% 50%, rgba(0, 179, 201, 0.45), transparent 55%),
    linear-gradient(100deg, var(--es-navy-deep), var(--es-navy) 60%, #0b4a76);
  color: #ffffff;
  /* No overflow: hidden — the Join dropdown hangs below this box. The
     gradient is a background and clips to the border-box on its own. */
}

.es-banner-mark {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  padding-right: clamp(1rem, 3vw, 2rem);
  border-right: 1px solid rgba(255, 255, 255, 0.28);
}

.es-banner-mark img { width: 40px; height: 40px; object-fit: contain; }

.es-banner-mark b { font-size: 1.4rem; font-weight: 500; letter-spacing: 0.02em; }

.es-banner-title {
  flex: 1;
  min-width: 0;
  font-size: clamp(1.3rem, 3vw, 2.3rem);
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}

.es-banner-title small {
  display: block;
  font-size: 0.85rem;
  font-weight: 500;
  letter-spacing: 0.18em;
  color: var(--es-teal);
}

.es-banner .es-btn { flex: 0 0 auto; }

/* Stack rather than wrap: wrapping let the button share a row with the title
   and squeeze it to one word per line. */
@media (max-width: 720px) {
  .es-banner { flex-direction: column; align-items: flex-start; gap: 0.9rem; }
  .es-banner-mark { border-right: 0; padding-right: 0; }
  .es-banner-title { width: 100%; }
}

/* The Top Events pill stays on phones too — it is the strip's filter, and
   with the league label gone the lead is small enough to keep. */

/* ==========================================================================
   Buttons
   ========================================================================== */

.es-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0.7rem 1.6rem;
  border: 0;
  border-radius: 999px;
  background: var(--es-teal);
  color: #00202c;
  font: inherit;
  font-family: var(--es-font-display);
  font-size: 1rem;
  font-weight: 600;
  letter-spacing: 0.05em;
  cursor: pointer;
  white-space: nowrap;
  transition: background 0.16s ease;
}

.es-btn:hover { background: #2fd0e4; }

.es-btn-light { background: #ffffff; color: var(--es-navy); }
.es-btn-light:hover { background: var(--es-teal-pale); }

.es-btn-block { width: 100%; }

/* ==========================================================================
   Front page grid
   ========================================================================== */

.es-main {
  display: grid;
  grid-template-columns: var(--es-rail) minmax(0, 1fr) var(--es-rail);
  gap: 1rem;
  align-items: start;
  padding: 1rem 0 3rem;
}

@media (max-width: 1180px) {
  .es-main { grid-template-columns: minmax(0, 1fr) var(--es-rail); }
  .es-rail-left { display: none; }
}

@media (max-width: 860px) {
  .es-main { grid-template-columns: minmax(0, 1fr); }
  .es-rail-right { order: 3; }
}

.es-card {
  background: var(--es-card);
  border: 1px solid var(--es-line);
  border-radius: 6px;
  box-shadow: var(--es-shadow);
  overflow: hidden;
}

.es-card + .es-card { margin-top: 1rem; }

.es-card-head {
  display: flex;
  align-items: center;
  gap: 0.55rem;
  padding: 0.85rem 1rem;
  border-bottom: 1px solid var(--es-line-soft);
}

.es-card-head h2 {
  font-size: 1.15rem;
  font-weight: 500;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

.es-card-head svg { width: 18px; height: 18px; fill: var(--es-teal-dark); }

.es-card-more {
  margin-left: auto;
  font-size: 0.9rem;
  font-weight: 500;
  color: var(--es-teal-dark);
}

.es-card-more:hover { text-decoration: underline; }

/* --- left rail --------------------------------------------------------- */

.es-signup {
  padding: 1.4rem 1.2rem;
  background:
    radial-gradient(circle at 100% 0%, rgba(0, 179, 201, 0.4), transparent 60%),
    linear-gradient(160deg, var(--es-navy) 0%, var(--es-navy-deep) 100%);
  color: #ffffff;
  text-align: center;
}

.es-signup h2 {
  font-size: 1.4rem;
  font-weight: 500;
  letter-spacing: 0.01em;
  text-transform: uppercase;
}

.es-signup h2 em {
  display: block;
  font-style: normal;
  color: var(--es-teal);
}

.es-signup p {
  margin: 0.5rem 0 1.1rem;
  font-size: 0.82rem;
  color: rgba(255, 255, 255, 0.75);
}

.es-list { list-style: none; margin: 0; padding: 0.35rem 0; }

.es-list li + li { border-top: 1px solid var(--es-line-soft); }

.es-list a {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  padding: 0.62rem 1rem;
  font-size: 0.86rem;
  font-weight: 500;
}

.es-list a:hover { background: var(--es-teal-pale); color: var(--es-teal-dark); }

.es-list-mark {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 22px;
  height: 22px;
  border-radius: 3px;
  background: var(--es-navy);
  color: #ffffff;
  font-size: 0.58rem;
  font-weight: 500;
}

.es-list-mark.is-live { background: #d7263d; }
.es-list-mark.is-teal { background: var(--es-teal-dark); }

/* --- lead story -------------------------------------------------------- */

/* PREMIUM: the lead story keeps its original tall hero size; the premium pass
   only re-lights it (glow background, speed lines, sheen sweep). */
.es-lead {
  position: relative;
  display: block;
  min-height: clamp(320px, 42vw, 470px);
  border-radius: 14px;
  border: 1px solid rgba(127, 215, 255, 0.18);
  overflow: hidden;
  color: #ffffff;
  background:
    radial-gradient(circle at 62% 34%, rgba(53, 217, 236, 0.55), transparent 46%),
    radial-gradient(circle at 20% 90%, rgba(0, 88, 150, 0.6), transparent 55%),
    linear-gradient(160deg, #01345f 0%, #001b36 55%, #000d1c 100%);
  box-shadow: 0 22px 50px rgba(0, 5, 14, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.09);
}

/* Diagonal speed lines. */
.es-lead::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: repeating-linear-gradient(
    115deg,
    transparent 0 46px,
    rgba(120, 205, 255, 0.045) 46px 48px
  );
}

/* Slow sheen sweep across the banner. */
.es-lead::after {
  content: "";
  position: absolute;
  inset: -40%;
  pointer-events: none;
  background: linear-gradient(115deg, transparent 42%, rgba(190, 240, 255, 0.09) 50%, transparent 58%);
  animation: es-sheen 7s ease-in-out infinite;
}

@keyframes es-sheen {
  0%, 55% { transform: translateX(-45%); }
  90%, 100% { transform: translateX(45%); }
}

@media (prefers-reduced-motion: reduce) {
  .es-lead::after { animation: none; }
}

.es-lead-crest {
  position: absolute;
  top: 50%;
  left: 50%;
  width: min(300px, 52%);
  transform: translate(-50%, -62%);
  filter: drop-shadow(0 18px 44px rgba(0, 179, 201, 0.45));
}

.es-lead-body {
  position: absolute;
  inset: auto 0 0 0;
  z-index: 1;
  padding: clamp(1.2rem, 3vw, 2.2rem);
  background: linear-gradient(to top, rgba(0, 9, 20, 0.95) 32%, transparent);
}

/* Text scales with the container so it stays readable on phones instead of
   overflowing or truncating. */
.es-lead-body h1 {
  font-size: clamp(1.4rem, 3.2vw + 0.4rem, 2.9rem);
  font-weight: 700;
  line-height: 1.08;
  max-width: 22ch;
  background: linear-gradient(180deg, #ffffff 55%, #9fd8ea);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.es-lead-meta {
  margin: 0.6rem 0 0;
  font-size: clamp(0.72rem, 0.4vw + 0.6rem, 0.85rem);
  color: rgba(255, 255, 255, 0.72);
}

.es-lead:hover .es-lead-body h1 { background-image: linear-gradient(180deg, #7deefb, #00b3c9); }

/* --- story modules ----------------------------------------------------- */

.es-stories {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 1px;
  background: var(--es-line-soft);
}

.es-story {
  display: block;
  padding: 1rem;
  background: var(--es-card);
}

.es-story:hover { background: var(--es-teal-pale); }

.es-story-art {
  height: 118px;
  border-radius: 4px;
  margin-bottom: 0.7rem;
  background:
    radial-gradient(circle at 70% 30%, rgba(53, 217, 236, 0.5), transparent 55%),
    linear-gradient(150deg, #023a68, #001b36);
}

.es-story h3 { font-size: 1.2rem; font-weight: 500; }

.es-story p {
  margin: 0.4rem 0 0;
  font-size: 0.84rem;
  color: var(--es-ink-soft);
}

.es-kicker {
  display: block;
  margin-bottom: 0.3rem;
  font-size: 0.82rem;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--es-teal-dark);
}

/* --- standings table --------------------------------------------------- */

.es-table { width: 100%; border-collapse: collapse; font-size: 0.98rem; }

.es-table thead th {
  padding: 0.5rem 0.75rem;
  border-bottom: 1px solid var(--es-line);
  background: var(--es-table-head);
  font-size: 0.8rem;
  font-weight: 500;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--es-muted);
  text-align: right;
}

.es-table thead th:first-child { text-align: left; }

.es-table td {
  padding: 0.55rem 0.75rem;
  border-bottom: 1px solid var(--es-line-soft);
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.es-table td:first-child { text-align: left; }

.es-table tbody tr:last-child td { border-bottom: 0; }
.es-table tbody tr:hover { background: var(--es-teal-pale); }

.es-team-cell {
  display: flex;
  align-items: center;
  gap: 0.55rem;
  font-weight: 500;
}

.es-seed {
  width: 1.15rem;
  color: var(--es-muted);
  font-size: 0.78rem;
  font-weight: 500;
}

/* --- headlines rail ---------------------------------------------------- */

.es-heads { list-style: none; margin: 0; padding: 0; }

.es-heads li + li { border-top: 1px solid var(--es-line-soft); }

.es-heads a {
  display: block;
  padding: 0.72rem 1rem;
  font-size: 0.88rem;
  font-weight: 500;
  line-height: 1.4;
}

.es-heads a:hover { color: var(--es-teal-dark); text-decoration: underline; }

.es-head-tag {
  display: inline-block;
  margin-right: 0.4rem;
  font-size: 0.8rem;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--es-teal-dark);
}

.es-promo-card {
  padding: 1.5rem 1.2rem;
  text-align: center;
  background:
    radial-gradient(circle at 50% 0%, rgba(0, 179, 201, 0.35), transparent 65%),
    linear-gradient(160deg, var(--es-navy), var(--es-navy-deep));
  color: #ffffff;
}

.es-promo-card img { width: 96px; margin-bottom: 0.8rem; }

.es-promo-card h3 { font-size: 1.3rem; font-weight: 500; text-transform: uppercase; }

.es-promo-card p {
  margin: 0.45rem 0 1.1rem;
  font-size: 0.82rem;
  color: rgba(255, 255, 255, 0.75);
}

/* ==========================================================================
   Interior pages
   --------------------------------------------------------------------------
   Standings, clubs, schedule, stats, media, transactions, rulebook, join.
   Same chrome as the front page; content sits in a main column with the
   headlines rail beside it on wide screens.
   ========================================================================== */

.es-main-2col {
  grid-template-columns: minmax(0, 1fr) var(--es-rail);
}

/* Pages with no right rail (headlines/calendar live on home + media only). */
.es-main-1col {
  grid-template-columns: minmax(0, 1fr);
}

@media (max-width: 860px) {
  .es-main-2col { grid-template-columns: minmax(0, 1fr); }
}

.es-page-head {
  padding: 0.4rem 0 1.2rem;
}

.es-page-head h1 {
  font-size: clamp(2rem, 4vw, 2.8rem);
  font-weight: 600;
}

.es-lede {
  margin: 0.5rem 0 0;
  max-width: 68ch;
  font-size: 0.95rem;
  color: var(--es-ink-soft);
}

.es-note {
  margin: 0;
  padding: 0.85rem 1rem;
  font-size: 0.84rem;
  color: var(--es-muted);
  border-top: 1px solid var(--es-line-soft);
}

/* Empty state for any card whose data has not arrived yet. */
.es-empty {
  margin: 0;
  padding: 2rem 1rem;
  text-align: center;
  font-size: 0.88rem;
  color: var(--es-muted);
}

.es-scorebar-empty {
  display: flex;
  align-items: center;
  padding: 0 1.2rem;
  font-size: 0.82rem;
  color: var(--es-muted);
}

.es-card-head span:not(.es-card-more) {
  margin-left: auto;
  font-size: 0.78rem;
  color: var(--es-muted);
}

/* --- tabs: the portal's underline sub-nav --------------------------------- */

/* Locked under the nav: the tab strip stays put while the page scrolls. */
.es-tabs {
  position: sticky;
  top: 56px;
  z-index: 30;
  display: flex;
  gap: 0.2rem;
  margin-bottom: 1rem;
  border-bottom: 2px solid var(--es-line);
  overflow-x: auto;
  scrollbar-width: none;
  background: var(--es-page);
}

body.es-page.is-navy .es-tabs { background: rgba(2, 11, 22, 0.92); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }

.es-tabs::-webkit-scrollbar { display: none; }

.es-tab {
  padding: 0.6rem 0.95rem;
  margin-bottom: -2px;
  border: 0;
  border-bottom: 3px solid transparent;
  background: none;
  color: var(--es-ink-soft);
  font: inherit;
  font-family: var(--es-font-display);
  font-size: 1rem;
  letter-spacing: 0.03em;
  font-weight: 500;
  white-space: nowrap;
  cursor: pointer;
}

.es-tab:hover { color: var(--es-ink); }

.es-tab.is-active {
  color: var(--es-ink);
  border-bottom-color: var(--es-teal);
}

/* --- tables ------------------------------------------------------------- */

.es-table-wrap {
  overflow-x: auto;
}

.es-table td.es-td-text,
.es-table th.es-th-text {
  text-align: left;
}

.es-table td.es-td-text {
  font-variant-numeric: normal;
  white-space: normal;
}

.es-table td strong { color: var(--es-ink); }

.es-rank {
  display: inline-grid;
  place-items: center;
  min-width: 1.5rem;
  height: 1.5rem;
  padding: 0 0.3rem;
  border-radius: 3px;
  background: var(--es-teal-pale);
  color: var(--es-teal-dark);
  font-size: 0.85rem;
  font-weight: 500;
}

body.es-page.is-navy .es-rank { color: var(--es-teal); }

.es-pill {
  display: inline-block;
  padding: 0.14rem 0.5rem;
  border-radius: 3px;
  font-size: 0.78rem;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  background: var(--es-teal-pale);
  color: var(--es-teal-dark);
  white-space: nowrap;
}

body.es-page.is-navy .es-pill { color: var(--es-teal); }

.es-pill.is-win { background: rgba(22, 163, 74, 0.14); color: #15803d; }
.es-pill.is-loss { background: rgba(215, 38, 61, 0.12); color: #b91c1c; }
.es-pill.is-live { background: rgba(215, 38, 61, 0.12); color: #d7263d; }

body.es-page.is-navy .es-pill.is-win { background: rgba(22, 163, 74, 0.22); color: #6ee7a0; }
body.es-page.is-navy .es-pill.is-loss { background: rgba(215, 38, 61, 0.22); color: #ff8b9c; }
body.es-page.is-navy .es-pill.is-live { background: rgba(215, 38, 61, 0.22); color: #ff8b9c; }

/* --- tile grid: clubs, records, rules, steps ----------------------------- */

.es-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 1px;
  background: var(--es-line-soft);
}

.es-tile {
  padding: 1rem 1.1rem;
  background: var(--es-card);
}

.es-tile h3 {
  font-size: 1.2rem;
}

.es-tile p {
  margin: 0.4rem 0 0;
  font-size: 0.86rem;
  color: var(--es-ink-soft);
}

.es-tile .es-kicker { margin-bottom: 0.35rem; }

/* --- MATCH DAY game lines -----------------------------------------------
   Away on the left, VS/AT + the game info in the middle, home on the right.
   The clubs' colors run in a 2px line along the bottom of the row â€” a ring
   that follows the container's corners and fades at the ends. On phones the
   teams stack, so the away club's line moves to the TOP edge and the home
   club's stays along the BOTTOM. --ac/--hc are set per row from the club
   colors by vvhl-espn.js. */

.es-gl {
  position: relative;
  display: grid;
  grid-template-columns: 1fr minmax(150px, auto) 1fr;
  align-items: center;
  gap: 12px;
  margin: 10px 12px;
  padding: 10px 16px;
  border-radius: 12px;
  isolation: isolate;
  cursor: pointer;
  border: 1px solid var(--es-line-soft);
  background: rgba(2, 14, 28, 0.5);
  transition: transform 0.16s ease, border-color 0.16s ease, filter 0.16s ease;
}

body.es-page:not(.is-navy) .es-gl { background: var(--es-table-head); }

.es-gl:hover { transform: translateY(-1px); border-color: rgba(90, 200, 230, 0.32); filter: brightness(1.1); }

.es-gl::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  padding: 2px;
  background: linear-gradient(90deg,
    transparent 0%, var(--ac, transparent) 6%, var(--ac, transparent) 14%, transparent 44%,
    transparent 56%, var(--hc, transparent) 86%, var(--hc, transparent) 94%, transparent 100%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
  clip-path: inset(calc(100% - 12px) 0 0 0);
}

.es-gl-side { display: flex; align-items: center; gap: 11px; min-width: 0; }
.es-gl-side.is-home { flex-direction: row-reverse; text-align: right; }

.es-gl-side .es-chip,
.es-gl-side .es-chip-logo { width: 50px; height: 50px; font-size: 1.5rem; border-radius: 8px; }

.es-gl-col { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.es-gl-side.is-home .es-gl-col { align-items: flex-end; }

.es-gl-name {
  font-family: var(--es-font-display);
  font-size: 1.1rem;
  font-weight: 600;
  line-height: 1.15;
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 180px;
}

.es-gl-rec {
  font-family: var(--es-font-display);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--es-muted);
}

.es-gl-score {
  font-family: var(--es-font-display);
  font-size: 1.9rem;
  font-weight: 700;
  line-height: 1;
  font-variant-numeric: tabular-nums;
}

.es-gl-score.is-loser { color: var(--es-muted); }

.es-gl-mid { display: flex; flex-direction: column; align-items: center; gap: 4px; text-align: center; }

.es-gl-at {
  font-family: var(--es-font-display);
  font-size: 0.9rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  color: var(--es-muted);
}

.es-gl-fin {
  font-family: var(--es-font-display);
  font-size: 0.95rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #ff9d9d;
}

body.es-page:not(.is-navy) .es-gl-fin { color: #b3261e; }

.es-gl-info { display: flex; flex-wrap: wrap; justify-content: center; gap: 5px; }

.es-mini {
  display: inline-flex;
  align-items: center;
  padding: 3px 8px;
  border-radius: 6px;
  font-family: var(--es-font-display);
  font-size: 0.64rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  background: rgba(2, 16, 32, 0.75);
  border: 1px solid var(--es-line-soft);
  color: var(--es-ink-soft);
}

body.es-page:not(.is-navy) .es-mini { background: #eef2f6; }

.es-mini.is-time { color: var(--es-teal-dark); }
body.es-page.is-navy .es-mini.is-time { color: var(--es-teal); }

.es-mini.is-code {
  color: var(--es-teal-dark);
  border-color: rgba(0, 179, 201, 0.45);
  background: rgba(0, 179, 201, 0.1);
}

body.es-page.is-navy .es-mini.is-code { color: #7deefb; border-color: rgba(53, 217, 236, 0.4); }

@media (max-width: 640px) {
  .es-sched-date { border-bottom: 1px solid var(--es-line); }

  .es-gl { grid-template-columns: 1fr; gap: 8px; padding: 12px 14px; }
  .es-gl-mid { order: 2; }
  .es-gl-side.is-home { order: 3; flex-direction: row; text-align: left; }
  .es-gl-side.is-home .es-gl-col { align-items: flex-start; }
  .es-gl-name { max-width: none; }

  /* Away line along the top, home line along the bottom. */
  .es-gl::before {
    background: linear-gradient(90deg, transparent 0%, var(--ac, transparent) 8%, var(--ac, transparent) 92%, transparent 100%);
    clip-path: inset(0 0 calc(100% - 12px) 0);
  }

  .es-gl::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    border-radius: inherit;
    padding: 2px;
    background: linear-gradient(90deg, transparent 0%, var(--hc, transparent) 8%, var(--hc, transparent) 92%, transparent 100%);
    -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
    -webkit-mask-composite: xor;
    mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
    mask-composite: exclude;
    clip-path: inset(calc(100% - 12px) 0 0 0);
  }
}

/* Stacked variant for narrow containers (the Games of the Night rail):
   same layout as the phone view - away on top, home below, away line along
   the top edge, home line along the bottom. */
.es-gl.is-stack { grid-template-columns: 1fr; gap: 8px; padding: 12px 14px; }
.es-gl.is-stack .es-gl-mid { order: 2; }
.es-gl.is-stack .es-gl-side.is-home { order: 3; flex-direction: row; text-align: left; }
.es-gl.is-stack .es-gl-side.is-home .es-gl-col { align-items: flex-start; }
.es-gl.is-stack .es-gl-name { max-width: none; }

.es-gl.is-stack::before {
  background: linear-gradient(90deg, transparent 0%, var(--ac, transparent) 8%, var(--ac, transparent) 92%, transparent 100%);
  clip-path: inset(0 0 calc(100% - 12px) 0);
}

.es-gl.is-stack::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  padding: 2px;
  background: linear-gradient(90deg, transparent 0%, var(--hc, transparent) 8%, var(--hc, transparent) 92%, transparent 100%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
  clip-path: inset(calc(100% - 12px) 0 0 0);
}

/* Headline under a Games of the Night pick. */
.es-gotn-board-note {
  margin: -2px 14px 12px;
  font-size: 0.82rem;
  color: var(--es-ink-soft);
}
/* --- Matchup Preview / Box Score modal ----------------------------------
   One shared modal shell (vvhl-espn.js builds and fills it). Clicking a
   scheduled game line or ticker tile opens the Matchup Preview; a final
   opens the result view. */

.es-mm { position: fixed; inset: 0; z-index: 100; display: grid; place-items: center; padding: 20px; }
.es-mm[hidden] { display: none; }

.es-mm-back { position: absolute; inset: 0; background: rgba(1, 6, 14, 0.7); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }

.es-mm-dialog {
  position: relative;
  width: min(640px, 100%);
  max-height: 90vh;
  overflow-y: auto;
  border-radius: 18px;
  background: linear-gradient(180deg, var(--es-card), var(--es-page));
  border: 1px solid var(--es-line);
  box-shadow: 0 40px 90px rgba(0, 3, 10, 0.8);
  padding: 26px 26px 24px;
}

body.es-page.is-navy .es-mm-dialog { background: linear-gradient(180deg, #073562, #021d3b); border-color: rgba(127, 190, 255, 0.22); }

.es-mm-close {
  position: absolute;
  top: 12px;
  right: 12px;
  width: 34px;
  height: 34px;
  border: 1px solid var(--es-line);
  border-radius: 9px;
  background: rgba(2, 16, 32, 0.5);
  color: var(--es-ink-soft);
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
  transition: all 0.15s ease;
}

.es-mm-close:hover { color: var(--es-ink); border-color: rgba(53, 217, 236, 0.5); }

.es-mm-eyebrow { margin: 0 0 6px; font-family: var(--es-font-display); font-size: 0.7rem; font-weight: 600; letter-spacing: 0.24em; text-transform: uppercase; color: var(--es-teal); }
.es-mm-title { font-family: var(--es-font-display); font-size: 1.9rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.02em; }
.es-mm-sub { display: block; margin-top: 5px; font-family: var(--es-font-display); font-size: 0.75rem; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: var(--es-muted); }

.es-mm-board { display: grid; grid-template-columns: 1fr auto 1fr; gap: 12px; align-items: stretch; margin: 18px 0 4px; }

.es-mm-team {
  position: relative;
  border-radius: 14px;
  overflow: hidden;
  isolation: isolate;
  text-align: center;
  border: 1px solid var(--es-line-soft);
  padding: 16px 10px 13px;
  background: rgba(2, 14, 28, 0.4);
}

body.es-page:not(.is-navy) .es-mm-team { background: var(--es-table-head); }

.es-mm-team::before { content: ""; position: absolute; inset: 0; z-index: -1; opacity: 0.4; background: radial-gradient(220px 130px at 50% -20%, var(--tc, transparent), transparent 70%); }
.es-mm-team .es-chip,
.es-mm-team .es-chip-logo { width: 96px; height: 96px; font-size: 2.6rem; border-radius: 14px; margin: 0 auto; }
.es-mm-team-name { display: block; font-family: var(--es-font-display); font-size: 1.2rem; font-weight: 700; letter-spacing: 0.04em; margin-top: 8px; color: var(--es-ink); }
.es-mm-team b { display: block; font-family: var(--es-font-display); font-size: 1rem; font-weight: 700; letter-spacing: 0.08em; }
.es-mm-team small { font-family: var(--es-font-display); font-size: 0.66rem; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: var(--es-muted); }
.es-mm-vs { align-self: center; font-family: var(--es-font-display); font-size: 1.3rem; font-weight: 700; color: var(--es-muted); }

.es-mm-scoreline { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 10px; margin: 18px 0 4px; text-align: center; }
.es-mm-scoreline .es-chip,
.es-mm-scoreline .es-chip-logo { width: 52px; height: 52px; font-size: 1.5rem; border-radius: 9px; margin: 0 auto 4px; }
.es-mm-num { font-family: var(--es-font-display); font-size: 3rem; font-weight: 700; line-height: 1; font-variant-numeric: tabular-nums; }
.es-mm-num.is-loser { color: var(--es-muted); }
.es-mm-mid { font-family: var(--es-font-display); font-size: 0.95rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: #ff9d9d; }
body.es-page:not(.is-navy) .es-mm-mid { color: #b3261e; }

.es-mm-sec { border-top: 1px solid var(--es-line-soft); padding: 13px 2px 2px; margin-top: 13px; }
.es-mm-sec h3 { font-family: var(--es-font-display); font-size: 0.75rem; font-weight: 600; letter-spacing: 0.2em; text-transform: uppercase; color: var(--es-teal); margin: 0 0 8px; }
.es-mm-series { font-family: var(--es-font-display); font-size: 1.2rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; }
.es-mm-meetings { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 9px; }
.es-mm-meetings span { font-family: var(--es-font-display); font-size: 0.7rem; font-weight: 600; letter-spacing: 0.08em; color: var(--es-ink-soft); background: rgba(2, 16, 32, 0.5); border: 1px solid var(--es-line-soft); border-radius: 7px; padding: 6px 9px; }
body.es-page:not(.is-navy) .es-mm-meetings span { background: var(--es-table-head); }

.es-mm-form { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.es-mm-fside { background: rgba(2, 14, 28, 0.4); border: 1px solid var(--es-line-soft); border-radius: 11px; padding: 10px 12px; }
body.es-page:not(.is-navy) .es-mm-fside { background: var(--es-table-head); }
.es-mm-fside h4 { margin: 0 0 7px; font-family: var(--es-font-display); font-size: 0.75rem; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; }
.es-mm-pills { display: flex; gap: 5px; }
.es-mm-pill { width: 24px; height: 20px; display: grid; place-items: center; border-radius: 5px; font-family: var(--es-font-display); font-size: 0.66rem; font-weight: 700; color: #04220f; background: #5fe0a1; }
.es-mm-pill.is-l { background: #ff7d7d; color: #2b0507; }
.es-mm-pill.is-o { background: #fbbf24; color: #2b1a02; }

.es-mm-lobby { display: flex; flex-wrap: wrap; gap: 8px; }
.es-mm-lobby .es-mini { font-size: 0.72rem; padding: 5px 10px; }

.es-mm-note { margin: 12px 0 0; font-size: 0.76rem; color: var(--es-muted); font-style: italic; }

@media (max-width: 640px) {
  .es-mm-board { grid-template-columns: 1fr; }
  .es-mm-vs { justify-self: center; }
  .es-mm-form { grid-template-columns: 1fr; }
}

/* --- form: join page ---------------------------------------------------- */

.es-form {
  display: grid;
  gap: 1rem;
  max-width: 560px;
  padding: 1rem;
}

.es-field {
  display: grid;
  gap: 0.35rem;
}

.es-field > span {
  font-size: 0.82rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--es-muted);
}

.es-field input,
.es-field textarea,
.es-field select {
  padding: 0.65rem 0.8rem;
  border: 1px solid var(--es-line);
  border-radius: 4px;
  background: var(--es-page);
  color: var(--es-ink);
  font: inherit;
  font-size: 0.92rem;
}

.es-field input:focus,
.es-field textarea:focus,
.es-field select:focus {
  outline: 2px solid var(--es-teal);
  outline-offset: 1px;
}

.es-btn:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

.es-form-tight { padding-top: 0; }

.es-field-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 1rem;
}

.es-req {
  margin-left: 0.4rem;
  font-style: normal;
  font-weight: 500;
  color: var(--es-teal);
}

/* Discord's blurple, in the premium register: lit gradient, soft glow, hover
   lift — the color stays recognisably Discord. */
.es-btn-discord {
  gap: 0.55rem;
  background: linear-gradient(135deg, #7b87ff, #5865f2 55%, #3d49d1);
  color: #ffffff;
  justify-self: start;
  box-shadow: 0 8px 22px rgba(88, 101, 242, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.35);
  transition: transform 0.16s ease, box-shadow 0.16s ease;
}

.es-btn-discord:hover {
  background: linear-gradient(135deg, #8893ff, #6773f4 55%, #4753dd);
  transform: translateY(-1px);
  box-shadow: 0 12px 30px rgba(88, 101, 242, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.35);
}

.es-btn-discord svg { width: 20px; height: 20px; fill: currentColor; }

.es-discord-linked {
  display: flex;
  align-items: center;
  gap: 0.8rem;
  padding: 0.6rem 0.9rem;
  border: 1px solid var(--es-line);
  border-radius: 4px;
  background: var(--es-page);
  font-size: 0.92rem;
}

.es-discord-linked strong { color: var(--es-teal); }

.es-link-btn {
  margin-left: auto;
  padding: 0;
  border: 0;
  background: none;
  font: inherit;
  font-size: 0.85rem;
  color: var(--es-muted);
  text-decoration: underline;
  cursor: pointer;
}

.es-link-btn:hover { color: var(--es-ink); }

.es-form-status {
  margin: 0;
  padding: 0.7rem 0.9rem;
  border-radius: 4px;
  font-size: 0.9rem;
  background: var(--es-page);
  color: var(--es-ink-soft);
}

.es-form-status.is-error { background: rgba(215, 38, 61, 0.14); color: #ff8b9c; }
.es-form-status.is-ok    { background: rgba(22, 163, 74, 0.16); color: #6ee7a0; }

body.es-page:not(.is-navy) .es-form-status.is-error { color: #b91c1c; }
body.es-page:not(.is-navy) .es-form-status.is-ok    { color: #15803d; }

/* --- login: centered member-login card (AGL layout) --------------------- */

.es-login-wall {
  display: flex;
  justify-content: center;
  padding: 3rem 0 4.5rem;
}

.es-login-card {
  width: min(420px, 100%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.6rem;
  padding: 2.2rem 2rem 2rem;
  text-align: center;
  border-radius: 16px;
}

.es-login-logo {
  width: 84px;
  height: 84px;
  object-fit: contain;
  filter: drop-shadow(0 8px 18px rgba(0, 8, 18, 0.6));
}

.es-login-title {
  margin: 0;
  font-family: var(--es-font-display);
  font-size: 1.65rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.es-login-sub {
  margin: 0 0 0.6rem;
  font-size: 0.85rem;
  color: var(--es-muted);
}

.es-login-card .es-btn-discord { width: 100%; justify-content: center; }
.es-login-card .es-divider { width: 100%; }

.es-login-form {
  width: 100%;
  text-align: left;
  padding: 0;
}

.es-login-form .es-btn-block { margin-top: 0.2rem; }

.es-login-note {
  margin: 0.5rem 0 0;
  font-size: 0.85rem;
  color: var(--es-muted);
}

.es-login-note a { color: var(--es-teal); }

.es-divider {
  display: flex;
  align-items: center;
  gap: 0.8rem;
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--es-muted);
}

.es-divider::before,
.es-divider::after {
  content: "";
  flex: 1;
  height: 1px;
  background: var(--es-line);
}

.es-note a { color: var(--es-teal); }

/* The hCaptcha iframe is a fixed 303px wide; keep it from overflowing narrow
   phones by letting the host scroll rather than the page. */
#join-captcha { max-width: 100%; overflow-x: auto; }

/* --- nav account menu, signed-in state -------------------------------- */

.es-menu-user {
  padding: 0.55rem 0.8rem 0.4rem;
  border-bottom: 1px solid var(--es-line-soft);
  margin-bottom: 0.25rem;
  font-size: 0.8rem;
  color: var(--es-muted);
}

.es-menu-user strong {
  display: block;
  font-family: var(--es-font-display);
  font-size: 1rem;
  font-weight: 500;
  color: var(--es-ink);
}

.es-menu button {
  display: block;
  width: 100%;
  padding: 0.55rem 0.8rem;
  border: 0;
  border-radius: 4px;
  background: none;
  text-align: left;
  font-family: var(--es-font-display);
  font-size: 1rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--es-ink);
  cursor: pointer;
}

.es-menu button:hover { background: var(--es-teal-pale); color: var(--es-teal-dark); }

body.es-page.is-navy .es-menu button:hover { color: var(--es-teal); }

/* Header button that only admin-role members receive (injected by script). */
.es-tool-admin {
  padding: 0.35rem 0.75rem;
  border-radius: 3px;
  background: var(--es-teal);
  color: #00202c;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-size: 0.85rem;
}

.es-tool-admin:hover { background: #2fd0e4; color: #00202c; }

.es-tool-avatar {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid var(--es-teal);
}

/* ==========================================================================
   Admin portal
   ========================================================================== */

.es-admin-badge {
  padding: 0.25rem 0.6rem;
  border-radius: 3px;
  background: var(--es-teal);
  color: #00202c;
  font-family: var(--es-font-display);
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.es-admin-gate {
  display: grid;
  place-items: start center;
  padding: clamp(2rem, 8vh, 5rem) 0 3rem;
}

.es-admin-gate-card { width: min(440px, 100%); }

.es-admin-main { padding: 1rem 0 3rem; }

.es-admin-toolbar {
  display: flex;
  align-items: flex-end;
  gap: 1rem;
  flex-wrap: wrap;
  margin-bottom: 1rem;
}

.es-admin-toolbar .es-tabs { margin-bottom: 0; flex: 1 1 auto; }

.es-admin-search {
  flex: 0 1 280px;
  padding: 0.55rem 0.8rem;
  border: 1px solid var(--es-line);
  border-radius: 4px;
  background: var(--es-card);
  color: var(--es-ink);
  font: inherit;
  font-size: 0.92rem;
}

.es-admin-search:focus { outline: 2px solid var(--es-teal); outline-offset: 1px; }

.es-admin-table td { vertical-align: middle; }

.es-admin-avatar {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  object-fit: cover;
}

.es-admin-actions {
  display: flex;
  gap: 0.35rem;
  flex-wrap: wrap;
}

.es-admin-action {
  padding: 0.3rem 0.65rem;
  border: 1px solid var(--es-line);
  border-radius: 3px;
  background: none;
  color: var(--es-ink-soft);
  font-family: var(--es-font-display);
  font-size: 0.88rem;
  font-weight: 500;
  letter-spacing: 0.03em;
  cursor: pointer;
  white-space: nowrap;
}

.es-admin-action:hover { border-color: var(--es-teal); color: var(--es-ink); }
.es-admin-action.is-approve { border-color: rgba(22, 163, 74, 0.5); color: #6ee7a0; }
.es-admin-action.is-approve:hover { background: rgba(22, 163, 74, 0.18); }
.es-admin-action.is-danger { border-color: rgba(215, 38, 61, 0.45); color: #ff8b9c; }
.es-admin-action.is-danger:hover { background: rgba(215, 38, 61, 0.18); }

body.es-page:not(.is-navy) .es-admin-action.is-approve { color: #15803d; }
body.es-page:not(.is-navy) .es-admin-action.is-danger  { color: #b91c1c; }

.es-admin-role {
  padding: 0.3rem 0.5rem;
  border: 1px solid var(--es-line);
  border-radius: 3px;
  background: var(--es-page);
  color: var(--es-ink);
  font-family: var(--es-font-display);
  font-size: 0.9rem;
  font-weight: 500;
  cursor: pointer;
}

.es-admin-role.is-admin { border-color: var(--es-teal); color: var(--es-teal); }
.es-admin-role.is-media { border-color: #a78bfa; color: #c4b5fd; }

.es-admin-toggle {
  display: flex;
  gap: 0.8rem;
  align-items: flex-start;
  font-size: 0.92rem;
  color: var(--es-ink-soft);
  cursor: pointer;
}

.es-admin-toggle input { margin-top: 0.3rem; width: 18px; height: 18px; accent-color: var(--es-teal); }
.es-admin-toggle strong { color: var(--es-ink); }

/* --- tool pages: list + editor split ------------------------------------ */

.es-admin-split {
  display: grid;
  grid-template-columns: minmax(280px, 1fr) minmax(0, 1.3fr);
  gap: 1rem;
  align-items: start;
}

.es-admin-split-wide { grid-template-columns: minmax(0, 1.6fr) minmax(300px, 1fr); }

.es-admin-split > div > .es-card + .es-card { margin-top: 1rem; }

@media (max-width: 900px) {
  .es-admin-split, .es-admin-split-wide { grid-template-columns: minmax(0, 1fr); }
}

.es-admin-btn-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  align-items: center;
}

.es-admin-btn-row .es-admin-action { padding: 0.55rem 0.9rem; }

.es-admin-toolbar-note {
  font-size: 0.86rem;
  color: var(--es-muted);
  align-self: center;
}

.es-admin-picker { min-width: 260px; }

/* Selectable rows in the left list. */
.es-admin-rows { list-style: none; margin: 0; padding: 0; }

.es-admin-row {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  border-top: 1px solid var(--es-line-soft);
  box-shadow: inset 0 0 0 0 var(--es-teal);
  transition: background 0.15s ease, box-shadow 0.2s ease;
}

.es-admin-row:first-child { border-top: 0; }
.es-admin-row:hover { background: var(--es-teal-pale); }
.es-admin-row.is-selected { background: var(--es-teal-pale); box-shadow: inset 4px 0 0 0 var(--es-teal); }

.es-admin-row-main {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.75rem 1rem;
  border: 0;
  background: none;
  text-align: left;
  font: inherit;
  color: var(--es-ink);
  cursor: pointer;
}

.es-admin-row-main > span { display: flex; flex-direction: column; min-width: 0; }
.es-admin-row-main strong { font-family: var(--es-font-display); font-size: 1.1rem; font-weight: 600; }
.es-admin-row-meta { font-size: 0.8rem; color: var(--es-muted); font-weight: 400; }

.es-admin-row-pills { display: flex; gap: 0.3rem; padding-right: 1rem; }

.es-admin-row-logo { width: 32px; height: 32px; object-fit: contain; flex: 0 0 auto; }

.es-admin-swatches { display: flex; gap: 3px; margin-left: auto; }
.es-admin-swatches i { width: 14px; height: 14px; border-radius: 3px; border: 1px solid rgba(255, 255, 255, 0.2); }

/* Color field: native picker + hex text side by side. */
.es-admin-color { display: flex; gap: 0.5rem; align-items: center; }
.es-admin-color input[type="color"] { width: 44px; height: 38px; padding: 2px; border: 1px solid var(--es-line); border-radius: 4px; background: var(--es-page); cursor: pointer; }
.es-admin-color input[type="text"] { flex: 1; font-family: monospace; }

.es-admin-logo-row { display: flex; align-items: center; gap: 1rem; }
.es-admin-logo-preview { width: 64px; height: 64px; object-fit: contain; border-radius: 6px; background: var(--es-page); padding: 4px; }
.es-field input[type="file"] { color: var(--es-ink-soft); font-size: 0.86rem; }

/* Clubs-in-event checklist. */
.es-admin-checklist { padding: 0.4rem 0; }

.es-admin-check {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  padding: 0.5rem 1rem;
  border-top: 1px solid var(--es-line-soft);
  cursor: pointer;
}

.es-admin-check:first-child { border-top: 0; }
.es-admin-check input[type="checkbox"] { width: 18px; height: 18px; accent-color: var(--es-teal); }
.es-admin-check-name { flex: 1; font-weight: 500; }
.es-admin-seed { width: 4.5rem; padding: 0.3rem 0.5rem; border: 1px solid var(--es-line); border-radius: 3px; background: var(--es-page); color: var(--es-ink); font: inherit; font-size: 0.86rem; }
.es-admin-seed:disabled { opacity: 0.4; }

/* Generator day picker. */
.es-admin-days { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.es-admin-days label {
  display: inline-flex; align-items: center; gap: 0.35rem;
  padding: 0.35rem 0.7rem; border: 1px solid var(--es-line); border-radius: 3px;
  font-family: var(--es-font-display); font-size: 0.95rem; cursor: pointer;
}
.es-admin-days label:has(input:checked) { border-color: var(--es-teal); background: var(--es-teal-pale); color: var(--es-teal); }
.es-admin-days input { accent-color: var(--es-teal); }

/* Schedule list. */
.es-admin-date {
  display: flex; align-items: baseline; gap: 0.7rem;
  padding: 0.7rem 1rem 0.4rem;
  border-top: 1px solid var(--es-line);
  font-family: var(--es-font-display);
}
.es-admin-date:first-child { border-top: 0; }
.es-admin-date strong { font-size: 1.05rem; font-weight: 600; }
.es-admin-date span { font-size: 0.82rem; color: var(--es-muted); }

.es-admin-game {
  display: grid;
  grid-template-columns: 5.2rem minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 0.8rem;
  padding: 0.5rem 1rem;
  border-top: 1px solid var(--es-line-soft);
}

.es-admin-game.is-final { background: rgba(0, 179, 201, 0.05); }
.es-admin-game-time { font-family: var(--es-font-display); font-size: 0.9rem; color: var(--es-teal); }
.es-admin-game-teams { display: flex; align-items: center; gap: 0.4rem; font-family: var(--es-font-display); font-size: 1.05rem; }
.es-admin-game-teams b { font-weight: 600; }

.es-admin-result { display: flex; align-items: center; gap: 0.35rem; }
.es-admin-score { width: 3rem; padding: 0.3rem 0.4rem; text-align: center; border: 1px solid var(--es-line); border-radius: 3px; background: var(--es-page); color: var(--es-ink); font-family: var(--es-font-display); font-size: 1rem; }
.es-admin-dash { color: var(--es-muted); }
.es-admin-result .es-admin-role { padding: 0.3rem 0.35rem; font-size: 0.85rem; }

@media (max-width: 760px) {
  .es-admin-game { grid-template-columns: 5rem minmax(0, 1fr); }
  .es-admin-result, .es-admin-game .es-admin-actions { grid-column: 2; }
}

/* --- dashboard ---------------------------------------------------------- */

/* Hero band: crest watermark bleeding off the right, date + View Site. */
.es-admin-hero {
  position: relative;
  display: flex;
  align-items: center;
  gap: 1.4rem;
  margin: 1rem 0 1.25rem;
  padding: 1.5rem clamp(1.2rem, 3vw, 2.2rem);
  border-radius: 8px;
  overflow: hidden;
  background:
    radial-gradient(circle at 92% 50%, rgba(0, 179, 201, 0.4), transparent 45%),
    linear-gradient(100deg, #001b36 0%, #00264c 55%, #0a4a78 100%);
  color: #ffffff;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);
}

.es-admin-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background: repeating-linear-gradient(100deg, rgba(255, 255, 255, 0.04) 0 2px, transparent 2px 46px);
  pointer-events: none;
}

.es-admin-hero > * { position: relative; }

.es-admin-hero-crest {
  width: 72px;
  height: 72px;
  object-fit: contain;
  filter: drop-shadow(0 6px 18px rgba(0, 179, 201, 0.5));
}

.es-admin-hero h1 { font-size: clamp(1.8rem, 3.6vw, 2.5rem); }
.es-admin-hero .es-lede { color: rgba(255, 255, 255, 0.78); margin-top: 0.3rem; }

.es-admin-hero-side {
  margin-left: auto;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 0.6rem;
  flex: 0 0 auto;
}

.es-admin-hero-date {
  font-family: var(--es-font-display);
  font-size: 1rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #f4f8fc;
  text-shadow: 0 0 10px rgba(255, 255, 255, 0.35), 0 0 2px rgba(255, 255, 255, 0.3);
}

@media (max-width: 720px) {
  .es-admin-hero { flex-wrap: wrap; }
  .es-admin-hero-side { margin-left: 0; align-items: flex-start; flex-direction: row; width: 100%; justify-content: space-between; }
}

.es-admin-main > .es-card + .es-card,
.es-admin-main > .es-admin-boards + .es-card,
.es-admin-main > .es-card + .es-admin-boards { margin-top: 1rem; }

.es-admin-main .es-card { box-shadow: 0 6px 24px rgba(0, 0, 0, 0.25); }

.es-admin-main .es-card-head {
  border-bottom: 2px solid rgba(0, 179, 201, 0.35);
}

.es-admin-refresh {
  width: 30px;
  height: 30px;
  border: 1px solid var(--es-line);
  border-radius: 4px;
  background: none;
  color: var(--es-ink-soft);
  font-size: 1rem;
  cursor: pointer;
  transition: transform 0.4s ease;
}

.es-admin-refresh:hover { border-color: var(--es-teal); color: var(--es-ink); transform: rotate(180deg); }

/* Members tab badge. */
.es-admin-tab-badge {
  display: inline-grid;
  place-items: center;
  min-width: 1.35rem;
  height: 1.35rem;
  margin-left: 0.35rem;
  padding: 0 0.35rem;
  border-radius: 999px;
  background: var(--es-teal);
  color: #00202c;
  font-size: 0.78rem;
  font-weight: 600;
  vertical-align: middle;
}

/* --- glance tiles --- */

.es-admin-status-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: 1px;
  background: var(--es-line-soft);
}

/* Horizontal: icon disc on the left, figure and caption stacked beside it.
   Deliberately not the stacked label-over-number box the AGL admin uses, and
   nothing lifts on hover — the accent bar widens instead. */
.es-admin-status-tile {
  --tile: var(--es-teal);
  --tile-rgb: 0, 179, 201;
  position: relative;
  display: grid;
  grid-template-columns: 48px minmax(0, 1fr);
  grid-template-areas:
    "icon value"
    "icon label"
    "icon hint";
  column-gap: 1rem;
  row-gap: 0.15rem;
  align-content: center;
  padding: 1.15rem 1.2rem;
  background: var(--es-card);
  box-shadow: inset 3px 0 0 rgba(var(--tile-rgb), 0.5);
  transition: box-shadow 0.2s ease, background 0.2s ease;
}

.es-admin-status-tile:hover {
  background: var(--es-teal-pale);
  box-shadow: inset 7px 0 0 var(--tile);
}

.es-admin-status-tile.is-teal   { --tile: #00b3c9; --tile-rgb: 0, 179, 201; }
.es-admin-status-tile.is-green  { --tile: #22c55e; --tile-rgb: 34, 197, 94; }
.es-admin-status-tile.is-amber  { --tile: #f59e0b; --tile-rgb: 245, 158, 11; }
.es-admin-status-tile.is-violet { --tile: #a78bfa; --tile-rgb: 167, 139, 250; }
.es-admin-status-tile.is-blue   { --tile: #60a5fa; --tile-rgb: 96, 165, 250; }
.es-admin-status-tile.is-slate  { --tile: #94a3b8; --tile-rgb: 148, 163, 184; }

.es-admin-status-tile.is-attention { box-shadow: inset 5px 0 0 var(--tile); }
.es-admin-status-tile.is-attention .es-admin-status-icon { background: var(--tile); color: #00131f; }

.es-admin-status-tile.is-muted { opacity: 0.7; }
.es-admin-status-tile.is-muted .es-admin-status-value { color: var(--es-muted); font-size: 1.6rem; }

.es-admin-status-icon {
  grid-area: icon;
  align-self: center;
  display: grid;
  place-items: center;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: rgba(var(--tile-rgb), 0.16);
  color: var(--tile);
}

.es-admin-status-icon svg { width: 24px; height: 24px; fill: currentColor; }

/* Sentence case in the body face — the AGL board is uppercase throughout. */
.es-admin-status-label {
  grid-area: label;
  font-size: 0.95rem;
  font-weight: 500;
  color: var(--es-ink);
}

.es-admin-status-value {
  grid-area: value;
  font-family: var(--es-font-display);
  font-size: 2.4rem;
  font-weight: 600;
  line-height: 1;
  color: var(--tile);
}

.es-admin-status-hint {
  grid-area: hint;
  font-size: 0.82rem;
  color: var(--es-muted);
}

/* --- boards --- */

.es-admin-boards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 1rem;
}

.es-admin-boards .es-card + .es-card { margin-top: 0; }

.es-admin-recent-text {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-weight: 400;
  color: var(--es-ink-soft);
}

.es-admin-recent-text strong { color: var(--es-ink); font-weight: 600; }

.es-empty small { display: block; margin-top: 0.4rem; font-size: 0.8rem; opacity: 0.8; }

/* --- tool rows ---
   A two-column list of rows with hairline dividers — not AGL's gapped grid of
   bordered boxes. The kicker (Events, Clubs…) is dropped visually: the row
   title already says it, and the eyebrow-over-heading pairing is AGL's tell. */

.es-admin-card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 1px;
  background: var(--es-line-soft);
}

.es-admin-card-link {
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr) auto;
  grid-template-areas:
    "icon strong arrow"
    "icon small arrow";
  column-gap: 1rem;
  align-items: center;
  padding: 1rem 1.2rem;
  background: var(--es-card);
  box-shadow: inset 0 0 0 0 var(--es-teal);
  transition: background 0.16s ease, box-shadow 0.2s ease;
}

.es-admin-card-link::after {
  content: "\203A";
  grid-area: arrow;
  font-family: var(--es-font-display);
  font-size: 1.6rem;
  line-height: 1;
  color: var(--es-muted);
  transition: color 0.16s ease, transform 0.16s ease;
}

.es-admin-card-link:hover {
  background: var(--es-teal-pale);
  box-shadow: inset 4px 0 0 0 var(--es-teal);
}

.es-admin-card-link:hover::after { color: var(--es-teal); transform: translateX(3px); }

.es-admin-card-icon {
  grid-area: icon;
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: rgba(0, 179, 201, 0.14);
  color: var(--es-teal);
}

.es-admin-card-icon svg { width: 22px; height: 22px; fill: currentColor; }

.es-admin-card-link strong {
  grid-area: strong;
  font-family: var(--es-font-display);
  font-size: 1.2rem;
  font-weight: 600;
  color: var(--es-ink);
}

.es-admin-card-link small {
  grid-area: small;
  font-size: 0.84rem;
  color: var(--es-ink-soft);
}

.es-admin-card-link .es-kicker { display: none; }

/* ==========================================================================
   Footer
   ========================================================================== */

.es-footer {
  background: var(--es-navy-deep);
  color: rgba(255, 255, 255, 0.72);
  padding: 2rem 0;
  font-size: 0.84rem;
}

.es-footer-inner {
  display: flex;
  flex-wrap: wrap;
  gap: 0.7rem 2rem;
  align-items: center;
  justify-content: space-between;
}

.es-footer a { color: rgba(255, 255, 255, 0.72); }
.es-footer a:hover { color: var(--es-teal); }

/* --- admin: event portal ------------------------------------------------ */

.es-ep-picker {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 1rem;
  padding: 1rem 1.25rem;
  margin-bottom: 1rem;
}

.es-ep-picker-field { flex: 1 1 260px; margin: 0; }
.es-ep-picker .es-admin-toolbar-note { flex: 2 1 260px; }
.es-ep-picker .es-admin-action { align-self: flex-end; margin-bottom: 0.15rem; }

.es-ep-head {
  display: grid;
  grid-template-columns: 150px minmax(0, 1fr) auto;
  gap: 1.25rem 1.75rem;
  align-items: start;
  padding: 1.25rem;
  margin-bottom: 1rem;
  background:
    linear-gradient(115deg, rgba(0, 179, 201, 0.16), transparent 55%),
    var(--es-card);
}

.es-ep-logo-wrap { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; }
.es-ep-logo, .es-ep-logo-empty {
  width: 120px;
  height: 120px;
  object-fit: contain;
  border-radius: 8px;
  background: var(--es-page);
  padding: 6px;
}
.es-ep-logo-empty {
  display: grid;
  place-items: center;
  border: 1px dashed var(--es-line);
  color: var(--es-muted);
  font-size: 0.82rem;
}
.es-ep-logo-actions { display: flex; gap: 0.4rem; flex-wrap: wrap; justify-content: center; }
.es-ep-logo-actions label { cursor: pointer; }

.es-ep-head-main h2 {
  margin: 0.1rem 0 0.4rem;
  font-family: var(--es-font-display);
  font-size: 2rem;
  font-weight: 600;
  line-height: 1.05;
}

.es-ep-meta { display: flex; flex-wrap: wrap; gap: 0.35rem 0.5rem; align-items: center; margin-bottom: 0.6rem; }
.es-ep-meta .es-pill.is-off { opacity: 0.6; }
.es-ep-meta code { font-size: 0.78rem; color: var(--es-muted); }
.es-ep-meta a { color: var(--es-teal); }
.es-ep-desc { margin: 0 0 0.75rem; color: var(--es-ink-soft); font-size: 0.92rem; max-width: 60ch; }
.es-ep-links { margin-top: 0.25rem; }

.es-ep-stats {
  display: grid;
  grid-template-columns: repeat(2, minmax(96px, auto));
  gap: 0.5rem;
}
.es-ep-stat {
  padding: 0.6rem 0.9rem;
  border: 1px solid var(--es-line-soft);
  border-radius: 6px;
  background: rgba(0, 179, 201, 0.06);
}
.es-ep-stat strong { display: block; font-family: var(--es-font-display); font-size: 1.6rem; font-weight: 600; line-height: 1; color: var(--es-teal); }
.es-ep-stat span { font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--es-muted); }

.es-ep-times { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 0.5rem; }
.es-ep-time {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.3rem 0.4rem 0.3rem 0.7rem;
  border: 1px solid var(--es-teal);
  border-radius: 3px;
  background: var(--es-teal-pale);
  color: var(--es-teal);
  font-family: var(--es-font-display);
  font-size: 0.95rem;
}
.es-ep-time button {
  border: 0;
  background: none;
  color: inherit;
  font: inherit;
  font-size: 1.05rem;
  line-height: 1;
  cursor: pointer;
  opacity: 0.7;
}
.es-ep-time button:hover { opacity: 1; }
.es-ep-time-add { display: flex; gap: 0.5rem; align-items: center; }
.es-ep-time-add input {
  padding: 0.45rem 0.6rem;
  border: 1px solid var(--es-line);
  border-radius: 4px;
  background: var(--es-page);
  color: var(--es-ink);
  font: inherit;
}
.es-field small { font-weight: 400; letter-spacing: 0; text-transform: none; }

.es-ep-add-row {
  display: flex;
  gap: 0.5rem;
  align-items: center;
  padding: 0.6rem 1rem;
  background: var(--es-teal-pale);
  border-bottom: 1px solid var(--es-line-soft);
}
.es-ep-add-row select {
  flex: 1;
  padding: 0.45rem 0.6rem;
  border: 1px solid var(--es-line);
  border-radius: 4px;
  background: var(--es-page);
  color: var(--es-ink);
  font: inherit;
}

.es-ep-record { font-size: 0.82rem; color: var(--es-muted); white-space: nowrap; padding-right: 0.5rem; }

.es-ep-counts { display: flex; flex-wrap: wrap; gap: 0.4rem; padding: 0.4rem 1rem 0.8rem; }
.es-ep-count {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  padding: 0.25rem 0.6rem;
  border: 1px solid var(--es-line-soft);
  border-radius: 3px;
  font-family: var(--es-font-display);
  font-size: 0.95rem;
}
.es-ep-count strong { font-weight: 600; color: var(--es-teal); }

.es-pos {
  display: inline-block;
  min-width: 2.1em;
  padding: 0.1rem 0.35rem;
  border-radius: 3px;
  text-align: center;
  font-family: var(--es-font-display);
  font-size: 0.9rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  color: #00131f;
  background: var(--es-teal);
}
.es-pos.is-LW { background: var(--es-pos-lw); }
.es-pos.is-C  { background: var(--es-pos-c); }
.es-pos.is-RW { background: var(--es-pos-rw); }
.es-pos.is-LD { background: var(--es-pos-ld); }
.es-pos.is-RD { background: var(--es-pos-rd); }
.es-pos.is-G  { background: var(--es-pos-g); }

/* Secondary position: outlined in the position color instead of filled. */
.es-pos.is-2 { background: transparent; border: 1px solid currentColor; }
.es-pos.is-2.is-LW { color: var(--es-pos-lw); }
.es-pos.is-2.is-C  { color: var(--es-pos-c); }
.es-pos.is-2.is-RW { color: var(--es-pos-rw); }
.es-pos.is-2.is-LD { color: var(--es-pos-ld); }
.es-pos.is-2.is-RD { color: var(--es-pos-rd); }
.es-pos.is-2.is-G  { color: var(--es-pos-g); }

.es-ep-avail { font-size: 0.8rem; color: var(--es-ink-soft); line-height: 1.4; }
.es-ep-avail b { font-weight: 500; color: var(--es-muted); }
.es-ep-avail i { font-style: normal; color: #ff8b9c; }
.es-ep-notes { max-width: 22ch; font-size: 0.82rem; color: var(--es-ink-soft); }

.es-ep-exp { display: inline-flex; border: 1px solid var(--es-line); border-radius: 3px; overflow: hidden; }
.es-ep-exp button {
  padding: 0.2rem 0.5rem;
  border: 0;
  background: none;
  color: var(--es-muted);
  font: inherit;
  font-family: var(--es-font-display);
  font-size: 0.82rem;
  cursor: pointer;
}
.es-ep-exp button + button { border-left: 1px solid var(--es-line); }
.es-ep-exp button.is-on { background: var(--es-teal); color: #00131f; }

.es-ep-sched { padding: 0.75rem 1rem 1rem; }
.es-ep-sched .es-admin-status-tile { padding: 0.9rem 1rem; grid-template-columns: minmax(0, 1fr); grid-template-areas: "value" "label"; }

.es-ep-standings td, .es-ep-standings th { text-align: center; }
.es-ep-standings .es-td-text { text-align: left; }
.es-ep-standings th:first-child { text-align: left; }

@media (max-width: 860px) {
  .es-ep-head { grid-template-columns: 110px minmax(0, 1fr); }
  .es-ep-stats { grid-column: 1 / -1; grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .es-ep-logo, .es-ep-logo-empty { width: 96px; height: 96px; }
}

@media (max-width: 560px) {
  .es-ep-head { grid-template-columns: minmax(0, 1fr); }
  .es-ep-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* --- public: season signups --------------------------------------------- */

.es-signup-events { display: grid; gap: 0.6rem; padding: 0.75rem 1rem 1rem; }

.es-signup-event {
  display: grid;
  grid-template-columns: 56px minmax(0, 1fr) auto;
  gap: 0.9rem;
  align-items: center;
  padding: 0.75rem 0.9rem;
  border: 1px solid var(--es-line);
  border-radius: 6px;
  background: var(--es-page);
  color: var(--es-ink);
  font: inherit;
  text-align: left;
  cursor: pointer;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.es-signup-event:hover { border-color: var(--es-teal); }
.es-signup-event.is-selected { border-color: var(--es-teal); box-shadow: inset 4px 0 0 var(--es-teal); }
.es-signup-event img { width: 56px; height: 56px; object-fit: contain; }
.es-signup-event-text { display: flex; flex-direction: column; min-width: 0; }
.es-signup-event-text strong { font-family: var(--es-font-display); font-size: 1.25rem; font-weight: 600; }
.es-signup-event-meta { font-size: 0.82rem; color: var(--es-muted); }

.es-signup-head { display: flex; gap: 1rem; align-items: center; padding: 1rem 1rem 0.5rem; }
.es-signup-logo { width: 72px; height: 72px; object-fit: contain; border-radius: 6px; background: var(--es-page); padding: 4px; }
.es-signup-head-main h2 { margin: 0.1rem 0 0.35rem; font-family: var(--es-font-display); font-size: 1.7rem; font-weight: 600; line-height: 1.05; }
.es-signup-meta { display: flex; flex-wrap: wrap; gap: 0.35rem 0.8rem; align-items: center; font-size: 0.86rem; color: var(--es-muted); }
.es-signup-desc { margin: 0; padding: 0.25rem 1rem 0.75rem; color: var(--es-ink-soft); font-size: 0.92rem; }

.es-signup-prompt {
  margin: 0.5rem 1rem 1rem;
  padding: 0.8rem 1rem;
  border: 1px solid rgba(0, 179, 201, 0.35);
  border-radius: 6px;
  background: var(--es-teal-pale);
  font-size: 0.92rem;
  line-height: 1.5;
}
.es-signup-prompt strong { display: block; font-family: var(--es-font-display); font-size: 1.1rem; font-weight: 600; }
.es-signup-prompt a { color: var(--es-teal); }

.es-signup-mine {
  padding: 0.6rem 0.9rem;
  border-left: 3px solid #22c55e;
  background: rgba(34, 197, 94, 0.1);
  font-size: 0.9rem;
}

.es-signup-avail { border: 1px solid var(--es-line-soft); border-radius: 6px; padding: 0.6rem 0.9rem 0.8rem; margin: 0; }
.es-signup-avail legend { padding: 0 0.3rem; font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--es-muted); }
.es-signup-avail legend .es-req { margin-left: 0.3rem; }
.es-signup-avail-row { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.es-signup-avail-row label {
  display: inline-flex; align-items: center; gap: 0.4rem;
  padding: 0.35rem 0.7rem; border: 1px solid var(--es-line); border-radius: 3px;
  font-family: var(--es-font-display); font-size: 0.95rem; cursor: pointer;
}
.es-signup-avail-row label:has(input:checked) { border-color: var(--es-teal); background: var(--es-teal-pale); color: var(--es-teal); }
.es-signup-avail-row label.is-none:has(input:checked) { border-color: #ff8b9c; background: rgba(215, 38, 61, 0.12); color: #ff8b9c; }
.es-signup-avail-row input { accent-color: var(--es-teal); }

.es-signup-actions { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }

.es-signup-list-wrap { border-top: 1px solid var(--es-line); margin-top: 0.5rem; }
.es-signup-list-wrap .es-card-head { flex-wrap: wrap; gap: 0.5rem; }
.es-signup-counts { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-left: auto; }
.es-signup-count { display: inline-flex; align-items: center; gap: 0.4rem; font-family: var(--es-font-display); font-size: 1.05rem; }
.es-signup-count .es-pos { font-size: 1rem; padding: 0.22rem 0.55rem; border-radius: 5px; }
.es-signup-count strong { font-weight: 700; color: var(--es-teal); }

.es-signup-list { list-style: none; margin: 0; padding: 0.25rem 0 0.5rem; }
.es-signup-list li { display: flex; align-items: center; gap: 0.75rem; padding: 0.5rem 1rem; border-top: 1px solid var(--es-line-soft); }
.es-signup-list li:first-child { border-top: 0; }
.es-signup-player { display: flex; flex-direction: column; min-width: 0; }
.es-signup-player strong { font-weight: 500; }
.es-signup-player-meta { font-size: 0.8rem; color: var(--es-muted); }

.es-signup-steps { margin: 0; padding: 0.5rem 1rem 1rem 2.2rem; font-size: 0.9rem; line-height: 1.6; color: var(--es-ink-soft); }
.es-signup-steps a { color: var(--es-teal); }

@media (max-width: 520px) {
  .es-signup-event { grid-template-columns: 44px minmax(0, 1fr); }
  .es-signup-event img { width: 44px; height: 44px; }
  .es-signup-event .es-pill { grid-column: 2; justify-self: start; }
}

/* --- public: media desk surfaces ---------------------------------------- */

.es-banner [data-es-banner-cta] { flex: 0 0 auto; }

.es-lead.has-image { background-size: cover; background-position: center; }
.es-lead.has-image::before { background: linear-gradient(to top, rgba(0, 9, 20, 0.6), rgba(0, 9, 20, 0.15)); }
.es-lead.has-image .es-lead-crest { opacity: 0.9; width: min(200px, 34%); transform: translate(-50%, -75%); }

.es-promo-card img.is-custom { width: 100%; max-height: 180px; object-fit: cover; border-radius: 4px; }
.es-promo-card .es-btn { display: inline-block; margin-top: 0.2rem; }

.es-story-art.has-image { background-size: cover; background-position: center; }
.es-story-meta { font-size: 0.76rem !important; color: var(--es-muted) !important; letter-spacing: 0.04em; }

.es-article { padding: 0 0 1rem; border-bottom: 1px solid var(--es-line); margin-bottom: 0.5rem; }
.es-article-art { height: clamp(180px, 34vw, 340px); background-size: cover; background-position: center; }
.es-article-body { padding: 1.1rem 1.25rem 0; }
.es-article-body h2 { font-size: clamp(1.6rem, 3vw, 2.3rem); font-weight: 600; line-height: 1.1; margin: 0 0 0.4rem; }
.es-article-meta { margin: 0 0 0.9rem; font-size: 0.8rem; color: var(--es-muted); letter-spacing: 0.04em; text-transform: uppercase; }
.es-article-summary { font-size: 1.05rem; color: var(--es-ink-soft); margin: 0 0 1rem; }
.es-article-body p { line-height: 1.65; margin: 0 0 1rem; max-width: 70ch; }

.es-watch-live {
  display: flex;
  align-items: center;
  gap: 0.8rem;
  margin: 0.6rem 0.8rem;
  padding: 0.7rem 0.9rem;
  border-radius: 6px;
  background: rgba(215, 38, 61, 0.14);
  border: 1px solid rgba(215, 38, 61, 0.5);
}
.es-watch-live .es-list-mark { animation: es-pulse 1.4s ease-in-out infinite; }
.es-watch-live strong { display: block; font-weight: 500; }
.es-watch-live small { color: var(--es-muted); }
@keyframes es-pulse { 50% { opacity: 0.55; } }

.es-watch-list li { display: block; }
.es-watch-row { display: flex; gap: 0.8rem; align-items: center; padding: 0.55rem 1rem; }
a.es-watch-row:hover { background: var(--es-teal-pale); }
.es-watch-when { display: flex; flex-direction: column; min-width: 4.6rem; font-family: var(--es-font-display); line-height: 1.15; }
.es-watch-when b { font-weight: 600; font-size: 0.95rem; }
.es-watch-when i { font-style: normal; font-size: 0.8rem; color: var(--es-teal); }
.es-watch-row strong { display: block; font-weight: 500; font-size: 0.9rem; }
.es-watch-row small { color: var(--es-muted); }

.es-potw { display: flex; gap: 1rem; align-items: flex-start; padding: 0.9rem 1rem; }
.es-potw.is-full { padding: 1.1rem 1.25rem 1.2rem; }
.es-potw .es-chip { width: 48px; height: 48px; font-size: 1.4rem; border-radius: 6px; flex: 0 0 auto; }
.es-potw-img { width: 112px; height: 112px; object-fit: cover; border-radius: 6px; flex: 0 0 auto; }
.es-potw:not(.is-full) .es-potw-img { width: 48px; height: 48px; }
.es-potw-body { min-width: 0; }
.es-potw-body h3 { margin: 0.1rem 0 0.25rem; font-family: var(--es-font-display); font-size: 1.5rem; font-weight: 600; line-height: 1.1; }
.es-potw:not(.is-full) .es-potw-body h3 { font-size: 1.15rem; }
.es-potw-meta { margin: 0; font-size: 0.86rem; color: var(--es-ink-soft); }
.es-potw-blurb { margin-top: 0.7rem; font-size: 0.94rem; line-height: 1.6; }
.es-potw-blurb p { margin: 0 0 0.7rem; }
.es-potw-history { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--es-line); }
.es-potw-history li + li { border-top: 1px solid var(--es-line-soft); }

.es-rank-head { margin: 0; padding: 0.7rem 1rem 0; font-family: var(--es-font-display); font-size: 1rem; color: var(--es-muted); }
.es-rank-head b { font-weight: 600; color: var(--es-ink); }
.es-rank-intro { margin: 0.3rem 0 0; padding: 0 1rem; font-size: 0.9rem; color: var(--es-ink-soft); }
.es-rank-list { list-style: none; margin: 0.5rem 0 0; padding: 0; }
.es-rank-list li { display: flex; align-items: center; gap: 0.8rem; padding: 0.55rem 1rem; border-top: 1px solid var(--es-line-soft); }
.es-rank-club { display: flex; align-items: center; gap: 0.7rem; flex: 1; min-width: 0; }
.es-rank-club:hover strong { color: var(--es-teal); }
.es-rank-club strong { display: block; font-weight: 500; }
.es-rank-club small { display: block; font-size: 0.8rem; color: var(--es-muted); }
.es-rank-move { font-family: var(--es-font-display); font-size: 0.9rem; min-width: 3rem; text-align: right; color: var(--es-muted); }
.es-rank-move.is-up { color: #22c55e; }
.es-rank-move.is-down { color: #ff8b9c; }
.es-rank-move.is-new { color: var(--es-teal); font-size: 0.75rem; letter-spacing: 0.08em; }

.es-gotn { padding: 0.9rem 1.25rem 1.2rem; }
.es-gotn-matchup { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; margin: 0.5rem 0 0.8rem; }
.es-gotn-side { display: flex; flex-direction: column; align-items: center; gap: 0.35rem; flex: 1; text-align: center; }
.es-gotn-side .es-chip, .es-gotn-side .es-chip-logo { width: 56px; height: 56px; font-size: 1.6rem; border-radius: 8px; }
.es-gotn-side strong { font-family: var(--es-font-display); font-size: 1.1rem; font-weight: 600; }
.es-gotn-score { font-family: var(--es-font-display); font-size: 2rem; font-weight: 600; color: var(--es-teal); line-height: 1; }
.es-gotn-at { font-family: var(--es-font-display); font-size: 1.1rem; color: var(--es-muted); letter-spacing: 0.06em; }
.es-gotn h3 { margin: 0 0 0.4rem; font-family: var(--es-font-display); font-size: 1.4rem; font-weight: 600; }
.es-gotn-blurb { font-size: 0.94rem; line-height: 1.6; margin-bottom: 0.8rem; }
.es-gotn-blurb p { margin: 0 0 0.6rem; }

/* --- admin: media desk -------------------------------------------------- */

.es-media-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin-bottom: 1rem;
}
.es-media-tabs button {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.5rem 0.9rem;
  border: 1px solid var(--es-line);
  border-radius: 4px;
  background: var(--es-card);
  color: var(--es-ink-soft);
  font: inherit;
  font-family: var(--es-font-display);
  font-size: 1rem;
  cursor: pointer;
}
.es-media-tabs button:hover { border-color: var(--es-teal); color: var(--es-ink); }
.es-media-tabs button.is-active { background: var(--es-teal); border-color: var(--es-teal); color: #00131f; }
.es-media-tabs button.is-active .es-admin-tab-badge { background: #00131f; color: var(--es-teal); }
.es-media-live-dot { width: 9px; height: 9px; border-radius: 50%; background: #d7263d; animation: es-pulse 1.4s ease-in-out infinite; }

.es-admin-help { margin: 0; padding: 0 1rem 0.6rem; font-size: 0.84rem; color: var(--es-muted); }
.es-form .es-admin-help { padding: 0; }
.es-field-narrow { flex: 0 0 9rem; }

.es-media-img {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  flex-wrap: wrap;
}
.es-media-img img { width: 160px; height: 72px; object-fit: cover; border-radius: 4px; background: var(--es-page); }
.es-media-img.is-square img { width: 72px; height: 72px; }
.es-media-img em { font-style: normal; font-size: 0.84rem; color: var(--es-muted); }
.es-media-img label { cursor: pointer; }

.es-media-hl .es-admin-row-main strong { font-size: 1rem; font-weight: 500; }
.es-media-thumb { width: 44px; height: 30px; object-fit: cover; border-radius: 3px; }

.es-media-sched { padding: 0.4rem 1rem 0.6rem; display: flex; flex-direction: column; gap: 0.4rem; }
.es-media-sched-row { display: flex; gap: 0.4rem; flex-wrap: wrap; align-items: center; }
.es-media-sched-row input {
  padding: 0.4rem 0.55rem;
  border: 1px solid var(--es-line);
  border-radius: 4px;
  background: var(--es-page);
  color: var(--es-ink);
  font: inherit;
  font-size: 0.88rem;
  min-width: 0;
}
.es-media-sched-row input[type="date"] { flex: 0 0 9.2rem; }
.es-media-sched-row input[type="time"] { flex: 0 0 6.6rem; }
.es-media-sched-row input[type="text"] { flex: 1 1 8rem; }
.es-media-sched-row input.is-wide { flex: 2 1 12rem; }
.es-media-sched-row .es-admin-action { padding: 0.35rem 0.6rem; }

.es-media-rank { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.35rem; }
.es-media-rank-row { display: flex; align-items: center; gap: 0.6rem; padding: 0.4rem 0.6rem; border: 1px solid var(--es-line-soft); border-radius: 4px; }
.es-media-rank-num { width: 1.6rem; text-align: center; font-family: var(--es-font-display); font-size: 1.1rem; font-weight: 600; color: var(--es-teal); }
.es-media-rank-row strong { min-width: 9rem; font-weight: 500; }
.es-media-rank-row input { flex: 1; min-width: 6rem; padding: 0.35rem 0.55rem; border: 1px solid var(--es-line); border-radius: 4px; background: var(--es-page); color: var(--es-ink); font: inherit; font-size: 0.86rem; }
.es-media-rank-row .es-admin-action { padding: 0.3rem 0.5rem; }

.es-pill.is-live { background: rgba(215, 38, 61, 0.18); color: #ff8b9c; }

/* --- lead scroller ------------------------------------------------------ */

.es-lead-scroller { position: relative; }
.es-scroller-track { position: relative; min-height: clamp(320px, 42vw, 470px); }
.es-scroller-track .es-slide {
  position: absolute;
  inset: 0;
  opacity: 0;
  transition: opacity 0.7s ease;
  pointer-events: none;
}
.es-scroller-track .es-slide.is-current { opacity: 1; pointer-events: auto; position: relative; }

/* Kicker wears the accent dash of the premium register. */
.es-slide-kicker {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  margin-bottom: 0.35rem;
  font-size: clamp(0.62rem, 0.3vw + 0.55rem, 0.75rem);
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: #35d9ec;
}
.es-slide-kicker::before {
  content: "";
  width: 20px;
  height: 3px;
  border-radius: 2px;
  background: linear-gradient(90deg, var(--es-teal), #35d9ec);
  box-shadow: 0 0 10px rgba(53, 217, 236, 0.8);
}

/* Slide titles share the fluid hero type (slides 2+ render as h2). */
.es-slide-title {
  font-size: clamp(1.4rem, 3.2vw + 0.4rem, 2.9rem);
  font-weight: 700;
  line-height: 1.08;
  max-width: 22ch;
  margin: 0;
  background: linear-gradient(180deg, #ffffff 55%, #9fd8ea);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.es-slide:hover .es-slide-title { background-image: linear-gradient(180deg, #7deefb, #00b3c9); }

/* CTA: small buttons; more than one stacks vertically. */
.es-slide-cta {
  display: block;
  width: fit-content;
  margin-top: 0.7rem;
  padding: 0.45rem 1rem;
  font-size: 0.85rem;
  border-radius: 9px;
}
.es-slide-cta + .es-slide-cta { margin-top: 0.45rem; }

.es-scroller-arrow {
  position: absolute;
  top: 38%;
  z-index: 2;
  width: 40px;
  height: 40px;
  border: 0;
  border-radius: 50%;
  background: rgba(0, 13, 28, 0.55);
  color: #fff;
  font-size: 1.7rem;
  line-height: 1;
  cursor: pointer;
  opacity: 0;
  transition: opacity 0.2s ease, background 0.2s ease;
}
.es-scroller-arrow.is-prev { left: 0.75rem; }
.es-scroller-arrow.is-next { right: 0.75rem; }
.es-lead-scroller:hover .es-scroller-arrow, .es-scroller-arrow:focus-visible { opacity: 1; }
.es-scroller-arrow:hover { background: var(--es-teal); color: #00131f; }

.es-scroller-dots {
  position: absolute;
  right: 1rem;
  bottom: 0.9rem;
  z-index: 2;
  display: flex;
  gap: 0.4rem;
}
.es-scroller-dots button {
  width: 10px;
  height: 10px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.35);
  cursor: pointer;
  transition: background 0.2s ease, transform 0.2s ease;
}
.es-scroller-dots button.is-current { background: var(--es-teal); transform: scale(1.25); }

@media (hover: none) { .es-scroller-arrow { opacity: 1; } }

/* admin: slide thumbnails */
.es-media-slide-thumb {
  flex: 0 0 auto;
  width: 64px;
  height: 36px;
  border-radius: 3px;
  background: linear-gradient(150deg, #023a68, #001b36);
  background-size: cover;
  background-position: center;
}
.es-admin-row.is-off .es-admin-row-main { opacity: 0.55; }

/* ==========================================================================
   PREMIUM RESTYLE (2026-09-17)
   --------------------------------------------------------------------------
   The navy site re-lit: ambient page glows and grain instead of a flat fill,
   top-lit gradient card surfaces with a hairline highlight and hover lift,
   glass chrome on the header and ticker, glow accents. Everything here is
   scoped to body.es-page.is-navy so the light palette still works; the few
   structural rules (nav order, slim lead banner, active-tab bars) live with
   their components above.
   ========================================================================== */

/* --- page ambiance ------------------------------------------------------ */

body.es-page.is-navy { --es-page: #020b16; }

body.es-page.is-navy::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -2;
  pointer-events: none;
  background:
    radial-gradient(900px 520px at 12% -8%, rgba(0, 179, 201, 0.2), transparent 60%),
    radial-gradient(1100px 700px at 108% 32%, rgba(23, 82, 160, 0.26), transparent 62%),
    radial-gradient(1400px 900px at 50% 120%, rgba(0, 10, 24, 0.9), transparent 70%);
}

/* Fine grain so the large dark surfaces never band. */
body.es-page.is-navy::after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  opacity: 0.35;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .05 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* --- cards: top-lit surfaces ------------------------------------------- */

body.es-page.is-navy .es-card {
  border-radius: 14px;
  background: linear-gradient(180deg, #073562, #021d3b);
  border: 1px solid rgba(127, 190, 255, 0.14);
  box-shadow: 0 16px 40px rgba(0, 5, 14, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.08);
  transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
}

body.es-page.is-navy .es-card:hover {
  transform: translateY(-2px);
  border-color: rgba(90, 200, 230, 0.28);
  box-shadow: 0 22px 52px rgba(0, 5, 14, 0.55), 0 0 0 1px rgba(53, 217, 236, 0.06), inset 0 1px 0 rgba(255, 255, 255, 0.08);
}

/* Card heads: accent tick instead of the icon. */
body.es-page.is-navy .es-card-head svg { display: none; }

body.es-page.is-navy .es-card-head h2 {
  display: flex;
  align-items: center;
  gap: 0.6rem;
}

body.es-page.is-navy .es-card-head h2::before {
  content: "";
  flex: 0 0 auto;
  width: 4px;
  height: 15px;
  border-radius: 2px;
  background: linear-gradient(180deg, #35d9ec, var(--es-teal));
  box-shadow: 0 0 8px rgba(53, 217, 236, 0.7);
}

/* --- chrome: glass header + ticker -------------------------------------- */

body.es-page.is-navy .es-nav {
  background: linear-gradient(180deg, rgba(0, 27, 54, 0.96), rgba(1, 17, 35, 0.96));
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid rgba(127, 190, 255, 0.14);
  box-shadow: 0 14px 34px rgba(0, 4, 12, 0.45);
}

body.es-page.is-navy .es-brand::before {
  background: linear-gradient(115deg, #023e63 0%, #00b3c9 78%, #59e2f2 100%);
  box-shadow: 0 0 34px rgba(0, 179, 201, 0.4);
}

body.es-page.is-navy .es-scorebar {
  background: rgba(2, 14, 29, 0.82);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid rgba(127, 190, 255, 0.14);
}

body.es-page.is-navy .es-scorebar-next { background: transparent; }

/* --- banner ribbon ------------------------------------------------------ */

body.es-page.is-navy .es-banner {
  border-radius: 14px;
  border: 1px solid rgba(127, 215, 255, 0.18);
  box-shadow: 0 22px 50px rgba(0, 5, 14, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.09);
}

/* --- buttons ------------------------------------------------------------ */

body.es-page.is-navy .es-btn {
  background: linear-gradient(135deg, #5ae4f4, #00b3c9 60%, #0090a6);
  color: #001b22;
  box-shadow: 0 8px 22px rgba(0, 179, 201, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.5);
  transition: transform 0.18s ease, box-shadow 0.18s ease;
}

body.es-page.is-navy .es-btn:hover {
  background: linear-gradient(135deg, #5ae4f4, #00b3c9 60%, #0090a6);
  transform: translateY(-1px);
  box-shadow: 0 12px 30px rgba(0, 179, 201, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.5);
}

body.es-page.is-navy .es-btn-light {
  background: linear-gradient(180deg, #ffffff, #d9f4fa);
  color: var(--es-navy);
  box-shadow: 0 8px 22px rgba(0, 8, 18, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.9);
}

body.es-page.is-navy .es-btn-light:hover {
  background: linear-gradient(180deg, #ffffff, #bceef8);
  transform: translateY(-1px);
}

/* Outranks the navy .es-btn teal gradient so Discord stays blurple. */
body.es-page.is-navy .es-btn-discord {
  background: linear-gradient(135deg, #7b87ff, #5865f2 55%, #3d49d1);
  color: #ffffff;
  box-shadow: 0 8px 22px rgba(88, 101, 242, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.35);
}

body.es-page.is-navy .es-btn-discord:hover {
  background: linear-gradient(135deg, #8893ff, #6773f4 55%, #4753dd);
  transform: translateY(-1px);
  box-shadow: 0 12px 30px rgba(88, 101, 242, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.35);
}

body.es-page.is-navy .es-btn:disabled {
  transform: none;
  box-shadow: none;
}

/* --- tables ------------------------------------------------------------- */

body.es-page.is-navy .es-table thead th { background: rgba(2, 20, 40, 0.4); }

/* --- signup + promo cards ----------------------------------------------- */

body.es-page.is-navy .es-signup {
  background:
    radial-gradient(300px 170px at 50% -20%, rgba(53, 217, 236, 0.28), transparent 70%),
    linear-gradient(160deg, var(--es-navy) 0%, var(--es-navy-deep) 100%);
}

body.es-page.is-navy .es-signup h2 em {
  background: linear-gradient(90deg, #35d9ec, #8ff0fb);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

/* --- quick-link marks ---------------------------------------------------- */

body.es-page.is-navy .es-list-mark {
  border-radius: 8px;
  background: linear-gradient(160deg, rgba(0, 179, 201, 0.28), rgba(0, 60, 110, 0.3));
  border: 1px solid rgba(90, 200, 230, 0.25);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12);
  color: #9fe8f5;
}

body.es-page.is-navy .es-list-mark.is-live { background: linear-gradient(135deg, #e6404e, #a11220); border-color: rgba(255, 120, 120, 0.35); color: #ffffff; }

/* --- footer ------------------------------------------------------------- */

body.es-page.is-navy .es-footer { position: relative; }

body.es-page.is-navy .es-footer::before {
  content: "";
  position: absolute;
  top: -1px;
  left: 0;
  right: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(53, 217, 236, 0.6), transparent);
}

/* ==========================================================================
   MEMBER PORTAL (member.html)
   Sidebar + dashboard grid emulating the player-portal layout: greeting,
   season/team panels, stat tiles, form, milestones, position records,
   ratings, game log, and news. All regions painted by vvhl-member.js.
   ========================================================================== */

.es-mb-layout {
  display: grid;
  grid-template-columns: 240px minmax(0, 1fr);
  gap: 1rem;
  align-items: start;
  padding: 1rem 0 3rem;
}

/* --- sidebar ------------------------------------------------------------ */

.es-mb-side {
  position: sticky;
  top: 118px;
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  padding: 1rem;
  min-height: 420px;
}

body.es-page.is-navy .es-mb-side:hover { transform: none; }

.es-mb-side-brand {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.2rem 0.4rem 0.9rem;
  border-bottom: 1px solid var(--es-line-soft);
  margin-bottom: 0.6rem;
}

.es-mb-side-brand img { width: 34px; height: 34px; object-fit: contain; }

.es-mb-side-brand strong {
  display: block;
  font-family: var(--es-font-display);
  font-size: 1.05rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  line-height: 1.1;
}

.es-mb-side-brand span { font-size: 0.72rem; color: var(--es-muted); }

.es-mb-side-label {
  padding: 0.3rem 0.5rem 0.2rem;
  font-family: var(--es-font-display);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--es-muted);
}

.es-mb-side-nav { display: flex; flex-direction: column; gap: 0.25rem; }

.es-mb-side-nav a,
.es-mb-side-soon {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.55rem 0.65rem;
  border-radius: 9px;
  font-size: 0.92rem;
  font-weight: 500;
  color: var(--es-ink-soft);
  text-decoration: none;
}

.es-mb-side-nav svg { width: 17px; height: 17px; fill: currentColor; opacity: 0.85; flex: 0 0 auto; }

.es-mb-side-soon svg { width: 17px; height: 17px; fill: currentColor; opacity: 0.85; flex: 0 0 auto; }

.es-mb-side-nav a:hover { background: rgba(0, 179, 201, 0.1); color: var(--es-ink); }

.es-mb-side-nav a.is-active {
  background: linear-gradient(90deg, rgba(0, 179, 201, 0.22), rgba(0, 179, 201, 0.06));
  color: var(--es-ink);
  box-shadow: inset 2px 0 0 var(--es-teal);
}

.es-mb-side-soon { color: var(--es-muted); cursor: default; }

.es-mb-side-soon em {
  margin-left: auto;
  font-style: normal;
  font-size: 0.62rem;
  font-family: var(--es-font-display);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 2px 7px;
  border-radius: 999px;
  border: 1px solid var(--es-line);
}

.es-mb-side-user {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin-top: 1.4rem;
  padding: 0.6rem 0.5rem 0.2rem;
  border-top: 1px solid var(--es-line-soft);
}

.es-mb-avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  overflow: hidden;
  flex: 0 0 auto;
  background: linear-gradient(135deg, #35d9ec, var(--es-teal-dark));
  color: #00202c;
  font-family: var(--es-font-display);
  font-size: 0.78rem;
  font-weight: 600;
}

.es-mb-avatar img { width: 100%; height: 100%; object-fit: cover; }

.es-mb-side-user strong { font-size: 0.9rem; font-weight: 500; }

/* --- main column -------------------------------------------------------- */

.es-mb-main { display: flex; flex-direction: column; gap: 1rem; min-width: 0; }

.es-mb-hello h1 {
  margin: 0;
  font-family: var(--es-font-display);
  font-size: clamp(1.7rem, 3.4vw, 2.4rem);
  font-weight: 600;
  letter-spacing: 0.02em;
}

.es-mb-hello p { margin: 0.25rem 0 0; color: var(--es-muted); font-size: 0.95rem; }

.es-mb-accent { font-weight: 600; color: var(--es-teal); }

body.es-page.is-navy .es-mb-accent { color: #5ae4f4; }

.es-mb-h {
  margin: 0.2rem 0 -0.35rem;
  font-family: var(--es-font-display);
  font-size: 1.15rem;
  font-weight: 600;
  letter-spacing: 0.04em;
}

.es-mb-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1rem;
  align-items: stretch;
}

.es-mb-card-head { justify-content: space-between; }

.es-mb-head-hint { font-size: 0.75rem; color: var(--es-muted); }

.es-mb-head-num {
  font-family: var(--es-font-display);
  font-size: 1.5rem;
  font-weight: 600;
  color: var(--es-teal);
}

body.es-page.is-navy .es-mb-head-num { color: #5ae4f4; }

.es-mb-card-body { padding: 0.9rem 1rem 1rem; }

.es-mb-card-body.es-mb-flush { padding: 0; }

.es-mb-empty { margin: 0; padding: 1rem; font-size: 0.85rem; color: var(--es-muted); }

.es-mb-note { margin: 0.8rem 0 0; font-size: 0.76rem; color: var(--es-muted); font-style: italic; }

/* --- alert banner ------------------------------------------------------- */

.es-mb-alert {
  display: flex;
  align-items: center;
  gap: 0.85rem;
  padding: 0.85rem 1rem;
  border-radius: 14px;
  border: 1px solid rgba(0, 179, 201, 0.35);
  background: linear-gradient(180deg, rgba(0, 179, 201, 0.12), rgba(0, 179, 201, 0.04));
}

.es-mb-alert.is-warn {
  border-color: rgba(251, 191, 36, 0.4);
  background: linear-gradient(180deg, rgba(251, 191, 36, 0.12), rgba(251, 191, 36, 0.04));
}

.es-mb-alert-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  flex: 0 0 auto;
  border-radius: 10px;
  background: rgba(0, 179, 201, 0.16);
}

.es-mb-alert.is-warn .es-mb-alert-icon { background: rgba(251, 191, 36, 0.16); }

.es-mb-alert-icon svg { width: 20px; height: 20px; fill: var(--es-teal); }

.es-mb-alert.is-warn .es-mb-alert-icon svg { fill: #fbbf24; }

.es-mb-alert-body { flex: 1; min-width: 0; }

.es-mb-alert-title { display: flex; align-items: center; gap: 0.55rem; flex-wrap: wrap; }

.es-mb-alert-title strong { font-size: 0.98rem; font-weight: 600; }

.es-mb-alert-tag {
  padding: 2px 9px;
  border-radius: 999px;
  font-family: var(--es-font-display);
  font-size: 0.66rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #7deefb;
  background: rgba(0, 179, 201, 0.18);
  border: 1px solid rgba(53, 217, 236, 0.35);
}

.es-mb-alert.is-warn .es-mb-alert-tag {
  color: #ffd76e;
  background: rgba(251, 191, 36, 0.14);
  border-color: rgba(251, 191, 36, 0.4);
}

.es-mb-alert-sub { margin: 0.15rem 0 0; font-size: 0.82rem; color: var(--es-muted); }

.es-mb-alert-actions { display: flex; gap: 0.5rem; flex: 0 0 auto; }

.es-btn.es-mb-btn-sm { padding: 0.45rem 1.1rem; font-size: 0.85rem; border-radius: 9px; }

/* Ghost button: outlined, sits beside a primary in the alert. The navy
   scope must restate it or the navy .es-btn teal gradient wins. */
.es-btn-ghost,
body.es-page.is-navy .es-btn-ghost {
  background: transparent;
  color: var(--es-ink-soft);
  border: 1px solid var(--es-line);
  box-shadow: none;
}

.es-btn-ghost:hover,
body.es-page.is-navy .es-btn-ghost:hover {
  background: rgba(0, 179, 201, 0.1);
  color: var(--es-ink);
  transform: none;
  box-shadow: none;
}

/* --- season + team panels ----------------------------------------------- */

.es-mb-panel { padding: 1rem 1.1rem 1.1rem; }

.es-mb-panel-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0.8rem;
  margin-bottom: 0.85rem;
}

.es-mb-panel-lead { display: flex; align-items: center; gap: 0.7rem; min-width: 0; }

.es-mb-panel-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  flex: 0 0 auto;
  border-radius: 10px;
  background: rgba(0, 179, 201, 0.14);
}

.es-mb-panel-icon svg { width: 19px; height: 19px; fill: var(--es-teal); }

.es-mb-eyebrow {
  display: block;
  font-family: var(--es-font-display);
  font-size: 0.68rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--es-muted);
}

.es-mb-big {
  display: block;
  font-family: var(--es-font-display);
  font-size: 1.35rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  line-height: 1.15;
}

.es-mb-sub { display: block; font-size: 0.78rem; color: var(--es-muted); }

.es-mb-pill {
  padding: 3px 11px;
  border-radius: 999px;
  font-family: var(--es-font-display);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #7deefb;
  background: rgba(0, 179, 201, 0.14);
  border: 1px solid rgba(53, 217, 236, 0.3);
}

.es-mb-team-mark {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  flex: 0 0 auto;
  border-radius: 11px;
  color: #ffffff;
  font-family: var(--es-font-display);
  font-size: 0.95rem;
  font-weight: 600;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
}

.es-mb-team-rec { text-align: right; }

.es-mb-recnum {
  display: block;
  font-family: var(--es-font-display);
  font-size: 1.6rem;
  font-weight: 600;
  line-height: 1.1;
}

/* --- progress bars ------------------------------------------------------ */

.es-mb-bar {
  display: block;
  height: 6px;
  border-radius: 999px;
  background: rgba(127, 160, 189, 0.22);
  overflow: hidden;
}

.es-mb-bar i {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: linear-gradient(90deg, #35d9ec, var(--es-teal));
  box-shadow: 0 0 8px rgba(53, 217, 236, 0.5);
}

.es-mb-bar-lg { height: 8px; }

.es-mb-caps {
  display: flex;
  justify-content: space-between;
  margin-top: 0.45rem;
  font-size: 0.72rem;
  color: var(--es-muted);
}

/* --- stat tiles --------------------------------------------------------- */

.es-mb-tiles {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 0.75rem;
}

.es-mb-tile { padding: 0.85rem 1rem 0.95rem; }

.es-mb-tile-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  margin-bottom: 0.35rem;
}

.es-mb-tile-label {
  font-family: var(--es-font-display);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--es-muted);
}

.es-mb-tile-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 8px;
  background: rgba(0, 179, 201, 0.14);
}

.es-mb-tile-icon svg { width: 15px; height: 15px; fill: var(--es-teal); }

.es-mb-tile-value {
  display: block;
  font-family: var(--es-font-display);
  font-size: 1.8rem;
  font-weight: 600;
  line-height: 1.05;
}

.es-mb-tile-sub { display: block; margin-top: 0.15rem; font-size: 0.74rem; color: var(--es-muted); }

/* --- form + milestones -------------------------------------------------- */

.es-mb-formrow {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 0.5rem;
}

.es-mb-fpill {
  padding: 0.5rem 0;
  border-radius: 8px;
  text-align: center;
  font-family: var(--es-font-display);
  font-size: 0.86rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  border: 1px solid transparent;
}

.es-mb-fpill.is-w  { color: #6ee7a0; background: rgba(34, 197, 94, 0.14); border-color: rgba(34, 197, 94, 0.35); }
.es-mb-fpill.is-l  { color: #fda4af; background: rgba(239, 68, 68, 0.12); border-color: rgba(239, 68, 68, 0.3); }
.es-mb-fpill.is-ot,
.es-mb-fpill.is-otl { color: #ffd76e; background: rgba(251, 191, 36, 0.12); border-color: rgba(251, 191, 36, 0.35); }

.es-mb-form-tiles {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.5rem;
  margin-top: 0.75rem;
}

.es-mb-form-tile {
  padding: 0.7rem 0.5rem;
  border-radius: 10px;
  text-align: center;
  background: rgba(127, 160, 189, 0.1);
  border: 1px solid var(--es-line-soft);
}

.es-mb-form-tile strong {
  display: block;
  font-family: var(--es-font-display);
  font-size: 1.35rem;
  font-weight: 600;
  line-height: 1.1;
}

.es-mb-form-tile span { font-size: 0.72rem; color: var(--es-muted); }

.es-mb-mile { padding: 0.45rem 0; }

.es-mb-mile + .es-mb-mile { border-top: 1px solid var(--es-line-soft); }

.es-mb-mile-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.6rem;
  margin-bottom: 0.4rem;
}

.es-mb-mile-label { display: inline-flex; align-items: center; gap: 0.5rem; }

.es-mb-mile-emoji { font-style: normal; font-size: 0.95rem; }

.es-mb-mile-label strong { font-size: 0.9rem; font-weight: 600; }

.es-mb-mile-count { font-size: 0.78rem; color: var(--es-muted); font-variant-numeric: tabular-nums; }

.es-mb-mile-note { display: block; margin-top: 0.35rem; font-size: 0.74rem; color: var(--es-teal); }

body.es-page.is-navy .es-mb-mile-note { color: #5ae4f4; }

/* --- record by position ------------------------------------------------- */

.es-mb-posgrid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 0.75rem;
}

.es-mb-posgrid .es-mb-empty { grid-column: 1 / -1; padding: 0.2rem 0; }

.es-mb-posrow {
  padding: 0.75rem 0.85rem;
  border-radius: 10px;
  background: rgba(127, 160, 189, 0.08);
  border: 1px solid var(--es-line-soft);
}

.es-mb-posrow-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  margin-bottom: 0.5rem;
}

.es-mb-posrec { font-family: var(--es-font-display); font-size: 0.95rem; font-weight: 600; }

.es-mb-posrec.is-good { color: #6ee7a0; }
.es-mb-posrec.is-bad  { color: #fda4af; }

.es-mb-posrow-foot {
  display: flex;
  justify-content: space-between;
  margin-top: 0.45rem;
  font-size: 0.72rem;
  color: var(--es-muted);
}

/* --- player ratings ----------------------------------------------------- */

.es-mb-rate { padding: 0.3rem 0 0.45rem; }

.es-mb-rate-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 0.3rem;
  font-size: 0.86rem;
}

.es-mb-rate-head span { color: var(--es-ink-soft); }

.es-mb-rate-head strong { font-family: var(--es-font-display); font-weight: 600; }

.es-mb-rate-meta { margin-top: 0.7rem; border-top: 1px solid var(--es-line-soft); }

.es-mb-rate-metarow {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.55rem 0;
  font-size: 0.85rem;
}

.es-mb-rate-metarow + .es-mb-rate-metarow { border-top: 1px solid var(--es-line-soft); }

.es-mb-rate-metarow > span:first-child { color: var(--es-muted); }

.es-mb-rate-metaval { display: inline-flex; align-items: center; gap: 0.4rem; }

.es-mb-rate-metaval b { font-weight: 500; }

.es-mb-rate-extra {
  font-style: normal;
  font-size: 0.72rem;
  color: var(--es-muted);
  padding: 1px 7px;
  border-radius: 999px;
  border: 1px solid var(--es-line);
}

/* --- game log ----------------------------------------------------------- */

.es-mb-log { list-style: none; margin: 0; padding: 0; }

.es-mb-log li {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.6rem 1rem;
}

.es-mb-log li + li { border-top: 1px solid var(--es-line-soft); }

.es-mb-res {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 24px;
  flex: 0 0 auto;
  border-radius: 6px;
  font-family: var(--es-font-display);
  font-size: 0.72rem;
  font-weight: 600;
}

.es-mb-res.is-w  { color: #6ee7a0; background: rgba(34, 197, 94, 0.14); }
.es-mb-res.is-l  { color: #fda4af; background: rgba(239, 68, 68, 0.12); }
.es-mb-res.is-ot { color: #ffd76e; background: rgba(251, 191, 36, 0.12); }

.es-mb-log-who { flex: 1; min-width: 0; }

.es-mb-log-who strong { display: block; font-size: 0.88rem; font-weight: 600; }

.es-mb-log-who span { font-size: 0.72rem; color: var(--es-muted); }

.es-mb-log-nums { display: flex; gap: 0.85rem; }

.es-mb-log-col { display: flex; flex-direction: column; align-items: center; min-width: 24px; }

.es-mb-log-col i {
  font-style: normal;
  font-size: 0.6rem;
  letter-spacing: 0.08em;
  color: var(--es-muted);
}

.es-mb-log-col b { font-size: 0.85rem; font-weight: 600; font-variant-numeric: tabular-nums; }

.es-mb-log-col b.is-good { color: #6ee7a0; }
.es-mb-log-col b.is-bad  { color: #fda4af; }

.es-mb-log-when { align-items: flex-end; min-width: 42px; }

.es-mb-log-when i { font-size: 0.72rem; color: var(--es-ink-soft); }

.es-mb-log-when b { font-size: 0.68rem; font-weight: 400; color: var(--es-muted); }

/* --- news lists --------------------------------------------------------- */

.es-mb-news { list-style: none; margin: 0; padding: 0; }

.es-mb-news li { padding: 0.8rem 1rem; }

.es-mb-news li + li { border-top: 1px solid var(--es-line-soft); }

.es-mb-tags { display: flex; gap: 0.4rem; flex-wrap: wrap; margin-bottom: 0.3rem; }

.es-mb-tag {
  padding: 2px 9px;
  border-radius: 999px;
  font-family: var(--es-font-display);
  font-size: 0.64rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  border: 1px solid transparent;
}

.es-mb-tag.is-recap      { color: #6ee7a0; background: rgba(34, 197, 94, 0.12); border-color: rgba(34, 197, 94, 0.3); }
.es-mb-tag.is-award      { color: #ffd76e; background: rgba(251, 191, 36, 0.12); border-color: rgba(251, 191, 36, 0.35); }
.es-mb-tag.is-trade      { color: #d8b4fe; background: rgba(168, 85, 247, 0.14); border-color: rgba(168, 85, 247, 0.35); }
.es-mb-tag.is-league     { color: #93c5fd; background: rgba(59, 130, 246, 0.14); border-color: rgba(59, 130, 246, 0.35); }
.es-mb-tag.is-suspension { color: #fda4af; background: rgba(239, 68, 68, 0.12); border-color: rgba(239, 68, 68, 0.35); }
.es-mb-tag.is-featured   { color: #ffd76e; background: transparent; border-color: rgba(251, 191, 36, 0.45); }

.es-mb-news-title {
  display: block;
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--es-ink);
  text-decoration: none;
}

a.es-mb-news-title:hover { color: var(--es-teal); }

.es-mb-news-body p { margin: 0.2rem 0 0; font-size: 0.8rem; color: var(--es-muted); line-height: 1.45; }

.es-mb-news-when { display: block; margin-top: 0.35rem; font-size: 0.7rem; color: var(--es-muted); }

/* --- responsive --------------------------------------------------------- */

@media (max-width: 960px) {
  .es-mb-layout { grid-template-columns: minmax(0, 1fr); }

  .es-mb-side { position: static; min-height: 0; }

  .es-mb-side-nav { flex-direction: row; flex-wrap: wrap; }

  .es-mb-side-nav a, .es-mb-side-soon { padding: 0.45rem 0.8rem; }

  .es-mb-side-soon em { margin-left: 0.4rem; }

  .es-mb-side-user { margin-top: 0.4rem; }
}

@media (max-width: 640px) {
  .es-mb-grid { grid-template-columns: minmax(0, 1fr); }

  .es-mb-alert { flex-wrap: wrap; }

  .es-mb-alert-actions { width: 100%; justify-content: flex-end; }

  .es-mb-log-nums { gap: 0.55rem; }

  .es-mb-log-when { display: none; }
}

/* --- member portal, round 2 ---------------------------------------------
   Combined season+team panel, sidebar user block on top, view switching,
   and the schedule/availability view. Also kills the global
   ".es-card + .es-card { margin-top: 1rem }" inside the portal grids —
   it made every tile after the first sit lower (the "Goals is bigger"
   bug); the portal spaces everything with grid/flex gaps instead. */

.es-mb-layout .es-card + .es-card { margin-top: 0; }

/* Views stack their sections like the main column does; [hidden] must
   still win over the flex display. */
.es-mb-view { display: flex; flex-direction: column; gap: 1rem; }

.es-mb-view[hidden] { display: none; }

/* Sidebar: the member chip now leads the card, with their class under
   the tag. Overrides the earlier bottom-of-card styling. */
.es-mb-side-user {
  margin-top: 0;
  border-top: 0;
  border-bottom: 1px solid var(--es-line-soft);
  padding: 0.2rem 0.4rem 0.9rem;
  margin-bottom: 0.6rem;
}

.es-mb-side-user .es-mb-avatar { width: 40px; height: 40px; font-size: 0.88rem; }

.es-mb-side-user-text { min-width: 0; }

.es-mb-side-user-text strong {
  display: block;
  font-size: 0.95rem;
  font-weight: 600;
  line-height: 1.15;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.es-mb-side-role {
  display: block;
  font-family: var(--es-font-display);
  font-size: 0.66rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--es-teal);
}

body.es-page.is-navy .es-mb-side-role { color: #5ae4f4; }

/* Season + team as one card, split by a hairline. */
.es-mb-combo {
  display: grid;
  grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
  padding: 0;
}

.es-mb-combo-cell { padding: 1rem 1.1rem 1.1rem; min-width: 0; }

.es-mb-combo-team { border-left: 1px solid var(--es-line-soft); }

@media (max-width: 640px) {
  .es-mb-combo { grid-template-columns: minmax(0, 1fr); }
  .es-mb-combo-team { border-left: 0; border-top: 1px solid var(--es-line-soft); }
}

/* --- schedule view ------------------------------------------------------ */

.es-mb-week-pick {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-family: var(--es-font-display);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--es-muted);
}

.es-mb-week-pick select {
  font: inherit;
  font-family: var(--es-font-body);
  font-size: 0.85rem;
  letter-spacing: normal;
  text-transform: none;
  font-weight: 500;
  color: var(--es-ink);
  background: var(--es-table-head);
  border: 1px solid var(--es-line);
  border-radius: 8px;
  padding: 0.4rem 0.6rem;
  max-width: 230px;
}

.es-mb-week-pick select:focus { outline: 2px solid rgba(0, 179, 201, 0.5); outline-offset: 1px; }

.es-mb-sched { list-style: none; margin: 0; padding: 0; }

.es-mb-sched li {
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: 0.7rem 1rem;
}

.es-mb-sched li + li { border-top: 1px solid var(--es-line-soft); }

.es-mb-sched-when {
  display: flex;
  flex-direction: column;
  width: 84px;
  flex: 0 0 auto;
}

.es-mb-sched-when strong {
  font-family: var(--es-font-display);
  font-size: 0.68rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  color: var(--es-teal);
}

body.es-page.is-navy .es-mb-sched-when strong { color: #5ae4f4; }

.es-mb-sched-when span { font-size: 0.8rem; font-weight: 500; }

.es-mb-sched-when b { font-size: 0.72rem; font-weight: 400; color: var(--es-muted); }

.es-mb-sched-match { flex: 1; min-width: 0; }

.es-mb-sched-match strong {
  display: block;
  font-size: 0.92rem;
  font-weight: 600;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.es-mb-sched-match span { font-size: 0.72rem; color: var(--es-muted); }

.es-mb-avail { display: flex; align-items: center; gap: 0.4rem; flex: 0 0 auto; }

.es-mb-avail-btn {
  font: inherit;
  font-family: var(--es-font-display);
  font-size: 0.74rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  padding: 0.4rem 0.85rem;
  border-radius: 999px;
  cursor: pointer;
  color: var(--es-muted);
  background: transparent;
  border: 1px solid var(--es-line);
  transition: color 0.14s ease, background 0.14s ease, border-color 0.14s ease;
}

.es-mb-avail-btn:disabled { opacity: 0.55; cursor: default; }

.es-mb-avail-btn.is-yes:hover { color: #6ee7a0; border-color: rgba(34, 197, 94, 0.45); }
.es-mb-avail-btn.is-no:hover  { color: #fda4af; border-color: rgba(239, 68, 68, 0.4); }

.es-mb-avail-btn.is-yes.is-on {
  color: #04170b;
  background: linear-gradient(135deg, #6ee7a0, #22c55e);
  border-color: rgba(34, 197, 94, 0.6);
  box-shadow: 0 4px 14px rgba(34, 197, 94, 0.35);
}

.es-mb-avail-btn.is-no.is-on {
  color: #ffffff;
  background: linear-gradient(135deg, #f87171, #dc2626);
  border-color: rgba(239, 68, 68, 0.6);
  box-shadow: 0 4px 14px rgba(239, 68, 68, 0.35);
}

.es-mb-avail-note { font-size: 0.72rem; color: var(--es-muted); font-style: italic; }

@media (max-width: 640px) {
  .es-mb-sched li { flex-wrap: wrap; gap: 0.5rem 1rem; }
  .es-mb-sched-when { flex-direction: row; align-items: baseline; gap: 0.45rem; width: auto; }
  .es-mb-sched-match { flex-basis: 100%; order: 3; }
  .es-mb-avail { margin-left: auto; }
}

/* Combined event/club/record line (replaced the two-cell combo panel). */
.es-mb-teamline {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}

.es-mb-teamline .es-mb-team-rec { flex: 0 0 auto; }

/* Player Ratings as a full-width stat ledger: three position-aware
   sections side by side, label-left / value-right rows. The category
   rating meter is intentionally absent for now. */
.es-mb-rate-cols {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0 1.4rem;
}

.es-mb-rate-col { min-width: 0; }

.es-mb-rate-col + .es-mb-rate-col {
  border-left: 1px solid var(--es-line-soft);
  padding-left: 1.4rem;
}

.es-mb-rate-title {
  margin: 0 0 0.2rem;
  padding-bottom: 0.4rem;
  border-bottom: 1px solid var(--es-line);
  font-family: var(--es-font-display);
  font-size: 1.02rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.es-mb-rate-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.6rem;
  padding: 0.42rem 0;
  border-bottom: 1px solid var(--es-line-soft);
  font-size: 0.85rem;
}

.es-mb-rate-row:last-child { border-bottom: 0; }

.es-mb-rate-row i {
  font-style: normal;
  font-family: var(--es-font-display);
  font-weight: 600;
  font-size: 0.74rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--es-muted);
}

.es-mb-rate-row b { font-weight: 600; font-variant-numeric: tabular-nums; }

@media (max-width: 820px) {
  .es-mb-rate-cols { grid-template-columns: minmax(0, 1fr); }
  .es-mb-rate-col + .es-mb-rate-col {
    border-left: 0;
    padding-left: 0;
    border-top: 1px solid var(--es-line-soft);
    padding-top: 1rem;
    margin-top: 1rem;
  }
}

/* Milestones in a full-width card: two columns, spacing instead of the
   stacked separators. */
.es-mb-miles-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.35rem 2.2rem;
}

.es-mb-miles-grid .es-mb-mile + .es-mb-mile { border-top: 0; }

@media (max-width: 640px) {
  .es-mb-miles-grid { grid-template-columns: minmax(0, 1fr); }
}

/* OT results carry no special color: an OT/SO loss reads as a loss and
   an OT win is just a W. */
.es-mb-fpill.is-ot,
.es-mb-fpill.is-otl {
  color: #fda4af;
  background: rgba(239, 68, 68, 0.12);
  border-color: rgba(239, 68, 68, 0.3);
}

.es-mb-res.is-ot,
.es-mb-res.is-otl {
  color: #fda4af;
  background: rgba(239, 68, 68, 0.12);
}

/* ==========================================================================
   STATS PAGE (2026-09-17) - season/career leaderboards on stats.html
   ========================================================================== */

.es-stat-controls {
  display: flex;
  flex-wrap: wrap;
  align-items: end;
  gap: 0.75rem 1.25rem;
  margin: 0 0 1rem;
}

.es-stat-controls .es-field { min-width: 12rem; }
.es-stat-controls .es-field input[type="search"] { min-width: 11rem; }

.es-stat-count {
  margin-left: auto;
  align-self: center;
  font-size: 0.82rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--es-muted);
  white-space: nowrap;
}

/* leaderboard table */
.es-stat-table { white-space: nowrap; }

.es-stat-table th.is-sortable { cursor: pointer; user-select: none; }
.es-stat-table th.is-sortable:hover { color: var(--es-ink); }

.es-stat-table th.is-sorted { color: var(--es-teal); }
.es-stat-table th.is-sorted.is-desc::after { content: " \25BE"; }
.es-stat-table th.is-sorted.is-asc::after { content: " \25B4"; }

.es-stat-table .es-team-cell { gap: 0.5rem; }
.es-stat-player { font-weight: 500; }

/* Player | POS | stats lanes: gap cells break the row lines; hover fills
   only the real cells so the breaks stay visible. */
.es-stat-table thead th:not(.es-th-text),
.es-stat-table td:not(.es-td-text) { text-align: center; }

.es-stat-table .es-stat-gap {
  width: 1px;
  min-width: 1px;
  padding: 0;
  border-bottom: 0;
  background: transparent;
}

.es-stat-table td:not(.es-stat-gap) { border-bottom: 1px solid rgba(255, 255, 255, 0.09); }

/* subtle zebra */
.es-stat-table tbody tr:nth-child(even) td:not(.es-stat-gap):not(.es-stat-pos) {
  background: rgba(255, 255, 255, 0.03);
}

/* hover: cool blue-white wash */
.es-stat-table tbody tr:hover { background: transparent; }
.es-stat-table tbody tr:hover td:not(.es-stat-gap):not(.es-stat-pos) {
  background: rgba(190, 220, 255, 0.14);
}

/* position lane: navy block, hairline white edges, soft inner glow */
.es-stat-table .es-stat-pos {
  background: #0a1a33;
  border-left: 1px solid rgba(255, 255, 255, 0.28);
  border-right: 1px solid rgba(255, 255, 255, 0.28);
  box-shadow: inset 0 0 14px rgba(255, 255, 255, 0.07);
}

.es-stat-table thead th.es-stat-pos {
  background: #0a1a33;
  border-left: 0;
  border-right: 0;
  box-shadow: none;
}

/* position as colored text only inside the stats table */
.es-stat-table .es-pos {
  background: transparent !important;
  padding: 0;
  min-width: 0;
  font-size: 0.9rem;
}
.es-stat-table .es-pos.is-LW { color: var(--es-pos-lw); }
.es-stat-table .es-pos.is-C  { color: var(--es-pos-c); }
.es-stat-table .es-pos.is-RW { color: var(--es-pos-rw); }
.es-stat-table .es-pos.is-LD { color: var(--es-pos-ld); }
.es-stat-table .es-pos.is-RD { color: var(--es-pos-rd); }
.es-stat-table .es-pos.is-G  { color: var(--es-pos-g); }

.es-page:not(.is-navy) .es-stat-table td:not(.es-stat-gap) { border-bottom-color: var(--es-line-soft); }
.es-page:not(.is-navy) .es-stat-table .es-stat-pos,
.es-page:not(.is-navy) .es-stat-table thead th.es-stat-pos {
  background: var(--es-table-head);
  border-left-color: var(--es-line);
  border-right-color: var(--es-line);
  box-shadow: none;
}

/* records tab - top-3 tiles, leader emphasized */
.es-record-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(205px, 1fr));
  gap: 0.7rem;
  padding: 0.4rem 1rem 1rem;
}

.es-record-card {
  border: 1px solid rgba(255, 255, 255, 0.2);
  border-radius: 6px;
  padding: 0 0.75rem 0.55rem;
  background: var(--es-table-head);
  overflow: hidden;
}

/* category header: dark navy metal band, white text, centered */
.es-record-stat {
  display: block;
  margin: 0 -0.75rem 0.45rem;
  padding: 0.45rem 0.75rem;
  background: linear-gradient(180deg, #152744 0%, #091730 38%, #040d1f 62%, #0b1a34 100%);
  border-bottom: 1px solid rgba(255, 255, 255, 0.2);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), inset 0 -1px 0 rgba(0, 0, 0, 0.55);
  text-align: center;
  font-family: var(--es-font-display);
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #f4f8fc;
  text-shadow: 0 0 10px rgba(255, 255, 255, 0.35), 0 0 2px rgba(255, 255, 255, 0.3);
}

.es-record-season {
  flex: none;
  font-size: 0.66rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--es-muted);
  border: 1px solid var(--es-line);
  border-radius: 3px;
  padding: 0.03rem 0.28rem;
}

.es-record-line {
  display: flex;
  align-items: baseline;
  gap: 0.4rem;
  padding: 0.14rem 0;
  font-size: 0.84rem;
  color: var(--es-ink-soft);
}

.es-record-line-name {
  flex: 1 1 auto;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.es-record-line-val { font-variant-numeric: tabular-nums; font-weight: 500; }

/* record holder: same row layout, larger, separated, with a lit metallic mark */
.es-record-line.is-first {
  position: relative;
  margin: 0 0 0.35rem;
  padding: 0.1rem 0 0.45rem;
  font-size: 0.95rem;
  color: var(--es-ink);
}

/* divider under the holder fades out toward both sides */
.es-record-line.is-first::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.22) 50%, transparent);
}

.es-record-line.is-first .es-record-line-name { font-weight: 600; }

.es-record-line.is-first .es-record-line-val {
  font-family: var(--es-font-display);
  font-size: 1.35rem;
  line-height: 1;
  font-weight: 700;
  letter-spacing: 0.02em;
  background: linear-gradient(180deg, #e6fbff 0%, #7fe9f5 45%, var(--es-teal) 60%, #0f8ea3 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: var(--es-teal);
  filter: drop-shadow(0 0 6px rgba(0, 179, 201, 0.45));
}

.es-records-h {
  margin: 0;
  padding: 0.9rem 1rem 0.35rem;
  font-family: var(--es-font-display);
  font-size: 1.05rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--es-ink);
}

@media (max-width: 640px) {
  .es-stat-controls .es-field { min-width: 0; flex: 1 1 10rem; }
  .es-stat-count { margin-left: 0; flex-basis: 100%; }
}
