/* ==========================================================================
   Landing pages de passeio da Gordinho Tour

   Carrega DEPOIS de styles.css e nao substitui nada dele. Existe por dois
   motivos concretos:

   1. styles.css termina com um bloco de acabamento que reescreve seletores
      declarados antes dele. Regra nova escrita no meio daquele arquivo perde
      em silencio. Aqui, por vir depois, ganha por ordem de fonte.
   2. a home e as landing pages evoluem em ritmos diferentes. Separando o
      arquivo, mexer numa landing page nao pode quebrar a home.

   Tudo que e novo leva o prefixo .lp para nao colidir com o site, e o <body>
   das landing pages leva a classe .lp.

   As proximas paginas (3 Praias, litoral, transfer) reaproveitam este arquivo:
   o que e especifico de Jericoacoara e apenas a foto e o texto, nunca o estilo.
   ========================================================================== */

:root {
  /* utilbar mais cabecalho, medido em 320, 360 e 390: 43 + 74 = 117, e a folga
     ate o topo da faixa de foto e exatamente zero nos tres. Os dois valores
     abaixo aparecem em duas regras cada e TEM de andar juntos: mexer em um
     sozinho sobrepoe o texto na foto ou abre vao. */
  --lp-topo: 117px;
  --lp-faixa: clamp(13rem, 40svh, 21rem);
  --lp-faixa-baixa: clamp(6rem, 24svh, 15rem);
}

/* ---------- Ajustes de herança em seção escura ----------
   As duas regras abaixo existem porque styles.css resolve isso com LISTA
   FECHADA de seletores (h2 em na linha 123, :focus-visible na 98). Classe nova
   nao entra na lista, entao o destaque do titulo sairia verde sobre navy e o
   anel de foco sairia verde sobre navy tambem, os dois quase invisiveis. */
.lp .lp-dia h2 em,
.lp .lp-galeria h2 em,
.lp .lp-mochila h2 em,
.lp .lp-rota--escura h2 em,
.lp .lp-final h2 em { color: var(--lima); }

.lp .lp-dia :focus-visible,
.lp .lp-galeria :focus-visible,
.lp .lp-mochila :focus-visible,
.lp .lp-rota--escura :focus-visible,
.lp .lp-final :focus-visible,
.lp .lp-barra :focus-visible,
.lp .lp-box :focus-visible { outline-color: var(--lima); }

.lp .lp-dia .secao-apoio,
.lp .lp-galeria .secao-apoio,
.lp .lp-rota--escura .secao-apoio,
.lp .lp-mochila .secao-apoio { color: var(--papel-suave); }

/* ==========================================================================
   1. Hero
   ========================================================================== */

/* A arte e um por do sol, ou seja laranja saturado de ponta a ponta. O veu
   padrao do site e navy e, sobre laranja, vira marrom e suja a foto. Aqui o
   veu escurece so as bordas de cima e de baixo, onde o texto pousa, e deixa o
   centro limpo, que e onde estao o sol e a familia. */
.lp .lp-shell .shell__veu {
  background:
    linear-gradient(180deg,
      rgba(16, 30, 43, 0.72) 0%,
      rgba(16, 30, 43, 0.30) 22%,
      rgba(16, 30, 43, 0.12) 42%,
      rgba(16, 30, 43, 0.42) 68%,
      rgba(16, 30, 43, 0.86) 100%);
}
.lp .lp-shell .shell__foto img { object-position: center 42%; }

/* Veu reforcado, para arte clara. A pagina de transfer tem van branca, calcada
   clara e ceu aberto exatamente na faixa onde o titulo pousa. Medido no render
   em 1440, so nos pixels que a letra cobre: com o veu padrao o H1 dava 2,53:1
   no pior ponto, com 34% dos pixels abaixo de 4,5:1 e 1% abaixo do piso de 3:1
   de texto grande. As outras tres paginas nao passam por aqui: a classe so
   entra no shell de quem precisa. */
.lp .lp-shell--claro .shell__veu {
  background:
    linear-gradient(180deg,
      rgba(16, 30, 43, 0.74) 0%,
      rgba(16, 30, 43, 0.34) 20%,
      rgba(16, 30, 43, 0.30) 38%,
      rgba(16, 30, 43, 0.70) 64%,
      rgba(16, 30, 43, 0.94) 100%);
}

/* O texto do hero e centralizado porque a foto e simetrica: o sol nasce entre
   as duas cabanas, no eixo. Alinhar a esquerda brigaria com essa simetria.

   E fica no TERCO DE BAIXO, nao no meio. Medido no render: centralizado, o h1
   caia exatamente sobre o sol e sobre a silhueta da familia, que sao o assunto
   da foto. Descendo o bloco, o texto pousa no deck escuro e a cena aparece
   inteira acima dele. */
.lp .lp-hero__conteudo {
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  max-width: 56rem;
  padding-bottom: clamp(1.5rem, 5vh, 3.5rem);
}

/* O veu local do hero do site e um radial ancorado a 24% da esquerda, feito
   para texto alinhado a esquerda. Aqui o texto e centralizado e embaixo, entao
   o gradiente acompanha: escurece a base e deixa o alto limpo. */
.lp .lp-hero::before {
  background: radial-gradient(ellipse 78% 62% at 50% 104%,
    rgba(16, 30, 43, 0.88) 0%,
    rgba(16, 30, 43, 0.6) 42%,
    rgba(16, 30, 43, 0.18) 72%,
    rgba(16, 30, 43, 0) 90%);
}
.lp .lp-hero__conteudo .rotulo {
  justify-content: center;
  /* Medido no render: sem fundo proprio, o pior pixel do rotulo amarelo sobre o
     reflexo dourado da lagoa dava 1,84:1 em 1440, com 41% dos pixels do glifo
     abaixo de 4,5:1. Reforcar o veu leva so a 2,30 e trocar a cor por papel a
     2,92: o problema e amarelo sobre laranja, nao opacidade. A pilula escura
     resolve porque cria o proprio fundo. */
  align-self: center;
  background: rgba(16, 30, 43, 0.72);
  padding: 0.34rem 0.95rem 0.34rem 0.75rem;
  border-radius: 999px;
  backdrop-filter: blur(3px);
  -webkit-backdrop-filter: blur(3px);
}
.lp .lp-hero__h1 { text-wrap: balance; }
.lp .lp-hero__sub { max-width: 44rem; margin-inline: auto; }
.lp .lp-hero__acoes { justify-content: center; }

/* ==========================================================================
   2. Faixa de marcos
   ========================================================================== */
.lp-marcos {
  background: var(--tinta);
  color: var(--papel);
  border-block: 1px solid var(--linha-clara);
}
.lp-marcos__lista {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0.9rem 2.4rem;
  padding-block: 1.1rem;
}
.lp-marcos__lista li {
  display: flex;
  align-items: center;
  gap: 0.55rem;
  color: var(--papel-suave);
  font-size: 0.74rem;
}
.lp-marcos__lista .ic { width: 1.15em; height: 1.15em; color: var(--lima); flex: none; }

/* ==========================================================================
   3. Como funciona
   ========================================================================== */
.lp-privativo { padding-block: var(--sec-y); }
.lp-privativo__grade {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
  gap: clamp(1.2rem, 2.4vw, 2rem);
}
.lp-item {
  border: 1px solid var(--linha);
  border-radius: var(--raio);
  padding: 1.6rem 1.5rem;
  background: var(--branco);
  box-shadow: var(--sombra-s);
}
.lp-item__ic {
  display: inline-flex;
  width: 2.9rem; height: 2.9rem;
  align-items: center; justify-content: center;
  border-radius: 50%;
  background: var(--papel-2);
  color: var(--verde);
  margin-bottom: 1rem;
}
.lp-item__ic .ic { width: 1.35rem; height: 1.35rem; }
.lp-item h3 { font-size: 1.15rem; margin-bottom: 0.5rem; }
.lp-item p { color: var(--musgo); font-size: 0.96rem; }

/* ---------- Hover dos tres cartoes ----------
   Mesma assinatura do projeto Maroeste: o cartao sobe 4px, troca a sombra
   pequena pela grande e se converte inteiro em peca escura com acento de
   marca. Aqui o par de superficies ja existe na identidade, porque a pagina
   alterna papel e tinta de secao em secao: o hover e a secao escura visitando
   o cartao por um instante.

   Tudo dentro de (hover: hover) e (pointer: fine). Sem isso, o toque no celular
   aplica :hover grudento e o cartao fica invertido ate o proximo toque fora. */
.lp-item {
  transition:
    transform var(--motion-slow) var(--ease),
    box-shadow var(--motion-slow) var(--ease),
    background-color var(--dur-1) var(--ease),
    border-color var(--dur-1) var(--ease);
}
.lp-item h3, .lp-item p, .lp-item__ic, .lp-item__ic .ic {
  transition: color var(--dur-1) var(--ease), background-color var(--dur-1) var(--ease);
}
@media (hover: hover) and (pointer: fine) {
  .lp-item:hover, .lp-item:focus-within {
    /* camada propria: sao tres cartoes lado a lado, e o irmao seguinte pintaria
       por cima cortando a sombra de 60px pela metade */
    position: relative;
    z-index: 1;
    --lp-t: translateY(-4px);
    transform: var(--lp-t);
    box-shadow: var(--sombra);
    background: var(--tinta);
    border-color: var(--tinta);
  }
  .lp-item:hover h3, .lp-item:focus-within h3 { color: var(--papel); }
  .lp-item:hover p, .lp-item:focus-within p { color: var(--papel-suave); }
  .lp-item:hover .lp-item__ic, .lp-item:focus-within .lp-item__ic {
    background: rgba(255, 204, 0, 0.14);
    color: var(--lima);
  }
}

/* ==========================================================================
   4. Visão geral do dia
   ========================================================================== */
.lp-dia {
  background: var(--tinta);
  color: var(--papel);
  padding-block: var(--sec-y);
}
.lp-linha {
  position: relative;
  display: grid;
  gap: 0;
}
/* O fio corre atras dos nos. Fica em ::before do proprio <ol> em vez de um
   elemento vazio no HTML, porque e decoracao e nao conteudo. */
.lp-linha::before {
  content: "";
  position: absolute;
  top: 0.7rem; bottom: 2.4rem;
  left: 0.42rem;
  width: 2px;
  background: linear-gradient(180deg, var(--lima), rgba(255, 204, 0, 0.15));
}
.lp-passo {
  position: relative;
  padding-left: 2.2rem;
  padding-bottom: 2.1rem;
}
.lp-passo::before {
  content: "";
  position: absolute;
  left: 0; top: 0.42rem;
  width: 0.86rem; height: 0.86rem;
  border-radius: 50%;
  background: var(--lima);
  box-shadow: 0 0 0 4px rgba(255, 204, 0, 0.16);
}
.lp-passo--fim::before { background: var(--papel); box-shadow: 0 0 0 4px rgba(247, 242, 232, 0.16); }
.lp-passo__hora {
  display: block;
  color: var(--lima);
  margin-bottom: 0.35rem;
}
.lp-passo__corpo h3 { font-size: 1.22rem; margin-bottom: 0.4rem; }
.lp-passo__corpo p { color: var(--papel-suave); max-width: 42rem; }
.lp-passo__corpo p + p { margin-top: 0.5rem; }

.lp-link {
  display: inline-flex; align-items: center; gap: 0.45rem;
  color: var(--lima);
  font-weight: 650;
  text-decoration: none;
  border-bottom: 1px solid rgba(255, 204, 0, 0.4);
}
.lp-link:hover { border-bottom-color: var(--lima); }
/* alvo de toque: e um link solto num paragrafo proprio, nao dentro de prosa,
   entao vale a mesma regra dos botoes e nao a excecao de link em linha */
@media (max-width: 899px) { .lp-link { padding-block: 0.6rem; } }
.lp-link .ic { width: 1em; height: 1em; transition: transform var(--dur-1) var(--ease); }
.lp-link:hover .ic { transform: translateX(4px); }

/* ---------- Selos de condição ----------
   Condicao do roteiro nunca vira letra miuda. O selo tem o mesmo tamanho de
   fonte do resto do cartao e cor propria, porque esconder "nao incluso" em
   cinza pequeno seria omissao enganosa. */
.lp-selo {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  font-family: var(--monof);
  font-size: 0.7rem;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  border-radius: 999px;
  padding: 0.4rem 0.85rem;
  border: 1px solid currentColor;
  line-height: 1.3;
}
.lp-selo .ic { width: 1em; height: 1em; flex: none; }
/* selo positivo: existe porque nas 3 Praias ha um item explicitamente INCLUSO
   (o buggy) e esconder isso subestima o que o visitante esta comprando, que e
   errar por omissao no sentido inverso */
.lp-selo--dentro { color: #1F7A4D; background: rgba(31, 122, 77, 0.08); }
.lp-dia .lp-selo--dentro,
.lp-rota--escura .lp-selo--dentro { color: #7BD8A6; background: rgba(123, 216, 166, 0.1); }
.lp-selo--fora { color: #B4552B; background: rgba(180, 85, 43, 0.08); }
.lp-selo--opcional { color: var(--verde); background: rgba(40, 70, 93, 0.07); }
.lp-dia .lp-selo--fora,
.lp-rota--escura .lp-selo--fora { color: #FFB37A; background: rgba(255, 179, 122, 0.1); }
.lp-dia .lp-selo--opcional,
.lp-rota--escura .lp-selo--opcional { color: var(--lima); background: rgba(255, 204, 0, 0.1); }

/* Dia de saida nao e condicao de pacote, e agenda: fica em cinza de marca e nao
   nas cores de alerta, para nao competir com o "nao incluso" ao lado. */
.lp-selo--dia { color: var(--verde); background: var(--papel-2); }
.lp-dia .lp-selo--dia,
.lp-rota--escura .lp-selo--dia { color: var(--papel); background: rgba(247, 242, 232, 0.1); }

/* ==========================================================================
   4b. Linha do tempo que se preenche na rolagem

   Contrato de ativacao: TUDO neste bloco depende de .lp-linha--anima, classe
   que o lp.js escreve no <ol> so depois de passar por tres guardas (existe
   passo, nao ha movimento reduzido, gsap e ScrollTrigger carregaram). Sem
   script, sem GSAP ou com movimento reduzido a classe nunca aparece e vale o
   bloco 4 inteiro: fio dourado cheio e todos os nos acesos. Nada nasce
   escondido, que e a diferenca entre animacao e conteudo que some.
   ========================================================================== */

/* o fio do bloco 4 vira trilho apagado: continua marcando o percurso, so perde
   o dourado, que passa a ser papel do fio animado */
.lp-linha--anima::before { background: rgba(247, 242, 232, 0.16); }

/* O fio aceso. E um <li> criado pelo lp.js, porque <ol> so aceita <li> como
   filho. Cor CHAPADA e nao gradiente: scaleY estica o que estiver pintado, e um
   gradiente esticado muda de aparencia a cada quadro e obriga o navegador a
   rasterizar de novo. Cor solida escala de graca. */
.lp-linha__fio {
  position: absolute;
  top: 0.7rem; bottom: 2.4rem; left: 0.42rem; width: 2px;
  background: var(--lima);
  transform: scaleY(0);
  transform-origin: 50% 0;
  will-change: transform;
  pointer-events: none;
}

/* O no ja existe no bloco 4: aqui ele so ganha dois estados. A aureola sai do
   box-shadow e vira ::after proprio, porque sombra animada e repintura com
   desfoque a cada quadro, enquanto opacity e transform vao para o compositor.
   Sao sete nos numa pagina que rola no celular. */
.lp-linha--anima .lp-passo::before {
  background: rgba(247, 242, 232, 0.22);
  box-shadow: none;
  transform: scale(0.78);
  transition: background-color var(--dur-1) var(--ease), transform 0.45s var(--ease);
}
.lp-linha--anima .lp-passo.is-aceso::before { background: var(--lima); transform: scale(1); }
.lp-linha--anima .lp-passo--fim.is-aceso::before { background: var(--papel); }
.lp-linha--anima .lp-passo::after {
  content: "";
  position: absolute;
  left: -0.28rem; top: 0.14rem;
  width: 1.42rem; height: 1.42rem;
  border-radius: 50%;
  background: rgba(255, 204, 0, 0.16);
  opacity: 0;
  transform: scale(0.6);
  transition: opacity var(--dur-1) var(--ease), transform 0.45s var(--ease);
  pointer-events: none;
}
.lp-linha--anima .lp-passo.is-aceso::after { opacity: 1; transform: scale(1); }
.lp-linha--anima .lp-passo--fim::after { background: rgba(247, 242, 232, 0.16); }

/* So o titulo cede, e cede para papel-suave, que e a cor que o proprio
   paragrafo ja usa: 7,4:1 sobre a tinta. A HORA em mono nao e apagada: medido,
   o dourado a 45% da 3,19:1 e a 60% da 4,37:1, os dois abaixo do piso. Horario
   nao pode perder contraste para virar efeito. */
.lp-linha--anima .lp-passo__corpo h3 { transition: color var(--dur-1) var(--ease); }
.lp-linha--anima .lp-passo:not(.is-aceso) .lp-passo__corpo h3 { color: var(--papel-suave); }

/* ==========================================================================
   5. Paradas
   ========================================================================== */
.lp-paradas { padding-block: var(--sec-y); background: var(--papel-2); }
/* Tres colunas fixas, e nao auto-fill: sao SEIS paradas, e com auto-fill o
   contentor de 1220px cabia quatro, deixando dois cartoes orfaos na segunda
   fila. Tres por tres fecha a grade. */
.lp-paradas__grade {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(1.1rem, 2.2vw, 1.8rem);
}
.lp-parada {
  background: var(--branco);
  border-radius: var(--raio);
  overflow: hidden;
  box-shadow: var(--sombra-s);
  display: flex;
  flex-direction: column;
}
.lp-parada__foto { aspect-ratio: 4 / 3; overflow: hidden; }
.lp-parada__foto img {
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: center 45%;
  transition: transform var(--dur-2) var(--ease);
}
.lp-parada:hover .lp-parada__foto img { transform: scale(1.04); }
.lp-parada__texto {
  padding: 1.25rem 1.3rem 1.4rem;
  display: flex; flex-direction: column; align-items: flex-start; gap: 0.55rem;
  flex: 1;
}
/* o selo desce para a base do cartao: a grade estica todos ate a altura do
   mais alto, e sem isto a condicao ficava boiando no meio do vazio */
.lp-parada__texto .lp-selo { margin-top: auto; }
.lp-parada__texto h3 { font-size: 1.2rem; }
/* :not(.lp-selo) porque a regra de paragrafo do cartao tem especificidade
   maior que a dos selos e vinha depois: media, os selos das paradas saiam em
   var(--musgo) e 15px, ou seja perdiam a cor de alerta e viravam corpo de
   texto. Era o oposto do que o bloco de selos promete la em cima. */
.lp-parada__texto p:not(.lp-selo) { color: var(--musgo); font-size: 0.94rem; }
/* Cartao que leva a um capitulo. O <a> cobre o cartao inteiro por ::after em
   vez de embrulhar tudo num <a>: assim o alvo de clique e o cartao todo, mas o
   leitor de tela ainda anuncia um unico link com o texto que interessa, em vez
   de ler titulo, paragrafo e selo como rotulo do link. */
.lp-parada--link { position: relative; }
.lp-parada__link {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  color: var(--verde);
  font-weight: 650;
  text-decoration: none;
  border-bottom: 1px solid rgba(40, 70, 93, 0.35);
}
.lp-parada__link::after { content: ""; position: absolute; inset: 0; border-radius: var(--raio); }
/* mesmo piso de 44px do .lp-link: medido em 768 e 390, o link nascia com 27px
   de altura. O ::after ja faz o cartao inteiro valer como alvo, mas quem mira
   no texto precisa acertar o texto. */
@media (max-width: 899px) { .lp-parada__link { padding-block: 0.6rem; } }
.lp-parada__link .ic { width: 1em; height: 1em; transition: transform var(--dur-1) var(--ease); }
.lp-parada--link:hover .lp-parada__link .ic { transform: translateX(4px); }
@media (hover: hover) and (pointer: fine) {
  .lp-parada--link {
    transition: transform var(--dur-1) var(--ease), box-shadow var(--dur-1) var(--ease);
  }
  .lp-parada--link:hover, .lp-parada--link:focus-within {
    --lp-t: translateY(-4px);
    transform: var(--lp-t);
    box-shadow: var(--sombra);
  }
}

/* Cartao sem foto. Nenhuma das fotos entregues mostra o vilarejo, e usar uma
   praia ali seria prometer o que a imagem nao mostra. Entao o cartao assume que
   nao tem foto: ganha fundo proprio, marca dagua e um icone, para ler como peca
   desenhada e nao como imagem que falhou ao carregar. */
.lp-parada--sofoto {
  background:
    radial-gradient(120% 90% at 12% 0%, rgba(40, 70, 93, 0.09), transparent 62%),
    var(--papel-2);
  border: 1px solid var(--linha);
  position: relative;
  overflow: hidden;
}
.lp-parada--sofoto::after {
  /* fio de marca, o mesmo par ciano e dourado do rotulo das secoes */
  content: "";
  position: absolute; left: 1.3rem; top: 0; width: 34px; height: 3px;
  border-radius: 0 0 3px 3px;
  background: linear-gradient(90deg, var(--mar), var(--lima));
}
.lp-parada__marca {
  display: flex; align-items: center; justify-content: center;
  width: 3.2rem; height: 3.2rem;
  margin: 1.9rem 1.3rem 0;
  border-radius: 50%;
  background: var(--branco);
  border: 1px solid var(--linha);
  color: var(--verde);
}
.lp-parada__marca .ic { width: 1.45rem; height: 1.45rem; }
.lp-parada--sofoto .lp-parada__texto { padding-top: 1.1rem; }

/* ==========================================================================
   5b. Capitulos de roteiro

   Esta pagina nao vende um passeio, vende tres. Cada roteiro vira um capitulo
   com cabecalho, linha do tempo propria e um lado com foto e quadros curtos.
   Os capitulos alternam claro, escuro, claro: e a unica divisoria de que o
   visitante precisa para saber onde um roteiro acaba e o outro comeca.

   A linha do tempo do bloco 4 nasceu dentro de .lp-dia, que e escura. As cores
   dos passos sao papel e lima, e sobre branco as duas somem. Por isso o
   capitulo claro repinta o percurso inteiro em verde. Nao e tema alternativo, e
   o mesmo desenho com a paleta trocada, e por isso mora colado no bloco que
   ele repinta.
   ========================================================================== */
.lp-rota { padding-block: var(--sec-y); }
.lp-rota--clara { background: var(--branco); }
.lp-rota--escura { background: var(--tinta); color: var(--papel); }

.lp-rota__grade {
  display: grid;
  grid-template-columns: minmax(0, 1.22fr) minmax(0, 0.88fr);
  gap: clamp(1.6rem, 3.2vw, 3rem);
  align-items: start;
  margin-top: clamp(1.7rem, 3vw, 2.5rem);
}
.lp-rota__dias { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 1.1rem; }

/* ---------- Lado do capitulo ---------- */
.lp-rota__lado { display: grid; gap: clamp(0.9rem, 1.6vw, 1.2rem); }
.lp-rota__foto {
  border-radius: var(--raio);
  overflow: hidden;
  aspect-ratio: 4 / 3;
  box-shadow: var(--sombra-s);
}
.lp-rota__foto img { width: 100%; height: 100%; object-fit: cover; display: block; }

.lp-quadro {
  border-radius: var(--raio);
  padding: 1.15rem 1.25rem 1.3rem;
  background: var(--papel-2);
  border: 1px solid var(--linha);
}
.lp-rota--escura .lp-quadro {
  background: rgba(247, 242, 232, 0.06);
  border-color: var(--linha-clara);
}
.lp-quadro h3 { color: var(--verde); margin-bottom: 0.9rem; }
.lp-rota--escura .lp-quadro h3 { color: var(--lima); }
.lp-quadro ul, .lp-quadro ol { display: grid; gap: 0.6rem; }
.lp-quadro li {
  display: flex;
  align-items: flex-start;
  gap: 0.6rem;
  font-size: 0.94rem;
  line-height: 1.5;
  color: var(--musgo);
}
.lp-rota--escura .lp-quadro li { color: var(--papel-suave); }
.lp-quadro li .ic { width: 1.05rem; height: 1.05rem; flex: none; margin-top: 0.2rem; color: var(--verde); }
.lp-rota--escura .lp-quadro li .ic { color: var(--lima); }
/* mesmas cores dos selos: verde para o que esta dentro, terracota para o que
   fica de fora, nas duas versoes de fundo */
.lp-quadro--sim li .ic { color: #1F7A4D; }
.lp-quadro--nao li .ic { color: #B4552B; }
.lp-rota--escura .lp-quadro--sim li .ic { color: #7BD8A6; }
.lp-rota--escura .lp-quadro--nao li .ic { color: #FFB37A; }

/* Trilha numerada. O roteiro do buggy da Lagoinha e uma sequencia de sete
   pontos, e sequencia pede numero e nao marcador: o visitante le em que ordem
   as paradas acontecem. O numero sai de counter para o <ol> continuar sendo
   lista ordenada de verdade para quem usa leitor de tela. */
.lp-quadro--trilha ol { counter-reset: trilha; }
.lp-quadro--trilha li { counter-increment: trilha; align-items: center; }
.lp-quadro--trilha li::before {
  content: counter(trilha);
  flex: none;
  width: 1.5rem; height: 1.5rem;
  border-radius: 50%;
  display: grid; place-items: center;
  font-family: var(--monof);
  font-size: 0.68rem;
  background: var(--verde);
  color: var(--papel);
}
.lp-rota--escura .lp-quadro--trilha li::before { background: var(--lima); color: var(--tinta); }

.lp-quadro p { color: var(--musgo); font-size: 0.94rem; line-height: 1.5; }
.lp-rota--escura .lp-quadro p { color: var(--papel-suave); }

/* Cada capitulo fecha com o proprio botao, e nao so a pagina no fim. Sao tres
   roteiros diferentes: quem decidiu no segundo nao deveria ter de rolar ate o
   rodape para falar sobre ele, e a mensagem do link ja vai com o nome do
   roteiro para a equipe saber do que se trata. */
.lp-rota__cta { justify-content: center; width: 100%; }

/* ---------- Linha do tempo em fundo claro ----------
   Espelho do bloco 4 e do 4b, trocando papel e lima por verde. Cada regra aqui
   corresponde a uma de la: se uma nova nascer la, precisa de par aqui, senao o
   capitulo claro fica com um pedaco de percurso invisivel. */
.lp-rota--clara .lp-linha::before { background: linear-gradient(180deg, var(--verde), rgba(40, 70, 93, 0.12)); }
.lp-rota--clara .lp-passo::before { background: var(--verde); box-shadow: 0 0 0 4px rgba(40, 70, 93, 0.12); }
.lp-rota--clara .lp-passo--fim::before {
  background: var(--branco);
  box-shadow: inset 0 0 0 3px var(--verde), 0 0 0 4px rgba(40, 70, 93, 0.12);
}
.lp-rota--clara .lp-passo__hora { color: var(--verde); }
.lp-rota--clara .lp-passo__corpo p { color: var(--musgo); }

.lp-rota--clara .lp-linha--anima::before { background: rgba(40, 70, 93, 0.14); }
.lp-rota--clara .lp-linha__fio { background: var(--verde); }
.lp-rota--clara .lp-linha--anima .lp-passo::before { background: rgba(40, 70, 93, 0.2); }
.lp-rota--clara .lp-linha--anima .lp-passo.is-aceso::before { background: var(--verde); }
.lp-rota--clara .lp-linha--anima .lp-passo--fim.is-aceso::before {
  background: var(--branco);
  box-shadow: inset 0 0 0 3px var(--verde);
}
.lp-rota--clara .lp-linha--anima .lp-passo::after { background: rgba(40, 70, 93, 0.1); }
.lp-rota--clara .lp-linha--anima .lp-passo:not(.is-aceso) .lp-passo__corpo h3 { color: var(--musgo); }

/* ==========================================================================
   6. Galeria
   ========================================================================== */
.lp-galeria {
  background: var(--tinta);
  color: var(--papel);
  padding-block: var(--sec-y);
}
/* Mosaico irregular, quatro formatos.

   A linha da grade e curta de proposito: o formato de cada quadro vem de
   quantas linhas ele ocupa, e com linha curta da para ter quatro tamanhos
   diferentes em vez de dois. Os spans foram escolhidos para casar com o
   material: 7 linhas da retrato alto, 6 da o 3 por 4 nativo das fotos de
   celular, 5 da quase quadrado, e a unica foto deitada ocupa 2 colunas.

   A ORDEM das fotos nao e livre. As unidades somam 96, que divide exato por 4,
   3 e 2 colunas, mas o empacotamento do grid e guloso e a maioria das ordens
   deixa buraco. A ordem publicada saiu de uma busca que testou milhares de
   permutacoes: fecha sem buraco e sem degrau nas tres larguras. Trocar uma
   foto de lugar reabre buraco, entao vale conferir antes. */
.lp-mosaico {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: 3.3rem;
  grid-auto-flow: dense;
  gap: 0.7rem;
}
.lp-foto {
  grid-row: span 6;
  position: relative;
  border: 0;
  padding: 0;
  border-radius: var(--raio);
  overflow: hidden;
  cursor: pointer;
  background: var(--tinta-2);
  display: block;
}
/* Galeria curta usa TRES colunas no desktop, nao quatro. Com oito fotos, em
   quatro colunas os quadros ficam pequenos e a grade sobra degrau de quatro
   linhas; em tres eles crescem e o degrau cai para tres. A linha e mais alta
   na mesma proporcao, para o quadro de 6 linhas continuar dando 3 por 4. */
.lp-mosaico--tres { grid-template-columns: repeat(3, 1fr); grid-auto-rows: 4.9rem; }

.lp-foto--alta { grid-row: span 7; }   /* retrato alto */
.lp-foto--baixa { grid-row: span 5; }  /* quase quadrado */
/* A unica foto deitada do conjunto. Duas colunas por 6 linhas da razao 1,50
   contra 1,33 da foto, ou seja aparecem 89% da altura e o rosto do rapaz, que
   esta no alto do quadro, fica no quadro. */
.lp-foto--larga { grid-column: span 2; grid-row: span 6; }
/* a foto deitada e a unica que precisa de enquadramento proprio: o assunto esta
   acima do centro geometrico */
.lp-foto--larga img { object-position: center 38%; }
.lp-foto img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  transition: transform var(--dur-2) var(--ease);
}
.lp-foto::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(180deg, transparent 52%, rgba(16, 30, 43, 0.82));
  opacity: 0.9;
  transition: opacity var(--dur-1) var(--ease);
}
.lp-foto__legenda {
  position: absolute;
  left: 0.85rem; right: 0.85rem; bottom: 0.75rem;
  z-index: 2;
  color: var(--papel);
  font-size: 0.7rem;
  text-align: left;
  text-shadow: 0 1px 6px rgba(16, 30, 43, 0.8);
}
.lp-foto:hover img, .lp-foto:focus-visible img { transform: scale(1.05); }
.lp-foto:hover::after { opacity: 0.7; }

/* ---------- Aparecimento dos quadros ----------
   O quadro entra subindo e crescendo de leve, em cascata da esquerda para a
   direita. Cascata por COLUNA, e nao por indice do DOM: o empacotamento denso
   reordena visualmente o que esta na marcacao, entao seguir o indice faria a
   onda pular pela parede. O atraso vem do lp.js na propriedade --lp-atraso.
   Sem script o atributo nunca e escrito e o quadro nasce visivel. */
.lp .lp-foto[data-lp-reveal] {
  opacity: 0;
  transform: translateY(26px) scale(0.965);
  transition: opacity 0.66s var(--ease), transform 0.66s var(--ease);
  transition-delay: var(--lp-atraso, 0ms);
}
.lp .lp-foto[data-lp-reveal].is-visivel { opacity: 1; transform: none; }

/* ==========================================================================
   7. Ficha
   ========================================================================== */
.lp-ficha { padding-block: var(--sec-y); }
.lp-ficha__grade {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(19rem, 1fr));
  gap: clamp(1.1rem, 2.4vw, 2rem);
}
.lp-ficha__col {
  border-radius: var(--raio);
  padding: 1.7rem 1.6rem;
  border: 1px solid var(--linha);
}
.lp-ficha__col--sim { background: var(--branco); }
.lp-ficha__col--nao { background: var(--papel-2); }
.lp-ficha__col h3 { color: var(--verde); margin-bottom: 1.1rem; }
.lp-ficha__col ul { display: grid; gap: 0.75rem; }
.lp-ficha__col li {
  display: flex;
  align-items: flex-start;
  gap: 0.65rem;
  line-height: 1.45;
}
.lp-ficha__col li .ic { width: 1.15rem; height: 1.15rem; flex: none; margin-top: 0.18rem; }
.lp-ficha__col--sim li .ic { color: #1F7A4D; }
.lp-ficha__col--nao li .ic { color: #B4552B; }
.lp-ficha__nota {
  margin-top: 1.2rem;
  padding-top: 1rem;
  border-top: 1px solid var(--linha);
  color: var(--musgo);
  font-size: 0.72rem;
  line-height: 1.6;
}

/* ==========================================================================
   8. Antes de embarcar
   ========================================================================== */
.lp-mochila {
  background: var(--tinta);
  color: var(--papel);
  padding-block: var(--sec-y);
}
.lp-mochila__corpo {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(1.4rem, 3vw, 3rem);
  align-items: start;
}
.lp-mochila__lista { display: flex; flex-wrap: wrap; gap: 0.6rem; }
.lp-mochila__lista li {
  border: 1px solid var(--linha-clara);
  border-radius: 999px;
  padding: 0.55rem 1.05rem;
  color: var(--papel-suave);
  font-size: 0.72rem;
}
.lp-aviso {
  border-left: 3px solid var(--lima);
  padding-left: 1.2rem;
  display: grid;
  gap: 1rem;
}
.lp-aviso p { color: var(--papel-suave); font-size: 0.96rem; }
.lp-aviso strong { color: var(--papel); }
.lp-aviso .ic { width: 1.05em; height: 1.05em; color: var(--lima); vertical-align: -0.15em; margin-right: 0.3rem; }

/* ==========================================================================
   8b. Cartao de frota e mural de avaliacoes

   Duas pecas da pagina de transfer. Elas nasceram aqui, e nao no styles.css,
   porque so a landing page de servico precisa delas.
   ========================================================================== */

/* A .lp-parada__foto e 4 por 3, medida para foto de celular em retrato. As tres
   artes oficiais da frota sao 1600 por 900, ou seja 16 por 9: dentro de um
   quadro 4 por 3 o object-fit come cerca de 11% de cada lado e decepa a frente
   ou a traseira do veiculo, que e justamente o que o cartao existe para
   mostrar. Este modificador troca so a proporcao do quadro. */
.lp-parada--frota .lp-parada__foto { aspect-ratio: 16 / 9; }
.lp-parada--frota .lp-parada__foto img { object-position: center; }

/* Faixa deitada acima da ficha. A .lp-ficha nasceu so com as duas colunas de
   incluso e nao incluso, e na pagina de transfer o bloco do Beach Park precisa
   de imagem antes da ficha. 16 por 9 porque e a proporcao em que a arte foi
   gerada, entao a faixa nao recorta nada. */
.lp-ficha__foto {
  border-radius: var(--raio);
  overflow: hidden;
  aspect-ratio: 16 / 9;
  box-shadow: var(--sombra-s);
  margin-bottom: clamp(1.3rem, 2.4vw, 2rem);
}
.lp-ficha__foto img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* Mural de avaliacoes. Reaproveita a casca .depo e os cartoes .depo-card do
   styles.css, que ja sao escuros e ja tem estrela, aspas e rodape de autor. O
   que muda e so o contentor: na home os cartoes vivem num carrossel montado
   pelo main.js, e importar aquele carrossel traria dependencia de script que
   esta pagina nao precisa. Aqui sao tres colunas fixas que caem para uma. */
.lp-vozes {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(1rem, 2vw, 1.6rem);
  align-items: stretch;
}
/* o cartao do carrossel tem largura fixa; na grade ele ocupa a coluna inteira */
.lp-vozes .depo-card { width: auto; min-width: 0; height: 100%; }

/* ==========================================================================
   9. Dúvidas
   ========================================================================== */
.lp-duvidas { padding-block: var(--sec-y); background: var(--papel-2); }
.lp-duvidas__lista { display: grid; gap: 0.7rem; max-width: 52rem; }
.lp-duvida {
  background: var(--branco);
  border: 1px solid var(--linha);
  border-radius: var(--raio);
  overflow: hidden;
}
.lp-duvida summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 1.05rem 1.3rem;
  cursor: pointer;
  font-weight: 650;
  list-style: none;
  min-height: 44px;
}
.lp-duvida summary::-webkit-details-marker { display: none; }
.lp-duvida summary .ic {
  width: 1.1rem; height: 1.1rem; flex: none;
  color: var(--verde);
  transition: transform var(--dur-1) var(--ease);
}
.lp-duvida[open] summary .ic { transform: rotate(45deg); }
.lp-duvida > p {
  padding: 0 1.3rem 1.25rem;
  color: var(--musgo);
  max-width: 44rem;
}

/* ==========================================================================
   10. CTA final
   ========================================================================== */
.lp-final {
  background: var(--tinta);
  color: var(--papel);
  padding-block: var(--sec-y);
}
.lp-final__caixa { max-width: 44rem; }
.lp-final__caixa > p { color: var(--papel-suave); margin-block: 0.9rem 1.7rem; }
.lp-final__acoes { display: flex; flex-wrap: wrap; gap: 0.9rem; }

/* ==========================================================================
   11. Barra fixa de ação (celular)
   ========================================================================== */
.lp-barra {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  z-index: var(--z-chat);
  display: none;
  align-items: center;
  gap: 0.9rem;
  padding: 0.7rem clamp(0.9rem, 4vw, 1.2rem);
  padding-bottom: calc(0.7rem + env(safe-area-inset-bottom, 0px));
  background: rgba(16, 30, 43, 0.94);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-top: 1px solid var(--linha-clara);
  transform: translateY(110%);
  transition: transform var(--dur-2) var(--ease);
}
.lp-barra.is-visivel { transform: none; }
.lp-barra__texto { flex: 1; min-width: 0; }
.lp-barra__texto .mono { color: var(--lima); font-size: 0.7rem; }
.lp-barra__texto p:last-child {
  color: var(--papel-suave);
  font-size: 0.82rem;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.lp-barra .botao { flex: none; min-height: 44px; }

/* ==========================================================================
   12. Lightbox
   ========================================================================== */
.lp-box {
  position: fixed; inset: 0;
  z-index: calc(var(--z-modal) + 10);
  display: grid;
  place-items: center;
  padding: clamp(0.8rem, 4vw, 2.5rem);
}
.lp-box[hidden] { display: none; }
.lp-box__fundo {
  position: absolute; inset: 0;
  background: rgba(16, 30, 43, 0.95);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  border: 0;
}
.lp-box__quadro {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.9rem;
  max-height: 100%;
}
.lp-box__quadro img {
  max-width: min(100%, 62rem);
  max-height: calc(100svh - 9rem);
  width: auto; height: auto;
  border-radius: var(--raio);
  box-shadow: var(--sombra);
  background: var(--tinta-2);
}
.lp-box__legenda {
  color: var(--papel-suave);
  font-size: 0.74rem;
  text-align: center;
  max-width: 40rem;
  text-transform: none;
  letter-spacing: 0.03em;
}
.lp-box__conta {
  position: absolute;
  top: clamp(0.9rem, 3vw, 1.6rem);
  left: 50%;
  transform: translateX(-50%);
  z-index: 3;
  color: var(--papel-suave);
  font-size: 0.72rem;
}
.lp-box__btn {
  position: absolute;
  z-index: 3;
  width: 46px; height: 46px;
  display: grid; place-items: center;
  border-radius: 50%;
  border: 1px solid var(--linha-clara);
  background: rgba(16, 30, 43, 0.6);
  color: var(--papel);
  cursor: pointer;
  transition: background-color var(--dur-1) var(--ease), color var(--dur-1) var(--ease);
}
.lp-box__btn:hover { background: var(--lima); color: var(--tinta); border-color: var(--lima); }
.lp-box__btn .ic { width: 1.2rem; height: 1.2rem; }
.lp-box__btn--x { top: clamp(0.9rem, 3vw, 1.6rem); right: clamp(0.9rem, 3vw, 1.6rem); }
.lp-box__btn--ant { left: clamp(0.6rem, 2.5vw, 1.6rem); top: 50%; transform: translateY(-50%); }
.lp-box__btn--prox { right: clamp(0.6rem, 2.5vw, 1.6rem); top: 50%; transform: translateY(-50%); }

/* O chat flutuante sai de cena quando a barra fixa ou o lightbox ocupam a tela.
   Classe propria em vez da .esconde do site: aquela e controlada pelo main.js a
   cada rolagem e os dois ficariam brigando pelo mesmo atributo. */
.lp .zap.lp-oculto { opacity: 0; visibility: hidden; pointer-events: none; }

/* ==========================================================================
   13. Reveal das seções novas
   O observer do main.js percorre uma lista fechada de classes e as classes
   desta pagina nao estao nela. O lp.js escreve o atributo nos alvos daqui, e o
   estado inicial mora neste bloco para o elemento nao piscar antes do script.
   ========================================================================== */
.lp [data-lp-reveal] {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity var(--dur-2) var(--ease), transform var(--dur-2) var(--ease);
}
/* Devolve o transform por VARIAVEL em vez de escrever "none". Medido: com
   "none" fixo, esta regra (0,3,0 e mais adiante no arquivo) vencia o
   translateY(-4px) do hover do cartao, e a elevacao nunca chegava na tela. Com
   a variavel, quem tem transform proprio so precisa declarar --lp-t. */
.lp [data-lp-reveal].is-visivel { opacity: 1; transform: var(--lp-t, none); }

/* ==========================================================================
   14. Responsivo
   ========================================================================== */
@media (max-width: 1023px) {
  .lp-mochila__corpo { grid-template-columns: minmax(0, 1fr); }
  /* tres depoimentos longos em tres colunas estreitas viram parede de texto */
  .lp-vozes { grid-template-columns: minmax(0, 1fr); }
  /* o lado desce para baixo da linha do tempo: em duas colunas estreitas a
     linha do tempo perde a largura de leitura e a foto vira selo */
  .lp-rota__grade { grid-template-columns: minmax(0, 1fr); }
  .lp-mosaico { grid-template-columns: repeat(3, 1fr); grid-auto-rows: 2.6rem; }
  .lp-paradas__grade { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 899px) {
  /* A barra fixa so existe no celular: no desktop o CTA do cabecalho ja fica
     sempre a vista e a barra roubaria altura util da tela. */
  .lp-barra { display: flex; }
  /* E o canto de baixo e so dela. Medido em 360x740: o botao flutuante do chat
     pousava exatamente em cima do texto do CTA do hero, e mais abaixo disputava
     lugar com a propria barra. Dois botoes de WhatsApp no mesmo canto nao sao
     duas chances de conversao, sao um cobrindo o outro. No desktop o chat
     continua, porque la nao existe barra. */
  .lp .zap { display: none; }
  /* Espaco para a barra nao cobrir o fim do rodape. O valor acompanha a area
     segura porque a propria barra a usa: com 4,5rem fixos e o indicador do
     iPhone valendo 34px, medido, a barra cobria 37 dos 41px do link da
     politica de privacidade, que e justamente o que a LGPD exige alcancavel. */
  .lp .pe__base { padding-bottom: calc(5.5rem + env(safe-area-inset-bottom, 0px)); }
}

@media (max-width: 699px) {
  /* Mesma mecanica do hero da home: a foto ocupa uma faixa abaixo da utilbar e
     do cabecalho, e o texto desce para o fundo escuro. Assim a arte vertical
     aparece inteira em vez de virar uma tira. */
  .lp .lp-shell { background: var(--tinta); }
  /* A faixa de foto NAO usa o --palco da home. Medido em 390x844, 360x740 e
     414x896: com o palco inteiro a foto terminava em 780 e o botao de conversao
     caia entre 246 e 306px ABAIXO da dobra, ou seja o visitante via uma foto
     bonita e nenhuma oferta. Aqui a faixa cede altura para o texto e o CTA
     principal entra na primeira tela. */
  .lp .lp-shell .shell__foto,
  .lp .lp-shell .shell__veu { inset: var(--lp-topo) 0 auto 0; height: var(--lp-faixa); }
  .lp .lp-shell .shell__foto img { object-position: center 38%; }
  .lp .lp-shell .shell__veu {
    background: linear-gradient(180deg,
      rgba(16, 30, 43, 0.45) 0%,
      rgba(16, 30, 43, 0.05) 26%,
      rgba(16, 30, 43, 0.10) 62%,
      rgba(16, 30, 43, 0.94) 100%);
  }
  .lp .lp-hero { margin-top: var(--lp-faixa); min-height: auto; }
  /* o subtitulo e a peca mais alta do bloco: em corpo cheio ocupava 128px de
     uma dobra de 844 e sozinho empurrava o botao para fora */
  .lp .lp-hero__sub { font-size: 0.95rem; line-height: 1.5; }
  .lp .lp-hero::before { background: none; }
  .lp .lp-hero__conteudo { padding-block: 1.2rem 0.6rem; }
  .lp .lp-hero__acoes { width: 100%; }
  .lp .lp-hero__acoes .botao { width: 100%; justify-content: center; }
}

/* Tela baixa, tipo iPhone SE em retrato. Medido: com a faixa normal o botao
   de conversao terminava 33px abaixo da dobra em 375x667 e 107px abaixo em
   320x640. Num aparelho real, com a barra do navegador ocupando altura, e
   pior. Aqui a foto cede mais um pouco e o botao volta para dentro. */
@media (max-width: 699px) and (max-height: 780px) {
  .lp .lp-shell .shell__foto,
  .lp .lp-shell .shell__veu { height: var(--lp-faixa-baixa); }
  .lp .lp-hero { margin-top: var(--lp-faixa-baixa); }
  /* so encolher a foto nao bastava no 320x640, a menor tela que ainda aparece:
     sobravam 22px. O subtitulo e o bloco mais alto do hero, entao ele cede
     junto, e o respiro do bloco fecha o resto. */
  .lp .lp-hero__sub { font-size: 0.9rem; line-height: 1.45; }
  .lp .lp-hero__conteudo { padding-block: 0.85rem 0.35rem; }
  .lp .lp-hero__acoes { margin-top: 1.1rem; gap: 0.6rem; }
}

@media (max-width: 639px) {
  .lp-paradas__grade { grid-template-columns: minmax(0, 1fr); }
  .lp-mosaico { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 1.9rem; }
  /* em duas colunas a deitada ocupa a largura inteira e mantem as 6 linhas: a
     razao fica em 1,47 contra 1,33 da foto, ou seja continua deitada */
  .lp-foto--larga { grid-column: span 2; grid-row: span 6; }
  .lp-marcos__lista { gap: 0.7rem 1.4rem; }
  .lp-passo { padding-left: 1.9rem; }
  .lp-box__btn--ant { left: 0.5rem; }
  .lp-box__btn--prox { right: 0.5rem; }
  .lp-box__quadro img { max-height: calc(100svh - 11rem); }
}

/* Alvo de toque no celular: o mesmo piso de 44px que o site ja aplica aos
   botoes de conversao, estendido aos elementos novos desta pagina. */
@media (max-width: 899px) {
  .lp .botao, .lp .lp-box__btn, .lp .lp-duvida summary { min-height: 44px; }
  .lp .lp-foto { min-height: 44px; }
}

/* O site fixa "nada de texto abaixo de 12px no celular" em styles.css 1782.
   A lp.css carrega depois e vencia por ordem de fonte em sete seletores,
   medidos entre 11,20 e 11,84px. Aqui eles voltam para o piso. */
@media (max-width: 639px) {
  .lp .lp-foto__legenda,
  .lp .lp-selo,
  .lp .lp-barra__texto .mono,
  .lp .lp-ficha__nota,
  .lp .lp-mochila__lista li,
  .lp .lp-marcos__lista li,
  .lp .lp-box__conta { font-size: 0.75rem; }
  .lp .lp-box__legenda { font-size: 0.8rem; }
}

@media (prefers-reduced-motion: reduce) {
  .lp [data-lp-reveal] { opacity: 1; transform: none; transition: none; }
  .lp-parada--link { transition: none; }
  .lp-parada--link:hover, .lp-parada--link:focus-within { --lp-t: none; transform: none; box-shadow: var(--sombra-s); }
  /* o movimento morre, a troca de cor fica: movimento reduzido pede menos
     deslocamento, nao menos contraste. Sem a inversao o visitante perderia o
     unico sinal de que o cartao esta sob o ponteiro. */
  .lp-item { transition: background-color 0.01ms, border-color 0.01ms; }
  .lp-item:hover, .lp-item:focus-within { --lp-t: none; transform: none; box-shadow: var(--sombra-s); }
  .lp-parada:hover .lp-parada__foto img,
  .lp-foto:hover img, .lp-foto:focus-visible img { transform: none; }
  .lp .lp-foto[data-lp-reveal] { opacity: 1; transform: none; transition: none; }
  .lp-barra { transition: none; }
}


/* ---------- Preco de entrada no hero da landing page ----------
   O valor vem em duas alturas de propósito: o numero em destaque e, logo
   abaixo, o que ele significa. Preco por GRUPO nao se compara com preco por
   pessoa, e publicar o numero sem essa linha seria pior do que nao publicar. */
.lp-hero__preco {
  display: grid; gap: 0.15rem;
  margin: 0.9rem 0 0;
  font-size: 0.74rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: rgba(247, 242, 232, 0.72);
  text-shadow: 0 1px 8px rgba(16, 30, 43, 0.6);
}
.lp-hero__preco strong {
  font-size: 1.02rem; letter-spacing: 0.04em;
  color: var(--lima); font-weight: 700;
}
.lp-hero__preco span { text-transform: none; letter-spacing: 0.02em; font-size: 0.72rem; }
@media (max-width: 719px) {
  .lp-hero__preco { font-size: 0.72rem; }
  .lp-hero__preco strong { font-size: 0.98rem; }
}


/* ---------- Tarifario de trechos ----------
   Uma linha por destino, com o valor sempre na mesma coluna: o visitante compara
   de cima a baixo sem ter de procurar o numero dentro de um paragrafo. No
   celular a linha vira bloco, porque tres colunas em 360px espremem o nome do
   destino ate quebrar em duas linhas. */
.lp-tabela { padding-block: var(--sec-y); background: var(--papel); }
.lp-trechos { display: grid; gap: 0.1rem; margin-top: clamp(1.4rem, 3vw, 2rem); }
.lp-trecho {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto;
  align-items: center; gap: 0.6rem 1.4rem;
  padding: 0.95rem 0.2rem;
  border-bottom: 1px solid var(--linha);
}
.lp-trecho:first-child { border-top: 1px solid var(--linha); }
.lp-trecho__destino { font-weight: 600; font-size: 1.02rem; color: var(--texto); }
.lp-trecho__valor {
  font-size: 0.8rem; letter-spacing: 0.04em;
  color: var(--verde); white-space: nowrap;
}
.lp-trecho__obs {
  display: block; color: var(--musgo);
  font-size: 0.72rem; letter-spacing: 0.03em;
}
.lp-trecho__cta {
  display: inline-flex; align-items: center; gap: 0.4rem;
  min-height: 44px; padding: 0.4rem 0.2rem;
  color: var(--verde); text-decoration: none;
  font-weight: 600; font-size: 0.92rem;
  white-space: nowrap;
}
.lp-trecho__cta:hover { color: var(--tinta); gap: 0.7rem; }
@media (max-width: 719px) {
  .lp-trecho {
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 0.25rem 1rem;
  }
  .lp-trecho__destino { grid-column: 1; }
  .lp-trecho__valor { grid-column: 1; }
  .lp-trecho__cta { grid-column: 2; grid-row: 1 / span 2; align-self: center; }
}
