/* Self-hosted Google Fonts - Manrope + Spline Sans Mono + Noto Sans Devanagari.
   Replaces fonts.googleapis.com / fonts.gstatic.com so pages make ZERO
   external CDN calls. Manrope and Noto Sans Devanagari are variable WOFF2
   files; one file covers every UI weight from 400 through 800. */

/* ── Manrope · primary UI voice ───────────────────────────────────── */
/* latin-ext */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url("/fonts/manrope-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url("/fonts/manrope-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Legacy family alias: older pages and ECharts options still say Archivo.
   Pointing that family at the same Manrope bytes upgrades the full product
   centrally without risky mass edits to chart/data code. */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url("/fonts/manrope-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url("/fonts/manrope-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}


/* ── NoJump (17 Aug 2026): METRIC-MATCHED FALLBACKS ────────────────────
   font-display:swap paints the page in the platform's sans first and re-flows
   when Manrope lands; measured on the leaderboard at 375px the view switch
   wrapped to two rows in the fallback (font-weight:900 reached Segoe UI Black,
   Manrope tops out at 800) and jumped 38px on the swap. Each fallback below is
   a LOCAL system face scaled to Manrope's average advance width (fontTools on
   manrope-latin.woff2 vs the local file: five weight bands, the local regular below 600 and the local
   bold from 600, because a bold face is wider than a faux-bold regular and
   Manrope 800 is wider again than 700) with Manrope's ascent
   1.066 / descent 0.300 / line-gap 0 divided by the same size-adjust, so line
   boxes and wraps come out the same before and after the swap. Three families,
   one per platform: the browser skips a family whose local() does not exist.
   Roboto's widths are estimated at Arial's less 2.5% (no file to measure). */
@font-face { font-family: Manrope-FB; font-style: normal; font-weight: 100 499; src: local("Segoe UI"); size-adjust: 103.55%; ascent-override: 102.95%; descent-override: 28.97%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB; font-style: normal; font-weight: 500 599; src: local("Segoe UI"); size-adjust: 105.35%; ascent-override: 101.18%; descent-override: 28.48%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB; font-style: normal; font-weight: 600 699; src: local("Segoe UI Bold"), local("SegoeUI-Bold"); size-adjust: 100.19%; ascent-override: 106.39%; descent-override: 29.94%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB; font-style: normal; font-weight: 700 799; src: local("Segoe UI Bold"), local("SegoeUI-Bold"); size-adjust: 101.86%; ascent-override: 104.65%; descent-override: 29.45%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB; font-style: normal; font-weight: 800 900; src: local("Segoe UI Bold"), local("SegoeUI-Bold"); size-adjust: 103.55%; ascent-override: 102.95%; descent-override: 28.97%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB-R; font-style: normal; font-weight: 100 499; src: local("Roboto"), local("Roboto-Regular"); size-adjust: 103.35%; ascent-override: 103.14%; descent-override: 29.03%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB-R; font-style: normal; font-weight: 500 599; src: local("Roboto"), local("Roboto-Regular"); size-adjust: 105.15%; ascent-override: 101.37%; descent-override: 28.53%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB-R; font-style: normal; font-weight: 600 699; src: local("Roboto Bold"), local("Roboto-Bold"); size-adjust: 99.32%; ascent-override: 107.33%; descent-override: 30.21%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB-R; font-style: normal; font-weight: 700 799; src: local("Roboto Bold"), local("Roboto-Bold"); size-adjust: 100.97%; ascent-override: 105.57%; descent-override: 29.71%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB-R; font-style: normal; font-weight: 800 900; src: local("Roboto Bold"), local("Roboto-Bold"); size-adjust: 102.65%; ascent-override: 103.85%; descent-override: 29.23%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB-A; font-style: normal; font-weight: 100 499; src: local("Arial"), local("ArialMT"); size-adjust: 100.77%; ascent-override: 105.79%; descent-override: 29.77%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB-A; font-style: normal; font-weight: 500 599; src: local("Arial"), local("ArialMT"); size-adjust: 102.53%; ascent-override: 103.97%; descent-override: 29.26%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB-A; font-style: normal; font-weight: 600 699; src: local("Arial Bold"), local("Arial-BoldMT"); size-adjust: 97.83%; ascent-override: 108.96%; descent-override: 30.67%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB-A; font-style: normal; font-weight: 700 799; src: local("Arial Bold"), local("Arial-BoldMT"); size-adjust: 99.46%; ascent-override: 107.18%; descent-override: 30.16%; line-gap-override: 0%; }
@font-face { font-family: Manrope-FB-A; font-style: normal; font-weight: 800 900; src: local("Arial Bold"), local("Arial-BoldMT"); size-adjust: 101.11%; ascent-override: 105.43%; descent-override: 29.67%; line-gap-override: 0%; }

/* Hindi glyphs are isolated by unicode-range, so this 118 KB face downloads
   only when Hindi is actually selected. */
@font-face {
  font-family: 'Noto Sans Devanagari';
  font-style: normal;
  font-weight: 400 800;
  font-stretch: 100%;
  font-display: swap;
  src: url("/fonts/noto-sans-devanagari.woff2") format("woff2");
  unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}

/* ── Spline Sans Mono ─────────────────────────────────────────────── */
/* latin-ext */
@font-face {
  font-family: 'Spline Sans Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/spline-sans-mono-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Spline Sans Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/spline-sans-mono-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Spline Sans Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("/fonts/spline-sans-mono-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Spline Sans Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("/fonts/spline-sans-mono-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Spline Sans Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/spline-sans-mono-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Spline Sans Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/spline-sans-mono-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ══ DeepCover type system v2 ═════════════════════════════════════════
   Two voices, one rule: Manrope handles names, headings, navigation and
   descriptive copy; Spline Sans Mono handles aligned data and KPIs.

   Faces
     display   Manrope            hero names + page headlines
     text      Manrope            body, UI, section headings, caps labels
     numeric   Spline Sans Mono   aligned stat columns, KPI figures

   Scale (the de facto steps of the product, tokenised)
     hero      clamp(1.9rem, 3.8vw, 2.9rem) / 1.04   display 440, surname 640
     title     1.6rem to 3rem / 1.05                  display 620, track -.012em
     section   1.22rem to 1.3rem / 1.2                text 800, track -.012em
     card      .95rem / 1.3                           text 800
     body      .92rem / 1.5                           text 400..600
     dense     .78rem to .86rem / 1.45                text or numeric
     label     .56rem to .7rem caps                   text 700..800, track .10em to .18em
   ══════════════════════════════════════════════════════════════════ */
:root {
  --font-display: 'Manrope', Manrope-FB,Manrope-FB-R,Manrope-FB-A, 'Segoe UI', system-ui, sans-serif;
  --font-text: 'Manrope', Manrope-FB,Manrope-FB-R,Manrope-FB-A, 'Segoe UI', system-ui, sans-serif;
  --font-numeric: 'Spline Sans Mono', ui-monospace, 'Cascadia Mono', Consolas, monospace;
  --fs-hero: clamp(1.9rem, 3.8vw, 2.9rem); --lh-hero: 1.04;
  --fs-title: clamp(1.5rem, 3.2vw, 2.05rem); --lh-title: 1.08;
  --fs-section: 1.26rem; --lh-section: 1.2;
  --fs-card: .95rem; --fs-body: .92rem; --lh-body: 1.5;
  --fs-dense: .82rem; --fs-label: .66rem;
  --track-display: -.025em; --track-caps: .12em;
  --wt-hero: 650; --wt-hero-em: 800; --wt-title: 720;
}

/* Hindi mode: Manrope continues to render Latin/player names, while the
   self-hosted Noto face supplies every Devanagari glyph consistently. */
html[data-lang='hi'] {
  --font-display: 'Manrope', Manrope-FB,Manrope-FB-R,Manrope-FB-A, 'Noto Sans Devanagari', 'Nirmala UI', sans-serif;
  --font-text: 'Manrope', Manrope-FB,Manrope-FB-R,Manrope-FB-A, 'Noto Sans Devanagari', 'Nirmala UI', sans-serif;
}
html[data-lang='hi'] body {
  font-family: 'Manrope', Manrope-FB,Manrope-FB-R,Manrope-FB-A, 'Noto Sans Devanagari', 'Nirmala UI', 'Kohinoor Devanagari', 'Mangal', sans-serif;
}

/* Explicit shared primitives. The legacy Archivo alias above covers older
   per-page declarations, while new/shared surfaces use the real family name. */
:where(body, button, input, select, textarea) {
  font-family: var(--font-text);
  font-synthesis: none;
}
:where(h1, h2, h3, h4, h5, h6, .pname, .potdName, .dcBandName) {
  font-family: var(--font-display);
  font-synthesis: none;
}

/* Numerals: numeric surfaces use the vendored mono face; the OpenType
   fallback below also keeps lining/tabular figures on mixed-content cells. */
:where(table) { font-variant-numeric: tabular-nums lining-nums; }
.mono { font-variant-numeric: tabular-nums lining-nums; }
:where(.stat .n, .ti .n, table.tbl th:not(:first-child), table.tbl td:not(:first-child)) {
  font-family: var(--font-numeric);
  font-variant-numeric: tabular-nums lining-nums;
}
:where(h1, h2) { text-wrap: balance; }

/* Shared accessible heading/label primitive. Keep semantic structure present
   during data-driven loading states without adding visual clutter. */
.dcSrOnly {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* Chart.js starts canvases at a 300px intrinsic width. On very narrow phones
   that intrinsic size can push an otherwise responsive article off-canvas.
   Keep the chart inside its card; Chart.js still controls the rendered height. */
@media (max-width: 360px) {
  .chartbox {
    min-width: 0;
    max-width: 100%;
  }
  .chartbox > canvas {
    width: 100% !important;
    max-width: 100% !important;
  }
}
