body { font-size: 0.95rem; }
.card { border: none; box-shadow: 0 1px 3px rgba(0,0,0,.08); }
.card-header { background: #fff; border-bottom: 1px solid #e9ecef; font-weight: 600; }
.navbar-brand { font-weight: 600; }
.navbar .nav-link.active { background: rgba(255,255,255,.14); border-radius: .375rem; }
table td, table th { vertical-align: middle; }
.text-bg-warning h2, .text-bg-warning h6 { color: #212529; }
h2 { margin-bottom: 0; }

/* Long tables stay readable: the header sticks while the rows scroll.
   A sticky <th> leaves the collapsed border behind, which shows up as a white
   line under the header while scrolling - so the table is switched to separate
   borders and the header draws its own bottom edge with an inset shadow. */
.table-scroll { max-height: 68vh; overflow: auto; }
.table-scroll > table { border-collapse: separate; border-spacing: 0; }
.table-scroll thead th {
  position: sticky;
  top: 0;
  z-index: 2;
  background-color: var(--bs-table-bg, #212529);
  background-clip: padding-box;
  border-bottom: 0;
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
}
/* With separate borders every cell must draw its own row line. */
.table-scroll > table > tbody > tr > td { border-bottom: 1px solid var(--bs-border-color); }
.table-scroll > table > tbody > tr:last-child > td { border-bottom: 0; }

/* Sortable column headers. */
th[data-sort] { cursor: pointer; user-select: none; white-space: nowrap; }
th[data-sort]:hover { background-color: rgba(255,255,255,.1); }
.sort-ind { opacity: .8; }

/* Subscriber numbers, IPs and passwords are Latin/digits and must read
   left-to-right inside the RTL page. This may NOT touch `display`: the class is
   also put on <td> cells, and an inline-block cell drops out of the table grid
   (white gaps, broken row lines). Cells keep the RTL column alignment. */
.ltr { direction: ltr; unicode-bidi: embed; }
td.ltr, th.ltr { text-align: right; }

/* Selected row in the customers/orphans pickers. */
.list-group-item-action.active .text-muted { color: rgba(255,255,255,.75) !important; }
.row-selected { background-color: #e7f1ff !important; }
