:root{
  --beige:#c9b48f;
  --green:#2f6f63;
  --tile:#a79a7c;
  --rust:#7a4a2b;
  --black:#0b0d0c;
  --danger:#7a1f18;
  --exit:#3fe08a;
  --ink:#e9e2d3;
  --ink-dim:#a89f8c;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{
  margin:0;padding:0;height:100%;
  background:var(--black);color:var(--ink);
  font-family:'Tajawal',system-ui,-apple-system,'Segoe UI',sans-serif;
  overflow:hidden;overscroll-behavior:none;
  -webkit-font-smoothing:antialiased;
}
button{font-family:inherit;color:inherit;}
#app{position:relative;display:flex;flex-direction:column;height:100%;min-height:0;max-height:100%;overflow:hidden;}

/* ---------- HUD ---------- */
.hud{
  flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:7px 10px;
  background:linear-gradient(180deg,rgba(11,13,12,.98),rgba(11,13,12,.72));
  border-bottom:1px solid rgba(201,180,143,.14);
  font-size:12px;user-select:none;z-index:20;
}
.hud-group{display:flex;align-items:center;gap:6px;min-width:0;}
.pill{
  display:flex;align-items:center;gap:6px;
  padding:4px 8px;border-radius:9px;
  background:rgba(201,180,143,.07);
  border:1px solid rgba(201,180,143,.16);
  color:var(--beige);
  font-weight:700;font-size:12px;white-space:nowrap;
}
.mini-bar{width:46px;height:7px;border-radius:4px;background:rgba(0,0,0,.55);overflow:hidden;border:1px solid rgba(201,180,143,.22);}
.mini-bar i{display:block;height:100%;width:100%;background:linear-gradient(90deg,#3fe08a,#e0c23f);transition:width .25s linear,background .3s;}
.icon-btn{
  width:32px;height:32px;border-radius:9px;display:grid;place-items:center;
  background:rgba(201,180,143,.08);border:1px solid rgba(201,180,143,.2);
  color:var(--beige);cursor:pointer;transition:background .15s,transform .1s;
}
.icon-btn:hover{background:rgba(201,180,143,.18);}
.icon-btn:active{transform:scale(.94);}

/* ---------- stage ---------- */
#stage{
  position:relative;flex:1 1 0%;min-height:0;max-height:100%;overflow:hidden;
  background:#05070a;touch-action:none;
}
/* canvas is absolutely positioned so its pixel buffer never adds height
   to the flex column (that pushed the control dock off-screen) */
#view{display:block;position:absolute;inset:0;width:100%;height:100%;}
.vignette{
  position:absolute;inset:0;pointer-events:none;z-index:3;
  background:radial-gradient(ellipse at 50% 50%,rgba(0,0,0,0) 42%,rgba(0,0,0,.62) 100%);
  mix-blend-mode:multiply;
}
.crosshair{
  position:absolute;left:50%;top:50%;width:5px;height:5px;margin:-2.5px 0 0 -2.5px;
  border-radius:50%;background:rgba(233,226,211,.55);
  box-shadow:0 0 6px rgba(0,0,0,.9);pointer-events:none;z-index:4;
}
.stamina-wrap{
  position:absolute;left:12px;bottom:12px;width:110px;height:5px;border-radius:3px;
  background:rgba(0,0,0,.5);border:1px solid rgba(201,180,143,.2);
  overflow:hidden;opacity:0;transition:opacity .25s;z-index:4;pointer-events:none;
}
.stamina-wrap.on{opacity:1;}
.stamina-wrap i{display:block;height:100%;width:100%;background:#3fe08a;transition:width .1s linear;}

.prompt{
  position:absolute;left:50%;bottom:64px;transform:translateX(-50%);
  padding:7px 14px;border-radius:10px;
  background:rgba(11,13,12,.86);border:1px solid rgba(201,180,143,.32);
  color:var(--beige);font-size:13px;font-weight:700;white-space:nowrap;
  z-index:5;pointer-events:none;max-width:92vw;overflow:hidden;text-overflow:ellipsis;
}
.subtitle{
  position:absolute;left:50%;bottom:104px;transform:translateX(-50%);
  padding:8px 16px;border-radius:12px;max-width:86vw;text-align:center;
  background:rgba(8,10,9,.9);border:1px solid rgba(122,31,24,.55);
  color:#e8d9c9;font-size:15px;font-weight:500;line-height:1.5;
  z-index:6;pointer-events:none;animation:subIn .3s ease-out;
}
.subtitle b{color:#e0a3a3;font-weight:800;}
@keyframes subIn{from{opacity:0;transform:translateX(-50%) translateY(8px);}to{opacity:1;}}
.toast{
  position:absolute;left:50%;top:16px;transform:translateX(-50%);
  padding:8px 16px;border-radius:11px;
  background:rgba(47,111,99,.92);border:1px solid rgba(63,224,138,.45);
  color:#eafaf1;font-size:13px;font-weight:700;z-index:7;pointer-events:none;
  animation:toastIn .25s ease-out;max-width:90vw;text-align:center;
}
@keyframes toastIn{from{opacity:0;transform:translateX(-50%) scale(.94);}to{opacity:1;transform:translateX(-50%) scale(1);}}
.hidden{display:none !important;}

/* ---------- controls ---------- */
#controls{
  flex:0 0 auto;display:flex;align-items:flex-end;justify-content:space-between;
  gap:6px;padding:6px 8px;max-width:100%;min-width:0;
  background:linear-gradient(0deg,rgba(11,13,12,.99),rgba(11,13,12,.7));
  border-top:1px solid rgba(201,180,143,.14);
  z-index:20;user-select:none;
}
.ctrl-group{display:flex;gap:5px;flex:0 0 auto;min-width:0;}
.dpad{display:grid;grid-template-columns:repeat(3,44px);grid-template-rows:repeat(2,44px);gap:5px;}
.dpad .up{grid-column:2;grid-row:1;}
.dpad .left{grid-column:1;grid-row:2;}
.dpad .down{grid-column:2;grid-row:2;}
.dpad .right{grid-column:3;grid-row:2;}
.acts{display:grid;grid-template-columns:repeat(2,48px);grid-template-rows:repeat(2,44px);gap:5px;}
.btn-ctrl{
  width:100%;height:100%;border-radius:13px;
  background:linear-gradient(180deg,rgba(47,111,99,.26),rgba(47,111,99,.12));
  border:1px solid rgba(201,180,143,.28);
  color:var(--beige);display:flex;align-items:center;justify-content:center;
  cursor:pointer;touch-action:none;transition:transform .08s,background .12s,border-color .12s;
  padding:0;
}
.btn-ctrl svg{width:19px;height:19px;}
.btn-ctrl.act{flex-direction:column;gap:1px;font-size:9.5px;font-weight:700;}
.btn-ctrl.act svg{width:17px;height:17px;}
.btn-ctrl:active,.btn-ctrl.on{
  background:linear-gradient(180deg,rgba(63,224,138,.42),rgba(47,111,99,.3));
  border-color:rgba(63,224,138,.7);transform:scale(.95);color:#eafaf1;
}
.btn-ctrl.on{box-shadow:0 0 12px rgba(63,224,138,.35) inset;}

/* ---------- overlays ---------- */
.overlay{
  position:absolute;inset:0;z-index:60;overflow-y:auto;-webkit-overflow-scrolling:touch;
  background:linear-gradient(180deg,rgba(10,13,12,.93),rgba(8,10,9,.86) 45%,rgba(10,13,12,.97));
  backdrop-filter:blur(3px);
}
.overlay-inner{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;padding:14px 12px 18px;}
.panel{
  width:100%;max-width:440px;margin:auto 0;
  padding:22px 20px;border-radius:18px;
  background:linear-gradient(180deg,rgba(24,30,28,.96),rgba(14,18,17,.98));
  border:1px solid rgba(201,180,143,.18);
  box-shadow:0 18px 50px rgba(0,0,0,.7),0 0 0 1px rgba(0,0,0,.4) inset;
  text-align:center;
}
.kicker{margin:0 0 4px;font-size:11px;letter-spacing:.04em;color:var(--ink-dim);font-weight:700;}
.kicker.danger{color:#d98a80;}
.kicker.exit{color:var(--exit);}
.title{
  font-family:'Amiri',serif;font-size:52px;line-height:1.05;margin:2px 0 12px;
  color:#e7dcc4;text-shadow:0 0 26px rgba(63,224,138,.16),0 3px 0 rgba(0,0,0,.6);
  letter-spacing:0;
}
.h2{font-family:'Amiri',serif;font-size:26px;margin:0 0 8px;color:#e7dcc4;}
.h2.big{font-size:40px;margin-bottom:6px;}
.lead{margin:0 0 14px;font-size:14px;line-height:1.65;color:#c8bfad;}
.lead.small{font-size:13px;color:var(--ink-dim);}
.ctrl-hint{
  display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:0 0 12px;
}
.ctrl-hint > div{
  display:flex;flex-direction:column;gap:1px;align-items:center;
  padding:7px 4px;border-radius:9px;
  background:rgba(201,180,143,.06);border:1px solid rgba(201,180,143,.12);
}
.ctrl-hint b{font-size:12px;color:#e7dcc4;letter-spacing:.02em;}
.ctrl-hint span{font-size:10.5px;color:var(--ink-dim);}
.hint-small{font-size:11.5px;line-height:1.6;color:var(--ink-dim);margin:8px 0 0;}
.hint-small.dim{opacity:.75;}
.start-extra{margin-top:12px;}
.start-extra .lead{margin-top:0;}
.btn-primary{
  width:100%;min-height:50px;margin-top:12px;border-radius:13px;cursor:pointer;
  background:linear-gradient(180deg,#3fe08a,#2f9d68);
  color:#06120c;font-size:16px;font-weight:800;letter-spacing:.01em;
  border:1px solid rgba(63,224,138,.6);
  box-shadow:0 8px 24px rgba(47,157,104,.32),0 1px 0 rgba(255,255,255,.25) inset;
  transition:transform .1s,filter .15s;
}
.btn-primary:hover{filter:brightness(1.08);}
.btn-primary:active{transform:scale(.98);}
.btn-ghost{
  flex:1;min-height:44px;border-radius:12px;cursor:pointer;
  background:rgba(201,180,143,.07);border:1px solid rgba(201,180,143,.22);
  color:var(--beige);font-size:13.5px;font-weight:700;
  transition:background .15s,transform .1s;
}
.btn-ghost:hover{background:rgba(201,180,143,.14);}
.btn-ghost:active{transform:scale(.98);}
.row-btns{display:flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap;}
.row-btns.col{flex-direction:column;align-items:stretch;}
.best{font-size:12px;color:var(--ink-dim);white-space:nowrap;}
.best b{color:var(--exit);}
.slider-row{display:flex;align-items:center;gap:10px;margin:6px 0 4px;font-size:12.5px;color:var(--ink-dim);}
.slider-row input[type=range]{flex:1;accent-color:#3fe08a;height:28px;}
.score-box{
  display:grid;grid-template-columns:1fr 1fr;gap:6px 10px;margin:10px 0 4px;
  padding:12px;border-radius:12px;background:rgba(0,0,0,.32);
  border:1px solid rgba(201,180,143,.14);font-size:12.5px;text-align:right;
}
.score-box span{color:var(--ink-dim);}
.score-box b{color:#e7dcc4;float:left;font-variant-numeric:tabular-nums;}
.board-list{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:6px;max-height:32vh;overflow-y:auto;}
.board-list li{
  display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:10px;
  background:rgba(201,180,143,.06);border:1px solid rgba(201,180,143,.1);
  font-size:13px;color:#d8cfbd;text-align:right;
}
.board-list li.me{background:rgba(63,224,138,.14);border-color:rgba(63,224,138,.4);color:#eafaf1;}
.board-list li .rk{width:26px;color:var(--ink-dim);font-weight:800;}
.board-list li .hl{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.board-list li .sc{font-variant-numeric:tabular-nums;font-weight:800;color:var(--beige);}
.board-list li.muted{justify-content:center;color:var(--ink-dim);font-size:12.5px;line-height:1.6;text-align:center;}

/* ---------- grab jumpscare ---------- */
.overlay.grab{
  background:#000;padding:0;overflow:hidden;z-index:90;
  animation:grabShake .42s linear infinite;
}
.grab-img{
  position:absolute;inset:0;
  background:radial-gradient(ellipse at 50% 42%,#3a1512 0%,#120505 55%,#000 100%);
  background-image:url('assets/naddaha.png');
  background-size:cover;background-position:center 30%;
  animation:grabZoom 1.5s cubic-bezier(.3,.9,.2,1) forwards;
  filter:contrast(1.15) saturate(.75) brightness(.92);
}
.grab-flash{position:absolute;inset:0;background:#7a1f18;opacity:0;animation:grabFlash .5s ease-out .12s;}
@keyframes grabZoom{from{transform:scale(1.35);opacity:.2;}60%{opacity:1;}to{transform:scale(1.02);opacity:1;}}
@keyframes grabShake{0%{transform:translate(0,0);}25%{transform:translate(-3px,2px);}50%{transform:translate(3px,-2px);}75%{transform:translate(-2px,-1px);}100%{transform:translate(2px,1px);}}
@keyframes grabFlash{0%{opacity:.85;}100%{opacity:0;}}

::-webkit-scrollbar{width:6px;}
::-webkit-scrollbar-thumb{background:rgba(201,180,143,.25);border-radius:3px;}

@media (max-width:430px){
  .dpad{grid-template-columns:repeat(3,42px);grid-template-rows:repeat(2,42px);}
  .acts{grid-template-columns:repeat(2,46px);grid-template-rows:repeat(2,42px);}
  .title{font-size:44px;}
  .panel{padding:18px 16px;}
  .prompt{bottom:56px;font-size:12px;}
  .subtitle{bottom:92px;font-size:13.5px;}
}
@media (max-height:520px){
  .panel{padding:14px 14px;border-radius:14px;}
  .title{font-size:34px;margin-bottom:6px;}
  .start-extra{display:none;}
  .overlay-inner{padding:8px 10px 10px;}
  .row-btns{margin-top:6px;}
  .score-box.pad{margin-top:6px;}
  .lead{font-size:12.5px;margin-bottom:8px;line-height:1.5;}
  .ctrl-hint{display:none;}
  .h2.big{font-size:28px;}
  .btn-primary{min-height:44px;margin-top:8px;}
  .overlay-inner{padding:10px;}
  .dpad{grid-template-columns:repeat(3,38px);grid-template-rows:repeat(2,38px);}
  .acts{grid-template-columns:repeat(2,42px);grid-template-rows:repeat(2,38px);}
  .btn-ctrl{border-radius:10px;}
  .hud{padding:4px 8px;}
}
@media (prefers-reduced-motion:reduce){
  .overlay.grab{animation:none;}
  .grab-img{animation-duration:.2s;}
  .subtitle,.toast{animation:none;}
}