:root { --bg:#f4f5f7; --card:#fff; --ink:#1f2933; --muted:#6b7280; --line:#d7dbe0;
  --err:#b00020; --errbg:#fdecea; --warn:#8a6d00; --warnbg:#fff8e1; --ok:#1b7f3b; --okbg:#e8f6ec;
  --accent:#1f4e78; }
* { box-sizing:border-box; }
body { margin:0; font:15px/1.5 -apple-system,Segoe UI,Roboto,Arial,sans-serif; color:var(--ink);
  background:var(--bg); }
body.centered { display:flex; min-height:100vh; align-items:center; justify-content:center; }
.topbar { display:flex; align-items:center; justify-content:space-between; background:var(--accent);
  color:#fff; padding:10px 20px; }
.topbar .brand { font-weight:700; }
.topbar nav a { color:#fff; margin-left:16px; text-decoration:none; }
.topbar nav a:hover { text-decoration:underline; }
.topbar nav a.muted { opacity:.8; }
main { max-width:920px; margin:24px auto; padding:0 16px; }
h1 { font-size:22px; } h2 { font-size:18px; margin-top:0; }
.card { background:var(--card); border:1px solid var(--line); border-radius:8px; padding:16px 18px;
  margin:14px 0; }
.card.login { width:320px; }
.login h1 { margin-top:0; } .login input, .login button { width:100%; margin-top:10px; }
fieldset { border:1px solid var(--line); border-radius:6px; margin:0 0 14px; padding:12px 14px; }
legend { font-weight:600; padding:0 6px; }
label { display:block; margin:8px 0; }
.row { display:flex; gap:12px; flex-wrap:wrap; }
.row label { flex:1; min-width:120px; }
input, select, button { font:inherit; padding:6px 8px; border:1px solid var(--line); border-radius:5px; }
input.tiny { width:64px; } input.mono, table.mono { font-family:ui-monospace,Menlo,monospace; }
button { cursor:pointer; background:#eef1f5; }
button.primary, .button.primary { background:var(--accent); color:#fff; border-color:var(--accent);
  padding:9px 18px; font-weight:600; }
.button { display:inline-block; text-decoration:none; padding:8px 14px; border:1px solid var(--line);
  border-radius:5px; color:var(--ink); background:#eef1f5; margin-top:8px; }
.muted { color:var(--muted); } .err { color:var(--err); } .warn { color:var(--warn); } .ok { color:var(--ok); }
.err-box { border-color:var(--err); background:var(--errbg); }
.warn-box { border-color:#e0c86a; background:var(--warnbg); }
.ok-box { border-color:#8fce9f; background:var(--okbg); }
.finding { padding:6px 0; border-bottom:1px dashed var(--line); }
.finding .hint { color:var(--muted); font-size:13px; margin-left:8px; }
table { border-collapse:collapse; width:100%; }
table.kv td:first-child { color:var(--muted); width:230px; }
table.grid th, table.grid td { border:1px solid var(--line); padding:6px 8px; text-align:left; }
table.grid thead { background:#eef1f5; }
table.mono td { padding:2px 8px; font-size:13px; }
tr.broken { color:var(--muted); font-style:italic; }
tr.bad td { background:var(--errbg); }
button:disabled { opacity:.5; cursor:not-allowed; }
pre.log { background:#0f1720; color:#d7e0ea; padding:10px; border-radius:6px; overflow:auto;
  font-size:12.5px; max-height:340px; }
.hidden { display:none; }
details.card-inner { border:1px solid var(--line); border-radius:6px; padding:8px 12px; margin-bottom:14px; }
summary { cursor:pointer; font-weight:600; }
ul.files { list-style:none; padding:0; } ul.files li { margin:4px 0; }
.running { font-size:16px; }
code { background:#eef1f5; padding:1px 5px; border-radius:4px; }
