/* =============================================================
   Deck Sandbox — Mini-mapas (fundação da Fase 2)

   Princípio: o mini-mapa NÃO é um componente novo. É o mesmo
   plano lógico 1600x900 renderizado com outra --scale e outro LOD.
   Nenhuma coordenada é recalculada — é o mesmo JSON.
   ============================================================= */

.minimap {
  display: grid;
  grid-template-rows: auto auto auto;
  gap: 6px;
  padding: 6px;
  background: var(--bg-surface-2);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  cursor: pointer;
  transition: border-color 140ms var(--ease), background 140ms var(--ease), transform 140ms var(--ease);
}
.minimap:hover { border-color: var(--line-strong); transform: translateY(-1px); }
.minimap.is-active {
  border-color: var(--seat-color, var(--accent));
  background: color-mix(in oklab, var(--seat-color, var(--accent)) 12%, var(--bg-surface-2));
}
.minimap.is-over {           /* drop cross-mesa (mover carta p/ outro board) */
  border-color: var(--accent);
  box-shadow: 0 0 0 2px var(--accent-soft);
}

/* --- cabeçalho --- */
.minimap__head {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 0 2px;
  /* O `min-width: 0` DO PAI, e é ele quem faltava (DK-22, ADR-0229).

     O `.minimap__name` abaixo já tinha o dele, com `ellipsis` — e não
     adiantava: esta linha é item de uma GRADE (o `.minimap`), e item de
     grade tem mínimo automático de `min-content`. Com nome de deck comprido
     ela crescia para caber o nome inteiro e desenhava PARA FORA do slot —
     medido, 336px além dele a 1500×859 e 351px a 500×679, por cima do campo
     de batalha.

     É a mesma forma da ADR-0185 §1, invertida: lá o `min-width: 0` da
     célula não protegia o campo dentro dela; aqui o do nome não se protege
     do pai. Quem cede tem de ser o contêiner também. */
  min-width: 0;
}
.minimap__dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--seat-color, var(--fg-dim));
  flex: none;
}
.minimap__name {
  flex: 1;
  min-width: 0;
  font-size: 11px;
  font-weight: 600;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.minimap__life {
  padding: 1px 7px;
  border-radius: 999px;
  background: var(--bg-surface-3);
  font-size: 11px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

/* A VIDA EM ZERO TAMBÉM AQUI, e este é o lugar onde ela mais importa
   (JG-26, ADR-0268).

   O alerta de dano de comandante é só do assento ATIVO, porque a pergunta
   dele é "quanto EU levei". A vida dos OUTROS é outra pergunta — e é
   exatamente a que o mini-mapa existe para responder, porque é ali que os
   outros boards aparecem. Foi o dono do produto quem levantou.

   Aqui o fundo ENTRA, ao contrário da topbar: a pastilha do mini-mapa já
   tem um, e trocá-lo é o que faz o número se destacar num retrato de 15px
   de carta. */
.minimap__life[data-lethal="1"] {
  background: rgba(229, 84, 75, 0.22);
  color: var(--danger);
}

/* --- viewport: janela recortada sobre o plano lógico --- */
.minimap__viewport {
  position: relative;
  width: calc(var(--minimap-vw) * 1px);
  aspect-ratio: var(--bf-w) / var(--bf-h);   /* mesma proporção da mesa */
  overflow: hidden;
  border-radius: var(--radius-sm);
  background: var(--bg-field);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05);
  contain: strict;                            /* isola layout/paint */
}

.minimap__canvas {
  position: absolute;                         /* mesma origem X/Y da mesa */
  top: 0;
  left: 0;
  width: calc(var(--bf-w) * 1px);
  height: calc(var(--bf-h) * 1px);
  /* MESMA conta do battlefield principal, só com outro divisor.
     Puramente CSS: nada é medido em runtime. */
  transform: scale(calc(var(--minimap-vw) / var(--bf-w)));
  transform-origin: 0 0;
  pointer-events: none;                       /* read-only: clique é do slot */
}

/* --- rodapé de contagens --- */
.minimap__zones {
  display: flex;
  justify-content: space-between;
  gap: 4px;
  padding: 0 2px;
  color: var(--fg-dim);
  font-size: 10px;
  font-variant-numeric: tabular-nums;
}

/* Mini-mapas fora da tela não pintam nada — e isso PAGA (UX-46, ADR-0232).

   Medido em navegador real, alternando A/B cinco vezes com quatro boards e
   40 cartas cada (172 nós de carta no trilho): mediana de **12,36 ms** por
   repintura com, contra **13,87 ms** sem. As distribuições não se
   sobrepõem. Tirar custa ~11%.

   OS DOIS NÚMEROS ABAIXO SÃO SÓ O PALPITE DA PRIMEIRA PINTURA, e é por isso
   que não foram "corrigidos" para os reais. O valor computado é
   `auto 190px auto 170px`: o `auto` é o *last-remembered-size*, que o
   Chromium aplica sozinho a todo `content-visibility: auto`. Medido num
   navegador de verdade, os quatro slots reportam a altura REAL (184px) já na
   primeira medida, e o `scrollHeight` do trilho sai certo.

   E NÃO HÁ PAR CERTO PARA OS DOIS REGIMES: no desktop o slot mede 220×184;
   na faixa, 172×449 — e ali a altura vem do esticamento do trilho, não do
   conteúdo. Qualquer valor fixo está errado de um dos dois lados, e trocar
   estes só mudaria qual.

   O QUE ISTO CUSTA DE VERDADE é uma região cega no arnês: sob relógio
   virtual o slot nunca pinta, e a suíte mede o reservado. A rede tem nome —
   `withPaintedMinimaps`, no `00-common.js`. */
.minimap-rail > .minimap {
  content-visibility: auto;
  contain-intrinsic-size: 190px 170px;
}

/* =============================================================
   O `+` DE ABRIR BOARD  (DK-12, ADR-0153)

   Irmão do `.minimap` no trilho, e não um `.minimap` a mais: um
   assento que não existe não tem cor, vida nem rodapé de zona, e
   herdar a classe faria o CSS de assento descrever uma vaga.

   COMPACTO, e não do tamanho de um slot: o dono do produto o desenhou
   assim — *"um botão de `+` abaixo do próprio board"* —, e um
   retângulo da altura de um assento leria como um board vazio, que é
   a coisa que ele ainda não é.

   A largura vem do trilho (coluna flex estica os filhos), e por isso
   ela não é escrita aqui: `--minimap-vw` é ADIMENSIONAL — vale `206`,
   não `206px` — e toda conta com ele precisa do `* 1px`, que é fácil
   de esquecer e silencioso quando se esquece.
   ============================================================= */
.minimap-add {
  display: grid;
  place-items: center;
  min-height: 56px;
  padding: 6px;
  background: none;
  border: 1px dashed var(--line-strong);
  border-radius: var(--radius);
  color: var(--fg-dim);
  cursor: pointer;
  transition: border-color 140ms var(--ease), color 140ms var(--ease),
              background 140ms var(--ease);
}
.minimap-add:hover {
  border-color: var(--accent);
  color: var(--fg);
  background: var(--bg-surface-2);
}
.minimap-add__plus {
  font-size: 26px;
  line-height: 1;
  /* O sinal é DESENHO e não texto: sem isto ele entra na seleção de
     texto de um arrasto que passe pelo trilho. */
  user-select: none;
}

/* Na faixa do celular o trilho vira linha e os filhos deixam de ser
   esticados: ali ele precisa da largura de um assento para não virar
   um traço fino entre dois boards, e do mesmo `scroll-snap`, senão é
   o único item que a rolagem não para inteiro (ADR-0149 D3). */
@media (max-width: 860px) and (orientation: portrait) {
  .minimap-rail > .minimap-add {
    flex: none;
    width: calc(var(--minimap-vw) * 1px + 14px);
    scroll-snap-align: start;
  }
}

/* A LIXEIRA do board vazio (DK-15, ADR-0157). Ela mora no cabeçalho do
   slot, à direita da vida, e só é pintada quando o board está vazio — num
   board com carta ela seria perder curadoria a um toque do que troca de
   mesa. Tom de perigo como os comandos destrutivos do menu (ADR-0049). */
.minimap__drop {
  display: grid;
  place-items: center;
  width: 18px;
  height: 18px;
  padding: 0;
  margin-left: 2px;
  background: none;
  border: 0;
  border-radius: var(--radius-sm);
  color: var(--fg-dim);
  font-size: 12px;
  cursor: pointer;
}
.minimap__drop:hover { background: rgba(229, 84, 75, 0.16); color: var(--danger); }
