/* Identidade visual da landpage do Quady (CLAUDE.md, seção 2) com o padrão
   visual aprovado em 2026-11-03 (docs/design/padrao-visual-mesclado.html):
   esportes se alternando no hero, borda do ticket
   que acende seguindo o ponteiro, borda em movimento no CTA da chamada
   final, título surgindo palavra por palavra, placar em Big Shoulders e a
   quadra com pino na seção de vaga garantida.

   Regras de movimento: no máximo uma animação contínua por seção visível,
   entradas rodam uma vez e prefers-reduced-motion deixa tudo parado. Nada
   nasce escondido esperando script: sem JS a página aparece inteira. */

:root {
  --bg: #08201f;
  --field: #0d2b2a;
  --surface: #123b39;
  --surface-hi: #17453f;
  --chalk: #f4f6f1;
  --muted: #8fb0a6;
  --ball: #c6f135;
  --ball-ink: #16311b;
  --miss: #ff7a59;
  --line: rgba(244, 246, 241, 0.14);
  --ball-soft: rgba(198, 241, 53, 0.35);
  --radius: 6px;
  --display: "Big Shoulders Display", "Arial Narrow", Impact, sans-serif;
  --notch-bg: var(--bg);
  color-scheme: dark;
}

/* Barras de rolagem na cor do site (horizontal e vertical), igual ao app. */
* {
  scrollbar-width: thin;
  scrollbar-color: var(--surface-hi) transparent;
}
*::-webkit-scrollbar {
  width: 8px;
  height: 6px;
}
*::-webkit-scrollbar-track {
  background: transparent;
}
*::-webkit-scrollbar-thumb {
  background: var(--surface-hi);
  border-radius: var(--radius);
  border: 1px solid var(--line);
}
*::-webkit-scrollbar-thumb:hover {
  background: var(--muted);
}
*::-webkit-scrollbar-button,
*::-webkit-scrollbar-corner {
  display: none;
  background: transparent;
}

/* Ângulo da luz da borda (ticket que acende e CTA de borda móvel). Sem
   suporte a @property o gradiente só fica parado, nada quebra. */
@property --a {
  syntax: "<angle>";
  inherits: true;
  initial-value: 40deg;
}

* {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  background: var(--bg);
  color: var(--chalk);
  font-family:
    "Inter",
    ui-sans-serif,
    system-ui,
    -apple-system,
    BlinkMacSystemFont,
    "Segoe UI",
    sans-serif;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

img {
  max-width: 100%;
  display: block;
}

a {
  color: inherit;
}

button,
a {
  -webkit-tap-highlight-color: transparent;
}

/* clip (e não hidden): não vira contêiner de rolagem, então o cabeçalho e
   o índice das páginas internas continuam sticky. Fica no .page e no main
   (não no body: no body o clip passa pro viewport e não segura a largura). */
.page,
main {
  overflow-x: clip;
}

.page {
  min-height: 100vh;
}

.container {
  width: min(1120px, calc(100% - 32px));
  margin: 0 auto;
}

/* ---------------------------------------------------------------------------
   Cabeçalho e navegação
   ------------------------------------------------------------------------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 20;
  border-bottom: 1px solid var(--line);
  background: rgba(8, 32, 31, 0.86);
  backdrop-filter: blur(18px);
}

.site-nav {
  display: flex;
  min-height: 72px;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
}

.brand {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  text-decoration: none;
}

.brand img {
  width: 34px;
  height: 34px;
  border-radius: var(--radius);
}

.wordmark {
  font-family: var(--display);
  font-size: 28px;
  font-weight: 800;
  letter-spacing: 0;
  line-height: 1;
}

.wordmark span {
  color: var(--ball);
}

.nav-links {
  display: flex;
  align-items: center;
  gap: 6px;
}

.nav-links a {
  border-radius: var(--radius);
  color: var(--muted);
  font-size: 14px;
  font-weight: 600;
  padding: 9px 12px;
  text-decoration: none;
}

.nav-links a:hover,
.nav-links a[aria-current="page"] {
  background: rgba(244, 246, 241, 0.08);
  color: var(--chalk);
}

/* Botão "Entrar no app" compacto e botão de menu: só no celular (ver o
   bloco de 900px em Responsivo). No desktop a barra de links fica igual. */
.site-nav .nav-cta-curto,
.menu-btn {
  display: none;
}

.menu-btn {
  align-items: center;
  background: transparent;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  color: var(--chalk);
  cursor: pointer;
  flex: none;
  height: 44px;
  justify-content: center;
  padding: 0;
  width: 44px;
}

.menu-btn:hover {
  background: rgba(244, 246, 241, 0.08);
}

.menu-btn svg.ic {
  height: 22px;
  width: 22px;
}

.menu-btn .menu-ic-fechar,
.menu-btn[aria-expanded="true"] .menu-ic-abrir {
  display: none;
}

.menu-btn[aria-expanded="true"] .menu-ic-fechar {
  display: block;
}

/* ---------------------------------------------------------------------------
   Botões
   ------------------------------------------------------------------------- */
.btn {
  align-items: center;
  border: 0;
  border-radius: var(--radius);
  cursor: pointer;
  display: inline-flex;
  font-family: inherit;
  font-size: 15px;
  font-weight: 700;
  gap: 8px;
  justify-content: center;
  min-height: 46px;
  padding: 0 18px;
  text-decoration: none;
  white-space: nowrap;
}

.btn svg {
  flex: none;
  height: 18px;
  width: 18px;
}

.btn-primary,
.nav-links .btn-primary {
  background: var(--ball);
  color: var(--ball-ink);
}

.btn-primary:hover,
.nav-links .btn-primary:hover {
  background: var(--ball);
  color: var(--ball-ink);
  filter: brightness(1.06);
}

.btn-secondary {
  border: 1px solid var(--line);
  color: var(--chalk);
}

.btn-secondary:hover {
  border-color: var(--muted);
}

/* CTA do hero: mesmo visual escuro com moldura verde-limão da borda em
   movimento, só que parado (o hero já tem a troca de esportes). */
.btn-contorno {
  background: var(--field);
  box-shadow: inset 0 0 0 1.5px var(--ball);
  color: var(--ball);
}

.btn-contorno:hover {
  background: var(--surface);
}

/* CTA com borda em movimento (Moving Border): a moldura tem um arco
   verde-limão girando por trás de um botão escuro. Fica na chamada final
   (e no botão de pagar da demo); no hero a animação contínua é a troca de
   esportes. Parada com prefers-reduced-motion. */
.borda-viva {
  background: var(--ball-soft);
  border-radius: var(--radius);
  display: inline-flex;
  isolation: isolate;
  overflow: hidden;
  padding: 1.5px;
  position: relative;
}

.borda-viva::before {
  animation: gira 3.2s linear infinite;
  background: conic-gradient(
    from var(--a),
    transparent 0 280deg,
    var(--ball) 330deg,
    transparent 360deg
  );
  content: "";
  inset: -60%;
  position: absolute;
  z-index: -1;
}

.borda-viva > .btn,
.borda-viva > .btn-app {
  background: var(--field);
  border-radius: calc(var(--radius) - 1px);
  color: var(--ball);
  width: 100%;
}

.borda-viva > .btn:hover {
  background: var(--surface);
}

@keyframes gira {
  to {
    --a: 400deg;
  }
}

/* Botões das lojas de app, abaixo do CTA principal. O logo do Google Play
   mantém as cores oficiais; o da Apple segue a cor do texto. */
.store-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 12px;
}

.btn-store {
  background: var(--surface);
  border: 1px solid var(--line);
  color: var(--chalk);
}

.btn-store .store-logo {
  height: 22px;
  width: 22px;
}

.store-breve {
  border: 1px solid var(--line);
  border-radius: var(--radius);
  font-size: 12px;
  font-weight: 700;
  padding: 2px 6px;
}

/* Seletor de idioma (bandeiras). O nome do idioma fica no aria-label/title;
   a bandeira é decorativa. A escolhida ganha borda na cor da bola. */
.idiomas {
  align-items: center;
  display: flex;
  gap: 4px;
  margin: 0 4px;
}

.idioma-btn {
  align-items: center;
  background: transparent;
  border: 1px solid transparent;
  border-radius: var(--radius);
  cursor: pointer;
  display: inline-flex;
  height: 40px;
  justify-content: center;
  min-width: 40px;
  opacity: 0.72;
  padding: 0 8px;
}

.idioma-btn svg {
  border-radius: 2px;
  display: block;
  height: 15px;
  width: 22px;
}

.idioma-btn:hover {
  background: rgba(244, 246, 241, 0.08);
  opacity: 1;
}

.idioma-btn[aria-pressed="true"] {
  background: rgba(198, 241, 53, 0.1);
  border-color: var(--ball);
  opacity: 1;
}

.idioma-btn:focus-visible,
.menu-btn:focus-visible,
.nav-links a:focus-visible,
.btn:focus-visible,
.chip:focus-visible,
.mini-btn:focus-visible,
.phone-reset:focus-visible,
.fluxo-aba:focus-visible,
.voltar:focus-visible,
.legal-aside a:focus-visible,
.footer-links a:focus-visible,
.card-link:focus-visible {
  outline: 2px solid var(--ball);
  outline-offset: 2px;
}

/* Enquanto o dicionário en/es não chega, o corpo fica escondido pra não
   piscar o português (assets/i18n.js tira a classe; tem limite de espera). */
.i18n-pendente body {
  visibility: hidden;
}

/* Aviso nas versões en/es das páginas legais: o texto em português vale. */
.aviso-traducao {
  background: var(--surface);
  border: 1px solid var(--line);
  border-left: 4px solid var(--ball);
  border-radius: var(--radius);
  color: var(--chalk);
  font-size: 15px;
  margin: 0 0 28px;
  max-width: 720px;
  padding: 12px 16px;
}

/* ---------------------------------------------------------------------------
   Tipografia
   ------------------------------------------------------------------------- */
h1,
h2,
h3 {
  font-family: var(--display);
  letter-spacing: 0;
  line-height: 0.95;
  margin: 0;
  text-wrap: balance;
}

h1 {
  font-size: clamp(64px, 11vw, 132px);
  max-width: 760px;
}

h2 {
  font-size: clamp(38px, 6vw, 72px);
}

h3 {
  font-size: 28px;
}

.eyebrow {
  color: var(--ball);
  font-size: 14px;
  font-weight: 700;
  margin: 0 0 14px;
}

.lead {
  color: var(--chalk);
  font-size: clamp(20px, 2.4vw, 28px);
  font-weight: 700;
  margin: 20px 0 0;
  max-width: 640px;
}

.support {
  color: var(--muted);
  font-size: 17px;
  margin: 16px 0 0;
  max-width: 630px;
}

.num {
  color: var(--ball);
  display: block;
  font-family: var(--display);
  font-size: 42px;
  font-weight: 800;
  line-height: 1;
}

/* ---------------------------------------------------------------------------
   Efeitos compartilhados
   ------------------------------------------------------------------------- */

/* Borda que acende seguindo o ponteiro (Glowing Effect). Fraca em repouso
   (.calmo); o script troca o ângulo --a no pointermove. Sem ponteiro (toque)
   fica só a luz fraca. */
.glow {
  position: relative;
}

.glow::before {
  background: conic-gradient(
    from var(--a),
    transparent 0deg,
    transparent 250deg,
    rgba(198, 241, 53, 0.95) 300deg,
    transparent 350deg
  );
  border-radius: var(--radius);
  content: "";
  inset: -1px;
  -webkit-mask:
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  opacity: 0.85;
  padding: 1.5px;
  pointer-events: none;
  position: absolute;
  transition:
    --a 0.35s ease-out,
    opacity 0.3s;
  z-index: 5;
}

.glow.calmo::before {
  opacity: 0.25;
}

/* Título que surge palavra por palavra (Text Generate). O script quebra o
   texto em palavras e liga .play quando o título entra na tela; sem script
   (ou sem .play) o texto fica inteiro e visível. */
.gera span {
  display: inline-block;
}

.gera.play span {
  animation: gera 0.55s ease-out both;
  animation-delay: calc(var(--i) * 110ms);
}

@keyframes gera {
  from {
    opacity: 0;
    filter: blur(6px);
  }
  to {
    opacity: 1;
    filter: blur(0);
  }
}

/* Ticket: notches nas laterais (a cor vem de --notch-bg, a do fundo onde o
   ticket está) e linha tracejada separando informação da ação. */
.ticket {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  position: relative;
}

.notch {
  inset: 0;
  pointer-events: none;
  position: absolute;
  z-index: 6;
}

.notch::before,
.notch::after {
  background: var(--notch-bg);
  border-radius: 50%;
  content: "";
  height: 14px;
  position: absolute;
  top: calc(var(--notch, 50%) - 7px);
  width: 14px;
}

.notch::before {
  left: -8px;
}

.notch::after {
  right: -8px;
}

.t-corte {
  border-top: 1px dashed var(--line);
  margin: 0 15px;
}

/* Slot vazio: círculo tracejado com pulso sutil (a animação da tela). */
.slot {
  align-items: center;
  background: var(--surface-hi);
  border: 1px solid var(--line);
  border-radius: 50%;
  display: inline-flex;
  flex: none;
  font-family: var(--display);
  font-size: 13px;
  font-weight: 700;
  height: 32px;
  justify-content: center;
  width: 32px;
}

.slot.aberto {
  animation: pulso 2.2s ease-in-out infinite;
  background: transparent;
  border: 2px dashed var(--ball);
  color: var(--ball);
}

.slot.eu {
  background: var(--ball);
  border-color: var(--ball);
  color: var(--ball-ink);
}

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

/* Placar em Big Shoulders na cor da bola. */
.placar {
  border: 1px solid var(--line);
  border-radius: var(--radius);
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.placar > div {
  border-left: 1px solid var(--line);
  padding: 8px 6px;
  text-align: center;
}

.placar > div:first-child {
  border-left: 0;
}

.placar b {
  color: var(--ball);
  display: block;
  font-family: var(--display);
  font-size: 26px;
  font-variant-numeric: tabular-nums;
  font-weight: 800;
  line-height: 1;
}

.placar span {
  color: var(--muted);
  display: block;
  font-size: 10px;
  line-height: 1.3;
  margin-top: 4px;
}

/* Grade da quadra (fundo da seção de vaga garantida e do celular). */
.grade {
  background-image:
    linear-gradient(var(--line) 1px, transparent 1px),
    linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 28px 28px;
  inset: 0;
  -webkit-mask: radial-gradient(ellipse at 50% 0%, #000 20%, transparent 70%);
  mask: radial-gradient(ellipse at 50% 0%, #000 20%, transparent 70%);
  opacity: 0.35;
  pointer-events: none;
  position: absolute;
  z-index: 0;
}

/* Pino no local com ondas (3D Pin, sem depender do mouse). As ondas são a
   animação contínua da seção. */
.pino-area {
  align-items: center;
  display: flex;
  height: 170px;
  justify-content: center;
  perspective: 600px;
  position: relative;
}

.chao {
  border-radius: 50%;
  height: 170px;
  position: absolute;
  transform: rotateX(62deg);
  width: 170px;
}

.chao i {
  animation: onda 3s ease-out infinite;
  border: 1.5px solid var(--ball);
  border-radius: 50%;
  inset: 0;
  opacity: 0;
  position: absolute;
}

.chao i:nth-child(2) {
  animation-delay: 1s;
}

.chao i:nth-child(3) {
  animation-delay: 2s;
}

@keyframes onda {
  from {
    opacity: 0.9;
    transform: scale(0.15);
  }
  to {
    opacity: 0;
    transform: scale(1);
  }
}

.haste {
  background: linear-gradient(var(--ball), transparent);
  height: 62px;
  position: absolute;
  top: 34px;
  width: 1.5px;
}

.pino-rotulo {
  background: var(--surface);
  border: 1px solid var(--ball);
  border-radius: var(--radius);
  font-size: 11.5px;
  font-weight: 600;
  max-width: calc(100% - 16px);
  overflow: hidden;
  padding: 5px 10px;
  position: absolute;
  text-overflow: ellipsis;
  top: 4px;
  white-space: nowrap;
}

/* Linha do tempo dos próximos passos. */
.timeline {
  border-left: 1.5px solid var(--line);
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin: 0 0 0 6px;
  padding: 0 0 0 14px;
  position: relative;
}

.timeline::before {
  background: linear-gradient(var(--ball), transparent);
  content: "";
  height: 45%;
  left: -1.5px;
  position: absolute;
  top: 0;
  width: 1.5px;
}

.timeline > div,
.timeline > li {
  font-size: 11.5px;
  list-style: none;
  position: relative;
}

.timeline > div::before,
.timeline > li::before {
  background: var(--surface-hi);
  border: 1.5px solid var(--muted);
  border-radius: 50%;
  content: "";
  height: 7px;
  left: -19px;
  position: absolute;
  top: 5px;
  width: 7px;
}

.timeline .agora::before {
  background: var(--ball);
  border-color: var(--ball);
}

.timeline b {
  display: block;
  font-size: 12px;
  font-weight: 600;
}

.timeline span {
  color: var(--muted);
}

/* ---------------------------------------------------------------------------
   Hero
   ------------------------------------------------------------------------- */
.hero {
  overflow: hidden;
  padding: 74px 0 84px;
  position: relative;
}

/* Linhas da quadra desenhadas no chão, só no desktop (direção "Quadra
   viva"). Estático: a perspectiva é fixa, não segue o mouse. Ocupa o lado
   direito, que o texto do hero (uma coluna) deixa livre, sem passar por
   baixo do texto. */
.hero-quadra {
  bottom: -150px;
  display: none;
  height: min(940px, 66vw);
  opacity: 0.28;
  pointer-events: none;
  position: absolute;
  right: max(-10px, calc((100vw - 1120px) / 2 - 120px));
  transform: perspective(1200px) rotateX(42deg) rotateZ(-12deg);
  width: min(600px, 42vw);
}

.hero-corpo {
  position: relative;
}

.hero-texto {
  max-width: 780px;
}

.hero h1 {
  font-size: clamp(76px, 12.5vw, 176px);
  line-height: 0.88;
}

/* Esportes se alternando no topo do hero (Flip Words): a palavra sobe e
   sai, a próxima entra por baixo. Única animação contínua do hero; parada
   no primeiro esporte com prefers-reduced-motion. */
.hero-giro {
  color: var(--chalk);
  font-family: var(--display);
  /* Escala com a tela pra frase caber numa linha até em 320px com o
     esporte mais longo: a troca nunca muda a altura do hero. */
  font-size: clamp(26px, calc(4vw + 14px), 52px);
  font-weight: 700;
  line-height: 1.05;
  margin: 0 0 10px;
}

.sport-rotator {
  display: block;
}

.sport-word {
  color: var(--ball);
  display: inline-block;
  font-weight: 800;
  transition:
    opacity 0.3s ease,
    transform 0.3s cubic-bezier(0.3, 1.4, 0.5, 1);
  white-space: nowrap;
}

.sport-word.sai {
  opacity: 0;
  transform: translateY(-45%);
}

.sport-word.entra {
  opacity: 0;
  transform: translateY(45%);
  transition: none;
}

.hero-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 30px;
}

/* ---------------------------------------------------------------------------
   Seções
   ------------------------------------------------------------------------- */
/* Faixa "Fechando agora": partidas reais que acabaram de fechar (API pública
   do app). Nasce com hidden e só aparece com item de verdade. O trilho
   correndo é a animação contínua dessa faixa; pausa no hover/foco/toque e,
   com movimento reduzido, fica parado e rola na mão. */
.fechando {
  align-items: stretch;
  background: var(--field);
  border-bottom: 1px solid var(--line);
  border-top: 1px solid var(--line);
  display: flex;
  min-height: 52px;
}

.fechando[hidden] {
  display: none;
}

.fechando-rotulo {
  align-items: center;
  background: var(--surface);
  border-right: 1px solid var(--line);
  color: var(--chalk);
  display: flex;
  flex: none;
  font-family: var(--display);
  font-size: 20px;
  font-weight: 800;
  gap: 10px;
  padding: 0 18px 0 max(16px, calc((100% - 1120px) / 2));
  white-space: nowrap;
}

.fechando-ponto {
  background: var(--ball);
  border-radius: 50%;
  height: 8px;
  width: 8px;
}

.fechando-janela {
  flex: 1;
  -webkit-mask: linear-gradient(
    90deg,
    transparent,
    #000 6%,
    #000 94%,
    transparent
  );
  mask: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
  min-width: 0;
  overflow: hidden;
}

.fechando-trilho {
  align-items: center;
  display: flex;
  gap: 32px;
  height: 100%;
  list-style: none;
  margin: 0;
  padding: 0 24px;
  width: max-content;
}

.fechando-trilho.corre {
  animation: corre var(--duracao, 30s) linear infinite;
}

.fechando:hover .fechando-trilho,
.fechando:focus-within .fechando-trilho,
.fechando.pausada .fechando-trilho {
  animation-play-state: paused;
}

.fechando-trilho li {
  align-items: center;
  color: var(--muted);
  display: flex;
  font-size: 14px;
  gap: 8px;
  white-space: nowrap;
}

.fechando-trilho i {
  background: var(--ball);
  border-radius: 50%;
  display: inline-block;
  flex: none;
  height: 7px;
  width: 7px;
}

.fechando-trilho b {
  color: var(--chalk);
  font-weight: 600;
}

@keyframes corre {
  to {
    transform: translateX(-50%);
  }
}

@media (prefers-reduced-motion: reduce) {
  .fechando-janela {
    -webkit-mask: none;
    mask: none;
    overflow-x: auto;
  }
}

@media (max-width: 560px) {
  .fechando-rotulo {
    font-size: 17px;
    padding-right: 12px;
  }

  .fechando-trilho li {
    font-size: 13px;
  }
}

.section {
  padding: 84px 0;
  position: relative;
}

.section.alt {
  --notch-bg: var(--field);
  background: var(--field);
}

.section-head {
  align-items: end;
  display: flex;
  gap: 28px;
  justify-content: space-between;
  margin-bottom: 30px;
}

.section-head p {
  color: var(--muted);
  font-size: 16px;
  margin: 0;
  max-width: 430px;
}

.section-head p.eyebrow {
  color: var(--ball);
  font-size: 14px;
  margin-bottom: 14px;
}

.grid-3,
.grid-2 {
  display: grid;
  gap: 16px;
}

.grid-3 {
  grid-template-columns: repeat(3, 1fr);
}

.grid-2 {
  grid-template-columns: repeat(2, 1fr);
}

.info-card,
.faq-item,
.policy-card {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 24px;
}

.info-card .num {
  margin-bottom: 24px;
}

.info-card p,
.faq-item p,
.policy-card p,
.policy-card li {
  color: var(--muted);
}

.info-card p,
.faq-item p,
.policy-card p {
  margin: 10px 0 0;
}

.card-link {
  color: var(--ball);
  display: inline-block;
  font-weight: 700;
  margin-top: 14px;
  text-decoration: none;
}

.card-link:hover {
  text-decoration: underline;
}

/* ---------------------------------------------------------------------------
   Fluxo do app: três celulares (feed, checkout, vaga garantida)
   Só o celular da etapa ativa anima; os outros ficam com a animação pausada,
   assim a seção tem uma animação contínua por vez.
   ------------------------------------------------------------------------- */
.fluxo-abas {
  display: none;
  gap: 8px;
  margin-bottom: 18px;
  scroll-margin-top: 88px;
}

.fluxo-aba {
  align-items: center;
  background: transparent;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  color: var(--muted);
  cursor: pointer;
  display: flex;
  flex: 1 1 0;
  flex-direction: column;
  font-family: inherit;
  font-size: 12px;
  font-weight: 600;
  gap: 2px;
  line-height: 1.2;
  min-height: 64px;
  padding: 8px 6px;
  text-align: center;
}

.fluxo-aba .num {
  font-size: 20px;
}

.fluxo-aba[aria-pressed="true"] {
  background: var(--surface);
  border-color: var(--ball);
  color: var(--chalk);
}

.fones {
  display: grid;
  gap: 28px;
  grid-template-columns: repeat(3, minmax(0, 300px));
  justify-content: center;
}

.fone-col {
  align-items: center;
  display: flex;
  flex-direction: column;
  gap: 16px;
  margin: 0;
}

.fone-col:not(.ativo) .fone *,
.fone-col:not(.ativo) .fone *::before {
  animation-play-state: paused;
}

.fone-legenda {
  max-width: 300px;
  width: 100%;
}

.fone-legenda .num {
  font-size: 32px;
  margin-bottom: 8px;
}

.fone-legenda h3 {
  font-size: 26px;
}

.fone-legenda p {
  color: var(--muted);
  font-size: 15px;
  margin: 8px 0 0;
}

.fone-col.ativo .fone-legenda h3 {
  color: var(--ball);
}

.fluxo-rodape {
  align-items: center;
  display: flex;
  flex-wrap: wrap;
  gap: 8px 18px;
  justify-content: center;
  margin-top: 26px;
}

.fluxo-rodape p {
  color: var(--muted);
  font-size: 13px;
  margin: 0;
}

.phone-reset {
  background: transparent;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  color: var(--muted);
  cursor: pointer;
  font-family: inherit;
  font-size: 13px;
  font-weight: 600;
  padding: 6px 12px;
}

.phone-reset:hover {
  border-color: var(--muted);
  color: var(--chalk);
}

/* Celular */
.fone {
  --notch-bg: var(--field);
  background: var(--field);
  border: 1px solid var(--line);
  border-radius: 22px;
  box-shadow: 0 0 0 6px #061816;
  display: flex;
  flex-direction: column;
  height: 640px;
  max-width: 300px;
  overflow: hidden;
  position: relative;
  width: 100%;
}

.fone-col.ativo .fone {
  box-shadow:
    0 0 0 6px #061816,
    0 0 0 7px var(--ball-soft);
}

.fone-status {
  color: var(--chalk);
  display: flex;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  justify-content: space-between;
  padding: 10px 18px 4px;
  position: relative;
  z-index: 3;
}

.fone-corpo {
  display: flex;
  flex: 1;
  flex-direction: column;
  gap: 12px;
  overflow: hidden;
  padding: 6px 14px 12px;
  position: relative;
  z-index: 2;
}

.app-topo {
  align-items: center;
  display: flex;
  justify-content: space-between;
}

.app-topo .wordmark {
  font-size: 19px;
}

.credito {
  border: 1px solid var(--ball-soft);
  border-radius: var(--radius);
  color: var(--ball);
  font-size: 11.5px;
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  padding: 3px 8px;
}

.titulo-tela {
  font-family: var(--display);
  font-size: 30px;
  font-weight: 800;
  line-height: 1;
  margin: 0;
}

.sub {
  color: var(--muted);
  font-size: 12px;
  margin: 2px 0 0;
}

.fone .placar {
  background: var(--bg);
}

.fone .placar b {
  font-size: 24px;
}

.chips {
  display: flex;
  gap: 6px;
}

.chip {
  background: transparent;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  color: var(--muted);
  cursor: pointer;
  flex: 0 0 auto;
  font-family: inherit;
  font-size: 11.5px;
  font-weight: 600;
  padding: 4px 9px;
  white-space: nowrap;
}

.chip.active {
  background: var(--ball);
  border-color: var(--ball);
  color: var(--ball-ink);
}

/* Faixa "fechou há 3 min": ilustração dentro do feed, parada. */
.faixa-demo {
  align-items: center;
  border-bottom: 1px solid var(--line);
  border-top: 1px solid var(--line);
  color: var(--muted);
  display: flex;
  font-size: 11px;
  gap: 6px;
  margin: 0 -14px;
  padding: 7px 14px;
}

.faixa-demo::before {
  background: var(--ball);
  border-radius: 50%;
  content: "";
  flex: none;
  height: 6px;
  width: 6px;
}

.faixa-demo b {
  color: var(--chalk);
  font-weight: 600;
}

.empty-state {
  color: var(--muted);
  font-size: 12px;
  margin: 6px 0;
}

.fone .ticket {
  --notch: 96px;
  flex: none;
}

.t-info {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 13px 15px 11px;
  position: relative;
  z-index: 3;
}

.t-local {
  font-size: 13.5px;
  font-weight: 700;
}

.t-meta {
  color: var(--muted);
  font-size: 11.5px;
}

.slots {
  display: flex;
  gap: 6px;
  margin-top: 6px;
}

.t-acao {
  align-items: center;
  display: flex;
  gap: 10px;
  justify-content: space-between;
  padding: 10px 15px 12px;
  position: relative;
  z-index: 3;
}

.preco {
  font-size: 13px;
  font-variant-numeric: tabular-nums;
  font-weight: 700;
}

.preco small {
  color: var(--muted);
  display: block;
  font-size: 11px;
  font-weight: 500;
}

.mini-btn,
.btn-app {
  background: var(--ball);
  border: 0;
  border-radius: var(--radius);
  color: var(--ball-ink);
  cursor: pointer;
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 700;
  padding: 9px 12px;
  text-align: center;
  white-space: nowrap;
}

.mini-btn:disabled {
  background: var(--surface-hi);
  box-shadow: inset 0 0 0 1px var(--ball);
  color: var(--ball);
  cursor: default;
}

.btn-app.cheio,
.borda-viva > .btn-app {
  display: block;
  font-size: 14px;
  padding: 13px;
  width: 100%;
}

.borda-viva.cheio {
  display: flex;
  width: 100%;
}

/* Barra de navegação do app (ilustração). */
.fone-nav {
  background: var(--field);
  border-top: 1px solid var(--line);
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  padding: 7px 4px 12px;
  position: relative;
  z-index: 3;
}

.fone-nav span {
  align-items: center;
  color: var(--muted);
  display: flex;
  flex-direction: column;
  font-size: 9.5px;
  font-weight: 500;
  gap: 3px;
}

.fone-nav span.on {
  color: var(--ball);
}

svg.ic {
  fill: none;
  height: 19px;
  stroke: currentColor;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 1.7;
  width: 19px;
}

/* Checkout */
.voltar {
  align-items: center;
  align-self: flex-start;
  background: transparent;
  border: 0;
  border-radius: var(--radius);
  color: var(--muted);
  cursor: pointer;
  display: inline-flex;
  font-family: inherit;
  font-size: 12px;
  gap: 6px;
  padding: 0;
}

.voltar svg.ic {
  height: 14px;
  width: 14px;
}

.fone .ticket.co-ticket {
  --notch: 112px;
}

.lista-dados {
  display: flex;
  flex-direction: column;
  font-size: 12px;
  gap: 7px;
  margin: 0;
}

.lista-dados div {
  display: flex;
  gap: 10px;
  justify-content: space-between;
}

.lista-dados dt {
  color: var(--muted);
}

.lista-dados dd {
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  margin: 0;
  text-align: right;
}

.metodos {
  display: grid;
  gap: 8px;
  grid-template-columns: 1fr 1fr;
}

.metodo {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  display: flex;
  flex-direction: column;
  font-size: 12px;
  gap: 4px;
  padding: 10px;
}

.metodo strong {
  align-items: center;
  display: flex;
  font-size: 13px;
  gap: 6px;
}

.metodo svg.ic {
  height: 15px;
  width: 15px;
}

.metodo.on {
  background: var(--surface-hi);
  border-color: var(--ball);
}

.metodo span {
  color: var(--muted);
  font-size: 11px;
}

.aviso {
  border-left: 2px solid var(--ball);
  color: var(--muted);
  font-size: 11.5px;
  margin: 0;
  padding-left: 9px;
}

.empurra {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: auto;
}

/* ---------------------------------------------------------------------------
   Vaga garantida (resultado)
   ------------------------------------------------------------------------- */
.resultado {
  overflow: hidden;
}

.resultado > .grade {
  background-size: 44px 44px;
  -webkit-mask: radial-gradient(ellipse at 70% 40%, #000 15%, transparent 70%);
  mask: radial-gradient(ellipse at 70% 40%, #000 15%, transparent 70%);
  opacity: 0.5;
}

.resultado-grid {
  align-items: center;
  display: grid;
  gap: 52px;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  position: relative;
}

.resultado h2 {
  max-width: 560px;
}

.resultado .timeline {
  gap: 22px;
  margin-top: 34px;
  padding-left: 22px;
}

.resultado .timeline > li {
  font-size: 16px;
}

.resultado .timeline > li::before {
  height: 11px;
  left: -29px;
  top: 6px;
  width: 11px;
}

.resultado .timeline b {
  font-family: var(--display);
  font-size: 26px;
  font-weight: 800;
  line-height: 1.1;
}

.resultado-falta {
  color: var(--muted);
  font-size: 15px;
  margin: 26px 0 0;
}

.resultado-falta strong {
  color: var(--miss);
}

.quadra-palco {
  --notch: 50%;
  --notch-bg: var(--field);
  background: var(--field);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  overflow: hidden;
  padding: 28px 24px 24px;
  position: relative;
}

.quadra-palco .quadra-linhas {
  inset: 18px;
  opacity: 0.3;
  pointer-events: none;
  position: absolute;
}

.quadra-palco .pino-area {
  height: 260px;
}

.quadra-palco .chao {
  height: 260px;
  width: 260px;
}

.quadra-palco .haste {
  height: 96px;
  top: 52px;
}

.quadra-palco .pino-rotulo {
  font-size: 14px;
  padding: 8px 14px;
  top: 10px;
}

.quadra-ticket {
  --notch: 50%;
  align-items: center;
  display: flex;
  gap: 14px;
  justify-content: space-between;
  margin-top: 8px;
  padding: 14px 18px;
  position: relative;
  z-index: 2;
}

.quadra-ticket p {
  color: var(--muted);
  font-size: 13px;
  margin: 0;
}

.quadra-ticket strong {
  color: var(--chalk);
  display: block;
  font-size: 15px;
}

.quadra-ticket .slots {
  margin: 0;
}

/* ---------------------------------------------------------------------------
   Organizador e prova
   ------------------------------------------------------------------------- */
.split {
  align-items: center;
  display: grid;
  gap: 46px;
  grid-template-columns: 0.9fr 1.1fr;
}

.proof-panel {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 8px 28px;
}

.proof-row {
  align-items: center;
  border-bottom: 1px dashed var(--line);
  display: flex;
  gap: 18px;
  justify-content: space-between;
  padding: 20px 0;
}

.proof-row:last-child {
  border-bottom: 0;
}

.proof-row strong {
  display: block;
}

.proof-row span {
  color: var(--muted);
  font-size: 14px;
}

.proof-row .ok,
.proof-row .miss {
  flex: none;
  font-family: var(--display);
  font-size: 26px;
  font-weight: 800;
  line-height: 1;
  text-align: right;
}

.ok {
  color: var(--ball);
}

.miss {
  color: var(--miss);
}

/* ---------------------------------------------------------------------------
   Chamada final
   ------------------------------------------------------------------------- */
.cta-band {
  background: var(--ball);
  color: var(--ball-ink);
  padding: 64px 0;
}

.cta-band .container {
  align-items: center;
  display: flex;
  gap: 26px;
  justify-content: space-between;
}

.cta-band .eyebrow {
  color: var(--ball-ink);
  font-size: 16px;
}

.cta-band p {
  font-size: 18px;
  margin: 12px 0 0;
  max-width: 620px;
}

.cta-band .container > div {
  min-width: 0;
}

.cta-band .btn-primary {
  background: var(--ball-ink);
  color: var(--chalk);
  flex: none;
}

.cta-band .btn-primary:hover {
  background: #0d2415;
  filter: none;
}

.cta-band .btn:focus-visible {
  outline-color: var(--ball-ink);
}

/* Borda em movimento sobre o fundo verde-limão: moldura na cor do botão e
   arco em giz, pra luz aparecer contra a faixa. */
.cta-band .borda-viva {
  background: var(--ball-ink);
  flex: none;
  padding: 2px;
}

.cta-band .borda-viva::before {
  background: conic-gradient(
    from var(--a),
    transparent 0 280deg,
    var(--chalk) 330deg,
    transparent 360deg
  );
}

.cta-band .borda-viva > .btn {
  background: var(--ball-ink);
  color: var(--chalk);
}

.cta-band .borda-viva > .btn:hover {
  background: #0d2415;
}

/* ---------------------------------------------------------------------------
   Rodapé
   ------------------------------------------------------------------------- */
.site-footer {
  border-top: 1px solid var(--line);
  padding: 34px 0;
}

.footer-grid {
  align-items: center;
  display: flex;
  gap: 18px;
  justify-content: space-between;
}

.footer-links {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
}

.footer-links a {
  color: var(--muted);
  font-size: 14px;
  text-decoration: none;
}

.footer-links a:hover {
  color: var(--chalk);
}

/* ---------------------------------------------------------------------------
   Páginas internas (dúvidas, segurança, privacidade, reembolsos, excluir
   conta). Herdam o card com borda de ticket.
   ------------------------------------------------------------------------- */
.legal-hero {
  padding: 76px 0 38px;
  position: relative;
}

.legal-hero h1 {
  font-size: clamp(46px, 8vw, 86px);
}

.legal-layout {
  display: grid;
  gap: 18px;
  grid-template-columns: 260px minmax(0, 1fr);
  padding-bottom: 84px;
}

.legal-aside {
  align-self: start;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 18px;
  position: sticky;
  top: 92px;
}

.legal-aside a {
  color: var(--muted);
  display: block;
  font-weight: 700;
  padding: 8px 0;
  text-decoration: none;
}

.legal-aside a:hover {
  color: var(--chalk);
}

.legal-aside a[aria-current="page"] {
  color: var(--ball);
  pointer-events: none;
}

.legal-content {
  display: grid;
  gap: 16px;
}

.policy-card h2,
.faq-item h2 {
  font-size: 34px;
}

.policy-card ul {
  padding-left: 20px;
}

.policy-card a,
.faq-item a {
  color: var(--ball);
}

.note {
  border-left: 4px solid var(--ball);
}

/* ---------------------------------------------------------------------------
   Responsivo
   ------------------------------------------------------------------------- */
@media (min-width: 1001px) {
  .hero-quadra {
    display: block;
  }
}

@media (max-width: 1000px) {
  .fluxo-abas {
    display: flex;
  }

  .fones {
    grid-template-columns: minmax(0, 300px);
  }

  .fone-col:not(.ativo) {
    display: none;
  }

  .fone-legenda .num {
    display: none;
  }

  .resultado-grid {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 900px) {
  .split,
  .legal-layout {
    grid-template-columns: 1fr;
  }

  .grid-3,
  .grid-2 {
    grid-template-columns: 1fr;
  }

  .section-head,
  .cta-band .container,
  .footer-grid {
    align-items: start;
    flex-direction: column;
  }

  .legal-aside {
    position: static;
  }

  /* No celular o cabeçalho rola junto com a página (não gruda no topo). Fica
     relative só pra ancorar o painel do menu logo abaixo dele. */
  .site-header {
    position: relative;
  }

  .fluxo-abas {
    scroll-margin-top: 12px;
  }

  /* Até 900px (com as bandeiras a linha do desktop não cabe): uma linha só,
     logo à esquerda, "Entrar no app" compacto e o botão de menu à direita.
     Os links e as bandeiras vão pro painel do menu (assets/menu.js). */
  .site-nav {
    flex-wrap: wrap;
    gap: 8px;
    min-height: 64px;
    padding: 10px 0;
    position: relative;
  }

  .site-nav .brand {
    margin-right: auto;
  }

  .site-nav .nav-cta-curto {
    display: inline-flex;
    font-size: 14px;
    min-height: 38px;
    padding: 0 12px;
  }

  .site-nav .nav-links .nav-cta {
    display: none;
  }

  .idiomas {
    margin: 0;
  }

  .idioma-btn {
    height: 44px;
    min-width: 44px;
  }

  /* Sem JS (fallback): sem botão de menu, os links quebram linha abaixo do
     logo, como antes, e continuam acessíveis. */
  .nav-links {
    flex-wrap: wrap;
    gap: 4px 14px;
    padding-bottom: 4px;
    width: 100%;
  }

  .nav-links a {
    flex: 0 0 auto;
    padding: 6px 0;
  }

  /* Com JS: botão de menu e painel logo abaixo do cabeçalho. */
  .menu-js .menu-btn {
    display: inline-flex;
  }

  .menu-js .nav-links {
    align-items: stretch;
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    flex-direction: column;
    gap: 2px;
    left: 0;
    max-height: calc(100vh - 96px);
    opacity: 0;
    overflow-y: auto;
    padding: 8px;
    position: absolute;
    right: 0;
    top: calc(100% + 6px);
    transform: translateY(-4px);
    transition:
      opacity 0.14s ease,
      transform 0.14s ease,
      visibility 0s linear 0.14s;
    visibility: hidden;
    width: auto;
    z-index: 30;
  }

  .menu-js .nav-links.aberto {
    opacity: 1;
    transform: none;
    transition:
      opacity 0.14s ease,
      transform 0.14s ease,
      visibility 0s;
    visibility: visible;
  }

  .menu-js .nav-links a {
    align-items: center;
    display: flex;
    font-size: 15px;
    min-height: 44px;
    padding: 0 12px;
  }

  .menu-js .idiomas {
    border-top: 1px solid var(--line);
    margin-top: 6px;
    padding: 8px 4px 0;
  }
}

@media (max-width: 720px) {
  .hero {
    padding: 36px 0 44px;
  }

  .section {
    padding: 62px 0;
  }

  .quadra-palco {
    padding: 22px 16px 16px;
  }

  .quadra-palco .pino-area {
    height: 210px;
  }

  .quadra-palco .chao {
    height: 210px;
    width: 210px;
  }

  .proof-panel {
    padding: 4px 20px;
  }
}

@media (max-width: 420px) {
  .hero-actions .btn {
    flex: 1 1 100%;
  }

  .quadra-ticket {
    align-items: flex-start;
    flex-direction: column;
  }
}

/* Movimento reduzido: tudo parado. Entradas mostram o estado final e as
   animações contínuas (pulso, borda, ondas, troca de esporte) não rodam. */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation: none !important;
    transition: none !important;
  }
}

/* apps.html: download do Quady Gestor e do Quady Tela (APK fora da loja) */
.app-download .btn {
  margin-top: 16px;
}
/* .policy-card a pinta link de verde-limão: no botão o texto sumia. */
.policy-card .btn-primary,
.policy-card .btn-primary:hover {
  color: var(--ball-ink);
}
.app-meta {
  margin-top: 12px;
  color: var(--muted);
  font-size: 0.875rem;
}
.app-hash {
  margin-top: 4px;
  color: var(--muted);
  font-size: 0.75rem;
  overflow-wrap: anywhere;
}
.app-hash code {
  font-size: 0.75rem;
}
