/* ===========================================================
   MONSTER MAZE — styles
   =========================================================== */
:root{
  --bg0:#0b0716;
  --bg1:#170d2e;
  --ink:#efeaff;
  --muted:#9b93c7;

  --wall:#1a1330;
  --wall-2:#241a44;
  --floor-room:#3b3266;
  --floor-room-2:#352b5e;
  --floor-hall:#2b2350;
  --floor-hall-2:#262048;
  --door:#f4b740;

  --accent:#ff5d8f;
  --accent2:#7c5cff;
  --good:#56e39f;
  --gold:#ffcf5c;
  --fear:#ff3b6b;

  --tile:24px;
  --radius:16px;
  --shadow:0 18px 50px rgba(0,0,0,.55);
}

*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  color:var(--ink);
  background:
    radial-gradient(1200px 700px at 50% -10%, #2a1a4f 0%, transparent 60%),
    radial-gradient(900px 600px at 90% 110%, #3a1140 0%, transparent 55%),
    linear-gradient(160deg, var(--bg1), var(--bg0));
  background-attachment:fixed;
  overflow-x:hidden;
  -webkit-tap-highlight-color:transparent;
  user-select:none;
}

#app{min-height:100%;display:flex;flex-direction:column}

/* ---- drifting background ---- */
#bg-fog{position:fixed;inset:0;pointer-events:none;z-index:0;overflow:hidden}
#bg-fog span{
  position:absolute;font-size:42px;opacity:.10;
  animation:drift linear infinite;
  filter:blur(.3px);
}
#bg-fog span:nth-child(1){left:5%;  top:15%; animation-duration:34s}
#bg-fog span:nth-child(2){left:80%; top:25%; animation-duration:42s; font-size:54px}
#bg-fog span:nth-child(3){left:25%; top:70%; animation-duration:50s}
#bg-fog span:nth-child(4){left:60%; top:80%; animation-duration:38s; font-size:60px}
#bg-fog span:nth-child(5){left:45%; top:35%; animation-duration:46s}
#bg-fog span:nth-child(6){left:90%; top:65%; animation-duration:30s}
@keyframes drift{
  0%{transform:translateY(0) translateX(0) rotate(0)}
  50%{transform:translateY(-40px) translateX(30px) rotate(8deg)}
  100%{transform:translateY(0) translateX(0) rotate(0)}
}

/* ============ TITLE / SETUP ============ */
.screen{position:relative;z-index:1;flex:1;display:flex;align-items:center;justify-content:center;padding:24px}
.title-card{
  width:min(560px,94vw);
  background:linear-gradient(180deg, rgba(40,26,78,.75), rgba(18,11,38,.85));
  border:1px solid rgba(124,92,255,.35);
  border-radius:24px;
  padding:30px 28px 24px;
  box-shadow:var(--shadow);
  backdrop-filter:blur(8px);
  text-align:center;
}
.logo{
  margin:0 0 6px;
  font-size:clamp(40px,9vw,68px);
  font-weight:900;letter-spacing:2px;line-height:.95;
  text-shadow:0 0 18px rgba(124,92,255,.8), 0 0 40px rgba(255,93,143,.45);
}
.logo span{display:block;color:var(--accent);text-shadow:0 0 18px rgba(255,93,143,.85)}
.tag{color:var(--muted);margin:6px 2px 22px;font-size:15px;line-height:1.5}
.tag b{color:var(--ink)}

.options{display:flex;flex-direction:column;gap:16px;text-align:left;margin-bottom:22px}
.opt label{display:block;font-weight:700;margin-bottom:8px;font-size:14px}
.opt-row{display:flex;align-items:center;gap:12px}
.opt input[type=range]{flex:1;accent-color:var(--accent2);height:6px}
.pill{
  min-width:40px;text-align:center;font-weight:800;
  background:var(--accent2);color:#fff;border-radius:999px;padding:4px 10px;
}
.muted{color:var(--muted)}
.small{font-size:12px}

.toggle{
  display:inline-flex;align-items:center;gap:8px;
  background:#241a44;border:1px solid rgba(255,255,255,.12);
  color:var(--ink);border-radius:999px;padding:6px 14px 6px 6px;cursor:pointer;font-weight:800;
  transition:.18s;
}
.toggle .dot{width:18px;height:18px;border-radius:50%;background:#6b6390;transition:.18s}
.toggle.on{background:linear-gradient(90deg,var(--accent2),var(--accent));border-color:transparent}
.toggle.on .dot{background:#fff;box-shadow:0 0 10px #fff}

.big-btn{
  width:100%;border:none;cursor:pointer;
  background:linear-gradient(90deg,var(--accent2),var(--accent));
  color:#fff;font-weight:900;font-size:19px;letter-spacing:.5px;
  padding:16px;border-radius:16px;
  box-shadow:0 10px 30px rgba(255,93,143,.35);
  transition:transform .12s, box-shadow .12s, filter .12s;
}
.big-btn:hover:not(:disabled){transform:translateY(-2px);filter:brightness(1.07)}
.big-btn:active:not(:disabled){transform:translateY(0)}
.big-btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}

.how{margin-top:18px;text-align:left;color:var(--muted);font-size:13px}
.how summary{cursor:pointer;font-weight:800;color:var(--ink);margin-bottom:8px}
.how ol{margin:6px 0;padding-left:20px;line-height:1.6}
.how b{color:var(--accent)}

/* ============ GAME WRAP ============ */
.gamewrap{display:none;flex-direction:column;min-height:100vh;position:relative;z-index:1}
#app[data-phase="hide"] .gamewrap,
#app[data-phase="play"] .gamewrap{display:flex}
#app[data-phase="title"] #title{display:flex}
#app:not([data-phase="title"]) #title{display:none}

/* bars: show the right one for the phase + mode */
.bar{display:none;align-items:center;gap:12px;width:100%}
#app[data-phase="hide"] #topbar .bar-hide,
#app[data-phase="hide"] #bottombar .bar-hide{display:flex}
#app[data-phase="play"][data-mode="solo"] #topbar .bar-play,
#app[data-phase="play"][data-mode="solo"] #bottombar .bar-play{display:flex}
#app[data-phase="play"][data-mode="race"] #topbar .bar-race,
#app[data-phase="play"][data-mode="race"] #bottombar .bar-race{display:flex}

#topbar{
  padding:10px 14px;background:rgba(12,8,26,.72);
  border-bottom:1px solid rgba(124,92,255,.22);
  backdrop-filter:blur(6px);position:sticky;top:0;z-index:5;
}
.bar-title{font-weight:800}
.bar-left{flex:1}
.bar-mid{flex:0 0 auto}
.bar-right{flex:1;display:flex;gap:8px;justify-content:flex-end}
.counter{background:#241a44;padding:6px 12px;border-radius:999px;font-size:14px}
.counter b{color:var(--accent)}
.ghost-btn{
  background:#241a44;border:1px solid rgba(255,255,255,.12);color:var(--ink);
  border-radius:10px;padding:8px 12px;cursor:pointer;font-weight:700;font-size:14px;transition:.15s;
}
.ghost-btn:hover{background:#31265a}

/* ---- stage / board ---- */
.stage-wrap{flex:1;display:flex;align-items:safe center;justify-content:safe center;padding:14px;min-height:0;overflow:auto;position:relative}
.stage{position:relative;display:inline-block;line-height:0}
.board{
  display:grid;
  grid-template-columns:repeat(var(--cols),var(--tile));
  grid-template-rows:repeat(var(--rows),var(--tile));
  border-radius:14px;overflow:hidden;
  box-shadow:var(--shadow), 0 0 0 4px rgba(124,92,255,.18);
  background:var(--wall);
}
.tile{width:var(--tile);height:var(--tile);position:relative}
.tile.wall{
  background:
    linear-gradient(180deg, var(--wall-2), var(--wall));
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.25);
}
.tile.floor{
  background:var(--floor-hall);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.025);
}
.tile.floor.room{background:var(--floor-room)}
/* subtle checker so floors read as tiles */
.tile.floor::before{
  content:"";position:absolute;inset:0;
  background:rgba(255,255,255,.018);
  opacity:0;
}
.tile.floor.alt::before{opacity:1}
.tile.door{
  background:linear-gradient(180deg,#5a4520,#3a2c14);
}
.tile.door::after{
  content:"";position:absolute;inset:18% 30%;
  border-radius:3px 3px 0 0;
  background:linear-gradient(180deg,var(--door),#b9822a);
  box-shadow:0 0 8px rgba(244,183,64,.5);
}
.tile.start,.tile.end{display:flex;align-items:center;justify-content:center;font-size:calc(var(--tile)*.62)}
.tile.start{background:radial-gradient(circle, rgba(86,227,159,.5), var(--floor-hall));box-shadow:inset 0 0 14px rgba(86,227,159,.7)}
.tile.end{background:radial-gradient(circle, rgba(255,207,92,.55), var(--floor-hall));box-shadow:inset 0 0 14px rgba(255,207,92,.8);animation:pulseGold 1.6s infinite}
.tile.start::after{content:"🚪"}
.tile.end::after{content:"🚪"}
@keyframes pulseGold{0%,100%{box-shadow:inset 0 0 12px rgba(255,207,92,.6)}50%{box-shadow:inset 0 0 22px rgba(255,207,92,1)}}

/* entry/exit + their passage are disguised as plain wall while the Haunter hides monsters */
#app[data-phase="hide"] .tile.door-secret{
  background:linear-gradient(180deg,var(--wall-2),var(--wall));
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.25);
  animation:none;
}
#app[data-phase="hide"] .tile.door-secret::after,
#app[data-phase="hide"] .tile.door-secret::before{content:none;background:none;box-shadow:none}

/* placeable hint + hover during hide */
#app[data-phase="hide"] .tile.placeable{cursor:pointer}
#app[data-phase="hide"] .tile.placeable:hover{filter:brightness(1.35)}
#app[data-phase="hide"] .tile.placeable:hover::before{
  content:"";position:absolute;inset:0;background:rgba(124,92,255,.25);
  box-shadow:inset 0 0 0 2px var(--accent2);opacity:1;
}
/* monster marker (hide phase only) */
.tile .mon{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:calc(var(--tile)*.74);cursor:pointer;
  animation:bob 1.4s ease-in-out infinite;
  text-shadow:0 0 6px rgba(0,0,0,.6);
  z-index:2;
}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-12%)}}

/* ---- pickups (clock + calm juice), one of each per room ---- */
.tile .pickup{
  position:absolute;right:1px;bottom:0;
  font-size:calc(var(--tile)*.6);line-height:1;
  z-index:2;pointer-events:none;
  animation:bob 2s ease-in-out infinite;
}
.tile .pickup.clock{filter:drop-shadow(0 0 5px rgba(255,207,92,.9))}
.tile .pickup.calm{filter:drop-shadow(0 0 5px rgba(86,227,159,.9))}
/* rising pickup feedback text */
.floater{
  position:absolute;transform:translate(-50%,0);z-index:7;pointer-events:none;
  font-weight:900;font-size:calc(var(--tile)*.7);white-space:nowrap;
  text-shadow:0 1px 4px #000;animation:floatUp .9s ease-out forwards;
}
.floater.clock{color:var(--gold)}
.floater.calm{color:var(--good)}
@keyframes floatUp{from{opacity:1;transform:translate(-50%,0)}to{opacity:0;transform:translate(-50%,-34px)}}

/* ---- room labels ---- */
.labels{position:absolute;inset:0;pointer-events:none;z-index:3}
.labels .label{
  position:absolute;transform:translate(-50%,-50%);
  font-size:calc(var(--tile)*.42);
  font-weight:800;letter-spacing:.5px;text-transform:uppercase;
  color:rgba(255,255,255,.42);
  text-shadow:0 1px 3px rgba(0,0,0,.7);
  text-align:center;line-height:1;white-space:nowrap;
}

/* ---- player token ---- */
.token{
  position:absolute;top:0;left:0;
  width:var(--tile);height:var(--tile);
  display:flex;align-items:center;justify-content:center;
  font-size:calc(var(--tile)*.72);
  z-index:6;pointer-events:none;
  transition:transform .12s ease;
  filter:drop-shadow(0 0 8px rgba(124,92,255,.9));
}
.token::before{
  content:"";position:absolute;inset:8%;border-radius:50%;
  background:radial-gradient(circle, rgba(124,92,255,.55), transparent 70%);
  z-index:-1;
}
/* race: distinct colours per player */
.token.p1{filter:drop-shadow(0 0 8px #6ea8ff)}
.token.p1::before{background:radial-gradient(circle, rgba(110,168,255,.6), transparent 70%)}
.token.p2{filter:drop-shadow(0 0 8px #ffb35c)}
.token.p2::before{background:radial-gradient(circle, rgba(255,179,92,.6), transparent 70%)}
.token.scared{animation:tokenScared .3s ease-in-out 2}   /* flash red, never touches position transform */
.token.out{filter:grayscale(1) opacity(.5)}
@keyframes tokenScared{0%,100%{filter:drop-shadow(0 0 8px #ff4d4d)}50%{filter:drop-shadow(0 0 18px #ff0000)}}
#token{display:none}#token2{display:none}
#app[data-phase="play"] #token{display:flex}
#app[data-phase="play"][data-mode="race"] #token2{display:flex}

/* ---- exit beacon (shows Player 2 where the random exit is, glows through the dark) ---- */
.beacon{
  position:absolute;top:0;left:0;
  width:var(--tile);height:var(--tile);
  display:none;align-items:center;justify-content:center;
  font-size:calc(var(--tile)*.64);z-index:6;pointer-events:none;
  filter:drop-shadow(0 0 9px var(--gold)) drop-shadow(0 0 4px var(--gold));
  transform:translate(var(--bx,0),var(--by,0));
  animation:beaconPulse 1.3s ease-in-out infinite;
}
.beacon::before{
  content:"";position:absolute;inset:-30%;border-radius:50%;
  background:radial-gradient(circle, rgba(255,207,92,.55), transparent 68%);z-index:-1;
}
#app[data-phase="play"] .beacon{display:flex}
/* keep the translate in every keyframe so the pulse doesn't reset position */
@keyframes beaconPulse{
  0%,100%{transform:translate(var(--bx,0),var(--by,0)) scale(1);opacity:.95}
  50%{transform:translate(var(--bx,0),var(--by,0)) scale(1.14);opacity:1}
}

/* ---- flashlight darkness overlay (play + spooky) ---- */
.flash{position:absolute;inset:0;z-index:5;pointer-events:none;display:none;border-radius:14px}
#app[data-phase="play"] .flash.on{display:block}

/* ============ HIDE footer palette ============ */
#bottombar{padding:12px 14px 18px;background:rgba(12,8,26,.72);border-top:1px solid rgba(124,92,255,.22);backdrop-filter:blur(6px)}
#bottombar .bar-hide{flex-direction:column;gap:10px}
.palette{
  display:flex;flex-wrap:nowrap;gap:6px;justify-content:safe center;
  overflow-x:auto;width:100%;padding-bottom:4px;
  scrollbar-width:thin;
}
.swatch{
  display:flex;flex-direction:column;align-items:center;gap:1px;flex:0 0 auto;
  background:#241a44;border:2px solid transparent;border-radius:12px;
  padding:5px 8px;cursor:pointer;min-width:54px;transition:.15s;
}
.swatch:hover{background:#31265a}
.swatch.sel{border-color:var(--accent);background:#31265a;box-shadow:0 0 14px rgba(255,93,143,.4)}
.swatch .e{font-size:23px;line-height:1}
.swatch .n{font-size:10px;color:var(--muted);font-weight:700}
#bottombar .bar-hide .big-btn{max-width:340px;align-self:center}

/* ============ PLAY chrome (slim topbar) ============ */
.bar-play{justify-content:space-between}
.room-chip{background:#241a44;padding:6px 12px;border-radius:999px;max-width:46vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700}

/* ---- main row: sidebar + board ---- */
.main{flex:1;display:flex;flex-direction:column;min-height:0}
#sidebar{display:none}
#app[data-phase="play"][data-mode="solo"] #sidebar{
  display:flex;gap:10px;padding:10px 14px 0;
  flex-direction:row;flex-wrap:wrap;align-items:stretch;
}
.side-block{
  background:rgba(20,13,40,.72);border:1px solid rgba(124,92,255,.25);
  border-radius:16px;padding:10px 12px;flex:1 1 150px;min-width:140px;
  display:flex;flex-direction:column;gap:6px;justify-content:center;
}
.side-k{font-size:11px;font-weight:800;letter-spacing:.6px;color:var(--muted);text-transform:uppercase}

/* big prominent speedrun timer */
.timer-block{flex:1 1 200px}
.big-timer{
  font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;font-weight:900;
  font-size:clamp(32px,8vw,50px);line-height:1;color:#fff;
  text-shadow:0 0 16px rgba(124,92,255,.75);letter-spacing:1px;
}
.best{font-size:12px;color:var(--gold);font-weight:800}

/* ---- monster radar: a prominent pill pinned to the top-centre of the board ---- */
#radar{
  position:absolute;top:8px;left:50%;transform:translateX(-50%);
  z-index:8;display:none;            /* play phase only, sits above the flashlight */
}
#app[data-phase="play"][data-mode="solo"] #radar{display:flex}
.radar-top{
  align-items:center;gap:9px;max-width:92%;
  padding:6px 16px;border-radius:999px;
  background:rgba(18,11,38,.92);border:1px solid rgba(124,92,255,.45);
  box-shadow:0 6px 22px rgba(0,0,0,.5);backdrop-filter:blur(4px);
}
.radar-top .rb-label{font-size:18px;line-height:1}
.radar-bars{display:flex;align-items:flex-end;gap:4px;width:42px;height:22px;flex:0 0 auto}
.radar-bars .rb{flex:1;background:#2c2350;border-radius:4px;opacity:.45;transition:.15s}
.radar-bars .rb:nth-child(1){height:48%}
.radar-bars .rb:nth-child(2){height:74%}
.radar-bars .rb:nth-child(3){height:100%}
.radar-status{font-size:14px;font-weight:900;color:var(--good);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#radar.level-1 .rb.on{background:#ffe06a;opacity:1;box-shadow:0 0 8px rgba(255,224,106,.6)}
#radar.level-3 .rb.on{background:#ff3b6b;opacity:1;box-shadow:0 0 12px rgba(255,59,107,.9)}
#radar.level-1 .radar-status{color:#ffe06a}
#radar.level-3 .radar-status{color:#ff6b8f}
#radar.level-3{border-color:#ff3b6b;animation:radarpulse .7s infinite}
@keyframes radarpulse{0%,100%{box-shadow:0 0 0 0 rgba(255,59,107,0)}50%{box-shadow:0 0 18px 2px rgba(255,59,107,.55)}}

/* fear meter (now in sidebar) */
.fear-face{font-size:26px;line-height:1}
.fear-row{display:flex;align-items:center;gap:8px}
.fear-track{
  position:relative;flex:1;height:18px;border-radius:999px;overflow:hidden;
  background:#241a44;box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);
}
.fear-fill{
  position:absolute;inset:0;width:0%;
  background:linear-gradient(90deg,var(--good),var(--gold) 55%,var(--fear));
  transition:width .35s ease;
}
.fear-pct{font-weight:800;font-size:13px;min-width:36px;text-align:right}
.steps{font-size:12px;color:var(--muted);font-weight:700}

/* ============ segmented controls (title) ============ */
.seg{display:flex;gap:6px;background:#1c1438;border-radius:12px;padding:4px}
.seg-btn{
  flex:1;border:none;cursor:pointer;border-radius:9px;padding:9px 8px;
  background:transparent;color:var(--muted);font-weight:800;font-size:13px;transition:.15s;
}
.seg-btn:hover{color:var(--ink)}
.seg-btn.sel{background:linear-gradient(90deg,var(--accent2),var(--accent));color:#fff;box-shadow:0 4px 14px rgba(255,93,143,.3)}

/* ============ RACE mode HUD ============ */
#topbar .bar-race{align-items:stretch;gap:10px;justify-content:space-between}
#topbar .bar-race .rp{
  flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:4px;
  background:rgba(20,13,40,.6);border:1px solid rgba(124,92,255,.25);border-radius:12px;padding:6px 10px;
}
#topbar .bar-race .rp.p1side{border-color:rgba(110,168,255,.5)}
#topbar .bar-race .rp.p2side{border-color:rgba(255,179,92,.5)}
.rp-name{font-size:12px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rp.p1side .rp-name{color:#6ea8ff}
.rp.p2side .rp-name{color:#ffb35c}
.bar-race .fear-track{height:13px;flex:0 0 auto}
.race-mid{display:flex;flex-direction:column;align-items:center;gap:2px;flex:0 0 auto}
.race-timer{
  font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;font-weight:900;
  font-size:clamp(22px,4vw,34px);color:#fff;text-shadow:0 0 12px rgba(124,92,255,.7);line-height:1;letter-spacing:1px;
}
.race-mid .bar-right{flex:0 0 auto;gap:6px}

/* mini radar (per player, horizontal segments) */
.mini-radar{display:flex;gap:4px;align-items:center;height:13px}
.mini-radar .rb{flex:1;height:100%;border-radius:4px;background:#2c2350;opacity:.45;transition:.15s}
.mini-radar.level-1 .rb.on{background:#ffe06a;opacity:1}
.mini-radar.level-3 .rb.on{background:#ff3b6b;opacity:1;box-shadow:0 0 8px rgba(255,59,107,.9)}
.mini-radar.level-3{animation:radarpulse .7s infinite}

/* race dpads (two small) */
#bottombar .bar-race{justify-content:center;gap:6vw;align-items:center}
.dpad-sm button{width:48px;height:42px;font-size:18px}
.dpad-sm.p1 button:active{background:#3a6bd6}
.dpad-sm.p2 button:active{background:#d68b3a}
.hint-race{margin:0;color:var(--muted);font-size:13px;font-weight:800;text-align:center}

/* mini jump-scare (race localized) */
.mini-scare{
  position:absolute;transform:translate(-50%,-50%);z-index:9;pointer-events:none;
  font-size:calc(var(--tile)*2.2);line-height:1;filter:drop-shadow(0 0 14px rgba(255,93,143,.85));
  animation:miniScare .75s ease-out forwards;
}
@keyframes miniScare{
  0%{transform:translate(-50%,-50%) scale(.2);opacity:0}
  30%{transform:translate(-50%,-50%) scale(1.15);opacity:1}
  100%{transform:translate(-50%,-50%) scale(1);opacity:0}
}

/* wide screens: sidebar becomes a left column */
@media (min-width:900px){
  .main{flex-direction:row}
  #app[data-phase="play"] #sidebar{
    flex-direction:column;flex-wrap:nowrap;width:224px;flex:0 0 224px;
    padding:14px;align-content:flex-start;
  }
  .side-block{flex:0 0 auto}
}

#bottombar .bar-play{flex-direction:column;gap:8px;align-items:center}
.dpad{display:flex;flex-direction:column;align-items:center;gap:6px}
.dpad button{
  width:60px;height:54px;font-size:22px;font-weight:900;
  background:linear-gradient(180deg,#2f2456,#241a44);
  border:1px solid rgba(255,255,255,.12);color:var(--ink);
  border-radius:14px;cursor:pointer;transition:.1s;
}
.dpad button:active{transform:scale(.92);background:var(--accent2)}
.dpad-mid{display:flex;gap:6px}
.hint{margin:2px 0 0;color:var(--muted);font-size:12px}

/* shake effect for board */
.stage.shake{animation:shake .5s}
@keyframes shake{
  0%,100%{transform:translate(0,0)}
  15%{transform:translate(-8px,4px) rotate(-1deg)}
  30%{transform:translate(7px,-6px) rotate(1deg)}
  45%{transform:translate(-6px,5px)}
  60%{transform:translate(6px,-3px) rotate(.5deg)}
  75%{transform:translate(-4px,2px)}
}

/* ============ OVERLAYS ============ */
.overlay{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:24px;
  background:rgba(7,4,18,.78);backdrop-filter:blur(4px)}
.overlay.hidden{display:none}
/* hand-off screen is fully opaque so Player 2 can't peek at the hiding spots */
#getready{background:#0b0716;backdrop-filter:blur(12px)}
.ov-card{
  width:min(480px,92vw);text-align:center;
  background:linear-gradient(180deg, rgba(40,26,78,.95), rgba(18,11,38,.97));
  border:1px solid rgba(124,92,255,.4);border-radius:22px;padding:30px 26px;
  box-shadow:var(--shadow);animation:pop .35s cubic-bezier(.2,1.4,.4,1);
}
@keyframes pop{from{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}
.ov-emoji{font-size:64px;line-height:1;margin-bottom:8px;animation:bob 1.6s infinite}
.ov-card h2{margin:6px 0 10px;font-size:28px}
.ov-card p{color:var(--muted);line-height:1.55;margin:8px 0}
.ov-card .big-btn{margin-top:16px}
.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:16px 0}
.stat{background:#241a44;border-radius:14px;padding:12px}
.stat .v{font-size:24px;font-weight:900}
.stat .k{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
.btn-row{display:flex;gap:10px;flex-wrap:wrap}
.btn-row .big-btn{flex:1;min-width:130px;font-size:16px;padding:13px}
.btn-row .ghost-btn{flex:1;min-width:90px;padding:13px}

/* ---- SPOOK jumpscare ---- */
.overlay.spook{background:rgba(7,4,18,.5)}
.spook-inner{display:flex;flex-direction:column;align-items:center;gap:10px}
.spook-emoji{font-size:min(46vw,300px);line-height:1;filter:drop-shadow(0 0 30px rgba(255,93,143,.7))}
.overlay.spook.show .spook-emoji{animation:jump .55s cubic-bezier(.2,1.5,.3,1), wiggle .35s 0.55s 2}
@keyframes jump{0%{transform:scale(0) rotate(-25deg)}70%{transform:scale(1.15) rotate(8deg)}100%{transform:scale(1) rotate(0)}}
@keyframes wiggle{0%,100%{transform:rotate(0)}25%{transform:rotate(-9deg)}75%{transform:rotate(9deg)}}
.spook-bubble{
  font-size:clamp(40px,12vw,90px);font-weight:900;color:#fff;
  text-shadow:0 0 18px var(--accent),0 0 40px var(--accent2);letter-spacing:2px;
}
.overlay.spook.show .spook-bubble{animation:pop .4s .1s both}

/* ---- toast (placement rules) ---- */
#toast{
  position:fixed;left:50%;top:72px;transform:translateX(-50%) translateY(-12px);
  background:rgba(20,13,40,.97);border:1px solid var(--accent);color:var(--ink);
  padding:12px 20px;border-radius:14px;font-weight:800;font-size:15px;text-align:center;
  box-shadow:var(--shadow);z-index:60;opacity:0;pointer-events:none;max-width:90vw;
  transition:opacity .2s, transform .2s;
}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ============ responsive ============ */
@media (max-width:560px){
  .room-chip{max-width:42vw}
  .radar-top{gap:7px;padding:5px 11px}
  .radar-status{font-size:13px}
  .dpad button{width:56px;height:50px}
}
@media (max-height:680px){
  .ov-emoji{font-size:48px}
  .ov-card{padding:22px 20px}
}
