/* ============================================================================
   GAH 2026 — global player design system (loaded on every non-admin page).
   Turns the CTFd core-beta theme into a dark security-operations console.
   Admin uses a separate theme and never loads this file.
   ========================================================================== */

:root {
  /* ground + surfaces — violet-biased neutrals so the accent lives in the family */
  --rc-bg: #0b0713;
  --rc-bg-2: #070410;
  --rc-surface: #16101f;
  --rc-surface-2: #1c1529;
  --rc-surface-3: #241a35;
  --rc-line: #2c2140;
  --rc-line-soft: #201830;

  --rc-text: #e2e0ee;           /* brighter body text for legibility on the dark violet ground */
  --rc-text-strong: #f8f7fc;
  --rc-muted: #9a8fb5;

  --rc-accent: #a855f7;          /* primary — glowing violet */
  --rc-accent-hover: #c99cff;
  --rc-accent-deep: #7c3aed;
  --rc-accent-rgb: 168, 85, 247;
  --rc-gold: #fbbf24;            /* secondary — glowing gold (highlights, solved) */
  --rc-gold-hover: #fcd34d;
  --rc-gold-deep: #d99a1e;
  --rc-gold-rgb: 251, 191, 36;
  --rc-signal: #fb3b6b;          /* danger / critical */
  --rc-good: #34d399;
  --rc-warn: #fbbf24;

  --rc-glow-violet: 0 0 22px rgba(168, 85, 247, 0.55);
  --rc-glow-gold: 0 0 22px rgba(251, 191, 36, 0.5);

  /* bootstrap overrides */
  --bs-primary: var(--rc-accent);
  --bs-primary-rgb: 168, 85, 247;
  --bs-body-bg: var(--rc-bg);
  --bs-body-color: var(--rc-text);
  --bs-border-color: var(--rc-line);
  --bs-link-color: var(--rc-accent);
  --bs-link-hover-color: var(--rc-accent-hover);
  --bs-emphasis-color: var(--rc-text-strong);
  --bs-secondary-color: var(--rc-muted);

  --rc-font: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --rc-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;
}

body {
  background: var(--rc-bg);
  color: var(--rc-text);
  font-family: var(--rc-font);
  -webkit-font-smoothing: antialiased;
  position: relative;
}
/* faint fixed HUD grid behind every page. z-index:-1 keeps it behind all page
   content WITHOUT forcing a stacking context on <main> (which would trap
   Bootstrap's modal beneath its backdrop). */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  opacity: 0.45;
  background-color: var(--rc-bg);
  background-image:
    linear-gradient(rgba(168, 85, 247, 0.04) 1px, transparent 1px),
    linear-gradient(90deg, rgba(168, 85, 247, 0.04) 1px, transparent 1px);
  background-size: 46px 46px;
  -webkit-mask-image: radial-gradient(120% 60% at 85% 0%, #000, transparent 75%);
  mask-image: radial-gradient(120% 60% at 85% 0%, #000, transparent 75%);
}

h1, h2, h3, h4, h5, h6 { color: var(--rc-text-strong); }
a { color: var(--bs-link-color); text-decoration: none; }
a:hover { color: var(--bs-link-hover-color); }
code, kbd, pre, samp { font-family: var(--rc-mono); color: var(--rc-accent); }
hr { border-color: var(--rc-line); opacity: 1; }
::selection { background: rgba(168, 85, 247, 0.3); }

/* -------------------------------------------------------------- navbar ----- */
.navbar {
  background: linear-gradient(180deg, rgba(13, 18, 28, 0.98), rgba(9, 13, 21, 0.92)) !important;
  border-bottom: 1px solid var(--rc-line);
  backdrop-filter: blur(6px);
  padding-top: 0.55rem;
  padding-bottom: 0.55rem;
}
.navbar .container { align-items: center; }
.navbar .navbar-brand {
  color: var(--rc-text-strong) !important;
  font-weight: 800;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  font-size: 1rem;
  display: flex;
  align-items: center;
  gap: 0.6rem;
  text-shadow: 0 0 18px rgba(168, 85, 247, 0.45);
}
.navbar .navbar-brand .gah-brand-mark {
  filter: drop-shadow(0 0 8px rgba(168, 85, 247, 0.75)) drop-shadow(0 0 14px rgba(251, 191, 36, 0.3));
  animation: rc-mark-pulse 3.4s ease-in-out infinite;
}
.navbar .navbar-brand .gah-brand-text { line-height: 1; }
@keyframes rc-mark-pulse {
  0%, 100% { filter: drop-shadow(0 0 6px rgba(168, 85, 247, 0.6)) drop-shadow(0 0 12px rgba(251, 191, 36, 0.22)); }
  50%      { filter: drop-shadow(0 0 12px rgba(168, 85, 247, 1))  drop-shadow(0 0 20px rgba(251, 191, 36, 0.4)); }
}
.navbar .nav-link {
  color: var(--rc-muted) !important;
  font: 600 0.72rem/1 var(--rc-mono);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 0.55rem 0.7rem !important;
  position: relative;
  transition: color 0.14s ease;
}
.navbar .nav-link:hover,
.navbar .nav-link:focus { color: var(--rc-text-strong) !important; }
.navbar .nav-link::after {
  content: "";
  position: absolute;
  left: 0.7rem; right: 0.7rem; bottom: 0.15rem;
  height: 2px;
  background: var(--rc-accent);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.16s ease;
}
.navbar .nav-link:hover::after { transform: scaleX(1); }
.navbar .navbar-toggler {
  border-color: var(--rc-line);
  color: var(--rc-text);
}
.navbar .dropdown-menu {
  background: var(--rc-surface);
  border: 1px solid var(--rc-line);
}
.navbar .dropdown-item { color: var(--rc-text); }
.navbar .dropdown-item:hover { background: var(--rc-surface-2); color: var(--rc-text-strong); }
.badge-notification.bg-danger { background: var(--rc-signal) !important; }

/* drop the stock CTFd-flavoured controls (language picker, light/dark toggle) */
.navbar .theme-switch,
.navbar li.nav-item:has(> .dropdown-toggle .fa-language) { display: none !important; }

/* Sign in / Register rendered as real buttons on the right of the bar */
.navbar-nav.ms-md-auto .nav-item > a.nav-link[href*="/login"],
.navbar-nav.ms-md-auto .nav-item > a.nav-link[href*="/register"] {
  border: 1px solid var(--rc-accent-deep);
  border-radius: 8px;
  color: var(--rc-accent) !important;
  margin-left: 0.5rem;
  padding: 0.4rem 0.9rem !important;
  text-transform: uppercase;
}
.navbar-nav.ms-md-auto .nav-item > a.nav-link[href*="/register"] {
  background: linear-gradient(135deg, var(--rc-accent), var(--rc-accent-deep));
  color: #0a0413 !important;
  border-color: var(--rc-accent);
  box-shadow: 0 0 18px -4px rgba(168, 85, 247, 0.7);
}
.navbar-nav.ms-md-auto .nav-item > a.nav-link[href*="/login"]:hover,
.navbar-nav.ms-md-auto .nav-item > a.nav-link[href*="/register"]:hover { filter: brightness(1.12); }
.navbar-nav.ms-md-auto .nav-item > a.nav-link[href*="/login"]::after,
.navbar-nav.ms-md-auto .nav-item > a.nav-link[href*="/register"]::after { display: none; }

/* -------------------------------------------------------------- footer ----- */
/* the base theme positions the footer absolutely, which overlaps short pages —
   put it back in normal flow and keep short pages tall enough to push it down */
main[role="main"] { min-height: calc(100vh - 170px); }
footer.footer {
  position: static !important;
  color: var(--rc-muted);
  border-top: 1px solid var(--rc-line-soft);
  margin-top: 3rem;
  padding: 1.4rem 0;
}
.gah-footer {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  font: 500 0.72rem/1 var(--rc-mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.gah-footer-brand { color: var(--rc-text-strong); font-weight: 700; }
.gah-footer-sep { color: var(--rc-accent); }
.gah-footer-note { color: var(--rc-muted); text-transform: none; letter-spacing: 0.02em; }

/* ----------------------------------------------------- page header block --- */
.jumbotron {
  background: linear-gradient(180deg, var(--rc-surface-2), var(--rc-surface));
  border: 1px solid var(--rc-line);
  border-radius: 14px;
  padding: 2.2rem 2rem;
  margin: 1.6rem 0 1.2rem;
  position: relative;
  overflow: hidden;
}
.jumbotron::before {
  content: "";
  position: absolute; left: 0; top: 0; bottom: 0;
  width: 3px;
  background: linear-gradient(180deg, var(--rc-accent), var(--rc-gold));
  box-shadow: 0 0 18px rgba(168, 85, 247, 0.6);
}
.jumbotron h1 {
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  margin: 0;
  text-wrap: balance;
  text-shadow: 0 0 22px rgba(168, 85, 247, 0.35);
}

/* -------------------------------------------------------------- cards ------ */
.card, .modal-content {
  background: linear-gradient(180deg, var(--rc-surface-2), var(--rc-surface));
  border: 1px solid var(--rc-line);
  color: var(--rc-text);
  border-radius: 12px;
}
.card-header, .card-footer {
  background: transparent;
  border-color: var(--rc-line);
}

/* -------------------------------------------------------------- forms ------ */
.form-control, .form-select, .input-group-text {
  background: var(--rc-surface-3);
  border-color: var(--rc-line);
  color: var(--rc-text);
  border-radius: 8px;
}
.form-control::placeholder { color: var(--rc-muted); opacity: 1; }
.form-control:focus, .form-select:focus {
  background: var(--rc-surface-3);
  color: var(--rc-text-strong);
  border-color: var(--rc-accent-deep);
  box-shadow: 0 0 0 2px rgba(168, 85, 247, 0.22);
}
.form-check-input { background-color: var(--rc-surface-3); border-color: var(--rc-line); }
.form-check-input:checked { background-color: var(--rc-accent); border-color: var(--rc-accent); }
label, .form-label { color: var(--rc-text); }

/* -------------------------------------------------------------- buttons ---- */
.btn {
  border-radius: 8px;
  font-weight: 600;
  letter-spacing: 0.02em;
}
.btn-primary {
  --bs-btn-bg: var(--rc-accent);
  --bs-btn-border-color: var(--rc-accent);
  --bs-btn-color: #0a0413;
  --bs-btn-hover-bg: var(--rc-accent-hover);
  --bs-btn-hover-border-color: var(--rc-accent-hover);
  --bs-btn-hover-color: #0a0413;
  --bs-btn-active-bg: var(--rc-accent-hover);
  --bs-btn-active-color: #0a0413;
  --bs-btn-disabled-bg: var(--rc-accent-deep);
  --bs-btn-disabled-border-color: var(--rc-accent-deep);
  box-shadow: 0 0 22px -4px rgba(168, 85, 247, 0.7);
}
.btn-primary:hover { box-shadow: 0 0 30px -2px rgba(168, 85, 247, 0.9); }
/* gold variant */
.btn-gold {
  --bs-btn-bg: var(--rc-gold);
  --bs-btn-border-color: var(--rc-gold);
  --bs-btn-color: #1a1204;
  --bs-btn-hover-bg: var(--rc-gold-hover);
  --bs-btn-hover-border-color: var(--rc-gold-hover);
  --bs-btn-hover-color: #1a1204;
  box-shadow: 0 0 22px -4px rgba(251, 191, 36, 0.65);
}

/* hero call-to-action — big, glowing */
.gah-home-cta .btn {
  padding: 0.9rem 2.2rem;
  font: 700 0.9rem/1 var(--rc-mono);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  border-radius: 10px;
}
.gah-home-cta .btn-primary {
  background: linear-gradient(135deg, var(--rc-accent), #6d28d9);
  border: 0;
  box-shadow: 0 0 30px -6px rgba(168, 85, 247, 0.85), inset 0 0 0 1px rgba(255, 255, 255, 0.08);
  animation: rc-cta-glow 3s ease-in-out infinite;
}
@keyframes rc-cta-glow {
  0%, 100% { box-shadow: 0 0 26px -8px rgba(168, 85, 247, 0.7), inset 0 0 0 1px rgba(255,255,255,0.08); }
  50%      { box-shadow: 0 0 40px -4px rgba(168, 85, 247, 1), 0 0 60px -10px rgba(251, 191, 36, 0.35), inset 0 0 0 1px rgba(255,255,255,0.12); }
}
.btn-info {
  --bs-btn-bg: transparent;
  --bs-btn-border-color: var(--rc-accent-deep);
  --bs-btn-color: var(--rc-accent);
  --bs-btn-hover-bg: rgba(168, 85, 247, 0.12);
  --bs-btn-hover-border-color: var(--rc-accent);
  --bs-btn-hover-color: var(--rc-accent-hover);
}
.btn-outline-secondary {
  --bs-btn-color: var(--rc-text);
  --bs-btn-border-color: var(--rc-line);
  --bs-btn-hover-bg: var(--rc-surface-3);
  --bs-btn-hover-border-color: var(--rc-accent-deep);
  --bs-btn-hover-color: var(--rc-text-strong);
}
.btn-secondary {
  --bs-btn-bg: var(--rc-surface-3);
  --bs-btn-border-color: var(--rc-line);
  --bs-btn-color: var(--rc-text);
  --bs-btn-hover-bg: var(--rc-line);
}
/* instancer "Start" et al — keep on the violet/gold system, not Bootstrap green */
.btn-success {
  --bs-btn-bg: var(--rc-accent);
  --bs-btn-border-color: var(--rc-accent);
  --bs-btn-color: #0a0413;
  --bs-btn-hover-bg: var(--rc-accent-hover);
  --bs-btn-hover-border-color: var(--rc-accent-hover);
  --bs-btn-hover-color: #0a0413;
  --bs-btn-active-bg: var(--rc-accent-hover);
}
.btn-outline-success { --bs-btn-color: var(--rc-gold); --bs-btn-border-color: var(--rc-gold-deep); --bs-btn-hover-bg: rgba(251,191,36,.12); --bs-btn-hover-color: var(--rc-gold-hover); }
.btn-outline-danger  { --bs-btn-color: var(--rc-signal); --bs-btn-border-color: var(--rc-signal); }
.btn-link { color: var(--rc-accent); }

/* -------------------------------------------------------------- tables ----- */
.table {
  --bs-table-bg: transparent;
  --bs-table-color: var(--rc-text);
  --bs-table-border-color: var(--rc-line-soft);
  --bs-table-striped-bg: rgba(255, 255, 255, 0.018);
  --bs-table-striped-color: var(--rc-text);
  --bs-table-hover-bg: rgba(168, 85, 247, 0.06);
  --bs-table-hover-color: var(--rc-text-strong);
}
.table > thead th {
  color: var(--rc-muted);
  font: 600 0.72rem/1 var(--rc-mono);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  border-bottom: 1px solid var(--rc-line);
  padding: 0.85rem 0.75rem;
}
.table > tbody td { border-color: var(--rc-line-soft); padding: 0.75rem; }
.table a { color: var(--rc-text-strong); }
.table a:hover { color: var(--rc-accent); }

/* --------------------------------------------------------- tabs / pills ---- */
.nav-tabs {
  border-bottom: 1px solid var(--rc-line);
  gap: 0.25rem;
}
.nav-tabs .nav-link {
  color: var(--rc-muted);
  background: transparent;
  border: 0;
  border-bottom: 2px solid transparent;
  font: 600 0.74rem/1 var(--rc-mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 0.7rem 0.9rem;
}
.nav-tabs .nav-link:hover { color: var(--rc-text); border-color: transparent; }
.nav-tabs .nav-link.active {
  color: var(--rc-accent);
  background: transparent;
  border-color: var(--rc-accent);
}
.nav-pills .nav-link {
  color: var(--rc-muted);
  border: 1px solid var(--rc-line);
  border-radius: 7px;
  font: 600 0.76rem/1 var(--rc-mono);
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.nav-pills .nav-link.active {
  background: var(--rc-accent);
  color: #04121a;
  border-color: var(--rc-accent);
}

/* -------------------------------------------------------------- alerts ----- */
.alert { border-radius: 10px; border-width: 1px; }
.alert-success { background: rgba(52, 211, 153, 0.1); border-color: rgba(52, 211, 153, 0.4); color: #a7f3d0; }
.alert-danger  { background: rgba(244, 63, 94, 0.1); border-color: rgba(244, 63, 94, 0.4); color: #fecdd3; }
.alert-info    { background: rgba(168, 85, 247, 0.1); border-color: rgba(168, 85, 247, 0.35); color: #a5f3fc; }
.alert-warning { background: rgba(245, 158, 11, 0.1); border-color: rgba(245, 158, 11, 0.4); color: #fde68a; }
.alert-secondary { background: var(--rc-surface-2); border-color: var(--rc-line); color: var(--rc-text); }

/* -------------------------------------------------------------- misc ------- */
.badge.bg-primary { background: var(--rc-accent) !important; color: #04121a; }
.badge.bg-secondary { background: var(--rc-surface-3) !important; color: var(--rc-text); }
.badge.bg-info { background: rgba(168, 85, 247, 0.15) !important; color: var(--rc-accent); }
.badge.text-bg-light { background: var(--rc-surface-3) !important; color: var(--rc-text) !important; }
.text-muted, .form-text, small.text-muted, .text-secondary { color: var(--rc-muted) !important; }
.text-success { color: var(--rc-good) !important; }
.text-danger { color: var(--rc-signal) !important; }
.page-link {
  background: var(--rc-surface);
  border-color: var(--rc-line);
  color: var(--rc-text);
}
.page-item.active .page-link { background: var(--rc-accent); border-color: var(--rc-accent); color: #04121a; }
.modal-backdrop.show { opacity: 0.72; }
.spinner { color: var(--rc-accent); }
.pagination { --bs-pagination-hover-bg: var(--rc-surface-2); }

/* -------------------------------------------------------- auth (login) ---- */
.auth-wrap {
  min-height: calc(100vh - 170px);
  display: flex; align-items: center; justify-content: center;
  padding: 2rem 1rem;
}
.auth-card {
  width: 100%; max-width: 420px;
  background: linear-gradient(180deg, var(--rc-surface-2), var(--rc-surface));
  border: 1px solid var(--rc-line);
  border-radius: 16px;
  padding: 2.4rem 2rem;
  box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(168, 85, 247, 0.06);
  position: relative;
  overflow: hidden;
}
.auth-card::before {
  content: "";
  position: absolute; left: 0; right: 0; top: 0;
  height: 2px;
  background: linear-gradient(90deg, transparent, var(--rc-accent), transparent);
}
.auth-brand {
  text-align: center; margin-bottom: 1rem;
  display: flex; flex-direction: column; align-items: center; gap: 0.7rem;
}
.auth-brand img { max-height: 54px; max-width: 220px; }
.auth-brand-mark {
  filter: drop-shadow(0 0 14px rgba(168, 85, 247, 0.7)) drop-shadow(0 0 24px rgba(251, 191, 36, 0.3));
}
.auth-brand-text {
  font-weight: 800; font-size: 1.15rem; letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--rc-text-strong);
  text-shadow: 0 0 18px rgba(168, 85, 247, 0.45);
}
.auth-title {
  text-align: center; font: 600 0.78rem/1.4 var(--rc-mono);
  letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--rc-muted); margin-bottom: 1.6rem;
}
.auth-divider { text-align: center; margin: 1rem 0; position: relative; color: var(--rc-muted); }
.auth-divider::before {
  content: ""; position: absolute; top: 50%; left: 0; right: 0;
  border-top: 1px solid var(--rc-line);
}
.auth-divider span {
  background: var(--rc-surface); padding: 0 0.75rem; position: relative;
  font: 500 0.72rem/1 var(--rc-mono); letter-spacing: 0.1em; text-transform: uppercase;
}

/* ================================================= profile / dossier ====== */
.stats-list, .user-stats { color: var(--rc-text); }
#score-graph, #keys-pie-graph, #categories-pie-graph, #solves-graph {
  min-height: 340px;
}
.jumbotron .badge.rounded-pill { font-family: var(--rc-mono); letter-spacing: 0.04em; }

/* header: name / rank / points / badges, in the shared page-head language */
.gah-profile-head {
  padding: 2.2rem 0 1.6rem;
  border-bottom: 1px solid var(--rc-line);
  margin-bottom: 1.8rem;
  text-align: center;
}
.gah-profile-eyebrow {
  font: 600 0.7rem/1 var(--rc-mono);
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--rc-gold);
  margin: 0 0 0.7rem;
}
.gah-profile-name {
  font-size: clamp(1.8rem, 4vw, 2.6rem);
  font-weight: 800;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  margin: 0;
  color: var(--rc-text-strong);
  text-shadow: 0 0 22px rgba(168, 85, 247, 0.35);
}
.gah-profile-badges {
  display: flex; flex-wrap: wrap; gap: 0.5rem;
  justify-content: center;
  margin: 0.9rem 0 0;
}
.gah-profile-badges .badge {
  background: var(--rc-surface-3) !important;
  border: 1px solid var(--rc-line);
  color: var(--rc-text) !important;
  font: 600 0.68rem/1 var(--rc-mono) !important;
  letter-spacing: 0.06em;
  padding: 0.4rem 0.7rem;
}
.gah-profile-fields {
  margin: 1rem 0 0;
  color: var(--rc-muted);
  font-size: 0.85rem;
}
.gah-profile-stats {
  display: flex; gap: 2.4rem; justify-content: center;
  margin: 1.6rem 0 0;
}
.gah-profile-stat b {
  display: block;
  font: 800 2.1rem/1 var(--rc-mono);
  color: var(--rc-gold);
  text-shadow: 0 0 20px rgba(251, 191, 36, 0.4);
}
.gah-profile-stat span {
  display: block; margin-top: 0.35rem;
  font: 600 0.66rem/1 var(--rc-mono);
  letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--rc-muted);
}
.gah-profile-link {
  display: inline-flex; margin-top: 1.1rem; color: var(--rc-muted);
}
.gah-profile-link:hover { color: var(--rc-accent); }

/* section shell reused for Awards / Solves / Breakdown / Score-over-time */
.gah-profile-section { margin-bottom: 1.8rem; }
.gah-profile-section-title {
  font: 700 0.78rem/1 var(--rc-mono);
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--rc-text-strong);
  margin: 0 0 0.9rem;
  display: flex; align-items: center; gap: 0.6rem;
}
.gah-profile-section-title::before {
  content: "";
  width: 18px; height: 2px;
  background: linear-gradient(90deg, var(--rc-accent), var(--rc-gold));
  box-shadow: 0 0 8px rgba(168, 85, 247, 0.7);
}

/* awards grid */
.gah-award-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
  gap: 0.8rem;
}
.gah-award-card {
  background: linear-gradient(180deg, var(--rc-surface-2), var(--rc-surface));
  border: 1px solid var(--rc-line);
  border-radius: 12px;
  padding: 1.1rem 1rem;
  text-align: center;
}
.gah-award-icon {
  width: 44px; height: 44px; margin: 0 auto 0.6rem;
  display: grid; place-items: center;
  border-radius: 50%;
  background: rgba(251, 191, 36, 0.12);
  border: 1px solid rgba(251, 191, 36, 0.4);
  color: var(--rc-gold);
  font-size: 1.1rem;
}
.gah-award-name { color: var(--rc-text-strong); font-weight: 700; margin: 0 0 0.2rem; }
.gah-award-meta { color: var(--rc-muted); font-size: 0.78rem; margin: 0 0 0.5rem; }
.gah-award-value {
  display: inline-block;
  font: 700 0.8rem/1 var(--rc-mono);
  color: var(--rc-gold);
  background: rgba(251, 191, 36, 0.1);
  border: 1px solid rgba(251, 191, 36, 0.3);
  border-radius: 5px;
  padding: 0.25rem 0.55rem;
}

/* solve/category breakdown bars */
.gah-breakdown-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.6rem;
}
@media (max-width: 760px) { .gah-breakdown-grid { grid-template-columns: 1fr; } }
.gah-breakdown-grid .progress {
  background: var(--rc-surface-3);
  border: 1px solid var(--rc-line);
  border-radius: 6px;
  height: 10px;
  overflow: hidden;
  margin-bottom: 0.7rem;
}
.gah-breakdown-legend { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; }
.gah-breakdown-legend > div { display: flex; align-items: center; gap: 0.4rem; float: none !important; padding: 0 !important; }
.gah-breakdown-legend small { color: var(--rc-muted); font: 500 0.74rem/1 var(--rc-mono); }

.progress {
  background: var(--rc-surface-3);
  border: 1px solid var(--rc-line);
  border-radius: 6px;
  height: 10px;
  overflow: hidden;
}
.progress-bar { background-color: var(--rc-accent); }
.award-icon { color: var(--rc-warn); }
.solve-time span, .solve-time { color: var(--rc-muted); font-family: var(--rc-mono); font-size: 0.85rem; }

/* ---------------------------------------------- custom page header block -- */
.gah-page-head {
  padding: 2rem 0 1.4rem;
  border-bottom: 1px solid var(--rc-line);
  margin-bottom: 1.6rem;
}
.gah-page-eyebrow {
  font: 600 0.7rem/1 var(--rc-mono);
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--rc-accent);
  margin: 0 0 0.55rem;
  display: flex; align-items: center; gap: 0.55rem;
}
.gah-page-eyebrow { color: var(--rc-gold); }
.gah-page-eyebrow::before {
  content: "";
  width: 10px; height: 10px;
  transform: rotate(45deg);
  border-radius: 2px;
  background: linear-gradient(135deg, var(--rc-accent), var(--rc-gold));
  box-shadow: 0 0 14px rgba(168, 85, 247, 0.8), 0 0 22px rgba(251, 191, 36, 0.4);
}
.gah-page-title { text-shadow: 0 0 24px rgba(168, 85, 247, 0.4); }
.gah-page-title {
  font-size: clamp(1.8rem, 4vw, 2.6rem);
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  margin: 0;
  line-height: 1.05;
}
.gah-page-sub {
  margin: 0.5rem 0 0;
  color: var(--rc-muted);
  font-size: 0.95rem;
  letter-spacing: 0.06em;
}
.gah-panel {
  background: linear-gradient(180deg, var(--rc-surface-2), var(--rc-surface));
  border: 1px solid var(--rc-line);
  border-radius: 12px;
  padding: 0.75rem;
  margin-bottom: 1.2rem;
}

/* =========================================================== leaderboard === */
.gah-sb { margin-top: 0.5rem; }
.mono { font-family: var(--rc-mono); font-variant-numeric: tabular-nums; }

/* bracket filter */
.gah-sb-brackets { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 1.6rem; }
.gah-sb-bracket {
  appearance: none;
  border: 1px solid var(--rc-line);
  background: var(--rc-surface);
  color: var(--rc-muted);
  font: 600 0.72rem/1 var(--rc-mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 0.5rem 0.85rem;
  border-radius: 7px;
  cursor: pointer;
  transition: color 0.14s, border-color 0.14s, background 0.14s;
}
.gah-sb-bracket:hover { color: var(--rc-text); border-color: var(--rc-accent-deep); }
.gah-sb-bracket.is-active {
  color: #0a0413;
  background: linear-gradient(135deg, var(--rc-accent), var(--rc-accent-deep));
  border-color: var(--rc-accent);
  box-shadow: 0 0 16px -4px rgba(168, 85, 247, 0.7);
}

/* ---- podium ---- */
.gah-podium {
  display: grid;
  grid-template-columns: 1fr 1.12fr 1fr;
  align-items: end;
  gap: 0.9rem;
  margin-bottom: 1.8rem;
}
.gah-podium-slot {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.5rem;
  padding: 1.4rem 1rem 1.2rem;
  border-radius: 14px;
  text-decoration: none;
  text-align: center;
  background: linear-gradient(180deg, var(--rc-surface-2), var(--rc-surface));
  border: 1px solid var(--rc-line);
  position: relative;
  overflow: hidden;
  transition: transform 0.16s ease, box-shadow 0.16s ease;
}
.gah-podium-slot:hover { transform: translateY(-3px); }
.gah-podium-slot::before {
  content: "";
  position: absolute; left: 0; right: 0; top: 0; height: 3px;
  background: var(--medal, var(--rc-accent));
  box-shadow: 0 0 16px var(--medal, var(--rc-accent));
}
.gah-podium-slot[data-rank="1"] {
  --medal: #fbbf24;
  order: 2;
  padding-top: 2rem; padding-bottom: 1.7rem;
  border-color: rgba(251, 191, 36, 0.5);
  box-shadow: 0 0 44px -14px rgba(251, 191, 36, 0.55);
}
.gah-podium-slot[data-rank="2"] { --medal: #d7dbe6; order: 1; }
.gah-podium-slot[data-rank="3"] { --medal: #d98a4b; order: 3; }
.gah-podium-medal {
  font: 800 0.9rem/1 var(--rc-mono);
  letter-spacing: 0.1em;
  color: var(--medal);
  text-shadow: 0 0 14px var(--medal);
}
.gah-podium-av {
  width: 54px; height: 54px;
  display: grid; place-items: center;
  border-radius: 50%;
  font: 700 1.1rem/1 var(--rc-mono);
  color: var(--rc-text-strong);
  background: radial-gradient(circle at 30% 25%, var(--rc-surface-3), var(--rc-surface));
  border: 1px solid var(--medal, var(--rc-line));
  box-shadow: 0 0 22px -6px var(--medal, transparent);
}
.gah-podium-slot[data-rank="1"] .gah-podium-av { width: 64px; height: 64px; font-size: 1.3rem; }
.gah-podium-name {
  font-weight: 700;
  color: var(--rc-text-strong);
  letter-spacing: 0.02em;
  word-break: break-word;
  max-width: 100%;
}
.gah-podium-score { color: var(--rc-muted); font: 500 0.78rem/1 var(--rc-mono); letter-spacing: 0.06em; }
.gah-podium-score b {
  display: block;
  font-size: 1.5rem;
  color: var(--rc-gold);
  text-shadow: 0 0 16px rgba(251, 191, 36, 0.45);
  margin-bottom: 0.15rem;
}
.gah-podium-slot.gah-me { outline: 1px solid var(--rc-accent); }

/* ---- ranked list ---- */
.gah-sb-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.gah-sb-row {
  display: grid;
  grid-template-columns: 44px 34px 1fr auto;
  align-items: center;
  gap: 0.85rem;
  padding: 0.7rem 1rem;
  border-radius: 10px;
  background: linear-gradient(180deg, var(--rc-surface-2), var(--rc-surface));
  border: 1px solid var(--rc-line);
  transition: border-color 0.14s, background 0.14s;
}
.gah-sb-row:hover { border-color: var(--rc-accent-deep); background: var(--rc-surface-3); }
.gah-sb-pos { color: var(--rc-muted); font-weight: 700; text-align: center; }
.gah-sb-av {
  width: 30px; height: 30px;
  display: grid; place-items: center;
  border-radius: 50%;
  font: 700 0.72rem/1 var(--rc-mono);
  color: var(--rc-text);
  background: var(--rc-surface-3);
  border: 1px solid var(--rc-line);
}
.gah-sb-name { color: var(--rc-text-strong); font-weight: 600; letter-spacing: 0.02em; }
.gah-sb-name:hover { color: var(--rc-accent); }
.gah-sb-score { color: var(--rc-gold); font-weight: 700; text-shadow: 0 0 12px rgba(251, 191, 36, 0.35); }
.gah-sb-tag {
  font: 600 0.62rem/1 var(--rc-mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--rc-muted);
  border: 1px solid var(--rc-line);
  border-radius: 4px;
  padding: 0.22rem 0.4rem;
}
.gah-sb-row.gah-me {
  border-color: var(--rc-accent);
  background: linear-gradient(180deg, rgba(168, 85, 247, 0.14), rgba(168, 85, 247, 0.04));
}
.gah-sb-row.gah-me .gah-sb-name { color: var(--rc-accent); }
.gah-sb-empty {
  text-align: center;
  color: var(--rc-muted);
  padding: 4rem 1rem;
  border: 1px dashed var(--rc-line);
  border-radius: 12px;
}

/* ---- "The Field" — score bar chart across every player ---- */
.gah-field {
  background: linear-gradient(180deg, var(--rc-surface-2), var(--rc-surface));
  border: 1px solid var(--rc-line);
  border-radius: 14px;
  padding: 1.1rem 1.3rem 1.3rem;
  margin-bottom: 1.8rem;
}
.gah-field-head {
  display: flex; flex-wrap: wrap; gap: 0.4rem 1rem;
  align-items: baseline; justify-content: space-between;
  margin-bottom: 0.9rem;
}
.gah-field-head h2 {
  margin: 0; font: 700 0.8rem/1 var(--rc-mono);
  letter-spacing: 0.22em; text-transform: uppercase;
  color: var(--rc-text-strong);
}
.gah-field-meta { color: var(--rc-muted); font: 500 0.74rem/1 var(--rc-mono); letter-spacing: 0.04em; }
.gah-field-meta b { color: var(--rc-gold); }
.gah-field-rows {
  display: flex; flex-direction: column; gap: 4px;
  max-height: 440px; overflow-y: auto;
  padding-right: 2px;
}
.gah-field-bar {
  display: grid;
  grid-template-columns: 30px minmax(84px, 128px) 1fr 58px;
  align-items: center;
  gap: 0.7rem;
  padding: 0.28rem 0.35rem;
  border-radius: 7px;
  text-decoration: none;
  transition: background 0.12s;
}
.gah-field-bar:hover { background: var(--rc-surface-3); }
.gah-field-rank { color: var(--rc-muted); font-weight: 700; text-align: right; font-size: 0.76rem; }
.gah-field-name {
  color: var(--rc-text); font-size: 0.8rem; font-weight: 500;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.gah-field-track {
  height: 14px; border-radius: 4px;
  background: var(--rc-surface-3);
  border: 1px solid var(--rc-line-soft);
  overflow: hidden;
}
.gah-field-fill {
  display: block; height: 100%;
  border-radius: 3px;
  background: linear-gradient(90deg, var(--rc-accent-deep), var(--rc-accent));
  box-shadow: 0 0 10px -1px rgba(168, 85, 247, 0.6);
  transition: width 0.5s ease;
}
.gah-field-fill[data-rank="1"] { background: linear-gradient(90deg, #b7791f, var(--rc-gold)); box-shadow: 0 0 12px -1px rgba(251, 191, 36, 0.65); }
.gah-field-fill[data-rank="2"] { background: linear-gradient(90deg, #6b7280, #d7dbe6); }
.gah-field-fill[data-rank="3"] { background: linear-gradient(90deg, #8a4b26, #d98a4b); }
.gah-field-score { color: var(--rc-gold); font-weight: 700; font-size: 0.8rem; text-align: right; }
.gah-field-bar.gah-me {
  background: linear-gradient(90deg, rgba(168, 85, 247, 0.16), rgba(168, 85, 247, 0.04));
  outline: 1px solid var(--rc-accent);
}
.gah-field-bar.gah-me .gah-field-name { color: var(--rc-accent); font-weight: 700; }

@media (max-width: 640px) {
  .gah-podium { grid-template-columns: 1fr; }
  .gah-podium-slot, .gah-podium-slot[data-rank="1"],
  .gah-podium-slot[data-rank="2"], .gah-podium-slot[data-rank="3"] { order: 0; }
  .gah-sb-row { grid-template-columns: 34px 28px 1fr auto; gap: 0.6rem; padding: 0.6rem 0.75rem; }
  .gah-field-bar { grid-template-columns: 24px 1fr 50px; }
  .gah-field-track { display: none; }
}

/* --------------------------------------------------- landing page (CMS) --- */
.gah-home {
  max-width: 820px;
  margin: 3.5rem auto 4rem;
  text-align: center;
  padding: 0 1rem;
  position: relative;
  perspective: 900px;          /* 3D scene for the title */
  perspective-origin: 50% 30%;
}
.gah-home::before {
  /* ambient violet+gold bloom behind the hero */
  content: "";
  position: absolute;
  left: 50%; top: -90px;
  width: 820px; height: 460px;
  transform: translateX(-50%);
  pointer-events: none;
  z-index: -1;
  background:
    radial-gradient(closest-side, rgba(168, 85, 247, 0.34), transparent 70%),
    radial-gradient(closest-side, rgba(251, 191, 36, 0.16), transparent 62%);
  filter: blur(16px);
  animation: rc-bloom 7s ease-in-out infinite;
}
@keyframes rc-bloom {
  0%, 100% { opacity: 0.75; transform: translateX(-50%) scale(1); }
  50%      { opacity: 1;    transform: translateX(-50%) scale(1.06); }
}
.gah-home-eyebrow {
  font: 600 0.72rem/1 var(--rc-mono);
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: var(--rc-gold);
  text-shadow: 0 0 16px rgba(251, 191, 36, 0.5);
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  margin: 0 0 1.1rem;
}
.gah-home-eyebrow::before {
  content: "";
  width: 11px; height: 11px;
  transform: rotate(45deg);
  border-radius: 2px;
  background: linear-gradient(135deg, var(--rc-accent), var(--rc-gold));
  box-shadow: 0 0 16px rgba(168, 85, 247, 0.9), 0 0 26px rgba(251, 191, 36, 0.5);
}
.gah-home-title {
  font-size: clamp(2.9rem, 8vw, 5.2rem);
  font-weight: 800;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  margin: 0;
  line-height: 0.98;
  /* bright face so every letter stays crisp; light at the top, soft violet lower */
  background: linear-gradient(176deg, #ffffff 0%, #ffffff 34%, #efe2ff 62%, #d3b3ff 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  /* real depth: short stacked violet extrusion under a bright face + drop-shadow glow */
  text-shadow:
    0 1px 0 #a35ef0, 0 2px 0 #8f4ee0,
    0 3px 0 #6f37bd, 0 5px 7px rgba(0, 0, 0, 0.6);
  filter:
    drop-shadow(0 0 26px rgba(168, 85, 247, 0.6))
    drop-shadow(0 0 56px rgba(251, 191, 36, 0.22));
  transform-style: preserve-3d;
  will-change: transform;
  animation: rc-title-float 8s ease-in-out infinite, rc-title-glow 4.5s ease-in-out infinite;
}
/* continuous slow 3D sway — enough to read as 3D, not enough to hurt legibility */
@keyframes rc-title-float {
  0%   { transform: rotateX(6deg) rotateY(-4.5deg) translateZ(0); }
  25%  { transform: rotateX(3deg) rotateY(0deg)    translateZ(12px); }
  50%  { transform: rotateX(6deg) rotateY(4.5deg)  translateZ(0); }
  75%  { transform: rotateX(3deg) rotateY(0deg)    translateZ(12px); }
  100% { transform: rotateX(6deg) rotateY(-4.5deg) translateZ(0); }
}
@keyframes rc-title-glow {
  0%, 100% { filter: drop-shadow(0 0 22px rgba(168, 85, 247, 0.5))  drop-shadow(0 0 46px rgba(251, 191, 36, 0.18)); }
  50%      { filter: drop-shadow(0 0 36px rgba(168, 85, 247, 0.85)) drop-shadow(0 0 70px rgba(251, 191, 36, 0.38)); }
}
/* JS pointer-parallax sets --rx / --ry; overrides the idle float on hover-capable devices */
@media (hover: hover) and (pointer: fine) {
  .gah-home:hover .gah-home-title {
    animation: rc-title-glow 4.5s ease-in-out infinite;
    transform: rotateX(calc(var(--ry, 0) * 1deg)) rotateY(calc(var(--rx, 0) * 1deg));
    transition: transform 0.18s ease-out;
  }
}
.gah-home-sub {
  margin: 1rem 0 0;
  font: 700 0.95rem/1 var(--rc-mono);
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: var(--rc-text-strong);
  text-shadow: 0 0 18px rgba(168, 85, 247, 0.55);
}
.gah-home-lead {
  margin: 2.2rem auto 0;
  max-width: 62ch;
  color: var(--rc-text);
  font-size: 1.08rem;
  line-height: 1.75;
}
.gah-home-cta {
  margin: 2.4rem 0 0;
  display: flex;
  gap: 1rem;
  justify-content: center;
  flex-wrap: wrap;
}
.gah-home-grid {
  margin: 3.2rem auto 0;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--rc-line);
  border: 1px solid rgba(168, 85, 247, 0.28);
  border-radius: 14px;
  overflow: hidden;
  max-width: 580px;
  box-shadow: 0 0 40px -12px rgba(168, 85, 247, 0.4);
}
.gah-home-grid > div {
  background: linear-gradient(180deg, var(--rc-surface-2), var(--rc-surface));
  padding: 1.4rem 0.8rem;
}
.gah-home-grid .k {
  display: block;
  font: 800 2.1rem/1 var(--rc-mono);
  color: var(--rc-gold);
  text-shadow: 0 0 20px rgba(251, 191, 36, 0.55);
}
.gah-home-grid .l {
  display: block;
  margin-top: 0.45rem;
  font-size: 0.68rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--rc-muted);
}
.gah-home-foot {
  margin: 2.6rem auto 0;
  max-width: 54ch;
  font-size: 0.8rem;
  color: var(--rc-muted);
}
@media (max-width: 560px) {
  .gah-home-grid { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  * { animation-duration: 0.001ms !important; transition-duration: 0.001ms !important; }
}

/* ==================================================== error pages ========= */
.gah-error {
  min-height: calc(100vh - 220px);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  text-align: center;
  padding: 3rem 1.5rem;
}
.gah-error-code {
  font: 800 clamp(4rem, 14vw, 8rem)/1 var(--rc-mono);
  letter-spacing: 0.02em;
  background: linear-gradient(180deg, #ffffff 0%, #f3e8ff 45%, #dcc4ff 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
  text-shadow: 0 2px 0 #7c3aed, 0 4px 14px rgba(0,0,0,0.5);
  filter: drop-shadow(0 0 30px rgba(168, 85, 247, 0.5));
}
.gah-error-title {
  margin: 0.6rem 0 0.4rem;
  font-size: clamp(1.1rem, 2.4vw, 1.5rem);
  font-weight: 700;
  color: var(--rc-text-strong);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.gah-error-sub {
  color: var(--rc-muted);
  max-width: 46ch;
  margin: 0 0 1.8rem;
  font-size: 0.95rem;
}
.gah-error .gah-error-actions { display: flex; gap: 0.8rem; flex-wrap: wrap; justify-content: center; }

/* ==================================================== ambient aurora ======
   A slow-drifting field of blurred colour behind every page — the "alive"
   layer a flat dark theme is missing. Pure CSS (opacity/transform only, so
   it stays cheap): three blobs cross-fade position over a long loop. Sits
   behind body::before's grid (z-index -3 < -1) and is skipped for players
   who asked for less motion. */
body::after {
  content: "";
  position: fixed;
  inset: -10%;
  z-index: -3;
  pointer-events: none;
  background:
    radial-gradient(38% 30% at 15% 20%, rgba(168, 85, 247, 0.30), transparent 70%),
    radial-gradient(32% 26% at 85% 15%, rgba(251, 191, 36, 0.16), transparent 70%),
    radial-gradient(40% 34% at 75% 85%, rgba(124, 58, 237, 0.24), transparent 70%),
    radial-gradient(30% 26% at 10% 85%, rgba(216, 180, 254, 0.14), transparent 70%);
  filter: blur(60px);
  animation: rc-aurora 26s ease-in-out infinite alternate;
}
@keyframes rc-aurora {
  0%   { transform: translate3d(0, 0, 0) scale(1); }
  33%  { transform: translate3d(2%, -2%, 0) scale(1.06); }
  66%  { transform: translate3d(-2%, 1.5%, 0) scale(1.03); }
  100% { transform: translate3d(1.5%, 2%, 0) scale(1.08); }
}
@media (prefers-reduced-motion: reduce) {
  body::after { animation: none; }
}

/* glassmorphism: let the aurora glow show through the main surfaces instead
   of flat gradients sitting on top of it */
.card, .modal-content, .jumbotron, .gah-panel, .auth-card,
.gah-podium-slot, .gah-award-card, .gah-field, .gah-sb-row,
.gah-leaderboard tbody tr, #challenge-window .modal-content {
  background: rgba(22, 16, 31, 0.62) !important;
  -webkit-backdrop-filter: blur(18px) saturate(140%);
  backdrop-filter: blur(18px) saturate(140%);
}
.gah-card {
  background: rgba(19, 14, 27, 0.58) !important;
  -webkit-backdrop-filter: blur(14px) saturate(140%);
  backdrop-filter: blur(14px) saturate(140%);
}

/* ================================================ hero 3D constellation === */
.gah-hero3d {
  position: absolute;
  top: -70px;
  left: 50%;
  transform: translateX(-50%);
  width: min(1500px, 150vw);
  height: 680px;
  z-index: 0;
  pointer-events: none;
  -webkit-mask-image: radial-gradient(60% 55% at 50% 46%, #000 55%, transparent 92%);
  mask-image: radial-gradient(60% 55% at 50% 46%, #000 55%, transparent 92%);
}
.gah-home > *:not(.gah-hero3d) { position: relative; z-index: 1; }
