/* =============================================================================
   ISEKAIRPG — Mini App
   Identidade: "Aura" (o sistema mágico do lore) — brilho pulsando, acentos em
   ouro/ferrugem/mana. Componentes de interação (gaveta, bottom sheet, ripple,
   confete, número flutuante, esqueleto de carregamento) adaptados de um
   projeto irmão que já validou esses padrões em produção.
   ============================================================================= */

:root {
  --vazio: #0a0910;
  --vazio-alto: #131020;
  --painel: #17131f;
  --painel-borda: #392f52;
  --painel-borda-forte: #4d4070;
  --tinta: #ede7f2;
  --tinta-fraca: #9b93ac;
  --ouro: #e8b64a;
  --ferrugem: #d8623a;
  --mana: #4fc3c8;
  --verde: #7fd67f;

  --rar-comum: #9098a8;
  --rar-incomum: #4fd17a;
  --rar-raro: #4a9eff;
  --rar-epico: #b565e8;
  --rar-lendario: #e8b64a;
  --rar-mythic: #ff3b3b;   /* 🔴 (09/10, dev) mítico: aura vermelha */

  /* tons de canto — levemente mais claros que a cor base, pra "brilhar" no vértice */
  --canto-incomum: #7fe89f;
  --canto-raro: #7fbaff;
  --canto-epico: #ce93f0;
  --canto-lendario: #f5d484;

  --fonte-display: 'Cinzel', serif;
  --fonte-corpo: 'Manrope', sans-serif;
  /* 11/09/2026 — era 'JetBrains Mono'. O guia é explícito: três famílias é
     quase sempre uma a mais, e monoespaçada em rótulo pequeno pra "dar ar de
     dados" está na lista de vícios. O que a mono resolvia de verdade era
     número que não pula quando o valor muda — e isso é tabular-nums, logo
     abaixo, na família que já estava carregada. Uma fonte a menos pra baixar.
     O token continua existindo: pra voltar atrás é esta linha. */
  --fonte-numero: 'Manrope', sans-serif;

  /* 25/09/2026 — escala de tipo. Eram ~25 tamanhos soltos, 78 deles abaixo
     de 12px (alguns em 8 e 9px), ilegíveis num celular. Agora são cinco
     passos, e o menor é 12px. Ícone/emoji e campo de formulário ficam fora
     da escala: emoji não é texto, e input abaixo de 16px faz o iOS dar zoom. */
  --t-mini: 12px;
  --t-pequeno: 13px;
  --t-corpo: 15px;
  --t-sub: 18px;
  --t-titulo: 22px;

  /* Cor da seção (25/09/2026). Cada botão da barra de baixo tem um tom, e
     ele tinge a aba ativa, a borda do topo, a placa do andar e os títulos
     de seção — dá pra saber onde você está sem ler. O dourado dos botões
     de ação não muda: ação é ação em qualquer seção. */
  --secao-mundo: var(--mana);
  --secao-cidade: var(--ouro);
  --secao-voce: #b48cf2;
  --secao-cla: #e06a78;
  --secao-mais: var(--tinta-fraca);
  --cor-secao: var(--ouro);
}

* { box-sizing: border-box; margin: 0; padding: 0; }

body {
  background:
    radial-gradient(ellipse 800px 500px at 50% -10%, rgba(232, 182, 74, 0.06), transparent),
    radial-gradient(ellipse 600px 400px at 100% 100%, rgba(79, 195, 200, 0.05), transparent),
    var(--vazio);
  background-attachment: fixed;
  color: var(--tinta);
  font-family: var(--fonte-corpo);
  min-height: 100vh;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

.oculto { display: none !important; }

body[data-secao="mundo"]      { --cor-secao: var(--secao-mundo); }
body[data-secao="cidade"]     { --cor-secao: var(--secao-cidade); }
body[data-secao="personagem"] { --cor-secao: var(--secao-voce); }
body[data-secao="clan"]       { --cor-secao: var(--secao-cla); }
body[data-secao="mais"]       { --cor-secao: var(--secao-mais); }

/* ---------- carregando ---------- */
.tela-carregando {
  position: fixed; inset: 0; z-index: 100;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px;
  background: var(--vazio);
}
.runa-girando {
  width: 42px; height: 42px; border-radius: 50%;
  border: 2px solid var(--painel-borda); border-top-color: var(--ouro);
  animation: girar 0.9s linear infinite;
}
@keyframes girar { to { transform: rotate(360deg); } }
.carregando-texto {
  font-family: var(--fonte-display); font-size: var(--t-mini); letter-spacing: 0.1em;
  color: var(--tinta-fraca); 
}

/* ---------- shell / topo ---------- */
.app { max-width: 480px; margin: 0 auto; min-height: 100vh; display: flex; flex-direction: column; }
/* 25/09/2026 — topo em três colunas: a placa do andar, quem você é (nome e
   carteira) e os botões. A borda de baixo pega a cor da seção. */
.topo {
  background: linear-gradient(180deg, var(--painel), var(--vazio-alto));
  border-bottom: 1px solid color-mix(in srgb, var(--cor-secao) 40%, var(--painel-borda));
  padding: 10px 10px 10px 12px;
  position: sticky; top: 0; z-index: 10;
  display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 10px;
  transition: border-color .25s;
}
.topo-id { min-width: 0; }
.topo-nome-linha { display: flex; align-items: center; gap: 7px; min-width: 0; }
.topo-botoes { display: flex; align-items: center; }

/* A placa: o número do andar é o elemento grande do topo. Os cantos
   chanfrados lembram placa de pedra, não botão — ela informa, não se toca. */
.placa-andar {
  min-width: 52px; padding: 5px 8px 6px;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--cor-secao) 16%, transparent), transparent 70%),
    var(--vazio);
  border: 1px solid color-mix(in srgb, var(--cor-secao) 55%, var(--painel-borda));
  clip-path: polygon(7px 0, calc(100% - 7px) 0, 100% 7px, 100% calc(100% - 7px),
                     calc(100% - 7px) 100%, 7px 100%, 0 calc(100% - 7px), 0 7px);
  transition: border-color .25s;
}
.placa-andar-rotulo { font-size: var(--t-mini); color: var(--tinta-fraca); line-height: 1.1; }
.placa-andar-num {
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-titulo);
  line-height: 1.05; color: var(--ouro); font-variant-numeric: tabular-nums;
}
.btn-hamburguer {
  position: relative;
  flex-shrink: 0; width: 30px; height: 30px;
  background: rgba(0,0,0,0.22); border: 1px solid var(--painel-borda); border-radius: 8px;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px;
  cursor: pointer;
}
.btn-hamburguer span { width: 14px; height: 2px; background: var(--tinta); border-radius: 2px; }
.badge-menu {
  position: absolute; top: -6px; right: -6px; min-width: 18px; height: 18px;
  border-radius: 9px; background: var(--verde); color: #0c1a0c;
  font-family: var(--fonte-numero); font-size: var(--t-mini); font-weight: 700;
  display: flex; align-items: center; justify-content: center; padding: 0 3px;
  box-shadow: 0 0 0 2px var(--vazio);
  animation: badge-menu-pulso 1.8s ease-in-out infinite;
}
@keyframes badge-menu-pulso { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.12); } }
.retrato-mini {
  width: 26px; height: 26px; border-radius: 50%; flex-shrink: 0;
  border: 1.5px solid var(--ouro); background: var(--painel);
  display: flex; align-items: center; justify-content: center; font-size: 13px;
}
.nome-topo {
  flex: 1; min-width: 0; margin: 0;
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-sub);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.btn-som { flex-shrink: 0; background: none; border: none; cursor: pointer; font-size: var(--t-corpo); padding: 4px 6px; opacity: 0.8; }
.topo-recursos {
  margin-top: 5px;
  font-family: var(--fonte-numero); font-size: var(--t-pequeno); color: var(--tinta-fraca);
  display: flex; flex-wrap: wrap; gap: 6px; align-items: center;
}
.topo-chip {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 2px 9px 2px 7px; border-radius: 999px;
  background: rgba(0, 0, 0, 0.28); border: 1px solid var(--painel-borda);
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.topo-recursos b { color: var(--ouro); font-weight: 700; }

.conteudo { flex: 1; padding: 16px 16px calc(78px + env(safe-area-inset-bottom)); animation: entrar-tela 0.22s ease-out; }
@keyframes entrar-tela { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }

/* ---------- bottom sheet ---------- */
.sheet-overlay {
  position: fixed; inset: 0; z-index: 130;
  background: rgba(0,0,0,0.5);
  backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px);
  display: flex; align-items: flex-end;
}
.sheet-conteudo {
  width: 100%; max-width: 480px; margin: 0 auto;
  background: color-mix(in srgb, var(--painel) 94%, transparent);
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  border-radius: 20px 20px 0 0;
  padding: 10px 18px calc(20px + env(safe-area-inset-bottom));
  max-height: 82vh; overflow-y: auto;
  animation: subir-sheet 0.25s ease-out;
  box-shadow: 0 -8px 24px rgba(0,0,0,0.5);
}
@keyframes subir-sheet { from { transform: translateY(100%); } to { transform: translateY(0); } }
.sheet-alca { width: 38px; height: 4px; background: var(--painel-borda); border-radius: 4px; margin: 6px auto 14px; }

/* ---------- puxar pra atualizar ---------- */
.puxar-indicador {
  position: absolute; top: 64px; left: 50%; transform: translateX(-50%) translateY(0) rotate(0deg);
  font-size: 18px; color: var(--ouro); opacity: 0; z-index: 5;
  transition: opacity 0.15s ease; pointer-events: none;
}

/* ---------- esqueleto de carregamento ---------- */
.esqueleto-bloco {
  border-radius: 14px;
  background: linear-gradient(90deg, rgba(255,255,255,0.05), rgba(255,255,255,0.1), rgba(255,255,255,0.05));
  background-size: 200% 100%; animation: pulsar-esqueleto 1.3s ease-in-out infinite;
  height: 60px;
}
@keyframes pulsar-esqueleto { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }

/* ---------- toast ---------- */
.toast {
  position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%) translateY(10px);
  background: var(--painel); border: 1px solid var(--painel-borda); color: var(--tinta);
  padding: 11px 18px; border-radius: 12px; font-size: var(--t-pequeno); font-weight: 600;
  box-shadow: 0 8px 20px rgba(0,0,0,0.4);
  z-index: 250; opacity: 0; transition: opacity 0.25s ease, transform 0.25s ease;
  max-width: 88vw; text-align: center;
}
.toast.mostrar { opacity: 1; transform: translateX(-50%) translateY(0); }
.toast.erro { border-color: var(--ferrugem); color: #ffb8a0; }

/* ---------- ripple ---------- */
.tem-ripple { position: relative; overflow: hidden; }
.ripple {
  position: absolute; border-radius: 50%; pointer-events: none;
  background: rgba(255,255,255,0.3); transform: scale(0);
  animation: ripple-expandir 0.6s ease-out forwards;
}
@keyframes ripple-expandir { 0% { transform: scale(0); opacity: 0.7; } 100% { transform: scale(1); opacity: 0; } }

/* ---------- número flutuante ---------- */
.numero-flutuante {
  position: fixed; z-index: 60; pointer-events: none; transform: translate(-50%,-50%);
  font-family: var(--fonte-numero); font-weight: 700; font-size: var(--t-pequeno);
  animation: subir-sumir 1.1s ease-out forwards;
}
.numero-flutuante.positivo { color: var(--verde); }
.numero-flutuante.negativo { color: var(--ferrugem); }
@keyframes subir-sumir {
  0% { opacity: 0; transform: translate(-50%,-50%) scale(0.8); }
  15% { opacity: 1; transform: translate(-50%,-50%) scale(1.15); }
  30% { transform: translate(-50%,-50%) scale(1); }
  100% { opacity: 0; transform: translate(-50%,-140%) scale(1); }
}

/* ---------- flash dourado ---------- */
.flash-dourado {
  position: fixed; inset: 0; z-index: 199; pointer-events: none;
  background: radial-gradient(circle, rgba(232,182,74,0.5), transparent 70%);
  animation: flash-sumir 0.7s ease-out forwards;
}
@keyframes flash-sumir { 0% { opacity: 1; } 100% { opacity: 0; } }

/* ---------- notificação grande (nível, forja, evolução, invocação) ---------- */
.notificacao-grande-overlay {
  position: fixed; inset: 0; z-index: 210;
  display: flex; align-items: center; justify-content: center;
  pointer-events: none; padding: 40px;
}
.notificacao-grande {
  position: relative; pointer-events: none;
  background: linear-gradient(180deg, var(--painel), var(--vazio-alto));
  border: 1px solid var(--painel-borda-forte); border-radius: 18px;
  padding: 26px 34px; text-align: center; overflow: hidden;
  box-shadow: 0 16px 40px rgba(0,0,0,0.55);
  animation: notif-entrar 0.35s cubic-bezier(0.22,1,0.36,1) forwards, notif-sair 0.3s ease-in forwards 1.7s;
}
@keyframes notif-entrar {
  0% { opacity: 0; transform: scale(0.8) translateY(10px); }
  100% { opacity: 1; transform: scale(1) translateY(0); }
}
@keyframes notif-sair {
  0% { opacity: 1; transform: scale(1); }
  100% { opacity: 0; transform: scale(0.92) translateY(-6px); }
}
.notificacao-grande::before {
  content: ""; position: absolute; inset: 0;
  background: radial-gradient(circle at 50% 30%, rgba(232,182,74,0.25), transparent 65%);
  animation: notif-pulso 1.4s ease-in-out infinite;
}
@keyframes notif-pulso { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } }
.notificacao-grande-icone { position: relative; z-index: 1; font-size: 38px; margin-bottom: 6px; }
.notificacao-grande-titulo {
  position: relative; z-index: 1;
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-sub); color: var(--ouro);
  text-shadow: 0 0 16px rgba(232,182,74,0.6);
}
.notificacao-grande-sub {
  position: relative; z-index: 1; margin-top: 4px;
  font-size: var(--t-pequeno); color: var(--tinta-fraca);
}

/* ---------- botões genéricos ---------- */
.botao-secundario {
  background: var(--painel); border: 1px solid var(--painel-borda); color: var(--tinta);
  padding: 10px 20px; border-radius: 10px; font-family: var(--fonte-corpo); font-weight: 600; font-size: var(--t-corpo);
}
.botao-holofote {
  background: linear-gradient(180deg, #f0cf7a, var(--ouro) 55%, #c99a3a); color: #221904;
  border: none; padding: 12px 20px; border-radius: 12px;
  font-family: var(--fonte-corpo); font-weight: 800; font-size: var(--t-corpo); width: 100%;
  box-shadow: 0 3px 0 #a9782a, inset 0 1px 0 rgba(255,255,255,0.4);
  transition: transform 0.08s ease, box-shadow 0.08s ease;
}
.botao-holofote:active {
  transform: translateY(2px);
  box-shadow: 0 1px 0 #a9782a, inset 0 1px 0 rgba(255,255,255,0.3);
}

/* ---------- placeholder de tela ainda não migrada ---------- */
.em-construcao {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 10px; padding: 60px 20px; text-align: center; color: var(--tinta-fraca);
}
.em-construcao-icone { font-size: 36px; }

/* ---------- resultado de combate (Arena, Arena de Pets) ---------- */
.resultado-combate { position: relative; overflow: hidden; border-radius: 16px; }
.resultado-vitoria::before {
  content: ""; position: absolute; inset: 0;
  background: radial-gradient(circle at 50% 40%, rgba(232,182,74,0.22), transparent 65%);
  animation: resultado-vitoria-pulso 2.2s ease-in-out infinite;
  pointer-events: none;
}
@keyframes resultado-vitoria-pulso {
  0%, 100% { opacity: 0.5; transform: scale(0.95); }
  50% { opacity: 1; transform: scale(1.08); }
}
.resultado-vitoria .em-construcao-icone {
  position: relative; z-index: 1;
  text-shadow: 0 0 20px rgba(232,182,74,0.8);
  animation: resultado-icone-escala 2.2s ease-in-out infinite;
}
@keyframes resultado-icone-escala { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.08); } }
.resultado-vitoria p:not(.texto-fraco) { position: relative; z-index: 1; color: var(--ouro); font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-sub); }

.resultado-derrota { background: radial-gradient(circle at 50% 30%, rgba(216,98,58,0.08), transparent 70%); }
.resultado-derrota .em-construcao-icone { filter: grayscale(0.4) opacity(0.8); }
.resultado-derrota p:not(.texto-fraco) { color: var(--tinta-fraca); font-family: var(--fonte-display); font-size: var(--t-corpo); }

/* ---------- retrato / aura (tela de personagem) ---------- */
.cabecalho-personagem { display: flex; align-items: center; gap: 16px; margin-bottom: 22px; }
.retrato-wrap { position: relative; width: 84px; height: 84px; flex-shrink: 0; }
.retrato-aura {
  position: absolute; inset: -14px; border-radius: 50%;
  background: radial-gradient(circle, color-mix(in srgb, var(--cor-aura, var(--ouro)) 55%, transparent), transparent 70%);
  animation: pulsar-aura 3.2s ease-in-out infinite;
}
@keyframes pulsar-aura { 0%,100% { opacity: 0.55; transform: scale(0.96); } 50% { opacity: 0.95; transform: scale(1.06); } }
.retrato-simbolo {
  position: relative; width: 100%; height: 100%; border-radius: 50%;
  border: 2px solid var(--cor-aura, var(--ouro)); background: var(--painel);
  box-shadow: 0 0 14px -4px var(--cor-aura, var(--ouro));
  display: flex; align-items: center; justify-content: center; font-size: 34px;
}
.identidade { flex: 1; min-width: 0; }
.nome-jogador { font-family: var(--fonte-display); font-size: var(--t-titulo); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.classe-raca { font-size: var(--t-pequeno); color: var(--tinta-fraca); margin-top: 2px; text-transform: capitalize; }
.chakra-linha { font-size: var(--t-mini); color: var(--rar-epico); margin-top: 4px; line-height: 1.3; }
.nivel-selo {
  position: relative;
  display: inline-flex; align-items: baseline; gap: 5px; margin-top: 8px;
  background: linear-gradient(135deg, color-mix(in srgb, var(--cor-aura, var(--ouro)) 16%, transparent), color-mix(in srgb, var(--cor-aura, var(--ouro)) 4%, transparent));
  border: 1px solid color-mix(in srgb, var(--cor-aura, var(--ouro)) 35%, transparent); padding: 3px 10px; border-radius: 4px;
  background-image:
    linear-gradient(135deg, var(--cor-aura, var(--ouro)) 45%, transparent 46%) top left / 6px 6px no-repeat,
    linear-gradient(-135deg, var(--cor-aura, var(--ouro)) 45%, transparent 46%) top right / 6px 6px no-repeat,
    linear-gradient(45deg, var(--cor-aura, var(--ouro)) 45%, transparent 46%) bottom left / 6px 6px no-repeat,
    linear-gradient(-45deg, var(--cor-aura, var(--ouro)) 45%, transparent 46%) bottom right / 6px 6px no-repeat,
    linear-gradient(135deg, color-mix(in srgb, var(--cor-aura, var(--ouro)) 16%, transparent), color-mix(in srgb, var(--cor-aura, var(--ouro)) 4%, transparent));
}
#nivel-valor { font-family: var(--fonte-numero); font-weight: 700; font-size: var(--t-corpo); color: var(--cor-aura, var(--ouro)); }
.nivel-rotulo { font-size: var(--t-mini); letter-spacing: 1px; color: var(--tinta-fraca); }

.barras { display: flex; flex-direction: column; gap: 12px; margin-bottom: 18px; }
.barra-rotulo { display: flex; justify-content: space-between; align-items: baseline; font-size: var(--t-pequeno); color: var(--tinta-fraca); margin-bottom: 5px; }
.barra-numero { font-family: var(--fonte-numero); color: var(--tinta); }
.barra-trilho { height: 10px; border-radius: 6px; background: var(--painel); border: 1px solid var(--painel-borda); overflow: hidden; }
.barra-preenchimento { height: 100%; border-radius: 6px; width: 0%; transition: width 0.8s cubic-bezier(0.22,1,0.36,1); }
.barra-hp { background: linear-gradient(90deg, var(--ferrugem), #f0865e); }
.barra-xp { background: linear-gradient(90deg, var(--mana), #8fe3e6); }

.secao-titulo {
  font-family: var(--fonte-display); font-size: var(--t-corpo); letter-spacing: 1px;
  color: color-mix(in srgb, var(--cor-secao) 55%, var(--tinta-fraca));
  text-transform: uppercase; margin: 0 0 10px 2px;
}
.stats-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 24px; }
.stat-linha {
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 10px;
  padding: 8px 12px 8px 8px; display: flex; align-items: center; gap: 9px; font-size: var(--t-pequeno);
  opacity: 0; animation: aparecer-stat 0.35s ease-out forwards;
}
@keyframes aparecer-stat { to { opacity: 1; } }
.stat-icone-chip {
  flex-shrink: 0; width: 26px; height: 26px; border-radius: 7px;
  background: color-mix(in srgb, var(--cor-aura, var(--ouro)) 14%, var(--vazio-alto));
  display: flex; align-items: center; justify-content: center; font-size: 13px;
}
.stat-linha-corpo { flex: 1; display: flex; justify-content: space-between; align-items: baseline; min-width: 0; }
.stat-nome { color: var(--tinta-fraca); }
.stat-valor { font-family: var(--fonte-numero); font-weight: 700; color: var(--tinta); }

.equip-secao, .pets-secao { margin-bottom: 24px; }
.equip-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.equip-slot {
  background-color: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
  padding: 10px 6px; text-align: center; min-height: 74px;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px;
}
.equip-slot.vazio { opacity: 0.45; border-style: dashed; }
/* O ícone do slot vira a ARTE do item quando há um equipado: antes espada
   comum e espada lendária mostravam o mesmo desenho de tipo.
   ⚠️ background-color e não background (armadilha nº 2). */
.equip-slot-icone {
  font-size: 20px; width: 44px; height: 44px; border-radius: 9px;
  margin: 0 auto 2px; background-color: transparent;
  background-size: cover; background-position: center;
  display: flex; align-items: center; justify-content: center;
}
.equip-slot-nome { font-size: var(--t-mini); color: var(--tinta-fraca);  letter-spacing: 0.4px; }
.equip-slot-item { font-size: var(--t-mini); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
/* ---------- raridade: cantos ornamentados + glow por tier ----------
   Os 4 triângulos de canto são só camadas de background (sem DOM extra),
   então funcionam em qualquer elemento com --cor-canto definida — não
   precisa mudar o JS que já monta essas classes. */
.rar-comum { border-color: var(--rar-comum) !important; }

.rar-incomum {
  border-color: var(--rar-incomum) !important;
  box-shadow: 0 0 8px -5px var(--rar-incomum);
}

.rar-raro, .rar-epico, .rar-lendario {
  border-width: 1.5px !important;
  background-image:
    linear-gradient(135deg, var(--cor-canto) 45%, transparent 46%) top left / 9px 9px no-repeat,
    linear-gradient(-135deg, var(--cor-canto) 45%, transparent 46%) top right / 9px 9px no-repeat,
    linear-gradient(45deg, var(--cor-canto) 45%, transparent 46%) bottom left / 9px 9px no-repeat,
    linear-gradient(-45deg, var(--cor-canto) 45%, transparent 46%) bottom right / 9px 9px no-repeat;
}

.rar-raro {
  border-color: var(--rar-raro) !important;
  box-shadow: 0 0 10px -4px var(--rar-raro);
  --cor-canto: var(--canto-raro);
}

.rar-epico {
  border-color: var(--rar-epico) !important;
  box-shadow: 0 0 13px -3px var(--rar-epico);
  --cor-canto: var(--canto-epico);
}

.rar-lendario {
  border-color: var(--rar-lendario) !important; border-width: 2px !important;
  box-shadow: 0 0 15px -3px var(--rar-lendario);
  --cor-canto: var(--canto-lendario);
  animation: pulsar-lendario 2.4s ease-in-out infinite;
}
@keyframes pulsar-lendario {
  0%, 100% { box-shadow: 0 0 15px -3px var(--rar-lendario); }
  50% { box-shadow: 0 0 22px -2px var(--rar-lendario); }
}

.rar-mythic {
  border-color: var(--rar-mythic) !important; border-width: 2px !important;
  box-shadow: 0 0 16px -2px rgba(255,40,40,0.75);
  --cor-canto: #ff3b3b;
  background-image:
    linear-gradient(135deg, var(--cor-canto) 45%, transparent 46%) top left / 9px 9px no-repeat,
    linear-gradient(-135deg, var(--cor-canto) 45%, transparent 46%) top right / 9px 9px no-repeat,
    linear-gradient(45deg, var(--cor-canto) 45%, transparent 46%) bottom left / 9px 9px no-repeat,
    linear-gradient(-45deg, var(--cor-canto) 45%, transparent 46%) bottom right / 9px 9px no-repeat;
  animation: pulsar-mitico 1.8s ease-in-out infinite;
}
@keyframes pulsar-mitico {
  0%, 100% { box-shadow: 0 0 12px -2px rgba(255,40,40,0.55), inset 0 0 10px -6px rgba(255,40,40,0.5); }
  50% { box-shadow: 0 0 26px 2px rgba(255,40,40,0.95), inset 0 0 14px -6px rgba(255,60,60,0.7); }
}

/* minmax(0, 1fr): com "1fr" puro a coluna não encolhe abaixo do texto, e
   com o mínimo de 12px o 5º slot saía da tela (medido: página 467px numa
   tela de 390). */
.pets-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; }
.pet-slot {
  min-width: 0;
  aspect-ratio: 1; border-radius: 10px; background: var(--painel); border: 1px solid var(--painel-borda);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  font-size: var(--t-mini); color: var(--tinta-fraca); text-align: center; padding: 3px; gap: 2px;
  transition: transform 0.1s ease, background 0.15s ease;
}
.pet-slot:active { transform: scale(0.94); background: rgba(255,255,255,0.04); }
.pet-slot:not(.vazio) { border-color: color-mix(in srgb, var(--cor-aura, var(--ouro)) 30%, var(--painel-borda)); }
.pet-slot.vazio { opacity: 0.35; border-style: dashed; }
.pet-slot-nivel { font-family: var(--fonte-numero); font-weight: 700; color: var(--ouro); font-size: var(--t-mini); max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 🐾 A arte do pet dentro do slot. O nome fica em uma linha só e corta com
   reticências: cinco cartões numa tela de celular não comportam duas. */
.pet-slot-arte {
  width: 100%; flex: 1; min-height: 0; border-radius: 8px;
  background-color: var(--vazio-alto);
  background-size: cover; background-position: center;
  display: flex; align-items: center; justify-content: center; font-size: 18px;
}
.pet-slot-nome {
  width: 100%; font-size: var(--t-mini); line-height: 1.2; color: var(--tinta);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* 🐎 montaria equipada — um slot largo, porque é uma só */
.montaria-slot {
  display: flex; align-items: center; gap: 12px; width: 100%;
  padding: 10px; border-radius: 12px;
  background-color: var(--painel); border: 1px solid var(--painel-borda);
  cursor: pointer; text-align: left; min-height: 64px;
}
.montaria-slot.vazio { opacity: 0.6; border-style: dashed; }
.montaria-slot:active { transform: scale(0.99); }
.montaria-arte {
  width: 52px; height: 52px; flex: 0 0 auto; border-radius: 10px;
  background-color: var(--vazio-alto); background-size: cover; background-position: center;
  display: flex; align-items: center; justify-content: center; font-size: 24px;
}
.montaria-txt { min-width: 0; flex: 1; }
.montaria-nome { font-size: var(--t-corpo); font-weight: 700; color: var(--tinta); }
.montaria-sub { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 2px; }

/* 📊 a conta do atributo (quanto é base, quanto veio da trilha) */
.stat-nome-bloco { display: flex; flex-direction: column; min-width: 0; }
.stat-fonte { font-size: var(--t-mini); color: var(--tinta-fraca); font-family: var(--fonte-numero); }

/* ⚔️ os atributos de combate do pet, no próprio slot do esquadrão */
.pet-slot-stats {
  display: flex; flex-wrap: wrap; justify-content: center; gap: 4px;
  margin-top: 3px; font-size: var(--t-mini); color: var(--tinta-fraca);
  font-family: var(--fonte-numero); font-variant-numeric: tabular-nums;
}

@media (min-width: 520px) { .equip-grid { grid-template-columns: repeat(4, 1fr); } }

/* ---------- carrossel horizontal de filtro (inventário por slot) ---------- */
.filtro-carrossel {
  display: flex; gap: 8px; overflow-x: auto; padding-bottom: 10px; margin-bottom: 14px;
  scrollbar-width: none;
  /* 🖼️ (09/07/2026): desvanece as pontas — sinaliza visualmente que o
  carrossel continua, e ajuda o dedo a não tocar exatamente na borda da
  tela (no iOS, um toque bem na borda pode disparar o gesto de fechar
  o app por engano). */
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 16px, #000 calc(100% - 16px), transparent 100%);
  mask-image: linear-gradient(90deg, transparent 0, #000 16px, #000 calc(100% - 16px), transparent 100%);
}
.filtro-carrossel::-webkit-scrollbar { display: none; }
.filtro-chip {
  flex-shrink: 0; background: var(--painel); border: 1px solid var(--painel-borda); color: var(--tinta-fraca);
  padding: 8px 14px; border-radius: 20px; font-size: var(--t-pequeno); font-weight: 600; white-space: nowrap;
}
.filtro-chip.ativo { background: linear-gradient(135deg, var(--ouro), #c99a3a); color: #221904; border-color: transparent; }

/* ---------- cartão de item / pet (inventário e esquadrão) ---------- */
.cartao-item {
  background-color: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
  padding: 12px 14px; margin-bottom: 8px; display: flex; align-items: center; justify-content: space-between; gap: 10px;
}
.cartao-item-info { min-width: 0; flex: 1; }
.cartao-item-nome { font-weight: 700; font-size: var(--t-pequeno); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cartao-item-bonus { font-family: var(--fonte-numero); font-size: var(--t-mini); color: var(--ouro); margin-top: 3px; }
.cartao-item-bonus-evo { display: flex; align-items: center; gap: 1px; font-family: var(--fonte-corpo); }
.estrelas-evo { display: inline-flex; gap: 1px; }
.estrela-pip { font-size: var(--t-mini); color: var(--painel-borda-forte); }
.estrela-pip.cheia { color: var(--rar-lendario); }
.cartao-item-sockets { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 2px; }
.cartao-item-acoes { display: flex; gap: 6px; flex-shrink: 0; }
.cartao-item.equipada { border-color: var(--ouro); background-color: color-mix(in srgb, var(--ouro) 6%, var(--painel)); }
.texto-fraco { color: var(--tinta-fraca); font-size: var(--t-pequeno); padding: 10px 2px; }

/* ---------- estado vazio (mais convidativo que texto solto) ---------- */
.estado-vazio {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 8px; padding: 30px 20px; text-align: center;
  border: 1px dashed var(--painel-borda); border-radius: 14px; margin-bottom: 8px;
}
.estado-vazio-icone { font-size: 26px; opacity: 0.7; }
.estado-vazio-texto { font-size: var(--t-pequeno); color: var(--tinta-fraca); line-height: 1.5; max-width: 260px; }

/* ---------- controles dentro do bottom sheet ---------- */
.sheet-opcao { width: 100%; margin-top: 8px; text-align: left; }
.sheet-select, .sheet-input {
  width: 100%; background: var(--vazio-alto); border: 1px solid var(--painel-borda); color: var(--tinta);
  padding: 10px 12px; border-radius: 10px; font-family: var(--fonte-corpo); font-size: 14px; margin-top: 8px;
}

/* ---------- missões ---------- */
.cartao-missao {
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
  padding: 12px 14px; margin-bottom: 8px; display: flex; align-items: center; justify-content: space-between; gap: 10px;
}
.cartao-missao.concluida { border-color: var(--verde); }
.cartao-missao.resgatada { opacity: 0.55; }
.missao-desc { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 4px; line-height: 1.4; }
.missao-selo {
  flex-shrink: 0; font-size: var(--t-mini); font-weight: 700; padding: 6px 10px; border-radius: 20px;
  background: rgba(127,214,127,0.15); color: var(--verde);
}
.missao-selo.pendente { background: rgba(155,147,172,0.15); color: var(--tinta-fraca); }

/* --- diárias do reino (25/09/2026) --- */
.diarias { margin-bottom: 22px; }
.diarias-topo { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.diarias-topo .secao-titulo { margin-bottom: 4px; }
.diarias-pago { font-size: var(--t-pequeno); font-weight: 700; color: var(--ouro); font-variant-numeric: tabular-nums; white-space: nowrap; }
.diarias > .texto-fraco { margin-bottom: 10px; }
.diaria {
  display: flex; align-items: center; gap: 12px;
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
  padding: 12px 14px; margin-bottom: 8px;
}
.diaria.pronta { border-color: var(--verde); }
.diaria.resgatada { opacity: 0.55; }
.diaria-info { flex: 1; min-width: 0; }
.diaria-linha { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.diaria-nome { font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-corpo); }
.diaria-ouro { font-size: var(--t-pequeno); font-weight: 700; color: var(--ouro); font-variant-numeric: tabular-nums; white-space: nowrap; }
.diaria-trilho { height: 6px; margin-top: 9px; border-radius: 3px; background: var(--vazio-alto); overflow: hidden; }
.diaria-cheio { height: 100%; border-radius: 3px; background: linear-gradient(90deg, var(--mana), var(--verde)); transition: width .4s ease; }
.diaria-conta { margin-top: 3px; font-size: var(--t-mini); color: var(--tinta-fraca); text-align: right; font-variant-numeric: tabular-nums; }
.diaria-bonus { border-style: dashed; border-color: color-mix(in srgb, var(--ouro) 45%, var(--painel-borda)); }
.diaria-bonus.pronta { border-style: solid; border-color: var(--ouro); }

/* ---------- ranking semanal da arena ---------- */
.gold-panel {
  background: linear-gradient(180deg, var(--painel), var(--vazio-alto));
  border: 1px solid var(--painel-borda); border-radius: 12px; padding: 12px 14px;
}
.arena-semana-titulo {
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-pequeno); color: var(--ouro); margin-bottom: 8px;
}
.arena-semana-faixas { display: flex; gap: 8px; flex-wrap: wrap; }
.arena-semana-faixa {
  font-family: var(--fonte-numero); font-size: var(--t-mini); font-weight: 700; color: var(--tinta-fraca);
  background: rgba(0,0,0,0.2); border-radius: 6px; padding: 3px 8px;
}
/* ---------- boss global (compartilhado entre todos os jogadores) ---------- */
.boss-global-painel {
  position: relative; text-align: center;
  background: linear-gradient(180deg, #241418, #160e10);
  border: 1px solid var(--ferrugem); border-radius: 16px; padding: 20px 16px;
  margin-bottom: 14px; overflow: hidden;
}
.boss-global-painel::before {
  content: ""; position: absolute; inset: 0;
  background: radial-gradient(circle at 50% 0%, rgba(216,98,58,0.22), transparent 65%);
  animation: boss-global-pulso 2.6s ease-in-out infinite;
  pointer-events: none;
}
@keyframes boss-global-pulso { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } }
.boss-global-nome {
  position: relative; z-index: 1;
  font-family: var(--fonte-display); font-weight: 800; font-size: var(--t-sub); color: #ff8a6b;
  text-shadow: 0 0 14px rgba(216,98,58,0.7);
}
.boss-global-geracao { position: relative; z-index: 1; font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 2px; }
.boss-global-fase {
  position: relative; z-index: 1; font-size: var(--t-mini); color: #ffb89e; margin-top: 6px; font-weight: 700;
}
.boss-global-barra-wrap { position: relative; z-index: 1; margin-top: 12px; }
.boss-global-sessao {
  position: relative; z-index: 1; font-size: var(--t-mini); color: var(--ouro); margin-top: 10px; line-height: 1.5;
}

/* ranking: ver "RANKING — pódio" no fim do arquivo (25/09/2026) */

/* ---------- fusão mítica (Forja) ---------- */
.fusao-grade { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 8px; margin-bottom: 8px; }
.fusao-item {
  display: flex; flex-direction: column; align-items: center; gap: 4px;
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 10px;
  padding: 10px 6px; text-align: center;
}
.fusao-item.pronto { border-color: var(--rar-mythic); box-shadow: 0 0 10px -4px rgba(255,40,40,0.7); }
.fusao-item-icone { font-size: 18px; }
.fusao-item-nome { font-size: var(--t-mini); color: var(--tinta-fraca); }
.fusao-item-contagem { font-family: var(--fonte-numero); font-size: var(--t-mini); font-weight: 700; color: var(--tinta); }
.fusao-item .botao-secundario { width: 100%; padding: 5px; font-size: var(--t-mini); margin-top: 2px; }

/* ---------- gacha (templo de evocação / estábulo) ---------- */
.gacha-botoes { display: flex; gap: 10px; margin: 16px 0 24px; }
.gacha-botoes button { flex: 1; }

/* ---------- revelação em estágio dos itens sorteados ---------- */
.cartao-revelar {
  opacity: 0; transform: translateY(10px) scale(0.96);
  animation: revelar-item 0.4s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}
@keyframes revelar-item {
  to { opacity: 1; transform: translateY(0) scale(1); }
}
.cartao-carregando {
  justify-content: center; min-height: 24px;
  animation: revelar-item 0.4s cubic-bezier(0.22, 1, 0.36, 1) forwards, carregando-tremor 0.35s ease-in-out infinite;
}
.cartao-carregando .cartao-item-nome { color: var(--tinta-fraca); font-size: var(--t-corpo); text-align: center; width: 100%; }
@keyframes carregando-tremor {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-2px); }
  75% { transform: translateX(2px); }
}

/* ---------- botão desabilitado (forja) ---------- */
.botao-holofote:disabled { opacity: 0.4; filter: grayscale(0.6); }

/* ---------- combate (Torre) ---------- */
.barra-atb { background: linear-gradient(90deg, var(--mana), #8fe3e6); animation: atb-shimmer 2s ease-in-out infinite; }
@keyframes atb-shimmer { 0%, 100% { filter: brightness(1); } 50% { filter: brightness(1.2); } }
.barra-trilho.mini { height: 6px; margin: 4px 0; }
.barra-numero-mini { font-family: var(--fonte-numero); font-size: var(--t-mini); color: var(--tinta-fraca); text-align: right; }

/* fila de iniciativa — ordem de quem age a seguir, do mais pronto pro menos */
/* Próximos turnos. A ordem é calculada com a MESMA regra do motor (a barra
   enche a spd por unidade de tempo, age em 100 e desconta 100), então não é
   estimativa — é a conta. Mas é PREVISÃO: vale enquanto ninguém morrer nem
   for lentificado, e por isso o título diz "próximos" e não "será". */
.fila-caixa { margin-bottom: 4px; }
.fila-titulo {
  font-size: var(--t-mini); letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--tinta-fraca); margin-bottom: 5px;
}
.fila-iniciativa {
  display: flex; gap: 8px; overflow-x: auto; padding: 2px 2px 12px; margin-top: -2px;
  scrollbar-width: none;
}
.fila-iniciativa::-webkit-scrollbar { display: none; }
.fila-chip {
  position: relative; flex-shrink: 0; width: 34px; height: 34px; border-radius: 50%;
  background-color: var(--painel); background-size: cover; background-position: center;
  border: 1.5px solid var(--painel-borda);
  display: flex; align-items: center; justify-content: center; font-size: var(--t-corpo);
  opacity: 0.55; transition: opacity 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
}
/* Os mais distantes desbotam: a ordem importa mais perto do agora, e o
   degradê diz isso sem precisar de número. */
.fila-chip:nth-child(n+5) { opacity: 0.4; }
.fila-chip:nth-child(n+8) { opacity: 0.28; }
/* A letra liga o chip à ficha do inimigo lá embaixo. Sem ela, dez carinhas
   iguais não dizem qual monstro age quando. */
.fila-chip-tag {
  position: absolute; bottom: -3px; right: -3px;
  background: var(--vazio); border: 1px solid var(--painel-borda);
  border-radius: 6px; padding: 0 3px;
  font-size: var(--t-mini); font-weight: 800; line-height: 1.35; color: var(--tinta);
}
.fila-chip.jogador { border-color: var(--mana); }
.fila-chip.inimigo { border-color: var(--ferrugem); }
.fila-chip.proximo { opacity: 1; transform: scale(1.18); }
.fila-chip.proximo .fila-chip-tag { border-color: var(--ouro); color: var(--ouro); }
.fila-chip.jogador.proximo { box-shadow: 0 0 12px -2px var(--mana); }
.fila-chip.inimigo.proximo { box-shadow: 0 0 12px -2px var(--ferrugem); }
.fila-chip.morto { opacity: 0.25; filter: grayscale(1); }

/* flash de dano recebido — pulso vermelho rápido, some sozinho */
.flash-dano { animation: flash-dano-pulso 0.45s ease-out; }
@keyframes flash-dano-pulso {
  0% { box-shadow: 0 0 0 2px rgba(226,75,74,0.9), 0 0 14px rgba(226,75,74,0.6); }
  100% { box-shadow: none; }
}

.cartao-inimigo {
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
  padding: 10px 14px; margin-bottom: 8px; cursor: pointer;
  transition: transform 0.1s ease, background 0.15s ease, border-color 0.15s ease;
}
.cartao-inimigo:active { transform: scale(0.97); background: rgba(255,255,255,0.04); }
.cartao-inimigo.selecionado { border-color: var(--ferrugem); box-shadow: 0 0 10px -3px var(--ferrugem); }
.barra-inimigo { background: linear-gradient(90deg, var(--ferrugem), #f0865e); }

.log-combate {
  background: var(--vazio-alto); border: 1px solid var(--painel-borda); border-radius: 10px;
  padding: 10px 12px; font-size: var(--t-pequeno); color: var(--tinta-fraca); line-height: 1.5;
  margin: 12px 0;
}

/* Duas colunas fixas. Com flex-wrap o número de colunas mudava conforme a
   quantidade de botões — Atacar sozinho virava um botão da largura da tela,
   três skills viravam três colunas espremidas. Grade fixa dá posição estável:
   o dedo aprende onde fica Atacar e não precisa reler a tela a cada turno. */
.combate-acoes {
  display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 10px 0;
}
.combate-acoes button { width: 100%; min-width: 0; min-height: 44px; }
/* Botão sozinho ocupa as duas colunas em vez de deixar um buraco. */
.combate-acoes button:only-child { grid-column: 1 / -1; }

/* ---------- arena (pvp e pets) ---------- */
.barra-inimigo-full { background: linear-gradient(90deg, var(--ferrugem), #f0865e); }

/* ---------- traição (raid) ---------- */
.traicao-linha { margin-top: 16px; padding-top: 12px; border-top: 1px dashed var(--painel-borda); }
.botao-traicao {
  width: 100%; background: rgba(216, 98, 58, 0.1); border: 1px solid var(--ferrugem);
  color: #ffb8a0; padding: 9px 14px; border-radius: 10px;
  font-family: var(--fonte-corpo); font-weight: 600; font-size: var(--t-pequeno);
}

/* ---------- lobby de raid ---------- */
.cartao-item.voce { border-color: var(--mana); background: color-mix(in srgb, var(--mana) 6%, var(--painel)); }
.status-membro.pronto { color: var(--verde) !important; }

/* ---------- painel VS de combate (retratos frente a frente + cronômetro) ---------- */
.combate-vs {
  display: flex; align-items: flex-start; gap: 6px;
  background: linear-gradient(180deg, var(--painel), var(--vazio-alto));
  border: 1px solid var(--painel-borda); border-radius: 16px;
  padding: 16px 10px 14px; margin-bottom: 14px;
}
.combate-vs-lado {
  flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 6px;
}
/* Quadrado e o maior que couber: é o retrato principal da tela de luta, e
   redondo com 56px cortava justamente a silhueta.
   Largura FLUIDA com teto, não valor fixo: com 130px fixos o retrato
   estouraria a coluna em aparelho estreito e empurraria o painel pra fora
   da tela. Assim ele ocupa o que tem, até 130.
   ⚠️ background-color e NÃO background: o shorthand apagaria a imagem
   posta pelo JS (armadilha nº 2 do projeto). */
.combate-vs-retrato {
  width: 100%; max-width: 130px; aspect-ratio: 1;
  border-radius: 14px; overflow: hidden;
  background-color: var(--vazio-alto); background-size: cover; background-position: center;
  border: 2px solid var(--mana);
  display: flex; align-items: center; justify-content: center; font-size: 44px;
}
.combate-vs-lado.inimigo .combate-vs-retrato { border-color: var(--ferrugem); }
.combate-vs-lado.inimigo.atingido .combate-vs-retrato { animation: flash-dano-pulso 0.45s ease-out; }
.combate-vs-nome {
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-mini); text-align: center;
  max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.combate-vs-barra-wrap { width: 100%; }
.combate-vs-barra-wrap .barra-numero-mini { text-align: center; }
/* Só o cronômetro mora aqui agora. Estreito de propósito: cada pixel que
   este meio não usa vira largura dos dois retratos, que são o assunto. */
.combate-vs-meio {
  flex: 0 0 auto; display: flex; flex-direction: column; align-items: center;
  justify-content: center; gap: 4px; padding: 0 6px; max-width: 64px;
}
/* Título da tela de luta. Em ouro e na fonte de display porque é o título
   da página — o mesmo peso que "Inimigos" tem mais abaixo, só que maior. */
.titulo-luta {
  display: flex; align-items: baseline; justify-content: center;
  gap: 8px; flex-wrap: wrap;
  margin: 2px 0 12px; text-align: center;
}
.titulo-luta-onde,
.titulo-luta-detalhe {
  font-family: var(--fonte-display); font-weight: 700;
  font-size: var(--t-titulo); line-height: 1.15; color: var(--ouro);
  letter-spacing: 0.03em;
}
.titulo-luta-detalhe { font-variant-numeric: tabular-nums; }
.combate-vs-timer {
  font-family: var(--fonte-numero); font-size: var(--t-mini); color: var(--tinta-fraca);
  white-space: nowrap; font-variant-numeric: tabular-nums;
}
#combate-cronometro { color: var(--ouro); font-weight: 700; }

/* ---------- fileira de inimigos (tela de luta) ----------
   Substituiu a grade de quadradinhos: lá o retrato tinha 30px e a arte não
   cabia. Aqui cada inimigo tem arte grande, nome e a própria barra de vida
   embaixo — e a fileira rola de lado quando são muitos, em vez de quebrar
   linha e empurrar os botões pra fora da tela. */
/* Cinco por linha, em qualquer largura de tela. Grade de 5 frações em vez
   de largura fixa: com px fixo, o aparelho estreito encaixava 4 e o largo
   deixava sobra — e o número de fichas por linha mudando de celular pra
   celular é o tipo de coisa que faz a tela parecer quebrada. */
.fileira-inimigos {
  display: grid; grid-template-columns: repeat(5, 1fr);
  gap: 5px; margin-bottom: 14px; padding: 2px 0 2px;
}
.inimigo-ficha {
  position: relative; min-width: 0;
  background: var(--painel); border: 1px solid var(--painel-borda);
  border-radius: 9px; padding: 4px 3px 5px;
  display: flex; flex-direction: column; align-items: center; gap: 3px;
  color: var(--tinta); font-family: inherit; cursor: pointer;
  transition: transform 0.1s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}
.inimigo-ficha:active { transform: scale(0.96); }
.inimigo-ficha:focus-visible { outline: 2px solid var(--mana); outline-offset: 2px; }
.inimigo-ficha.selecionado {
  border-color: var(--ferrugem); box-shadow: 0 0 12px -3px var(--ferrugem);
}
.inimigo-ficha.morto { opacity: 0.32; filter: grayscale(1); }
.inimigo-ficha-arte {
  width: 100%; aspect-ratio: 1; border-radius: 7px;
  background-color: var(--vazio-alto); background-size: cover; background-position: center;
  display: flex; align-items: center; justify-content: center; font-size: 22px;
}
.inimigo-ficha-alvo { position: absolute; top: 2px; right: 3px; font-size: var(--t-mini); }
.inimigo-ficha-tag {
  position: absolute; top: 2px; left: 3px;
  background: var(--vazio); border: 1px solid var(--painel-borda);
  border-radius: 6px; padding: 0 4px;
  font-size: var(--t-mini); font-weight: 800; color: var(--tinta);
}
/* Com o mínimo de 12px (25/09/2026), uma linha só cortava o nome em
   "Guardiã…". Duas linhas cabem o nome; a altura fixa de 2 linhas mantém
   as barras de vida dos três cartões alinhadas. */
.inimigo-ficha-nome {
  font-size: var(--t-mini); font-weight: 700; text-align: center; line-height: 1.15;
  overflow: hidden; overflow-wrap: anywhere;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2;
  min-height: 2.3em; max-width: 100%; width: 100%;
}
.inimigo-ficha-barra {
  width: 100%; height: 4px; border-radius: 3px;
  background: var(--vazio-alto); overflow: hidden;
}
.inimigo-ficha-barra-fill {
  height: 100%; background: var(--ferrugem); transition: width 0.25s ease;
}
.inimigo-ficha-hp {
  font-family: var(--fonte-numero); font-size: var(--t-mini); color: var(--tinta-fraca);
  font-variant-numeric: tabular-nums;
}

/* ---------- grade de quadradinhos (inimigos/aliados em combate) ---------- */
.grade-combatentes {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(70px, 1fr));
  gap: 8px; margin-bottom: 14px;
}
.quadrado-combatente {
  position: relative; aspect-ratio: 1;
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 10px;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 6px 4px; gap: 3px; overflow: hidden;
  transition: transform 0.1s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}
.quadrado-combatente:active { transform: scale(0.94); }
.quadrado-combatente.inimigo { border-color: var(--painel-borda); }
.quadrado-combatente.jogador { border-color: color-mix(in srgb, var(--mana) 45%, var(--painel-borda)); }
.quadrado-combatente.selecionado { border-color: var(--ferrugem); box-shadow: 0 0 10px -3px var(--ferrugem); }
.quadrado-combatente.morto { opacity: 0.32; filter: grayscale(1); }
.quadrado-combatente-retrato {
  width: 30px; height: 30px; border-radius: 50%; flex-shrink: 0;
  background-color: var(--vazio-alto); background-size: cover; background-position: center;
  display: flex; align-items: center; justify-content: center; font-size: 15px;
}
.quadrado-combatente-alvo { position: absolute; top: 3px; right: 4px; font-size: var(--t-mini); }
.quadrado-combatente-nome {
  font-size: var(--t-mini); font-weight: 700; text-align: center; line-height: 1.15;
  overflow: hidden; overflow-wrap: anywhere;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2;
  min-height: 2.3em; max-width: 100%;
}
.quadrado-combatente-barra { width: 100%; height: 4px; border-radius: 3px; background: var(--vazio-alto); overflow: hidden; }
.quadrado-combatente-barra-fill { height: 100%; }

/* ---------- imagens reais do jogo (09/07/2026) ----------
   🖼️ (atualização): banners e imagem de combate agora usam a técnica de
   "imagem de fundo + gradiente escuro na base + texto sobreposto" — em vez
   de imagem solta com borda, o nome/contexto flutua legível por cima dela. */
.banner-wrap {
  position: relative; width: 100%; max-height: 130px; border-radius: 14px;
  overflow: hidden; margin-bottom: 16px; border: 1px solid var(--painel-borda);
}
.banner-tela { width: 100%; max-height: 130px; object-fit: cover; display: block; }
.banner-legenda {
  position: absolute; inset: 0;
  background: linear-gradient(to top, rgba(10,9,16,0.92) 0%, rgba(10,9,16,0.35) 45%, transparent 75%);
  display: flex; align-items: flex-end; padding: 10px 14px;
}
.banner-titulo {
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-corpo); letter-spacing: 0.4px;
  color: var(--tinta); text-shadow: 0 2px 6px rgba(0,0,0,0.8);
}

.cartao-thumb {
  width: 44px; height: 44px; object-fit: cover; border-radius: 8px;
  flex-shrink: 0; border: 1px solid var(--painel-borda); background: var(--vazio-alto);
}


/* ---------- portão de entrada do site (11/09/2026) ----------
   Reaproveita .sheet-input, .botao-holofote e .botao-secundario de
   propósito: é a mesma linguagem do resto do jogo, e inventar um estilo
   novo só pro login faria a primeira tela parecer de outro produto.
   A ousadia do jogo está na partida, não aqui. */
.portao {
  width: 100%; max-width: 340px; margin: 0 auto; padding: 28px 22px;
  display: flex; flex-direction: column; text-align: center;
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 16px;
}
.portao-marca { font-size: 40px; line-height: 1; margin-bottom: 6px; }
.portao-titulo {
  font-family: var(--fonte-display); font-size: var(--t-titulo); font-weight: 700;
  color: var(--ouro); letter-spacing: 0.02em; margin-bottom: 4px;
}
.portao-lore { font-size: var(--t-pequeno); color: var(--tinta-fraca); line-height: 1.5; margin-bottom: 14px; }
.portao-dica {
  font-size: var(--t-mini); color: var(--tinta-fraca); line-height: 1.5;
  text-align: left; margin-top: 8px;
}
.portao-atencao { color: var(--canto-lendario); }
.portao-aviso {
  font-size: var(--t-mini); color: var(--tinta); background: var(--vazio-alto);
  border: 1px solid var(--painel-borda); border-radius: 10px;
  padding: 8px 10px; margin-bottom: 10px;
}
/* Erro em vermelho e ALTO o bastante pra não empurrar o botão quando
   aparece — sem min-height, a tela pula na cara de quem errou a senha. */
.portao-erro { min-height: 18px; margin-top: 10px; font-size: var(--t-mini); color: #ff9aa8; }


/* ---------- caixa de avisos (11/09/2026) ---------- */
.btn-som { position: relative; }
.badge-avisos {
  position: absolute; top: -4px; right: -4px; min-width: 18px; height: 18px;
  padding: 0 5px; border-radius: 9px; background: #c9414f; color: #fff;
  font-size: var(--t-mini); font-weight: 800; line-height: 18px; text-align: center;
}
.aviso-item {
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
  padding: 12px 14px; margin-bottom: 8px; text-align: left;
}
/* A borda dourada some quando o aviso é lido. É o único sinal de "novo" —
   sem ela, uma lista de 50 avisos não diz o que mudou desde a última vez. */
.aviso-item.novo { border-color: var(--ouro); }
.aviso-titulo { font-family: var(--fonte-display); font-size: var(--t-corpo); font-weight: 700; color: var(--tinta); }
.aviso-texto { font-size: var(--t-pequeno); color: var(--tinta-fraca); line-height: 1.5; margin-top: 4px; }
.aviso-quando { font-size: var(--t-mini); color: var(--tinta-fraca); opacity: 0.7; margin-top: 6px; }


/* ---------- criação de personagem (11/09/2026) ----------
   A ousadia do jogo mora no combate. Aqui a escolha é que tem que
   aparecer, então: sem partícula, sem gradiente, sem cartão flutuando.
   Uma grade legível e o número na cara. */
.criacao-topo { text-align: center; padding: 4px 4px 18px; }
.criacao-passo {
  font-family: var(--fonte-numero); font-size: var(--t-mini); letter-spacing: 0.08em;
  color: var(--tinta-fraca); margin-bottom: 6px;
}
.criacao-titulo {
  font-family: var(--fonte-display); font-size: var(--t-titulo); font-weight: 700;
  color: var(--ouro); margin-bottom: 6px;
}
.criacao-lore {
  font-family: var(--fonte-corpo); font-size: var(--t-pequeno); line-height: 1.55;
  color: var(--tinta-fraca); max-width: 30em; margin: 0 auto;
}


.escolha-cartao {
  background-color: var(--painel); border: 1px solid var(--painel-borda);
  border-radius: 14px; padding: 12px; display: flex; flex-direction: column;
}
.escolha-nome {
  font-family: var(--fonte-display); font-size: var(--t-corpo); font-weight: 700;
  color: var(--tinta); line-height: 1.25;
}
.escolha-atributo { font-size: var(--t-mini); color: var(--mana); margin-top: 3px; }
.escolha-lore {
  font-family: var(--fonte-corpo); font-size: var(--t-mini); line-height: 1.45;
  color: var(--tinta-fraca); margin-top: 6px;
}
.escolha-efeitos { display: flex; flex-wrap: wrap; gap: 4px; margin: 10px 0 4px; }
.escolha-ganho, .escolha-perda {
  font-family: var(--fonte-numero); font-size: var(--t-mini); font-weight: 700;
  padding: 3px 7px; border-radius: 6px;
}
.escolha-ganho { background-color: rgba(127, 214, 127, 0.14); color: var(--verde); }
/* Mesmo peso e mesmo tamanho do ganho. Numa escolha sem volta, o custo
   não pode ser letra miúda. */
.escolha-perda { background-color: rgba(216, 98, 58, 0.16); color: var(--ferrugem); }
.escolha-botao { margin-top: auto; width: 100%; }


/* ---------- engaste de gemas (11/09/2026) ---------- */
.engaste-slots { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 8px; }
.engaste-slot {
  width: 34px; height: 34px; border-radius: 8px; font-size: var(--t-corpo);
  background-color: var(--vazio-alto); border: 1px dashed var(--painel-borda);
  color: var(--tinta-fraca);
}
/* Ocupado é borda cheia e dourada; vazio é tracejado. A diferença tem que
   ser visível sem ler a etiqueta — o dedo decide antes do olho. */
.engaste-slot.ocupado { border: 1px solid var(--ouro); border-style: solid; color: var(--ouro); }
.engaste-etiqueta { font-size: var(--t-mini); color: var(--tinta-fraca); margin-right: 6px; }
.engaste-alerta {
  background-color: rgba(216, 98, 58, 0.14); border: 1px solid var(--ferrugem);
  color: var(--ferrugem); border-radius: 10px; padding: 10px 12px;
  font-size: var(--t-mini); line-height: 1.45; margin-bottom: 10px;
}
.engaste-opcao {
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  width: 100%; text-align: left; padding: 11px 12px; margin-bottom: 6px;
  background-color: var(--painel); border: 1px solid var(--painel-borda);
  border-radius: 10px; color: var(--tinta);
}
.engaste-opcao-nome { font-size: var(--t-pequeno); }
.engaste-opcao-bonus { font-family: var(--fonte-numero); font-size: var(--t-mini); color: var(--verde); }


/* ---------- tutorial e histórico (11/09/2026) ---------- */
.tutorial-texto { margin: 6px 0 12px; }
.tutorial-linha {
  font-family: var(--fonte-corpo); font-size: var(--t-pequeno); line-height: 1.6;
  color: var(--tinta); margin-bottom: 8px;
}
/* A primeira linha de cada tutorial é o título com emoji — destacada
   porque é ela que diz do que a tela toda está falando. */
.tutorial-linha:first-child {
  font-family: var(--fonte-display); font-size: var(--t-corpo); font-weight: 700;
  color: var(--ouro); margin-bottom: 10px;
}
.historico-combate { max-height: 55vh; overflow-y: auto; }
.historico-linha {
  font-family: var(--fonte-corpo); font-size: var(--t-mini); line-height: 1.5;
  color: var(--tinta-fraca); padding: 8px 10px; margin-bottom: 5px;
  background-color: var(--vazio-alto); border-radius: 8px;
  border-left: 2px solid var(--painel-borda);
}


/* =============================================================================
   PISO DE QUALIDADE (11/09/2026)
   Trazido do Mestre do Futebol. Nada aqui é estético — é o mínimo pra a
   interface não brigar com quem usa.
   ============================================================================= */

/* Número que não "pula" quando o valor muda. É o que a fonte monoespaçada
   estava resolvendo, sem precisar de uma terceira família. */
[class*="stat"], [class*="valor"], [class*="preco"], [class*="numero"],
[class*="hp-"], [class*="topo-"], .cartao-item-bonus, .aviso-quando,
.linha-lista-sub, .escolha-ganho, .escolha-perda {
  font-variant-numeric: tabular-nums;
}

/* Foco de teclado visível. Sem isto, quem navega por teclado (ou por teclado
   externo no tablet) não enxerga onde está. */
:focus-visible {
  outline: 2px solid var(--ouro);
  outline-offset: 2px;
  border-radius: 4px;
}

/* Quem pediu menos movimento no sistema operacional pediu pra valer:
   enjoo de movimento é condição real, não preferência estética. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}

/* Campo de formulário com menos de 16px faz o Safari do iPhone dar zoom
   sozinho ao focar, e a tela inteira sai do lugar. Era 14px. */
.sheet-input, .sheet-select, input, select, textarea { font-size: 16px; }

/* Alvo de toque de 44px. Abaixo disso o dedo erra, e no celular o dedo é a
   única forma de entrada. */
button, .linha-lista, .aba-item { min-height: 44px; }

/* =============================================================================
   COMPONENTES ESTRUTURAIS DO MESTRE
   Copiados porque são independentes de tema — a paleta continua sendo a do
   Isekai (ouro/aura/mana), não a do futebol.
   ============================================================================= */

/* --- barra de abas inferior: 5 telas do laço principal a um toque --- */
.barra-abas {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 90;
  display: flex; max-width: 480px; margin: 0 auto;
  background-color: var(--vazio);
  border-top: 1px solid var(--painel-borda);
  padding-bottom: env(safe-area-inset-bottom, 0px);
}
.aba-item {
  position: relative;
  flex: 1; border: none; background: none; cursor: pointer;
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  padding: 8px 2px 7px;
  font-family: var(--fonte-corpo); font-size: var(--t-mini); font-weight: 600;
  /* Cor própria pro fundo escuro. No Mestre foi usada aqui a cor de texto
     sobre papel claro e os rótulos inativos ficaram invisíveis — cor de
     texto não é transferível entre fundos. */
  color: rgba(237, 231, 242, 0.62);
  transition: color .15s;
}
/* Ícones em SVG desde 25/09/2026: emoji cada aparelho desenha de um jeito
   (e com cor própria, que não obedece ao estado ativo). O traço segue a cor
   do texto, então ativo/inativo/fora-da-cidade valem pro ícone também. */
.aba-icone { width: 23px; height: 23px; display: block; transition: transform .15s, filter .15s; }
.aba-item.ativa { color: var(--cor-secao); }
.aba-item.ativa .aba-icone {
  transform: translateY(-1px) scale(1.06);
  filter: drop-shadow(0 0 5px color-mix(in srgb, var(--cor-secao) 70%, transparent));
}
.aba-item.ativa::before {
  content: ""; position: absolute; top: -1px; left: 50%; width: 22px; height: 2px;
  transform: translateX(-50%); border-radius: 0 0 2px 2px; background: var(--cor-secao);
}
.aba-item .aba-badge {
  position: absolute; transform: translate(14px, -4px);
  min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px;
  background-color: var(--ferrugem); color: #fff;
  font-size: var(--t-mini); font-weight: 800; line-height: 18px;
}

/* --- linha de lista: substitui o cartão em qualquer navegação --- */
.linha-lista {
  display: flex; align-items: center; gap: 12px;
  padding: 14px 4px;
  border: 0; border-bottom: 1px solid var(--painel-borda);
  background: none; width: 100%; text-align: left; cursor: pointer;
  color: var(--tinta); font-family: var(--fonte-corpo);
}
.linha-lista:last-child { border-bottom: 0; }
.linha-lista:active { background-color: rgba(237, 231, 242, .05); }
.linha-lista-icone { font-size: 19px; width: 24px; text-align: center; flex: 0 0 auto; }
.linha-lista-texto { flex: 1; min-width: 0; }
.linha-lista-titulo { font-size: var(--t-corpo); font-weight: 600; }
.linha-lista-sub { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 2px; }
.linha-lista-seta { color: var(--tinta-fraca); opacity: .55; flex: 0 0 auto; }



/* =============================================================================
   RETRATOS E QUADROS COM ARTE REAL (11/09/2026)
   A tela de batalha já mostrava retrato redondo com a arte do jogo; o resto
   usava emoji. Agora é a mesma linguagem em todo lugar.
   ============================================================================= */

/* Retrato redondo genérico. Mesma forma do .quadrado-combatente-retrato da
   batalha — é dele que o estilo veio. */
.retrato-img {
  width: 30px; height: 30px; border-radius: 50%; flex-shrink: 0; overflow: hidden;
  background-color: var(--vazio-alto);
  display: flex; align-items: center; justify-content: center; font-size: 15px;
}
.retrato-img img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* Dentro do retrato grande da Ficha, a arte preenche o círculo inteiro e a
   aura pulsa por fora. O emoji era o conteúdo; agora é só a reserva. */
.retrato-simbolo .retrato-img { width: 100%; height: 100%; font-size: 34px; }
.retrato-mini .retrato-img { width: 100%; height: 100%; font-size: 13px; }

/* =============================================================================
   CARROSSEL DE ESCOLHA (11/09/2026) — classe e raça
   Um card por vez, do tamanho da tela. Rola com scroll-snap NATIVO: acompanha
   o dedo, tem a inércia do sistema e obedece "menos movimento" sem código
   extra. Carrossel movido por timer em JS não faz nada disso — e ainda anda
   sozinho na cara de quem está lendo.
   ============================================================================= */
.carrossel-bloco { margin: 0 -16px; }   /* sangra até a borda: o card ocupa a tela toda */

.carrossel {
  display: flex; overflow-x: auto; scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch; scrollbar-width: none;
  gap: 0; padding: 2px 0 10px;
}
.carrossel::-webkit-scrollbar { display: none; }

.carrossel-slide {
  flex: 0 0 100%; scroll-snap-align: center; scroll-snap-stop: always;
  padding: 0 16px; display: flex;
}
/* scroll-snap-stop: always impede que um deslize forte pule três opções de
   uma vez. Numa escolha definitiva, passar batido pela opção certa é pior
   que rolar devagar. */

.escolha-cartao {
  flex: 1; display: flex; flex-direction: column; align-items: center;
  background-color: var(--painel); border: 1px solid var(--painel-borda);
  border-radius: 16px; padding: 18px 16px 16px; text-align: center;
}

/* O selo grande é o que o card ganhou ao virar carrossel: tem espaço pra a
   marca da classe aparecer de verdade, com a aura da cor dela. */
.escolha-selo {
  width: 74px; height: 74px; border-radius: 50%; margin-bottom: 12px;
  display: flex; align-items: center; justify-content: center; font-size: 34px;
  background-color: var(--vazio-alto);
  border: 2px solid var(--cor-aura, var(--ouro));
  box-shadow: 0 0 18px -6px var(--cor-aura, var(--ouro));
}
.escolha-nome { font-family: var(--fonte-display); font-size: var(--t-titulo); font-weight: 700; color: var(--tinta); }
.escolha-atributo { font-size: var(--t-mini); color: var(--mana); margin-top: 4px; }
.escolha-lore {
  font-family: var(--fonte-corpo); font-size: var(--t-pequeno); line-height: 1.55;
  color: var(--tinta-fraca); margin-top: 10px;
  /* Altura fixa pras três linhas: sem isso, cada card tem uma altura e o
     bloco de efeitos dança de lugar a cada deslize — justamente o que
     precisa ficar parado pra dar pra comparar. */
  min-height: 3.2em;
}
.escolha-efeitos {
  display: flex; flex-wrap: wrap; justify-content: center; gap: 6px;
  margin: 14px 0 16px; min-height: 52px; align-content: flex-start;
}
.escolha-ganho, .escolha-perda, .escolha-neutro {
  font-size: var(--t-mini); font-weight: 700; padding: 5px 10px; border-radius: 7px;
}
.escolha-ganho { background-color: rgba(127, 214, 127, 0.14); color: var(--verde); }
.escolha-perda { background-color: rgba(216, 98, 58, 0.16); color: var(--ferrugem); }
.escolha-neutro { background-color: var(--vazio-alto); color: var(--tinta-fraca); font-weight: 400; }
.escolha-botao { margin-top: auto; width: 100%; }

/* --- controles --- */
.carrossel-pontos { display: flex; justify-content: center; gap: 6px; margin-bottom: 10px; }
.carrossel-ponto {
  width: 7px; height: 7px; min-height: 7px; padding: 0; border: 0; border-radius: 50%;
  background-color: var(--painel-borda); transition: background-color .15s, transform .15s;
}
.carrossel-ponto.ativo { background-color: var(--ouro); transform: scale(1.35); }

.carrossel-barra { display: flex; align-items: center; justify-content: center; gap: 14px; }
.carrossel-seta {
  width: 44px; height: 44px; border-radius: 50%; font-size: 22px; line-height: 1;
  background-color: var(--painel); border: 1px solid var(--painel-borda); color: var(--tinta);
}
/* Seta desabilitada some em vez de ficar clicável e não fazer nada — na
   primeira e na última opção ela não tem pra onde ir. */
.carrossel-seta:disabled { opacity: .25; }
.carrossel-contador { font-size: var(--t-mini); color: var(--tinta-fraca); min-width: 5em; text-align: center; }


/* --- portão da cidade (11/09/2026) --- */
/* O grupo Cidade fica visivelmente diferente quando você está fora dela.
   A barra inteira ganha um fio de ferrugem: é a pista periférica de que
   alguma coisa está trancada, antes mesmo de tocar. */
.barra-abas.fora-da-cidade .aba-item[data-grupo="cidade"] { color: var(--ferrugem); }
.barra-abas.fora-da-cidade { border-top-color: var(--ferrugem); }

/* Quadro de destino trancado: apagado, mas ainda tocável — tocar mostra o
   preço da volta. Desabilitar por completo esconderia a informação que o
   jogador precisa justamente nesse momento. */
.quadro-destino.trancado { opacity: .45; }
.quadro-destino.trancado::after {
  content: "🔒"; position: absolute; top: 5px; right: 6px; font-size: var(--t-mini); opacity: .9;
}


/* =============================================================================
   MENU EM LISTA (11/09/2026)
   Trocou a grade de arte por linhas. Num menu quem decide é LER o nome —
   doze miniaturas iguais só empurram o texto pra baixo e fazem rolar. A arte
   fica onde significa algo: batalha, banner da tela e praça.
   ============================================================================= */
.menu-lista { margin-top: 4px; }
.menu-lista .linha-lista { padding: 13px 2px; }
.menu-lista .linha-lista:last-child { border-bottom: 0; }
/* Trancado fica apagado mas continua tocável: tocar é o que revela o preço
   da volta, e esconder isso agora seria esconder justamente o que falta. */
.menu-lista .linha-lista.trancado .linha-lista-titulo,
.menu-lista .linha-lista.trancado .linha-lista-sub { opacity: .45; }

/* =============================================================================
   TRILHAS (11/09/2026)
   ============================================================================= */
.trilha-saldo {
  text-align: center; padding: 14px; margin-bottom: 14px;
  background-color: var(--painel); border: 1px solid var(--painel-borda); border-radius: 14px;
}
.trilha-saldo-valor {
  font-family: var(--fonte-display); font-size: 34px; font-weight: 700;
  color: var(--ouro); line-height: 1; font-variant-numeric: tabular-nums;
}
.trilha-saldo-rotulo { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 4px; }

.trilha-cartao {
  background-color: var(--painel); border: 1px solid var(--painel-borda);
  border-radius: 14px; padding: 14px; margin-bottom: 10px;
}
.trilha-topo { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.trilha-nome { font-family: var(--fonte-display); font-size: var(--t-corpo); font-weight: 700; color: var(--tinta); }
.trilha-ciclo { font-size: var(--t-mini); color: var(--tinta-fraca); font-variant-numeric: tabular-nums; }

/* Dez marcas, não barra contínua: aqui o que importa é CONTAR passos, e
   passo é coisa discreta. Barra suave esconderia quantos faltam. */
.trilha-passos { display: flex; gap: 4px; margin: 12px 0 10px; }
.trilha-passo {
  flex: 1; height: 7px; border-radius: 3px;
  background-color: var(--vazio-alto); border: 1px solid var(--painel-borda);
}
.trilha-passo.feito { background-color: var(--ouro); border-color: var(--ouro); }
/* A quinta é a barreira do secundário. Marcada sempre, feita ou não, pra o
   jogador ver de longe onde a escolha definitiva vai cair. */
.trilha-passo.barreira { border-color: var(--mana); border-width: 2px; }

.trilha-sec { font-size: var(--t-mini); color: var(--tinta-fraca); margin-bottom: 10px; }
.trilha-acoes, .trilha-opcoes { display: flex; gap: 8px; }
.trilha-acoes button, .trilha-opcoes button { flex: 1; }


/* --- botões de apoio no combate (11/09/2026) --- */
.combate-apoio {
  display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 8px;
}
.combate-apoio button { width: 100%; min-width: 0; min-height: 44px; font-size: var(--t-pequeno); }
.combate-apoio button:only-child { grid-column: 1 / -1; }


/* =============================================================================
   CLÃ (11/09/2026) — o pilar idle
   ============================================================================= */

/* O diário vem antes de tudo na tela. É ele que transforma "24 ticks
   processados" em história; sem ele o jogador volta e vê só números
   diferentes, sem saber o que aconteceu com quem. */
.clan-diario {
  background-color: var(--painel); border: 1px solid var(--ouro);
  border-radius: 14px; padding: 14px; margin-bottom: 16px;
}
.clan-diario-titulo {
  font-family: var(--fonte-display); font-size: var(--t-corpo); font-weight: 700;
  color: var(--ouro); margin-bottom: 8px;
}
.clan-diario-linha { font-size: var(--t-pequeno); line-height: 1.5; color: var(--tinta); }
.clan-diario-nota { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 8px; }
.clan-diario-morte {
  /* (28/09) a faixa colorida na esquerda era o cartão-padrão de qualquer
     painel gerado; o luto agora é o contorno inteiro em ferrugem */
  background-color: rgba(216, 98, 58, 0.12);
  border: 1px solid color-mix(in srgb, var(--ferrugem) 45%, transparent);
  border-radius: 8px; padding: 10px 12px; margin-bottom: 8px;
}

.clan-recursos { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 6px; }
.clan-recurso {
  flex: 1 1 78px; text-align: center; padding: 10px 6px;
  background-color: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
}
.clan-recurso-icone { font-size: 17px; }
.clan-recurso-valor {
  font-family: var(--fonte-numero); font-size: var(--t-sub); font-weight: 800;
  color: var(--tinta); font-variant-numeric: tabular-nums;
}
.clan-recurso-nome { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 2px; }

/* Memorial. Permadeath sem memorial é só um número que sumiu da lista. */
.clan-morto {
  background-color: var(--vazio-alto); border-left: 3px solid var(--painel-borda);
  border-radius: 8px; padding: 10px 12px; margin-bottom: 6px;
}
.clan-morto-nome { font-family: var(--fonte-display); font-size: var(--t-pequeno); color: var(--tinta); }
.clan-morto-causa { font-size: var(--t-mini); color: var(--tinta-fraca); line-height: 1.45; margin-top: 3px; }

/* Previsão antes de mandar. A frase é maior que o número de propósito:
   "morre se esbarrar no chefe" se entende; "3,2%" não diz nada. */
.clan-previsao {
  background-color: rgba(127, 214, 127, 0.12); border: 1px solid var(--verde);
  border-radius: 12px; padding: 12px; margin-bottom: 10px;
}
.clan-previsao-frase {
  font-family: var(--fonte-display); font-size: var(--t-corpo); font-weight: 700;
  color: var(--tinta); line-height: 1.3;
}
.clan-previsao-num { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 5px; }

.clan-encontro {
  display: flex; justify-content: space-between; align-items: center;
  padding: 8px 2px; border-bottom: 1px solid var(--painel-borda); font-size: var(--t-mini);
}
.clan-encontro-nome { color: var(--tinta-fraca); }
.clan-encontro-res { font-family: var(--fonte-numero); font-size: var(--t-mini); font-weight: 700; }
.clan-res-vence { color: var(--verde); }
.clan-res-recua { color: var(--ouro); }
.clan-res-morre { color: var(--ferrugem); }


/* ---------- decisões, conselho e saga (11/09/2026) ---------- */
.decisao-cena {
  background-color: var(--painel); border: 1px solid var(--painel-borda);
  border-radius: 14px; padding: 16px; margin-bottom: 14px;
}
.decisao-texto {
  font-family: var(--fonte-corpo); font-size: var(--t-corpo); line-height: 1.65; color: var(--tinta);
}
.conselho-fala {
  background-color: var(--vazio-alto); border-left: 3px solid var(--painel-borda);
  border-radius: 10px; padding: 11px 13px; margin-bottom: 8px; cursor: pointer;
}
/* Quem vai executar fica marcado em ouro. Sem isso o jogador escolhe o
   conselheiro e não vê que escolheu. */
.conselho-fala.escolhido { border-left-color: var(--ouro); background-color: rgba(232,182,74,0.10); }
.conselho-nome { font-family: var(--fonte-display); font-size: var(--t-pequeno); color: var(--ouro); }
.conselho-texto { font-size: var(--t-pequeno); line-height: 1.5; color: var(--tinta); margin-top: 3px; }
.conselho-pericia { font-size: var(--t-mini); color: var(--mana); margin-top: 5px; }
.conselho-pericias { display: flex; flex-wrap: wrap; gap: 5px; margin: 8px 0; }

.saga-linha {
  display: flex; gap: 10px; padding: 9px 2px;
  border-bottom: 1px solid var(--painel-borda); font-size: var(--t-pequeno); line-height: 1.5;
}
.saga-turno { color: var(--tinta-fraca); flex: 0 0 66px; font-variant-numeric: tabular-nums; }
.saga-texto { color: var(--tinta); }
/* Consequência atrasada em destaque: é o momento em que o jogador descobre
   que o jogo lembrou de uma escolha de oito turnos atrás. */
.saga-consequencia .saga-texto { color: var(--ouro); }
.saga-escolha .saga-texto { color: var(--tinta); }
.saga-evento .saga-texto { color: var(--tinta-fraca); }


/* ---------- humor do clã e fundação (11/09/2026) ---------- */
.clan-humor {
  border-radius: 14px; padding: 12px 14px; margin-bottom: 14px;
  background-color: var(--painel); border: 1px solid var(--painel-borda);
}
.clan-humor-nome { font-family: var(--fonte-display); font-size: var(--t-corpo); font-weight: 700; }
.clan-humor-texto { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 3px; line-height: 1.45; }
.clan-humor-barra {
  height: 5px; border-radius: 3px; margin-top: 9px; overflow: hidden;
  background-color: var(--vazio-alto);
}
.clan-humor-preenche { height: 100%; border-radius: 3px; transition: width .3s ease; }
/* A cor da faixa carrega o aviso antes da leitura. Vermelho no topo da tela
   diz "olhe isto" sem precisar de texto. */
.humor-motim      { border-color: var(--ferrugem); }
.humor-motim      .clan-humor-nome { color: var(--ferrugem); }
.humor-motim      .clan-humor-preenche { background-color: var(--ferrugem); }
.humor-inquieto   .clan-humor-nome { color: #d89a3a; }
.humor-inquieto   .clan-humor-preenche { background-color: #d89a3a; }
.humor-resignado  .clan-humor-nome { color: var(--tinta); }
.humor-resignado  .clan-humor-preenche { background-color: var(--tinta-fraca); }
.humor-confiante  .clan-humor-nome { color: var(--verde); }
.humor-confiante  .clan-humor-preenche { background-color: var(--verde); }
.humor-festa      { border-color: var(--ouro); }
.humor-festa      .clan-humor-nome { color: var(--ouro); }
.humor-festa      .clan-humor-preenche { background-color: var(--ouro); }

.linha-lista.escolhido-fundacao {
  background-color: rgba(232, 182, 74, 0.10);
  border-radius: 8px;
}
.linha-lista.escolhido-fundacao .linha-lista-titulo { color: var(--ouro); }


/* ---------- imagens: rede de segurança (11/09/2026) ----------
   Auditoria antes de mexer: só 1 de 9 <img> tinha loading="lazy", e as artes
   vinham em tamanho cheio (~1280px) pra ser desenhadas a 30–84px.

   Estas três linhas valem pra QUALQUER imagem que entre no jogo depois,
   inclusive as que alguém esquecer de estilizar: nunca estoura a largura,
   nunca deforma, e reserva o espaço antes de carregar pra a tela não pular
   quando a arte chega. */
img {
  max-width: 100%;
  object-fit: cover;
  /* Fundo enquanto carrega: sem ele o retrato é um buraco branco que
     pisca, e no tema escuro isso é bem pior que um quadrado discreto. */
  background-color: var(--vazio-alto);
}


/* =============================================================================
   GRADE DE CAMINHOS (11/09/2026)
   Substituiu a folha que o botão da barra abria. Dois motivos: a folha
   custava um toque a mais e tapava a tela que você acabou de abrir; e em
   grade os destinos ficam visíveis enquanto você lê a página — a navegação
   deixa de ser um lugar aonde se vai e passa a ser parte da tela.
   ============================================================================= */
.caminhos {
  margin-top: 26px; padding-top: 14px;
  border-top: 1px solid var(--painel-borda);
}
.caminhos-titulo {
  font-family: var(--fonte-display); font-size: var(--t-mini); font-weight: 700;
  color: var(--tinta-fraca); letter-spacing: .04em; margin-bottom: 10px;
}
/* Duas colunas: com uma, a grade vira a mesma lista que eu acabei de tirar;
   com três, o subtítulo não cabe e sobra só o nome. */
.caminhos-grade { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
@media (min-width: 420px) { .caminhos-grade { grid-template-columns: repeat(3, minmax(0, 1fr)); } }

.caminho {
  position: relative; display: flex; flex-direction: column; gap: 3px;
  text-align: left; padding: 11px 12px; min-height: 58px;
  background-color: var(--painel); border: 1px solid var(--painel-borda);
  border-radius: 11px; color: var(--tinta);
  transition: border-color .15s ease, transform .1s ease;
}
.caminho:active { transform: scale(0.97); border-color: var(--ouro); }
.caminho-nome { font-family: var(--fonte-display); font-size: var(--t-pequeno); font-weight: 700; line-height: 1.2; }
.caminho-sub {
  font-size: var(--t-mini); color: var(--tinta-fraca); line-height: 1.3;
  overflow: hidden; text-overflow: ellipsis; display: -webkit-box;
  -webkit-line-clamp: 2; -webkit-box-orient: vertical;
}
/* A atual fica marcada e desabilitada. Botão que leva pra onde você já
   está é ruído — e pior, faz duvidar se o toque funcionou. */
.caminho.atual {
  border-color: var(--ouro); background-color: rgba(232, 182, 74, 0.08);
  opacity: 1;
}
.caminho.atual .caminho-nome { color: var(--ouro); }
/* 25/09/2026: era absoluta no canto de cima e, com o mínimo de 12px,
   passava por cima de nome longo ("Mercado de personagens"). Agora entra
   no fluxo, embaixo do subtítulo — nunca disputa espaço com o nome. */
.caminho.atual::after {
  content: "você está aqui"; align-self: flex-start; margin-top: 2px;
  font-size: var(--t-mini); color: var(--ouro); opacity: .85;
}
.caminho.trancado { opacity: .5; }
.caminho-cadeado { position: absolute; right: 10px; top: 10px; font-size: var(--t-mini); }

/* =============================================================================
   🎠 CARROSSEL DE CRIATURAS (18/09/2026) — espíritos e montarias
   =============================================================================
   Antes eram pilhas verticais de cartões finos com miniatura de lado. Com 50
   espíritos possíveis isso vira rolagem infinita, e o cartão não dizia o que a
   criatura FAZ — escolher entre duas era escolher pelo nome. */
.peca-carrossel {
  display: flex; gap: 12px; overflow-x: auto; margin-bottom: 16px;
  padding: 4px 2px 10px;
  scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.peca-carrossel::-webkit-scrollbar { display: none; }

.peca-card {
  flex: 0 0 auto; width: 78%; max-width: 300px; scroll-snap-align: center;
  background: linear-gradient(180deg, var(--painel), var(--vazio-alto));
  border: 1px solid var(--painel-borda); border-radius: 16px;
  overflow: hidden; display: flex; flex-direction: column;
}
/* A borda colorida é a raridade. Fica no card inteiro e não num selinho:
   a 78% de largura, a cor é a primeira coisa que o olho pega ao deslizar. */
.peca-card.rar-incomum   { border-color: var(--rar-incomum); }
.peca-card.rar-raro      { border-color: var(--rar-raro); }
.peca-card.rar-epico     { border-color: var(--rar-epico); }
.peca-card.rar-lendario  { border-color: var(--rar-lendario); }
.peca-card.destacado { box-shadow: 0 0 16px -6px var(--ouro); }

.peca-arte {
  position: relative; width: 100%; aspect-ratio: 1;
  background-color: var(--vazio); background-size: cover; background-position: center;
  display: flex; align-items: center; justify-content: center; font-size: 68px;
}
.peca-selo {
  position: absolute; top: 8px; right: 8px;
  background: var(--ouro); color: var(--vazio);
  font-size: var(--t-mini); font-weight: 800; letter-spacing: 0.04em;
  padding: 3px 8px; border-radius: 20px; text-transform: uppercase;
}

.peca-corpo { padding: 11px 12px 13px; display: flex; flex-direction: column; gap: 8px; }
.peca-nome {
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-corpo);
  line-height: 1.2; color: var(--tinta);
}
.peca-meta { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; font-size: var(--t-mini); }
.peca-raridade { font-weight: 800; letter-spacing: 0.06em; }
.rar-texto-comum { color: var(--rar-comum); }
.rar-texto-incomum { color: var(--rar-incomum); }
.rar-texto-raro { color: var(--rar-raro); }
.rar-texto-epico { color: var(--rar-epico); }
.rar-texto-lendario { color: var(--rar-lendario); }
.peca-arquetipo, .peca-qtd { color: var(--tinta-fraca); }
.peca-evo { display: flex; align-items: center; gap: 8px; font-size: var(--t-mini); }
.peca-nivel { color: var(--tinta-fraca); font-variant-numeric: tabular-nums; }

/* O que a criatura faz, em pílulas. É a informação que decide a escolha, e
   era exatamente a que não aparecia em lugar nenhum. */
.peca-efeitos { display: flex; flex-wrap: wrap; gap: 6px; }
.peca-pill {
  display: flex; align-items: center; gap: 5px;
  background: var(--vazio); border: 1px solid var(--painel-borda);
  border-radius: 8px; padding: 4px 8px; font-size: var(--t-mini);
}
.peca-pill-nome { color: var(--tinta-fraca); }
.peca-pill-valor { font-weight: 700; color: var(--verde); font-variant-numeric: tabular-nums; }
.peca-pill.destaque {
  border-color: color-mix(in srgb, var(--mana) 45%, var(--painel-borda));
  color: var(--mana);
}

.peca-acoes { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 2px; }
.peca-acoes button { width: 100%; min-width: 0; min-height: 44px; font-size: var(--t-pequeno); }
.peca-acoes button:only-child { grid-column: 1 / -1; }

/* Aviso de trava: o motivo junto do cadeado. Botão apagado sem explicação é
   pior que botão que dá erro ao tocar. */
.aviso-trava {
  display: flex; align-items: center; gap: 10px;
  background: var(--vazio-alto);
  border: 1px solid color-mix(in srgb, var(--ouro) 40%, var(--painel-borda));
  border-radius: 12px; padding: 10px 12px; margin-bottom: 10px;
}
.aviso-trava-icone { font-size: 20px; flex-shrink: 0; }
.aviso-trava-texto { font-size: var(--t-pequeno); line-height: 1.35; color: var(--tinta); }

/* Contador da forja: com o carrossel, o "2/5" no fim do título some do olho
   de quem está deslizando os cartões. */
.forja-contador {
  display: flex; align-items: baseline; gap: 7px;
  background: var(--vazio-alto); border: 1px solid var(--painel-borda);
  border-radius: 10px; padding: 8px 12px; margin-bottom: 10px;
}
.forja-contador.pronto { border-color: var(--rar-incomum); }
.forja-contador-num {
  font-family: var(--fonte-numero); font-size: var(--t-titulo); font-weight: 800;
  color: var(--ouro); font-variant-numeric: tabular-nums; line-height: 1;
}
.forja-contador.pronto .forja-contador-num { color: var(--rar-incomum); }
.forja-contador-de { font-size: var(--t-pequeno); color: var(--tinta-fraca); }
.forja-contador-ok { margin-left: auto; color: var(--rar-incomum); font-size: var(--t-sub); }

/* ---------- 👣 encontro na Torre ---------- */
.encontro-texto { font-size: var(--t-corpo); line-height: 1.55; color: var(--tinta); }
.encontro-opcoes { display: flex; flex-direction: column; gap: 9px; }
.encontro-opcoes button {
  text-align: left; padding: 12px 14px; min-height: 44px;
  display: flex; flex-direction: column; gap: 3px; align-items: flex-start;
}
.encontro-opcao-rotulo { font-size: var(--t-corpo); font-weight: 600; }
/* O teste aparece ANTES de escolher: agência vem antes, e opção com rolagem
   escondida é armadilha. */
.encontro-opcao-teste {
  font-size: var(--t-mini); color: var(--tinta-fraca); font-variant-numeric: tabular-nums;
}

/* ---------- 📜 o que a sua escolha causou ----------
   Painel e não toast: toast some, e a conta do dado é justamente o que a
   pessoa quer reler quando falha. */
.consequencia {
  background: linear-gradient(180deg, var(--painel), var(--vazio-alto));
  border: 1px solid var(--painel-borda); border-radius: 14px;
  padding: 14px 15px 15px;
}
.consequencia-escolha {
  font-size: var(--t-pequeno); color: var(--tinta-fraca); margin-bottom: 10px;
  line-height: 1.4;
}
.consequencia-teste {
  border-radius: 10px; padding: 10px 12px; margin-bottom: 11px;
  border: 1px solid var(--painel-borda); background: var(--vazio);
}
.consequencia-teste.ok { border-color: var(--rar-incomum); }
.consequencia-teste.ruim { border-color: var(--ferrugem); }
.consequencia-teste-conta {
  font-family: var(--fonte-numero); font-size: var(--t-pequeno);
  font-variant-numeric: tabular-nums; color: var(--tinta);
}
.consequencia-teste-veredito {
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-corpo);
  margin-top: 3px;
}
.consequencia-teste.ok .consequencia-teste-veredito { color: var(--rar-incomum); }
.consequencia-teste.ruim .consequencia-teste-veredito { color: var(--ferrugem); }

.consequencia-efeitos { display: flex; flex-wrap: wrap; gap: 6px; }
.consequencia-pill {
  display: flex; align-items: center; gap: 6px;
  border: 1px solid var(--painel-borda); border-radius: 8px;
  padding: 5px 9px; font-size: var(--t-mini); background: var(--vazio);
}
.consequencia-pill-nome { color: var(--tinta-fraca); }
.consequencia-pill-valor { font-weight: 700; font-variant-numeric: tabular-nums; }
.consequencia-pill.ganho { border-color: color-mix(in srgb, var(--rar-incomum) 45%, var(--painel-borda)); }
.consequencia-pill.ganho .consequencia-pill-valor { color: var(--rar-incomum); }
.consequencia-pill.perda { border-color: color-mix(in srgb, var(--ferrugem) 45%, var(--painel-borda)); }
.consequencia-pill.perda .consequencia-pill-valor { color: var(--ferrugem); }

.consequencia-nada { font-size: var(--t-pequeno); color: var(--tinta-fraca); font-style: italic; }
.consequencia-agenda {
  margin-top: 10px; font-size: var(--t-mini); color: var(--ouro);
  border-top: 1px solid var(--painel-borda); padding-top: 9px;
}

/* =============================================================================
   🏰 SITUAÇÃO DO CLÃ (18/09/2026)
   =============================================================================
   A tela mostrava recursos e uma lista de membros, e mais nada: nem quantos
   aldeões existiam, nem quantos trabalhavam, nem quanto a comida ainda
   durava. */
.sit-painel {
  background: linear-gradient(180deg, var(--painel), var(--vazio-alto));
  border: 1px solid var(--painel-borda); border-radius: 14px;
  padding: 12px; margin-bottom: 10px;
}
.sit-grade {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px;
}
.sit-ficha {
  background: var(--vazio); border: 1px solid var(--painel-borda);
  border-radius: 10px; padding: 8px 6px; text-align: center;
}
.sit-ficha.ruim { border-color: color-mix(in srgb, var(--ferrugem) 55%, var(--painel-borda)); }
.sit-ficha.morto { border-color: color-mix(in srgb, var(--rar-comum) 55%, var(--painel-borda)); }
.sit-ficha-icone { font-size: 15px; line-height: 1.1; }
.sit-ficha-valor {
  font-family: var(--fonte-numero); font-size: var(--t-titulo); font-weight: 800;
  color: var(--tinta); font-variant-numeric: tabular-nums; line-height: 1.15;
}
.sit-ficha.ruim .sit-ficha-valor { color: var(--ferrugem); }
.sit-ficha-rotulo { font-size: var(--t-mini); color: var(--tinta-fraca); }

/* Autonomia: quantas sessões a comida aguenta. É o número que decide entre
   postar mais gente e mandar alguém colher. */
.sit-autonomia {
  display: flex; align-items: baseline; gap: 8px; margin-top: 9px;
  background: var(--vazio);
  /* (28/09) o status (ok / atenção) vai no contorno inteiro, não numa faixa */
  border: 1px solid color-mix(in srgb, var(--rar-incomum) 45%, var(--painel-borda));
  border-radius: 10px; padding: 9px 11px;
}
.sit-autonomia.atencao { border-color: color-mix(in srgb, var(--ouro) 55%, var(--painel-borda)); }
.sit-autonomia.ruim { border-left-color: var(--ferrugem); }
.sit-autonomia-num {
  font-family: var(--fonte-numero); font-size: var(--t-titulo); font-weight: 800;
  color: var(--rar-incomum); font-variant-numeric: tabular-nums;
}
.sit-autonomia.atencao .sit-autonomia-num { color: var(--ouro); }
.sit-autonomia.ruim .sit-autonomia-num { color: var(--ferrugem); }
.sit-autonomia-txt { font-size: var(--t-mini); color: var(--tinta-fraca); line-height: 1.35; }

/* Alertas em ordem de urgência. Cada um tem ação óbvia — alerta que o
   jogador não consegue agir é ruído. */
.sit-alertas { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; }
.sit-alerta {
  display: flex; gap: 8px; align-items: flex-start;
  border-radius: 9px; padding: 8px 10px; font-size: var(--t-pequeno); line-height: 1.4;
  background: var(--vazio-alto); border: 1px solid var(--painel-borda);
}
.sit-alerta.grave { border-color: var(--ferrugem); color: var(--tinta); }
.sit-alerta.atencao { border-color: color-mix(in srgb, var(--ouro) 55%, var(--painel-borda)); }
.sit-alerta.info { color: var(--tinta-fraca); }
.sit-alerta-marca { flex-shrink: 0; }

/* Jornadas anteriores: uma só seria "o que aconteceu"; várias são "como o
   clã chegou até aqui". */
.clan-jornada {
  display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
  padding: 8px 4px; border-top: 1px solid var(--painel-borda); font-size: var(--t-mini);
}
.clan-jornada-quando { color: var(--tinta-fraca); min-width: 74px; }
.clan-jornada-ganhos { color: var(--tinta); font-variant-numeric: tabular-nums; }
.clan-jornada-morte { color: var(--ferrugem); }

/* ---------- 🎁 o que caiu na exploração ----------
   Só o drop. A narração são 4 frases repetindo a cada exploração, e em 7
   seguidas ela vira ruído em cima da única coisa que o jogador quer saber. */
.drop-caixa {
  display: flex; align-items: center; gap: 12px;
  background: var(--vazio-alto); border: 1px solid var(--painel-borda);
  border-radius: 12px; padding: 12px; margin: 4px 0 12px;
}
.drop-caixa.rar-incomum { border-color: var(--rar-incomum); }
.drop-caixa.rar-raro { border-color: var(--rar-raro); }
.drop-caixa.rar-epico { border-color: var(--rar-epico); }
.drop-caixa.rar-lendario { border-color: var(--rar-lendario); }
.drop-arte {
  width: 60px; height: 60px; border-radius: 10px; flex-shrink: 0;
  background-color: var(--vazio); background-size: cover; background-position: center;
  display: flex; align-items: center; justify-content: center; font-size: 30px;
}
.drop-nome { font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-corpo); }
.drop-qtd {
  font-family: var(--fonte-numero); font-size: var(--t-sub); font-weight: 800;
  color: var(--rar-incomum); font-variant-numeric: tabular-nums;
}

/* =============================================================================
   🏪 LOJA (18/09/2026) — repaginada
   =============================================================================
   Antes era uma pilha onde "Poção 25g" e "VIP 500⭐" eram cartões do mesmo
   tamanho, com dois botões espremidos ao lado do nome — na largura do
   celular o nome do item sobrava com três letras e reticências. A premium
   saiu pra tela própria; aqui a linha ABRE no lugar e as ações ficam
   debaixo do nome, com a largura inteira. */
.moeda-linha {
  display: grid; grid-auto-flow: column; grid-auto-columns: 1fr;
  gap: 8px; margin-bottom: 14px;
}
.moeda-ficha {
  display: flex; flex-direction: column; align-items: center; gap: 1px;
  background: var(--painel); border: 1px solid var(--painel-borda);
  border-radius: 11px; padding: 9px 6px;
}
.moeda-ficha.cheio { border-color: var(--ouro); }
.moeda-ficha-icone { font-size: 15px; line-height: 1.1; }
.moeda-ficha-valor {
  font-family: var(--fonte-numero); font-size: var(--t-sub); font-weight: 800;
  color: var(--tinta); font-variant-numeric: tabular-nums;
}
.moeda-ficha-rotulo { font-size: var(--t-mini); color: var(--tinta-fraca); }

.venda-linha {
  background: var(--painel); border: 1px solid var(--painel-borda);
  border-left: 3px solid var(--painel-borda);
  border-radius: 11px; margin-bottom: 7px; overflow: hidden;
}
.venda-linha.rar-incomum { border-left-color: var(--rar-incomum); }
.venda-linha.rar-raro { border-left-color: var(--rar-raro); }
.venda-linha.rar-epico { border-left-color: var(--rar-epico); }
.venda-linha.rar-lendario { border-left-color: var(--rar-lendario); }
.venda-linha.aberta { border-color: var(--painel-borda-forte); }

.venda-topo {
  display: flex; align-items: center; gap: 10px; width: 100%;
  background: none; border: 0; color: var(--tinta);
  padding: 11px 12px; min-height: 44px; text-align: left;
  font-family: inherit; cursor: pointer;
}
.venda-topo:focus-visible { outline: 2px solid var(--mana); outline-offset: -2px; }
.venda-txt { flex: 1; min-width: 0; }
.venda-nome {
  font-size: var(--t-corpo); font-weight: 700; line-height: 1.25;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.venda-sub { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 1px; }
.venda-seta { color: var(--tinta-fraca); font-size: 15px; flex-shrink: 0; }
/* 🐛 20/09/2026 — o botão de comprar poção ocupava a linha inteira e
   empurrava o nome e o preço pra fora da tela: `.botao-holofote` declara
   `width: 100%`, e dentro de uma linha flex isso vira "o máximo que couber".
   `flex-shrink: 0` só impedia que ele encolhesse — piorava. Largura
   automática devolve a linha ao texto, que é quem diz o que se está
   fazendo. */
/* 🐛 20/09/2026: o botão de comprar poção saía do tamanho de um botão
   de holofote (largura cheia, 16px, padding alto) e empurrava o texto
   "25g · você tem X de 10" pra fora da linha — dava pra ver o botão e
   não dava pra ler o que se estava comprando. `.botao-holofote` vem
   depois no arquivo, então empatava na especificidade e ganhava: por
   isso a regra agora é `.venda-topo .venda-botao-topo`, que ganha por
   mérito e não por ordem. */
.venda-topo .venda-botao-topo {
  flex: 0 0 auto; width: auto; min-width: 0; max-width: 42%;
  min-height: 40px; font-size: var(--t-pequeno); padding: 10px 14px;
  white-space: nowrap; letter-spacing: 0;
}

/* As ações em duas colunas e com a largura inteira: é aqui que o "vender 1
   / vender tudo" cabe sem espremer o nome do item. */
.venda-acoes {
  display: grid; grid-template-columns: 1fr 1fr; gap: 8px;
  padding: 0 12px 12px;
}
.venda-acoes button { width: 100%; min-width: 0; min-height: 44px; font-size: var(--t-pequeno); }
.venda-acoes button:only-child { grid-column: 1 / -1; }

/* ---------- 🛠️ item recém-forjado ----------
   ⚠️ A arte vai no .forjado-arte, NUNCA na .forjado-caixa: a caixa leva a
   classe de raridade, cujos cantos ornamentados são background-image — pôr
   outra imagem de fundo ali apagaria o efeito (armadilha nº 2). */
.forjado-caixa {
  background-color: var(--vazio-alto);
  border: 1.5px solid var(--painel-borda); border-radius: 16px;
  padding: 16px 14px; text-align: center; margin-bottom: 14px;
}
.forjado-arte {
  width: 132px; height: 132px; margin: 0 auto 12px; border-radius: 14px;
  background-color: var(--vazio); background-size: cover; background-position: center;
  display: flex; align-items: center; justify-content: center; font-size: 58px;
}
.forjado-nome {
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-sub);
  line-height: 1.25; color: var(--tinta);
}
.forjado-raridade {
  font-size: var(--t-mini); font-weight: 800; letter-spacing: 0.1em; margin-top: 3px;
}
.forjado-stats {
  display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 13px;
}
.forjado-stat {
  display: flex; justify-content: space-between; gap: 8px;
  background: var(--vazio); border: 1px solid var(--painel-borda);
  border-radius: 8px; padding: 6px 9px; font-size: var(--t-mini);
}
.forjado-stat-nome { color: var(--tinta-fraca); }
.forjado-stat-valor {
  font-weight: 800; color: var(--rar-incomum); font-variant-numeric: tabular-nums;
}

/* ---------- 💎 cores da forja, em lista compacta ----------
   O carrossel da Forja é dos ITENS; core é ingrediente e cabe numa linha.
   Dois carrosséis empilhados fariam deslizar duas vezes por uma decisão só. */
.core-lista { display: flex; flex-direction: column; gap: 6px; margin-bottom: 14px; }
.core-linha {
  display: flex; align-items: center; gap: 10px; width: 100%;
  background: var(--painel); border: 1px solid var(--painel-borda);
  border-left: 3px solid var(--painel-borda);
  border-radius: 10px; padding: 9px 11px; min-height: 44px;
  color: var(--tinta); font-family: inherit; text-align: left; cursor: pointer;
}
.core-linha.marcado { border-color: var(--ouro); background: var(--vazio-alto); }
.core-linha:focus-visible { outline: 2px solid var(--mana); outline-offset: -2px; }
.core-txt { flex: 1; min-width: 0; }
.core-nome {
  font-size: var(--t-pequeno); font-weight: 700; line-height: 1.25;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.core-bonus { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 1px; }
.core-marca {
  flex-shrink: 0; font-family: var(--fonte-numero); font-weight: 800;
  font-size: var(--t-corpo); color: var(--ouro); min-width: 22px; text-align: right;
}

/* ---------- ✨ fusão mítica ----------
   A conta aberta ANTES de confirmar: quantas peças, que chance de tipo, e a
   multiplicação das duas rolagens. Esconder que são duas é o que faz o
   jogador achar que foi roubado quando sai outro tipo. */
.fusao-painel {
  background: var(--vazio-alto); border: 1px solid var(--painel-borda);
  border-left: 3px solid var(--painel-borda);
  border-radius: 12px; padding: 12px 13px; margin-bottom: 12px;
}
.fusao-painel.pronto { border-left-color: var(--rar-lendario); }
.fusao-contador {
  font-family: var(--fonte-numero); font-size: var(--t-titulo); font-weight: 800;
  color: var(--ouro); font-variant-numeric: tabular-nums;
}
.fusao-previsao { font-size: var(--t-pequeno); color: var(--tinta); margin-top: 3px; line-height: 1.4; }
.fusao-nota { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 5px; line-height: 1.45; }

/* ---------- 🔍 filtros do mercado ---------- */
.mercado-filtro { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.mercado-filtro-rotulo {
  flex-shrink: 0; font-size: var(--t-mini); text-transform: uppercase;
  letter-spacing: 0.06em; color: var(--tinta-fraca); width: 58px;
}
.mercado-filtro .filtro-carrossel { margin: 0; flex: 1; min-width: 0; }

/* ---------- 🃏 carta que vira ----------
   O detalhe (descrição da skill, o que o pet dispara, o gatilho da
   especialidade) é muito texto pra frente do cartão: enfiado ali, ele vira
   parágrafo e o carrossel perde o que tem de bom, que é passar o olho.
   A frente continua completa por si — virar acrescenta, não desbloqueia. */
.peca-palco {
  display: block; width: 100%; padding: 0; border: 0; background: none;
  perspective: 1000px; cursor: pointer; font-family: inherit;
  /* 🐛 20/09/2026 — TINTA PRETA SOBRE FUNDO ESCURO.
     `.peca-palco` é um <button>, e botão NÃO herda cor: sem `color`, o
     padrão do navegador é `buttontext`, que é PRETO. Todo texto do cartão
     que não declarava cor própria (o rótulo das linhas do verso, a
     raridade quando a classe não casava) saía preto sobre fundo quase
     preto — ilegível nas skills, nos espíritos e nas especialidades, que
     são justamente as três telas que usam a carta que vira.
     `font-family: inherit` já estava aqui pelo mesmo motivo; faltava a
     cor. */
  color: var(--tinta);
}
.peca-palco:focus-visible { outline: 2px solid var(--mana); outline-offset: -3px; }
.peca-giro {
  position: relative; width: 100%; aspect-ratio: 1;
  transform-style: preserve-3d; transition: transform 0.45s ease;
}
.peca-palco.virada .peca-giro { transform: rotateY(180deg); }
.peca-face {
  position: absolute; inset: 0; backface-visibility: hidden;
  -webkit-backface-visibility: hidden; border-radius: 0;
}
.peca-frente { display: flex; flex-direction: column; }
.peca-frente .peca-arte { flex: 1; aspect-ratio: auto; }
.peca-virar {
  position: absolute; bottom: 6px; left: 0; right: 0; text-align: center;
  font-size: var(--t-mini); letter-spacing: 0.07em; text-transform: uppercase;
  color: var(--tinta-fraca); text-shadow: 0 1px 3px #000;
}
.peca-verso {
  transform: rotateY(180deg);
  background: var(--vazio-alto);
  padding: 12px; overflow-y: auto;
  display: flex; flex-direction: column; gap: 7px;
}
.peca-verso-titulo {
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-pequeno);
  color: var(--ouro);
}
.peca-verso-texto { font-size: var(--t-mini); line-height: 1.45; color: var(--tinta); }
.peca-verso-linha {
  color: var(--tinta-fraca);
  display: flex; justify-content: space-between; gap: 8px; font-size: var(--t-mini);
  border-top: 1px solid var(--painel-borda); padding-top: 5px;
}
.peca-verso-linha span:last-child {
  font-weight: 700; color: var(--mana); font-variant-numeric: tabular-nums;
}
/* Sem 3D (navegador antigo ou "reduzir movimento"), o verso simplesmente
   aparece no lugar da frente. Continua funcionando, só não gira. */
@media (prefers-reduced-motion: reduce) {
  .peca-giro { transition: none; }
}


/* ---------- 💎 engaste: a peça em cima, os encaixes embaixo ----------
   A ordem importa: é a única tela do jogo onde escolher errado destrói a
   gema que estava no encaixe. Ver a peça antes de tocar no pino é o que
   evita o erro caro. */
.engaste-peca { display: flex; flex-direction: column; gap: 10px; }
.engaste-cabeca { display: flex; gap: 12px; align-items: center; }
.engaste-arte {
  flex: 0 0 auto; width: 64px; height: 64px; border-radius: 12px;
  background-color: var(--vazio); background-size: cover; background-position: center;
  border: 1px solid var(--painel-borda);
}
.engaste-cabeca-txt { min-width: 0; flex: 1; }


/* ---------- 🐾 Arena dos Pets: as 4 opções e o estado de cada pet ----------
   A ação vem antes do alvo porque é ela que decide se existe alvo: cura,
   escudo e buff não miram ninguém. Por isso o botão precisa dizer o que
   faz e quando volta — um "🔥 Skill" sem mais nada obrigava a decorar. */
.acoes-pet { grid-template-columns: 1fr 1fr; gap: 8px; }
.acao-pet {
  display: flex; flex-direction: column; align-items: flex-start; gap: 2px;
  text-align: left; min-height: 62px; padding: 9px 11px; line-height: 1.25;
}
.acao-pet-nome { font-size: var(--t-pequeno); font-weight: 700; }
.acao-pet-sub {
  font-size: var(--t-mini); opacity: 0.75; white-space: normal;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden;
}
.acao-pet-cd { font-size: var(--t-mini); font-family: var(--fonte-numero); opacity: 0.7; }
.acao-pet:disabled { opacity: 0.4; }

.pet-luta-topo { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.pet-luta-arte {
  flex: 0 0 auto; width: 36px; height: 36px; border-radius: 9px;
  background-color: var(--vazio); background-size: cover; background-position: center;
  display: flex; align-items: center; justify-content: center; font-size: 20px;
}
.pet-luta-arte.morto { filter: grayscale(1); opacity: 0.45; }
.pet-luta-marcas { display: flex; flex-wrap: wrap; gap: 4px; font-size: var(--t-mini); }
.pet-luta-marcas span {
  background: var(--vazio-alto); border: 1px solid var(--painel-borda);
  border-radius: 999px; padding: 1px 6px; color: var(--tinta-fraca);
}
.marca-escudo { color: var(--mana) !important; }
.marca-buff { color: var(--ouro) !important; }
.marca-stun { color: var(--rar-epico) !important; }




/* ⚔️ atributos de combate no cartão do espírito. Duas colunas: em uma só,
   seis linhas empurram os botões do cartão pra fora da tela do celular. */
.peca-stats {
  display: grid; grid-template-columns: 1fr 1fr; gap: 4px 10px; margin-top: 2px;
}
.peca-stat { display: flex; align-items: center; gap: 5px; font-size: var(--t-mini); min-width: 0; }
.peca-stat-icone { flex: 0 0 auto; }
.peca-stat-rotulo {
  color: var(--tinta-fraca); flex: 1; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.peca-stat-valor {
  font-family: var(--fonte-numero); font-weight: 700; color: var(--tinta);
  font-variant-numeric: tabular-nums;
}


/* 🐾 banco da Arena dos Pets: quem ainda não entrou, ou já caiu. Pequeno de
   propósito — quem está em campo já aparece inteiro no painel de cima. */
.banco-pets { gap: 6px; }
.banco-pet {
  flex: 0 0 auto; width: 46px; opacity: 0.85;
  background: var(--vazio-alto); border: 1px solid var(--painel-borda);
  border-radius: 10px; padding: 4px;
}
.banco-pet.em-campo { border-color: var(--ouro); opacity: 1; }
.banco-pet.morto { filter: grayscale(1); opacity: 0.35; }
.banco-pet-arte {
  width: 100%; aspect-ratio: 1; border-radius: 7px; margin-bottom: 3px;
  background-color: var(--vazio); background-size: cover; background-position: center;
  display: flex; align-items: center; justify-content: center; font-size: 18px;
}


/* ---------- 🏘️ a aldeia viva ---------- */
.aldeia-box {
  background: var(--painel); border: 1px solid var(--painel-borda);
  border-radius: 14px; padding: 12px; margin: 12px 0;
}
.aldeia-topo { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.aldeia-estagio { font-family: var(--fonte-display); font-weight: 800; font-size: var(--t-corpo); }
.aldeia-proximo { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 4px; }
.habitante {
  border-top: 1px solid var(--painel-borda); padding: 9px 0; display: flex;
  flex-direction: column; gap: 4px;
}
.habitante.descansando { opacity: 0.7; }
.habitante.com-aura .habitante-nome { color: var(--ouro); }
.habitante-cab { display: flex; justify-content: space-between; align-items: baseline; }
.habitante-nome { font-weight: 700; font-size: var(--t-corpo); }
.habitante-pot { color: var(--ouro); font-size: var(--t-mini); letter-spacing: 1px; }
.habitante-sub { font-size: var(--t-mini); color: var(--tinta-fraca); }
.habitante-acoes { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 2px; }
.habitante-acoes button { min-height: 40px; font-size: var(--t-pequeno); padding: 8px; margin: 0; }
.memoria {
  font-size: var(--t-pequeno); padding: 7px 0; border-top: 1px dashed var(--painel-borda);
  color: var(--tinta);
}
.memoria-texto { line-height: 1.35; }
.clan-diario-marca { font-size: var(--t-pequeno); padding: 4px 0; color: var(--tinta); }
.habitante-cargo { font-size: var(--t-mini); color: var(--ouro); font-weight: 700; }

/* 🗺️ ponto do mapa */
.ponto-mapa {
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
  padding: 10px 12px; margin-bottom: 8px; display: flex; flex-direction: column; gap: 3px;
}
.ponto-mapa.meu { border-color: var(--ouro); }

/* ⛏️ material exigido pela forja */
.forja-material {
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
  padding: 10px 12px; margin: 4px 0 12px;
}
.forja-material.faltando { border-color: var(--vermelho); }
.forja-material-titulo { font-weight: 700; font-size: var(--t-pequeno); margin-bottom: 3px; }

/* 📍 de onde veio a situação do clã */
.decisao-origem { font-size: var(--t-mini); color: var(--tinta-fraca); margin: 0 0 8px; }

/* --- Personagens: linha com o botão de vender (25/09/2026) --- */
.linha-personagem { display: flex; align-items: center; gap: 10px; border-bottom: 1px solid var(--painel-borda); }
.linha-personagem .linha-lista { flex: 1; min-width: 0; border-bottom: 0; }
.linha-personagem-vender { flex: 0 0 auto; width: auto !important; margin: 0 !important; padding: 8px 14px; font-size: var(--t-pequeno); }


/* =============================================================================
   MATERIAIS (25/09/2026) — a lição do Mestre do Futebol, com o assunto daqui
   -----------------------------------------------------------------------------
   No Mestre o material vem do objeto que o jogo celebra (troféu: metal
   escovado, esmalte, pedra da base) e é UM material por função — metal em
   tudo seria trocar "tudo chapado" por "tudo metal", o mesmo erro.
   Aqui o objeto é a Torre:
     · a parede da Torre      → o fundo: fiadas de alvenaria quase invisíveis
     · pedra lavrada          → a moldura (topo, barra de abas) e a placa do
                                 andar, com bisel: luz em cima, sombra embaixo
     · metal de troféu        → só o pódio do ranking
     · cartões de lista       → continuam FOSCOS, de propósito: é o contraste
                                 com eles que faz a pedra parecer pedra
   O grão é um feTurbulence em SVG, desenhado uma vez e ladrilhado — não
   custa nada por quadro. Com aspas no url(): sem elas a regra vira lixo.
   ============================================================================= */
:root {
  --grao: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .09 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E");
  --alvenaria: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='64'%3E%3Cg fill='none'%3E%3Cpath d='M0 31.5H120M0 63.5H120M.5 0V32M60.5 32V64' stroke='%23fff' stroke-opacity='.035'/%3E%3Cpath d='M0 32.5H120M0 .5H120M1.5 0V32M61.5 32V64' stroke='%23000' stroke-opacity='.28'/%3E%3C/g%3E%3C/svg%3E");
  --pedra-alta: color-mix(in srgb, var(--painel) 82%, #6d6480);
  --pedra: var(--painel);
  --pedra-baixa: color-mix(in srgb, var(--vazio-alto) 80%, #000);
  --bisel-luz: rgba(255, 255, 255, .09);
  --bisel-sombra: rgba(0, 0, 0, .6);
  /* 🪨 (28/09) MOLDURA DE PEDRA LAVRADA, em 9-slice: aro de pedra com bisel
     (luz em cima, sombra embaixo), o mesmo grão, filete de ouro embutido e
     um losango de ouro em cada canto. 96×96 com 24 de canto protegido:
     `border-image: var(--moldura) 24 stretch` estica só as bordas e o
     meio — os cantos ficam inteiros em qualquer tamanho de cartão.
     As cores são as dos tokens (#272230 = --pedra-alta, #e8b64a = --ouro),
     escritas por extenso porque var() não entra dentro de um SVG em url(). */
  --moldura: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2296%22 height=%2296%22 viewBox=%220 0 96 96%22%3E %3Cdefs%3E %3ClinearGradient id=%22pedra%22 x1=%220%22 y1=%220%22 x2=%220%22 y2=%221%22%3E %3Cstop offset=%220%22 stop-color=%22%232e2838%22/%3E%3Cstop offset=%22.55%22 stop-color=%22%231c1724%22/%3E%3Cstop offset=%221%22 stop-color=%22%230e0b13%22/%3E %3C/linearGradient%3E %3Cfilter id=%22grao%22 x=%220%22 y=%220%22 width=%22100%25%22 height=%22100%25%22%3E %3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%22.9%22 numOctaves=%222%22 stitchTiles=%22stitch%22 result=%22r%22/%3E %3CfeColorMatrix in=%22r%22 values=%220 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .12 0%22 result=%22g%22/%3E %3CfeComposite in=%22g%22 in2=%22SourceGraphic%22 operator=%22in%22/%3E %3C/filter%3E %3C/defs%3E %3C%21-- banda de pedra (aro de 14px) --%3E %3Cpath fill=%22url(%23pedra)%22 fill-rule=%22evenodd%22 d=%22M2 2h92v92H2z M16 16v64h64V16z%22/%3E %3Cpath fill=%22%23fff%22 filter=%22url(%23grao)%22 fill-rule=%22evenodd%22 d=%22M2 2h92v92H2z M16 16v64h64V16z%22/%3E %3C%21-- bisel: luz no alto/esquerda da borda de fora, sombra embaixo/direita --%3E %3Cpath d=%22M2.5 93.5V2.5h91%22 fill=%22none%22 stroke=%22%23ffffff%22 stroke-opacity=%22.14%22 stroke-width=%221%22/%3E %3Cpath d=%22M93.5 2.5v91h-91%22 fill=%22none%22 stroke=%22%23000%22 stroke-opacity=%22.7%22 stroke-width=%221%22/%3E %3C%21-- rebaixo interno (a pedra desce at%C3%A9 o painel) --%3E %3Cpath d=%22M15.5 80.5V15.5h65%22 fill=%22none%22 stroke=%22%23000%22 stroke-opacity=%22.75%22 stroke-width=%221%22/%3E %3Cpath d=%22M80.5 15.5v65h-65%22 fill=%22none%22 stroke=%22%23ffffff%22 stroke-opacity=%22.08%22 stroke-width=%221%22/%3E %3C%21-- filete de ouro embutido --%3E %3Crect x=%228.5%22 y=%228.5%22 width=%2279%22 height=%2279%22 fill=%22none%22 stroke=%22%23e8b64a%22 stroke-opacity=%22.75%22 stroke-width=%221%22/%3E %3C%21-- losangos de ouro nos cantos (o que o 9-slice protege) --%3E %3Cg fill=%22%23e8b64a%22 stroke=%22%236b4e12%22 stroke-width=%22.6%22%3E %3Cpath d=%22M9 4.6 13.4 9 9 13.4 4.6 9z%22/%3E%3Cpath d=%22M87 4.6 91.4 9 87 13.4 82.6 9z%22/%3E %3Cpath d=%22M9 82.6 13.4 87 9 91.4 4.6 87z%22/%3E%3Cpath d=%22M87 82.6 91.4 87 87 91.4 82.6 87z%22/%3E %3C/g%3E %3Cg fill=%22%23fbe29a%22 opacity=%22.85%22%3E %3Cpath d=%22M9 6.2 10.4 7.6 9 9 7.6 7.6z%22/%3E%3Cpath d=%22M87 6.2 88.4 7.6 87 9 85.6 7.6z%22/%3E %3Cpath d=%22M9 84.2 10.4 85.6 9 87 7.6 85.6z%22/%3E%3Cpath d=%22M87 84.2 88.4 85.6 87 87 85.6 85.6z%22/%3E %3C/g%3E %3C/svg%3E");
}

/* A parede: a aura de cima pega a cor da seção — o fundo inteiro muda de
   luz quando você troca de página, não só a aba. */
body {
  background:
    radial-gradient(ellipse 900px 520px at 50% -12%,
      color-mix(in srgb, var(--cor-secao) 13%, transparent), transparent 70%),
    radial-gradient(ellipse 600px 400px at 100% 100%, rgba(79, 195, 200, 0.04), transparent),
    var(--grao),
    var(--alvenaria),
    linear-gradient(180deg, var(--vazio-alto), var(--vazio) 40%, color-mix(in srgb, var(--vazio) 70%, #000));
  background-attachment: fixed;
}

/* Pedra lavrada: moldura de cima e de baixo. */
.topo {
  background:
    var(--grao),
    linear-gradient(178deg, var(--pedra-alta), var(--pedra) 55%, var(--pedra-baixa));
  box-shadow: inset 0 1px 0 var(--bisel-luz), inset 0 -1px 0 var(--bisel-sombra), 0 6px 18px rgba(0, 0, 0, .38);
}
.barra-abas {
  background:
    var(--grao),
    linear-gradient(2deg, var(--pedra-baixa), var(--pedra) 60%, var(--pedra-alta));
  box-shadow: inset 0 1px 0 var(--bisel-luz), 0 -6px 18px rgba(0, 0, 0, .38);
}

/* A placa do andar: pedra entalhada. O número em baixo relevo — sombra
   escura em cima e clara embaixo é o que faz o tipo parecer GRAVADO na
   pedra em vez de impresso sobre ela (mesmo truque do placar do Mestre). */
.placa-andar {
  background:
    var(--grao),
    linear-gradient(180deg, color-mix(in srgb, var(--cor-secao) 14%, transparent), transparent 70%),
    linear-gradient(180deg, var(--pedra-baixa), var(--vazio));
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, .7), inset 0 -1px 0 var(--bisel-luz);
}
.placa-andar-num { text-shadow: 0 -1px 1px rgba(0, 0, 0, .8), 0 1px 0 rgba(255, 255, 255, .12); }
.secao-titulo { text-shadow: 0 1px 0 rgba(0, 0, 0, .6); }

/* =============================================================================
   RANKING — pódio (25/09/2026)
   ============================================================================= */
/* A faixa "quantos estão jogando" nunca teve CSS: saía como texto solto. */
.comunidade {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px;
  margin: 4px 0 18px;
}
.comunidade-item {
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 10px;
  padding: 8px 4px; text-align: center; min-width: 0;
}
.comunidade-valor { font-weight: 800; font-size: var(--t-corpo); font-variant-numeric: tabular-nums; }
.comunidade-valor.online { color: var(--verde); }
.comunidade-rotulo { font-size: var(--t-mini); color: var(--tinta-fraca); line-height: 1.2; margin-top: 2px; }

.podio {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px;
  align-items: end; margin-bottom: 18px;
}
.podio-col { display: flex; flex-direction: column; align-items: center; min-width: 0; text-align: center; }
.lugar-1 { --metal: #e8b64a; --metal-claro: #fbe29a; --metal-escuro: #8a6414; --altura: 92px; }
.lugar-2 { --metal: #b8c3d0; --metal-claro: #eef3f8; --metal-escuro: #5e6874; --altura: 66px; }
.lugar-3 { --metal: #c4915a; --metal-claro: #ecc496; --metal-escuro: #6f4a24; --altura: 48px; }

/* Medalha: disco de metal com o número gravado. */
.podio-medalha {
  width: 44px; height: 44px; border-radius: 50%; margin-bottom: 7px;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-titulo); color: var(--metal-escuro);
  background: radial-gradient(circle at 35% 30%, var(--metal-claro), var(--metal) 55%, var(--metal-escuro));
  box-shadow: inset 0 1px 1px rgba(255, 255, 255, .6), inset 0 -2px 3px rgba(0, 0, 0, .35),
              0 0 16px -2px color-mix(in srgb, var(--metal) 60%, transparent);
  text-shadow: 0 1px 0 rgba(255, 255, 255, .45);
}
.lugar-1 .podio-medalha { width: 54px; height: 54px; }
.podio-nome {
  width: 100%; font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-pequeno);
  line-height: 1.2; overflow: hidden; overflow-wrap: anywhere;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2;
}
.lugar-1 .podio-nome { font-size: var(--t-corpo); }
.podio-valor {
  margin: 3px 0 8px; font-size: var(--t-pequeno); color: var(--tinta-fraca);
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.podio-valor b { color: var(--metal); font-weight: 800; margin-left: 4px; }

/* O degrau: metal escovado, como a base da taça no Mestre. O escovado tem
   que quase não aparecer — visível demais vira plástico imitando metal. */
.podio-base {
  width: 100%; height: var(--altura); border-radius: 8px 8px 3px 3px;
  background:
    repeating-linear-gradient(115deg, rgba(255, 255, 255, .06) 0 1px, rgba(0, 0, 0, .05) 1px 2px),
    linear-gradient(178deg, color-mix(in srgb, var(--metal) 55%, var(--painel)),
                            color-mix(in srgb, var(--metal-escuro) 60%, var(--vazio)));
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .28), inset 0 -2px 3px rgba(0, 0, 0, .45),
              0 8px 18px -8px color-mix(in srgb, var(--metal) 55%, transparent);
}
.podio-col.voce .podio-base { outline: 2px solid var(--cor-secao); outline-offset: 2px; }

.ranking-lista { display: flex; flex-direction: column; gap: 6px; }
.ranking-linha {
  display: flex; align-items: center; gap: 12px;
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
  padding: 11px 14px;
}
.ranking-linha.voce {
  border-color: var(--cor-secao);
  background: color-mix(in srgb, var(--cor-secao) 9%, var(--painel));
}
.ranking-posicao {
  width: 28px; flex-shrink: 0; text-align: center;
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-sub); color: var(--tinta-fraca);
  font-variant-numeric: tabular-nums;
}
.ranking-nome {
  flex: 1; min-width: 0; font-weight: 700; font-size: var(--t-corpo);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.ranking-sub { font-size: var(--t-mini); color: var(--tinta-fraca); font-weight: 600; margin-top: 1px; }
.ranking-voce {
  display: inline-block; margin-left: 6px; padding: 0 7px; border-radius: 999px;
  font-size: var(--t-mini); font-weight: 800; vertical-align: 2px;
  background: var(--cor-secao); color: var(--vazio);
}
.podio-col .ranking-voce { margin: 0 0 6px; }
.ranking-valor {
  flex-shrink: 0; text-align: right; font-variant-numeric: tabular-nums;
  display: flex; flex-direction: column; align-items: flex-end; line-height: 1.15;
}
.ranking-valor b { font-size: var(--t-corpo); font-weight: 800; }
.ranking-unidade { font-size: var(--t-mini); color: var(--tinta-fraca); }

/* =============================================================================
   EXPLORAR ANDAR (25/09/2026) — era "Postos"
   ============================================================================= */
.andar-cabecalho {
  display: flex; align-items: center; gap: 12px; margin-bottom: 4px;
  padding: 10px 12px; border-radius: 14px; border: 1px solid var(--painel-borda);
  background: var(--grao), linear-gradient(178deg, var(--pedra-alta), var(--pedra) 60%, var(--pedra-baixa));
  box-shadow: inset 0 1px 0 var(--bisel-luz), inset 0 -1px 0 var(--bisel-sombra);
}
.andar-cabecalho-placa {
  min-width: 58px; padding: 5px 8px; text-align: center; display: flex; flex-direction: column;
  background: linear-gradient(180deg, var(--pedra-baixa), var(--vazio));
  border: 1px solid color-mix(in srgb, var(--cor-secao) 55%, var(--painel-borda));
  clip-path: polygon(7px 0, calc(100% - 7px) 0, 100% 7px, 100% calc(100% - 7px),
                     calc(100% - 7px) 100%, 7px 100%, 0 calc(100% - 7px), 0 7px);
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, .7);
}
.andar-cabecalho-placa span { font-size: var(--t-mini); color: var(--tinta-fraca); }
.andar-cabecalho-placa b {
  font-family: var(--fonte-display); font-size: var(--t-titulo); color: var(--ouro); line-height: 1.05;
  text-shadow: 0 -1px 1px rgba(0, 0, 0, .8), 0 1px 0 rgba(255, 255, 255, .12);
}
.andar-cabecalho-txt { min-width: 0; }
.andar-cabecalho-titulo { font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-corpo); }
.andar-cabecalho-sub { font-size: var(--t-pequeno); color: var(--tinta-fraca); margin-top: 2px; }

.achados-titulo { margin: 14px 0 8px; font-size: var(--t-pequeno); font-weight: 700; color: var(--tinta-fraca); }
.achado {
  display: flex; align-items: center; gap: 10px; margin-bottom: 8px;
  padding: 10px 10px 10px 12px; border-radius: 12px;
  background: var(--vazio-alto); border: 1px solid var(--painel-borda);
  border-left: 3px solid var(--tinta-fraca);
}
.achado-posto  { border-left-color: var(--verde); }
.achado-ponto  { border-left-color: var(--ouro); }
.achado-cidade { border-left-color: var(--ferrugem); }
.achado-icone { font-size: 22px; width: 28px; text-align: center; flex: 0 0 auto; }
.achado-txt { flex: 1; min-width: 0; }
.achado-titulo { font-weight: 700; font-size: var(--t-corpo); overflow-wrap: anywhere; }
.achado-detalhe { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 2px; }
.achado-acao { flex: 0 0 auto; width: auto !important; margin: 0 !important; padding: 8px 12px; font-size: var(--t-pequeno); }

/* =============================================================================
   CLÃ — RESUMO NOVO (25/09/2026): membros, equipes, batalha, refúgio
   ============================================================================= */
.membros { margin: 4px 0 14px; }
.membros-equipes { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
.membros-equipes .filtro-chip { flex: 0 0 auto; }

.membro {
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
  margin-bottom: 6px; overflow: hidden;
}
.membro.aberto { border-color: color-mix(in srgb, var(--cor-secao) 55%, var(--painel-borda)); }
.membro.descansando { opacity: .8; }
.membro-topo {
  width: 100%; display: flex; align-items: center; gap: 10px; text-align: left;
  background: none; border: 0; color: var(--tinta); padding: 10px 12px; cursor: pointer; font-family: inherit;
}
.membro-txt { flex: 1; min-width: 0; }
.membro-nome { font-weight: 700; font-size: var(--t-corpo); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.membro-sub { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 1px; }
/* os talentos AO LADO: grade de 3 × 2, 0★ apagado */
.membro-talentos {
  flex: 0 0 auto; display: grid; grid-template-columns: repeat(3, auto); gap: 2px 7px;
  font-size: var(--t-mini); font-weight: 700; font-variant-numeric: tabular-nums;
}
.membro-talento { color: var(--ouro); white-space: nowrap; }
.membro-talento.zero { color: var(--tinta-fraca); opacity: .55; font-weight: 600; }
.membro-detalhe { padding: 0 12px 12px; display: flex; flex-direction: column; gap: 5px; }
.membros-paginas {
  display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 8px;
  font-size: var(--t-pequeno); color: var(--tinta-fraca);
}
.membros-paginas .botao-secundario { width: auto; min-width: 52px; margin: 0; }

/* ⚔️ batalha no andar (XP offline) */
.cultivo .texto-fraco { margin: 4px 0 8px; }
.cultivo-linha {
  display: flex; align-items: center; gap: 10px; padding: 10px 0;
  border-top: 1px solid var(--painel-borda);
}
.cultivo-linha.morto .cultivo-nome { color: var(--tinta-fraca); }
.cultivo-txt { flex: 1; min-width: 0; }
.cultivo-nome { font-weight: 700; font-size: var(--t-corpo); }
.cultivo-sub { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 2px; }
.cultivo-ultimo { font-size: var(--t-mini); color: var(--mana); margin-top: 3px; }
.cultivo-acao { flex: 0 0 auto; width: auto !important; margin: 0 !important; padding: 8px 12px; font-size: var(--t-pequeno); }

/* 🏕️ refúgio (Explorar andar) e prazo das equipes */
.achado-refugio { margin-top: 12px; border-left-color: var(--mana); }
.achado-refugio.ativo { border-color: var(--mana); background: color-mix(in srgb, var(--mana) 8%, var(--vazio-alto)); }
.equipe-prazo { color: var(--mana); }
.aldeia-comercio, .ferreiro-oficina { margin-top: 18px; }

/* =============================================================================
   ARENA DE PETS (25/09/2026): rival com aura vermelha, os dois em campo
   grandes, o seu banco tocável pra trocar
   ============================================================================= */
.banco-pets.rival, .banco-pets.meu { justify-content: center; gap: 8px; margin-bottom: 14px; }
.banco-pets .banco-pet { width: 54px; }
.banco-pets.rival .banco-pet {
  border-color: #c9414f;
  box-shadow: 0 0 0 1px rgba(201, 65, 79, .6), 0 0 12px rgba(224, 72, 79, .55),
              inset 0 0 10px rgba(224, 72, 79, .25);
}
.banco-pets.rival .banco-pet.em-campo {
  border-color: #ff5a64;
  box-shadow: 0 0 0 2px #ff5a64, 0 0 18px rgba(255, 90, 100, .75), inset 0 0 12px rgba(255, 90, 100, .35);
}
.banco-pets.rival .banco-pet.morto { box-shadow: none; }
.banco-pets.meu .banco-pet.pode-trocar {
  cursor: pointer; border-color: var(--mana);
  box-shadow: 0 0 10px -2px color-mix(in srgb, var(--mana) 70%, transparent);
}
.banco-pets.meu .banco-pet.pode-trocar:active { transform: scale(.94); }
.dica-troca { text-align: center; margin: -6px 0 12px; }
/* os dois em campo, grandes */
.combate-vs.vs-pets .combate-vs-retrato { width: min(150px, 38vw); height: min(150px, 38vw); }
.combate-vs.vs-pets .combate-vs-nome { font-size: var(--t-pequeno); }

/* Ficha: espírito só com a arte, ocupando o quadrado todo (25/09/2026) */
.pet-slot.so-arte { padding: 2px; }
.pet-slot.so-arte .pet-slot-arte { width: 100%; height: 100%; border-radius: 8px; }

/* Boss global: resultado da batalha automática (25/09/2026) */
.boss-global-resultado {
  margin-top: 12px; padding: 12px 14px; border-radius: 12px;
  background: var(--painel); border: 1px solid var(--painel-borda);
}
.boss-global-resultado-titulo { font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-corpo); margin-bottom: 4px; }
.boss-global-resultado-dano { font-weight: 800; color: var(--ouro); margin: 6px 0; font-variant-numeric: tabular-nums; }
.boss-global-resultado .log-combate { margin-top: 8px; max-height: 220px; overflow-y: auto; }

/* 🔷 Emblema de skill (25/09/2026) */
.emblema-skill { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; line-height: 0; }
.botao-com-emblema { display: flex; align-items: center; gap: 8px; text-align: left; }
.botao-com-emblema > span:last-child { flex: 1; min-width: 0; }
.peca-arte .emblema-skill { margin: auto; }
.pet-slot .emblema-skill { margin: 0 auto 2px; }

/* ✏️ nome do personagem (25/09/2026) */
.linha-nome { display: flex; align-items: center; gap: 6px; min-width: 0; }
.linha-nome .nome-jogador { min-width: 0; overflow-wrap: anywhere; }
.btn-editar-nome { background: none; border: 0; cursor: pointer; font-size: var(--t-corpo); opacity: .75; padding: 4px; min-height: 0 !important; }
.erro-nome { color: var(--ferrugem); min-height: 1.2em; margin-top: 6px; }

/* 📖 Crônicas (26/09/2026) */
/* 🪨 (28/09) Crônica = encontro da Torre e crônica do clã: o momento de
   história. É a ÚNICA função com moldura lavrada (um material por função):
   cartão de lista continua fosco, e é o contraste que faz a moldura valer.
   A moldura substitui a borda fina + cantos arredondados, que era o mesmo
   cartão de qualquer site. */
.cronica {
  border: 14px solid transparent;
  border-image: var(--moldura) 24 stretch;
  background: var(--grao), linear-gradient(180deg, var(--painel), color-mix(in srgb, var(--painel) 88%, #000));
  background-clip: padding-box;
  padding: 4px 6px 6px; margin-bottom: 12px;
}
.cronica.fundacao { box-shadow: 0 0 22px -8px var(--ouro); }
.cronica-titulo { font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-sub); margin-bottom: 6px; }
.cronica-texto { font-size: var(--t-corpo); line-height: 1.5; margin: 0 0 8px; }
.cronica-prazo { font-size: var(--t-mini); color: var(--tinta-fraca); margin-bottom: 10px; }
.cronica-opcao { width: 100%; text-align: left; margin: 6px 0 0 !important; display: block; }
.cronica-opcao-texto { font-weight: 700; }
.cronica-opcao-extra { font-size: var(--t-mini); color: var(--tinta-fraca); margin-top: 3px; font-weight: 600; }
.cronica-guerra {
  background: color-mix(in srgb, #c9414f 14%, var(--painel)); border: 1px solid #c9414f;
  border-radius: 12px; padding: 10px 12px; margin-bottom: 12px; font-weight: 700; font-size: var(--t-pequeno);
}
.cronica-historico { padding: 8px 0; border-bottom: 1px solid var(--painel-borda); font-size: var(--t-pequeno); }
.cronica-resultado { padding: 4px 0; font-size: var(--t-pequeno); }

/* =============================================================================
   ACABAMENTO (26/09/2026) — textura e contornos
   -----------------------------------------------------------------------------
   Pedido do dev: "gostei de cada menu ter a sua cor; melhorar a textura da
   página e os contornos". Continua a regra dos MATERIAIS (um por função):
     · fundo    → a parede da Torre ganha profundidade: a luz da seção vem
                  de cima E de um canto, as bordas escurecem (vinheta) e uma
                  poeira de aura quase invisível flutua por cima da alvenaria
     · caixas   → contorno DUPLO de pedra lapidada: fio de fora com um toque
                  da cor da seção, friso escuro por dentro, luz fina em cima,
                  sombra embaixo. Continuam FOSCAS (o contraste com a moldura
                  de pedra é o que faz a pedra parecer pedra)
     · painéis grandes → cantoneiras na cor da seção nos 4 cantos
     · títulos  → um filete que sai do texto e some, na cor da seção
   Estado especial (diária pronta, fundação, "você" no ranking, tipo do
   achado) tem seletor mais forte e continua vencendo.
   ============================================================================= */
:root {
  --poeira: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cg fill='%23fff'%3E%3Ccircle cx='23' cy='41' r='.8' opacity='.18'/%3E%3Ccircle cx='121' cy='17' r='.6' opacity='.12'/%3E%3Ccircle cx='187' cy='93' r='.9' opacity='.15'/%3E%3Ccircle cx='64' cy='151' r='.6' opacity='.1'/%3E%3Ccircle cx='157' cy='187' r='.7' opacity='.14'/%3E%3Ccircle cx='96' cy='96' r='.5' opacity='.09'/%3E%3Ccircle cx='205' cy='12' r='.5' opacity='.1'/%3E%3C/g%3E%3C/svg%3E");
  --fio-secao: color-mix(in srgb, var(--cor-secao) 30%, var(--painel-borda));
  --sombra-caixa: inset 0 1px 0 color-mix(in srgb, var(--cor-secao) 22%, rgba(255, 255, 255, .06)),
                  inset 0 0 0 1px rgba(0, 0, 0, .32),
                  0 1px 0 rgba(0, 0, 0, .6), 0 12px 24px -16px rgba(0, 0, 0, .9);
}

/* a parede: luz da seção em cima e num canto, vinheta nas bordas */
body {
  background:
    radial-gradient(ellipse 900px 520px at 50% -12%,
      color-mix(in srgb, var(--cor-secao) 15%, transparent), transparent 70%),
    radial-gradient(ellipse 520px 420px at 0% 100%,
      color-mix(in srgb, var(--cor-secao) 7%, transparent), transparent 70%),
    radial-gradient(ellipse 120% 90% at 50% 45%, transparent 55%, rgba(0, 0, 0, .45) 100%),
    var(--poeira),
    var(--grao),
    var(--alvenaria),
    linear-gradient(180deg, var(--vazio-alto), var(--vazio) 40%, color-mix(in srgb, var(--vazio) 70%, #000));
  background-attachment: fixed;
}

/* caixas: contorno duplo de pedra lapidada */
.cartao-item, .caminho, .membro, .diaria, .cronica, .aldeia-box, .ranking-linha, .cartao-missao,
.stat-linha, .clan-humor, .comunidade-item, .boss-global-resultado, .combate-vs, .botao-secundario,
.filtro-chip, .pet-slot {
  border-color: var(--fio-secao);
  box-shadow: var(--sombra-caixa);
}
.achado { box-shadow: var(--sombra-caixa); }          /* a borda esquerda mostra o tipo: não mexe */
.cartao-item, .caminho, .membro, .diaria, .cronica, .aldeia-box, .ranking-linha, .cartao-missao,
.stat-linha, .boss-global-resultado {
  background-image:
    radial-gradient(ellipse 80% 60px at 50% 0, color-mix(in srgb, var(--cor-secao) 7%, transparent), transparent),
    linear-gradient(180deg, rgba(255, 255, 255, .035), transparent 40%);
}

/* botões: ao tocar, a borda acende na cor da seção */
.botao-secundario, .caminho, .filtro-chip { transition: border-color .15s, box-shadow .15s, transform .1s; }
.botao-secundario:active:not(:disabled), .caminho:active {
  border-color: color-mix(in srgb, var(--cor-secao) 70%, var(--painel-borda));
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .05), 0 0 0 1px color-mix(in srgb, var(--cor-secao) 35%, transparent),
              0 0 14px -4px color-mix(in srgb, var(--cor-secao) 55%, transparent);
}
.filtro-chip.ativo { box-shadow: 0 0 12px -4px color-mix(in srgb, var(--ouro) 70%, transparent); }

/* painéis grandes: cantoneiras nos 4 cantos */
.cronica, .aldeia-box, .combate-vs, .boss-global-resultado { position: relative; }
.cronica::after, .aldeia-box::after, .combate-vs::after, .boss-global-resultado::after {
  --c: color-mix(in srgb, var(--cor-secao) 85%, transparent);
  content: ""; position: absolute; inset: 5px; border-radius: inherit; pointer-events: none;
  background:
    linear-gradient(var(--c), var(--c)) left top / 18px 2px,
    linear-gradient(var(--c), var(--c)) left top / 2px 18px,
    linear-gradient(var(--c), var(--c)) right top / 18px 2px,
    linear-gradient(var(--c), var(--c)) right top / 2px 18px,
    linear-gradient(var(--c), var(--c)) left bottom / 18px 2px,
    linear-gradient(var(--c), var(--c)) left bottom / 2px 18px,
    linear-gradient(var(--c), var(--c)) right bottom / 18px 2px,
    linear-gradient(var(--c), var(--c)) right bottom / 2px 18px;
  background-repeat: no-repeat;
  opacity: .9;
}

/* títulos de seção: filete que sai do texto e some */
.secao-titulo { display: flex; align-items: center; gap: 10px; }
.secao-titulo::after {
  content: ""; flex: 1; min-width: 24px; height: 1px;
  background: linear-gradient(90deg, color-mix(in srgb, var(--cor-secao) 55%, transparent), transparent);
}

/* linhas de lista: o fio de baixo some nas pontas */
.linha-lista {
  border-bottom-color: transparent;
  background-image: linear-gradient(90deg, transparent, var(--fio-secao) 12%, var(--fio-secao) 88%, transparent);
  background-size: 100% 1px; background-position: bottom; background-repeat: no-repeat;
}

/* 🖼️ arte da crônica (26/09/2026): só aparece se a imagem foi enviada */
.cronica-arte {
  /* encaixada DENTRO do aro de pedra: sem arredondado, rente ao rebaixo */
  margin: -4px -6px 12px; border-radius: 0; overflow: hidden;
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .6);
  aspect-ratio: 16 / 9; background: var(--vazio-alto);
  border-bottom: 1px solid var(--fio-secao, var(--painel-borda));
}
.cronica-arte img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* 🎠 Resultado da invocação em carrossel (26/09/2026) */
.resultado-topo { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.resultado-topo .secao-titulo { flex: 1; margin-bottom: 8px; }
.resultado-contador { font-weight: 800; font-size: var(--t-pequeno); color: var(--tinta-fraca); font-variant-numeric: tabular-nums; }
.resultado-carrossel {
  display: flex; gap: 12px; overflow-x: auto; scroll-snap-type: x mandatory;
  padding: 6px 11% 14px; margin: 0 -16px; scrollbar-width: none;
}
.resultado-carrossel::-webkit-scrollbar { display: none; }
.resultado-cartao {
  flex: 0 0 78%; scroll-snap-align: center; min-height: 300px;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;
  border-radius: 18px; padding: 14px; text-align: center;
  background: linear-gradient(180deg, color-mix(in srgb, var(--cor-rar, var(--painel-borda)) 16%, var(--painel)), var(--painel));
  border: 2px solid var(--cor-rar, var(--painel-borda));
  box-shadow: 0 0 22px -8px var(--cor-rar, transparent), inset 0 1px 0 rgba(255, 255, 255, .06);
  animation: revelar-cartao .35s ease;
}
.resultado-cartao.carregando { animation: pulsar-cartao .8s ease-in-out infinite; }
.resultado-interrogacao { font-family: var(--fonte-display); font-size: 64px; color: var(--tinta-fraca); }
.resultado-arte { position: relative; width: 100%; aspect-ratio: 1; max-width: 220px; border-radius: 14px; overflow: hidden;
  display: flex; align-items: center; justify-content: center; background: var(--vazio-alto); }
.resultado-arte img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.resultado-emoji { font-size: 72px; }
.resultado-nome { font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-sub); }
.resultado-raridade { font-size: var(--t-mini); font-weight: 800; letter-spacing: 1.5px; color: var(--cor-rar, var(--tinta-fraca)); }
.resultado-cartao.rar-comum    { --cor-rar: var(--rar-comum); }
.resultado-cartao.rar-incomum  { --cor-rar: var(--rar-incomum); }
.resultado-cartao.rar-raro     { --cor-rar: var(--rar-raro); }
.resultado-cartao.rar-epico    { --cor-rar: var(--rar-epico); }
.resultado-cartao.rar-lendario { --cor-rar: var(--rar-lendario); }
@keyframes revelar-cartao { from { transform: scale(.92) rotateY(20deg); opacity: .4; } to { transform: none; opacity: 1; } }
@keyframes pulsar-cartao { 50% { opacity: .55; } }
.fusao-opcao { width: 100%; text-align: left; margin: 6px 0 0 !important; display: block; }

/* 🖼️ criação: a raça com a arte dela (26/09/2026) */
.escolha-retrato {
  width: min(220px, 60vw); aspect-ratio: 3 / 4; margin: 0 auto 12px; border-radius: 16px; overflow: hidden;
  background: var(--vazio-alto); border: 2px solid var(--ouro);
  box-shadow: 0 0 22px -8px var(--ouro), inset 0 1px 0 rgba(255, 255, 255, .08);
}
.escolha-retrato img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* ⚡ Poder de combate (26/09/2026 — de volta do bot antigo) */
.poder-de-combate { font-weight: 800; font-size: var(--t-pequeno); color: var(--ouro); margin-top: 4px; font-variant-numeric: tabular-nums; }
.inimigo-ficha-poder { font-size: var(--t-mini); font-weight: 800; color: var(--ouro); font-variant-numeric: tabular-nums; white-space: nowrap; }

/* ➖➕ quantidade de cada core na Forja (26/09/2026) */
.core-controle { display: flex; align-items: center; gap: 6px; flex: 0 0 auto; }
.core-botao {
  width: 38px; height: 38px; min-height: 38px !important; border-radius: 10px;
  background: var(--vazio-alto); border: 1px solid var(--fio-secao, var(--painel-borda));
  color: var(--tinta); font-size: 22px; font-weight: 800; line-height: 1; cursor: pointer; padding: 0;
}
.core-botao:disabled { opacity: .3; }
.core-botao:active:not(:disabled) { transform: scale(.92); border-color: var(--ouro); }
.core-qtd { min-width: 22px; text-align: center; font-weight: 800; font-variant-numeric: tabular-nums; }

/* 🔴 pendências (26/09/2026): ponto vermelho na aba e no atalho da página */
.aba-item.tem-pendencia::after, .caminho.tem-pendencia::before {
  content: ""; position: absolute; width: 9px; height: 9px; border-radius: 50%;
  background: #e5484d; box-shadow: 0 0 0 2px var(--vazio), 0 0 8px rgba(229, 72, 77, .7);
}
.aba-item.tem-pendencia::after { top: 6px; left: calc(50% + 8px); }
.caminho { position: relative; }
.caminho.tem-pendencia::before { top: 8px; right: 8px; }

/* 🔒 clã bloqueado até a fundação · 💤 tutorial do idle (26/09/2026) */
.aba-item.bloqueada { opacity: .45; }
.aba-item.bloqueada .aba-icone { filter: grayscale(1); }
.clan-bloqueado { text-align: center; }
.tutorial-idle-passo { display: flex; gap: 12px; align-items: flex-start; padding: 10px 0; border-top: 1px solid var(--painel-borda); }
.tutorial-idle-icone { font-size: 26px; flex: 0 0 34px; text-align: center; }

/* 👆 Guia de clique (26/09/2026) */
.guia-camada { position: fixed; inset: 0; z-index: 9000; pointer-events: none; }
.guia-fundo { position: fixed; inset: 0; background: rgba(4, 3, 10, .72); }
.guia-luz {
  position: fixed; border-radius: 14px; pointer-events: none;
  box-shadow: 0 0 0 9999px rgba(4, 3, 10, .72), 0 0 0 2px var(--ouro), 0 0 22px 4px color-mix(in srgb, var(--ouro) 60%, transparent);
  animation: guia-pulso 1.6s ease-in-out infinite;
  transition: left .25s, top .25s, width .25s, height .25s;
}
@keyframes guia-pulso { 50% { box-shadow: 0 0 0 9999px rgba(4, 3, 10, .72), 0 0 0 3px var(--ouro), 0 0 30px 8px color-mix(in srgb, var(--ouro) 70%, transparent); } }
.guia-balao {
  position: fixed; left: 12px; right: 12px; max-width: 456px; margin: 0 auto; pointer-events: auto;
  background: var(--painel); border: 1px solid var(--ouro); border-radius: 16px; padding: 14px 16px;
  box-shadow: 0 16px 40px rgba(0, 0, 0, .6);
}
.guia-balao:not([style*="top"]):not([style*="bottom"]) { top: 50%; transform: translateY(-50%); }
.guia-contador { font-size: var(--t-mini); color: var(--tinta-fraca); font-weight: 800; }
.guia-titulo { font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-sub); color: var(--ouro); margin: 2px 0 6px; }
.guia-texto { font-size: var(--t-corpo); line-height: 1.5; }
.guia-botoes { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 12px; }
.guia-pular { background: none; border: 0; color: var(--tinta-fraca); font-size: var(--t-pequeno); text-decoration: underline; cursor: pointer; min-height: 0 !important; padding: 6px 0; }
.guia-ok { width: auto !important; margin: 0 !important; padding: 10px 22px; }
.guia-dica { font-size: var(--t-pequeno); color: var(--ouro); font-weight: 700; }

/* 🔎 (28/09) tela de morte: quem derrubou × você, em duas linhas alinhadas */
.derrota-lado-a-lado { margin: 4px 0 6px; }
.derrota-lado-a-lado .texto-fraco { padding: 2px; font-variant-numeric: tabular-nums; }

/* ✨ (28/09) carta de habilidade na criação: o emblema no lugar do selo */
.escolha-selo-skill { display: flex; align-items: center; justify-content: center; font-size: 0; }

/* ═══════════════════════════════════════════════════════════════════════
   🎁 JANELA DE RECOMPENSA (28/09, dev)
   Fim da batalha (leve: no topo, some sozinha, não trava o próximo toque)
   e "Receber recompensa" do clã (centro, com fundo escuro e botão).
   ═══════════════════════════════════════════════════════════════════════ */
.recomp-overlay {
  position: fixed; inset: 0; z-index: 220;
  display: flex; align-items: center; justify-content: center;
  padding: 24px;
  background: rgba(6, 4, 12, 0.74);
  -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px);
  animation: recomp-fundo 0.25s ease-out both;
}
/* (28/09, dev) "enquanto estiver na janela, bloqueia o resto do fundo do
   jogo": a leve também cobre a tela inteira e engole o toque — um toque
   no fundo só fecha a janela, nunca chega no botão que está atrás */
.recomp-overlay.leve {
  background: rgba(6, 4, 12, 0.45); -webkit-backdrop-filter: none; backdrop-filter: none;
  pointer-events: auto; touch-action: none; align-items: flex-start;
  padding-top: calc(env(safe-area-inset-top, 0px) + 70px);
}
.recomp-overlay.saindo { animation: recomp-fundo-sair 0.22s ease-in forwards; }
@keyframes recomp-fundo { from { opacity: 0; } to { opacity: 1; } }
@keyframes recomp-fundo-sair { to { opacity: 0; } }

.recomp-card {
  position: relative; width: min(360px, 100%); pointer-events: auto;
  border-radius: 20px; padding: 22px 18px 16px; overflow: hidden; text-align: center;
  background: linear-gradient(180deg, color-mix(in srgb, var(--painel) 70%, #3a2a10), var(--painel) 55%);
  border: 1px solid var(--painel-borda-forte);
  box-shadow: 0 0 0 1px rgba(232,182,74,0.28), 0 22px 50px rgba(0,0,0,0.6), 0 0 46px rgba(232,182,74,0.16);
  animation: recomp-entrar 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;
}
.recomp-overlay.leve .recomp-card { width: min(320px, 100%); padding: 16px 14px 12px; }
/* brilho que passa pela borda */
.recomp-card::before {
  content: ""; position: absolute; inset: -40%;
  background: conic-gradient(from 0deg, transparent 0 70%, rgba(232,182,74,0.35) 80%, transparent 90%);
  animation: recomp-girar 4s linear infinite; z-index: 0;
}
.recomp-card::after {
  content: ""; position: absolute; inset: 1px; border-radius: 19px; z-index: 0;
  background: linear-gradient(180deg, color-mix(in srgb, var(--painel) 78%, #3a2a10), var(--painel) 60%);
}
.recomp-card > * { position: relative; z-index: 1; }
@keyframes recomp-entrar {
  0% { opacity: 0; transform: translateY(16px) scale(0.9); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes recomp-girar { to { transform: rotate(360deg); } }

.recomp-icone-caixa { position: relative; width: 84px; height: 84px; margin: 0 auto 6px; }
.recomp-overlay.leve .recomp-icone-caixa { width: 56px; height: 56px; margin-bottom: 2px; }
.recomp-raios {
  position: absolute; inset: -18px; border-radius: 50%;
  background: repeating-conic-gradient(rgba(232,182,74,0.28) 0 10deg, transparent 10deg 30deg);
  -webkit-mask: radial-gradient(circle, #000 30%, transparent 70%); mask: radial-gradient(circle, #000 30%, transparent 70%);
  animation: recomp-girar 9s linear infinite;
}
.recomp-icone {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  font-size: 50px; filter: drop-shadow(0 0 14px rgba(232,182,74,0.7));
  animation: recomp-pulo 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) 0.15s both;
}
.recomp-overlay.leve .recomp-icone { font-size: 34px; }
@keyframes recomp-pulo { 0% { transform: scale(0.2); opacity: 0; } 100% { transform: scale(1); opacity: 1; } }

.recomp-titulo {
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-sub); color: var(--ouro);
  text-shadow: 0 0 18px rgba(232,182,74,0.55); letter-spacing: 0.5px;
}
.recomp-sub { margin-top: 2px; font-size: var(--t-pequeno); color: var(--tinta-fraca); }

.recomp-nivel {
  display: inline-block; margin-top: 10px; padding: 6px 14px; border-radius: 999px;
  background: linear-gradient(180deg, #f6d98a, var(--ouro) 60%, #c99a3a); color: #221904;
  font-family: var(--fonte-display); font-weight: 700; font-size: var(--t-corpo);
  box-shadow: 0 0 20px rgba(232,182,74,0.55);
  animation: recomp-pulo 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 0.35s both, recomp-brilho 1.6s ease-in-out 1s infinite;
}
@keyframes recomp-brilho { 50% { box-shadow: 0 0 34px rgba(232,182,74,0.9); } }

.recomp-lista {
  margin-top: 14px; display: flex; flex-direction: column; gap: 8px; text-align: left;
  max-height: 46vh; overflow-y: auto; -webkit-overflow-scrolling: touch;
}
.recomp-overlay.leve .recomp-lista { margin-top: 10px; gap: 6px; }
.recomp-item {
  display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 12px;
  background: rgba(255,255,255,0.04); border: 1px solid var(--painel-borda);
  opacity: 0; transform: translateX(-10px);
  animation: recomp-item 0.35s ease-out forwards;
  animation-delay: calc(var(--i, 0) * 90ms + 300ms);
}
.recomp-overlay.leve .recomp-item { padding: 7px 10px; }
@keyframes recomp-item { to { opacity: 1; transform: translateX(0); } }
.recomp-item-icone { font-size: 22px; width: 28px; text-align: center; flex: 0 0 auto; }
.recomp-item-texto { flex: 1; min-width: 0; color: var(--tinta); font-size: var(--t-corpo); line-height: 1.3; }
.recomp-item-valor {
  flex: 0 0 auto; font-family: var(--fonte-display); font-weight: 700; color: var(--ouro);
  font-variant-numeric: tabular-nums;
}
.recomp-item.raro {
  /* a cor de raridade épica do próprio jogo (token), sem degradê */
  border-color: color-mix(in srgb, var(--rar-epico) 70%, transparent);
  background: color-mix(in srgb, var(--rar-epico) 14%, transparent);
}
.recomp-item.raro .recomp-item-valor { color: color-mix(in srgb, var(--rar-epico) 60%, #fff); }
.recomp-item.ruim { border-color: rgba(220,90,90,0.5); background: rgba(220,90,90,0.08); }

.recomp-secao {
  margin: 14px 2px 6px; text-align: left; font-size: var(--t-pequeno);
  color: var(--tinta-fraca); text-transform: uppercase; letter-spacing: 1px;
}
.recomp-gasto { display: flex; gap: 10px; padding: 4px 4px; font-size: var(--t-pequeno); color: var(--tinta-fraca); }
.recomp-gasto span:nth-child(2) { flex: 1; }
.recomp-gasto span:last-child { color: #e9a0a0; font-variant-numeric: tabular-nums; }
.recomp-dica { margin-top: 10px; font-size: var(--t-pequeno); color: var(--tinta-fraca); text-align: left; }
.recomp-botao { width: 100%; margin-top: 14px; }

/* barrinha do "some sozinha" (só na leve) */
.recomp-tempo { height: 3px; margin-top: 10px; border-radius: 3px; background: rgba(232,182,74,0.18); overflow: hidden; }
.recomp-tempo > div { height: 100%; background: var(--ouro); transform-origin: left; animation: recomp-tempo linear forwards; }
@keyframes recomp-tempo { from { transform: scaleX(1); } to { transform: scaleX(0); } }

/* banner "Receber recompensa" no topo do clã */
.recomp-banner {
  position: relative; overflow: hidden; margin-bottom: 12px; padding: 14px; border-radius: 16px;
  border: 1px solid rgba(232,182,74,0.55);
  background: linear-gradient(135deg, color-mix(in srgb, var(--painel) 70%, #4a3410), var(--painel));
  box-shadow: 0 0 24px rgba(232,182,74,0.18);
}
.recomp-banner::before {
  content: ""; position: absolute; top: 0; bottom: 0; width: 40%; left: -60%;
  background: linear-gradient(100deg, transparent, rgba(255,230,160,0.18), transparent);
  animation: recomp-reflexo 2.8s ease-in-out infinite;
}
@keyframes recomp-reflexo { to { left: 130%; } }
.recomp-banner-texto { position: relative; display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
.recomp-banner-texto b { display: block; color: var(--ouro); font-family: var(--fonte-display); }
.recomp-banner-texto span { color: var(--tinta-fraca); font-size: var(--t-pequeno); }
.recomp-banner-icone { font-size: 34px; animation: recomp-balanco 2.2s ease-in-out infinite; }
@keyframes recomp-balanco { 0%, 100% { transform: rotate(-6deg); } 50% { transform: rotate(6deg) scale(1.06); } }
.recomp-banner .botao-holofote { position: relative; width: 100%; }

@media (prefers-reduced-motion: reduce) {
  .recomp-card, .recomp-card::before, .recomp-raios, .recomp-icone, .recomp-nivel, .recomp-item,
  .recomp-banner::before, .recomp-banner-icone { animation: none !important; opacity: 1; transform: none; }
}

/* 📈 (28/09) bônus de raridade no quadrinho do equipamento da Ficha */
.equip-slot-bonus { font-size: 10px; color: var(--ouro); margin-top: 2px; line-height: 1.2; }

/* 👤 (28/09) ficha: habilidades e especialidades equipadas */
.ficha-lista { display: flex; flex-direction: column; gap: 8px; margin-bottom: 16px; }
.ficha-linha {
  display: flex; align-items: center; gap: 10px; padding: 9px 11px;
  background: var(--painel); border: 1px solid var(--painel-borda); border-radius: 12px;
}
.ficha-linha-icone { flex: 0 0 auto; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; font-size: 22px; }
.ficha-linha-txt { min-width: 0; flex: 1; }
.ficha-linha-nome { font-weight: 700; color: var(--tinta); font-size: var(--t-corpo); }
.ficha-linha-sub { font-size: var(--t-pequeno); color: var(--tinta-fraca); line-height: 1.4; margin-top: 2px; }
/* perfil de outro jogador */
.perfil-voltar { width: auto !important; padding: 6px 14px; margin-bottom: 10px; }
.abre-perfil { cursor: pointer; }
.abre-perfil:focus-visible { outline: 2px solid var(--mana); outline-offset: 2px; }
.ranking-seta { margin-left: 8px; color: var(--tinta-fraca); font-size: var(--t-sub); }

/* 🛡️ (04/10/2026) escudo embaixo da vida, na batalha da Torre e da Raid */
.combate-vs-lado .marca-escudo { font-size: 12px; font-weight: 700; text-align: center; margin-top: 2px; font-variant-numeric: tabular-nums; }

/* 🏷️ (04/10/2026) tags do monstro, embaixo do nome do alvo */
.combate-tags { display: flex; flex-wrap: wrap; gap: 4px; justify-content: center; margin: 2px 0 4px; }
.combate-tag { font-size: 11px; line-height: 1.2; padding: 3px 7px; min-height: 0; border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--ouro) 45%, transparent); background: color-mix(in srgb, var(--ouro) 12%, transparent);
  color: inherit; cursor: pointer; }
.combate-afinidade { display: block; margin: 0 auto 4px; font-size: 11px; padding: 2px 8px; min-height: 0;
  border: 0; background: none; color: var(--texto-fraco, inherit); cursor: pointer; }


/* 🏆 (09/10) há quanto tempo cada um foi visto */
.ranking-visto { font-size: 11px; opacity: .65; font-weight: 400; }
.ranking-visto.online { color: #6fdc8c; opacity: 1; }
.podio-col .ranking-visto { text-align: center; margin-top: 2px; }

/* 💬 (09/10) chat geral */
.chat-lista { display: flex; flex-direction: column; gap: 8px; max-height: 55vh; overflow-y: auto;
  padding: 10px; border-radius: 12px; background: rgba(0,0,0,.25); margin-bottom: 10px; }
.chat-msg { padding: 8px 10px; border-radius: 10px; background: rgba(255,255,255,.05); max-width: 88%; }
.chat-msg.minha { align-self: flex-end; background: rgba(232,185,74,.14); }
.chat-msg-topo { display: flex; justify-content: space-between; gap: 10px; font-size: 12px; margin-bottom: 2px; }
.chat-msg-nome { font-weight: 700; color: #e8b94a; cursor: pointer; }
.chat-msg-hora { opacity: .55; white-space: nowrap; }
.chat-msg-texto { word-break: break-word; white-space: pre-wrap; }
.chat-form { display: flex; gap: 8px; }
.chat-campo { flex: 1; margin: 0; min-width: 0; }
.chat-enviar { width: auto; margin: 0; padding: 0 16px; }


/* 🥋 (09/10) chave do torneio */
.torneio-chave { display: flex; flex-direction: column; gap: 6px; margin: 12px 0; }
.torneio-luta { display: flex; gap: 10px; align-items: center; padding: 9px 12px; border-radius: 10px;
  background: rgba(255,255,255,.04); opacity: .6; }
.torneio-luta.vencida { opacity: .85; }
.torneio-luta.atual { opacity: 1; background: rgba(232,185,74,.15); outline: 1px solid rgba(232,185,74,.5); font-weight: 700; }
.torneio-luta-icone { width: 22px; text-align: center; }

/* 🔥 (10/10) elemento do monstro: símbolo + "?" */
.combate-elemento { display: flex; align-items: center; justify-content: center; gap: 6px; margin-top: 4px; }
.combate-elemento-icone { font-size: 20px; line-height: 1; }
.combate-elemento-icone { background: none; border: none; padding: 0; min-height: 0; cursor: pointer; }
.titulo-luta { position: relative; }
.titulo-luta-guia { position: absolute; right: 0; top: 50%; transform: translateY(-50%); width: 30px; height: 30px;
  min-height: 0; padding: 0; border-radius: 50%; border: 2px solid var(--ouro, #e8b94a); background: transparent;
  color: var(--ouro, #e8b94a); font-weight: 900; font-size: 16px; line-height: 1; cursor: pointer; }
.guia-sub { margin: 14px 0 6px; color: var(--ouro, #e8b94a); }
.guia-item { display: flex; gap: 10px; align-items: flex-start; padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,.06); }
.guia-emoji { font-size: 22px; width: 28px; text-align: center; flex: none; }
.guia-nome { font-weight: 800; }
