/* Cuca Fresca — pagina de jogo para quem chega do Instagram.
   Diferente de ativos/site.css: aqui nao e um site que se rola, e uma tela so,
   de altura fixa, que troca de cena. As cores e as fontes sao as mesmas do app
   (src/tema.ts) e da landing, para a pessoa nao sentir que trocou de produto. */

:root {
  --bg: #FDF4E7;
  --card: #FFFFFF;
  --ink: #33304A;
  --muted: #645F80;
  --line: #EFE3CF;
  --ac1: #FF5D5D;
  --ac2: #00B8A9;
  --ac3: #FFB800;
  --ac4: #7B61FF;
  --rosa: #F04E98;
  --verde: #3EC97E;
  --azul: #5C9DFF;

  --raio: 20px;
  --sombra: 0 3px 0 rgba(51, 48, 74, 0.10);
  --sombra-alta: 0 10px 30px rgba(51, 48, 74, 0.18);

  /* Respiro das bordas do aparelho, somado ao entalhe quando existir. */
  --borda-tela: 18px;
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg: #1E1B2E;
    --card: #282443;
    --ink: #F4F1FF;
    --muted: #ABA5C6;
    --line: #383357;
    --sombra: 0 3px 0 rgba(0, 0, 0, 0.30);
    --sombra-alta: 0 10px 30px rgba(0, 0, 0, 0.45);
  }
}

* { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  /* Um jogo nao pode ser interrompido pelo "puxar para atualizar" do Chrome
     nem pelo balanco elastico do Safari quando o dedo passa do tabuleiro. */
  overscroll-behavior: none;
  height: 100%;
}

body {
  margin: 0;
  min-height: 100%;
  background: var(--bg);
  color: var(--ink);
  font-family: Nunito, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  overscroll-behavior: none;
  /* Sem realce azul ao tocar: o feedback de toque e feito no CSS, com escala. */
  -webkit-tap-highlight-color: transparent;
}

h1, h2, h3 {
  font-family: "Baloo 2", Nunito, system-ui, sans-serif;
  font-weight: 800;
  line-height: 1.12;
  margin: 0;
}

button { font-family: inherit; }

/* ── Moldura da tela ──────────────────────────────────────────────────────
   100dvh acompanha a barra do navegador que some e volta no celular; o svh
   entra antes como piso para os navegadores que ainda nao tem dvh, e o vh
   fica de ultimo recurso. Sem isso o rodape some atras da barra do Safari. */

.aplicativo {
  min-height: 100vh;
  min-height: 100svh;
  min-height: 100dvh;
  display: flex;
  flex-direction: column;
  max-width: 560px;
  margin: 0 auto;
  padding:
    calc(env(safe-area-inset-top, 0px) + 10px)
    calc(env(safe-area-inset-right, 0px) + var(--borda-tela))
    calc(env(safe-area-inset-bottom, 0px) + 10px)
    calc(env(safe-area-inset-left, 0px) + var(--borda-tela));
}

/* ── Barra de cima: marca, nivel e cronometro ────────────────────────────── */

.barra {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 44px;
  flex: none;
}

.barra .marca {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: "Baloo 2", sans-serif;
  font-weight: 800;
  font-size: 16px;
  color: var(--ink);
  text-decoration: none;
  margin-right: auto;
}
.barra .marca img { width: 28px; height: 28px; border-radius: 9px; display: block; }
.barra .marca .texto-marca span { color: var(--ac1); }

/* Com os dois medidores no ar, "Cuca Fresca" + pontos + tempo + som nao cabem
   em 360px de largura, e o botao de som era empurrado para fora da tela.
   Durante a partida sobra so o icone, que continua levando para a landing. */
.barra.jogando .marca .texto-marca { display: none; }

.medidor {
  display: none;
  align-items: center;
  gap: 8px;
  background: var(--card);
  box-shadow: var(--sombra);
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 14px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.medidor.visivel { display: inline-flex; }
.medidor .rotulo { color: var(--muted); font-size: 12px; text-transform: uppercase; letter-spacing: .05em; }

/* Aparelho estreito: encolhe o medidor antes de deixar qualquer coisa vazar. */
@media (max-width: 380px) {
  .medidor { padding: 6px 10px; gap: 5px; font-size: 13px; }
  .medidor .rotulo { font-size: 10.5px; }
  .barra { gap: 7px; }
}

/* Desligar o som tem que estar sempre a um toque: metade do publico do
   Instagram abre a pagina em lugar publico, e um bip inesperado fecha a aba. */
.botao-som {
  -webkit-appearance: none;
  appearance: none;
  border: 0;
  background: var(--card);
  box-shadow: var(--sombra);
  border-radius: 999px;
  width: 38px; height: 38px;
  font-size: 16px;
  line-height: 1;
  cursor: pointer;
  touch-action: manipulation;
  flex: none;
}
.botao-som:active { transform: translateY(2px); }

/* O cronometro fica vermelho e pulsa nos ultimos 10 segundos. Sem som: a
   pessoa pode estar no meio da rua com o celular no silencioso. */
#relogio { color: var(--ink); }
#relogio.apertando { color: var(--ac1); animation: pulso .9s ease-in-out infinite; }

@keyframes pulso {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.14); }
}

/* Barra de progresso dos dois niveis, logo abaixo da barra de cima. */
.trilha {
  display: flex;
  gap: 6px;
  margin: 10px 0 0;
  flex: none;
}
.trilha span {
  flex: 1;
  height: 5px;
  border-radius: 999px;
  background: var(--line);
  overflow: hidden;
}
.trilha span::after {
  content: "";
  display: block;
  height: 100%;
  width: 0;
  border-radius: 999px;
  background: var(--ac2);
  transition: width .5s ease;
}
.trilha span.feito::after { width: 100%; }
.trilha span.agora::after { width: 45%; background: var(--ac3); }

/* ── Cenas ───────────────────────────────────────────────────────────────
   Todas ocupam o mesmo espaco; so a que tem .ativa aparece. Assim a pagina
   nunca "pula" de altura entre um nivel e outro. */

.palco {
  flex: 1 1 auto;
  display: flex;
  min-height: 0;
  position: relative;
}

.cena {
  display: none;
  flex: 1 1 auto;
  flex-direction: column;
  min-height: 0;
  animation: entrar .32s ease both;
}
.cena.ativa { display: flex; }

@keyframes entrar {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: none; }
}

.cena.centrada {
  justify-content: center;
  align-items: center;
  text-align: center;
  gap: 4px;
}

/* ── Abertura ────────────────────────────────────────────────────────────── */

.icone-grande {
  width: 96px; height: 96px;
  border-radius: 24px;
  box-shadow: var(--sombra-alta);
  display: block;
  margin-bottom: 20px;
}

.cena h1 { font-size: clamp(28px, 8.5vw, 40px); margin-bottom: 10px; }
.cena h2 { font-size: clamp(24px, 7vw, 32px); margin-bottom: 8px; }

.linha-fina {
  color: var(--muted);
  font-size: 15.5px;
  font-weight: 700;
  max-width: 30ch;
  margin: 0 auto 6px;
}

.selos {
  display: flex; flex-wrap: wrap; gap: 8px; justify-content: center;
  margin: 18px 0 0;
}
.selo {
  background: var(--card);
  box-shadow: var(--sombra);
  border-radius: 999px;
  padding: 7px 14px;
  font-size: 12.5px;
  font-weight: 900;
  color: var(--muted);
}

/* ── Botoes ──────────────────────────────────────────────────────────────── */

.botao {
  -webkit-appearance: none;
  appearance: none;
  border: 0;
  display: block;
  width: 100%;
  background: var(--ac1);
  color: #fff;
  border-radius: 18px;
  padding: 17px 24px;
  font-weight: 900;
  font-size: 17.5px;
  box-shadow: 0 4px 0 rgba(51, 48, 74, 0.16);
  cursor: pointer;
  text-decoration: none;
  text-align: center;
  /* Corta o atraso de 300ms do duplo-toque sem desligar o zoom da pagina. */
  touch-action: manipulation;
  transition: transform .09s ease, box-shadow .09s ease;
}
.botao:active { transform: translateY(3px); box-shadow: 0 1px 0 rgba(51, 48, 74, 0.16); }
.botao.grande { font-size: 19px; padding: 19px 24px; }
.botao.verde { background: var(--ac2); }
.botao.roxo  { background: var(--ac4); }
.botao.fantasma {
  background: transparent;
  color: var(--muted);
  box-shadow: none;
  font-size: 15px;
  padding: 12px;
  font-weight: 800;
}
.botao.fantasma:active { transform: none; }

.rodape-acao { flex: none; padding-top: 16px; display: grid; gap: 8px; }

/* ── Tabuleiro da memoria ────────────────────────────────────────────────── */

.cena-jogo { gap: 10px; padding-top: 12px; }

.aviso-nivel {
  flex: none;
  text-align: center;
  color: var(--muted);
  font-size: 14px;
  font-weight: 800;
  min-height: 21px;
}
.aviso-nivel b { color: var(--ac2); }

.memoria {
  flex: 1 1 auto;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(4, 1fr);
  gap: 10px;
  min-height: 0;
  align-content: stretch;
}

.carta {
  -webkit-appearance: none;
  appearance: none;
  border: 0;
  padding: 0;
  background: transparent;
  position: relative;
  border-radius: 18px;
  cursor: pointer;
  touch-action: manipulation;
  perspective: 700px;
  min-height: 0;
}

.carta .face {
  position: absolute;
  inset: 0;
  border-radius: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: "Baloo 2", sans-serif;
  font-weight: 800;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  transition: transform .3s ease;
}

.carta .verso {
  background: var(--card);
  box-shadow: var(--sombra);
  color: var(--line);
  font-size: 26px;
  transform: rotateY(0deg);
}
.carta .frente {
  color: #fff;
  font-size: clamp(20px, 7vw, 30px);
  box-shadow: var(--sombra);
  transform: rotateY(180deg);
}
.carta .frente.miudo { font-size: clamp(14px, 4.6vw, 20px); }

.carta.virada .verso  { transform: rotateY(-180deg); }
.carta.virada .frente { transform: rotateY(0deg); }

.carta.casada { cursor: default; }
.carta.casada .frente { animation: casou .42s ease; }
@keyframes casou {
  0%   { transform: rotateY(0) scale(1); }
  45%  { transform: rotateY(0) scale(1.14); }
  100% { transform: rotateY(0) scale(.94); opacity: .55; }
}
.carta.casada .frente { opacity: .55; transform: rotateY(0) scale(.94); }

.carta.errou { animation: tremer .34s ease; }
@keyframes tremer {
  0%, 100% { transform: translateX(0); }
  25%      { transform: translateX(-6px); }
  75%      { transform: translateX(6px); }
}

/* ── Grade do caca-palavras ──────────────────────────────────────────────── */

.encaixe-caca {
  flex: 1 1 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 0;
}

.caca {
  width: min(100%, 62vh);
  aspect-ratio: 1 / 1;
  background: var(--line);
  border-radius: 20px;
  padding: 7px;
  display: grid;
  grid-template-columns: repeat(var(--lado, 8), 1fr);
  grid-template-rows: repeat(var(--lado, 8), 1fr);
  gap: 3px;
  /* O dedo arrasta por cima das letras; sem isso o gesto viraria rolagem. */
  touch-action: none;
  user-select: none;
  -webkit-user-select: none;
}

.letra {
  border-radius: 8px;
  background: var(--card);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: "Baloo 2", sans-serif;
  font-weight: 800;
  font-size: clamp(12px, 3.6vw, 19px);
  color: var(--ink);
  transition: background .12s ease, color .12s ease, transform .12s ease;
}

/* A casa sob o dedo durante o arrasto. */
.letra.mirando { background: var(--ac4); color: #fff; transform: scale(1.06); }

/* Palavra achada: fica com a cor dela, aplicada pelo JS no style. */
.letra.achada { color: #fff; }

/* Selecao que nao era palavra nenhuma. */
.letra.errou { animation: tremer .34s ease; background: var(--ac1); color: #fff; }

/* Quando o tempo acaba, as que faltaram aparecem contornadas. */
.letra.revelada { box-shadow: 0 0 0 2px var(--ac3) inset; color: var(--ac3); }

/* ── Lista de palavras ───────────────────────────────────────────────────── */

.palavras {
  flex: none;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  justify-content: center;
  margin: 10px 0 0;
}

.palavra {
  background: var(--card);
  border: 2px solid var(--line);
  border-radius: 999px;
  padding: 4px 12px;
  font-size: 12.5px;
  font-weight: 900;
  letter-spacing: .03em;
  color: var(--muted);
  transition: opacity .2s ease;
}
.palavra.riscada { text-decoration: line-through; opacity: .5; }

/* ── Nivel 3: a prateleira trancada ──────────────────────────────────────── */

.vitrine {
  position: relative;
  border-radius: var(--raio);
  overflow: hidden;
  background: var(--card);
  box-shadow: var(--sombra);
  padding: 18px;
  margin: 4px 0 18px;
  width: 100%;
}

.formas {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  filter: blur(3px);
  opacity: .55;
  pointer-events: none;
}
.forma {
  aspect-ratio: 1 / 1;
  border-radius: 14px;
  background: var(--bg);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 26px;
  color: var(--muted);
}
.forma.cheia { color: #fff; }

.cadeado {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6px;
  background: linear-gradient(to bottom, rgba(253, 244, 231, .35), rgba(253, 244, 231, .92));
  font-weight: 900;
}
@media (prefers-color-scheme: dark) {
  .cadeado { background: linear-gradient(to bottom, rgba(40, 36, 67, .35), rgba(40, 36, 67, .94)); }
}
.cadeado .simbolo { font-size: 30px; line-height: 1; }
.cadeado .texto { font-size: 14px; color: var(--muted); }

/* ── Placar final ────────────────────────────────────────────────────────── */

.placar {
  display: flex;
  gap: 10px;
  width: 100%;
  margin: 0 0 18px;
}
.placar div {
  flex: 1;
  background: var(--card);
  box-shadow: var(--sombra);
  border-radius: 16px;
  padding: 12px 8px;
}
.placar strong {
  display: block;
  font-family: "Baloo 2", sans-serif;
  font-size: 23px;
  color: var(--ac4);
  font-variant-numeric: tabular-nums;
}
.placar small { font-size: 11.5px; color: var(--muted); font-weight: 800; text-transform: uppercase; letter-spacing: .04em; }

/* ── Botoes das lojas ────────────────────────────────────────────────────── */

.lojas { display: grid; gap: 10px; width: 100%; }

.loja {
  -webkit-appearance: none;
  appearance: none;
  border: 0;
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  background: var(--ink);
  color: #fff;
  border-radius: 18px;
  padding: 13px 20px;
  text-align: left;
  text-decoration: none;
  cursor: pointer;
  touch-action: manipulation;
  box-shadow: 0 4px 0 rgba(51, 48, 74, 0.16);
  transition: transform .09s ease, box-shadow .09s ease;
}
.loja:active { transform: translateY(3px); box-shadow: 0 1px 0 rgba(51, 48, 74, 0.16); }
@media (prefers-color-scheme: dark) {
  .loja { background: var(--card); box-shadow: 0 4px 0 rgba(0, 0, 0, .35); }
}
.loja svg { width: 26px; height: 26px; flex: none; fill: currentColor; }
.loja .dizeres { display: flex; flex-direction: column; line-height: 1.15; }
.loja .dizeres small { font-size: 11.5px; opacity: .72; font-weight: 800; }
.loja .dizeres strong { font-family: "Baloo 2", sans-serif; font-size: 17px; font-weight: 800; }

/* Enquanto o app nao esta na loja, o botao continua contando o toque —
   e por isso que ele e um <button> e nao um <a> desde o inicio. */
.loja.em-breve { opacity: .62; }
.loja.em-breve .dizeres small::after { content: " · em breve"; }

/* ── Barra de download, presente em todas as cenas ───────────────────────── */

.baixar-fixo {
  flex: none;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin-top: 12px;
}
.baixar-fixo.escondida { display: none; }

/* Versao apertada do botao: so o icone e o nome da loja. O "Baixar no" fica
   fora porque, a essa altura da tela, duas linhas por botao roubam altura do
   tabuleiro sem dizer nada de novo. */
.loja.compacta { padding: 10px 12px; gap: 8px; justify-content: center; }
.loja.compacta svg { width: 20px; height: 20px; }
.loja.compacta .cartaz { display: none; }
.loja.compacta .dizeres strong { font-size: 14.5px; }

@media (max-width: 340px) {
  .loja.compacta .dizeres strong { font-size: 13px; }
  .loja.compacta { padding: 9px 8px; gap: 6px; }
}

/* ── Rodape com os contadores ────────────────────────────────────────────── */

.rodape {
  flex: none;
  padding: 14px 0 2px;
  margin-top: 10px;
  border-top: 1px solid var(--line);
  color: var(--muted);
  font-size: 12.5px;
  font-weight: 700;
  text-align: center;
}

.contadores {
  display: flex;
  justify-content: center;
  gap: 8px;
  flex-wrap: wrap;
  margin: 0 0 8px;
  /* Some por inteiro se a API nao responder: melhor nada do que "0 visitas". */
  visibility: hidden;
}
.contadores.visivel { visibility: visible; }

.contadores span {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  background: var(--card);
  box-shadow: var(--sombra);
  border-radius: 999px;
  padding: 5px 11px;
  font-size: 12px;
}
.contadores b {
  font-family: "Baloo 2", sans-serif;
  font-size: 14px;
  color: var(--ink);
  font-variant-numeric: tabular-nums;
}
.contadores i { font-style: normal; }

.rodape nav { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; margin-bottom: 6px; }
.rodape a { color: var(--muted); text-decoration: none; font-weight: 800; }
.rodape a:hover, .rodape a:focus-visible { color: var(--ac1); text-decoration: underline; }

/* ── Aviso flutuante (o "em breve" das lojas) ────────────────────────────── */

/* Nasce em cima, e nao embaixo: na tela final os botoes das lojas ficam na
   parte de baixo, e um aviso flutuante ali taparia justamente o que a pessoa
   precisa tocar. */
.aviso {
  position: fixed;
  left: 50%;
  top: calc(env(safe-area-inset-top, 0px) + 14px);
  transform: translate(-50%, -160%);
  z-index: 40;
  max-width: min(92vw, 420px);
  background: var(--ink);
  color: var(--bg);
  border-radius: 16px;
  padding: 13px 18px;
  font-size: 14px;
  font-weight: 800;
  text-align: center;
  box-shadow: var(--sombra-alta);
  transition: transform .3s cubic-bezier(.2, .9, .3, 1.2);
}
.aviso.visivel { transform: translate(-50%, 0); }
.aviso a { color: var(--ac3); }

/* ── Acessibilidade ──────────────────────────────────────────────────────── */

:focus-visible { outline: 3px solid var(--ac4); outline-offset: 3px; border-radius: 6px; }

.so-leitor {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* Quem pediu menos animacao no sistema recebe o jogo inteiro, sem o balanco. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
  }
  .carta .face { transition: none; }
}

/* Telas baixas (iPhone SE deitado no bolso, Android pequeno): aperta os vaos
   para o tabuleiro nunca vazar para fora da dobra. */
@media (max-height: 680px) {
  .icone-grande { width: 72px; height: 72px; margin-bottom: 12px; }
  .cena h1 { font-size: clamp(24px, 7.5vw, 32px); }
  .botao { padding: 14px 20px; font-size: 16.5px; }
  .vitrine { padding: 12px; margin-bottom: 12px; }
  .placar { margin-bottom: 12px; }
  .selos { margin-top: 12px; }
}
