/* ═════════════════════════════════════════════════════════════════════
   PULSE Compatibility — "HRDP data grid / readiness console"
   The searchable game-compatibility matrix in the v3 instrument language:
   near-black canvas, a cyan title channel rule, a monospace search console,
   the matrix as a hairline data grid with sticky mono column headers +
   tabular numerals, semantic status pills, the request CTA as an instrument
   panel. Rows are injected by /js/compatibility-page.js (externalised from a
   CSP-blocked inline <script> that left this page stuck on "Loading…").

   Scoped under .compat-page. Depends on shared.css + tokens-v3.css + bg.css.
   ═════════════════════════════════════════════════════════════════════ */

.compat-page {
  font-family: var(--font-display);
  background: var(--ink-0);
  color: var(--text-1);
  line-height: var(--lead-body);
}

.compat-page main {
  position: relative;
  z-index: var(--z-content);
  max-width: 1100px;
  margin: 0 auto;
  padding: clamp(112px, 14vh, 144px) var(--sp-6) var(--sp-8);
}

/* ── Header ─────────────────────────────────────────────────────────── */
.compat-page h1 {
  position: relative;
  font-family: var(--font-display);
  font-size: clamp(2rem, 5vw, 3rem);
  font-weight: 700;
  letter-spacing: var(--track-mega);
  line-height: 1.05;
  margin: 0 0 var(--sp-3);
  padding-top: var(--sp-4);
  color: var(--text-1);
}
.compat-page h1::before {
  content: '';
  position: absolute;
  top: 0; inset-inline-start: 0;
  width: 48px; height: 2px;
  background: linear-gradient(90deg, var(--c-500), transparent);
}
.compat-page .sub {
  color: var(--text-2);
  font-size: var(--tx-sm);
  max-width: 75ch;
  margin: 0 0 var(--sp-6);
  line-height: var(--lead-body);
}
.compat-page .sub strong { color: var(--text-1); font-weight: 700; }
.compat-page .sub em { color: var(--c-400); font-style: normal; }
.compat-page .sub a { color: var(--c-400); text-decoration: underline; text-underline-offset: 2px; }

/* ── Search console ─────────────────────────────────────────────────── */
.compat-page .controls {
  display: flex;
  gap: var(--sp-3);
  align-items: center;
  margin: var(--sp-6) 0 var(--sp-4);
  flex-wrap: wrap;
}
.compat-page .search {
  flex: 1 1 280px;
  padding: 12px 16px;
  border: 1px solid var(--line-2);
  background: oklch(0.06 0.005 250 / 0.6);
  color: var(--text-1);
  border-radius: var(--r-2);
  font-family: var(--font-mono);
  font-size: var(--tx-sm);
  letter-spacing: 0.01em;
}
.compat-page .search::placeholder { color: var(--text-4); }
.compat-page .search:focus {
  outline: none;
  border-color: var(--line-accent);
  box-shadow: 0 0 0 3px oklch(0.78 0.16 184 / 0.10);
}
.compat-page .count {
  font-family: var(--font-mono);
  color: var(--text-2);
  font-size: var(--tx-xs);
  letter-spacing: 0.04em;
  font-variant-numeric: tabular-nums;
}

/* ── Matrix → hairline data grid ────────────────────────────────────── */
.compat-page .compat-table-wrap {
  border: 1px solid var(--line-2);
  border-radius: var(--r-3);
  background: oklch(0.08 0.006 250 / 0.4);
  overflow-x: auto;       /* wide grid scrolls on small screens */
  margin-top: var(--sp-3);
}
.compat-page table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--tx-sm);
  min-width: 720px;       /* keep columns legible; wrapper scrolls under this */
}
.compat-page th,
.compat-page td {
  text-align: start;
  padding: 12px 14px;
  border-bottom: 1px solid var(--line-1);
}
.compat-page thead th {
  font-family: var(--font-mono);
  font-weight: 700;
  color: var(--text-2);
  text-transform: uppercase;
  font-size: 10px;
  letter-spacing: var(--track-eyebrow);
  position: sticky;
  top: 0;
  background: oklch(0.07 0.006 250);
  z-index: 1;
  white-space: nowrap;
}
.compat-page tbody tr:last-child td { border-bottom: 0; }
.compat-page tbody tr { transition: background var(--dur-1) var(--ease-out-quart); }
.compat-page tbody tr:hover { background: oklch(0.78 0.16 184 / 0.04); }
.compat-page td.name { font-weight: 600; color: var(--text-1); }
.compat-page td.mono,
.compat-page th.mono {
  font-family: var(--font-mono);
  font-size: var(--tx-xs);
  color: var(--text-2);
  font-variant-numeric: tabular-nums;
}

/* ── Status pills (keys emitted by compatibility-page.js) ───────────── */
.compat-page .pill {
  display: inline-block;
  padding: 3px 10px;
  border-radius: var(--r-1);
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  white-space: nowrap;
  border: 1px solid transparent;
}
.compat-page .pill-ready       { background: oklch(0.78 0.18 155 / 0.12); color: var(--green-400); border-color: oklch(0.78 0.18 155 / 0.3); }
.compat-page .pill-untested    { background: oklch(0.82 0.17 85 / 0.12);  color: var(--amber-400); border-color: oklch(0.82 0.17 85 / 0.3); }
.compat-page .pill-unsupported { background: oklch(0.66 0.24 25 / 0.12);  color: var(--red-400);   border-color: oklch(0.66 0.24 25 / 0.3); }
.compat-page .pill-none        { background: var(--line-1); color: var(--text-2); }

/* ── Empty / loading / error states ─────────────────────────────────── */
.compat-page .state {
  padding: var(--sp-8) var(--sp-4);
  text-align: center;
  color: var(--text-2);
  font-family: var(--font-mono);
  font-size: var(--tx-xs);
  letter-spacing: 0.04em;
  border: 1px dashed var(--line-2);
  border-radius: var(--r-3);
  margin-top: var(--sp-3);
}
.compat-page .state .err { color: var(--red-400); }

/* ── Request CTA → instrument panel ─────────────────────────────────── */
.compat-page .request-cta {
  position: relative;
  margin: var(--sp-8) 0 0;
  padding: var(--sp-6);
  border: 1px solid var(--line-2);
  background: oklch(0.08 0.006 250 / 0.5);
  border-radius: var(--r-3);
  box-shadow: var(--shadow-1), var(--inner-bevel);
  overflow: hidden;
}
.compat-page .request-cta::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0; height: 2px;
  background: linear-gradient(90deg, transparent, var(--c-500), transparent);
}
.compat-page .request-cta h2 {
  margin: 0 0 var(--sp-2);
  font-family: var(--font-display);
  font-size: var(--tx-lg);
  font-weight: 700;
  letter-spacing: var(--track-tight);
  color: var(--text-1);
}
.compat-page .request-cta p { margin: 0 0 var(--sp-4); color: var(--text-2); font-size: var(--tx-sm); }
.compat-page .request-form { display: flex; gap: var(--sp-3); flex-wrap: wrap; align-items: center; }
.compat-page .request-input {
  flex: 1 1 280px;
  padding: 11px 14px;
  border: 1px solid var(--line-2);
  background: oklch(0.06 0.005 250 / 0.6);
  color: var(--text-1);
  border-radius: var(--r-2);
  font-family: var(--font-mono);
  font-size: var(--tx-sm);
}
.compat-page .request-input::placeholder { color: var(--text-4); }
.compat-page .request-input:focus { outline: none; border-color: var(--line-accent); box-shadow: 0 0 0 3px oklch(0.78 0.16 184 / 0.10); }
.compat-page .request-btn {
  padding: 11px 20px;
  background: var(--c-500);
  color: #04201e;
  border: 0;
  border-radius: var(--r-2);
  font-family: var(--font-mono);
  font-weight: 700;
  font-size: var(--tx-xs);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  cursor: pointer;
  box-shadow: var(--inner-bevel);
  transition: filter var(--dur-2) var(--ease-out-quart), transform var(--dur-2) var(--ease-out-quart);
}
.compat-page .request-btn:hover:not(:disabled) { filter: brightness(1.06); transform: translateY(-1px); }
.compat-page .request-btn:disabled { opacity: 0.35; cursor: not-allowed; }
.compat-page .request-hint {
  margin-top: var(--sp-3);
  font-family: var(--font-mono);
  font-size: var(--tx-2xs);
  letter-spacing: 0.02em;
  color: var(--text-2);
  min-height: 1.4em;
}
.compat-page .request-hint.err { color: var(--red-400); }

/* ── Footer ─────────────────────────────────────────────────────────── */
.compat-page footer {
  max-width: 1100px;
  margin: 0 auto;
  padding: var(--sp-7) var(--sp-6) var(--sp-9);
  color: var(--text-2);
  font-size: var(--tx-xs);
  text-align: center;
  position: relative;
  z-index: var(--z-content);
  line-height: var(--lead-body);
}
.compat-page footer a { color: var(--c-400); text-decoration: none; }
.compat-page footer a:hover { text-decoration: underline; }
.compat-page footer code {
  font-family: var(--font-mono);
  font-size: var(--tx-2xs);
  background: oklch(0.06 0.005 250 / 0.6);
  border: 1px solid var(--line-2);
  border-radius: var(--r-1);
  padding: 1px 6px;
  color: var(--text-2);
}

/* ── Light-mode surfaces ────────────────────────────────────────────── */
[data-theme="light"] .compat-page .compat-table-wrap,
[data-theme="light"] .compat-page .request-cta { background: oklch(0.99 0.003 250 / 0.7); }
[data-theme="light"] .compat-page thead th { background: oklch(0.94 0.005 250); }
[data-theme="light"] .compat-page .search,
[data-theme="light"] .compat-page .request-input { background: oklch(0.97 0.004 250 / 0.9); }
[data-theme="light"] .compat-page .sub a,
[data-theme="light"] .compat-page footer a,
[data-theme="light"] .compat-page .sub em { color: var(--c-800); }
[data-theme="light"] .compat-page tbody tr:hover { background: oklch(0.78 0.16 184 / 0.08); }
/* Pills: the bright signal greens/ambers/reds need darker text on the
   light-tinted chips to meet AA in light mode. */
[data-theme="light"] .compat-page .pill-ready       { color: oklch(0.46 0.14 155); background: oklch(0.78 0.18 155 / 0.16); }
[data-theme="light"] .compat-page .pill-untested    { color: oklch(0.50 0.11 75);  background: oklch(0.82 0.17 85 / 0.18); }
[data-theme="light"] .compat-page .pill-unsupported { color: oklch(0.50 0.20 25);  background: oklch(0.66 0.24 25 / 0.14); }
