:root{
  --bg:#0b0e1a; --card:#171c30; --card2:#1f2542;
  --txt:#ffffff; --sub:#9aa3c7;
  --gold:#ffc800; --gold-d:#c79b00;
  --purple:#ce82ff; --purple-d:#9a4fd1;
  --green:#58cc02; --green-d:#3f9e00;
  --blue:#1cb0f6; --blue-d:#1487bd;
  --red:#ff4b4b; --red-d:#c93a3a;
  --orange:#ff9600; --orange-d:#c67400;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
[hidden]{display:none!important}
html,body{height:100%}
body{
  background:var(--bg); color:var(--txt);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  touch-action:manipulation; overscroll-behavior:none;
  -webkit-user-select:none; user-select:none;
}

/* ============ ESTANTE ============ */
#shelf{max-width:560px;margin:0 auto;padding:max(18px,env(safe-area-inset-top)) 18px 40px}
.shelf-head{text-align:center;margin-bottom:18px;padding-top:10px}
.logo{font-size:34px;font-weight:900;letter-spacing:1px}
.logo span{color:var(--gold)}
.tagline{color:var(--sub);font-weight:700;margin-top:4px;font-size:14px}

.tv-chip{
  display:block;width:100%;padding:16px;margin:0 0 22px;
  background:var(--blue);color:#fff;font-size:17px;font-weight:900;
  border:none;border-radius:18px;cursor:pointer;
  box-shadow:0 5px 0 var(--blue-d);
}
.tv-chip:active{transform:translateY(3px);box-shadow:0 2px 0 var(--blue-d)}
.tv-chip.on{background:var(--green);box-shadow:0 5px 0 var(--green-d)}
.tv-chip.on:active{box-shadow:0 2px 0 var(--green-d)}

.section-title{font-size:14px;font-weight:900;color:var(--sub);letter-spacing:2px;margin-bottom:12px}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.gcard{
  border:none;border-radius:20px;padding:18px 12px 16px;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;gap:8px;
  color:#fff;font-family:inherit;
}
.gcard:active{transform:translateY(3px)}
.gcard .em{font-size:44px;line-height:1}
.gcard .tt{font-weight:900;font-size:15px;text-align:center;line-height:1.15}
.gcard .tag{
  font-size:10px;font-weight:900;letter-spacing:1px;
  background:rgba(0,0,0,.28);padding:3px 8px;border-radius:8px;
}
.gcard.add{background:var(--card);box-shadow:0 5px 0 #0c0f1d;border:3px dashed #39406b}
.gcard.add:active{box-shadow:0 2px 0 #0c0f1d}
.foot{margin-top:26px;color:var(--sub);font-size:12px;line-height:1.5;text-align:center}
.tv-link{display:block;margin-top:14px;text-align:center;color:var(--blue);font-weight:800;font-size:13px;text-decoration:none}

/* ============ JOGO ============ */
#play{position:fixed;inset:0;display:flex;flex-direction:column;background:var(--bg)}
#playTop{
  display:flex;align-items:center;gap:10px;
  padding:max(10px,env(safe-area-inset-top)) 12px 8px;
}
.top-btn{
  width:42px;height:42px;border:none;border-radius:14px;flex:0 0 auto;
  background:var(--card2);color:#fff;font-size:18px;font-weight:900;cursor:pointer;
  box-shadow:0 4px 0 #10142a;
}
.top-btn:active{transform:translateY(2px);box-shadow:0 2px 0 #10142a}
#playTitle{font-weight:900;font-size:16px;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#tvState{font-size:12px;font-weight:900;color:var(--green)}

#stage{flex:1;position:relative;min-height:0}
body.tv-on #stage{flex:0 0 30vh}
#game{position:absolute;inset:0}
/* esconde o gamepad virtual do EmulatorJS quando usamos o nosso (modo TV) */
body.tv-on #game [class*="irtual"]{display:none!important}

#mirror{position:fixed;bottom:2px;right:2px;width:2px;height:2px;opacity:.9;pointer-events:none}

/* ============ GAMEPAD ============ */
#pad{flex:1;position:relative;min-height:250px;padding-bottom:env(safe-area-inset-bottom)}
.pbtn{
  position:absolute;border:none;color:#fff;font-weight:900;cursor:pointer;
  font-family:inherit;touch-action:none;
}
.pbtn:active{filter:brightness(1.25)}
#dpad{position:absolute;left:16px;top:50%;transform:translateY(-58%);width:186px;height:186px}
.dir{
  width:62px;height:62px;background:var(--card2);font-size:20px;
  border-radius:14px;box-shadow:0 5px 0 #10142a;color:var(--sub);
}
.dir:active{transform:translateY(2px);box-shadow:0 2px 0 #10142a}
.up{left:62px;top:0}.left{left:0;top:62px}.right{left:124px;top:62px}.down{left:62px;top:124px}
#abgrp{position:absolute;right:16px;top:50%;transform:translateY(-58%);width:170px;height:150px}
.round{width:76px;height:76px;border-radius:50%;font-size:24px}
.bA{right:0;top:0;background:var(--red);box-shadow:0 6px 0 var(--red-d)}
.bA:active{transform:translateY(3px);box-shadow:0 2px 0 var(--red-d)}
.bB{left:0;bottom:0;background:var(--gold);color:#5b4700;box-shadow:0 6px 0 var(--gold-d)}
.bB:active{transform:translateY(3px);box-shadow:0 2px 0 var(--gold-d)}
#ssgrp{position:absolute;left:50%;transform:translateX(-50%);bottom:max(14px,env(safe-area-inset-bottom));display:flex;gap:12px}
.pill{
  position:static;padding:10px 18px;border-radius:14px;font-size:12px;letter-spacing:1px;
  background:var(--card);color:var(--sub);box-shadow:0 4px 0 #0c0f1d;
}
.pill:active{transform:translateY(2px);box-shadow:0 2px 0 #0c0f1d}

/* ============ MODAL TV ============ */
#tvModal{position:fixed;inset:0;background:rgba(5,7,15,.86);z-index:500;display:flex;align-items:center;justify-content:center;padding:20px}
.modal-card{
  background:var(--card);border-radius:24px;padding:26px 22px;max-width:420px;width:100%;
  box-shadow:0 8px 0 #090c17;position:relative;
}
.mclose{position:absolute;right:14px;top:14px}
#tvOptions{display:flex;flex-direction:column;gap:12px;margin-bottom:8px}
.opt-btn{
  display:flex;align-items:center;gap:14px;text-align:left;padding:14px;
  border:none;border-radius:16px;background:var(--card2);color:#fff;
  font-family:inherit;cursor:pointer;box-shadow:0 4px 0 #10142a;font-size:15px;line-height:1.3;
}
.opt-btn small{color:var(--sub);font-weight:600}
.opt-btn:active{transform:translateY(2px);box-shadow:0 2px 0 #10142a}
.opt-em{font-size:26px}
#airVideo{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#000;z-index:5;pointer-events:none}
#mirrorSheet{position:fixed;inset:0;background:rgba(5,7,15,.8);z-index:600;display:flex;align-items:flex-end;justify-content:center}
.sheet-card{
  background:var(--card);border-radius:24px 24px 0 0;padding:24px 22px calc(20px + env(safe-area-inset-bottom));
  width:100%;max-width:560px;box-shadow:0 -4px 0 #090c17;
}
.modal-title{font-size:22px;font-weight:900;margin-bottom:14px}
.steps{margin:0 0 16px 20px;color:#d7dcf5;font-size:15px;line-height:1.55}
.steps b{color:#fff}
.url{
  display:inline-block;background:#0c0f1d;color:var(--gold);font-weight:900;
  padding:6px 10px;border-radius:10px;margin-top:4px;font-size:15px;word-break:break-all;
}
#codeInput{
  width:100%;padding:14px;font-size:32px;font-weight:900;text-align:center;letter-spacing:14px;
  background:#0c0f1d;color:#fff;border:3px solid #39406b;border-radius:16px;outline:none;
}
#codeInput:focus{border-color:var(--blue)}
.big-btn{
  width:100%;margin-top:14px;padding:16px;border:none;border-radius:18px;cursor:pointer;
  background:var(--green);color:#fff;font-size:18px;font-weight:900;
  box-shadow:0 5px 0 var(--green-d);font-family:inherit;
}
.big-btn:active{transform:translateY(3px);box-shadow:0 2px 0 var(--green-d)}
.big-btn[disabled]{opacity:.6}
.tv-err{color:var(--red);font-weight:800;font-size:13px;margin-top:10px;min-height:18px;text-align:center}
.modal-sub{color:var(--sub);font-size:12px;margin-top:12px;text-align:center;line-height:1.5}

/* ============ TV (tv.html) ============ */
body.tvpage{display:flex;align-items:center;justify-content:center;min-height:100vh;text-align:center}
.tv-wrap{padding:30px;max-width:900px}
.tv-logo{font-size:6vmin;font-weight:900}
.tv-logo span{color:var(--gold)}
.tv-code-label{color:var(--sub);font-weight:800;font-size:3vmin;margin-top:5vmin}
.tv-code{
  font-size:16vmin;font-weight:900;letter-spacing:2vmin;color:var(--gold);
  background:var(--card);border-radius:3vmin;padding:1vmin 4vmin;display:inline-block;
  box-shadow:0 1.2vmin 0 #090c17;margin-top:2vmin;
}
.tv-steps{color:#d7dcf5;font-size:2.6vmin;margin-top:5vmin;line-height:1.7}
.tv-steps .url{font-size:2.6vmin}
.tv-status{margin-top:4vmin;font-size:2.6vmin;font-weight:900;color:var(--green);min-height:3.4vmin}
#tvVideo{
  position:fixed;inset:0;width:100vw;height:100vh;object-fit:contain;background:#000;
  image-rendering:pixelated;display:none;
}
#tvOverlay{
  position:fixed;left:0;right:0;bottom:0;padding:12px;display:none;
  font-weight:900;color:#fff;font-size:2.2vmin;text-shadow:0 2px 4px #000;
}
