.ggArcadeScreen{width:min(100%,980px);margin:0 auto;padding-bottom:24px}
/* GG_MATCH_SCREEN_STANDARD — tela de espera (#gridArcadeMatch) migrada
   pra .panel.matchBox/.pulse/.ggLobbyCountBig (ver frontend/index.html e
   docs/GG_MATCH_STANDARD.md); classes .ggArcadeWait*/.ggArcadePulse
   removidas daqui, nao usadas em mais nenhum lugar. */
.ggArcadeGameHead{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:8px 0 10px}
.ggArcadeGameHead h2{margin:4px 0 0;font-size:24px}
.ggArcadeTimer{min-width:92px;text-align:center;padding:9px 12px;border:1px solid var(--gg-gold-border);background:var(--gg-gold-bg);border-radius:6px}
.ggArcadeTimer small{display:block;color:var(--muted);font-size:9px;font-weight:900}
.ggArcadeTimer b{display:block;color:var(--gold2);font-size:22px}
.ggArcadePlayers{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:6px;margin:8px 0}
.ggArcadePlayer{position:relative;overflow:hidden;display:flex;align-items:center;justify-content:space-between;gap:6px;padding:7px 9px;border:1px solid var(--line);background:var(--card);border-radius:6px;font-size:11px;min-width:0}
.ggArcadePlayer span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ggArcadePlayer.me{border-color:var(--gg-gold-border)}
.ggArcadePlayer.finished{opacity:.72}
/* GG_GRID_ARCADE_VISUAL_R215 — rank/medalha + barra de progresso relativa
   ao lider (pedido do operador: partida mais interessante de acompanhar). */
.ggArcadePlayerRank{flex:0 0 auto;font-size:12px;font-weight:900}
.ggArcadePlayerName{flex:1 1 auto}
.ggArcadePlayerBar{position:absolute;left:0;bottom:0;height:2px;background:var(--gold2);opacity:.6;transition:width .35s ease;pointer-events:none}
.ggArcadeHud{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:8px 0}
.ggArcadeHud>div{min-height:50px;display:grid;place-items:center;padding:6px;border:1px solid var(--line);background:var(--card);border-radius:6px;text-align:center}
.ggArcadeHud small{color:var(--muted);font-size:8px;font-weight:900}
.ggArcadeHud b{font-size:18px;color:var(--text)}
.ggArcadeFeedback{min-height:24px;margin:5px 0;text-align:center;color:var(--gold2);font-size:12px;font-weight:800}
.ggArcadeBoard{width:min(100%,460px);aspect-ratio:1;margin:6px auto;display:grid;grid-template-columns:repeat(8,1fr);grid-template-rows:repeat(8,1fr);gap:4px;touch-action:manipulation}
.ggArcadeCell{min-width:0;min-height:0;display:grid;place-items:center;padding:0;border:1px solid rgba(255,255,255,.13);background:#101b27;color:#e9eef6;border-radius:4px;font:800 clamp(11px,2.2vw,22px)/1 system-ui;cursor:pointer;transition:border-color .12s,background .12s,transform .12s}
.ggArcadeCell:hover{border-color:var(--gg-gold-border)}
.ggArcadeCell:active{transform:scale(.94)}
.ggArcadeCell.blocked{background:#080d13;border-color:#080d13;cursor:not-allowed}
.ggArcadeCell.occupied{background:rgba(96,165,250,.22);border-color:#60a5fa;color:#bfdbfe;cursor:not-allowed}
.ggArcadeCell.path{background:rgba(215,183,77,.25);border-color:var(--gold2)}
.ggArcadeCell:disabled{cursor:not-allowed}
/* GG_GRID_PATH_CURRENT_R219 — pedido do operador: destaque proprio pra
   posicao ATUAL no Grid Path (antes o rastro inteiro tinha a mesma cor,
   sem indicar onde o jogador estava de verdade). */
.ggArcadeCell.path.current{background:rgba(215,183,77,.55);border-color:#fff;box-shadow:0 0 0 2px rgba(215,183,77,.55);animation:ggArcadeCurrentPulse 1.4s ease-in-out infinite}
@keyframes ggArcadeCurrentPulse{0%,100%{box-shadow:0 0 0 2px rgba(215,183,77,.4)}50%{box-shadow:0 0 0 4px rgba(215,183,77,.75)}}
.ggArcadeCell.start,.ggArcadeCell.end{background:var(--gg-gold,#D6AA3A);color:var(--gg-black,#080A0D);border-color:var(--gg-gold,#D6AA3A)}
.ggArcadeCell.safe{background:rgba(34,197,94,.18);border-color:#22c55e;color:#86efac}
.ggArcadeCell.empty{background:rgba(148,163,184,.12);border-color:#64748b;color:#94a3b8}
.ggArcadeCell.bomb{background:rgba(239,68,68,.2);border-color:#ef4444;color:#fca5a5}
/* GG_GRID_ARCADE_OPTIMISTIC_R215 — feedback imediato do clique (ver
   docs/GG_LOW_LATENCY.md item 1): "pending" reage NA HORA
   (opacidade + trava visual), "ok"/"bad" mostram o resultado real por
   ACTION_FLASH_MS antes do tabuleiro avancar de rodada. */
.ggArcadeCell.pending{opacity:.55;cursor:wait}
.ggArcadeCell.ok{background:rgba(34,197,94,.32);border-color:#22c55e;color:#bbf7d0;transform:scale(1.05)}
.ggArcadeCell.bad{background:rgba(239,68,68,.32);border-color:#ef4444;color:#fecaca;animation:ggArcadeShake .22s ease}
/* GG_GRID_ARCADE_SHARED_ROUND_R216 — ROUND_CHANGED (outro jogador achou
   primeiro) nao e' erro nem acerto -- neutro, nunca vermelho. */
.ggArcadeCell.late{background:rgba(148,163,184,.22);border-color:#94a3b8;color:#cbd5e1}
@keyframes ggArcadeShake{0%,100%{transform:translateX(0)}25%{transform:translateX(-3px)}75%{transform:translateX(3px)}}
#gridArcadeBank{display:block;width:min(100%,460px);margin:6px auto 0}
#gridArcadeBank.hide{display:none}
.ggArcadeResultPlayers{display:grid;gap:6px;margin:16px 0}
.ggArcadeResultRow{display:grid;grid-template-columns:34px minmax(0,1fr) auto auto;align-items:center;gap:8px;padding:9px 10px;border:1px solid var(--line);border-radius:6px;text-align:left}
.ggArcadeResultRow.winner{border-color:var(--gg-gold-border);background:var(--gg-gold-bg)}
.ggArcadeResultRow span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* GG_GRID_MATCH_FIT_VIEWPORT_R213 — mesmo achado do Grid Duel (pedido do
   operador): tabuleiro 8x8 + cabecalho completo passava da altura da tela
   no PC. Board ja tinha teto de largura/altura (600px, aspect-ratio 1);
   reduzida so' a folga vertical do cabecalho, sem mexer no tamanho do
   tabuleiro (teto ja existente) nem nas classes globais compartilhadas. */
#gridArcadeGame .ggArcadeGameHead{margin:2px 0 4px}
#gridArcadeGame .ggArcadeGameHead h2{font-size:18px}
/* GG_GRID_MATCH_FIT_VIEWPORT_R216 — pedido do operador: ainda precisava
   rolar no PC. O lembrete de regra (redundante — o jogador ja escolheu o
   modo e ve o feedback de cada jogada) foi removido de vez da tela AO VIVO,
   igual ja tinha sido feito no Grid Duel; so' continua aparecendo no
   treino/pre-partida onde faz sentido de verdade. */
#gridArcadeGame .gameRuleTop{display:none}
#gridArcadeGame .ggArcadePlayers{margin:4px 0}
#gridArcadeGame .ggArcadeHud{margin:4px 0;gap:4px}
#gridArcadeGame .ggArcadeHud>div{min-height:32px;padding:3px}
#gridArcadeGame .ggArcadeHud small{font-size:7px}
#gridArcadeGame .ggArcadeHud b{font-size:14px}
#gridArcadeGame .ggArcadeFeedback{min-height:16px;margin:2px 0;font-size:11px}
@media(max-width:600px){
 .ggArcadeScreen{padding-left:10px;padding-right:10px}
 .ggArcadeGameHead h2{font-size:20px}
 .ggArcadePlayers{grid-template-columns:repeat(2,minmax(0,1fr))}
 .ggArcadeHud{grid-template-columns:repeat(4,minmax(0,1fr))}
 .ggArcadeBoard{gap:3px}
 .ggArcadeCell{font-size:clamp(10px,4.4vw,18px)}
 .ggArcadeResultRow{grid-template-columns:28px minmax(0,1fr) auto;font-size:11px}
 .ggArcadeResultRow em{display:none}
}
