/* muster status page and its sign-in (D146). Served without sign-in. */
:root { --fg: #1b1f23; --muted: #5b636b; --bg: #fbfbf9; --line: #d8dbde; --ok: #1d6b3a; --bad: #a3251c; --accent: #2b4a6f; }
@media (prefers-color-scheme: dark) {
  :root { --fg: #e6e8ea; --muted: #9aa2aa; --bg: #15181b; --line: #30363c; --ok: #6fcf8f; --bad: #ff8a80; --accent: #9cc0e8; }
}
* { box-sizing: border-box; }
body { margin: 0; background: var(--bg); color: var(--fg); font: 15px/1.45 system-ui, sans-serif; }
main { max-width: 72rem; margin: 0 auto; padding: 16px; }
h1 { font-size: 1.6rem; margin: 0 0 .3rem; }
h2 { font-size: 1.15rem; margin: 1.6rem 0 .4rem; border-bottom: 1px solid var(--line); padding-bottom: .2rem; }
h3 { font-size: 1rem; margin: 1rem 0 .3rem; }
a { color: var(--accent); }
.eyebrow { text-transform: uppercase; letter-spacing: .08em; font-size: .75rem; color: var(--muted); margin: 0; }
.src, small, .small { color: var(--muted); font-size: .82rem; }
.na { color: var(--muted); font-style: italic; }
.ok { color: var(--ok); font-weight: 600; }
.bad { color: var(--bad); font-weight: 600; }
.note { color: var(--muted); }
.tw { overflow-x: auto; -webkit-overflow-scrolling: touch; }
table { border-collapse: collapse; width: 100%; font-size: .88rem; }
th, td { text-align: left; vertical-align: top; padding: .35rem .5rem; border-bottom: 1px solid var(--line); }
th { color: var(--muted); font-weight: 600; white-space: nowrap; }
code { font-family: ui-monospace, monospace; font-size: .85em; }
.gate { max-width: 24rem; margin: 10vh auto; }
.gate label { display: block; margin-top: .8rem; font-weight: 600; }
.gate input { width: 100%; padding: .55rem; font: inherit; border: 1px solid var(--line); border-radius: 4px; background: var(--bg); color: var(--fg); }
.gate button { margin-top: 1.1rem; width: 100%; padding: .65rem; font: inherit; font-weight: 600; border: 0; border-radius: 4px; background: var(--accent); color: var(--bg); }
.err { color: var(--bad); font-weight: 600; }
/* Honeypot: off-screen decoy field no human sees or tabs to. A submitted
   non-empty value marks the sender a bot (D146 tarpit). Not display:none,
   which some bots skip; positioned out of view instead. */
.trap { position: absolute; left: -9999px; top: auto; width: 1px; height: 1px; overflow: hidden; }
.trap input { width: 1px; }

/* Sign-in page background (D146). The image is a host asset in the gate's
   public dir (served without sign-in, like status.css); it is not in the
   repo, which stays ASCII-only. Scoped to body.signin so the status board
   keeps its plain background. The card gets a solid panel for contrast. */
body.signin { background: var(--bg) url("/signin-bg.png") center center / cover no-repeat fixed; }
body.signin .gate { background: var(--bg); padding: 1.5rem 1.6rem; border-radius: 10px; box-shadow: 0 6px 30px rgba(0, 0, 0, .45); }
