/* Murder Mystery Game — app.css
   Tokens from DESIGN.md §2. Admin layout rules from DESIGN.md §5.
   Player/GM screen partials (header, phase_bar, player_row, etc. — §3/§4)
   are added when those screens are built (build order steps 7-9). */

:root{
  /* surfaces */
  --bg:#0F0E12; --bg-raised:#1A1820; --bg-sunken:#15131A; --bg-chip:#24212B;
  --line:#2A2731; --line-strong:#3A3641;
  /* text */
  --text:#EDE9E3; --text-2:#C9C4CE; --text-3:#A8A3AD; --text-4:#8F8A96;
  /* story accent (set per pack, default witches amber) */
  --accent:#E0A84B; --accent-ink:#17130C; --accent-soft:#241F17;
  /* states */
  --ghost:#9FC3C9; --ghost-bg:#0D1012; --ghost-raised:#161B1E; --ghost-line:#2A3438;
  --danger:#D9655A; --danger-bg:#120A0A; --danger-btn:#A93A30;
  --drink-strong-bg:#2B1F12; --drink-strong-line:#5A4120;
  --drink-alt-bg:#251A26;    --drink-alt-line:#4A3350;
  /* feedback tones (admin badges) */
  --ok:#5FAF72; --ok-bg:#11200F; --warn:#D9A23B; --warn-bg:#241B0A; --muted:#6B6672; --muted-bg:#1E1C22;
  /* type */
  --font-display:'Cinzel',serif;
  --font-body:'Work Sans',sans-serif;
  /* shape */
  --r-sm:10px; --r-md:14px; --r-lg:20px; --r-pill:999px;
}

*{box-sizing:border-box;}
[hidden]{display:none !important;} /* components set display:flex/grid; hidden must still win */
img,video{max-width:100%; height:auto;} /* never wider than their box; sized classes (e.g. .character-thumb) still set exact sizes */
html,body{margin:0;padding:0;}
body{
  background:var(--bg);
  color:var(--text);
  font-family:var(--font-body);
  font-size:15px;
  line-height:1.45;
  -webkit-text-size-adjust:100%;
}
h1,h2,h3{font-family:var(--font-display);font-weight:600;margin:0;color:var(--text);}
a{color:var(--accent);text-decoration:none;}
a:hover{text-decoration:underline;}
button{font-family:inherit;}

.caps{
  font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--text-3);
}

/* ── Buttons ───────────────────────────────────────────────────────────── */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  min-height:44px; padding:10px 18px; border-radius:var(--r-md);
  border:1px solid var(--line-strong); background:var(--bg-chip); color:var(--text);
  font-size:14px; font-weight:600; cursor:pointer;
}
.btn:hover{border-color:var(--accent);}
.btn-primary{background:var(--accent); border-color:var(--accent); color:var(--accent-ink);}
.btn-primary:hover{filter:brightness(1.08);}
.btn-danger{background:var(--danger-btn); border-color:var(--danger-btn); color:#fff;}
.btn-danger:hover{filter:brightness(1.1);}
.btn-sm{min-height:36px; padding:6px 12px; font-size:13px;}

/* ── Forms ─────────────────────────────────────────────────────────────── */
label{display:block; font-size:13px; color:var(--text-2); margin-bottom:6px;}
input[type=text],input[type=email],input[type=password],input[type=number],
input[type=date],input[type=datetime-local],input[type=search],select,textarea{
  width:100%; background:var(--bg-sunken); border:1px solid var(--line-strong);
  border-radius:var(--r-sm); color:var(--text); padding:10px 12px; font-size:14px;
  font-family:inherit;
}
input:focus,select:focus,textarea:focus{outline:2px solid var(--accent); outline-offset:1px;}
.field{margin-bottom:16px;}
.checkbox-row{display:flex; align-items:center; gap:8px; margin-bottom:12px;}
.checkbox-row input{width:18px; height:18px;}
.checkbox-row label{margin:0;}
fieldset{border:1px solid var(--line); border-radius:var(--r-md); padding:16px; margin-bottom:20px;}
legend{font-family:var(--font-display); font-size:16px; padding:0 6px; color:var(--accent);}

/* ── Alerts ────────────────────────────────────────────────────────────── */
.alert{border-radius:var(--r-md); padding:12px 16px; margin-bottom:16px; font-size:14px;}
.alert-error{background:var(--danger-bg); border:1px solid var(--danger); color:var(--text);}
.alert-ok{background:var(--ok-bg); border:1px solid var(--ok); color:var(--text);}

/* ── Admin shell (DESIGN.md §5) ────────────────────────────────────────── */
.admin-shell,.page-shell{display:flex; flex-wrap:wrap; gap:24px; max-width:1400px; margin:0 auto; padding:20px 16px;}
.admin-nav{flex:1 1 220px;}
.admin-content{flex:999 1 560px; min-width:0;}
.admin-content-inner{max-width:1120px;}

.admin-brand{display:flex; align-items:baseline; gap:8px; padding:8px 4px 16px;}
.admin-brand .name{font-family:var(--font-display); font-size:17px;}
.admin-brand .tag{font-size:11px; letter-spacing:.12em; color:var(--text-3);}

.admin-nav-links{display:flex; flex-direction:column; gap:2px;}
.admin-nav-link{
  display:flex; align-items:center; justify-content:space-between;
  padding:10px 12px; border-radius:var(--r-sm); color:var(--text-2); font-size:14px; font-weight:600;
}
.admin-nav-link:hover{background:var(--bg-chip); text-decoration:none;}
.admin-nav-link[aria-current="page"]{background:var(--accent-soft); color:var(--accent);}
.admin-nav-link .pill{
  font-size:11px; padding:2px 8px; border-radius:var(--r-pill); background:var(--danger-btn); color:#fff;
}
.admin-nav-link.disabled{color:var(--text-4); cursor:default;}
.admin-nav-link.disabled:hover{background:none;}

@media (max-width: 720px){
  .admin-nav-links{flex-direction:row; flex-wrap:wrap;}
  .admin-nav-link{flex:1 1 180px;}
}

/* page_head partial */
.page-head{display:flex; flex-wrap:wrap; justify-content:space-between; align-items:flex-start; gap:12px; margin-bottom:24px;}
.page-head .crumb{font-size:13px; color:var(--text-3); margin-bottom:6px; display:block;}
.page-head h1{font-size:24px; display:inline-flex; align-items:center; gap:10px;}
.page-head .subtitle{color:var(--text-3); font-size:14px; margin-top:4px;}
.page-head .actions{display:flex; gap:8px; flex-wrap:wrap;}

/* stat_tile partial */
.stat-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:12px; margin-bottom:24px;}
.stat-tile{background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-md); padding:14px 16px;}
.stat-tile .label{font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:var(--text-3);}
.stat-tile .value{font-family:var(--font-display); font-size:28px; margin:4px 0;}
.stat-tile .note{font-size:12px; color:var(--text-4);}

/* badge partial */
.badge{display:inline-flex; align-items:center; gap:5px; font-size:11px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; padding:4px 10px; border-radius:var(--r-pill);}
.badge-live{background:var(--ok-bg); color:var(--ok);}
.badge-ok{background:var(--ok-bg); color:var(--ok);}
.badge-warn{background:var(--warn-bg); color:var(--warn);}
.badge-danger{background:var(--danger-bg); color:var(--danger);}
.badge-muted{background:var(--muted-bg); color:var(--muted);}

/* row-card lists (DESIGN.md §5: "wrapping row cards, not wide tables") */
.row-list{display:flex; flex-direction:column; gap:8px;}
.row-card{
  background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-md);
  padding:12px 16px; display:flex; flex-wrap:wrap; gap:16px; align-items:center;
}
.row-card .field-group{display:flex; flex-direction:column; gap:2px; min-width:90px;}
.row-card .field-group .k{font-size:10px; letter-spacing:.08em; text-transform:uppercase; color:var(--text-4);}
.row-card .field-group .v{font-size:14px; color:var(--text);}
.row-card .spacer{flex:1 1 auto;}
.row-card .row-actions{display:flex; gap:8px;}

.table-wrap{overflow-x:auto; border:1px solid var(--line); border-radius:var(--r-md);}
table{width:100%; border-collapse:collapse; font-size:14px;}
th,td{text-align:left; padding:10px 12px; border-bottom:1px solid var(--line); white-space:nowrap;}
th{color:var(--text-3); font-size:12px; text-transform:uppercase; letter-spacing:.06em;}

.card{background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-lg); padding:20px; margin-bottom:20px;}
.muted{color:var(--text-4);}
.flex-between{display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap;}
.tag-list{display:flex; gap:6px; flex-wrap:wrap;}

/* admin login screen */
.auth-wrap{max-width:380px; margin:10vh auto; padding:0 16px;}
.auth-card{background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-lg); padding:28px;}
.auth-card h1{font-size:20px; margin-bottom:4px;}
.auth-card .sub{color:var(--text-3); font-size:13px; margin-bottom:20px;}

/* ── Game screens: phone column (DESIGN.md §1, §3) ─────────────────────── */
.game-shell{max-width:480px; margin:0 auto; min-height:100vh; min-height:100dvh; display:flex; flex-direction:column;}
.game-main{padding:16px; display:flex; flex-direction:column; gap:0; padding-bottom:calc(24px + env(safe-area-inset-bottom));}
.screen-title{font-family:var(--font-display); font-size:24px; margin:4px 0 8px;}
.hint{font-size:13px; color:var(--text-3); margin:6px 0 12px;}

/* header partial — 60px */
.game-header{
  height:60px; display:flex; align-items:center; gap:10px; padding:0 16px;
  border-bottom:1px solid var(--line); background:var(--bg);
  position:sticky; top:0; z-index:5;
}
.game-header-icon{color:var(--accent); flex:0 0 auto;}
.game-header-text{flex:1 1 auto; min-width:0;}
.game-header-app{font-family:var(--font-display); font-size:15px; font-weight:600; line-height:1.2;}
.game-header-story{font-size:12px; color:var(--text-3); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.game-chip{
  flex:0 0 auto; font-size:11px; font-weight:600; letter-spacing:.12em; text-transform:uppercase;
  padding:5px 10px; border-radius:var(--r-pill); background:var(--bg-chip); color:var(--accent);
  font-variant-numeric:tabular-nums;
}

/* big_button partial — 56–68px */
.big-button{
  width:100%; min-height:60px; margin:8px 0; padding:10px 18px; border-radius:var(--r-lg); border:0;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; cursor:pointer;
}
.big-button-label{font-family:var(--font-display); font-size:19px; font-weight:700; letter-spacing:.04em;}
.big-button-kicker{font-size:11px; letter-spacing:.12em; text-transform:uppercase; opacity:.8;}
.big-button-accent{background:var(--accent); color:var(--accent-ink);}
.big-button-danger{background:var(--danger-btn); color:#fff;}
.big-button-ghost{background:var(--ghost); color:var(--ghost-bg);}
#next-btn.big-button{margin:0 0 20px;} /* same 20px gap as the cards around it */
.big-button:disabled{background:var(--bg-chip); color:var(--text-4); cursor:not-allowed;}

/* Lobby: QR + room code */
.qr-card{
  background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-lg);
  padding:20px; margin-bottom:20px; text-align:center; display:flex; flex-direction:column; align-items:center; gap:10px;
}
.qr-box{width:min(72vw, 280px); aspect-ratio:1; background:#fff; border-radius:var(--r-md); padding:8px;}
.qr-box svg{display:block; width:100%; height:100%;}
.room-code{
  font-family:var(--font-display); font-size:40px; font-weight:700; letter-spacing:.18em;
  color:var(--accent); font-variant-numeric:tabular-nums; line-height:1.1;
}

/* Lobby: player list */
.lobby-count{font-size:13px; color:var(--text-2);}
.lobby-count span{font-family:var(--font-display); font-size:18px; color:var(--accent);}
.lobby-list{list-style:none; margin:12px 0 0; padding:0; display:flex; flex-direction:column; gap:6px;}
.lobby-row{
  display:flex; align-items:center; gap:8px; min-height:48px; padding:6px 6px 6px 14px;
  background:var(--bg-sunken); border:1px solid var(--line); border-radius:var(--r-md);
}
.lobby-name{flex:1 1 auto; min-width:0; font-size:15px; font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.lobby-chip{font-size:11px; letter-spacing:.06em; text-transform:uppercase; padding:3px 8px; border-radius:var(--r-pill); background:var(--bg-chip); color:var(--text-3);}
.lobby-remove{
  width:44px; height:44px; flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center;
  background:none; border:0; border-radius:var(--r-sm); color:var(--text-4); cursor:pointer;
}
.lobby-remove:hover,.lobby-remove:focus-visible{color:var(--danger); background:var(--danger-bg);}

/* Lobby: setup preview */
.setup-grid{display:grid; grid-template-columns:1fr auto; gap:8px 16px; margin-top:12px; font-size:15px;}
.setup-grid .k{color:var(--text-3);}
.setup-grid .v{font-weight:600; text-align:right; font-variant-numeric:tabular-nums;}
#setup-block:empty{display:none;}
#setup-block{color:var(--warn);}

/* Choices: radio pills (speaker, drinker) and mode cards */
.choice-row{display:flex; gap:8px; flex-wrap:wrap;}
.choice{
  flex:1 1 140px; display:flex; align-items:center; gap:10px; min-height:48px; margin:0; padding:10px 14px;
  background:var(--bg-sunken); border:1px solid var(--line-strong); border-radius:var(--r-md);
  font-size:15px; color:var(--text); cursor:pointer;
}
.choice:has(input:checked){border-color:var(--accent); background:var(--accent-soft);}
.choice input{accent-color:var(--accent); width:18px; height:18px; margin:0;}
.toggle-field{border:0; padding:0; margin:0 0 16px;}
.toggle-field legend{font-family:var(--font-body); font-size:11px; color:var(--text-3); padding:0; margin-bottom:8px;}

.mode-list{display:flex; flex-direction:column; gap:10px; margin:12px 0 8px;}
.mode-card{
  display:grid; grid-template-columns:auto 1fr; gap:4px 12px; align-items:center; margin:0; padding:16px;
  background:var(--bg-raised); border:1px solid var(--line-strong); border-radius:var(--r-lg); cursor:pointer;
}
.mode-card:has(input:checked){border-color:var(--accent); background:var(--accent-soft);}
.mode-card input{accent-color:var(--accent); width:20px; height:20px; margin:0;}
.mode-title{font-family:var(--font-display); font-size:18px; font-weight:600; color:var(--text);}
.mode-body{grid-column:2; font-size:14px; color:var(--text-2);}

.copy-row{display:flex; gap:8px;}
.copy-row input{flex:1 1 auto; min-width:0; font-size:13px;}

.link-danger{align-self:center; background:none; border-color:transparent; color:var(--text-4); margin-top:8px;}
.link-danger:hover{color:var(--danger); border-color:transparent;}

/* Join: room code entry + story card */
.code-input{font-family:var(--font-display); font-size:28px !important; letter-spacing:.2em; text-transform:uppercase; text-align:center;}
.story-card{
  background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-lg);
  overflow:hidden; margin-bottom:20px;
}
.story-card-art{display:block; width:100%; height:auto; max-height:480px; object-fit:cover;} /* any shape: square covers show whole; very tall ones are capped */
.story-card-body{padding:16px;}
.story-card-title{font-family:var(--font-display); font-size:22px; font-weight:600; margin:4px 0;}
.story-card-blurb{font-size:14px; color:var(--text-2); margin:6px 0 0;}

/* phase_bar partial — 84px (DESIGN.md §3) */
.phase-bar{min-height:84px; display:flex; flex-direction:column; justify-content:center; gap:8px;}
.phase-bar-row{display:flex; align-items:flex-end; justify-content:space-between; gap:12px;}
.phase-bar-text{min-width:0;}
.phase-bar-name{font-family:var(--font-display); font-size:24px; font-weight:600; line-height:1.15;}
.phase-bar-hint{font-size:13px; color:var(--text-3); margin-top:2px;}
.phase-bar-timer{font-family:var(--font-display); font-size:30px; color:var(--accent); font-variant-numeric:tabular-nums; white-space:nowrap;}
.phase-bar-track{height:4px; background:var(--bg-chip); border-radius:var(--r-pill); overflow:hidden;}
.phase-bar-fill{height:100%; background:var(--accent); transition:width .25s linear;}

/* stage_track partial — GM only, 5×2 */
.stage-track{list-style:none; margin:0 0 16px; padding:0; display:grid; grid-template-columns:repeat(3,1fr); gap:6px;}
.stage{
  display:flex; flex-direction:column; align-items:center; gap:2px; padding:8px 2px; min-height:52px;
  border-radius:var(--r-sm); background:var(--bg-raised); border:1px solid var(--line); text-align:center;
}
.stage-n{font-size:11px; color:var(--text-4); font-variant-numeric:tabular-nums;}
.stage-label{font-size:12px; font-weight:600; color:var(--text-2); line-height:1.1;}
.stage[data-state="done"]{opacity:.45;}
.stage[data-state="current"]{background:var(--accent-soft); border-color:var(--accent);}
.stage[data-state="current"] .stage-label,.stage[data-state="current"] .stage-n{color:var(--accent);}
.stage[data-state="skipped"]{opacity:.35;}
.stage[data-state="skipped"] .stage-label{text-decoration:line-through;}

/* GM / host in-game */
.now-card .btn-row{margin-top:14px;}
.btn-row{display:flex; gap:8px; flex-wrap:wrap; margin:0 0 16px;}
.btn-row .btn{flex:1 1 0; min-width:90px;}
.btn:disabled{opacity:.45; cursor:not-allowed;}
.tile-grid{display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-bottom:16px;}
.tile{background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-md); padding:12px 14px;}
.tile .k{font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:var(--text-3);}
.tile .v{font-family:var(--font-display); font-size:24px; margin-top:2px; font-variant-numeric:tabular-nums;}
.narration-row,.speaker-banner{display:flex; align-items:center; justify-content:space-between; gap:12px;}
.narration-status{font-size:15px; font-weight:600; margin-top:2px;}
.speaker-banner{border-color:var(--accent);}
.speaker-banner .hint{margin:4px 0 0;}
.pour-totals{font-size:14px; color:var(--text-2); margin-top:8px;}
/* Water ceremony: the one WATER glass stands out; the spirit glasses stay plain. */
.pour-water{background:var(--drink-strong-bg); border-color:var(--drink-strong-line);}
.pour-water .lobby-name, .pour-water .lobby-chip{font-weight:700; color:var(--accent);}
.role-traitor{background:var(--danger-bg); color:var(--danger);}
.role-healer{background:var(--ok-bg); color:var(--ok);}
.pact-banner{margin:10px 0 0; padding:14px 16px; border-radius:var(--r-md); font-size:18px; font-weight:700; text-align:center;}
.plain-sight-alert{margin-bottom:12px; padding:14px 16px; background:var(--danger-btn); color:#fff; border-radius:var(--r-md);}
.plain-sight-alert .caps{color:#fff; opacity:.9;}
.plain-sight-alert p{margin:4px 0 0; font-weight:700;}
.plain-sight-pick{display:grid; gap:8px; margin-top:10px;}
.role-asleep{margin:0 0 10px; font-size:16px;}
.pact-good{background:var(--ok); color:#0B140C;}
.pact-bad{background:var(--danger-btn); color:#fff;}
.role-recruit{margin:0 0 10px; background:var(--warn); color:var(--accent-ink);}
.role-recruit-sub{margin-top:4px; font-size:14px; font-weight:600;}
.play-link{width:100%; margin-bottom:16px;}

/* Speaker page — readable across a room */
.speaker-stage{text-align:center; padding:28px 8px 20px;}
.speaker-phase{font-family:var(--font-display); font-size:38px; font-weight:700; margin:6px 0; line-height:1.1;}
.speaker-hint{font-size:16px; color:var(--text-2);}
.speaker-timer{font-family:var(--font-display); font-size:64px; color:var(--accent); font-variant-numeric:tabular-nums; margin-top:16px;}
.speaker-progress{height:6px; background:var(--bg-chip); border-radius:var(--r-pill); overflow:hidden; margin:12px auto 0; max-width:320px;}
.speaker-progress div{height:100%; background:var(--accent); transition:width .25s linear;}
.speaker-status{text-align:center; color:var(--text-3); font-size:14px; min-height:20px;}

/* Read-aloud narration (speaker page + host "this device") */
.narration-choice{margin:12px 0 16px;}
.read-panel{border-color:var(--accent);}
.gm-player{margin-top:16px; padding-top:14px; border-top:1px solid var(--line);}
.gm-player-head{display:flex; justify-content:space-between; align-items:baseline; gap:12px;}
.gm-player-time{font-variant-numeric:tabular-nums; color:var(--text-3); font-size:14px;}
.gm-player-track{position:relative; height:14px; margin:10px 0 12px; border-radius:7px; background:var(--line-strong); cursor:pointer; touch-action:none;}
.gm-player-fill{position:absolute; left:0; top:0; bottom:0; width:0; border-radius:7px; background:var(--accent);}
.gm-player-btns{display:grid; grid-template-columns:1fr 1.3fr 1fr 1fr; gap:8px;}
.gm-player-btns .btn{min-height:44px; padding-left:6px; padding-right:6px;}
.gm-player-btns .btn:disabled{opacity:.45;}
.gm-player-out{display:flex; align-items:center; flex-wrap:wrap; gap:8px 12px; margin-top:12px;}
.gm-player-note{color:var(--text-3); font-size:14px;}
.read-text{font-size:20px; line-height:1.55; white-space:pre-line; margin:8px 0 18px;}
.read-done{width:100%; min-height:52px;}

/* ── Player screen (DESIGN.md §4.1–4.5, build step 8) ──────────────────── */
.play-main{padding-bottom:calc(96px + env(safe-area-inset-bottom));}
.phase-card{padding:8px 16px;}
.wide{width:100%; margin-top:12px;}

/* Ghosts: accent becomes ghost blue, background goes colder (DESIGN.md §2) */
body.ghost-mode{
  --accent:var(--ghost); --accent-ink:var(--ghost-bg); --accent-soft:var(--ghost-raised);
  --bg:var(--ghost-bg); --bg-raised:var(--ghost-raised); --line:var(--ghost-line);
  background:var(--ghost-bg);
}

/* bottom_nav partial — 76px, 4 equal tabs */
.bottom-nav{
  position:fixed; left:0; right:0; bottom:0; z-index:6; max-width:480px; margin:0 auto;
  display:grid; grid-template-columns:repeat(4,1fr);
  min-height:76px; padding-bottom:env(safe-area-inset-bottom);
  background:var(--bg); border-top:1px solid var(--line);
}
.bottom-nav-tab{
  position:relative; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:4px;
  min-height:76px; background:none; border:0; color:var(--text-4); font-size:12px; font-weight:600; cursor:pointer;
}
.bottom-nav-tab[aria-current="page"]{color:var(--accent);}
.bottom-nav-dot{position:absolute; top:16px; left:calc(50% + 10px); width:8px; height:8px; border-radius:50%; background:var(--accent);}

/* tabs partial — segmented 2-tab control */
.seg-tabs{display:grid; grid-template-columns:1fr 1fr; gap:4px; padding:4px; margin-bottom:10px; background:var(--bg-sunken); border:1px solid var(--line); border-radius:var(--r-md);}
.seg-tab{min-height:44px; border:0; border-radius:var(--r-sm); background:none; color:var(--text-3); font-size:14px; font-weight:600; cursor:pointer;}
.seg-tab[aria-selected="true"]{background:var(--bg-chip); color:var(--accent);}
.seg-tabs-secret{grid-template-columns:1fr 1fr 44px;}
.seg-tab-secret{font-size:20px; letter-spacing:1px;}
.seg-mini{display:grid; grid-template-columns:1fr 1fr; gap:6px; margin-bottom:4px;}
.seg-mini-btn{min-height:40px; border:1px solid var(--line-strong); border-radius:var(--r-pill); background:var(--bg-sunken); color:var(--text-3); font-size:13px; font-weight:600; cursor:pointer;}
.seg-mini-btn[aria-pressed="true"]{border-color:var(--accent); color:var(--accent); background:var(--accent-soft);}
.seg-mini-btn:disabled{opacity:.45; cursor:default;}
.votes-in{font-size:13px; color:var(--text-2); margin:0 0 10px; min-height:18px; font-variant-numeric:tabular-nums;}

/* player_row partial — 68px selectable row */
.pick-list{display:flex; flex-direction:column; gap:6px; margin-bottom:12px;}
.player-row{
  display:flex; align-items:center; gap:12px; width:100%; min-height:68px; padding:8px 14px 8px 10px; text-align:left;
  background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-md); color:var(--text); cursor:pointer;
}
.player-row[aria-pressed="true"]{border-color:var(--accent); background:var(--accent-soft);}
.player-row:disabled{opacity:.55; cursor:default;}
/* Notes: suspect is red, trust is green, on the rows and their mode buttons */
.player-row.mark-suspect[aria-pressed="true"]{border-color:var(--danger); background:var(--danger-bg);}
.player-row.mark-trust[aria-pressed="true"]{border-color:var(--ok); background:var(--ok-bg);}
.mark-suspect .player-tag{background:var(--danger-btn); color:#fff;}
.mark-trust .player-tag{background:var(--ok); color:#0B140C;}
.player-row.mark-suspect[aria-pressed="true"] .player-ring{border-color:var(--danger); background:var(--danger);}
.player-row.mark-trust[aria-pressed="true"] .player-ring{border-color:var(--ok); background:var(--ok);}
#second-modes [data-mode="a"][aria-pressed="true"]{border-color:var(--danger); color:var(--danger); background:var(--danger-bg);}
#second-modes [data-mode="b"][aria-pressed="true"]{border-color:var(--ok); color:var(--ok); background:var(--ok-bg);}
.player-initials{
  flex:0 0 auto; width:40px; height:40px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center;
  background:var(--bg-chip); color:var(--text-2); font-family:var(--font-display); font-size:14px; font-weight:600;
}
.player-text{flex:1 1 auto; min-width:0; display:flex; flex-direction:column;}
.player-name{font-size:15px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.player-char{font-size:12px; color:var(--text-3); overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.player-tag{flex:0 0 auto; font-size:10px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; padding:3px 8px; border-radius:var(--r-pill); background:var(--bg-chip); color:var(--accent);}
.player-ring{flex:0 0 auto; width:22px; height:22px; border-radius:50%; border:2px solid var(--line-strong);}
.player-row[aria-pressed="true"] .player-ring{border-color:var(--accent); box-shadow:inset 0 0 0 4px var(--bg-raised); background:var(--accent);}

/* Chat (team chat, ghost chat) and notes — same box shape either way */
.chat-box{background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-lg); padding:16px; margin-bottom:12px; min-height:220px;}
.chat-log{max-height:220px; overflow-y:auto; display:flex; flex-direction:column; gap:6px; margin:10px 0;}
.chat-msg{font-size:14px; padding:6px 10px; background:var(--bg-sunken); border-radius:var(--r-sm); align-self:flex-start; max-width:90%;}
.chat-mine{align-self:flex-end; background:var(--accent-soft);}
.chat-name{display:block; font-size:11px; color:var(--text-3); font-weight:600;}
.chat-body{word-wrap:break-word;}
.chat-form{display:flex; gap:8px;}
.chat-form input{flex:1 1 auto; min-width:0;}
#notes-input{margin-top:10px;}

/* Whispers */
.whisper-list{list-style:none; margin:10px 0 0; padding:0; display:flex; flex-direction:column; gap:8px;}
.whisper{padding:10px 14px; border-left:3px solid var(--ghost); background:var(--ghost-raised); border-radius:var(--r-sm); font-style:italic; color:var(--text);}
.whisper-row{display:flex; align-items:center; justify-content:space-between; gap:10px;}
.whisper-body{flex:1 1 auto; min-width:0; word-wrap:break-word;}
#whisper-form textarea{margin:10px 0 4px; resize:vertical;}

/* Role card — swipe to reveal (DESIGN.md §4.2) */
.role-card{background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-lg); padding:24px 20px; min-height:380px; margin-bottom:12px;}
.role-name{font-family:var(--font-display); font-size:38px; font-weight:700; color:var(--accent); margin:6px 0 4px; line-height:1.1;}
.role-char{font-size:16px; font-weight:600; color:var(--text);}
.role-who{font-size:14px; color:var(--text-2); margin:12px 0 16px;}
.role-box{min-height:96px; padding:12px 14px; background:var(--bg-sunken); border:1px solid var(--line); border-radius:var(--r-md);}
.role-box-body{font-size:15px; margin-top:4px;}
.role-intro{min-height:0;}
.role-word{display:block; margin:2px 0 6px; font-family:var(--font-display); font-size:28px; font-weight:700; line-height:1.1; letter-spacing:.06em; color:var(--text);}
.role-ally{margin-top:4px; font-size:20px; font-weight:700; color:var(--accent);}
.role-box-body .role-ally:first-of-type{margin-top:8px;}
.role-tip{margin-top:10px; font-size:15px; font-weight:700; color:var(--text);}
.role-swipe-hint{margin:16px 0; text-align:center; font-size:15px; font-weight:600; color:var(--accent);}
[data-panel="character"]{touch-action:pan-y; min-height:calc(100dvh - 190px); user-select:none; -webkit-user-select:none;}
.role-secret{position:fixed; top:0; bottom:0; left:0; right:0; z-index:30; max-width:480px; margin:0 auto; padding:calc(24px + env(safe-area-inset-top)) 20px 24px;
  overflow-y:auto; background:var(--bg-raised); touch-action:pan-y; transform:translateX(100%); visibility:hidden; transition:transform .2s, visibility .2s;}
.role-secret.shown{transform:none; visibility:visible;}

/* Death / banishment — full screen, danger colours (DESIGN.md §4.5) */
.death-view{
  min-height:calc(100dvh - 92px); display:flex; flex-direction:column; justify-content:center; text-align:center; gap:10px;
  margin:-16px; padding:24px 20px calc(24px + env(safe-area-inset-bottom)); background:var(--danger-bg);
}
.death-view .caps{color:var(--danger);}
.death-title{font-family:var(--font-display); font-size:32px; color:var(--danger); line-height:1.15;}
.death-char{font-size:18px; font-weight:600;}
.death-note{font-size:15px; color:var(--text-2); margin:8px 0 20px;}

/* Reveal, idle and private-note cards */
.reveal-card{text-align:center; border-color:var(--accent);}
.reveal-name{font-family:var(--font-display); font-size:30px; font-weight:700; margin:6px 0 2px;}
.reveal-char{font-size:14px; color:var(--text-3);}
.reveal-line{font-size:16px; margin:12px 0 0;}
.idle-text{font-size:17px; margin:0; text-align:center; color:var(--text-2);}
.note-card{border-color:var(--accent); font-size:16px; font-style:italic;}

.mission-list{list-style:none; margin:10px 0 0; padding:0; display:flex; flex-direction:column; gap:6px;}
.mission{padding:10px 12px; background:var(--bg-sunken); border-radius:var(--r-sm);}
.mission-done{opacity:.6; text-decoration:line-through;}
.rules-card h2{font-size:20px; margin-bottom:8px;}
.rules-card p{font-size:15px; color:var(--text-2);}
.rules-card h3{font-size:18px; margin:22px 0 6px; color:var(--accent);}
.rules-card ul{margin:0 0 12px; padding-left:20px;}
.rules-card li{font-size:15px; color:var(--text-2); margin-bottom:8px;}
.rules-card strong{color:var(--text);}

/* ── Final Fire end vote + end screen (build step 9) ───────────────────── */
.endvote-choices{display:grid; grid-template-columns:1fr 1fr; gap:8px; margin:4px 0 12px;}
.endvote-btn{
  min-height:60px; border-radius:var(--r-lg); border:1px solid var(--line-strong); background:var(--bg-sunken); color:var(--text);
  font-family:var(--font-display); font-size:16px; font-weight:700; cursor:pointer;
}
.endvote-btn[aria-pressed="true"]{background:var(--accent); border-color:var(--accent); color:var(--accent-ink);}
.chip-on{background:var(--accent-soft); color:var(--accent);}
.chip-alert{background:var(--danger-bg); color:var(--danger);}
.end-hero{text-align:center;}
.end-title{font-family:var(--font-display); font-size:30px; line-height:1.15; margin:6px 0 4px; color:var(--accent);}
.champion{margin-top:16px; padding:14px; border:1px solid var(--accent); border-radius:var(--r-md); background:var(--accent-soft);}
.champion-name{font-family:var(--font-display); font-size:24px; font-weight:700; margin-top:4px;}
.end-row .lobby-name{display:flex; flex-direction:column;}
.end-name{font-weight:600;}
.end-char{font-size:12px; color:var(--text-3); overflow:hidden; text-overflow:ellipsis;}
.end-points{flex:0 0 auto; min-width:36px; text-align:right; padding-right:8px; font-family:var(--font-display); font-size:18px; color:var(--accent); font-variant-numeric:tabular-nums;}
.end-champion{border-color:var(--accent);}

/* Login honeypot: off-screen, not display:none (some bots skip hidden fields) */
.hp-field{position:absolute; left:-10000px; width:1px; height:1px; overflow:hidden;}

/* Invite page + host invite screen (build step 10) */
.invite-when{font-size:15px; font-weight:600; color:var(--accent); margin:2px 0 4px;}
.invite-audio{width:100%; margin-top:12px;}
.share-row{display:flex; gap:8px; flex-wrap:wrap; margin-top:10px;}
.share-row .btn{flex:1 1 140px;}
.lobby-row-waiting{opacity:.55; border-style:dashed;}
.guest-list{display:grid; grid-template-columns:repeat(auto-fill,minmax(130px,1fr)); gap:8px; margin-top:8px;}
.guest-list form{margin:0;}
.guest-btn{width:100%; min-height:52px;}

/* ── Legal pages, footer, cookie notice (build step 12) ────────────────── */
.legal-page{flex:1 1 100%; max-width:760px; margin:0 auto; padding:32px 4px 48px;}
.legal-nav{display:flex; flex-wrap:wrap; gap:6px 16px; margin-bottom:24px; font-size:14px;}
.legal-nav a{color:var(--text-3);}
.legal-nav a[aria-current="page"]{color:var(--accent);}
.legal-body h1{font-size:28px; margin:4px 0 16px;}
.legal-body h2{font-size:18px; margin:28px 0 8px; color:var(--accent);}
.legal-body p,.legal-body li{color:var(--text-2); font-size:15px; line-height:1.6;}
.legal-body ul{padding-left:20px;}
.legal-table{margin:12px 0;}
.legal-table td{white-space:normal; vertical-align:top; color:var(--text-2);}
.legal-missing{color:var(--warn); font-style:italic;}
.site-footer{display:flex; flex-wrap:wrap; justify-content:center; gap:8px 18px; padding:24px 16px calc(24px + env(safe-area-inset-bottom)); font-size:13px; border-top:1px solid var(--line); margin-top:24px;}
.site-footer a{color:var(--text-4);}
.cookie-notice{
  position:fixed; left:12px; right:12px; bottom:12px; z-index:20; max-width:520px; margin:0 auto;
  display:flex; align-items:center; gap:12px; padding:12px 14px;
  background:var(--bg-raised); border:1px solid var(--line-strong); border-radius:var(--r-md); box-shadow:0 8px 24px rgba(0,0,0,.4);
}
.cookie-notice p{margin:0; font-size:13px; color:var(--text-2); flex:1 1 auto;}
.character-thumb{display:block; width:140px; height:140px; object-fit:cover; border-radius:var(--r-md); border:1px solid var(--line); margin-bottom:12px;}
.character-row-thumb{width:44px; height:44px; object-fit:cover; border-radius:var(--r-sm); flex:0 0 auto;}
.role-image{display:block; width:120px; height:120px; object-fit:cover; border-radius:50%; border:2px solid var(--accent); margin:12px 0 4px;}

/* Admin cover / upload previews */
.cover-editor{display:flex; gap:20px; flex-wrap:wrap; margin-bottom:8px;}
.cover-preview-col{flex:0 1 320px; min-width:240px;}
.cover-fields-col{flex:1 1 280px; min-width:0;}
.cover-preview-card{margin-bottom:6px;}
.cover-empty{aspect-ratio:1/1; display:flex; align-items:center; justify-content:center; background:var(--bg-sunken); color:var(--text-4); font-size:13px;}
.preview-note{font-size:12px; color:var(--warn); margin:6px 0 10px;}

/* Intro trailer player (templates/partials/intro_player.php) */
audio{color-scheme:dark;} /* built-in players elsewhere (admin listen-back) draw dark too */
.intro-player{display:flex; align-items:center; gap:12px; margin-top:14px; padding:10px 14px 10px 10px; background:var(--bg-sunken); border:1px solid var(--line); border-radius:var(--r-pill);}
.intro-player audio{display:none;}
.intro-play{flex:0 0 auto; width:44px; height:44px; border-radius:50%; border:0; display:inline-flex; align-items:center; justify-content:center; background:var(--accent); color:var(--accent-ink); cursor:pointer;}
.intro-play:focus-visible{outline:2px solid var(--text); outline-offset:2px;}
.intro-icon-pause,.intro-player.is-playing .intro-icon-play{display:none;}
.intro-player.is-playing .intro-icon-pause{display:block;}
.intro-body{flex:1 1 auto; min-width:0;}
.intro-label{font-size:13px; color:var(--text-2); margin-bottom:6px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.intro-track{height:6px; background:var(--bg-chip); border-radius:var(--r-pill); overflow:hidden; cursor:pointer;}
.intro-track:focus-visible{outline:2px solid var(--accent); outline-offset:3px;}
.intro-fill{height:100%; width:0; background:var(--accent); transition:width .2s linear;}
.intro-time{flex:0 0 auto; font-size:13px; color:var(--text-2); font-variant-numeric:tabular-nums;}

/* Shop + checkout (build step 4) */
.shop-page{flex:1 1 100%; max-width:720px; margin:0 auto; padding:40px 20px;}
.buy-row{display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-top:16px;}
.price{font-family:var(--font-display); font-size:24px; font-weight:700; color:var(--accent);}
.price-note{display:block; font-family:var(--font-body); font-size:12px; font-weight:500; color:var(--text-3);}
.pack-card{border-color:var(--accent);}
.checkout-lines{display:grid; grid-template-columns:1fr auto; gap:8px 16px; margin:12px 0; font-size:15px;}
.checkout-lines .v{text-align:right; font-variant-numeric:tabular-nums;}
.checkout-lines .total{font-family:var(--font-display); font-size:20px; font-weight:700; color:var(--accent); border-top:1px solid var(--line); padding-top:8px;}
.unlock-bar{height:4px; background:var(--bg-chip); border-radius:var(--r-pill); overflow:hidden; margin:18px 0 8px;}
.unlock-bar div{height:100%; width:40%; background:var(--accent); border-radius:var(--r-pill); animation:unlock 1.4s ease-in-out infinite;}
@keyframes unlock{0%{transform:translateX(-100%);}100%{transform:translateX(250%);}}
@media (prefers-reduced-motion: reduce){.unlock-bar div{animation:none; width:100%; opacity:.5;}}

/* Big-screen board (board.php): wide, readable from across a room */
.game-shell.board-shell{max-width:none;}
.board-main{padding:24px clamp(16px, 3vw, 40px);}
.board-top{display:flex; justify-content:space-between; align-items:flex-end; gap:24px; flex-wrap:wrap; margin-bottom:24px;}
.board-phase{font-family:var(--font-display); font-size:clamp(30px, 4vw, 56px); font-weight:700; line-height:1.1; margin:4px 0;}
.board-hint{font-size:clamp(15px, 1.4vw, 20px); color:var(--text-2);}
.board-side{text-align:right;}
.board-audio{margin-top:10px;}
.board-timer{font-family:var(--font-display); font-size:clamp(44px, 6vw, 88px); color:var(--accent); font-variant-numeric:tabular-nums; line-height:1;}
.board-counts{font-size:clamp(14px, 1.3vw, 19px); color:var(--text-3); margin-top:6px; font-variant-numeric:tabular-nums;}
.board-join{flex-direction:row; justify-content:center; gap:32px; flex-wrap:wrap;}
.board-join .qr-box{width:min(60vw, 240px);}
.board-join-url{font-size:clamp(16px, 1.6vw, 22px); margin:4px 0 14px;}
.board-rejoin{display:flex; align-items:center; justify-content:flex-end; gap:12px; margin-top:16px; color:var(--text-3); font-size:clamp(13px, 1vw, 16px); line-height:1.3; text-align:right;}
.board-rejoin[hidden]{display:none;}
.board-rejoin-qr{width:96px; height:96px; background:#fff; border-radius:var(--r-sm, 6px); padding:4px; flex:none;}
.board-rejoin-qr svg{display:block; width:100%; height:100%;}
.board-grid{list-style:none; margin:0; padding:0; display:grid; grid-template-columns:repeat(auto-fill, minmax(min(100%, 200px), 1fr)); gap:16px;}
.board-card{display:flex; flex-direction:column; align-items:center; text-align:center; gap:12px; padding:16px; background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-md); transition:opacity .6s, background .6s, border-color .6s;}
.board-avatar{flex:none; width:104px; height:104px; border-radius:50%; display:grid; place-items:center; background:var(--bg-chip); font-family:var(--font-display); font-size:40px; color:var(--text-2);}
.board-body{min-width:0;}
.board-name{font-size:clamp(20px, 1.6vw, 32px); line-height:1.15; font-weight:600; overflow-wrap:anywhere;}
.board-char{font-size:clamp(14px, 1vw, 19px); color:var(--text-3); margin-top:4px;}
.board-tags{display:flex; flex-wrap:wrap; justify-content:center; gap:8px; margin-top:10px;}
.board-tag{font-size:clamp(14px, 1vw, 19px); font-weight:600; letter-spacing:.04em; padding:4px 12px; border-radius:var(--r-pill); background:var(--bg-chip); color:var(--text-2);}
.board-protected{border-color:var(--accent);}
.board-tag-shield{background:var(--accent-soft); color:var(--accent);}
.board-tag-votes{background:var(--bg-sunken); color:var(--text); border:1px solid var(--line-strong); font-variant-numeric:tabular-nums;}
.board-murdered,.board-banished{background:var(--ghost-raised); border-color:var(--ghost-line); opacity:.75;}
.board-murdered .board-avatar,.board-banished .board-avatar{background:var(--ghost-bg); font-size:48px;}
.board-murdered .board-name,.board-banished .board-name{color:var(--ghost); text-decoration:line-through; text-decoration-thickness:1px;}
.board-tag-fate{background:var(--ghost-bg); color:var(--ghost); border:1px solid var(--ghost-line);}
.board-tag-traitor{background:var(--danger-bg); color:var(--danger); border:1px solid var(--danger);}
.board-tag-faithful{background:var(--ok-bg); color:var(--ok); border:1px solid var(--ok);}

/* Public site header (templates/partials/site_header.php) */
.site-header{display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:10px 8px; padding:4px 0 16px;}
.site-brand{display:inline-flex; align-items:center; gap:8px; min-height:44px; font-family:var(--font-display); font-size:17px; font-weight:600; color:var(--text);}
.site-brand svg{color:var(--accent); flex:0 0 auto;}
.site-brand:hover{text-decoration:none;}
.site-join{order:2; min-height:44px;}
.site-nav{order:3; flex:1 1 100%; display:flex; flex-wrap:wrap; gap:0 4px; margin:0 -10px;}
.site-nav a{display:inline-flex; align-items:center; min-height:44px; padding:0 10px; color:var(--text-2); font-size:14px;}
.site-nav a:hover{color:var(--accent); text-decoration:none;}
@media (min-width:720px){
  .site-nav{order:2; flex:0 1 auto; margin:0 0 0 auto;}
  .site-join{order:3;}
}
.site-footer-copy{color:var(--text-4);}

/* Homepage (httpdocs/index.php) */
.home{flex:1 1 100%; max-width:760px; margin:0 auto; min-width:0;}
.btn-lg{min-height:56px; padding:14px 24px; font-family:var(--font-display); font-size:18px; font-weight:600; width:100%;}
@media (min-width:520px){ .btn-lg{width:auto;} }
.home-hero{padding:28px 0 8px;}
.home-hero h1{font-size:32px; line-height:1.15; margin-bottom:14px;}
.home-hero-lead{font-size:18px; font-weight:600; color:var(--text); margin:0 0 10px;}
.home-hero-body{font-size:16px; color:var(--text-2); margin:0;}
.home-hero-join{font-size:14px; color:var(--text-3); margin:10px 0 0;}
.home-hero-join a{display:inline-block; padding:12px 0;}
@media (min-width:600px){ .home-hero{padding:48px 0 12px;} .home-hero h1{font-size:40px;} }

/* Featured story under the hero: square cover beside title + tagline, then trailer and buy */
.home-featured{margin:16px 0 8px; padding:16px; background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-lg);}
.home-featured-head{display:flex; gap:14px; align-items:flex-start;}
.home-featured-art{flex:0 0 auto; width:112px; height:112px; object-fit:cover; border-radius:var(--r-md); border:1px solid var(--line);}
.home-featured-text{min-width:0;}
.home-featured h2{font-size:20px; line-height:1.2; margin:4px 0 6px;}
.home-featured-tagline{font-size:14px; color:var(--text-2); margin:0;}
.home-featured .story-card-facts{margin-top:6px; font-size:13px;}
.home-featured-buy{margin-top:14px;}
@media (min-width:600px){
  .home-featured{padding:20px;}
  .home-featured-head{gap:20px;}
  .home-featured-art{width:180px; height:180px;}
  .home-featured h2{font-size:26px;}
  .home-featured-tagline{font-size:16px;}
}

.home-section{padding:36px 0 8px;}
.home-section > h2{font-size:24px; line-height:1.2; margin-bottom:18px;}
.home-prose p{font-size:16px; color:var(--text-2); line-height:1.6; margin:0 0 14px;}

.steps{list-style:none; margin:0; padding:0; display:grid; gap:12px;}
.step{display:flex; gap:14px; align-items:flex-start; padding:16px; background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-md);}
.step-mark{flex:0 0 auto; width:44px; height:44px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; background:var(--accent-soft); color:var(--accent); font-family:var(--font-display); font-size:20px; font-weight:700;}
.step-title{font-family:var(--font-body); font-size:16px; font-weight:600; margin:0 0 4px;}
.step-body{font-size:15px; color:var(--text-2); margin:0;}

.home-shots{display:grid; grid-template-columns:repeat(3, 1fr); gap:10px; margin-top:8px;}
.home-shots figure{margin:0;}
.home-shots img{display:block; width:100%; border-radius:var(--r-md); border:1px solid var(--line);}
.home-shots figcaption{font-size:12px; color:var(--text-3); text-align:center; margin-top:6px;}

.home-modes{display:grid; grid-template-columns:repeat(auto-fit, minmax(260px, 1fr)); gap:12px;}
.home-mode{margin:0;}
.home-mode h3{font-size:19px; margin-bottom:8px;}
.home-mode p{color:var(--text-2); margin:0;}
.home-mode .home-mode-note{font-size:13px; color:var(--text-3); margin-top:10px;}

.story-card-tagline{font-weight:600;}
.story-card .badge + .story-card-title{margin-top:10px;}
.story-card-facts{font-size:14px; color:var(--text-3); margin:8px 0 0;}

.home-checklist{list-style:none; margin:0; padding:0; display:grid; gap:10px;}
.home-checklist li{position:relative; padding:12px 14px 12px 44px; background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-md); color:var(--text-2);}
.home-checklist li::before{content:""; position:absolute; left:16px; top:50%; width:14px; height:8px; margin-top:-6px; border:solid var(--accent); border-width:0 0 2px 2px; transform:rotate(-45deg);}

.home-chips{list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap; gap:8px;}
.home-chips li{padding:8px 14px; border-radius:var(--r-pill); background:var(--bg-chip); color:var(--text-2); font-size:14px;}

.faq-list{display:grid; gap:8px;}
.faq-item{background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--r-md);}
.faq-item summary{display:flex; align-items:center; justify-content:space-between; gap:12px; min-height:52px; padding:12px 16px; cursor:pointer; font-weight:600; list-style:none;}
.faq-item summary::-webkit-details-marker{display:none;}
.faq-item summary::after{content:"+"; flex:0 0 auto; font-size:22px; line-height:1; color:var(--accent);}
.faq-item[open] summary::after{content:"−";}
.faq-item summary:focus-visible{outline:2px solid var(--accent); outline-offset:2px; border-radius:var(--r-md);}
.faq-item p{margin:0; padding:0 16px 16px; color:var(--text-2);}

.home-cta{text-align:center; margin:40px 0 8px; padding:32px 20px; background:var(--accent-soft); border:1px solid var(--drink-strong-line); border-radius:var(--r-lg);}
.home-cta h2{font-size:24px; margin-bottom:18px;}

/* Story page (httpdocs/story.php) */
.story-page-back{margin:0 0 8px; font-size:14px;}
.story-page-back a{display:inline-block; padding:12px 0; color:var(--text-3);}
.story-page-head{display:flex; flex-wrap:wrap; gap:16px 24px; align-items:flex-start; margin-bottom:4px;}
.story-page-art{flex:0 0 auto; width:100%; max-width:320px; aspect-ratio:1/1; object-fit:cover; border-radius:var(--r-lg); border:1px solid var(--line);}
.story-page-intro{flex:1 1 260px; min-width:0;}
.story-page-intro h1{font-size:30px; line-height:1.15; margin:10px 0 8px;}
.story-page-tagline{font-size:17px; color:var(--text-2); margin:0;}
.story-page-desc{margin-top:24px;}
.story-card-title a,.home-featured h2 a{color:inherit;}
@media (max-width:600px){ .shop-page{padding:20px 4px 32px;} } /* page-shell already gives the 16px phone gutter */
@media (max-width:380px){ .site-brand{font-size:15px;} .site-join{padding:6px 10px;} }

/* Coven's live vote count in the ⋯ panel (play.php) */
.sabotage-btn{margin-top:16px; padding:14px 16px; font-size:18px; font-weight:700;}
.sabotage-btn[aria-pressed="true"]{background:transparent; color:var(--danger); border:2px solid var(--danger);}
.coven-tally{margin-bottom:18px; padding-bottom:14px; border-bottom:1px solid var(--line);}

/* Big screen: character art in place of initials (board.js) */
.board-avatar-img{position:relative; width:100%; max-width:200px; height:auto; aspect-ratio:1; border-radius:var(--r-md); background:var(--bg-sunken); overflow:visible;}
.board-avatar-img img{display:block; width:100%; height:100%; object-fit:cover; border-radius:var(--r-md); border:1px solid var(--line-strong);}
.board-murdered .board-avatar-img img,.board-banished .board-avatar-img img{filter:grayscale(1) brightness(.6);}
.board-avatar-ghost{position:absolute; right:-10px; bottom:-10px; font-size:44px; line-height:1;}
.board-protected .board-avatar-img img{border-color:var(--accent);}

/* Character art on the death screen and the murder/banish reveal card */
.death-image{display:block; width:150px; height:150px; object-fit:cover; border-radius:50%; border:2px solid var(--danger); margin:0 auto 8px; filter:grayscale(.6);}
.reveal-images{display:flex; justify-content:center; gap:12px; margin:12px 0 6px;}
.reveal-image{width:120px; height:120px; object-fit:cover; border-radius:50%; border:2px solid var(--accent);}

/* Character art in player rows (play.js playerRow) */
.player-initials.player-pic{background:var(--bg-sunken); overflow:hidden;}
.player-initials.player-pic img{display:block; width:100%; height:100%; object-fit:cover;}
/* Who's still in the game (play.php #roster-card) */
.roster-row{cursor:default;}
.roster-ghost{background:var(--ghost-raised); border-color:var(--ghost-line);}
.roster-ghost .player-name{color:var(--ghost);}
.roster-ghost .player-pic img{filter:grayscale(1) brightness(.65);}
.roster-ghosts-title{margin-top:18px;}

/* GM "Show roles": real name, character, words stacked */
#roles-list .lobby-name{display:flex; flex-direction:column; gap:2px; min-width:0;}
#roles-list .roles-real{font-weight:600;}
#roles-list .roles-char{color:var(--text-2, var(--text)); font-size:14px;}
#roles-list .roles-words{color:var(--text-3); font-size:13px; letter-spacing:.02em;}
#roles-list .roles-tag{color:var(--accent); font-size:13px;}
.board-left{opacity:.45;}
.board-left .board-avatar-img img{filter:grayscale(1);}
#roles-list .roles-row{flex-wrap:wrap;}
#roles-list .roles-side{display:flex; flex-direction:column; align-items:flex-end; gap:6px; flex-shrink:0;}
#roles-list .roles-remove{padding:4px 8px; min-height:0; font-size:13px;}
#roles-list .roles-pick{flex-basis:100%; margin-top:10px;}
#roles-list .roles-pick select{margin:6px 0 10px;}
.gm-player-btns .gp-ico{width:16px; height:16px; vertical-align:-3px;}
.vote-status{margin:0 0 14px; padding:14px 16px; border-radius:var(--r-lg, 16px); text-align:center;
  font-size:15px; line-height:1.4; font-weight:600; color:var(--text); background:var(--bg-raised); border:1px solid var(--line-strong);}
.vote-status-todo{background:var(--danger-bg); border-color:var(--danger); color:var(--text);}
.vote-status-saved{background:var(--accent); border-color:var(--accent); color:var(--accent-ink);}
.vote-status-saving{opacity:.75;}

/* Phone word boxes: secret word = yellow, blood pact = red, chats/whisper = yellow; grey when disabled (Gareth 2026-11-02) */
#recruit-form input, #team-chat-form input, #ghost-chat-form input, #whisper-input{border:2px solid var(--accent);}
#recruit-form .btn, #team-chat-form .btn, #ghost-chat-form .btn, #whisper-form .btn{border:2px solid var(--accent); color:var(--accent);}
#pact-form input{border:2px solid var(--danger);}
#pact-form .btn{border:2px solid var(--danger); color:var(--danger);}
#recruit-card > .flex-between .caps:first-child{color:var(--accent);}
#pact-card > .flex-between .caps:first-child{color:var(--danger);}
#recruit-input, #pact-input{text-transform:uppercase; letter-spacing:.06em; font-weight:600;}
#recruit-input::placeholder, #pact-input::placeholder{text-transform:none; letter-spacing:0; font-weight:400;}
#pact-form input:disabled, #recruit-form input:disabled, #team-chat-form input:disabled, #ghost-chat-form input:disabled, #whisper-input:disabled{border-color:var(--line-strong); opacity:.6;}
#pact-form .btn:disabled, #recruit-form .btn:disabled, #team-chat-form .btn:disabled, #ghost-chat-form .btn:disabled, #whisper-form .btn:disabled{border-color:var(--line-strong); color:var(--text-4); opacity:.6;}
#recruit-result, #pact-result{font-size:16px; line-height:1.4;}
.player-note{display:block; margin-top:3px; font-size:13px; font-weight:600; color:var(--accent);}

/* This chapter: what each side can do (play.php #actions-card) */
.actions-list{list-style:none; margin:8px 0 0; padding:0;}
.actions-list li{margin:8px 0 0; font-size:15px; line-height:1.4; color:var(--text-2);}
.actions-list li strong{color:var(--text);}
.actions-list li.actions-more{margin-top:2px; padding-left:12px;}
