/* ============================================================================
   GAH 2026 · Challenge Arena — bespoke cyber-range board.
   Scoped to #gah-arena so it never leaks into the rest of the theme.
   ========================================================================== */

#gah-arena {
  --ga-ground: #0a0e17;
  --ga-panel: #0f1523;
  --ga-panel-2: #131c2e;
  --ga-panel-3: #172136;
  --ga-line: #1e2a3d;
  --ga-line-soft: #172032;
  --ga-ink: #c9d4e6;
  --ga-ink-strong: #eef3fb;
  --ga-muted: #7c8aa5;
  --ga-accent: #a855f7;
  --ga-accent-deep: #7c3aed;
  --ga-gold: #fbbf24;
  --ga-easy: #34d399;
  --ga-medium: #a855f7;
  --ga-hard: #fbbf24;
  --ga-critical: #fb3b6b;
  --ga-solved: #fbbf24;

  position: relative;
  z-index: 1;
  max-width: 1360px;
  margin: 0 auto;
  padding: 2rem 1.25rem 5rem;
  color: var(--ga-ink);
  font-family: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  -webkit-font-smoothing: antialiased;
}

/* full-bleed dark ground + faint grid, painted behind everything on this page */
body:has(#gah-arena) main[role="main"] {
  background:
    radial-gradient(1100px 460px at 82% -8%, rgba(168, 85, 247, 0.09), transparent 62%),
    linear-gradient(180deg, #0a0e17, #070a11);
}
body:has(#gah-arena) main[role="main"]::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  opacity: 0.5;
  background-image:
    linear-gradient(rgba(168, 85, 247, 0.045) 1px, transparent 1px),
    linear-gradient(90deg, rgba(168, 85, 247, 0.045) 1px, transparent 1px);
  background-size: 46px 46px;
  -webkit-mask-image: linear-gradient(180deg, #000, transparent 72%);
  mask-image: linear-gradient(180deg, #000, transparent 72%);
}

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

.mono {
  font-family: "JetBrains Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;
  font-variant-numeric: tabular-nums;
}

.gah-boot {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  padding: 5rem 0;
  justify-content: center;
  color: var(--ga-muted);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  font-size: 0.82rem;
}
.gah-boot-dot {
  width: 9px; height: 9px; border-radius: 50%;
  background: var(--ga-accent);
  box-shadow: 0 0 14px var(--ga-accent);
  animation: gah-pulse 1.1s ease-in-out infinite;
}
@keyframes gah-pulse { 0%,100% { opacity: 0.3; } 50% { opacity: 1; } }

/* ---------------------------------------------------------------- header ---- */
.gah-head {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 1.5rem 2rem;
  align-items: end;
  padding-bottom: 1.5rem;
  border-bottom: 1px solid var(--ga-line);
  overflow: hidden;
}
.gah-eyebrow {
  font-size: 0.7rem;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--ga-accent);
  margin: 0 0 0.55rem;
  display: flex; align-items: center; gap: 0.55rem;
}
.gah-eyebrow::before {
  content: "";
  width: 11px; height: 11px;
  transform: rotate(45deg);
  background: linear-gradient(135deg, var(--ga-accent), var(--ga-easy));
  box-shadow: 0 0 12px rgba(168, 85, 247, 0.7);
}
.gah-title {
  font-size: clamp(1.9rem, 4vw, 2.9rem);
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ga-ink-strong);
  margin: 0;
  line-height: 1.03;
  text-wrap: balance;
}
.gah-sub {
  margin: 0.5rem 0 0;
  color: var(--ga-muted);
  font-size: 0.98rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

/* progress cluster */
.gah-progress {
  display: flex;
  align-items: center;
  gap: 1.1rem;
}
@property --pct {
  syntax: "<number>";
  inherits: true;
  initial-value: 0;
}
.gah-ring {
  --pct: 0;
  width: 92px; height: 92px;
  border-radius: 50%;
  display: grid; place-items: center;
  background:
    radial-gradient(closest-side, var(--ga-panel) 70%, transparent 71% 100%),
    conic-gradient(from -90deg, var(--ga-gold) calc(var(--pct) * 1%), var(--ga-line) 0);
  flex: none;
  box-shadow: 0 0 0 1px var(--ga-line), 0 0 28px -12px rgba(168, 85, 247, 0.5);
  transition: --pct 1.1s cubic-bezier(.2,.8,.2,1), box-shadow 0.3s ease;
  animation: gah-ring-glow 3.2s ease-in-out infinite;
}
@keyframes gah-ring-glow {
  0%, 100% { box-shadow: 0 0 0 1px var(--ga-line), 0 0 24px -12px rgba(168, 85, 247, 0.5); }
  50%      { box-shadow: 0 0 0 1px var(--ga-line), 0 0 34px -8px rgba(251, 191, 36, 0.45); }
}
@media (prefers-reduced-motion: reduce) {
  .gah-ring { animation: none; transition: none; }
}
.gah-ring b {
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 1.2rem;
  color: var(--ga-ink-strong);
  font-weight: 700;
}
.gah-progress-meta { line-height: 1.5; }
.gah-progress-meta .k {
  font-family: "JetBrains Mono", ui-monospace, monospace;
  color: var(--ga-ink-strong);
  font-size: 1.15rem;
  font-weight: 700;
}
.gah-progress-meta .l {
  display: block;
  font-size: 0.68rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ga-muted);
}

/* --------------------------------------------------------------- toolbar ---- */
.gah-toolbar {
  position: sticky;
  top: 0;
  z-index: 20;
  display: flex;
  flex-wrap: wrap;
  gap: 0.7rem 1rem;
  align-items: center;
  margin: 1.25rem 0 0;
  padding: 0.85rem 0;
  background: linear-gradient(180deg, rgba(10, 14, 23, 0.96), rgba(10, 14, 23, 0.82));
  backdrop-filter: blur(6px);
  border-bottom: 1px solid var(--ga-line-soft);
}
.gah-search {
  position: relative;
  flex: 1 1 240px;
  min-width: 200px;
}
.gah-search input {
  width: 100%;
  padding: 0.6rem 0.8rem 0.6rem 2.2rem;
  background: var(--ga-panel);
  border: 1px solid var(--ga-line);
  border-radius: 7px;
  color: var(--ga-ink);
  font: inherit;
  letter-spacing: 0.02em;
}
.gah-search input::placeholder { color: var(--ga-muted); }
.gah-search input:focus {
  outline: none;
  border-color: var(--ga-accent-deep);
  box-shadow: 0 0 0 1px rgba(168, 85, 247, 0.25), 0 0 24px -8px rgba(168, 85, 247, 0.4);
}
.gah-search svg {
  position: absolute; left: 0.7rem; top: 50%;
  transform: translateY(-50%);
  width: 15px; height: 15px;
  stroke: var(--ga-muted); fill: none; stroke-width: 2;
}
.gah-filters {
  flex: 1 1 100%;
  display: flex;
  flex-wrap: wrap;
  gap: 0.7rem 1rem;
  align-items: center;
}
.gah-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}
.gah-chip {
  appearance: none;
  border: 1px solid var(--ga-line);
  background: var(--ga-panel);
  color: var(--ga-muted);
  font: 500 0.74rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 0.5rem 0.7rem;
  border-radius: 6px;
  cursor: pointer;
  transition: color 0.14s ease, border-color 0.14s ease, background 0.14s ease;
  white-space: nowrap;
}
.gah-chip:hover { color: var(--ga-ink); border-color: #2b3a54; }
.gah-chip[aria-pressed="true"] {
  color: #04121a;
  background: var(--ga-accent);
  border-color: var(--ga-accent);
}
.gah-chip.is-solvefilter[aria-pressed="true"] {
  background: var(--ga-solved); border-color: var(--ga-solved);
}
.gah-chip .dot {
  display: inline-block;
  width: 7px; height: 7px;
  border-radius: 50%;
  margin-right: 0.4rem;
  vertical-align: middle;
  background: currentColor;
}
.gah-toolbar-toggle { display: none; }

/* ------------------------------------------------------- featured briefing -- */
.gah-featured {
  --tier: var(--ga-accent);
  position: relative;
  display: flex;
  align-items: center;
  gap: 1.3rem;
  margin-top: 1.75rem;
  padding: 1.5rem 1.7rem;
  background:
    radial-gradient(560px 220px at 12% 0%, color-mix(in srgb, var(--cat-color, var(--ga-accent)) 16%, transparent), transparent 70%),
    linear-gradient(120deg, var(--ga-panel-3), var(--ga-panel-2));
  border: 1px solid var(--ga-line);
  border-left: 3px solid var(--tier);
  border-radius: 14px;
  overflow: hidden;
}
.gah-featured::after {
  content: "";
  position: absolute; inset: 0;
  background-image: repeating-linear-gradient(-45deg, rgba(255,255,255,0.025) 0 2px, transparent 2px 14px);
  pointer-events: none;
}
.gah-featured.is-clear {
  border-left-color: var(--ga-gold);
  background: linear-gradient(120deg, rgba(251, 191, 36, 0.1), var(--ga-panel-2));
}
.gah-featured-inner { position: relative; z-index: 1; }
.gah-featured-body { position: relative; z-index: 1; flex: 1 1 auto; min-width: 0; }
.gah-featured-eyebrow {
  display: block;
  font: 700 0.68rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--tier);
  margin: 0 0 0.4rem;
}
.gah-featured-title {
  margin: 0;
  font-size: clamp(1.15rem, 2.4vw, 1.55rem);
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--ga-ink-strong);
  text-wrap: balance;
}
.gah-featured-sub { margin: 0.5rem 0 0; color: var(--ga-muted); font-size: 0.92rem; max-width: 46ch; }
.gah-featured-meta {
  display: flex; align-items: center; gap: 0.8rem; margin-top: 0.6rem;
  font: 500 0.7rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.08em; text-transform: uppercase; color: var(--ga-muted);
}
.gah-featured-pts { color: var(--ga-ink-strong); font-weight: 700; }
.gah-featured-cta {
  position: relative; z-index: 1;
  flex: none;
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0.75rem 1.3rem;
  border: 0; border-radius: 9px;
  background: linear-gradient(135deg, var(--tier), color-mix(in srgb, var(--tier) 70%, #000));
  color: #04121a;
  font: 700 0.76rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.1em; text-transform: uppercase;
  cursor: pointer;
  transition: transform 0.14s ease, filter 0.14s ease;
}
.gah-featured-cta:hover { filter: brightness(1.1); transform: translateY(-2px); }

/* ------------------------------------------------------------- deck block --- */
.gah-decks { margin-top: 1rem; }
.gah-deck { margin-top: 2.4rem; }
.gah-deck-head {
  display: flex;
  align-items: baseline;
  gap: 0.9rem;
  flex-wrap: wrap;
  margin-bottom: 1rem;
}
.gah-deck-name {
  font: 700 0.82rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--ga-ink-strong);
  display: flex; align-items: center; gap: 0.6rem;
}
.gah-deck-name::before {
  content: "";
  width: 22px; height: 2px;
  background: var(--band, var(--ga-accent));
  box-shadow: 0 0 10px var(--band, var(--ga-accent));
}
.gah-deck[data-band="easy"]     { --band: var(--ga-easy); }
.gah-deck[data-band="medium"]   { --band: var(--ga-medium); }
.gah-deck[data-band="hard"]     { --band: var(--ga-hard); }
.gah-deck[data-band="critical"] { --band: var(--ga-critical); }

.gah-band-count {
  font: 500 0.76rem/1 "JetBrains Mono", ui-monospace, monospace;
  color: var(--ga-muted);
}
.gah-band-bar {
  flex: 1 1 120px;
  height: 3px;
  min-width: 80px;
  border-radius: 2px;
  background: var(--ga-line);
  overflow: hidden;
}
.gah-band-bar > span {
  display: block;
  height: 100%;
  width: 0;
  background: var(--band, var(--ga-accent));
  box-shadow: 0 0 10px var(--band, var(--ga-accent));
  transition: width 0.5s ease;
}

.gah-deck-viewport {
  position: relative;
  display: flex;
  align-items: stretch;
  gap: 0.6rem;
}
.gah-deck-track {
  flex: 1 1 auto;
  display: flex;
  gap: 0.95rem;
  overflow-x: auto;
  scroll-snap-type: x proximity;
  scroll-behavior: smooth;
  padding-bottom: 0.4rem;
  cursor: grab;
  scrollbar-width: thin;
  scrollbar-color: var(--ga-line) transparent;
}
.gah-deck-track.is-dragging { cursor: grabbing; scroll-snap-type: none; user-select: none; }
.gah-deck-track::-webkit-scrollbar { height: 6px; }
.gah-deck-track::-webkit-scrollbar-thumb { background: var(--ga-line); border-radius: 3px; }
.gah-deck-track > .gah-card {
  flex: 0 0 280px;
  scroll-snap-align: start;
}
.gah-deck-nav {
  flex: none;
  width: 34px;
  align-self: center;
  border: 1px solid var(--ga-line);
  background: var(--ga-panel);
  color: var(--ga-muted);
  border-radius: 8px;
  font-size: 1.1rem;
  line-height: 1;
  cursor: pointer;
  transition: color 0.14s ease, border-color 0.14s ease;
}
.gah-deck-nav:hover { color: var(--ga-ink-strong); border-color: var(--band, var(--ga-accent)); }

.gah-results { margin-top: 1rem; }
.gah-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(288px, 1fr));
  gap: 0.95rem;
}

/* ----------------------------------------------------------------- card ----- */
.gah-card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 0.8rem;
  padding: 1.15rem 1.15rem 1rem;
  text-align: left;
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent 40%),
    linear-gradient(180deg, var(--ga-panel-2), var(--ga-panel));
  border: 1px solid var(--ga-line);
  border-radius: 12px;
  cursor: pointer;
  color: inherit;
  font: inherit;
  overflow: hidden;
  transition: transform 0.14s ease, border-color 0.14s ease, box-shadow 0.14s ease;
  animation: gah-card-in 0.5s cubic-bezier(.2,.8,.2,1) both;
  animation-delay: calc(var(--i, 0) * 45ms);
}
@keyframes gah-card-in {
  from { opacity: 0; transform: translateY(14px) scale(0.97); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  .gah-card { animation: none; }
}
.gah-card::before {
  content: "";
  position: absolute;
  inset: 0 auto auto 0;
  width: 3px; height: 100%;
  background: var(--tier, var(--ga-accent));
  opacity: 0.75;
}
.gah-card::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 2px;
  background: linear-gradient(90deg, transparent, var(--tier, var(--ga-accent)), transparent);
  opacity: 0.35;
}
.gah-card:hover,
.gah-card:focus-visible {
  transform: translateY(-3px);
  border-color: var(--tier, var(--ga-accent));
  box-shadow: 0 14px 40px -18px rgba(0, 0, 0, 0.75),
              0 0 0 1px rgba(168, 85, 247, 0.12);
  outline: none;
}
.gah-card:focus-visible { box-shadow: 0 0 0 2px var(--ga-accent); }

.gah-card[data-tier="easy"]     { --tier: var(--ga-easy); }
.gah-card[data-tier="medium"]   { --tier: var(--ga-medium); }
.gah-card[data-tier="hard"]     { --tier: var(--ga-hard); }
.gah-card[data-tier="critical"] { --tier: var(--ga-critical); }

.gah-card-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0.6rem;
}
.gah-mono-badge {
  flex: none;
  width: 40px; height: 40px;
  display: grid; place-items: center;
  border-radius: 10px;
  background: var(--cat-color, var(--ga-accent));
  color: #04121a;
  font: 800 0.92rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.02em;
}
.gah-mono-badge--lg { width: 58px; height: 58px; border-radius: 14px; font-size: 1.2rem; flex: none; }
.gah-ribbon {
  position: absolute;
  top: 15px; right: -32px;
  width: 128px;
  padding: 0.22rem 0;
  text-align: center;
  transform: rotate(38deg);
  background: var(--tier, var(--ga-accent));
  color: #04121a;
  font: 700 0.6rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  box-shadow: 0 2px 10px -2px rgba(0, 0, 0, 0.5);
}
.gah-seal {
  display: none;
  position: absolute;
  top: 10px; right: 10px;
  width: 30px; height: 30px;
  border-radius: 50%;
  align-items: center; justify-content: center;
  background: var(--ga-solved);
  color: #04121a;
  font-size: 0.85rem;
  box-shadow: 0 0 16px -2px rgba(251, 191, 36, 0.8);
}
.gah-card.is-solved .gah-ribbon { display: none; }
.gah-card.is-solved .gah-seal { display: flex; }
.gah-num {
  font: 600 0.66rem/1 "JetBrains Mono", ui-monospace, monospace;
  color: var(--ga-muted);
  letter-spacing: 0.14em;
  text-transform: uppercase;
}
.gah-name {
  font-size: 1.02rem;
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--ga-ink-strong);
  line-height: 1.22;
  margin: 0;
}
.gah-card-meta {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 0.4rem 0.7rem;
  align-items: center;
  font: 500 0.68rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ga-muted);
}
.gah-cat { display: inline-flex; align-items: center; gap: 0.4rem; min-width: 0; }
.gah-cat .dot {
  width: 7px; height: 7px; border-radius: 50%;
  flex: none;
  background: var(--ga-accent);
}
.gah-pts {
  flex: none;
  color: var(--tier, var(--ga-ink-strong));
  font-weight: 700;
}
.gah-diff {
  padding: 0.22rem 0.5rem;
  border-radius: 4px;
  border: 1px solid var(--tier, var(--ga-accent));
  color: var(--tier, var(--ga-accent));
}
.gah-integrity {
  height: 3px;
  border-radius: 2px;
  background: var(--ga-line);
  position: relative;
  overflow: hidden;
}
.gah-integrity > span {
  position: absolute; inset: 0;
  width: 40%;
  background: linear-gradient(90deg, transparent, var(--tier, var(--ga-accent)), transparent);
  animation: gah-scan 2.6s linear infinite;
}
@keyframes gah-scan { from { transform: translateX(-120%); } to { transform: translateX(320%); } }

.gah-card-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  margin-top: 0.15rem;
}
.gah-status {
  font: 700 0.66rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ga-accent);
  display: inline-flex; align-items: center; gap: 0.4rem;
}
.gah-status::before {
  content: "";
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--ga-accent);
  box-shadow: 0 0 8px var(--ga-accent);
}
.gah-open {
  font: 600 0.66rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ga-accent);
  opacity: 0;
  transform: translateX(-4px);
  transition: opacity 0.14s ease, transform 0.14s ease;
}
.gah-card:hover .gah-open,
.gah-card:focus-visible .gah-open { opacity: 1; transform: translateX(0); }

/* -------- solved state — glowing gold -------- */
.gah-card.is-solved {
  --tier: var(--ga-solved);
  border-color: rgba(251, 191, 36, 0.55);
  background:
    linear-gradient(180deg, rgba(251, 191, 36, 0.08), transparent 42%),
    linear-gradient(180deg, var(--ga-panel-2), var(--ga-panel));
  box-shadow: 0 0 0 1px rgba(251, 191, 36, 0.2), 0 0 34px -14px rgba(251, 191, 36, 0.55);
}
.gah-card.is-solved::before { background: var(--ga-solved); opacity: 1; box-shadow: 0 0 14px var(--ga-solved); }
.gah-card.is-solved::after { background: var(--ga-solved); opacity: 0.85; }
.gah-card.is-solved .gah-name { color: var(--ga-ink-strong); }
.gah-card.is-solved .gah-num { color: var(--ga-solved); }
.gah-card.is-solved .gah-diff { border-color: var(--ga-solved); color: var(--ga-solved); }
.gah-card.is-solved .gah-status { color: var(--ga-solved); text-shadow: 0 0 12px rgba(251, 191, 36, 0.5); }
.gah-card.is-solved .gah-status::before {
  content: "\2714";               /* check mark */
  width: auto; height: auto;
  background: none;
  box-shadow: none;
  color: var(--ga-solved);
  font-size: 0.8rem;
  line-height: 1;
}
.gah-card.is-solved .gah-integrity > span {
  animation: none; width: 100%; opacity: 0.9;
  background: linear-gradient(90deg, transparent, var(--ga-solved), transparent);
}
.gah-card.is-solved .gah-open { color: var(--ga-solved); }

/* the moment of solving — gold shock-ring + flash */
.gah-card.just-solved { animation: gah-flash 1.3s ease; }
@keyframes gah-flash {
  0%   { box-shadow: 0 0 0 0 rgba(251, 191, 36, 0.7), 0 0 40px 4px rgba(251, 191, 36, 0.6); }
  60%  { box-shadow: 0 0 0 26px rgba(251, 191, 36, 0), 0 0 40px 4px rgba(251, 191, 36, 0.3); }
  100% { box-shadow: 0 0 0 26px rgba(251, 191, 36, 0), 0 0 0 0 rgba(251, 191, 36, 0); }
}

.gah-empty {
  grid-column: 1 / -1;
  padding: 2.5rem 1rem;
  text-align: center;
  color: var(--ga-muted);
  border: 1px dashed var(--ga-line);
  border-radius: 10px;
  font-size: 0.9rem;
}

/* ======================================================================
   Challenge workspace (the modal) — recast into the arena's language.
   The compiled challenges.js owns the markup; this is all presentation.
   ====================================================================== */
#challenge-window .modal-dialog { max-width: 680px; }
#challenge-window .modal-content {
  position: relative;
  overflow: hidden;
  background:
    radial-gradient(700px 240px at 90% -10%, rgba(168, 85, 247, 0.07), transparent 60%),
    linear-gradient(180deg, #131c2e, #0d1420);
  border: 1px solid #24324e;
  border-radius: 14px;
  box-shadow: 0 40px 120px -30px rgba(0, 0, 0, 0.8);
}
#challenge-window .modal-content::before {
  content: "";
  position: absolute; left: 12px; right: 12px; top: 0;
  height: 2px;
  border-radius: 2px;
  background: linear-gradient(90deg, transparent, #a855f7, transparent);
  z-index: 2;
}

/* open from inside to outside: the panel expands from a point at its own
   center instead of Bootstrap's plain fade+drop. Overrides Bootstrap's own
   `.modal.fade .modal-dialog` rule on specificity (id + 2 classes beats its
   1-class selector) — no JS hook needed, it rides the same `.show` class
   Bootstrap already toggles. */
#challenge-window.modal.fade .modal-dialog {
  transition: transform 0.42s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s ease;
  transform: scale(0.22);
  transform-origin: center center;
  opacity: 0;
}
#challenge-window.modal.show .modal-dialog {
  transform: scale(1);
  opacity: 1;
}
/* a glow aperture expanding outward from the center, in step with the scale */
#challenge-window .modal-content::after {
  content: "";
  position: absolute; inset: 0;
  z-index: 3;
  pointer-events: none;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(168, 85, 247, 0.55), transparent 65%);
  opacity: 0;
  transform: scale(0.05);
}
#challenge-window.modal.show .modal-content::after {
  animation: gah-expand-glow 0.55s cubic-bezier(0.16, 1, 0.3, 1) both;
}
@keyframes gah-expand-glow {
  0%   { transform: scale(0.05); opacity: 0.85; }
  100% { transform: scale(1.5); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  #challenge-window.modal.fade .modal-dialog { transition: opacity 0.2s ease; transform: none; }
  #challenge-window .modal-content::after { animation: none !important; }
}
#challenge-window .modal-body { padding: 1.4rem 1.6rem 1.6rem; }
#challenge-window .btn-close {
  filter: invert(1) grayscale(1) brightness(1.4);
  opacity: 0.5;
}
#challenge-window .btn-close:hover { opacity: 1; }

/* suppress the raw internal tags (num:/difficulty:/cat:) */
#challenge-window .challenge-tags { display: none; }

#challenge-window .nav-tabs {
  border-bottom: 1px solid #24324e;
  margin-top: 0.2rem;
}
#challenge-window .challenge-name {
  font-size: 1.5rem;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: #eef3fb;
  margin-top: 1.1rem;
  text-wrap: balance;
}
#challenge-window .challenge-value {
  font: 700 1rem/1 "JetBrains Mono", ui-monospace, monospace;
  color: #a855f7;
  letter-spacing: 0.08em;
}
#challenge-window .challenge-value::after {
  content: " PTS";
  font-size: 0.62rem;
  color: #7c8aa5;
}
#challenge-window .challenge-ratings i,
#challenge-window .challenge-attribution { color: #7c8aa5; }

#challenge-window .challenge-desc { display: block; margin: 1rem 0 0.5rem; }
#challenge-window .challenge-desc .lead { font-size: 1rem; line-height: 1.65; color: #c9d4e6; }
#challenge-window .challenge-desc h6 {
  font: 700 0.72rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #a855f7;
  margin: 1.1rem 0 0.5rem;
}
#challenge-window .challenge-desc ul { padding-left: 1.1rem; }
#challenge-window .challenge-desc li { margin: 0.25rem 0; color: #c9d4e6; }

/* chips embedded in the description (from the seed script) */
.modal .chip {
  display: inline-block;
  font: 600 0.66rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 0.3rem 0.6rem;
  border: 1px solid #24324e;
  border-radius: 5px;
  margin: 0 0.35rem 0.35rem 0;
  color: #a855f7;
}

/* hints — collapsible mission intel */
#challenge-window .challenge-hints details {
  background: #0f1523;
  border: 1px solid #1e2a3d;
  border-radius: 8px;
  padding: 0.1rem 0.9rem;
  margin-bottom: 0.5rem;
}
#challenge-window .challenge-hints summary {
  cursor: pointer;
  padding: 0.65rem 0;
  font: 600 0.74rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #7c8aa5;
  list-style: none;
}
#challenge-window .challenge-hints summary::before {
  content: "▸ ";
  color: #a855f7;
}
#challenge-window .challenge-hints details[open] summary { color: #eef3fb; }
#challenge-window .challenge-hints details[open] summary::before { content: "▾ "; }
#challenge-window .challenge-hints details > div { padding: 0 0 0.8rem; color: #c9d4e6; }

/* files */
#challenge-window .btn-file {
  border: 1px solid #24324e;
  color: #a855f7;
  background: #0f1523;
}
#challenge-window .btn-file:hover { border-color: #a855f7; background: rgba(168, 85, 247, 0.08); }

/* the flag submission bay */
#challenge-window .submit-row { margin-top: 1.3rem; }
#challenge-window .challenge-input {
  background: #0a1120;
  border: 1px solid #24324e;
  color: #eef3fb;
  font-family: "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.04em;
  padding: 0.75rem 0.9rem;
  height: auto;
}
#challenge-window .challenge-input:focus {
  border-color: #7c3aed;
  box-shadow: 0 0 0 2px rgba(168, 85, 247, 0.22), 0 0 26px -8px rgba(168, 85, 247, 0.4);
}
#challenge-window .challenge-submit {
  background: linear-gradient(135deg, #a855f7, #7c3aed);
  border: 0;
  color: #04121a;
  font: 700 0.78rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
#challenge-window .challenge-submit:hover { filter: brightness(1.08); color: #04121a; }

/* response banners */
#challenge-window .notification-row .alert { border-radius: 10px; margin-top: 1rem; }
#challenge-window .notification-row .alert-success {
  background: rgba(52, 211, 153, 0.12);
  border: 1px solid rgba(52, 211, 153, 0.45);
  color: #a7f3d0;
  box-shadow: 0 0 40px -14px rgba(52, 211, 153, 0.6);
}
#challenge-window .notification-row .alert-danger {
  background: rgba(244, 63, 94, 0.12);
  border: 1px solid rgba(244, 63, 94, 0.45);
  color: #fecdd3;
}

/* solves / submissions tables inside the modal */
#challenge-window .table { font-size: 0.86rem; }
#challenge-window .rating-buttons .btn.active { filter: brightness(1.15); }

/* --------------------------------------------------------------- responsive - */
@media (max-width: 860px) {
  .gah-head { grid-template-columns: 1fr; align-items: start; }
  .gah-progress { justify-content: flex-start; }
  .gah-featured { flex-wrap: wrap; }
  .gah-featured-cta { flex: 1 1 100%; justify-content: center; }
}
@media (max-width: 640px) {
  #gah-arena { padding: 1.4rem 0.9rem 4rem; }
  .gah-toolbar {
    flex-direction: column;
    align-items: stretch;
    gap: 0.6rem;
  }
  .gah-toolbar-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: space-between;
    background: var(--ga-panel);
    border: 1px solid var(--ga-line);
    color: var(--ga-ink);
    border-radius: 7px;
    padding: 0.6rem 0.8rem;
    font: 600 0.72rem/1 "JetBrains Mono", ui-monospace, monospace;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    cursor: pointer;
  }
  .gah-filters { display: none; flex-direction: column; gap: 0.7rem; }
  .gah-filters.open { display: flex; }
  .gah-chips { gap: 0.35rem; }
  .gah-grid { grid-template-columns: 1fr; }
  .gah-deck-nav { display: none; }
  .gah-deck-track > .gah-card { flex-basis: 78vw; }
  .gah-mono-badge--lg { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  #gah-arena *, #gah-arena *::before, #gah-arena *::after {
    animation-duration: 0.001ms !important;
    transition-duration: 0.001ms !important;
  }
}

/* light-theme guard: the arena stays dark on purpose (a console), but keep the
   surrounding chrome legible if the viewer forced a light theme */
:root[data-theme="light"] body:has(#gah-arena) main[role="main"] { background: #0a0e17; }

/* =========================================================== interaction fx */
.gah-card, .gah-podium-slot, .gah-award-card {
  transition: transform 0.12s ease-out, border-color 0.14s ease, box-shadow 0.14s ease;
  transform-style: preserve-3d;
  will-change: transform;
}

/* wrong-flag shake, applied to the challenge modal's content box */
@keyframes gah-shake-kf {
  10%, 90% { transform: translateX(-1px); }
  20%, 80% { transform: translateX(2px); }
  30%, 50%, 70% { transform: translateX(-6px); }
  40%, 60% { transform: translateX(6px); }
}
#challenge-window .modal-content.gah-shake {
  animation: gah-shake-kf 0.45s cubic-bezier(.36,.07,.19,.97) both;
  border-color: rgba(251, 59, 107, 0.6) !important;
  box-shadow: 0 0 0 1px rgba(251, 59, 107, 0.35), 0 40px 120px -30px rgba(0, 0, 0, 0.8) !important;
}

.gah-denied {
  position: absolute;
  left: 50%; top: -2.1rem;
  transform: translateX(-50%);
  font: 800 0.72rem/1 "JetBrains Mono", ui-monospace, monospace;
  letter-spacing: 0.18em;
  color: #fb3b6b;
  text-shadow: 0 0 14px rgba(251, 59, 107, 0.8);
  background: rgba(251, 59, 107, 0.12);
  border: 1px solid rgba(251, 59, 107, 0.5);
  padding: 0.3rem 0.7rem;
  border-radius: 5px;
  white-space: nowrap;
  animation: gah-denied-kf 0.9s ease forwards;
  pointer-events: none;
  z-index: 5;
}
@keyframes gah-denied-kf {
  0%   { opacity: 0; transform: translateX(-50%) translateY(6px) scale(0.9); }
  15%  { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); }
  75%  { opacity: 1; }
  100% { opacity: 0; transform: translateX(-50%) translateY(-8px) scale(0.96); }
}

/* "already claimed" trophy badge — shown the instant a flag is accepted,
   and again every time that solved challenge is reopened later. */
.gah-complete-badge {
  display: flex;
  align-items: center;
  gap: 0.8rem;
  padding: 0.8rem 1rem;
  margin-bottom: 1.1rem;
  border-radius: 10px;
  background: linear-gradient(120deg, rgba(251, 191, 36, 0.16), rgba(251, 191, 36, 0.04));
  border: 1px solid rgba(251, 191, 36, 0.4);
  box-shadow: 0 0 30px -14px rgba(251, 191, 36, 0.6);
  animation: gah-complete-in 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}
.gah-complete-ico {
  flex: none;
  width: 42px; height: 42px;
  display: grid; place-items: center;
  border-radius: 50%;
  color: #fbbf24;
  background: radial-gradient(circle at 30% 25%, rgba(251, 191, 36, 0.22), transparent 70%);
  box-shadow: 0 0 0 1px rgba(251, 191, 36, 0.45) inset;
}
.gah-complete-text { display: flex; flex-direction: column; gap: 0.15rem; }
.gah-complete-text b {
  font: 700 0.86rem/1.1 "IBM Plex Sans", system-ui, sans-serif;
  letter-spacing: 0.02em;
  color: #fde68a;
}
.gah-complete-text span {
  font: 500 0.72rem/1 "JetBrains Mono", ui-monospace, monospace;
  color: var(--ga-muted, #7c8aa5);
}
@keyframes gah-complete-in {
  0%   { opacity: 0; transform: scale(0.8) translateY(-6px); }
  100% { opacity: 1; transform: scale(1) translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .gah-complete-badge { animation: none; }
}
