@charset "UTF-8";
/* =========================================================================
   GamingAnalytics — "Cockpit" theme
   Visual skin loaded AFTER style-liberty-dark.css / style-tt.css.
   Only repaints color, surface, radius, shadow and type — no layout,
   position or JS-driven structural rules are touched, so sidebar collapse,
   dropdowns, DataTables and tooltips keep working exactly as before.
   ========================================================================= */

@import url('//fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

:root {
  /* ---- re-tint the template's own bootstrap variables ------------------ */
  --primary: #a78bfa;
  --secondary: #d946ef;
  --success: #2dd4bf;
  --info: #38bdf8;
  --warning: #d97706;
  --danger: #f43f5e;
  --light: #1b1533;
  --dark: #f1effa;
  --light-bg-color: #150f2b;
  --card-shadow: 0 12px 40px rgba(0, 0, 0, .45), 0 2px 10px rgba(76, 29, 149, .18);

  /* ---- cockpit design tokens -------------------------------------------- */
  --ga-bg: #000000;
  --ga-bg-alt: #0c0a18;
  --ga-fg: #f4f2fb;
  --ga-fg-muted: #b7b0d4;
  --ga-fg-faint: #857da8;
  --ga-accent: #a78bfa;
  --ga-accent-2: #d946ef;
  --ga-teal: #2dd4bf;
  --ga-glass: rgba(18, 14, 34, .72);
  --ga-glass-strong: rgba(12, 10, 22, .88);
  --ga-glass-soft: rgba(255, 255, 255, .04);
  --ga-border: rgba(167, 139, 250, .16);
  --ga-border-hi: rgba(196, 181, 253, .34);
  --ga-radius: 18px;
  --ga-radius-sm: 12px;
  --ga-radius-pill: 999px;
  --ga-gradient: linear-gradient(135deg, #a020a0 0%, #800080 100%);
  --ga-shadow: 0 0 0 .5px rgba(255, 255, 255, .05) inset, 0 1px 0 rgba(255, 255, 255, .06) inset, 0 12px 40px rgba(0, 0, 0, .42), 0 2px 10px rgba(76, 29, 149, .16);
  --ga-shadow-lift: 0 0 0 .5px rgba(255, 255, 255, .08) inset, 0 20px 56px rgba(0, 0, 0, .5), 0 8px 24px rgba(124, 58, 237, .22);
}

/* Light theme — toggled by data-theme="light" on <html>, set by the
   appearance switch in the header and persisted in localStorage. Every
   component below is written against the --ga-* / bootstrap variables,
   so redefining them here is enough to reskin the whole site. */
:root[data-theme="light"] {
  --primary: #7c3aed;
  --secondary: #c026d3;
  --success: #0d9488;
  --light-bg-color: #efe9fb;
  --dark: #1c1533;
  --card-shadow: 0 12px 30px rgba(124, 58, 237, .12), 0 2px 8px rgba(124, 58, 237, .08);

  --ga-bg: #f7f5fc;
  --ga-bg-alt: #ffffff;
  --ga-fg: #1c1533;
  --ga-fg-muted: #55507a;
  --ga-fg-faint: #7c7699;
  --ga-glass: rgba(255, 255, 255, .78);
  --ga-glass-strong: rgba(255, 255, 255, .95);
  --ga-glass-soft: rgba(124, 58, 237, .05);
  --ga-border: rgba(124, 58, 237, .16);
  --ga-border-hi: rgba(124, 58, 237, .38);
  --ga-shadow: 0 0 0 .5px rgba(124, 58, 237, .05) inset, 0 1px 0 rgba(255, 255, 255, .6) inset, 0 12px 30px rgba(76, 29, 149, .1);
  --ga-shadow-lift: 0 0 0 .5px rgba(124, 58, 237, .08) inset, 0 20px 44px rgba(76, 29, 149, .16);
}

/* ---------------------------------------------------------------------- *
 * Base
 * ---------------------------------------------------------------------- */

html, body {
  background-color: var(--ga-bg) !important;
  color: var(--ga-fg);
  font-family: "Inter", "Nunito", -apple-system, "Segoe UI", sans-serif;
}

/* style-liberty-dark.css hardcodes .container-fluid to #070a29 - this is
   the actual "gap between cards" color on every page, independent of --ga-bg */
.container-fluid { background-color: transparent !important; }

body {
  background: var(--ga-bg) !important;
  background-attachment: fixed;
}

::selection { background: rgba(167, 139, 250, .35); color: #fff; }

::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: rgba(167, 139, 250, .35); border-radius: 999px; }
::-webkit-scrollbar-thumb:hover { background: rgba(167, 139, 250, .55); }

a { color: var(--ga-accent); }
a:hover, a:focus { color: var(--ga-accent-2); }

h1, h2, h3, h4, h5, h6 { color: var(--ga-fg); font-weight: 800; letter-spacing: -.01em; }

.text16, .text18, .text24, .text30 { color: var(--ga-accent) !important; }

/* ---------------------------------------------------------------------- *
 * Top bar / header
 * ---------------------------------------------------------------------- */

.header, .sticky-header .header {
  background: var(--ga-glass) !important;
  background-image: none !important;
  border-bottom: 1px solid var(--ga-border);
  -webkit-backdrop-filter: blur(18px);
  backdrop-filter: blur(18px);
  box-shadow: 0 8px 30px rgba(0, 0, 0, .35);
}

.menu-right, .user-panel-top { background: transparent !important; }

/* GA brand mark + quick-access chip rail, injected at the left of the header */
.ga-topbar-wrap {
  padding-top: .35rem;
  padding-bottom: .3rem;
  padding-right: 6.5rem;
  border-bottom: 1px solid var(--ga-border);
}

.ga-topbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: .6rem;
  width: 100%;
  padding: .2rem .1rem;
}

.ga-topbar-left, .ga-topbar-right {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .6rem;
}

.ga-topbar-right { gap: .5rem; }

.ga-beta-notice {
  margin: 0;
  color: var(--ga-fg-faint) !important;
  font-size: 12px;
  white-space: nowrap;
}

.ga-topbar-right .user-dropdown-details,
.ga-topbar-right .profile_details,
.ga-topbar-right .profile_details > ul {
  display: flex;
  align-items: center;
  margin: 0;
  padding: 0;
}

.ga-topbar-right .profile_details > ul { list-style: none; }
.ga-topbar-right .profile_img img { width: 32px; height: 32px; }

/* pin the account avatar to the top-right corner of the header, above
   everything else in the utility rail */
.ga-topbar-right .user-dropdown-details {
  position: absolute;
  top: .55rem;
  right: 1rem;
  z-index: 5;
}

.ga-topbar-wrap { position: relative; }

/* the profile dropdown panel — Bootstrap's own .dropdown-menu already sets
   display:block/li stacking; the rule above only targets the *trigger*
   wrapper (.profile_details > ul), never .drp-mnu, so this stays a normal
   vertical list */
.drp-mnu {
  min-width: 220px;
  padding: .5rem 0;
}

.drp-mnu li { display: block; width: 100%; }

.drp-mnu li a {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .5rem 1rem;
  white-space: nowrap;
}

.drp-mnu .user-info {
  padding: .4rem 1rem .6rem;
  border-bottom: 1px solid var(--ga-border);
  margin-bottom: .3rem;
}

.ga-brand {
  display: inline-flex;
  align-items: center;
  gap: .6rem;
  font-weight: 800;
  color: var(--ga-fg) !important;
  text-decoration: none !important;
  white-space: nowrap;
}

.ga-brand:hover { color: var(--ga-fg) !important; }

.ga-brand__logo {
  width: 128px !important;
  height: 35px !important;
  max-width: 128px !important;
  max-height: 35px !important;
  object-fit: contain;
  display: block;
  flex: 0 0 auto;
  /* the SVG's navy/purple/white fills are fixed, not currentColor — the
     logo was drawn for a light backdrop (navy + purple read against
     white), so give it a permanent light chip regardless of site theme */
  background: #f5f3fb;
  border-radius: var(--ga-radius-sm);
  padding: .3rem .55rem;
  transition: transform .25s var(--ga-spring, ease);
}

.ga-brand:hover .ga-brand__logo { transform: scale(1.04); }

.ga-chip-rail {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .4rem;
}

/* live game search, ported from the "new" codebase's search box */
.ga-game-search {
  position: relative;
  width: 220px;
  flex: 0 0 auto;
}

.ga-game-search__icon {
  position: absolute;
  top: 50%;
  left: .9rem;
  transform: translateY(-50%);
  color: var(--ga-fg-faint);
  font-size: 12px;
  pointer-events: none;
  z-index: 1;
}

.ga-game-search input {
  width: 100%;
  background: var(--ga-glass-soft);
  border: 1px solid var(--ga-border);
  border-radius: var(--ga-radius-pill);
  color: var(--ga-fg);
  font-size: 12.5px;
  padding: .42rem .9rem .42rem 2.4rem;
  outline: none;
  transition: border-color .15s ease, background .15s ease;
}

.ga-game-search input::placeholder { color: var(--ga-fg-faint); }
.ga-game-search input:focus { border-color: var(--ga-border-hi); background: rgba(167, 139, 250, .1); }

.ga-game-search .ga-search-results {
  width: min(720px, 92vw);
  max-height: 75vh;
  padding: .6rem;
}

.ga-game-search .ga-search-result { padding: .55rem .7rem; }
.ga-game-search .ga-search-result__img { width: 64px; height: 36px; border-radius: 8px; }
.ga-game-search .ga-search-result__name { font-size: 13.5px; }

.ga-search-results div.ga-search-result {
  display: flex !important;
  flex-direction: row !important;
  align-items: center !important;
  gap: .6rem;
  padding: .4rem .5rem;
  border-radius: var(--ga-radius-sm);
  color: var(--ga-fg-muted) !important;
  -webkit-tap-highlight-color: transparent;
}

.ga-search-results div.ga-search-result:hover {
  background: rgba(167, 139, 250, .16) !important;
}

.ga-search-result__name {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: inherit !important;
  text-decoration: none !important;
}

.ga-search-result__name:hover { color: #fff !important; }

.ga-search-result__icon {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: var(--ga-radius-sm);
  color: var(--ga-fg-muted) !important;
  text-decoration: none !important;
}

.ga-search-result__icon:hover {
  background: rgba(167, 139, 250, .25) !important;
  color: #fff !important;
}

.ga-search-result__img {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 64px;
  height: 36px;
  flex: 0 0 auto;
  border-radius: 6px;
  overflow: hidden;
  background: var(--ga-glass-soft);
  color: var(--ga-fg-faint);
  font-size: 14px;
}

.ga-search-result__img img {
  width: 100%;
  height: 100%;
  /* Steam capsule art is a wide rectangle - contain (not cover) so the
     whole image shows instead of being cropped/zoomed into a square */
  object-fit: contain;
  display: block;
}

.ga-search-result__name {
  font-size: 12.5px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (max-width: 900px) {
  .ga-game-search { width: 160px; }
}

.ga-chip {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  padding: .38rem .8rem;
  border-radius: var(--ga-radius-pill);
  background: var(--ga-glass-soft);
  border: 1px solid var(--ga-border);
  color: var(--ga-fg-muted) !important;
  font-size: 12.5px;
  font-weight: 700;
  text-decoration: none !important;
  transition: all .18s ease;
}

.ga-chip {
  -webkit-tap-highlight-color: transparent;
}

.ga-chip:hover,
.ga-chip:focus,
.ga-chip:active,
.ga-chip:visited {
  color: #fff !important;
  border-color: var(--ga-border-hi);
  background: rgba(167, 139, 250, .16);
  transform: translateY(-1px);
  outline: none;
}

.ga-chip .live-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ga-teal);
  box-shadow: 0 0 0 3px rgba(45, 212, 191, .18);
}

.ga-utility-rail {
  display: flex;
  align-items: center;
  gap: .4rem;
}

.ga-theme-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  padding: 0;
  border-radius: 50%;
  background: var(--ga-glass-soft);
  border: 1px solid var(--ga-border);
  color: var(--ga-fg-muted);
  font-size: 14px;
  cursor: pointer;
  transition: all .18s ease;
}

.ga-theme-toggle:hover {
  color: #fff;
  border-color: var(--ga-border-hi);
  background: rgba(167, 139, 250, .16);
}

.ga-lang-switch .dropdown-menu {
  min-width: 150px;
}

.ga-lang-switch .dropdown-menu a.active {
  color: #fff !important;
  background: rgba(167, 139, 250, .16);
}

.ga-banner-btn .btn,
.menu-right .btn-primary,
.menu-right .btn-danger {
  border-radius: var(--ga-radius-pill) !important;
  border: 1px solid var(--ga-border-hi) !important;
  background: var(--ga-gradient) !important;
  padding: .4rem 1rem !important;
  font-size: 12.5px !important;
  font-weight: 700 !important;
  box-shadow: 0 6px 18px rgba(124, 58, 237, .3) !important;
}

.menu-right .btn a { color: #fff !important; text-decoration: none !important; }

.menu-right .text14 { color: var(--ga-fg-faint) !important; font-size: 12px; }

/* user dropdown */
.profile_img img { border: 2px solid var(--ga-border-hi); }
.user-active { background: var(--ga-teal) !important; }
.user-anon { background: var(--ga-fg-faint) !important; }

.dropdown-menu, .drp-mnu {
  background: var(--ga-glass-strong) !important;
  border: 1px solid var(--ga-border) !important;
  border-radius: var(--ga-radius-sm) !important;
  box-shadow: var(--ga-shadow-lift) !important;
  -webkit-backdrop-filter: blur(20px);
  backdrop-filter: blur(20px);
}

.dropdown-menu .user-info .user-name { color: var(--ga-fg) !important; }
.dropdown-menu li a, .drp-mnu li a { color: var(--ga-fg-muted) !important; }
.dropdown-menu li a:hover, .drp-mnu li a:hover {
  background: rgba(167, 139, 250, .14) !important;
  color: #fff !important;
}

/* Bootstrap tooltips (data-toggle="tooltip") - style-liberty-dark.css leaves
   these hardcoded to a white background regardless of theme */
.tooltip-inner {
  background-color: var(--ga-glass-strong) !important;
  color: var(--ga-fg) !important;
  border: 1px solid var(--ga-border-hi) !important;
  box-shadow: var(--ga-shadow-lift);
  -webkit-backdrop-filter: blur(20px);
  backdrop-filter: blur(20px);
}
.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { border-top-color: var(--ga-border-hi); }
.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { border-right-color: var(--ga-border-hi); }
.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { border-bottom-color: var(--ga-border-hi); }
.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { border-left-color: var(--ga-border-hi); }

/* per-row "..." actions menu (gb_last_template.php's image column) */
.ga-row-actions-wrap { position: relative; }

.ga-row-actions {
  position: absolute;
  top: -4px;
  right: -4px;
  opacity: 0;
  transition: opacity .15s ease;
}

tr:hover .ga-row-actions, .ga-row-actions:focus-within { opacity: 1; }

.ga-row-actions__toggle {
  background: var(--ga-glass-strong) !important;
  border: 1px solid var(--ga-border) !important;
  color: var(--ga-fg) !important;
  border-radius: 50% !important;
  width: 22px;
  height: 22px;
  line-height: 1;
  padding: 0 !important;
  font-weight: 800;
}

.ga-row-actions .dropdown-menu {
  left: 40px !important;
  border: 1px solid #fff !important;
}

.ga-row-actions .dropdown-item {
  color: var(--ga-fg-muted) !important;
  font-size: 12.5px;
  padding: .4rem .8rem;
  white-space: nowrap;
}

.ga-row-actions .dropdown-item:hover {
  background: rgba(167, 139, 250, .14) !important;
  color: #fff !important;
}

/* ---------------------------------------------------------------------- *
 * Layout — the old fixed left sidebar is gone; elem-sidebar-menu.php now
 * renders a horizontal mega-menu bar (.ga-hmenu) stacked on top of the
 * header bar. Both are fixed; the template's own left-offset rules
 * (written for the 250px/60px sidebar) are neutralised here.
 * ---------------------------------------------------------------------- */

.main-content {
  margin-left: 0 !important;
}

.header.sticky-header {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  width: 100% !important;
  height: auto !important;
  z-index: 1035;
}

.content-top-gap {
  margin-top: 0 !important;
  padding-top: calc(var(--ga-stack-height, 148px) - 20px) !important;
  padding-left: .5rem !important;
}

/* ---------------------------------------------------------------------- *
 * Horizontal mega-menu (replaces the old vertical sidebar)
 * ---------------------------------------------------------------------- */

.ga-hmenu {
  position: fixed;
  top: var(--ga-header-height, 60px);
  left: 0;
  right: 0;
  z-index: 1030;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .5rem .75rem;
  min-height: 42px;
  padding: .2rem 1rem;
  background: var(--ga-glass-strong);
  border-bottom: 1px solid var(--ga-border);
  -webkit-backdrop-filter: blur(20px);
  backdrop-filter: blur(20px);
  /* deliberately NOT overflow:auto/hidden here — .ga-mega dropdown panels
     are positioned relative to this element and need to hang below it;
     any overflow other than visible on this box would clip them */
}

.ga-menu-search {
  position: relative;
  flex: 0 0 auto;
  width: 200px;
  margin: 0;
}

.ga-menu-search input {
  width: 100%;
  background: var(--ga-glass-soft);
  border: 1px solid var(--ga-border);
  border-radius: var(--ga-radius-pill);
  color: var(--ga-fg);
  font-size: 12.5px;
  padding: .4rem .9rem;
  outline: none;
  transition: border-color .15s ease, background .15s ease;
}

.ga-menu-search input::placeholder { color: var(--ga-fg-faint); }
.ga-menu-search input:focus { border-color: var(--ga-border-hi); background: rgba(167, 139, 250, .1); }

.ga-search-results {
  display: none;
  position: absolute;
  top: calc(100% + 8px);
  left: 0;
  width: 340px;
  max-height: 60vh;
  overflow-y: auto;
  background: var(--ga-glass-strong);
  border: 1px solid var(--ga-border);
  border-radius: var(--ga-radius-sm);
  box-shadow: var(--ga-shadow-lift);
  padding: .4rem;
  z-index: 1040;
  white-space: normal;
}

.ga-search-results a {
  display: flex;
  align-items: baseline;
  gap: .4rem;
  padding: .4rem .6rem;
  border-radius: var(--ga-radius-sm);
  color: var(--ga-fg-muted) !important;
  font-size: 12.5px;
  text-decoration: none !important;
}

.ga-search-results a .fa { font-size: 10px; color: var(--ga-fg-faint); flex: 0 0 auto; margin-top: .25em; }
.ga-search-results a:hover { background: rgba(167, 139, 250, .16); color: #fff !important; }
.ga-search-results a:hover .fa { color: #fff; }
.ga-search-empty { padding: .5rem .6rem; color: var(--ga-fg-faint); font-size: 12.5px; }

.ga-search-result-heading {
  padding: .5rem .6rem .2rem;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .03em;
  color: var(--ga-accent);
}
.ga-search-result-heading:not(:first-child) { margin-top: .3rem; border-top: 1px solid var(--ga-border); padding-top: .5rem; }

.ga-hmenu-list {
  display: flex;
  align-items: center;
  gap: .3rem;
  list-style: none;
  margin: 0;
  padding: 0;
}

.ga-hmenu-item { position: static; }

.ga-hmenu-link {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  padding: .45rem .85rem;
  border-radius: var(--ga-radius-pill);
  color: var(--ga-fg-muted) !important;
  font-size: 13px;
  font-weight: 700;
  text-decoration: none !important;
  background: transparent;
  white-space: nowrap;
  border: 1px solid transparent;
  cursor: pointer;
}

.ga-hmenu-link .fa { font-size: 12px; color: var(--ga-accent); opacity: .9; }

.ga-hmenu-link:hover, .ga-hmenu-item.show .ga-hmenu-link {
  color: #fff !important;
  background: rgba(167, 139, 250, .16);
  border-color: var(--ga-border-hi);
}

.ga-menu-backdrop {
  position: fixed;
  inset: 0;
  z-index: 1025;
  background: rgba(5, 3, 12, .6);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  opacity: 0;
  pointer-events: none;
  transition: opacity .2s ease;
}

.ga-menu-backdrop.active {
  opacity: 1;
  pointer-events: auto;
}

.ga-mega {
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  margin: 0;
  padding: 1.1rem 1.4rem;
  border: none;
  border-top: 1px solid var(--ga-border);
  border-radius: 0 0 var(--ga-radius) var(--ga-radius);
  background: var(--ga-glass-strong) !important;
  box-shadow: var(--ga-shadow-lift) !important;
  -webkit-backdrop-filter: blur(24px);
  backdrop-filter: blur(24px);
  column-count: 4;
  column-gap: 1.75rem;
  max-height: calc(100vh - 70px);
  overflow-y: auto;
}

@media (max-width: 1100px) { .ga-mega { column-count: 3; } }
@media (max-width: 820px) { .ga-mega { column-count: 2; } }
@media (max-width: 560px) { .ga-mega { column-count: 1; left: 0; right: 0; } }

.ga-mega-group {
  break-inside: avoid;
  margin: 0 0 1.1rem;
}

.ga-mega-heading {
  display: flex;
  align-items: center;
  gap: .45rem;
  font-size: 12px;
  font-weight: 800;
  letter-spacing: .02em;
  color: var(--ga-fg);
  margin-bottom: .35rem;
  padding-bottom: .35rem;
  border-bottom: 1px solid var(--ga-border);
}

.ga-mega-heading .fa { color: var(--ga-accent); }

.ga-mega-subhead {
  display: block;
  margin: .5rem 0 .15rem;
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--ga-fg-faint);
}

.ga-mega-link {
  display: flex;
  align-items: baseline;
  gap: .4rem;
  padding: .3rem .4rem;
  border-radius: var(--ga-radius-sm);
  color: var(--ga-fg-muted) !important;
  font-size: 12.5px;
  line-height: 1.35;
  text-decoration: none !important;
  white-space: normal;
}

.ga-mega-link .fa { font-size: 10px; color: var(--ga-fg-faint); flex: 0 0 auto; margin-top: .25em; }

.ga-mega-link:hover {
  background: rgba(167, 139, 250, .16);
  color: #fff !important;
}

.ga-mega-link:hover .fa { color: #fff; }

@media (max-width: 768px) {
  .ga-menu-search { width: 140px; }
}

/* on narrow screens the hmenu-list's items don't fit on one row and, since
   flex items default to min-width:auto, .ga-hmenu-list refuses to shrink
   below its own content width - forcing the whole page to scroll
   horizontally instead of just the menu row. Let the list scroll internally. */
@media (max-width: 700px) {
  .ga-menu-search { display: none; }
  .ga-hmenu-list {
    flex-wrap: nowrap;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    max-width: 100%;
    min-width: 0;
  }
  .ga-hmenu { min-width: 0; }
}

/* ---------------------------------------------------------------------- *
 * bootstrap-select "filters" widgets (combobox/search panels used across
 * the report pages). Their own bootstrap-select.css is linked inline,
 * late in the page, so every rule here needs !important to win regardless
 * of load order.
 * ---------------------------------------------------------------------- */

.bootstrap-select .dropdown-toggle,
.bootstrap-select > .btn,
.bootstrap-select .btn-light,
.bootstrap-select .btn-default {
  background: var(--ga-glass-soft) !important;
  border: 1px solid var(--ga-border) !important;
  color: var(--ga-fg) !important;
  border-radius: var(--ga-radius-sm) !important;
  box-shadow: none !important;
  padding: .6rem 1rem !important;
}

.bootstrap-select .dropdown-toggle:hover,
.bootstrap-select .dropdown-toggle:focus,
.bootstrap-select.open .dropdown-toggle {
  border-color: var(--ga-border-hi) !important;
  background: rgba(167, 139, 250, .14) !important;
  color: #fff !important;
}

/* bootstrap's stock .btn-light:focus box-shadow is a light gray/white glow -
   renders as a stark white ring against this dark theme; and on keyboard
   focus specifically (:focus-visible, not plain :focus/click) Chrome/Firefox
   also draw their own native focus ring on top regardless of box-shadow,
   which is the actual white ring reported here. Replace both with the same
   violet glow used on .form-control:focus. */
.bootstrap-select .dropdown-toggle:focus,
.bootstrap-select .dropdown-toggle.focus,
.bootstrap-select .dropdown-toggle:focus-visible {
  outline: none !important;
  box-shadow: 0 0 0 3px rgba(167, 139, 250, .16) !important;
}

.bootstrap-select .dropdown-toggle .filter-option,
.bootstrap-select .dropdown-toggle .filter-option-inner-inner,
.bootstrap-select .dropdown-toggle .caret {
  color: inherit !important;
}

.bootstrap-select .dropdown-menu,
.bootstrap-select .dropdown-menu.inner {
  background: var(--ga-glass-strong) !important;
  border: 1px solid var(--ga-border) !important;
  border-radius: var(--ga-radius-sm) !important;
  box-shadow: var(--ga-shadow-lift) !important;
}

.bootstrap-select .dropdown-menu li a,
.bootstrap-select .dropdown-menu .dropdown-item,
.bootstrap-select .no-results {
  color: var(--ga-fg-muted) !important;
  background: transparent !important;
}

.bootstrap-select .dropdown-menu li a:hover,
.bootstrap-select .dropdown-menu li.selected a,
.bootstrap-select .dropdown-menu li.active a {
  background: rgba(167, 139, 250, .22) !important;
  color: #fff !important;
}

.bootstrap-select .bs-searchbox {
  padding: 4px 2px !important;
}

.bootstrap-select .bs-searchbox .form-control,
.bootstrap-select .bs-searchbox input {
  background: var(--ga-glass-soft) !important;
  color: var(--ga-fg) !important;
  border: 1px solid var(--ga-border) !important;
  width: 100% !important;
  box-sizing: border-box;
}

.bs-searchbox, .bs-actionsbox, .bs-donebutton, .bs-caret {
  background: transparent !important;
}

/* mirrored scrollbar above wide tables, synced with .table-responsive's own
   bottom scrollbar via assets/js/scripts.js - see ga_add_top_scrollbars() */
.ga-table-top-scroll {
  overflow-x: auto;
  overflow-y: hidden;
  height: 14px;
  margin-bottom: 2px;
}
.ga-table-top-scroll > div {
  height: 1px;
}

.bootstrap-select .glyphicon, .bootstrap-select .bs-caret .caret {
  color: var(--ga-fg-muted) !important;
}

/* bootstrap-select copies the original <select class="... form-control">'s
   form-control class onto its own generated wrapper div, so the generic
   .form-control rule below (border/background/padding) was landing on BOTH
   that wrapper AND the inner .dropdown-toggle button it wraps - a border
   drawn around a border, one step in from the wrapper's own. Strip the
   wrapper's own styling; the toggle button already renders the widget. */
.bootstrap-select.form-control {
  background: transparent !important;
  border: none !important;
  padding: 0 !important;
}

/* filter-panel labels + reset buttons sit inside plain <p>/<div>, force contrast */
#filters label { color: var(--ga-fg-muted) !important; font-size: 12px; }
/* group titles ("Select genre", etc.) match the Stock exchange / Country headings */
#filters p { color: var(--ga-fg) !important; font-weight: bold !important; font-size: .82rem !important; margin-bottom: .3rem !important; }
#filters .form-control { background: var(--ga-glass-soft) !important; color: var(--ga-fg) !important; }

/* compact mode: smaller type + tighter padding throughout the filter panel */
#filters .bootstrap-select .dropdown-toggle {
  padding: .4rem .7rem !important;
  font-size: 12.5px !important;
}
#filters .btn { padding: .35rem .7rem; font-size: 12px; }
#filters .dropdown-menu li a, #filters .dropdown-menu .dropdown-item { font-size: 12.5px; }
#filters input[type="date"] { font-size: 12px; padding: .35rem .6rem !important; }

/* Each filter card has an inline style="padding:0!important" - inline
   !important beats any external !important regardless of specificity, so
   padding can't be added to the card itself. Pad the children instead:
   the label wrapper (first child div) and the select+reset row (.row). */
#filters .card.card_border > div:first-child {
  padding: .45rem .65rem 0 !important;
}

#filters .card.card_border > .row,
#filters .card.card_border > div > .row {
  padding: 0 .65rem .45rem !important;
  margin: 0 !important;
}

/* the two radio-button filters (Stock exchange, Country) use a plain flex
   div instead of class_gui.php's .row, but need the exact same padding so
   their card frame lines up with every other filter card. */
#filters .card.card_border > .ga-filter-radio-group {
  padding: 0 .65rem .45rem !important;
}

/* class_gui.php hardcodes margin-left:13px inline on both the select column
   and the Reset column - that extra, uncompensated margin on top of the
   row's own padding breaks the grid's width math and makes the toggle
   button/border look shifted/misaligned inside the card. */
#filters .card.card_border > .row > [class*="col-"],
#filters .card.card_border > div > .row > [class*="col-"] {
  margin-left: 0 !important;
}

/* without a gap, adjacent filter cards' rounded borders touch directly and
   read as one broken/merged frame instead of separate cards. Width/box-sizing
   forced explicitly too - the bootstrap-select widget inside resizes its own
   wrapper on init/refresh, which was making each card a slightly different
   width instead of all sharing #filters' full width. */
#filters > .card.card_border {
  display: block;
  width: 100% !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
  margin: 0 0 .4rem !important;
}

#filters .bootstrap-select {
  width: 100% !important;
}

/* "filters" toggle: jQuery UI's slide effect isn't loaded on this site, so
   $("#filters").toggle("slide") only ever did an instant show/hide. Replaced
   site-wide with .toggleClass("ga-filters-hidden") for a real sideways
   slide + collapse; #tablemain transitions too so the table smoothly
   reclaims the freed grid space instead of snapping to width. */
/* #filters and its sibling table column are both Bootstrap cols with inline
   padding-left/right:0 (this site zeroes every grid gutter deliberately)
   sitting inside a plain .row, which still carries Bootstrap's default
   margin:0 -15px. With no gutter padding on either column to absorb it, the
   row renders 30px wider than its container (15px bleeding past each edge) -
   cancelling the margin on #filters alone just shifted that overflow onto
   the table column instead of removing it, so it stopped fitting alongside
   the filters. Neutralize it on the row itself so both columns share the
   container's actual width again. */
.row:has(> #filters) {
  margin-left: 0 !important;
  margin-right: 0 !important;
}

#filters {
  transition: transform .32s ease, opacity .28s ease, max-width .32s ease, flex-basis .32s ease, padding .32s ease;
}

#filters.ga-filters-hidden {
  transform: translateX(-24px);
  opacity: 0;
  max-width: 0 !important;
  flex: 0 0 0 !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  margin: 0 !important;
  overflow: hidden;
  pointer-events: none;
}

#tablemain {
  transition: max-width .32s ease, flex-basis .32s ease;
}

/* DataTables Buttons extension (column visibility, export) — used on ~30
   report pages via its own buttons.dataTables.min.css, hardcoded per-page
   inline <style> blocks for the active/inactive states. Neutralise both. */
.dt-buttons .btn,
.dt-button,
.buttons-columnVisibility,
.buttons-html5,
.buttons-collection,
.buttons-colvis {
  background: var(--ga-glass-soft) !important;
  border: 1px solid var(--ga-border) !important;
  color: var(--ga-fg) !important;
  border-radius: var(--ga-radius-sm) !important;
  box-shadow: none !important;
}

.dt-buttons .btn:hover,
.dt-button:hover,
.buttons-columnVisibility:hover {
  border-color: var(--ga-border-hi) !important;
  background: rgba(167, 139, 250, .14) !important;
  color: #fff !important;
}

.dt-buttons .btn.active,
.dt-button.active,
.buttons-columnVisibility.active {
  background: var(--ga-gradient) !important;
  border-color: transparent !important;
  color: #fff !important;
}

div.dt-button-collection .dropdown-item,
div.dt-button-collection a.dt-button {
  color: var(--ga-fg-muted) !important;
  background: transparent !important;
}

div.dt-button-collection .dropdown-item:hover,
div.dt-button-collection a.dt-button:hover {
  background: rgba(167, 139, 250, .18) !important;
  color: #fff !important;
}

/* ---------------------------------------------------------------------- *
 * Main content / cards
 * ---------------------------------------------------------------------- */

.main-content { background: transparent !important; }

.card, .card_border, .card_H {
  background: var(--ga-glass) !important;
  border: 1px solid var(--ga-border) !important;
  border-radius: var(--ga-radius) !important;
  box-shadow: var(--ga-shadow) !important;
  color: var(--ga-fg);
  -webkit-backdrop-filter: blur(14px);
  backdrop-filter: blur(14px);
}

.card-header, .card-footer {
  background: transparent !important;
  border-color: var(--ga-border) !important;
  padding: 1rem 1.3rem !important;
}

/* style-tt.css squeezes the bootstrap .p-4/.p-2 utilities down to ~0.3rem
   site-wide for density. Fine elsewhere, but many templates nest
   <div class="card card_border p-4"> directly (no .card-body wrapper) for
   the title/description block, so the squeeze applies straight to the
   card and text sits flush against the border. */
.card.p-4, .card_border.p-4, .card.p-2, .card_border.p-2 {
  padding: .65rem 1rem !important;
}

/* page title card (h3 + description + "Updated:" line) - keep it compact */
.chart-grid__header h3 { margin: 0 0 .2rem !important; font-size: 1.25rem !important; }
.chart-grid__header p { margin: 0 0 .15rem !important; line-height: 1.35; }

/* style-tt.css squeezes .p-4/.p-2 down to ~0.3rem site-wide for density —
   reasonable for the old compact table chrome, but it makes the new glass
   cards feel cramped. Give card content some breathing room back. */
.card-body {
  padding: 1.1rem 1.3rem !important;
}

#filters .card.card_border,
#filters .card-body {
  padding: .85rem 1rem !important;
}

/* "filters" show/hide toggle button - same brand gradient as every other button */
.btn.btn-red {
  background: var(--ga-gradient) !important;
  border: 1px solid var(--ga-border-hi) !important;
  color: #fff !important;
}

.btn.btn-red:hover { filter: brightness(1.1); }

.chart-grid__header, .chart-grid__footer { color: var(--ga-fg-muted); }

/* ---------------------------------------------------------------------- *
 * Buttons
 * ---------------------------------------------------------------------- */

.btn { border-radius: var(--ga-radius-sm); font-weight: 700; }

.btn-primary {
  background: var(--ga-gradient) !important;
  border: 1px solid var(--ga-border-hi) !important;
  box-shadow: 0 8px 22px rgba(124, 58, 237, .32);
}

.btn-primary:hover, .btn-primary:focus { filter: brightness(1.08); }

.btn-danger {
  background: linear-gradient(135deg, #f43f5e, #d946ef) !important;
  border: none !important;
}

.btn-outline-primary, .btn-outline-secondary {
  color: var(--ga-accent) !important;
  border-color: var(--ga-border-hi) !important;
  background: transparent !important;
}

/* ---------------------------------------------------------------------- *
 * Forms
 * ---------------------------------------------------------------------- */

.form-control, select, input[type="text"], input[type="email"], input[type="password"], textarea {
  background: var(--ga-glass-soft) !important;
  border: 1px solid var(--ga-border) !important;
  color: var(--ga-fg) !important;
  border-radius: var(--ga-radius-sm) !important;
  padding: .55rem .9rem !important;
}

.form-control:focus { border-color: var(--ga-border-hi) !important; box-shadow: 0 0 0 3px rgba(167, 139, 250, .16) !important; }

.login-dark form {
  background-color: var(--ga-glass-strong) !important;
  border: 1px solid var(--ga-border);
  border-radius: var(--ga-radius);
  box-shadow: var(--ga-shadow-lift);
}

.login-dark form .btn-primary { background: var(--ga-gradient) !important; }

.login-dark form .forgot {
  color: var(--ga-accent) !important;
  opacity: 1 !important;
  margin-top: .6rem;
  display: block;
}

.login-dark form .forgot:hover { color: var(--ga-accent-2) !important; text-decoration: underline; }

/* ---------------------------------------------------------------------- *
 * Tables / DataTables
 * ---------------------------------------------------------------------- */

.table, table.dataTable {
  color: var(--ga-fg) !important;
  background: transparent !important;
}

/* numeric columns (marked .dt-right site-wide via DataTables columnDefs) -
   Inter's default digits are proportionally spaced, so values in the same
   column don't line up vertically. Switch just the digits to tabular
   (fixed-width) figures - same font, numbers just stop jittering left/right
   row to row. */
table.dataTable td.dt-right, table.dataTable th.dt-right {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum" 1;
}

/* game/company thumbnails in ranking tables: pop up big on hover.
   table.dataTable rows live inside a .table-responsive wrapper, which needs
   overflow-x:auto to scroll — but that silently forces overflow-y:auto too,
   so an in-place CSS transform:scale() gets clipped top/bottom by the row.
   A JS-driven preview appended straight to <body> escapes that clipping
   entirely (see .ga-img-preview + the hover script in elem-sidebar-menu.php). */
table.dataTable td img,
.table td img {
  cursor: zoom-in;
  border-radius: 4px;
}

.ga-img-preview {
  position: fixed;
  z-index: 1080;
  pointer-events: none;
  display: none;
  max-width: 260px;
  max-height: 260px;
  border-radius: var(--ga-radius-sm);
  box-shadow: 0 16px 40px rgba(0, 0, 0, .55), 0 0 0 2px var(--ga-border-hi);
}

.table thead th, table.dataTable thead th, table.dataTable thead td {
  color: var(--ga-fg-faint) !important;
  border-color: var(--ga-border) !important;
  font-size: 11px;
  letter-spacing: .04em;
  text-transform: uppercase;
}

.table td, .table th, table.dataTable tbody th, table.dataTable tbody td {
  border-color: var(--ga-border) !important;
}

/* Row data (game names, company names, etc.) for most ranking tables is
   rendered server-side with its own inline color="" meant for the old
   light/white-ish cell backgrounds — that reads as near-invisible on the
   new dark surface. !important beats a plain (non-important) inline style
   regardless of where it came from, so force these back to readable. */
.table td a, .table th a,
table.dataTable tbody td a, table.dataTable tbody th a {
  color: var(--ga-accent) !important;
}

.table td a:hover, .table th a:hover,
table.dataTable tbody td a:hover, table.dataTable tbody th a:hover {
  color: var(--ga-accent-2) !important;
}

table.dataTable tbody tr { background: transparent !important; }

table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
  background-color: rgba(167, 139, 250, .05) !important;
}

/* the .odd stripe rule above and this hover rule have equal specificity;
   without pairing tr.odd:hover explicitly, whichever rule loads later wins
   ties on ALL rows including odd ones - which made hover only visibly work
   on even rows (no competing .odd background to tie against). */
table.dataTable.display tbody tr:hover,
table.dataTable.display tbody tr.odd:hover,
table.dataTable.hover tbody tr:hover,
table#games_list.dataTable tbody tr:hover {
  background-color: rgba(167, 139, 250, .16) !important;
}

/* style-liberty-dark.css paints the actively-sorted column with a flat,
   fairly light #595959 - fine on that theme's own dark gray backdrop, but a
   harsh, aggressive-looking box against this cockpit theme's near-black
   surface. Tone it down to the same subtle violet tint used for hover/odd
   rows instead. */
table.dataTable.order-column tbody tr > .sorting_1,
table.dataTable.order-column tbody tr > .sorting_2,
table.dataTable.order-column tbody tr > .sorting_3,
table.dataTable.display tbody tr > .sorting_1,
table.dataTable.display tbody tr > .sorting_2,
table.dataTable.display tbody tr > .sorting_3,
table.dataTable.display tbody tr.odd > .sorting_1,
table.dataTable.display tbody tr.odd > .sorting_2,
table.dataTable.display tbody tr.odd > .sorting_3 {
  background-color: rgba(167, 139, 250, .07) !important;
}

.dataTables_wrapper .dataTables_filter input,
.dataTables_wrapper .dataTables_length select {
  background: var(--ga-glass-soft);
  border: 1px solid var(--ga-border);
  color: var(--ga-fg);
  border-radius: var(--ga-radius-sm);
}

.dataTables_wrapper .dataTables_filter input {
  width: 180px;
  max-width: 100%;
}

.dataTables_wrapper .dataTables_info,
.dataTables_wrapper .dataTables_paginate { color: var(--ga-fg-muted) !important; }

.dataTables_wrapper .dataTables_paginate .paginate_button {
  color: var(--ga-fg-muted) !important;
  border-radius: var(--ga-radius-sm) !important;
}

.dataTables_wrapper .dataTables_paginate .paginate_button.current {
  background: var(--ga-gradient) !important;
  border-color: transparent !important;
  color: #fff !important;
}

div.dt-button-collection {
  background: var(--ga-glass-strong) !important;
  border: 1px solid var(--ga-border) !important;
  border-radius: var(--ga-radius-sm) !important;
}

/* ---------------------------------------------------------------------- *
 * Badges / breadcrumb / pagination / misc
 * ---------------------------------------------------------------------- */

.badge-primary { background: var(--ga-gradient) !important; }
.badge-pill { border-radius: var(--ga-radius-pill) !important; }

.breadcrumb, .my-breadcrumb {
  background: var(--ga-glass-soft) !important;
  border: 1px solid var(--ga-border);
  border-radius: var(--ga-radius-sm) !important;
}

.breadcrumb-item a { color: var(--ga-accent) !important; }
.breadcrumb-item.active { color: var(--ga-fg-muted) !important; }

.page-link {
  background: var(--ga-glass-soft) !important;
  border-color: var(--ga-border) !important;
  color: var(--ga-fg-muted) !important;
}

.page-item.active .page-link {
  background: var(--ga-gradient) !important;
  border-color: transparent !important;
}

.modal-content {
  background: var(--ga-glass-strong) !important;
  border: 1px solid var(--ga-border) !important;
  border-radius: var(--ga-radius) !important;
}

.modal-header, .modal-footer { border-color: var(--ga-border) !important; }

/* the stock bootstrap dim (opacity .5 on a plain black backdrop) reads as
   barely-there against this theme's own dark backgrounds, and the sticky
   header/hmenu bar sat visually "in front of" it - so the whole page behind
   a modal looked untouched. Force a real dim + blur, above both bars. */
.modal-backdrop {
  z-index: 1045 !important;
  background-color: rgba(8, 6, 18, .72) !important;
  -webkit-backdrop-filter: blur(6px) !important;
  backdrop-filter: blur(6px) !important;
}
.modal-backdrop.fade { opacity: 1 !important; }
.modal-backdrop.show { opacity: 1 !important; }

/* move-to-top button */
#movetop {
  background: var(--ga-gradient) !important;
  box-shadow: 0 10px 26px rgba(124, 58, 237, .4) !important;
  border-radius: 50% !important;
}

/* footer */
footer, footer.dashboard {
  background: transparent !important;
  border-top: 1px solid var(--ga-border);
}

/* ---------------------------------------------------------------------- *
 * Responsive
 * ---------------------------------------------------------------------- */

@media (max-width: 768px) {
  .ga-chip-rail { display: none; }
}

/* ---------------------------------------------------------------------- *
 * appinfo.php - game detail page
 * ---------------------------------------------------------------------- */

.ga-appinfo-hero__inner {
  display: flex;
  align-items: center;
  gap: 1.1rem;
  flex-wrap: wrap;
}

.ga-appinfo-hero__img {
  width: 230px;
  max-width: 100%;
  height: auto;
  border-radius: var(--ga-radius-sm);
  border: 1px solid var(--ga-border);
  flex-shrink: 0;
}

.ga-appinfo-hero__body { flex: 1 1 260px; min-width: 0; }
.ga-appinfo-hero__body h3 { word-break: break-word; }

.ga-appinfo-hero__chips {
  display: flex;
  flex-wrap: wrap;
  gap: .4rem;
  margin: .5rem 0 .8rem;
}

.ga-appinfo-hero__chips .ga-chip {
  font-weight: 600;
  font-size: 11px;
  padding: .22rem .55rem;
}

/* quick stat tiles under the hero title */
.ga-stat-row {
  display: flex;
  flex-wrap: wrap;
  gap: .75rem;
  margin-top: .9rem;
}

.ga-stat-tile {
  flex: 1 1 160px;
  background: var(--ga-glass-soft);
  border: 1px solid var(--ga-border);
  border-radius: var(--ga-radius-sm);
  padding: .7rem .9rem;
}

.ga-stat-tile__label {
  color: var(--ga-fg-muted);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .04em;
}

.ga-stat-tile__value {
  color: var(--ga-fg);
  font-size: 1.1rem;
  font-weight: 800;
  margin-top: .1rem;
}

/* tab navigation, themed to match the rest of the cockpit chrome */
.nav-tabs {
  border-bottom: 1px solid var(--ga-border) !important;
  gap: .3rem;
  flex-wrap: wrap;
}

.nav-tabs .nav-item { margin-bottom: -1px; }

.nav-tabs .nav-link {
  color: var(--ga-fg-muted) !important;
  background: transparent !important;
  border: 1px solid transparent !important;
  border-radius: var(--ga-radius-sm) var(--ga-radius-sm) 0 0 !important;
  font-weight: 600;
  padding: .55rem 1rem !important;
}

.nav-tabs .nav-link:hover {
  color: var(--ga-fg) !important;
  border-color: var(--ga-border) !important;
}

.nav-tabs .nav-link.active {
  color: var(--ga-fg) !important;
  background: var(--ga-glass-soft) !important;
  border-color: var(--ga-border) !important;
  border-bottom-color: transparent !important;
}

/* appinfo.php - vertical jump-nav sidebar, left of the dashboard */
.ga-appinfo-navcol { padding-left: 0; padding-right: .6rem; }

.ga-vertical-tabs.nav-tabs {
  border-bottom: none !important;
  flex-direction: column;
  gap: .3rem;
  position: sticky;
  top: calc(var(--ga-stack-height, 148px) + 10px);
}

.ga-vertical-tabs.nav-tabs .nav-item { margin-bottom: 0; width: 100%; }

.ga-vertical-tabs.nav-tabs .nav-link {
  border-radius: var(--ga-radius-sm) !important;
  border-left: 2px solid transparent !important;
  width: 100%;
  text-align: left;
}

.ga-vertical-tabs.nav-tabs .nav-link:hover { border-left-color: var(--ga-border-hi) !important; }

.ga-vertical-tabs.nav-tabs .nav-link.active {
  border-left-color: var(--ga-accent) !important;
  border-bottom-color: var(--ga-border) !important;
}

@media (max-width: 991px) {
  .ga-vertical-tabs.nav-tabs { position: static; flex-direction: row; flex-wrap: wrap; }
}

/* Main info / Add. info - key/value grid replacing the old plain <table> */
.ga-info-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: .6rem;
}

.ga-info-tile {
  background: var(--ga-glass-soft);
  border: 1px solid var(--ga-border);
  border-radius: var(--ga-radius-sm);
  padding: .55rem .8rem;
}

.ga-info-tile__label {
  color: var(--ga-fg-muted);
  font-size: 11.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .04em;
  margin-bottom: .15rem;
}

.ga-info-tile__value {
  color: var(--ga-fg);
  font-size: 12.5px;
  overflow-wrap: anywhere;
}

.ga-info-tile .ga-chip {
  font-size: 11px;
  padding: .28rem .6rem;
}

/* bar-chart cards used by drawtable_bar() */
.ga-chart-card canvas { max-width: 100%; }

/* drawpiechart()/drawtable_bar() rendered with $standalone=false - several
   charts sharing one outer .ga-chart-card instead of each getting its own
   bordered box (eg. appinfo.php's Reviews Statistics section) */
.ga-chart-card-inner {
  height: 100%;
  min-width: 0;
  display: flex;
  flex-direction: column;
  padding: .5rem;
}
.ga-chart-card-inner .card-body { flex: 1 1 auto; }

/* Bootstrap's .row is flex with align-items:stretch, so a .col-lg-* next to
   a taller sibling already gets stretched to match it - but the .card
   inside only sizes to its own content, leaving the extra stretched column
   height as dead space below a short card instead of the card filling it.
   Make the card itself a column flexbox that fills its stretched column,
   and let the body/chart viewport grow into whatever space that leaves. */
/* flex items default to min-width:auto (their intrinsic content size), which
   lets a wide table/canvas inside force the card past its Bootstrap column's
   actual width instead of respecting it - same class of bug as the pricing
   cards earlier. min-width:0 lets the column win and .table-responsive
   handle any real overflow with its own internal scrollbar instead. */
.ga-chart-card {
  height: 100%;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.ga-chart-card .card-body {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
}

/* chart canvases render at a height proportional to their row count (eg. 20
   countries vs. 3 subscription types) - fixed to one height so every chart
   card in the grid matches, and tall ones scroll internally instead.
   NOTE: this must stay a fixed height, not flex-grow. Chart.js sizes a
   maintainAspectRatio:false canvas to fill its container via a
   ResizeObserver; making that container's height flow from a flex chain
   whose own size depends on the card's content creates a circular sizing
   dependency - canvas resizes, container recalculates, canvas resizes
   again - an infinite loop that reads as the chart continuously growing/
   sliding down the page (seen live in the Reviews section's pie/bar
   charts, immediately on load, no interaction needed). */
.ga-chart-scroll {
  height: 260px;
  overflow-y: auto;
  overflow-x: hidden;
}

/* ---------------------------------------------------------------------- *
 * ga_premium_subscription.php - pricing page
 * ---------------------------------------------------------------------- */

.ga-pricing-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 1rem;
  margin: 1.5rem 0;
}

.ga-pricing-card {
  background: var(--ga-glass) !important;
  border: 1px solid var(--ga-border) !important;
  border-radius: var(--ga-radius) !important;
  box-shadow: var(--ga-shadow);
  padding: 1.7rem;
  display: flex;
  flex-direction: column;
  /* grid items default to min-width:auto, which lets their content's
     intrinsic (min-content) width force the 1fr track wider than the
     minmax() ceiling implies - this opts back out so the card can shrink
     to fit narrow/mobile viewports instead of causing horizontal overflow. */
  min-width: 0;
  overflow-wrap: break-word;
}

.ga-pricing-card__title {
  color: var(--ga-accent) !important;
  font-size: 1.3rem;
  font-weight: 800;
  margin-bottom: .5rem;
}

.ga-pricing-card__desc { color: var(--ga-fg-muted); margin-bottom: 1.1rem; }

.ga-pricing-card__features {
  list-style: none;
  padding: 0;
  margin: 0 0 1.4rem;
  flex: 1;
}

.ga-pricing-card__features li {
  position: relative;
  padding-left: 1.6rem;
  margin-bottom: .75rem;
  color: var(--ga-fg);
  line-height: 1.45;
}

.ga-pricing-card__features li::before {
  content: "✓";
  position: absolute;
  left: 0;
  top: 0;
  color: var(--ga-teal);
  font-weight: 800;
}

.ga-pricing-card__cta { align-self: flex-start; text-decoration: none !important; }

.ga-pricing-steps li { color: var(--ga-fg); margin-bottom: .6rem; line-height: 1.5; }

/* dashboard section headings, replacing the old inline font-size:250% <p> tags */
.ga-section-title {
  font-size: 1.4rem;
  font-weight: 800;
  color: var(--ga-fg);
  margin: 0 0 .8rem;
  padding-top: .4rem;
}

/* the jump-nav anchors (#rev_stats etc.) target this div, not the <h4> inside
   it - scroll-margin-top has to sit here so the sticky header doesn't cover
   the section's top when the browser scrolls to it. */
.ga-dashboard-section { scroll-margin-top: calc(var(--ga-stack-height, 148px) + 10px); }

.ga-dashboard-section + .ga-dashboard-section { border-top: 1px solid var(--ga-border); margin-top: .6rem; padding-top: .6rem; }

/* compact mode for Reviews/Owners/Wishlist/Followers/Chart Histories - these
   sections ran much taller than the hero/estimates content above them */
.ga-dashboard-section .ga-section-title { font-size: 1rem; margin-bottom: .4rem; padding-top: 0; }
.ga-dashboard-section .ga-chart-scroll { height: 160px !important; }
.ga-dashboard-section .ga-chart-card-inner,
.ga-dashboard-section .ga-chart-card .card-body { padding: .35rem !important; }
.ga-dashboard-section .card.p-4 { padding: .6rem !important; }
.ga-dashboard-section .card-header.chart-grid__header { font-size: .78rem !important; }
.ga-dashboard-section .text18 { font-size: 13px !important; }

/* explore_games.php - body text default (var(--ga-fg)) reads as stark white
   against the dark surface at this row density; tone it down to muted/normal
   weight so numbers and names don't compete with headings for attention. */
#games_list.dataTable tbody td { color: var(--ga-fg-muted) !important; font-weight: 400; }
#games_list.dataTable tbody td a { font-weight: 600; }
