/* pré-jogo, app shell em 100dvh, selo e coringa — fatia do v17, linhas 963-1195 */
  /* ============ V15: PRÉ-JOGO (login OTP, modos, sala, fila) ============ */
  .pre-screen {
    position: fixed; inset: 0; z-index: 90;
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    padding: 24px; background: var(--bg-deep); overflow-y: auto;
  }
  .pre-panel {
    width: 100%; max-width: 420px;
    background: var(--paper); color: var(--ink);
    border: 4px solid var(--ink); box-shadow: 8px 8px 0 var(--ink);
    padding: 22px;
  }
  .pre-panel h2 { font-size: 1.1rem; font-weight: 900; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 4px; }
  .pre-panel .pre-sub { font-size: 0.8rem; color: var(--ink-soft); margin-bottom: 16px; line-height: 1.45; }
  .pre-kicker {
    display: inline-block; background: var(--red-rosa); color: var(--paper);
    font-size: 0.65rem; font-weight: 900; letter-spacing: 2px; text-transform: uppercase;
    padding: 3px 10px; margin-bottom: 12px; border: 2px solid var(--ink);
  }
  .pre-field {
    width: 100%; padding: 12px; font-size: 1rem;
    border: 3px solid var(--ink); background: #fff; color: var(--ink);
    font-family: inherit; margin-bottom: 12px;
  }
  .pre-field:focus { outline: none; border-color: var(--red-rosa); }
  .pre-field.otp { text-align: center; font-size: 1.6rem; letter-spacing: 12px; font-weight: 900; }
  .btn-block { display: block; width: 100%; margin-bottom: 10px; }
  .pre-hint { font-size: 0.72rem; color: var(--ink-soft); line-height: 1.5; margin-top: 10px; }
  .pre-hint strong { color: var(--red-rosa); }

  .mode-btn {
    display: block; width: 100%; text-align: left;
    background: #fff; color: var(--ink);
    border: 3px solid var(--ink); box-shadow: 4px 4px 0 var(--ink);
    padding: 13px 14px; margin-bottom: 12px; cursor: pointer;
    font-family: inherit; transition: transform 0.1s, box-shadow 0.1s;
  }
  .mode-btn:hover { transform: translate(-2px,-2px); box-shadow: 6px 6px 0 var(--ink); background: var(--paper); }
  .mode-btn:active { transform: translate(3px,3px); box-shadow: none; }
  .mode-btn .m-title { font-weight: 900; font-size: 0.92rem; text-transform: uppercase; letter-spacing: 0.5px; }
  .mode-btn .m-title .m-tag {
    float: right; font-size: 0.6rem; letter-spacing: 1.5px; padding: 2px 8px;
    background: var(--gold); border: 2px solid var(--ink); text-transform: uppercase;
  }
  .mode-btn .m-desc { font-size: 0.72rem; color: var(--ink-soft); margin-top: 4px; line-height: 1.4; }

  .room-code { display: flex; gap: 6px; justify-content: center; margin: 14px 0; }
  .room-code span {
    font-weight: 900; font-size: 1.5rem; background: #fff; border: 3px solid var(--ink);
    padding: 6px 4px; min-width: 40px; text-align: center; box-shadow: 3px 3px 0 var(--ink);
  }
  .lobby-line {
    background: #fff; border: 2px solid var(--ink); border-left: 8px solid var(--gold);
    padding: 9px 12px; font-size: 0.8rem; margin-bottom: 12px;
  }
  .queue-wrap { text-align: center; }
  .queue-icon { font-size: 3.4rem; margin: 18px 0; animation: gentleSway 2s ease-in-out infinite; display: inline-block; }

  /* ============ V15: APP SHELL — jogo em 100dvh, sem rolagem ============ */
  #game {
    position: fixed; inset: 0; z-index: 40;
    max-width: 480px; margin: 0 auto;
    display: flex; flex-direction: column;
    overflow: hidden;
    padding: calc(env(safe-area-inset-top, 0px) + 8px) 10px calc(env(safe-area-inset-bottom, 0px) + 8px);
    background:
      radial-gradient(ellipse at top, var(--bg-felt) 0%, var(--bg-deep) 70%),
      var(--bg-deep);
  }
  #game.hidden { display: none; }

  .g-top {
    flex-shrink: 0;
    display: flex; align-items: center; justify-content: space-between;
    background: var(--paper); color: var(--ink);
    border: 3px solid var(--ink); box-shadow: 3px 3px 0 var(--ink);
    padding: 5px 10px;
  }
  .g-logo { font-weight: 900; font-size: 0.66rem; letter-spacing: 1px; text-transform: uppercase; }
  .g-score { font-weight: 900; font-size: 1.05rem; }
  .g-score .you { color: var(--win); }
  .g-score .ia { color: var(--loss); }
  .g-score i { font-style: normal; opacity: 0.45; padding: 0 7px; }
  .g-round { font-weight: 900; font-size: 0.66rem; letter-spacing: 1px; }

  .g-status {
    flex-shrink: 0;
    margin-top: 6px; min-height: 34px;
    display: flex; align-items: center; justify-content: center;
    background: var(--paper); color: var(--ink);
    border: 2px solid var(--ink);
    padding: 5px 10px; text-align: center;
    font-size: 0.76rem; font-weight: 800; line-height: 1.25;
  }
  .g-status.player { border-color: var(--win); color: var(--win); }
  .g-status.ia { border-color: var(--red-rosa); color: var(--red-rosa); }
  .g-status.reveal { background: var(--gold); }
  .g-status.apelacao {
    background: var(--red-rosa); color: var(--paper); border-color: var(--ink);
    animation: apelShake 0.45s;
  }
  @keyframes apelShake {
    0%,100% { transform: translateX(0); }
    20% { transform: translateX(-7px); } 40% { transform: translateX(7px); }
    60% { transform: translateX(-4px); } 80% { transform: translateX(4px); }
  }

  /* arena: ocupa o meio; cartas escaladas via transform para caber SEM rolagem */
  #arena {
    flex: 1 1 auto; min-height: 0;
    display: flex; align-items: center; justify-content: center;
    padding: 10px 0 6px;
  }
  .duel { display: flex; gap: 12px; align-items: flex-start; justify-content: center; }
  .fit { position: relative; }
  .fit .card-container {
    width: 300px; max-width: none; aspect-ratio: 5 / 8;
    transform-origin: top left;
  }
  .duel-tag {
    position: absolute; top: -14px; left: -6px; z-index: 6;
    font-size: 0.55rem; font-weight: 900; letter-spacing: 1.5px; text-transform: uppercase;
    padding: 2px 9px; border: 2px solid var(--ink); box-shadow: 2px 2px 0 var(--ink);
  }
  .duel-tag.you { background: var(--win); color: var(--paper); }
  .duel-tag.ia { background: var(--red-rosa); color: var(--paper); }

  .arena-hint {
    display: none; flex-direction: column; align-items: center; gap: 8px;
    color: var(--paper); font-size: 0.82rem; font-weight: 700; letter-spacing: 0.5px;
    border: 3px dashed var(--paper-line); background: rgba(0,0,0,0.12);
    padding: 26px 20px; text-align: center; max-width: 300px;
  }
  .arena-hint span { font-size: 1.7rem; }
  #game.awaiting-pick .arena-hint { display: flex; }
  #game.awaiting-pick .duel { display: none; }

  /* dock inferior: ação + mão, sempre visíveis, nunca rolam */
  .dock { flex-shrink: 0; }
  .action-bar { display: none; margin-bottom: 8px; }
  .action-bar.show { display: block; }
  .btn-play {
    display: block; width: 100%;
    background: var(--gold); color: var(--ink);
    border: 3px solid var(--ink); box-shadow: 4px 4px 0 var(--ink);
    padding: 12px; font-size: 0.95rem; font-weight: 900;
    letter-spacing: 1px; text-transform: uppercase; cursor: pointer;
    font-family: inherit; transition: transform 0.1s, box-shadow 0.1s;
  }
  .btn-play:hover { background: var(--gold-bright); }
  .btn-play:active { transform: translate(3px,3px); box-shadow: none; }
  .btn-play.danger { background: var(--red-rosa); color: var(--paper); }

  .attr-pills { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
  .attr-pill {
    background: var(--paper); color: var(--ink);
    border: 2px solid var(--ink); box-shadow: 2px 2px 0 var(--ink);
    padding: 6px 3px; cursor: pointer; font-family: inherit;
    font-size: 0.56rem; font-weight: 900; text-transform: uppercase;
    line-height: 1.2; text-align: center;
  }
  .attr-pill b { display: block; color: var(--red-rosa); font-size: 0.64rem; }
  .attr-pill:active { transform: translate(2px,2px); box-shadow: none; }

  .hand-strip { display: flex; gap: 6px; justify-content: center; }
  .hand-strip.hidden { display: none; }
  .deck-note {
    flex: 1; display: flex; justify-content: space-between; align-items: center; gap: 10px;
    background: rgba(0,0,0,0.18); border: 2px solid var(--paper-line);
    color: var(--paper); padding: 6px 12px;
    font-size: 0.68rem; font-weight: 700; letter-spacing: 0.5px;
  }
  .deck-note span:first-child { letter-spacing: 2px; }
  .hand-chip {
    flex: 1 1 0; min-width: 0; max-width: 78px;
    background: var(--paper); color: var(--ink);
    border: 3px solid var(--ink); box-shadow: 3px 3px 0 var(--ink);
    padding: 6px 2px 5px; cursor: pointer; font-family: inherit;
    text-align: center; transition: transform 0.1s, box-shadow 0.1s;
  }
  .hand-chip:active { transform: translate(2px,2px); box-shadow: none; }
  .hand-chip .h-emoji { font-size: 1.25rem; line-height: 1; display: block; }
  .hand-chip .h-name {
    display: block; font-weight: 900; font-size: 0.5rem; text-transform: uppercase;
    line-height: 1.1; margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .hand-chip.joker { background: var(--red-rosa); color: var(--paper); }
  .hand-chip.sel { outline: 3px solid var(--gold); outline-offset: 1px; transform: translateY(-3px); }
  .hand-chip.disabled { opacity: 0.35; pointer-events: none; }

  /* ============ V15: compressão da carta — 7 atributos + selo cabem nos 480px ============ */
  .card-front .card-banner { padding: 4px 10px; border-bottom-width: 3px; }
  .card-front .candidate-number { font-size: 1rem; padding: 1px 7px; }
  .card-front .portrait-wrap { padding: 4px; border-bottom-width: 3px; }
  /* Aqui morava um override que achatava a moldura da foto numa faixa ainda
     mais horizontal que a do v17. A moldura agora é retrato e a proporção é
     única, definida uma vez em foto.css (RN-F15): não existe mais recorte em
     paisagem no projeto, nem comentado. */
  .card-front .card-name { font-size: 0.78rem; }
  .card-front .card-location { font-size: 0.56rem; }
  .card-front .attrs-table { padding: 3px 8px 2px; gap: 1px; }
  .card-front .attr-row { padding: 1.5px 6px; font-size: 0.66rem; border-bottom-width: 1px; }
  .card-front .attr-row .label { font-size: 0.55rem; min-width: 24px; }
  .card-front .attr-row .value { font-size: 0.72rem; }
  .card-front .attr-row.disputed,
  .card-front .attr-row.winner-row,
  .card-front .attr-row.loser-row { transform: none; padding-left: 8px; padding-right: 8px; }
  .card-front .telemetry { padding: 3px 6px; border-top-width: 2px; }
  .card-front .tlm-btn { padding: 2px 4px; font-size: 0.76rem; }

  /* O carimbo redondo do selo (`.selo-stamp`) e a linha do critério
     (`.selo-crit`) saíram com o v20: os dois eram anexos da faixa em paisagem,
     e o carimbo ficava por cima da foto. Sobre um retrato ele tapa o rosto.
     Viraram a etiqueta e a legenda da coluna `.mid-id`, em carta.css. */

  /* ============ V15: CORINGA (assinatura/calcanhar) ============ */
  .attr-row.sig-row .value { color: var(--red-rosa); font-weight: 900; }
  .attr-row.sig-row .name::after { content: " ⚡"; }
  .attr-row.heel-row .value { opacity: 0.55; text-decoration: underline dotted; }


  /* Instrução curta no lugar das pills: o dock não perde a função de guiar o
     dedo, mas devolve a altura para a arena. */
  .dica-escolha {
    text-align: center;
    color: var(--paper);
    font-size: 0.68rem;
    font-weight: 700;
    letter-spacing: 0.5px;
    text-transform: uppercase;
    opacity: 0.85;
    padding: 2px 0 4px;
  }

  /* ============ AVISO DE VEZ ============ */
  /* position: fixed de propósito — o aviso NÃO entra no fluxo. Altura no fluxo é
     exatamente o que empurra a carta para fora da arena. */
  .aviso-vez {
    position: fixed; left: 50%; top: 38%;
    transform: translate(-50%, -50%) scale(0.86);
    z-index: 80; pointer-events: none;
    opacity: 0; visibility: hidden;
    background: var(--paper); color: var(--ink);
    border: 4px solid var(--ink); box-shadow: 8px 8px 0 var(--ink);
    padding: 14px 26px; text-align: center; max-width: 84vw;
    transition: opacity 0.18s ease, transform 0.18s ease, visibility 0.18s;
  }
  .aviso-vez.mostrando { opacity: 1; visibility: visible; transform: translate(-50%, -50%) scale(1); }
  .aviso-vez.player { border-color: var(--win); box-shadow: 8px 8px 0 var(--win); }
  .aviso-vez.ia { border-color: var(--loss); box-shadow: 8px 8px 0 var(--loss); }
  .aviso-titulo {
    font-size: 1.15rem; font-weight: 900; letter-spacing: 1.5px; text-transform: uppercase;
    line-height: 1.15;
  }
  .aviso-detalhe { font-size: 0.72rem; font-weight: 700; margin-top: 4px; opacity: 0.8; }

  /* ============ CONTAGEM REGRESSIVA ============ */
  /* Só aparece em PvP: contra a Casa não há por que apressar ninguém. */
  .contagem {
    position: fixed; right: 14px; top: calc(env(safe-area-inset-top, 0px) + 52px);
    z-index: 70; display: none;
    background: var(--ink); color: var(--paper);
    border: 2px solid var(--gold); box-shadow: 3px 3px 0 var(--gold);
    padding: 4px 10px;
    font-size: 0.78rem; font-weight: 900; letter-spacing: 1px;
    font-variant-numeric: tabular-nums;
  }
  .contagem.mostrando { display: block; }
  .contagem.alerta {
    border-color: var(--loss); box-shadow: 3px 3px 0 var(--loss); color: #ffd9d9;
    animation: pulsa-contagem 0.7s steps(2, end) infinite;
  }
  @keyframes pulsa-contagem { 50% { opacity: 0.45; } }

  @media (prefers-reduced-motion: reduce) {
    .aviso-vez { transition: opacity 0.01s; }
    .contagem.alerta { animation: none; }
  }
