/* === SPLIT-FILE-HEADER-START ===
   css/99-mobile.css — one of 12 files split from the original css/terminal.css (2.8.5 U-A2).
   Original lines 13079-13169. Pure ordered cut: content below is the
   content of that line range in the pre-split terminal.css, modulo
   trailing-blank-line normalization at section boundaries.

   NAMING: flat directory, gapped numeric prefix (05, 10, 15, ... 99) — deliberately
   NOT subfoldered. In CSS the file ORDER is semantics: equal-specificity ties
   resolve by source order, so scattering these across subfolders (css/base/,
   css/panels/, ...) would hide the one property that must stay obvious — what
   loads after what. A flat, numbered listing makes the cascade order visible
   in the directory listing itself, with no config to read. The numeric gaps
   (increments of 5) let a future file be inserted between two existing ones
   without renumbering the whole set. 99-mobile.css is reserved at the very
   end on purpose and must never load before anything else (see its own header).

   Do NOT reorder this file relative to its siblings in index.html <link> tags.
   Contents: Mobile Density Standard (Tier-1) — MUST stay last: every selector here has an earlier unconditional base rule elsewhere, and CSS resolves equal-specificity ties by source order (see header comment inside the file).
=== SPLIT-FILE-HEADER-END === */
/* ══════════════════════════════════════════════════════════════
   99-mobile.css — cascade slot 99: the Mobile Density Standard
   (Tier-1) — narrow-phone (<=480px) spacing/sizing overrides layered
   on top of the board/panel chrome, faction/status/perk/skill tiles,
   and UPLINK transcript padding that every earlier file already
   defines.
   WHY HERE (GOTCHA — load-bearing, do not reorder): this file MUST
   load LAST. Every selector in it (details.bay-board, .panel.bay-board,
   .bay-grid, .facon-chan, .stlamp-tile, etc.) already has an earlier,
   UNCONDITIONAL base rule somewhere in files 05-55, at the SAME
   specificity as the rule here. CSS resolves an equal-specificity tie
   by SOURCE ORDER — the rule that appears later in the concatenated
   cascade wins — not by which @media condition is "more specific."
   If this file loaded earlier than one of those base rules, its
   (max-width:480px) override would be silently beaten by the later,
   unconditional desktop-and-mobile rule and the mobile density
   tightening would simply not apply, with no error or warning of any
   kind. Placing it last guarantees it always wins at <=480px
   regardless of where a future edit adds a same-selector rule
   anywhere earlier in the cascade. This is the single most important
   ordering fact in this whole 12-file split.
   ══════════════════════════════════════════════════════════════ */
/* ─── Mobile Density Standard — Tier-1 safe tightening ─────────────
   (planning/MOBILE_DENSITY_PLAN.md §2/§3, owner-approved Tier-1 only).
   Deliberately placed at the END of the file: every selector below already
   has an earlier, unconditional base rule elsewhere in this stylesheet, and
   CSS resolves equal-specificity ties by source order — an override placed
   before its own base rule would be silently beaten by it. Living here
   guarantees this block always wins at ≤480px regardless of where a future
   edit adds a same-selector rule earlier in the file.
   Spacing/sizing-only, behaviour-identical, desktop untouched (scoped to
   this narrow-phone query, never the ≥1000px hover/pointer desktop gate —
   Suite 129). Every trimmed interactive tile stays ≥28px (Protocol 17);
   the F2 .bay-part-no subtitle is NEVER hidden, only its margin tightens
   (Protocol 25 searchable-label guardrail). Reclaims the shared board
   chrome (~30 boards), the faction/status/perk/skill tile surplus padding,
   and the UPLINK transcript padding — roughly a phone-screen off the
   longest boards with zero behaviour change. */
@media (max-width: 480px) {
  :root {
    --d-board-pad-block: 7px;
    --d-board-pad-btm: 8px;
    --d-board-pad-inline: 8px;
    --d-board-gap: 8px;
    --d-section-gap: 8px;
    --d-subtitle-mb: 4px;
  }

  /* F1 — shared board shell padding + inter-board gap (all ~30 boards) */
  details.bay-board {
    padding: var(--d-board-pad-block) var(--d-board-pad-inline) var(--d-board-pad-btm);
  }
  .panel.bay-board {
    margin-top: var(--d-board-gap);
  }
  .bay-grid {
    gap: var(--d-board-gap);
  }
  details.sub-panel {
    margin-top: var(--d-board-gap);
  }

  /* F2 — header subtitle margin (every board). Never display:none — the
     real, searchable control label must always ride along (Protocol 25). */
  .bay-part-no {
    margin: 1px 0 var(--d-subtitle-mb);
  }

  /* F3 — FACTION STANDING keycaps + meter wrap. Floor: 34px ≥ 28px. */
  .facon-chan {
    min-height: 34px;
  }
  .facon-meter-wrap {
    padding: 8px 10px 9px;
  }

  /* F4 — STATUS EFFECTS lamp tiles. Floor: .stlamp-purge stays 28px (untouched). */
  .stlamp-tile {
    padding: 6px 9px 7px;
  }
  .stlamp-grid {
    gap: 6px;
  }

  /* F5 — PERK LOADOUT / SKILL BOOKS / SKILL MAGAZINES slot rows.
     Floor: the inner .pk-x delete button stays 28px (untouched). */
  .slot-row {
    padding: 5px 8px;
    margin-bottom: 5px;
  }

  /* F6 — SKILL MATRIX VU rows. Floor: .vu-track drag surface (20px height,
     arrow-key + drag input) is untouched. */
  .vu-row {
    padding: 3px 0;
  }

  /* F7 — DIRECTOR UPLINK transcript + composer.
     Floor: .composer-input stays 16px font / 40px min-height (untouched). */
  #chatDisplay {
    padding: 10px;
    gap: 10px;
  }
  .composer {
    padding: 6px 10px 8px;
  }

  /* F8 — inner readout/light rows (board bodies app-wide). */
  .op-light-row {
    margin-top: 6px;
    padding-top: 6px;
  }
}
