/* ============================================================
   Ginásio Bola na Rede — sistema visual "Marcação"

   Mobile first: o que está fora de @media é o layout de celular.
   As media queries só ampliam, nunca reduzem.

   Pontos de virada
     560px  — formulário e galeria ganham a segunda coluna
     900px  — menu horizontal e seções de duas colunas

   Recursos, não tamanhos
     (hover: hover)  — estados de passagem só onde existe ponteiro
   ============================================================ */

:root {
  /* Superfícies — amostradas das fotos do ginásio */
  --breu:        #12100E;  /* preto do escudo, nav e rodapé */
  --piso:        #2A2521;  /* parquet na sombra — superfície dominante */
  --piso-alto:   #3A342E;  /* parquet sob a luz, blocos elevados */
  --grama:       #38402F;  /* grama sintética, marca o conteúdo society */
  --cal:         #EDE7DA;  /* tinta das linhas, gasta e quente */
  --cal-fundo:   #E6DFD0;  /* mesma cal, como superfície de seção */

  /* Marca */
  --laranja:     #F26522;
  --laranja-esc: #C44E15;
  --amarelo:     #E9B429;  /* traves e linhas secundárias da quadra */
  --whats:       #25D366;

  /* Texto */
  --tinta:       #1A1613;  /* sobre superfícies claras */
  --tinta-fraca: #5C5348;  /* 5,7:1 sobre --cal-fundo */
  --cal-fraca:   rgba(237,231,218,.62);  /* 5,6:1 sobre --piso */

  /* Traço da demarcação */
  --linha:       2px;
  --linha-cor:   rgba(237,231,218,.34);
  --linha-cor-clara: rgba(26,22,19,.18);

  --display: 'Big Shoulders Display', 'Archivo Narrow', Impact, sans-serif;
  --corpo:   'Archivo', system-ui, -apple-system, sans-serif;

  --gap: clamp(1.5rem, 4vw, 3rem);
  --alvo: 2.75rem;   /* alvo mínimo de toque: 44px */
}

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

html {
  scroll-behavior: smooth;
  scroll-padding-top: 5.5rem;
  -webkit-text-size-adjust: 100%;
}

body {
  font-family: var(--corpo);
  background: var(--piso);
  color: var(--cal);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -webkit-tap-highlight-color: transparent;
  overflow-x: hidden;
}

/* height:auto anula o presentational hint dos atributos width/height do HTML.
   Sem isso a altura fica travada no valor do atributo e qualquer
   aspect-ratio declarado depois é ignorado. */
img { max-width: 100%; height: auto; display: block; }
a { color: inherit; text-decoration: none; }
ul { list-style: none; }

[hidden] { display: none !important; }

:focus-visible {
  outline: 3px solid var(--amarelo);
  outline-offset: 3px;
}

/* ---------- Tipografia ---------- */

.display {
  font-family: var(--display);
  font-weight: 800;
  line-height: .92;
  letter-spacing: -.005em;
  text-transform: uppercase;
}

h1 { font: inherit; }
h2, h3 { font: inherit; font-weight: inherit; }

.t-grande { font-size: clamp(2.6rem, 7.5vw, 5.4rem); }
.t-medio  { font-size: clamp(1.7rem, 3.4vw, 2.6rem); }

.quebra { display: block; }

/* Rótulo técnico — usado onde existe mesmo uma categoria a marcar,
   não como enfeite de toda seção */
.rotulo {
  display: inline-block;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .16em;
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
}

.medida {
  font-family: var(--display);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  letter-spacing: .01em;
}

/* ---------- Estrutura ---------- */

.env { width: min(1180px, 90%); margin-inline: auto; }

.band { padding-block: clamp(3.5rem, 9vw, 7rem); position: relative; }
.band-escura { background: var(--piso); color: var(--cal); }
.band-clara  { background: var(--cal-fundo); color: var(--tinta); }

/* A divisa entre seções é uma linha de demarcação, não uma borda genérica */
.band + .band::before,
.hero + .band::before {
  content: "";
  position: absolute;
  inset-inline: 0;
  top: 0;
  height: var(--linha);
  background: var(--linha-cor);
}
.band-clara + .band-clara::before,
.band-escura + .band-clara::before { background: var(--linha-cor-clara); }

.pular {
  position: absolute; left: 1rem; top: -100px; z-index: 100;
  background: var(--amarelo); color: var(--breu);
  font-weight: 700; padding: .7rem 1.2rem;
  transition: top .2s;
}
.pular:focus { top: 0; }

.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;
}

/* ---------- Botões ---------- */
/* Retangulares e de traço grosso, como marcação pintada.
   Sem pílulas, sem elevação. */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .5rem;
  min-height: var(--alvo);
  font-family: var(--display);
  font-weight: 700;
  font-size: 1.15rem;
  text-transform: uppercase;
  letter-spacing: .03em;
  padding: .6rem 1.4rem;
  border: var(--linha) solid transparent;
  background: none;
  color: inherit;
  cursor: pointer;
  transition: background-color .18s, color .18s, border-color .18s;
}
.btn svg { width: 1.15em; height: 1.15em; flex: none; }

.btn-cheio { background: var(--laranja); border-color: var(--laranja); color: var(--breu); }
.btn-traco { border-color: currentColor; }
.btn-whats { background: var(--whats); border-color: var(--whats); color: #06280C; }

.btn-mini { font-size: .95rem; padding: .4rem 1rem; }

/* ---------- Navegação ---------- */
/* No celular: escudo + botão do menu. O menu horizontal e o telefone
   entram a partir de 900px. */

.topo {
  position: fixed;
  inset: 0 0 auto 0;
  z-index: 50;
  background: var(--breu);
  border-bottom: var(--linha) solid transparent;
  transition: border-color .25s;
}
.topo.marcada { border-bottom-color: var(--laranja); }

.topo-interno {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  min-height: 4.5rem;
}

.escudo { display: flex; align-items: center; flex: none; }
.escudo img { height: 2.75rem; width: auto; }

.menu { display: none; }
.fone-topo { display: none; }

.sanduiche {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-end;
  gap: 6px;
  width: var(--alvo);
  height: var(--alvo);
  margin-right: -.5rem;   /* alvo cheio sem deslocar a borda óptica */
  background: none;
  border: 0;
  cursor: pointer;
}
.sanduiche span {
  display: block;
  width: 26px;
  height: var(--linha);
  background: var(--cal);
  transition: transform .25s, opacity .25s;
}
.sanduiche.aberto span:nth-child(1) { transform: translateY(8px) rotate(45deg); }
.sanduiche.aberto span:nth-child(2) { opacity: 0; }
.sanduiche.aberto span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }

.menu-mobile {
  display: none;
  background: var(--breu);
  border-top: var(--linha) solid var(--linha-cor);
  /* Se a lista passar da tela, ela rola sozinha em vez de vazar */
  max-height: calc(100vh - 4.5rem);
  max-height: calc(100dvh - 4.5rem);   /* desconta a barra do navegador móvel */
  overflow-y: auto;
  overscroll-behavior: contain;
  padding-bottom: 1rem;
}
.menu-mobile.aberto { display: block; }
.menu-mobile a {
  display: flex;
  align-items: center;
  min-height: var(--alvo);
  font-family: var(--display);
  font-weight: 700;
  font-size: 1.5rem;
  text-transform: uppercase;
  padding: .5rem 0;
  border-bottom: 1px solid var(--linha-cor);
}
.menu-mobile a.aqui { color: var(--laranja); }
.menu-mobile .btn { width: 100%; margin-top: 1.2rem; border-bottom: 0; }

/* ---------- Hero ---------- */
/* A quadra desenhada em escala é o fundo; o texto ocupa o meio-campo.
   No celular ela é ampliada e recuada, para não disputar com o texto. */

.hero {
  position: relative;
  background: var(--piso);
  padding-top: clamp(7rem, 16vw, 11rem);
  padding-bottom: clamp(3.5rem, 8vw, 6rem);
  overflow: hidden;
}

.hero-quadra {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -46%);
  width: 200%;
  aspect-ratio: 3650 / 1850;
  opacity: .8;
  pointer-events: none;
}
.hero-quadra svg { width: 100%; height: 100%; overflow: visible; }
.hero-quadra .traco { fill: none; stroke: rgba(237,231,218,.20); stroke-width: 7; }
.hero-quadra .traco-forte { stroke: rgba(237,231,218,.34); }

.hero-conteudo { position: relative; z-index: 1; max-width: min(44rem, 100%); }

.hero h1 { margin-bottom: 1.2rem; }
/* Introduz o código de cor usado nos diagramas: laranja = parquet, amarelo = grama */
.hero .no-parquet { color: var(--laranja); font-weight: 600; }
.hero .na-grama   { color: var(--amarelo); font-weight: 600; }

.hero-texto {
  font-size: clamp(1rem, 1.6vw, 1.15rem);
  color: var(--cal-fraca);
  max-width: 46ch;
  margin-bottom: 1.8rem;
}

/* No celular os dois botões ocupam a largura toda, um sobre o outro */
.hero-acoes { display: grid; gap: .7rem; margin-bottom: 2.5rem; }

.hero-onde {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: .4rem .9rem;
  padding-top: 1.2rem;
  border-top: var(--linha) solid var(--linha-cor);
  max-width: 46ch;
}
.hero-onde .rotulo { color: var(--laranja); }
.hero-onde span { color: var(--cal-fraca); font-size: .95rem; }

/* ---------- As quadras: diagramas em escala ---------- */

.quadras-topo { max-width: 52ch; margin-bottom: clamp(2rem, 5vw, 4rem); }
.quadras-topo h2 { margin-bottom: .8rem; }
.quadras-topo p { color: var(--cal-fraca); }
.quadras-topo strong { color: var(--cal); font-weight: 600; }

/* Empilhadas no celular, lado a lado a partir de 900px. Em qualquer
   largura as duas dividem a mesma escala: 1% = 0,39 m. A society ocupa
   100% da coluna; a de futsal, 36,5/39 = 93,6%. */
.quadras { display: grid; gap: clamp(2.5rem, 6vw, 3rem); align-items: start; }

.quadra { display: flex; flex-direction: column; }

.quadra-caixa { display: flex; align-items: flex-end; margin-bottom: 1.2rem; }

.quadra-figura {
  width: calc(var(--comp) / 39 * 100%);
  aspect-ratio: var(--comp) / var(--larg);
  position: relative;
  background: var(--fundo);
  border: var(--linha) solid var(--linha-cor);
  transition: background-color .25s;
}
/* A caixa mantém a proporção real da quadra; a imagem preenche por dentro.
   É a caixa que carrega a escala, não o desenho. */
.quadra-figura img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }

.quadra-parquet { --comp: 36.5; --larg: 18.5; --fundo: var(--piso-alto); }
.quadra-society { --comp: 39;   --larg: 22;   --fundo: var(--grama); }

.quadra-nome { margin-bottom: .4rem; }
.quadra-parquet .quadra-nome { color: var(--laranja); }
.quadra-society .quadra-nome { color: var(--amarelo); }

.quadra-medidas { font-size: clamp(1.4rem, 2.4vw, 1.9rem); margin-bottom: .9rem; }
.quadra-medidas .area {
  font-family: var(--corpo);
  font-size: .85rem;
  font-weight: 500;
  color: var(--cal-fraca);
  letter-spacing: 0;
}

.quadra-ficha { border-top: var(--linha) solid var(--linha-cor); }
.quadra-ficha div {
  display: flex;
  flex-wrap: wrap;          /* valores longos quebram em vez de espremer */
  justify-content: space-between;
  gap: .2rem 1rem;
  padding: .6rem 0;
  border-bottom: 1px solid var(--linha-cor);
  font-size: .95rem;
}
.quadra-ficha dt { color: var(--cal-fraca); }
.quadra-ficha dd { text-align: right; margin-left: auto; }

.quadra .btn { align-self: flex-start; margin-top: 1.2rem; }

/* ---------- Blocos de duas colunas (ginásio, festa) ---------- */
/* No celular o texto vem primeiro: quem rola encontra o título antes da foto. */

.duas { display: grid; gap: var(--gap); align-items: center; }
.duas-texto { order: -1; }
.duas-texto h2 { margin-bottom: 1rem; }
.duas-texto > p { margin-bottom: 1.5rem; max-width: 46ch; }
.band-clara .duas-texto > p { color: var(--tinta-fraca); }

.foto-marcada { position: relative; }
.foto-marcada img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
/* Arco de canto, como o escanteio da quadra */
.foto-marcada::after {
  content: "";
  position: absolute;
  right: -.5rem;
  bottom: -.5rem;
  width: 3.5rem;
  height: 3.5rem;
  border: var(--linha) solid var(--laranja);
  border-radius: 100% 0 0 0;
  border-right: 0;
  border-bottom: 0;
  transform: rotate(180deg);
}

/* Lista marcada com o traço da demarcação */
.lista-marcada { display: grid; gap: .6rem; }
.lista-marcada li {
  display: grid;
  grid-template-columns: 1.6rem 1fr;
  align-items: baseline;
  gap: .6rem;
  font-weight: 500;
}
.lista-marcada li::before {
  content: "";
  height: var(--linha);
  background: var(--laranja);
  transform: translateY(-.35em);
}

/* ---------- Galeria ---------- */
/* Fotos pequenas (558px), então molduras pequenas e uniformes.
   No toque a legenda fica sempre visível — não há :hover para revelá-la. */

.galeria-topo {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  margin-bottom: 1.5rem;
}
.galeria-topo .rotulo { color: var(--laranja); }

.galeria {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: .4rem;
}
.galeria figure { position: relative; overflow: hidden; background: var(--piso-alto); }
.galeria img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  filter: saturate(.85);
  transition: filter .3s, transform .5s;
}
.galeria figcaption {
  position: absolute;
  inset: auto 0 0 0;
  padding: 2rem .6rem .5rem;
  font-size: .78rem;
  line-height: 1.3;
  color: var(--cal);
  background: linear-gradient(transparent, rgba(18,16,14,.9));
}

/* ---------- Reserva + contato ---------- */

.reserva { display: grid; gap: var(--gap); align-items: start; }
.reserva h2 { margin-bottom: .6rem; }
.reserva-intro { color: var(--tinta-fraca); margin-bottom: 1.5rem; max-width: 44ch; }

/* Um caminho principal (a tela de reserva) e uma saída por mensagem.
   Sem formulário: ele duplicaria a tela de reserva e dividiria a atenção. */
.reserva-acoes { display: grid; gap: .7rem; margin-bottom: 2.5rem; }

.quadra-ficha .preco { font-size: 1.15rem; color: var(--cal); }

.formulario { display: grid; gap: 1rem; }
.campo { display: flex; flex-direction: column; gap: .35rem; }
.campo-largo { grid-column: 1 / -1; }

.campo label {
  font-size: .75rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--tinta-fraca);
}
.campo input,
.campo select,
.campo textarea {
  font: inherit;            /* 16px: evita o zoom automático do iOS ao focar */
  min-height: var(--alvo);
  color: var(--tinta);
  background: transparent;
  border: 0;
  border-bottom: var(--linha) solid var(--linha-cor-clara);
  border-radius: 0;         /* iOS arredonda inputs por conta própria */
  padding: .5rem .1rem;
  transition: border-color .18s;
}
.campo textarea { resize: vertical; }
.campo input:focus,
.campo select:focus,
.campo textarea:focus { outline: none; border-bottom-color: var(--laranja); }
.campo select { appearance: none; cursor: pointer; }

.contato-dados {
  display: grid;
  gap: 1.3rem;
  padding-top: 1.5rem;
  border-top: var(--linha) solid var(--linha-cor-clara);
}
.contato-dados dt { color: var(--tinta-fraca); margin-bottom: .15rem; }
.contato-dados dd { font-weight: 600; font-size: 1.05rem; }
/* Telefone: alvo de toque cheio, já que no celular é para ligar */
.contato-dados dd a { display: inline-flex; align-items: center; min-height: var(--alvo); }

.mapa { border: var(--linha) solid var(--linha-cor-clara); aspect-ratio: 4 / 3; }
.mapa iframe { width: 100%; height: 100%; border: 0; display: block; filter: grayscale(.4); }

/* ---------- Rodapé ---------- */

.rodape { background: var(--breu); color: var(--cal-fraca); padding-block: 2.5rem 2rem; }
.rodape-topo {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1.2rem;
  padding-bottom: 1.5rem;
  border-bottom: var(--linha) solid var(--linha-cor);
}
.rodape-menu { display: flex; flex-wrap: wrap; gap: .4rem 1.3rem; }
.rodape-menu a {
  display: flex;
  align-items: center;
  min-height: var(--alvo);
  font-family: var(--display);
  font-weight: 700;
  font-size: 1.05rem;
  text-transform: uppercase;
  letter-spacing: .04em;
}
.rodape-baixo {
  display: flex;
  flex-direction: column;
  gap: .5rem;
  padding-top: 1.5rem;
  font-size: .88rem;
}

/* ---------- Botão flutuante ---------- */
/* Acompanha a barra de gestos do iPhone via safe-area */

.whats-flutua {
  position: fixed;
  right: 1rem;
  bottom: calc(1rem + env(safe-area-inset-bottom));
  z-index: 60;
  width: 3.4rem;
  height: 3.4rem;
  display: grid;
  place-items: center;
  background: var(--whats);
  color: #06280C;
  border-radius: 50%;
  box-shadow: 0 6px 20px rgba(0,0,0,.4);
  transition: transform .2s;
}
.whats-flutua svg { width: 1.9rem; height: 1.9rem; }

/* ============================================================
   560px — o formulário e a galeria cabem em duas colunas
   ============================================================ */

@media (min-width: 560px) {
  .hero-acoes { display: flex; flex-wrap: wrap; gap: .8rem; }

  .reserva-acoes { display: flex; flex-wrap: wrap; gap: .8rem; }

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

  .galeria { grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: .5rem; }

  .rodape-topo {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1.5rem;
  }
  .rodape-baixo { flex-direction: row; flex-wrap: wrap; justify-content: space-between; gap: .6rem; }
}

/* ============================================================
   900px — menu horizontal e seções em duas colunas
   ============================================================ */

@media (min-width: 900px) {
  .env { width: min(1180px, 88%); }

  .escudo img { height: 3rem; }

  .menu { display: flex; gap: 1.6rem; }
  .menu a {
    font-family: var(--display);
    font-weight: 700;
    font-size: 1.1rem;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--cal-fraca);
    padding-block: .35rem;
    border-bottom: var(--linha) solid transparent;
    transition: color .18s, border-color .18s;
  }
  .menu a.aqui { color: var(--cal); border-bottom-color: var(--laranja); }

  .fone-topo { display: inline-flex; flex: none; font-variant-numeric: tabular-nums; }

  .sanduiche { display: none; }
  .menu-mobile, .menu-mobile.aberto { display: none; }

  /* A quadra do hero recua para o tamanho de origem */
  .hero-quadra { width: min(1500px, 150%); opacity: 1; }

  .quadras { grid-template-columns: 1fr 1fr; gap: var(--gap); }

  /* Caixa com a altura da maior quadra: as duas figuras se apoiam na mesma
     linha de base, então as fichas abaixo alinham e a diferença de tamanho
     continua sendo a diferença real. */
  .quadra-caixa { aspect-ratio: 39 / 22; margin-bottom: 1.4rem; }

  .duas { grid-template-columns: 1fr 1fr; }
  .duas-texto { order: 0; }   /* volta a seguir a ordem do HTML */

  .foto-marcada::after { right: -.75rem; bottom: -.75rem; width: 4.5rem; height: 4.5rem; }

  .reserva { grid-template-columns: 1.15fr .85fr; }

  .contato-lado { border-left: var(--linha) solid var(--linha-cor-clara); padding-left: var(--gap); }
}

/* ============================================================
   Estados de passagem — só onde existe ponteiro de verdade.
   No toque eles ou não disparam, ou grudam depois do tap.
   ============================================================ */

@media (hover: hover) {
  .btn-cheio:hover { background: var(--laranja-esc); border-color: var(--laranja-esc); color: var(--cal); }
  .btn-traco:hover { background: var(--cal); color: var(--piso); border-color: var(--cal); }
  .band-clara .btn-traco:hover { background: var(--tinta); color: var(--cal-fundo); border-color: var(--tinta); }
  .btn-whats:hover { background: #1CB955; border-color: #1CB955; }

  .menu a:hover { color: var(--cal); }
  .rodape-menu a:hover { color: var(--laranja); }
  .contato-lado dd a:hover { color: var(--laranja-esc); }

  .quadra:hover .quadra-figura { background: color-mix(in srgb, var(--fundo) 80%, var(--cal)); }

  .whats-flutua:hover { transform: scale(1.06); }

  /* Com ponteiro a legenda pode se esconder até a passagem do mouse */
  .galeria figcaption { opacity: 0; transition: opacity .25s; }
  .galeria figure:hover figcaption,
  .galeria figure:focus-within figcaption { opacity: 1; }
  .galeria figure:hover img { filter: saturate(1); transform: scale(1.03); }
}

/* ============================================================
   Desenho das linhas na entrada
   Único momento coreografado da página: a quadra é demarcada.
   ============================================================ */

@media (prefers-reduced-motion: no-preference) {
  .hero-quadra .traco {
    stroke-dasharray: var(--comprimento, 2000);
    stroke-dashoffset: var(--comprimento, 2000);
    animation: demarcar .9s cubic-bezier(.4, 0, .2, 1) forwards;
    animation-delay: var(--atraso, 0s);
  }
  @keyframes demarcar { to { stroke-dashoffset: 0; } }
}
