/* ══════════════════════════════════════════════════════════════════
   RESET & BASE
   ══════════════════════════════════════════════════════════════════ */

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family:
    system-ui,
    -apple-system,
    "Segoe UI",
    Roboto,
    "Helvetica Neue",
    sans-serif;
  font-size: var(--fs-md);
  line-height: 1.5;
  background: var(--bg);
  color: var(--ink-2);
  min-width: 1100px;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

h1,
h2,
h3 {
  color: var(--ink);
  text-wrap: balance;
  line-height: 1.3;
}

/* Numbers in tables must line up column to column. */
table,
.cc-count,
.term-pick,
.roomcol .cap {
  font-variant-numeric: tabular-nums;
}

::selection {
  background: var(--eng-bg);
  color: var(--eng-title);
}

/* One focus ring for the whole app. Ink, offset, never removed. */
:focus-visible {
  outline: 2px solid var(--ring);
  outline-offset: 2px;
}
:focus:not(:focus-visible) {
  outline: none;
}

/* Standard thin scrollbars — the native control, just slimmer. */
.gridwrap,
.mcard ul,
.modal-card,
.table-scroll {
  scrollbar-width: thin;
  scrollbar-color: var(--line-strong) transparent;
}
