/* PULSE404 skin for CTFd core theme (Bootstrap 5). Palette matches the SPIRAL site. */
:root, [data-bs-theme="light"], [data-bs-theme="dark"] {
  --pulse-bg: #070B15;
  --pulse-surface: #111A2D;
  --pulse-line: #29344B;
  --pulse-accent: #A8B8FF;
  --pulse-text: #F3F5FF;
  --pulse-muted: #AAB4CA;
  --bs-body-bg: var(--pulse-bg);
  --bs-body-color: var(--pulse-text);
  --bs-body-bg-rgb: 7, 11, 21;
  --bs-body-color-rgb: 243, 245, 255;
  --bs-border-color: var(--pulse-line);
  --bs-secondary-color: var(--pulse-muted);
  --bs-link-color: var(--pulse-accent);
  --bs-link-hover-color: #fff;
  --bs-primary: var(--pulse-accent);
  --bs-primary-rgb: 168, 184, 255;
  --bs-tertiary-bg: var(--pulse-surface);
  --bs-secondary-bg: var(--pulse-surface);
}
body {
  background: var(--pulse-bg) !important;
  color: var(--pulse-text);
  background-image: linear-gradient(rgba(168,184,255,.035) 1px, transparent 1px), linear-gradient(90deg, rgba(168,184,255,.035) 1px, transparent 1px);
  background-size: 48px 48px;
}
h1, h2, h3, h4, h5, .navbar-brand { font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; letter-spacing: -.01em; }
.jumbotron, .bg-light { background: var(--pulse-surface) !important; color: var(--pulse-text) !important; }
.navbar, .navbar.bg-dark { background: rgba(7,11,21,.92) !important; border-bottom: 1px solid var(--pulse-line); backdrop-filter: blur(6px); }
.navbar-brand { font-weight: 700; letter-spacing: .06em; }
.navbar .nav-link { text-transform: uppercase; font: 600 12px ui-monospace, Menlo, monospace; letter-spacing: .1em; color: var(--pulse-muted) !important; }
.navbar .nav-link:hover, .navbar .nav-link.active { color: var(--pulse-accent) !important; }
.card, .modal-content, .dropdown-menu, .list-group-item, .table, .form-control, .form-select, .input-group-text, .accordion-item {
  background-color: var(--pulse-surface) !important; color: var(--pulse-text) !important; border-color: var(--pulse-line) !important; border-radius: 2px;
}
.form-control:focus, .form-select:focus { border-color: var(--pulse-accent) !important; box-shadow: 0 0 0 .15rem rgba(168,184,255,.25); }
.table > :not(caption) > * > * { background-color: transparent; color: var(--pulse-text); border-bottom-color: var(--pulse-line); }
.table-striped > tbody > tr:nth-of-type(odd) > * { background-color: rgba(168,184,255,.04); }
.btn { border-radius: 2px; font-family: ui-monospace, Menlo, monospace; letter-spacing: .06em; text-transform: uppercase; font-size: 12px; font-weight: 600; }
.btn-primary, .btn-outline-primary:hover { background: var(--pulse-accent) !important; border-color: var(--pulse-accent) !important; color: var(--pulse-bg) !important; }
.btn-outline-primary { color: var(--pulse-accent) !important; border-color: var(--pulse-accent) !important; }
.btn-dark, .btn-secondary { background: var(--pulse-surface) !important; border-color: var(--pulse-line) !important; color: var(--pulse-text) !important; }
.challenge-button { background: var(--pulse-surface) !important; border: 1px solid var(--pulse-line) !important; color: var(--pulse-text) !important; }
.challenge-button:hover { border-color: var(--pulse-accent) !important; }
.challenge-button.solved-challenge { border-color: #6be3a4 !important; }
.nav-tabs .nav-link.active, .nav-pills .nav-link.active { background: var(--pulse-surface); color: var(--pulse-accent); border-color: var(--pulse-line); }
.text-muted, .text-secondary { color: var(--pulse-muted) !important; }
.badge.bg-primary { background: var(--pulse-accent) !important; color: var(--pulse-bg); }
footer, .footer { color: var(--pulse-muted); }
@media (prefers-reduced-motion: no-preference) { .btn, .challenge-button { transition: border-color .15s, background-color .15s, color .15s; } }

/* Plotly charts (scoreboard/team graphs): keep legend and axis text readable on dark */
.js-plotly-plot .legend text,
.js-plotly-plot .xtick text,
.js-plotly-plot .ytick text,
.js-plotly-plot .gtitle { fill: #cbd5e1 !important; }
