/* THE FINAL WHISTLE — shared styles */
:root{
  --navy:#0e1a33; --navy2:#14254a; --cream:#efe7d2; --paper:#f6f1e2;
  --ink:#1a1f2b; --red:#9b2222; --gold:#c9a45a; --green:#1f7a44;
  --muted:#7d8598; --line:#2a3a5c;
}
*{box-sizing:border-box}
html{color-scheme:light}
body{
  margin:0; font-family:"Segoe UI",Helvetica,Arial,sans-serif;
  background:#0a1122; color:var(--cream);
  background-image:radial-gradient(circle at 20% -10%,#1a2c52 0%,#0a1122 55%);
  min-height:100vh; line-height:1.6;
}
a{color:var(--gold)}
.wrap{max-width:920px;margin:0 auto;padding:28px 20px 80px}
.mono{font-family:"Consolas","SFMono-Regular",monospace}

/* header / kicker */
.kicker{letter-spacing:.35em;text-transform:uppercase;color:var(--gold);font-size:12px;font-weight:700}
h1.title{font-size:clamp(28px,5vw,46px);margin:.15em 0 .1em;letter-spacing:.04em;text-transform:uppercase}
.sub{color:var(--muted);margin-top:0}
.rule{height:2px;background:linear-gradient(90deg,transparent,var(--gold),transparent);margin:22px 0}

/* case number badge */
.badge{display:inline-block;border:2px solid var(--gold);color:var(--gold);
  border-radius:50%;width:54px;height:54px;line-height:50px;text-align:center;
  font-weight:800;font-size:20px;letter-spacing:1px}

/* panels */
.panel{background:rgba(246,241,226,.05);border:1px solid var(--line);
  border-radius:12px;padding:22px 24px;margin:18px 0}
.note{background:#161b12;border-left:4px solid var(--gold);color:#e9e2c7;
  padding:16px 20px;border-radius:6px;margin:18px 0;font-style:italic}
.note .sig{display:block;text-align:right;font-style:normal;color:var(--gold);margin-top:8px}
.hq{background:#0f1f16;border-left:4px solid var(--green);padding:14px 18px;border-radius:6px;margin:16px 0}
.warn{background:#231313;border-left:4px solid var(--red);padding:14px 18px;border-radius:6px}

/* paper / evidence look */
.paper{background:var(--paper);color:var(--ink);border-radius:6px;padding:26px 30px;
  box-shadow:0 10px 30px rgba(0,0,0,.5);position:relative}
.paper h2,.paper h3{color:#20304f}
.stamp{position:absolute;top:14px;right:18px;transform:rotate(8deg);
  border:3px solid var(--red);color:var(--red);padding:4px 12px;border-radius:6px;
  font-weight:800;letter-spacing:3px;opacity:.75;font-size:14px}

/* buttons + inputs */
.btn{display:inline-block;background:var(--gold);color:#20180a;border:none;
  padding:11px 20px;border-radius:8px;font-weight:700;cursor:pointer;
  text-decoration:none;font-size:15px}
.btn:hover{filter:brightness(1.08)}
.btn.ghost{background:transparent;border:1px solid var(--gold);color:var(--gold)}
input[type=text],input[type=password]{
  background:#0b1020;border:1px solid var(--line);color:var(--cream);
  padding:11px 14px;border-radius:8px;font-size:16px;letter-spacing:.12em;width:100%;max-width:340px}
input:focus{outline:2px solid var(--gold)}
.field{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:10px}
.err{color:#ff8a8a;font-weight:600;margin-top:8px;min-height:22px}
.ok{color:#7fe0a2;font-weight:600;margin-top:8px;min-height:22px}

/* corkboard hub */
.board{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:20px;margin-top:24px}
.case{background:var(--paper);color:var(--ink);border-radius:8px;padding:18px;
  position:relative;box-shadow:0 8px 22px rgba(0,0,0,.45);transition:transform .12s}
.case:hover{transform:translateY(-3px)}
.case .cno{font-weight:800;color:var(--red);letter-spacing:2px;font-size:13px}
.case h3{margin:.3em 0 .2em;color:#1a2540;font-size:19px}
.case .theme{color:#5b6472;font-size:13px;min-height:34px}
.case .lockrow{margin-top:12px}
.case.locked{filter:saturate(.6)}
.case .status{font-size:12px;font-weight:700;letter-spacing:1px;text-transform:uppercase}
.case.open .status{color:var(--green)}
.case.locked .status{color:var(--red)}
.pin{position:absolute;top:-8px;left:50%;transform:translateX(-50%);
  width:16px;height:16px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#ff7a7a,#8f1a1a)}

/* suspect grid (P5) */
.suspects{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:16px}
.suspect{background:var(--paper);color:var(--ink);border-radius:8px;padding:14px;position:relative;cursor:pointer;border:2px solid transparent}
.suspect .face{width:100%;height:110px;border-radius:6px;background:#c9c2ab;display:flex;
  align-items:center;justify-content:center;font-size:40px;color:#7a7360}
.suspect h4{margin:8px 0 2px;font-size:16px;color:#1a2540}
.suspect .role{font-size:12px;color:#5b6472}
.suspect.cleared{border-color:var(--red);opacity:.7}
.suspect.cleared .redcard{position:absolute;inset:0;background:rgba(155,34,34,.14);border-radius:8px;
  display:flex;align-items:center;justify-content:center}
.redcard-icon{width:44px;height:60px;background:var(--red);border-radius:4px;box-shadow:0 4px 12px rgba(0,0,0,.4)}
.suspect.survivor{border-color:var(--gold);box-shadow:0 0 0 3px rgba(201,164,90,.4)}

/* decoder wheel (P4) */
.wheelbox{display:flex;flex-direction:column;align-items:center;gap:12px}
.wheelctrl{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:center}

/* ledger table (P6) */
table.ledger{border-collapse:collapse;width:100%;background:var(--paper);color:var(--ink);border-radius:6px;overflow:hidden}
table.ledger th,table.ledger td{border:1px solid #c8bfa2;padding:6px 10px;font-size:14px}
table.ledger th{background:#e3d9bd;text-align:left}
table.ledger td.num{color:#8a8266;width:36px}
table.ledger td.amt{text-align:right;font-family:"Consolas",monospace}

details{margin:10px 0;background:#0e1730;border:1px solid var(--line);border-radius:8px;padding:6px 14px}
summary{cursor:pointer;font-weight:600;color:var(--gold)}
.foot{color:var(--muted);font-size:12px;margin-top:40px;text-align:center}
.spoil{filter:blur(4px);transition:filter .2s}.spoil:hover{filter:none}

@media print{
  body{background:#fff;color:#000}
  .noprint{display:none!important}
  .paper,.panel{box-shadow:none;background:#fff}
  table.ledger th{background:#eee}
}
