@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Jost:wght@300;400;500;600&display=swap');

/* =================================================================
   moderno.css — a camada visual nova do Hotel Parque das Primaveras

   Carregada por ÚLTIMO em todas as telas. Nada aqui reescreve o CSS
   legado (layout2.css, layout.css, screen*.css): é só sobreposição.
   Para desfazer tudo de uma vez e voltar ao site original:

       python3 ferramentas/ligar-css-moderno.py --remover
       python3 ferramentas/ligar-interface.py   --remover
       python3 ferramentas/ligar-menu-mobile.py --remover

   ÍNDICE
     0. Símbolos              — cores, fontes, medidas
     1. Base                  — corpo, tipografia raiz
     2. Correções estruturais — bugs de layout do site antigo
     3. Barra de navegação
     4. Capa da home
     5. Capa das páginas internas
     6. Ritmo das seções
     7. Tipografia editorial
     8. Botões
     9. Fotos, cartões e legendas
    10. Peças novas da home
    11. Galerias
    12. Rodapé
    13. Menu recolhível (até 1099px)
    14. WhatsApp flutuante
    15. Movimento
    16. Telas estreitas
   ================================================================= */


/* -----------------------------------------------------------------
   0. SÍMBOLOS

   O site antigo usa #FF194E (rosa-choque) em 26 pontos de layout2.css,
   inclusive em TODOS os títulos, e #11a934 (verde-semáforo) no rodapé e
   na faixa da capa. Os dois brigam entre si e com a mata das fotos.

   A marca continua verde — o verde só fica mais fundo, que é o que faz
   uma cor parecer cara em vez de berrante. O vermelho sai dos títulos e
   fica reservado para ação: quando tudo grita, nada é ouvido.

   Contraste medido sobre --areia (WCAG AA pede 4.5:1 para texto):
     --verde     sobre --areia .... 9.8:1
     --tinta     sobre --areia .... 8.9:1
     branco      sobre --acao ..... 4.9:1
     branco      sobre --verde-fundo 14.1:1
   O rosa antigo dava 3.66:1 sobre branco — reprovava.
   ----------------------------------------------------------------- */

:root {
    /* verdes */
    --verde-fundo:   #0f2e1f;   /* barra rolada, rodapé, véus */
    --verde:         #17492f;   /* títulos, cor institucional */
    --verde-vivo:    #2c7a52;   /* links, detalhes, foco */
    --verde-palido:  #e7efe8;   /* fundo de faixa suave */

    /* neutros quentes */
    --areia:         #faf8f4;   /* papel */
    --areia-2:       #f2ede4;   /* faixa alternada */
    --linha:         #e2dbcd;   /* filetes e bordas */

    /* texto */
    --tinta:         #33413a;
    --tinta-2:       #6d7c73;

    /* AÇÃO — o rosa da marca, e não um vermelho qualquer.

       Amostrado pixel a pixel de img/logo-hpp-g.png: a flor é #FF174E,
       matiz 346°, saturação 100%. É exatamente o rosa que o site antigo
       usava em tudo — e o motivo de ele ter saído dos títulos não foi o
       tom, foi o contraste: branco sobre #FF174E dá 3.83:1 e reprova no
       WCAG AA, que pede 4.5:1.

       --acao mantém matiz e saturação idênticos aos da flor e só baixa a
       luminosidade de 55% para 43%. Continua lendo como o rosa da logo,
       agora com 5.17:1 sobre branco e 4.87:1 sobre a areia.

       --rosa é a flor sem retoque, para uso DECORATIVO apenas (filetes,
       marca-d'água, pequenos sinais) — nunca como fundo de texto. */
    --rosa:          #ff174e;
    --acao:          #db0034;
    --acao-2:        #b3002a;

    /* tipos */
    --f-display: 'Cormorant Garamond', 'Lora', Georgia, 'Times New Roman', serif;
    --f-ui:      'Jost', 'Titillium Web', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

    /* medidas */
    --raio:      3px;
    --raio-g:    6px;
    --barra:     92px;          /* altura da barra do topo, solta */
    --barra-min: 64px;          /* altura da barra do topo, rolada */

    /* elevação — sombra verde, não cinza: assenta melhor sobre areia */
    --sombra-1: 0 1px 2px rgba(15, 46, 31, .06), 0 6px 18px rgba(15, 46, 31, .07);
    --sombra-2: 0 2px 6px rgba(15, 46, 31, .09), 0 18px 44px rgba(15, 46, 31, .13);

    --curva: cubic-bezier(.22, .68, .28, 1);
}


/* -----------------------------------------------------------------
   1. BASE
   ----------------------------------------------------------------- */

html {
    background: var(--areia);
    scroll-behavior: smooth;
}

/* âncoras não podem parar debaixo da barra fixa */
[id],
a[name] {
    scroll-margin-top: calc(var(--barra-min) + 16px);
}

/* O PAPEL — a textura de folhagem, de volta e mais leve.

   layout2.css:111 usava img/back.png em força total, cinza, atrás de TUDO,
   inclusive atrás do texto corrido. Tirá-la limpou a leitura, mas levou
   junto uma parte da identidade do lugar.

   Aqui ela volta em três camadas, de baixo para cima:
     1. a cor de fundo, o creme --areia;
     2. a textura (588x470, ladrilhável — a emenda horizontal foi conferida
        e casa), reduzida a 420px para a folhagem ficar mais miúda;
     3. um véu do MESMO creme a 58%, que lava a textura.

   O véu é o que a torna leve sem precisar de um arquivo novo: a folha mais
   escura da imagem tem luminância 219 e, depois da lavagem, fica em 237
   contra 250 do fundo. Treze pontos de diferença — presente ao olhar,
   invisível ao ler.

   As faixas de seção (.hpp-faixa-clara, .hpp-marca, o rodapé) têm fundo
   próprio e cobrem a textura de propósito: alternar papel texturizado com
   faixa lisa é o que dá ritmo à página. */
body {
    background-color: var(--areia);
    background-image:
        linear-gradient(rgba(250, 248, 244, .58), rgba(250, 248, 244, .58)),
        url("../img/back.png");
    background-repeat: repeat;
    background-size: auto, 420px auto;
    font-family: var(--f-ui);
    font-weight: 400;
    font-size: 17px;
    line-height: 1.7;
    color: var(--tinta);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

b, strong {
    font-weight: 600;   /* peso real: antes o navegador engrossava o 400 */
}

a {
    color: var(--verde-vivo);
}

a:hover,
a:focus {
    color: var(--verde);
}

::selection {
    background: var(--acao);
    color: #fff;
}

:focus-visible {
    outline: 2px solid var(--verde-vivo);
    outline-offset: 3px;
}

img {
    max-width: 100%;
}


/* -----------------------------------------------------------------
   2. CORREÇÕES ESTRUTURAIS
   Bugs reais do site antigo, medidos antes e depois.
   ----------------------------------------------------------------- */

/* Transbordamento horizontal no celular, nas 19 telas.

   layout2.css:986 zera o padding lateral do container abaixo de 768px:
       @media (max-width:767px) { .segment3 .container { padding: 3em 0 } }
   Como .row tem margin -15px de cada lado (Bootstrap), a linha fica 30px
   mais larga que o container e vaza 15px. Medido: scrollWidth 429 contra
   clientWidth 414. A seção 6 devolve padding lateral em toda largura. */

/* O selo do reCAPTCHA é fixo no canto e empurrava a página em telas
   estreitas (medido: +186px em contato.php). Ancorar no canto resolve sem
   escondê-lo — o Google exige que fique visível.

   Também sobe acima do botão do WhatsApp, que ocupa o mesmo canto. */
.grecaptcha-badge {
    right: 0 !important;
    bottom: 92px !important;
    overflow: hidden;
}

/* O Affix do Bootstrap está desligado (ferramentas/ligar-interface.py tira
   o data-spy do HTML) porque agora quem cuida da barra rolada é o
   js/interface.js. Estas regras são o cinto de segurança: se algum HTML
   escapar do script, o Affix não desmonta a barra nova. */
.navbar .menu-top .menu.affix,
.navbar .menu-top .menu.affix-top,
.navbar .menu-top .menu.affix-bottom {
    position: static !important;
    top: auto !important;
    background: none !important;
    padding: 0 !important;
}


/* -----------------------------------------------------------------
   3. BARRA DE NAVEGAÇÃO

   Antes: logo enorme centralizado, e abaixo dele 11 links espremidos com
   letter-spacing:-1px e font-weight:900 — as palavras se tocavam. Ao
   rolar, o Affix trocava tudo por uma tarja branca com um ícone de 20px.

   Agora: uma barra só, logo à esquerda, links à direita, RESERVAR em
   destaque. Sobre a capa ela é transparente com um véu de topo; ao rolar
   vira verde-fundo. O logo é branco (img/logo-hpp.png, 373x100) e
   funciona nos dois estados — por isso a barra rolada é verde escura e
   não branca.
   ----------------------------------------------------------------- */

/* Uma barra de verdade, não um degradê solto.

   Antes a barra era transparente com um véu esfumaçado por baixo dos
   links. Sem borda nem limite, ela parecia flutuar solta sobre a foto, e
   o conteúdo da capa passava por trás dela sem que nada indicasse onde uma
   acabava e o outro começava.

   Agora é uma faixa translúcida com desfoque do que está atrás e um fio de
   luz na base. Tem presença e limite desde o topo, e ao rolar apenas fica
   opaca — não muda de natureza. */
.navbar.navbar-default.navbar-fixed-top {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 1030;
    margin: 0;
    min-height: 0;
    border: 0;
    background-color: rgba(11, 30, 20, .30);
    -webkit-backdrop-filter: blur(14px) saturate(150%);
            backdrop-filter: blur(14px) saturate(150%);
    box-shadow: inset 0 -1px 0 rgba(255, 255, 255, .12);
    transition: background-color .4s var(--curva),
                box-shadow .4s var(--curva);
}

/* Reforço de leitura no alto.

   O desfoque iguala a barra em qualquer foto, mas não escurece: sobre um
   céu claro os links brancos ainda perdiam contraste. Este degradê curto
   resolve, e some quando a barra fica opaca. */
.navbar.navbar-default.navbar-fixed-top::before {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(to bottom,
                rgba(10, 28, 18, .40) 0%,
                rgba(10, 28, 18, .12) 100%);
    pointer-events: none;
    transition: opacity .4s var(--curva);
}

/* navegadores sem backdrop-filter recebem um fundo mais fechado, para os
   links não dependerem só do degradê */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    .navbar.navbar-default.navbar-fixed-top {
        background-color: rgba(11, 30, 20, .55);
    }
}

body.hpp-rolou .navbar.navbar-default.navbar-fixed-top {
    background-color: rgba(15, 46, 31, .94);
    box-shadow: inset 0 -1px 0 rgba(255, 255, 255, .08),
                0 10px 34px rgba(10, 28, 18, .28);
}

body.hpp-rolou .navbar.navbar-default.navbar-fixed-top::before {
    opacity: 0;
}

/* o container do Bootstrap trava em 1170px; a barra pede mais respiro */
.navbar .container {
    width: auto;
    max-width: 1420px;
    padding: 0 34px;
}

.navbar .menu-top {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    height: var(--barra);
    transition: height .4s var(--curva);
}

body.hpp-rolou .navbar .menu-top {
    height: var(--barra-min);
}

/* --- logo --- */

.navbar .menu-top .logo {
    margin: 0;
    flex: 0 0 auto;
}

.navbar .menu-top .logo img {
    width: 196px;
    max-width: none;
    height: auto;
    transition: width .4s var(--curva);
}

body.hpp-rolou .navbar .menu-top .logo img {
    width: 152px;
}

/* A PASSAGEM DA MARCA — capa para barra.

   Na home a marca abre grande e centralizada sobre a foto, e a barra do
   topo começa SEM logo: eram duas marcas ao mesmo tempo, uma branca em
   cima da outra, e nenhuma das duas se destacava.

   Conforme a página rola, a da capa encolhe e some enquanto a da barra
   aparece — a leitura é de uma marca só que muda de lugar. Quem dá o
   número é o js/interface.js, na variável --rolagem (0 no topo, 1 depois
   de ~360px).

   A classe .hpp-capa-marca só existe se o script rodou. Sem JavaScript
   nada disto se aplica: a barra mostra a logo normalmente e a da capa
   fica no tamanho cheio — feio, nunca quebrado. */

body.hpp-capa-marca .navbar .menu-top .logo {
    opacity: var(--rolagem, 1);
    transform: translateY(calc((1 - var(--rolagem, 1)) * -10px));
    transition: opacity .25s linear, transform .25s var(--curva);
}

/* invisível não deve ser clicável */
body.hpp-capa-marca:not(.hpp-rolou) .navbar .menu-top .logo {
    pointer-events: none;
}

/* --- links --- */

.navbar .menu-top .menu {
    margin: 0;
    justify-content: flex-end;
    flex-wrap: nowrap;
    gap: 0;
}

/* Tamanho fluido, não em degraus.

   São nove links, e promocoes.html ainda tem um décimo item em forma de
   botão. Com tamanho fixo o menu estourava para fora da tela entre 1200 e
   1500px — largura de notebook, justamente onde mais gente navega. Com
   clamp em vw, a tipografia encolhe junto com a janela e o menu nunca
   quebra em duas fileiras nem sai pela direita.

   Limites: 9.5px é o menor tamanho ainda legível em versalete; 12px é o
   teto, acima do qual o menu passaria a competir com o logo. */
.navbar .menu-top .menu a.btn.btn-link {
    position: relative;
    font-family: var(--f-ui);
    font-size: clamp(9.5px, .78vw, 12px);
    font-weight: 400;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, .90);
    text-shadow: 0 1px 12px rgba(10, 28, 18, .55);
    padding: 10px clamp(5px, .62vw, 11px);
    border: 0;          /* o hover legado punha borda de 1px e empurrava tudo */
    border-radius: 0;
    white-space: nowrap;
    line-height: 1;
}

/* filete que cresce da esquerda no lugar da borda que pulava */
.navbar .menu-top .menu a.btn.btn-link::after {
    content: "";
    position: absolute;
    left: clamp(5px, .62vw, 11px);
    right: clamp(5px, .62vw, 11px);
    bottom: 3px;
    height: 1px;
    background: currentColor;
    opacity: .9;
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform .34s var(--curva);
}

.navbar .menu-top .menu a.btn.btn-link:hover,
.navbar .menu-top .menu a.btn.btn-link:focus,
.navbar .menu-top .menu a.btn.btn-link.active {
    color: #fff;
    border: 0;
}

.navbar .menu-top .menu a.btn.btn-link:hover::after,
.navbar .menu-top .menu a.btn.btn-link:focus::after,
.navbar .menu-top .menu a.btn.btn-link.active::after {
    transform: scaleX(1);
}

/* o ícone-casinha que o Affix mostrava; sem Affix ele não tem função */
.navbar .menu-top .menu a.btn.btn-link.display-none {
    display: none;
}

/* --- Reservas: a única ação da barra ---
   Identificado pelo href, então nenhuma das 20 telas precisou de edição. */

.navbar .menu-top .menu a.btn.btn-link[href="reservas.php"] {
    margin-left: 16px;
    padding: 12px 24px;
    color: #fff;
    background: var(--acao);
    border-radius: var(--raio);
    font-weight: 500;
    letter-spacing: .16em;
    text-shadow: none;
    box-shadow: 0 6px 18px rgba(10, 28, 18, .26);
}

.navbar .menu-top .menu a.btn.btn-link[href="reservas.php"]:hover,
.navbar .menu-top .menu a.btn.btn-link[href="reservas.php"]:focus {
    background: var(--acao-2);
    color: #fff;
}

.navbar .menu-top .menu a.btn.btn-link[href="reservas.php"]::after {
    display: none;
}

/* Só promocoes.html tem um segundo botão no menu (.promocoes, em
   rgb(168,3,42) pelo layout.css). Dois botões vermelhos lado a lado
   anulam um ao outro: o de Promoções vira contorno e o Reservas continua
   sendo o único cheio. */
.navbar .menu-top .menu a.btn.btn-link.promocoes {
    margin-left: 8px;
    padding: 12px 22px;
    background-color: transparent;
    border: 1px solid rgba(255, 255, 255, .55);
    border-radius: var(--raio);
    color: #fff;
    font-weight: 400;
    letter-spacing: .16em;
    text-shadow: none;
}

.navbar .menu-top .menu a.btn.btn-link.promocoes:hover,
.navbar .menu-top .menu a.btn.btn-link.promocoes:focus,
.navbar .menu-top .menu a.btn.btn-link.promocoes.active {
    background-color: rgba(255, 255, 255, .12);
    border: 1px solid #fff;
    color: #fff;
}

.navbar .menu-top .menu a.btn.btn-link.promocoes::after {
    display: none;
}

/* O item do WhatsApp não tem href — usa onclick. No desktop ele vira o
   botão flutuante da seção 14; no celular continua no painel do menu. */
@media only screen and (min-width: 768px) {
    .navbar .menu-top .menu a.btn.btn-link:not([href]) {
        display: none;
    }
}

/* Abaixo de 1300px o logo também precisa ceder espaço, senão os links
   ficam ilegíveis antes de o menu virar hambúrguer (a 767px). */
@media only screen and (max-width: 1300px) {
    .navbar .container {
        padding: 0 20px;
    }
    .navbar .menu-top .menu a.btn.btn-link {
        letter-spacing: .07em;
    }
    .navbar .menu-top .menu a.btn.btn-link[href="reservas.php"],
    .navbar .menu-top .menu a.btn.btn-link.promocoes {
        margin-left: 8px;
        padding: 10px 14px;
        letter-spacing: .1em;
    }
    .navbar .menu-top .logo img {
        width: 148px;
    }
    body.hpp-rolou .navbar .menu-top .logo img {
        width: 128px;
    }
}


/* -----------------------------------------------------------------
   4. CAPA DA HOME

   O slider (js-image-slider) já ocupa 100vh por css/js-image-slider.css.
   O texto entra por cima, fora de #slider de propósito: o plugin troca os
   <img> filhos e esconderia qualquer coisa colocada lá dentro.
   ----------------------------------------------------------------- */

.segment1 {
    position: relative;
    background-color: var(--verde-fundo);   /* era #11a934, aparecia no carregamento */
    /* segura o véu radial de .hpp-capa-texto::before, que se estende 4%
       para cada lado. Sem isto a home ganha 15px de rolagem horizontal a
       375px — medido com ferramentas/culpado.html. */
    overflow: hidden;
}

/* véu duplo: escurece topo e base, preserva o meio da foto */
.segment1::after {
    content: "";
    position: absolute;
    inset: 0;
    /* o topo pesa menos agora: a barra do topo tem fundo e desfoque
       próprios e já garante a leitura dos links */
    background:
        linear-gradient(to bottom,
            rgba(10, 28, 18, .16) 0%,
            rgba(10, 28, 18, .06) 22%,
            rgba(10, 28, 18, .46) 58%,
            rgba(10, 28, 18, .88) 100%);
    pointer-events: none;
    z-index: 2;
}

/* A chamada ocupa o espaço ABAIXO da barra e se centraliza nele.

   Antes era `bottom: 19vh` e só. Enquanto a capa tinha apenas título e
   parágrafo isso bastava; quando a marca entrou, o bloco cresceu para cima
   e o logotipo foi parar em cima dos links do menu — dava para ler
   "RESTAURANTE E BAR" atravessando a palavra PARQUE.

   Amarrar o topo à altura da barra em vez de medir a partir de baixo faz a
   colisão deixar de ser possível, qualquer que seja o tamanho do conteúdo
   ou da janela. */
.hpp-capa-texto {
    position: absolute;
    left: 0;
    right: 0;
    top: var(--barra);
    bottom: 12vh;
    z-index: 3;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 24px 26px 0;
    text-align: center;
    color: #fff;
}

/* véu local: as quatro fotos da capa se alternam e uma delas é clara
   justamente atrás da linha de apoio (ver o mesmo recurso na seção 5) */
.hpp-capa-texto::before {
    content: "";
    position: absolute;
    left: -4%;
    right: -4%;
    top: -60px;
    bottom: -60px;
    z-index: -1;
    background: radial-gradient(ellipse at center,
                rgba(10, 28, 18, .52) 0%,
                rgba(10, 28, 18, .26) 50%,
                rgba(10, 28, 18, 0) 78%);
    pointer-events: none;
}

/* A marca sobre a capa — a peça principal da home.

   Encolhe e some conforme --rolagem cresce, entregando o lugar à marca da
   barra do topo. `transform-origin: top center` faz o encolhimento puxar
   em direção à barra, e não para o meio da tela. */
/* A marca da capa é a de duas cores: flor rosa, letreiro branco.

   A sombra projetada é o que a segura sobre qualquer uma das quatro fotos
   — o rosa da flor tem luminância parecida com a de folhagem ao sol e, sem
   ela, a flor sumia na foto do bosque. */
.hpp-capa-logo {
    display: block;
    width: min(380px, 60vw);
    height: auto;
    margin: 0 auto clamp(20px, 2.6vw, 34px);
    filter: drop-shadow(0 2px 20px rgba(10, 28, 18, .55));
}

/* A opacidade cai MUITO mais rápido que a escala: zera em --rolagem 0.28
   (cerca de 100px de rolagem), contra 1.0 da escala.

   A conta: a marca da capa começa a ~210px do topo do documento e a barra
   tem 92px de altura, então as duas se cruzam por volta de 120px rolados —
   equivalente a --rolagem 0.33. Com o multiplicador 3.6 a marca já está
   totalmente transparente antes disso. Com valores menores sobrava um
   borrão branco atrás da barra. */
body.hpp-capa-marca .hpp-capa-logo {
    transform-origin: top center;
    transform: scale(calc(1 - var(--rolagem, 0) * .30));
    opacity: calc(1 - var(--rolagem, 0) * 3.6);
    will-change: transform, opacity;
}

@media only screen and (max-width: 767px) {
    .hpp-capa-logo {
        width: min(300px, 68vw);
        margin-bottom: 20px;
    }
}

/* linha fina + palavra acima do título: dá hierarquia sem mais um tamanho */
.hpp-capa-selo {
    display: inline-flex;
    align-items: center;
    gap: 14px;
    margin: 0 0 22px;
    font-family: var(--f-ui);
    font-size: 11px;
    font-weight: 400;
    letter-spacing: .34em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, .88);
    text-shadow: 0 1px 12px rgba(10, 28, 18, .6);
}

.hpp-capa-selo::before,
.hpp-capa-selo::after {
    content: "";
    width: 34px;
    height: 1px;
    background: rgba(255, 255, 255, .5);
}

.hpp-capa-texto h1 {
    font-family: var(--f-display);
    font-weight: 400;
    font-size: clamp(38px, 6.4vw, 88px);
    line-height: 1.04;
    letter-spacing: -.015em;
    margin: 0 auto 20px;
    max-width: 16ch;
    color: #fff;
    text-shadow: 0 2px 30px rgba(10, 28, 18, .55);
}

.hpp-capa-texto h1 em {
    font-style: italic;
    font-weight: 400;
}

.hpp-capa-texto p {
    font-size: clamp(15px, 1.25vw, 18px);
    font-weight: 300;
    line-height: 1.6;
    margin: 0 auto 34px;
    max-width: 44ch;
    color: rgba(255, 255, 255, .90);
    text-shadow: 0 1px 14px rgba(10, 28, 18, .6);
}

.hpp-capa-acoes {
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    justify-content: center;
}

.hpp-capa-seta {
    position: absolute;
    left: 50%;
    bottom: 30px;
    transform: translateX(-50%);
    z-index: 3;
    width: 46px;
    height: 46px;
    line-height: 46px;
    text-align: center;
    color: rgba(255, 255, 255, .8);
    font-size: 20px;
    text-decoration: none;
    animation: hpp-desce 2.6s ease-in-out infinite;
}

.hpp-capa-seta:hover,
.hpp-capa-seta:focus {
    color: #fff;
}

@keyframes hpp-desce {
    0%, 100% { transform: translateX(-50%) translateY(0); }
    50%      { transform: translateX(-50%) translateY(8px); }
}

/* JANELA BAIXA — celular deitado, notebook pequeno, janela reduzida.

   A capa é a única parte do site com altura fixa (100vh) e conteúdo
   empilhado: marca, título de duas linhas, apoio e dois botões. Abaixo de
   ~620px de altura isso não cabe entre a barra e a base, e o conteúdo
   transbordava para cima, por baixo da barra.

   Repare que o critério é a ALTURA da janela, não a largura: um notebook
   de 1440x600 sofre do mesmo mal que um celular deitado. */
@media only screen and (max-height: 620px) {
    .hpp-capa-logo {
        width: min(270px, 42vw);
        margin-bottom: 12px;
    }
    .hpp-capa-texto {
        bottom: 7vh;
    }
    .hpp-capa-texto h1 {
        font-size: clamp(24px, 4vw, 38px);
        margin-bottom: 10px;
    }
    .hpp-capa-texto p {
        margin-bottom: 20px;
    }
    .hpp-capa-seta {
        display: none;
    }
}

@media only screen and (max-width: 767px) {
    #slider,
    #slider .sliderInner {
        height: 88vh;
    }
    .hpp-capa-texto {
        bottom: 13vh;
    }
    .hpp-capa-selo {
        letter-spacing: .22em;
        margin-bottom: 16px;
    }
    .hpp-capa-selo::before,
    .hpp-capa-selo::after {
        width: 18px;
    }
    .hpp-capa-seta {
        display: none;
    }
}


/* -----------------------------------------------------------------
   5. CAPA DAS PÁGINAS INTERNAS

   Toda tela interna começa com <div class="picture picture-big"> logo
   depois do </nav> — uma foto muda, sem título nenhum. O seletor de irmão
   adjacente pega só essa, nunca as .picture-big que aparecem no meio do
   conteúdo (o mapa da home, por exemplo).

   O título é escrito por js/interface.js a partir do link ativo do menu.
   ----------------------------------------------------------------- */

.navbar + .picture.picture-big {
    position: relative;
    height: 62vh;
    min-height: 440px;
    max-height: 720px;
    margin: 0;
    overflow: hidden;
    background: var(--verde-fundo);
}

.navbar + .picture.picture-big .bg {
    border-radius: 0;
    box-shadow: none;
    /* leve aproximação: as fotos são de 2016 e ganham nitidez cortando bordas */
    transform: scale(1.02);

    /* ENQUADRAMENTO EM PORCENTAGEM, NUNCA EM PIXELS.

       Duas telas trazem o enquadramento escrito em pixels no style inline:
       piscinas `center -380px` e relaxamento `center -500px`. Foram
       calculados para a capa antiga, de 300px de altura. A capa de hoje
       tem 62vh (até 720px), e um deslocamento fixo em pixels empurra a
       imagem para FORA da caixa: sobra fundo descoberto embaixo.

       Medido em relaxamento, janela de 1260px de altura: a caixa fica com
       781px, a foto (1440x900, escalada por `cover` para 1470x919) é posta
       de -500 a 419, e os 362px restantes aparecem como uma faixa verde —
       justamente onde o título é escrito.

       Com `background-size: cover`, qualquer porcentagem de 0% a 100%
       mantém a imagem cobrindo a caixa inteira, em qualquer altura de
       janela. 68% preserva a intenção do enquadramento original, que era
       mostrar a parte de baixo da cena.

       O !important é necessário: o valor em pixels está em style inline,
       e inline vence qualquer seletor sem ele. */
    background-position: center 68% !important;
}

.navbar + .picture.picture-big::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(to bottom,
                rgba(10, 28, 18, .52) 0%,
                rgba(10, 28, 18, .16) 45%,
                rgba(10, 28, 18, .68) 100%);
    pointer-events: none;
}

.hpp-titulo-interno {
    position: absolute;
    left: 0;
    right: 0;
    bottom: clamp(38px, 7vh, 76px);
    z-index: 2;
    padding: 0 34px;
    text-align: center;
    color: #fff;
}

/* Véu local atrás do título.

   O degradê da capa é calibrado para a média das fotos, mas algumas são
   claras demais no ponto exato onde o texto cai — a fonte da galeria é
   praticamente branca ali. Escurecer o degradê inteiro afundaria as fotos
   escuras; uma sombra elíptica só sob o texto resolve sem custo visual. */
.hpp-titulo-interno::before {
    content: "";
    position: absolute;
    left: -5%;
    right: -5%;
    top: -46px;
    bottom: -46px;
    z-index: -1;
    background: radial-gradient(ellipse at center,
                rgba(10, 28, 18, .58) 0%,
                rgba(10, 28, 18, .30) 48%,
                rgba(10, 28, 18, 0) 76%);
    pointer-events: none;
}

.hpp-titulo-interno .hpp-migalha {
    display: block;
    margin-bottom: 14px;
    font-size: 11px;
    font-weight: 400;
    letter-spacing: .3em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, .78);
    text-shadow: 0 1px 12px rgba(10, 28, 18, .6);
}

.hpp-titulo-interno h1 {
    font-family: var(--f-display);
    font-weight: 400;
    font-size: clamp(34px, 5.4vw, 68px);
    line-height: 1.06;
    letter-spacing: -.015em;
    margin: 0;
    color: #fff;
    text-shadow: 0 2px 28px rgba(10, 28, 18, .5);
}

/* Telas sem foto de capa (cardápio, formulários) não podem ficar debaixo
   da barra fixa. A classe é posta por js/interface.js. */
body.hpp-sem-capa .segments:first-of-type,
body.hpp-sem-capa > .container:first-of-type {
    padding-top: var(--barra);
}


/* -----------------------------------------------------------------
   6. RITMO DAS SEÇÕES

   O site antigo empilha tudo num bloco só, com 3em de padding fixo e
   nenhuma variação de fundo — 4 mil palavras sem um respiro. Aqui as
   seções ganham ar proporcional à tela e a possibilidade de alternar
   fundo (.hpp-faixa-clara / .hpp-faixa-verde).
   ----------------------------------------------------------------- */

.segment3 .container-fluid {
    padding: 0;
}

.segment3 .container {
    width: auto;
    max-width: 1240px;
    padding: clamp(58px, 6vw, 104px) 34px;
}

.segment3 .container .block {
    padding: 0;
}

/* layout2.css:480 dá 15px de padding vertical a toda .row dentro de
   .block, o que embaralha o espaçamento vertical. */
.segment3 .container .block .row {
    padding: 0;
}

.segment3 .container hr,
hr {
    border-top: 1px solid var(--linha);
    margin: clamp(40px, 5vw, 72px) 0;
}

/* faixas de fundo, usadas nas seções novas da home */
.hpp-faixa-clara {
    background: var(--areia-2);
}

.hpp-faixa-verde {
    background: var(--verde-fundo);
    color: rgba(255, 255, 255, .84);
}

.hpp-faixa-verde h2,
.hpp-faixa-verde h3,
.hpp-faixa-verde .hpp-chapeu {
    color: #fff;
}


/* -----------------------------------------------------------------
   7. TIPOGRAFIA EDITORIAL

   Correção ao diagnóstico original: o corpo NÃO era 16px. A regra que
   vencia era layout2.css:495 `.segment3 .container .block p{font-size:1.2em}`
   — 19.2px. Reduzir para 17.5px, como o relatório sugeria, teria
   ENCOLHIDO o texto. O problema real era a linha de ~115 caracteres.

   Os títulos usavam font-variant:small-caps + font-stretch:bold, um
   maneirismo de 2005. Caixa normal em Cormorant, com peso de verdade.
   ----------------------------------------------------------------- */

.segment3 .container .block h3,
.acomodacoes1 .container .block h3,
.caldas-novas-2 .container .block h3,
.contato-2 .container h3,
.hpp-titulo {
    font-family: var(--f-display);
    font-variant: normal;
    font-stretch: normal;
    font-weight: 500;
    font-size: clamp(32px, 4.4vw, 54px);
    line-height: 1.08;
    letter-spacing: -.015em;
    color: var(--verde);
    margin: clamp(56px, 6vw, 92px) 0 24px;
    padding: 0;
    text-align: left;
}

/* ATENÇÃO À ESPECIFICIDADE

   Todo componente novo vive dentro de `.segment3 .container .block`, e as
   regras de h3 e p do site antigo moram exatamente nesse caminho — três
   classes mais um tipo. Uma classe sozinha (.hpp-titulo, 0-1-0) perde para
   elas (0-3-1) e o título sai com a margem e a cor erradas.

   Por isso as regras dos componentes daqui em diante repetem o caminho
   inteiro. Não é enfeite: sem isso o texto dos cartões sai verde sobre
   foto, que foi exatamente o que aconteceu na primeira montagem. */

.segment3 .container .block h3.hpp-titulo {
    margin-top: 0;
}

/* o primeiro título de um bloco não precisa da margem de separação */
.segment3 .container .block > h3:first-child,
.segment3 .container .block > *:first-child + h3 {
    margin-top: 0;
}

/* NÃO ESTILIZE `.segment3 .container h2` COMO CHAPÉU.

   Foi o que esta folha fazia até aqui, e era um erro: varrendo as telas,
   TODO <h2> dentro de .segment3 .container é legenda de foto — piscinas
   tem 6, acomodações 7, promoções 6, e as demais nenhum. Não existe h2 de
   "chapéu" em lugar nenhum do site.

   Com especificidade 0-2-1 essa regra vencia `.picture h2` (0-1-1) e as
   legendas das fotos saíam em Jost caixa-alta com 0.22em de espacejamento,
   em vez do serifado que o resto do site usa. Só o tamanho escapava,
   porque o legado o marca com !important.

   O papel de chapéu é do `.hpp-chapeu` (um <span>), na seção 7. */

.segment3 .container .picture h2,
.picture h2 {
    font-variant: normal;
    font-stretch: normal;
    text-transform: none;
}

.segment3 .container h4,
.detalhes-quarto h4 {
    font-family: var(--f-display);
    font-variant: normal;
    font-weight: 600;
    color: var(--verde);
}

/* Largura de leitura. Ficam de fora os <p> que servem de barra de botões
   nas páginas de quarto, senão os botões quebram cedo demais. */
.segment3 .container .block p:not(.acoes-quarto):not(.outros-quartos),
.caldas-novas-2 .container .block p,
.acomodacoes1 .container .block p {
    max-width: 68ch;
    font-size: clamp(16.5px, 1.15vw, 18.5px);
    line-height: 1.78;
    margin: 0 0 1.35em;
    color: var(--tinta);
}

.text-menor {
    font-size: 16px;
    line-height: 1.7;
    color: var(--tinta);
}

/* Chapéu: a palavrinha em versalete acima de um título.

   Vai no rosa da marca, não no verde. É o lugar certo para espalhar a cor
   da flor pelo site sem gritar: um sinal pequeno, repetido, que aparece na
   abertura de cada seção. Sobre a areia dá 4.87:1 — passa no AA mesmo em
   corpo pequeno.

   O peso separa os dois papéis do rosa: aqui ele é texto fino; nos botões
   é fundo cheio. Ninguém confunde um com o outro. */
.hpp-chapeu {
    display: block;
    margin: 0 0 14px;
    font-family: var(--f-ui);
    font-size: 11.5px;
    font-weight: 500;
    letter-spacing: .26em;
    text-transform: uppercase;
    color: var(--acao);
}

/* linha de abertura de seção, um pouco maior que o corpo */
.hpp-linha-fina {
    font-size: clamp(18px, 1.6vw, 22px);
    font-weight: 300;
    line-height: 1.62;
    color: var(--tinta-2);
    max-width: 60ch;
}

.hpp-centro {
    text-align: center;
}

.hpp-centro .hpp-titulo,
.hpp-centro p {
    margin-left: auto;
    margin-right: auto;
    text-align: center;
}


/* -----------------------------------------------------------------
   8. BOTÕES

   O site antigo não tinha botão nenhum fora dos formulários: as chamadas
   eram links de texto do mesmo tamanho do menu.
   ----------------------------------------------------------------- */

.hpp-botao,
.hpp-capa-botao {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 15px 34px;
    border: 1px solid var(--acao);
    border-radius: var(--raio);
    background: var(--acao);
    color: #fff;
    font-family: var(--f-ui);
    font-size: 12.5px;
    font-weight: 500;
    letter-spacing: .16em;
    text-transform: uppercase;
    text-decoration: none;
    line-height: 1;
    cursor: pointer;
    box-shadow: 0 6px 18px rgba(10, 28, 18, .18);
}

.hpp-botao:hover,
.hpp-botao:focus,
.hpp-capa-botao:hover,
.hpp-capa-botao:focus {
    background: var(--acao-2);
    border-color: var(--acao-2);
    color: #fff;
    text-decoration: none;
    box-shadow: 0 10px 26px rgba(10, 28, 18, .26);
}

/* contorno claro, para usar sobre foto */
.hpp-botao--claro {
    background: transparent;
    border-color: rgba(255, 255, 255, .62);
    color: #fff;
    box-shadow: none;
    backdrop-filter: blur(2px);
}

.hpp-botao--claro:hover,
.hpp-botao--claro:focus {
    background: rgba(255, 255, 255, .12);
    border-color: #fff;
    color: #fff;
    box-shadow: none;
}

/* contorno verde, para usar sobre areia */
.hpp-botao--vazado {
    background: transparent;
    border-color: var(--verde);
    color: var(--verde);
    box-shadow: none;
}

.hpp-botao--vazado:hover,
.hpp-botao--vazado:focus {
    background: var(--verde);
    border-color: var(--verde);
    color: #fff;
    box-shadow: none;
}

/* link com seta, para "ver tudo" */
.hpp-link-seta {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    font-family: var(--f-ui);
    font-size: 12px;
    font-weight: 500;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--verde);
    text-decoration: none;
    border-bottom: 1px solid var(--linha);
    padding-bottom: 6px;
}

.hpp-link-seta i,
.hpp-link-seta span[aria-hidden] {
    transition: transform .3s var(--curva);
}

.hpp-link-seta:hover,
.hpp-link-seta:focus {
    color: var(--acao);
    border-bottom-color: var(--acao);
    text-decoration: none;
}

.hpp-link-seta:hover i,
.hpp-link-seta:hover span[aria-hidden] {
    transform: translateX(5px);
}

/* Botões herdados do Bootstrap.

   .btn-success marca sempre a ação principal da tela: RESERVAR nas páginas
   de acomodação, ENVIAR CONTATO e ENVIAR RESERVA nos formulários. Por isso
   recebe o vermelho de ação, o mesmo do menu — o site inteiro passa a ter
   uma cor só significando "é aqui que se clica".

   .btn-primary fica verde para ações secundárias. */
.btn-success,
input.btn-success,
button.btn-success {
    padding: 15px 34px;
    background-color: var(--acao);
    border-color: var(--acao);
    border-radius: var(--raio);
    font-family: var(--f-ui);
    font-size: 12.5px;
    font-weight: 500;
    letter-spacing: .16em;
    text-transform: uppercase;
    line-height: 1;
    box-shadow: 0 6px 18px rgba(10, 28, 18, .18);
}

.btn-success:hover, .btn-success:focus, .btn-success:active,
.btn-success:active:focus {
    background-color: var(--acao-2);
    border-color: var(--acao-2);
    box-shadow: 0 10px 26px rgba(10, 28, 18, .26);
}

.btn-primary {
    background-color: var(--verde);
    border-color: var(--verde);
    border-radius: var(--raio);
    font-family: var(--f-ui);
    font-weight: 500;
    letter-spacing: .08em;
}

.btn-primary:hover, .btn-primary:focus, .btn-primary:active {
    background-color: var(--verde-vivo);
    border-color: var(--verde-vivo);
}

/* --- campos de formulário (contato.php e reservas.php) --- */

.form-control,
input[type="text"].form-control,
input[type="email"].form-control,
textarea.form-control,
select.form-control {
    height: auto;
    padding: 12px 15px;
    border: 1px solid var(--linha);
    border-radius: var(--raio);
    background: #fff;
    box-shadow: none;
    font-family: var(--f-ui);
    font-size: 16px;   /* abaixo de 16px o iPhone dá zoom sozinho ao focar */
    color: var(--tinta);
    transition: border-color .2s var(--curva), box-shadow .2s var(--curva);
}

.form-control:focus {
    border-color: var(--verde-vivo);
    box-shadow: 0 0 0 3px rgba(44, 122, 82, .16);
    outline: none;
}

.form-control::placeholder {
    color: #a9b3ac;
}

label,
.control-label {
    font-family: var(--f-ui);
    font-size: 12px;
    font-weight: 500;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--tinta-2);
}


/* -----------------------------------------------------------------
   9. FOTOS, CARTÕES E LEGENDAS

   Cuidado registrado: .picture h2 (legenda branca sobre foto) usa
   `color:#fff !important` em layout2.css:282. Nenhuma regra de cor de h2
   aqui usa !important, para não apagar essas legendas.
   ----------------------------------------------------------------- */

.picture .bg,
.card,
.panel,
.img-card {
    border-radius: var(--raio);
}

.picture .bg {
    box-shadow: var(--sombra-1);
}

.picture .bg.radius {
    border-radius: var(--raio);
}

.panel {
    border-color: var(--linha);
    box-shadow: none;
}

/* O RECUO DA FOTO DENTRO DO CARTÃO — declarado uma vez, usado por todos.

   Quase todo .picture do site é também uma coluna do Bootstrap 3, e coluna
   tem `padding: 0 15px`. A foto de verdade é o .bg, que respeita esse
   padding; mas a legenda e os ícones são posicionados de forma absoluta, e
   elemento absoluto se alinha à caixa de PADDING, não à de conteúdo.

   Resultado medido em acomodacoes.html: .picture com 1202px, .bg com
   1172px, legenda com 1202px — o véu escuro sobrava 15px para fora da
   imagem de cada lado. O contratante viu isso como "foto ultrapassando o
   limite da tela", e acontecia em todas as telas com legenda.

   Guardar o recuo numa variável faz legenda e ícones acompanharem a foto
   sem que cada regra tenha de saber onde está. */
.picture {
    --recuo: 0px;
}

.picture[class*="col-"] {
    --recuo: 15px;
}

/* nas grades e na lista de acomodações o padding da coluna foi zerado,
   então o recuo volta a zero */
.gal-grade .picture,
.gal-quarto .picture,
.hpp-acom .picture {
    --recuo: 0px;
}

/* RESPIRO ENTRE FOTOS.

   O layout2.css só dá `margin-bottom: 20px` ao .picture abaixo de 767px.
   No desktop as fotos empilhadas se encostavam — em piscinas.html e
   romantico-e-familiar.html elas formavam um bloco contínuo, sem nenhuma
   linha de respiro entre uma e outra. */
.picture:not(.picture-big) {
    margin-bottom: clamp(16px, 1.8vw, 28px);
}

/* PROPORÇÃO NO LUGAR DE ALTURA FIXA.

   layout2.css:256 fixa `height: 300px` no .picture e :957 baixa para 160px
   até 1024px. Como o fundo é `cover`, a mesma altura aplicada a colunas de
   larguras diferentes produz recortes diferentes na MESMA tela: medido em
   relaxamento e romântico, 3.91:1 no col-sm-12, 2.24:1 no col-sm-7 e
   1.57:1 no col-sm-5. Em caldas-novas uma foto de 450x450 era esticada
   para 671x300 e perdia 55% da altura. A 1024px tudo virava uma tarja de
   160px.

   Trocar altura por proporção resolve os dois problemas de uma vez.

   A CONTA DAS COLUNAS IRMÃS. col-sm-5 e col-sm-7 aparecem lado a lado; se
   cada uma tiver a mesma proporção, a mais estreita fica mais baixa e os
   pés não alinham. Para alturas iguais, a proporção tem de acompanhar a
   largura: r5 = r7 x 5/7. Com r7 = 3/2, r5 = 15/14 — e as duas fecham em
   0.3889 da largura da linha. */
.picture {
    --prop: 3 / 2;
}

.picture.col-sm-12 { --prop: 12 / 5; }   /* faixa larga, sem virar tarja */
.picture.col-sm-7  { --prop: 3 / 2; }
.picture.col-sm-5  { --prop: 15 / 14; }  /* casa a altura do col-sm-7 ao lado */
.picture.col-sm-6  { --prop: 3 / 2; }

.picture:not(.picture-mini):not(.picture-big):not(.picture-quarto) {
    height: auto;
    aspect-ratio: var(--prop);
}

@media only screen and (max-width: 767px) {
    /* empilhadas, todas passam a ter a mesma largura */
    .picture {
        --prop: 3 / 2;
    }
}

/* Legenda sobre foto.

   O véu vai no próprio <h2>, não num pseudo-elemento do .picture. Motivo
   prático: as legendas aparecem em três estruturas diferentes no site
   (dentro de <a>, soltas ao lado de .bg, dentro de .boxPromocao) e só o
   <h2> está presente em todas as três. Pendurado nele, o véu tem sempre a
   altura exata do texto — e o site antigo resolvia isso com
   `text-shadow: 1px 1px 3px #333`, que some em foto clara. */
.segment3 .container .picture h2,
.picture h2 {
    z-index: 2;
    left: var(--recuo);
    right: var(--recuo);
    bottom: 0;
    margin: 0;
    padding: 76px 28px 22px;
    font-family: var(--f-display);
    font-size: clamp(24px, 2.2vw, 34px) !important;
    font-weight: 500;
    line-height: 1.12;
    letter-spacing: -.005em;
    text-shadow: 0 2px 18px rgba(10, 28, 18, .45);
    background: linear-gradient(to top,
                rgba(10, 28, 18, .88) 0%,
                rgba(10, 28, 18, .74) 34%,
                rgba(10, 28, 18, .34) 66%,
                rgba(10, 28, 18, 0) 100%);
    border-radius: 0 0 var(--raio) var(--raio);
    pointer-events: none;
}

.picture h2 small {
    margin-top: 8px;
    font-family: var(--f-ui);
    font-size: 15px;
    font-weight: 500;
    letter-spacing: .06em;
}

.picture > a {
    position: relative;
    display: block;
    height: 100%;
    overflow: hidden;
    border-radius: var(--raio);
}

/* --- A LISTA DE ACOMODAÇÕES (acomodacoes.html) ---------------------

   Antes: sete faixas de foto idênticas empilhadas quase sem respiro, com
   o nome do quarto sobre a imagem e dois ícones de 35px no canto. Além de
   monótono, tinha um defeito de alinhamento: o container da foto é uma
   coluna Bootstrap com padding de 15px, e a legenda, por ser
   absolutamente posicionada, se alinhava à caixa de PADDING — ficava 30px
   mais larga que a própria foto e as pontas do véu escuro apareciam para
   fora da imagem. Medido: .picture 1202px, .bg 1172px.

   Agora cada acomodação é uma faixa de duas colunas — foto de um lado,
   painel com nome, resumo e botão do outro — alternando o lado. O nome
   saiu de cima da foto, o que faz o problema de alinhamento deixar de
   existir em vez de precisar de conserto.

   A marcação é montada por ferramentas/remodelar-acomodacoes.py. */

.hpp-acom {
    display: grid;
    grid-template-columns: minmax(0, 1.45fr) minmax(0, 1fr);
    gap: clamp(22px, 3vw, 56px);
    align-items: center;
    margin: 0 0 clamp(38px, 5vw, 84px);
    padding: 0;
}

/* o .row do Bootstrap traz ::before e ::after com content; num grid eles
   virariam células e empurrariam as colunas (ver seção 11) */
.hpp-acom::before,
.hpp-acom::after {
    display: none;
}

/* alterna o lado da foto a cada bloco */
.hpp-acom--par > .content {
    order: 2;
}

/* a tabela de comodidades abre embaixo, ocupando as duas colunas */
.hpp-acom > .detail-info {
    grid-column: 1 / -1;
    padding: 0;
}

.hpp-acom > .content {
    min-width: 0;
}

.hpp-acom .picture.picture-quarto {
    height: auto;
    aspect-ratio: 4 / 3;
    margin: 0;
    padding: 0;              /* sem o padding da coluna, foto e cartão coincidem */
    border-radius: var(--raio);
    overflow: hidden;
    box-shadow: var(--sombra-1);
    cursor: pointer;
}

.hpp-acom .picture.picture-quarto .bg {
    height: 100%;
    border-radius: 0;
    box-shadow: none;
}

/* A FOTO É UM LINK PARA A PÁGINA DA SUÍTE.

   Antes o clique abria um carrossel embutido, que o js/main.js carregava
   dentro de .content. Isso funcionava quando o cartão ocupava a largura
   inteira; depois que a lista virou duas colunas o carrossel abria dentro
   da coluna estreita, com a legenda por cima dos indicadores e os botões
   por cima da legenda.

   Levar direto para a página da suíte é mais útil: é lá que estão todas
   as fotos, as comodidades e o botão de reserva — e é o link que o
   atendente manda para o cliente.

   O <a> envolve só o .bg, e não o cartão inteiro: assim o botão
   "Comodidades", que é irmão dele, continua abrindo a tabela sem navegar. */
.hpp-acom .picture-quarto > .hpp-acom-foto {
    display: block;
    height: 100%;
    border-radius: inherit;
    overflow: hidden;
}

/* sinal de que a foto leva a algum lugar, além do zoom que ela já faz */
.hpp-acom .picture-quarto > .hpp-acom-foto::after {
    content: "Ver a suíte";
    position: absolute;
    right: 14px;
    bottom: 14px;
    z-index: 2;
    padding: 9px 16px;
    border-radius: 999px;
    background: rgba(10, 28, 18, .62);
    -webkit-backdrop-filter: blur(6px);
            backdrop-filter: blur(6px);
    color: #fff;
    font-family: var(--f-ui);
    font-size: 12px;
    font-weight: 500;
    letter-spacing: .1em;
    text-transform: uppercase;
    line-height: 1;
    opacity: 0;
    transform: translateY(6px);
    transition: opacity .3s var(--curva), transform .3s var(--curva);
    pointer-events: none;
}

.hpp-acom .picture-quarto:hover > .hpp-acom-foto::after,
.hpp-acom .picture-quarto > .hpp-acom-foto:focus-visible::after {
    opacity: 1;
    transform: none;
}

/* no toque não existe hover: a etiqueta fica sempre visível */
@media (hover: none) {
    .hpp-acom .picture-quarto > .hpp-acom-foto::after {
        opacity: 1;
        transform: none;
    }
}

/* o nome agora vive no painel ao lado, em Cormorant; sobre a foto era
   repetição */
.hpp-acom .picture.picture-quarto h2 {
    display: none;
}

/* caminho completo de novo: .segment3 .container .block h3 (0-3-1) tem
   margem de topo de até 92px e venceria .hpp-acom-info h3 (0-2-1) */
.segment3 .container .block .hpp-acom-info h3,
.hpp-acom-info h3 {
    font-family: var(--f-display);
    font-size: clamp(28px, 2.9vw, 42px);
    font-weight: 500;
    line-height: 1.08;
    letter-spacing: -.015em;
    color: var(--verde);
    margin: 0 0 16px;
    text-align: left;
}

.segment3 .container .block .hpp-acom-info p,
.hpp-acom-info p {
    max-width: 42ch;
    margin: 0 0 26px;
    font-size: 16.5px;
    line-height: 1.7;
    color: var(--tinta-2);
}

.hpp-acom-info .hpp-etiqueta {
    margin-bottom: 14px;
}

@media only screen and (max-width: 767px) {
    .hpp-acom {
        grid-template-columns: 1fr;
        gap: 20px;
    }
    /* no celular a foto vem sempre antes, como na leitura natural */
    .hpp-acom--par > .content {
        order: 0;
    }
    .hpp-acom .picture.picture-quarto {
        aspect-ratio: 3 / 2;
    }
}

/* --- os dois ícones do cartão -------------------------------------

   Eram dois círculos brancos de 35px sobre a foto, sem rótulo: ninguém
   adivinhava que a câmera abre o carrossel e o "i" abre a tabela de
   comodidades. Viram etiquetas pequenas com o nome da ação escrito.

   Um em cada canto de baixo, e não lado a lado, porque com texto os dois
   se tocariam nas telas estreitas. */

.picture .icon-info,
.picture .icon-gallery,
.card .icon-info,
.card .icon-gallery {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    top: auto;
    bottom: 14px;
    height: auto;
    padding: 8px 14px;
    font-size: 12px !important;
    font-family: var(--f-ui);
    font-weight: 500;
    letter-spacing: .1em;
    text-transform: uppercase;
    text-shadow: none;
    color: #fff !important;
    background: rgba(10, 28, 18, .62);
    backdrop-filter: blur(6px);
    border-radius: 999px;
    line-height: 1;
}

.picture .icon-info i,
.picture .icon-gallery i,
.card .icon-info i,
.card .icon-gallery i {
    font-size: 14px;
}

/* somam o recuo da coluna para acompanhar a borda da FOTO, não a do cartão */
.picture .icon-gallery,
.card .icon-gallery {
    right: calc(var(--recuo, 0px) + 14px);
    left: auto;
}

.picture .icon-info,
.card .icon-info {
    left: calc(var(--recuo, 0px) + 14px);
    right: auto;
}

.picture .icon-info:hover,
.picture .icon-gallery:hover,
.card .icon-info:hover,
.card .icon-gallery:hover {
    background: var(--acao);
    color: #fff !important;
}

/* Rótulos: o HTML só tem o ícone, o texto entra por aqui.

   Sem rótulo ninguém adivinha o que faz uma câmera dentro de uma foto.
   O padrão é "Ver fotos"; dentro do carrossel aberto (.card) a mesma
   câmera fecha, então o texto muda. */
.picture .icon-gallery::after               { content: "Ver fotos"; }
.picture .icon-info::after                  { content: "Comodidades"; }
.card .icon-info::after                     { content: "Comodidades"; }
.card .icon-gallery::after                  { content: "Fechar fotos"; }

.picture .icon-info.active,
.card .icon-info.active {
    background: var(--acao);
}

/* Na foto fechada a câmera é redundante: clicar na própria foto já abre o
   carrossel. Dentro do carrossel (.card) ela vira o botão de fechar e
   continua indispensável — por isso o seletor é só o do cartão fechado. */
.hpp-acom .picture-quarto .icon-gallery {
    display: none;
}

/* o índice de atalhos no topo da página de acomodações */
.segment3 .container .block p > a.btn.btn-link[href$=".html"]:not(.display-none) {
    margin: 0 8px 8px 0;
    padding: 10px 18px;
    border: 1px solid var(--linha);
    border-radius: 999px;
    background: #fff;
    color: var(--verde);
    font-family: var(--f-ui);
    font-size: 12.5px;
    letter-spacing: .04em;
    text-decoration: none;
}

.segment3 .container .block p > a.btn.btn-link[href$=".html"]:hover,
.segment3 .container .block p > a.btn.btn-link[href$=".html"]:focus {
    background: var(--verde);
    border-color: var(--verde);
    color: #fff;
    text-decoration: none;
}

/* Os dois ícones (informações e mais fotos) ficam no mesmo canto que a
   legenda. Como o <h2> vem depois deles no HTML e agora tem fundo próprio,
   sem subir o z-index eles ficariam por baixo do véu. */
.picture .icon-info,
.picture .icon-gallery {
    z-index: 3;
    text-shadow: 0 2px 12px rgba(10, 28, 18, .55);
}

/* NÃO devolva um `color` de destaque ao :hover destes dois.

   Havia aqui um `color: var(--acao) !important` — herança da época em que
   os ícones eram glifos brancos soltos sobre a foto e ficavam vermelhos ao
   passar o mouse. Depois que viraram etiquetas com FUNDO da cor de ação, a
   regra passou a pintar o texto da mesma cor do fundo: no hover o ícone e
   a palavra sumiam e sobrava uma pílula vermelha vazia.

   Ela vencia o `color:#fff` da regra da etiqueta por vir depois no arquivo,
   com a mesma especificidade e o mesmo !important. */

/* As fotos inclinadas 3° (.rad-left / .rad-right) são um efeito de 2010 e
   ainda custam caro: a caixa de uma foto girada fica mais larga que a foto,
   e em caldas-novas.html isso empurrava a página 1px para o lado a 375px.
   Endireitar resolve o transbordamento e envelhece menos. */
.rad-left,
.rad-right {
    transform: none;
}

/* --- A LUPA DAS FOTOS (ekko-lightbox) ------------------------------

   O véu por trás da foto ampliada era VERDE: layout2.css:792 (e o bloco
   igual em layout.css:808) declara
       .modal-backdrop.in { opacity:.95; background-color: rgba(17,169,52,.9) }
   — o verde-semáforo do site antigo, quase opaco. Ao abrir uma foto a
   página inteira sumia atrás de uma cortina verde.

   Um modal deve deixar ver de onde você veio. Aqui o véu fica escuro e
   translúcido, com um desfoque leve: a página continua legível ao fundo,
   só que apagada, e a atenção vai para a foto.

   O `opacity: 1` é necessário porque a regra antiga fixa .95 no elemento;
   quem controla a transparência agora é o alfa da própria cor. */

.modal-backdrop,
.modal-backdrop.in {
    opacity: 1;
    background-color: rgba(8, 20, 14, .78);
    -webkit-backdrop-filter: blur(5px);
            backdrop-filter: blur(5px);
}

/* o título da foto ampliada usava o rosa antigo em versalete */
.ekko-lightbox h4.modal-title,
h4.modal-title {
    font-family: var(--f-display);
    font-variant: normal;
    font-stretch: normal;
    font-size: 22px;
    font-weight: 500;
    color: #fff;
}

.ekko-lightbox .modal-content {
    border-radius: var(--raio);
    overflow: hidden;
}

/* a dica flutuante ("Clique para ampliar") também era rosa-choque */
.tooltip-inner {
    background-color: var(--verde-fundo);
    font-family: var(--f-ui);
    font-size: 12px;
    letter-spacing: .04em;
    border-radius: var(--raio);
}

.tooltip.top .tooltip-arrow    { border-top-color: var(--verde-fundo); }
.tooltip.bottom .tooltip-arrow { border-bottom-color: var(--verde-fundo); }
.tooltip.left .tooltip-arrow   { border-left-color: var(--verde-fundo); }
.tooltip.right .tooltip-arrow  { border-right-color: var(--verde-fundo); }


/* as promoções são a única tela com cartão próprio */
.boxPromocao {
    border-radius: var(--raio-g);
    box-shadow: var(--sombra-1);
    border: 1px solid var(--linha);
}

/* promocoes.html tem o HTML quebrado: o .block fecha vazio e os seis
   .boxPromocao ficam soltos como filhos diretos da <section>, fora de
   qualquer .container. Com width:calc(32%) fixo, a 375px cada cartão fica
   com 141px e o conteúdo precisa de 256 — a página vazava 48px.

   Consertar o HTML seria mexer em 280 linhas geradas; dar largura de
   verdade ao cartão resolve o mesmo problema sem esse risco. */
@media only screen and (max-width: 991px) {
    .boxPromocao {
        width: calc(50% - 26px);
    }
}

@media only screen and (max-width: 767px) {
    .boxPromocao {
        display: block;
        width: auto;
        margin: 0 18px 18px;
    }
    /* sem container em volta, a margem negativa da .row não tem o que
       compensar e passaria a vazar sozinha */
    .boxPromocao .row {
        margin-left: 0;
        margin-right: 0;
    }
}

.boxPromocao h3 {
    background-color: var(--verde-palido);
    border-radius: var(--raio-g) var(--raio-g) 0 0;
    font-family: var(--f-display);
    font-size: 22px;
    font-weight: 600;
    color: var(--verde);
}

.boxPromocao h5 {
    color: var(--verde-vivo);
    font-family: var(--f-display);
    font-weight: 600;
}

.boxPromocao h1 {
    color: var(--acao);
    font-family: var(--f-ui);
    letter-spacing: .04em;
}

/* A legenda sobre a foto do pacote usa a mesma .picture h2 do resto do
   site, dimensionada para uma foto de 600px. Dentro de um cartão de 380px
   ela vazava para fora. */
/* Só o tamanho muda: dentro de um cartão de 380px a legenda padrão, feita
   para uma foto de 600px, vazava para fora. O alinhamento e o véu ficam a
   cargo do --recuo, como em todo o resto do site — antes esta regra fixava
   left/right em 18px e deixava a legenda 3px para dentro da foto, um
   desencontro pequeno mas visível ao lado das outras telas. */
.boxPromocao .picture h2 {
    bottom: 0;
    font-size: clamp(17px, 1.35vw, 22px) !important;
    line-height: 1.15;
    padding: 58px 20px 18px;
}

.boxPromocao .picture h2 small {
    margin-top: 6px;
    font-family: var(--f-ui);
    font-size: 14px;
    font-weight: 500;
    letter-spacing: .06em;
}

/* O LOGO COLORIDO — a marca registrada, no ar desde 1973.

   Ele abre o corpo de todas as telas internas. Antes vinha em tamanho
   natural e solto, logo abaixo do logo branco da barra, empurrando o
   conteúdo útil para fora da primeira dobra. O problema nunca foi o logo:
   era a falta de tratamento.

   Aqui ele vira uma assinatura: centralizado, com ar de sobra em volta e
   um filete de cada lado, como uma marca em papel timbrado. O tamanho é
   fluido — grande em tela cheia, contido no celular. */
.block center:has(img[src*="logo-hpp-g"]) {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: clamp(18px, 3vw, 44px);
    margin: 0 0 clamp(34px, 4.5vw, 58px);
}

/* os filetes que ladeiam a marca */
.block center:has(img[src*="logo-hpp-g"])::before,
.block center:has(img[src*="logo-hpp-g"])::after {
    content: "";
    flex: 1 1 auto;
    max-width: 190px;
    height: 1px;
    background: linear-gradient(to right,
                transparent, var(--linha) 40%, var(--linha) 60%, transparent);
}

.block center img[src*="logo-hpp-g"] {
    flex: 0 0 auto;
    width: clamp(190px, 26vw, 330px);
    max-width: 100%;
    margin: 0;
}

/* o <br> solto depois do logo dobrava o espaço que o flex já dá */
.block center:has(img[src*="logo-hpp-g"]) + br {
    display: none;
}

/* Navegadores sem :has() (nada relevante desde 2023) caem no caminho
   antigo: o logo continua visível, só sem os filetes. */
@supports not selector(:has(*)) {
    .block center img[src*="logo-hpp-g"] {
        display: block;
        width: 300px;
        margin: 0 auto clamp(30px, 4vw, 50px);
    }
}


/* -----------------------------------------------------------------
   10. PEÇAS NOVAS
   ----------------------------------------------------------------- */

/* BLINDAGEM CONTRA O ESPAÇADOR FLUTUANTE — leia antes de criar grade nova.

   layout2.css:31 declara .space1n … .space5n como
   `float:left; width:100%; clear:both`. Um container display:grid ou
   display:flex estabelece um contexto de formatação próprio, e por
   definição um BFC não invade a área de um float. Como o espaçador ocupa
   100% da largura, sobra ZERO: a grade encolhe para 0px e some, sem erro
   no console e sem rolagem horizontal.

   Já mordeu duas vezes neste projeto: as sete galerias de quarto e a
   lista de acomodações. `clear: both` faz o container descer para depois
   do float e recuperar a largura.

   Qualquer grade nova colocada dentro do HTML legado entra nesta lista. */
.hpp-duplo,
.hpp-vitrine,
.hpp-trilho,
.hpp-chegar,
.hpp-cabeca,
.hpp-acom {
    clear: both;
}

/* A FAIXA DA MARCA FOI REMOVIDA.

   Era uma seção inteira, entre os números e o conteúdo, só com a flor
   ampliada e uma frase. Ficava solta: não tinha ligação com o que vinha
   antes nem com o que vinha depois, e repetia uma marca que já abre a
   capa, está na barra do topo e no rodapé.

   O que ela tentava fazer — dar destaque à flor — agora acontece onde
   importa: a marca da capa e a da barra usam img/logo-hpp-rosa.png, com a
   flor em rosa e o letreiro em branco.

   O ornamento .hpp-flor abaixo continua disponível para divisores. */

/* --- a flor sozinha, como ornamento -------------------------------
   Mesmo recorte da marca-d'água, em tamanho de enfeite. Usada como
   divisor entre seções. */

.hpp-flor {
    display: block;
    width: 68px;
    aspect-ratio: 347 / 184;
    background: url("../img/logo-hpp-g.png") no-repeat left center;
    background-size: 197.7% auto;
    flex: 0 0 auto;
}

.hpp-divisor {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: clamp(16px, 2.4vw, 34px);
    margin: 0 auto;
    padding: clamp(30px, 4vw, 56px) 0;
}

.hpp-divisor::before,
.hpp-divisor::after {
    content: "";
    flex: 1 1 auto;
    max-width: 210px;
    height: 1px;
    background: linear-gradient(to right,
                transparent, var(--linha) 45%, var(--linha) 55%, transparent);
}


/* --- faixa de números logo abaixo da capa --- */

.hpp-numeros {
    background: var(--verde-fundo);
    color: #fff;
}

.hpp-numeros ul {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 1px;
    max-width: 1240px;
    margin: 0 auto;
    padding: 0;
    list-style: none;
    background: rgba(255, 255, 255, .12);
}

.hpp-numeros li {
    background: var(--verde-fundo);
    padding: clamp(34px, 4vw, 54px) 18px;
    text-align: center;
}

.hpp-numeros b {
    display: block;
    font-family: var(--f-display);
    font-size: clamp(34px, 3.6vw, 52px);
    font-weight: 500;
    line-height: 1;
    color: #fff;
    margin-bottom: 10px;
}

.hpp-numeros span {
    display: block;
    font-size: 11px;
    font-weight: 400;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, .66);
}

/* --- abertura em duas colunas: texto + foto --- */

.hpp-duplo {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: clamp(38px, 5vw, 84px);
    align-items: center;
}

.hpp-duplo--texto-direita {
    direction: rtl;
}

.hpp-duplo--texto-direita > * {
    direction: ltr;
}

.segment3 .container .block .hpp-duplo p,
.hpp-duplo p {
    max-width: 52ch;
}

.hpp-foto {
    position: relative;
    overflow: hidden;
    border-radius: var(--raio);
    box-shadow: var(--sombra-2);
    aspect-ratio: 4 / 5;
    background: var(--verde-palido) center/cover no-repeat;
}

.hpp-foto--larga {
    aspect-ratio: 3 / 2;
}

/* moldura deslocada: um filete verde atrás da foto, deslocado no eixo */
.hpp-foto--moldurada {
    box-shadow: var(--sombra-2);
}

.hpp-foto--moldurada::before {
    content: "";
    position: absolute;
    inset: 14px;
    border: 1px solid rgba(255, 255, 255, .34);
    border-radius: 2px;
    pointer-events: none;
    z-index: 1;
}

/* --- vitrine de experiências (4 cartões grandes) --- */

.hpp-vitrine {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: clamp(16px, 1.8vw, 28px);
}

.hpp-cartao {
    position: relative;
    display: block;
    overflow: hidden;
    border-radius: var(--raio);
    aspect-ratio: 16 / 11;
    background: var(--verde-palido);
    text-decoration: none;
    box-shadow: var(--sombra-1);
}

.hpp-cartao .hpp-cartao-foto {
    position: absolute;
    inset: 0;
    background-position: center;
    background-size: cover;
    transition: transform 1.1s var(--curva);
}

/* Véu geral do cartão: só dá unidade às quatro fotos, que têm exposições
   bem diferentes. Quem garante a leitura é o degradê do próprio bloco de
   texto, logo abaixo. */
.hpp-cartao::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(to top,
                rgba(10, 28, 18, .34) 0%,
                rgba(10, 28, 18, .10) 46%,
                rgba(10, 28, 18, 0) 76%);
    transition: opacity .5s var(--curva);
}

.hpp-cartao:hover .hpp-cartao-foto,
.hpp-cartao:focus .hpp-cartao-foto {
    transform: scale(1.055);
}

/* O degradê fica NO BLOCO DE TEXTO, não no cartão.

   Preso ao cartão, ele é calibrado para uma altura só: no desktop o cartão
   é 16:11 e o texto cai no terço escuro, mas no celular vira 4:3 e o mesmo
   degradê deixa o parágrafo em cima da parte clara da foto — foi o que
   aconteceu com o cartão de Acomodações, cuja foto é quase branca.

   Preso ao texto, o véu tem sempre exatamente a altura que precisa cobrir,
   em qualquer proporção de cartão. O padding-top é o espaço onde o degradê
   nasce e se dissolve na foto.

   Medido no pior caso (parágrafo sobre a área mais clara da foto do
   quarto): 6.2:1 — acima dos 4.5:1 do WCAG AA. */
.hpp-cartao-texto {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 2;
    /* o degradê encurtou junto com o texto: o parágrafo saiu dos cartões
       (caía no meio da foto e ficava ilegível mesmo com véu), sobraram o
       título e a chamada de ação */
    padding: 64px clamp(24px, 2.6vw, 38px) clamp(24px, 2.6vw, 34px);
    color: #fff;
    background: linear-gradient(to top,
                rgba(10, 28, 18, .90) 0%,
                rgba(10, 28, 18, .76) 45%,
                rgba(10, 28, 18, .34) 74%,
                rgba(10, 28, 18, 0) 100%);
}

.segment3 .container .block .hpp-cartao-texto h3,
.hpp-cartao-texto h3 {
    font-family: var(--f-display);
    font-size: clamp(26px, 2.5vw, 38px);
    font-weight: 500;
    line-height: 1.1;
    margin: 0 0 8px;
    color: #fff;
    text-align: left;
    letter-spacing: -.01em;
    text-shadow: 0 2px 20px rgba(10, 28, 18, .45);
}

.segment3 .container .block .hpp-cartao-texto p,
.hpp-cartao-texto p {
    margin: 0;
    max-width: 42ch;
    font-size: 14.5px;
    font-weight: 300;
    line-height: 1.55;
    color: rgba(255, 255, 255, .86);
}

.hpp-cartao-texto .hpp-mais {
    display: inline-block;
    margin-top: 16px;
    font-size: 11px;
    font-weight: 500;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: #fff;
    border-bottom: 1px solid rgba(255, 255, 255, .45);
    padding-bottom: 5px;
    transition: border-color .3s var(--curva);
}

.hpp-cartao:hover .hpp-mais {
    border-bottom-color: #fff;
}

/* --- trilho de acomodações --- */

.hpp-trilho {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: clamp(14px, 1.6vw, 26px);
}

.hpp-quarto {
    display: flex;
    flex-direction: column;
    background: #fff;
    border: 1px solid var(--linha);
    border-radius: var(--raio);
    overflow: hidden;
    text-decoration: none;
    color: var(--tinta);
    box-shadow: var(--sombra-1);
    transition: transform .4s var(--curva), box-shadow .4s var(--curva);
}

.hpp-quarto:hover,
.hpp-quarto:focus {
    transform: translateY(-5px);
    box-shadow: var(--sombra-2);
    text-decoration: none;
    color: var(--tinta);
}

.hpp-quarto-foto {
    aspect-ratio: 4 / 3;
    background-position: center;
    background-size: cover;
    background-color: var(--verde-palido);
}

.hpp-quarto-corpo {
    padding: 22px 22px 24px;
    display: flex;
    flex-direction: column;
    flex: 1;
}

.segment3 .container .block .hpp-quarto-corpo h3,
.hpp-quarto-corpo h3 {
    font-family: var(--f-display);
    font-size: 25px;
    font-weight: 600;
    line-height: 1.15;
    margin: 0 0 8px;
    color: var(--verde);
    text-align: left;
}

.segment3 .container .block .hpp-quarto-corpo p,
.hpp-quarto-corpo p {
    max-width: none;
    margin: 0 0 16px;
    font-size: 14.5px;
    line-height: 1.6;
    color: var(--tinta-2);
    flex: 1;
}

.hpp-etiqueta {
    display: inline-block;
    align-self: flex-start;
    padding: 5px 11px;
    background: var(--verde-palido);
    border-radius: 2px;
    font-size: 10.5px;
    font-weight: 500;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--verde);
    margin-bottom: 12px;
}

.hpp-quarto .hpp-mais-quarto {
    font-size: 11px;
    font-weight: 500;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--acao);
}

/* --- cabeçalho de seção com título à esquerda e link à direita --- */

.hpp-cabeca {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 40px;
    margin-bottom: clamp(28px, 3.2vw, 46px);
}

.segment3 .container .block .hpp-cabeca h3.hpp-titulo {
    margin: 0;
}

.hpp-cabeca-texto {
    max-width: 820px;
}

/* o link fica alinhado pela base do título, sem descer com ele */
.hpp-cabeca > .hpp-link-seta {
    flex: 0 0 auto;
    margin-bottom: 8px;
}

/* --- citação --- */

.hpp-citacao {
    max-width: 34ch;
    margin: 0;
    font-family: var(--f-display);
    font-size: clamp(24px, 2.4vw, 36px);
    font-weight: 400;
    font-style: italic;
    line-height: 1.32;
    color: var(--verde);
}

.hpp-citacao footer,
.hpp-assinatura {
    display: block;
    margin-top: 20px;
    background: none;
    font-family: var(--f-ui);
    font-size: 11.5px;
    font-style: normal;
    font-weight: 500;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--tinta-2);
}

/* --- bloco "como chegar" --- */

.hpp-chegar {
    display: grid;
    grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
    gap: clamp(34px, 4vw, 68px);
    align-items: start;
}

.hpp-dados {
    list-style: none;
    padding: 0;
    margin: 0 0 28px;
}

.hpp-dados li {
    display: flex;
    gap: 14px;
    padding: 15px 0;
    border-bottom: 1px solid var(--linha);
    font-size: 16px;
    line-height: 1.55;
}

.hpp-dados li:first-child {
    padding-top: 0;
}

.hpp-dados i {
    flex: 0 0 20px;
    margin-top: 4px;
    color: var(--verde-vivo);
    font-size: 16px;
}

.hpp-dados b {
    display: block;
    font-size: 10.5px;
    font-weight: 500;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--tinta-2);
    margin-bottom: 3px;
}

.hpp-dados a {
    color: var(--verde);
    text-decoration: none;
    border-bottom: 1px solid var(--linha);
}

.hpp-dados a:hover {
    color: var(--acao);
    border-bottom-color: var(--acao);
}

/* --- texto longo que começa recolhido --- */

.hpp-dobra {
    position: relative;
}

.hpp-dobra[data-recolhido="1"] .hpp-dobra-corpo {
    max-height: 340px;
    overflow: hidden;
    -webkit-mask-image: linear-gradient(to bottom, #000 62%, transparent 100%);
            mask-image: linear-gradient(to bottom, #000 62%, transparent 100%);
}

.hpp-dobra-botao {
    margin-top: 20px;
    background: none;
    border: 0;
    padding: 0 0 6px;
    font-family: var(--f-ui);
    font-size: 11.5px;
    font-weight: 500;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--verde);
    border-bottom: 1px solid var(--linha);
    cursor: pointer;
}

.hpp-dobra-botao:hover {
    color: var(--acao);
    border-bottom-color: var(--acao);
}


/* -----------------------------------------------------------------
   11. GALERIA

   A grade ficava torta por CSS, não pelas fotos: 16 das 18 imagens de g1/
   são 1200x800 idênticas. O problema era .picture-mini com altura FIXA de
   150px (layout2.css:374) combinada com colunas que alternavam entre
   col-sm-3, col-sm-6 e col-sm-12 no mesmo bloco — a mesma foto aparecia
   ora em 1.8:1, ora em 3.8:1.
   ----------------------------------------------------------------- */

.picture.picture-mini {
    height: auto;
    aspect-ratio: 4 / 3;
}

.picture.picture-mini .bg {
    height: 100%;
}

@media only screen and (max-width: 1024px) {
    /* layout2.css:972 força 80px aqui; a proporção precisa vencer */
    .picture.picture-mini {
        height: auto;
    }
}

/* ARMADILHA DO LAYOUT ANTIGO — não tire o clear:both.

   Os espaçadores .space1n … .space5n do layout2.css:31 são
   `float:left; width:100%; clear:both`. Um container display:grid cria um
   contexto de formatação próprio, que por definição não invade a área de
   um float — e como o espaçador ocupa 100% da largura, sobra ZERO.

   Resultado medido antes desta linha: as sete páginas de acomodação, que
   têm um .space3n logo antes da galeria, renderizavam a grade com 0px de
   largura e células de 1px. As fotos dos quartos simplesmente não
   apareciam, sem nenhum erro no console.

   galeria.html escapava por acaso: lá o irmão anterior é um <hr>.

   Vale para qualquer grade ou flex novo colocado depois de um espaçador. */
.gal-grade,
.gal-quarto {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: clamp(10px, 1.2vw, 18px);
    margin-left: 0;
    margin-right: 0;
    clear: both;
}

/* SEGUNDA ARMADILHA, no mesmo lugar.

   As duas grades são aplicadas sobre um <div class="row">, e o .row do
   Bootstrap 3 traz `::before` e `::after` com `content:" "; display:table`
   para limpar floats. Dentro de um container display:grid, pseudo-elemento
   com conteúdo VIRA ITEM DA GRADE.

   Medido: a primeira célula da galeria de cada quarto ficava ocupada por
   um ::before invisível, empurrando todas as fotos uma posição para a
   frente — a linha de cima começava vazia. */
.gal-grade::before,
.gal-grade::after,
.gal-quarto::before,
.gal-quarto::after {
    display: none;
}

.gal-grade .picture.picture-mini,
.gal-quarto .picture.picture-mini {
    width: auto;
    height: auto;
    padding: 0;
    margin: 0;
    float: none;
}

/* os .clearfix que o gerador insere a cada 4 fotos não têm função numa
   grade — a quebra de linha é do próprio grid */
.gal-grade .clearfix,
.gal-quarto .clearfix {
    display: none;
}

/* o zoom do hover crescia 4% para fora da célula e passava da borda
   direita do conteúdo nas fotos da ponta */
.gal-grade .picture,
.gal-quarto .picture {
    overflow: hidden;
    border-radius: var(--raio);
}

/* O degrau de 3 colunas existia só na .gal-grade. Sem ele, a .gal-quarto
   pulava de 4 colunas direto para 2 em 767px — e como o container também
   muda de largura ali, a foto ENCOLHIA quando a tela crescia 1px: medido
   360x270 a 767px contra 167x126 a 768px, menor até do que a 414px. */
@media only screen and (max-width: 991px) {
    .gal-grade,
    .gal-quarto {
        grid-template-columns: repeat(3, 1fr);
    }
}

@media only screen and (max-width: 767px) {
    .gal-grade,
    .gal-quarto {
        grid-template-columns: repeat(2, 1fr);
    }
}


/* -----------------------------------------------------------------
   12. RODAPÉ

   O HTML do rodapé é o mesmo nas 20 telas e foi reescrito por
   ferramentas/refazer-rodape.py: virou três colunas com endereço e
   telefone, que antes só existiam na página de contato.
   ----------------------------------------------------------------- */

footer {
    background-color: var(--verde-fundo);
    color: rgba(255, 255, 255, .70);
    font-size: 15px;
}

footer .container {
    width: auto;
    max-width: 1240px;
    padding: clamp(56px, 6vw, 92px) 34px clamp(28px, 3vw, 40px);
}

footer a {
    color: rgba(255, 255, 255, .78);
    text-decoration: none;
}

footer a:hover,
footer a:focus {
    color: #fff;
    text-decoration: none;
}

footer .container h2 {
    font-family: var(--f-ui);
    font-variant: normal;
    font-stretch: normal;
    font-size: 11px;
    font-weight: 500;
    letter-spacing: .24em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, .55);
    margin: 0 0 20px;
}

footer .container hr {
    border-top: 1px solid rgba(255, 255, 255, .14);
    margin: clamp(34px, 4vw, 54px) 0 26px;
}

.hpp-rodape-grade {
    display: grid;
    grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(30px, 4vw, 70px);
    text-align: left;
}

.hpp-rodape-marca img {
    width: 210px;
    margin-bottom: 22px;
}

.hpp-rodape-marca p {
    max-width: 34ch;
    font-size: 15px;
    line-height: 1.7;
    color: rgba(255, 255, 255, .62);
}

.hpp-rodape-lista {
    list-style: none;
    padding: 0;
    margin: 0;
}

.hpp-rodape-lista li {
    margin-bottom: 11px;
    line-height: 1.5;
}

.hpp-rodape-lista a {
    font-size: 15px;
}

.hpp-rodape-contato li {
    display: flex;
    gap: 11px;
    margin-bottom: 15px;
    line-height: 1.55;
    color: rgba(255, 255, 255, .70);
}

.hpp-rodape-contato i {
    flex: 0 0 16px;
    margin-top: 4px;
    color: rgba(255, 255, 255, .42);
}

/* redes: círculos vazados no lugar dos ícones de 50px soltos */
footer .container .social-line {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin: 0;
}

footer .container .social-line a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    margin: 0;
    padding: 0;
    font-size: 17px;
    color: rgba(255, 255, 255, .74);
    border: 1px solid rgba(255, 255, 255, .22);
    border-radius: 50%;
}

footer .container .social-line a:hover,
footer .container .social-line a:focus {
    color: #fff;
    border-color: rgba(255, 255, 255, .7);
    background: rgba(255, 255, 255, .08);
}

.hpp-rodape-fim {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 26px;
    align-items: center;
    justify-content: space-between;
    font-size: 12.5px;
    letter-spacing: .04em;
    color: rgba(255, 255, 255, .42);
}

.hpp-rodape-fim ul {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 20px;
    list-style: none;
    margin: 0;
    padding: 0;
}

.hpp-rodape-fim a {
    color: rgba(255, 255, 255, .55);
}


/* -----------------------------------------------------------------
   13. MENU RECOLHÍVEL (montado por js/menu-mobile.js)

   ATÉ 1099px O MENU VIRA HAMBÚRGUER — não é só "no celular".

   São nove links mais o botão Reservas, e promocoes.html ainda tem um
   décimo item. Medido item a item, com a borda direita de cada link:
   abaixo de 960px o Reservas saía da janela nas telas comuns, e abaixo
   de 1100px em promocoes.html.

   O detalhe perigoso: a barra é position:fixed, então esse vazamento
   NÃO gera rolagem horizontal. O botão principal do site simplesmente
   desaparecia, em silêncio, em toda a faixa de tablet — nenhuma medição
   de scrollWidth acusaria.

   Encolher mais a tipografia não resolvia (passaria de 8px). Recolher é
   o caminho honesto.

   js/menu-mobile.js NÃO repete este número: ele pergunta ao navegador se
   o menu de cima está escondido. Quem manda no ponto de virada é este
   arquivo, sozinho.
   ----------------------------------------------------------------- */

.hpp-hamburguer,
.hpp-painel,
.hpp-fundo {
    display: none;
}

@media only screen and (max-width: 1099px) {

    /* A altura da barra é redeclarada AQUI, e não em cada regra que precisa
       dela. Assim tudo que depende de --barra acompanha sozinho: a própria
       barra, o recuo das âncoras, o topo do conteúdo da capa e o
       afastamento das telas sem foto. Antes a altura era escrita à mão em
       cada lugar e a capa continuava calculando com os 92px do desktop —
       numa janela baixa a marca ia parar embaixo da barra. */
    :root {
        --barra: 76px;
        --barra-min: 64px;
    }

    /* os links soltos quebravam em duas fileiras e comiam a tela */
    .navbar .menu-top .menu {
        display: none;
    }

    .navbar .menu-top {
        position: relative;
        justify-content: flex-start;
    }

    .hpp-hamburguer {
        display: block;
        position: absolute;
        top: 50%;
        right: 2px;
        transform: translateY(-50%);
        width: 44px;            /* alvo de toque mínimo confortável */
        height: 44px;
        padding: 12px 10px;
        background: none;
        border: 0;
        cursor: pointer;
        z-index: 1002;
    }

    .hpp-hamburguer span {
        display: block;
        height: 1.5px;
        width: 100%;
        margin: 4.5px 0;
        border-radius: 2px;
        background: #fff;
        box-shadow: 0 1px 6px rgba(10, 28, 18, .55);
        transition: transform .25s var(--curva), opacity .2s ease;
    }

    .hpp-hamburguer.aberto span:nth-child(1) {
        transform: translateY(6px) rotate(45deg);
    }

    .hpp-hamburguer.aberto span:nth-child(2) {
        opacity: 0;
    }

    .hpp-hamburguer.aberto span:nth-child(3) {
        transform: translateY(-6px) rotate(-45deg);
    }

    .hpp-painel {
        display: block;
        position: fixed;
        top: 0;
        right: 0;
        width: min(82vw, 340px);
        height: 100%;
        padding: 90px 0 28px;
        background: var(--verde-fundo);
        box-shadow: -6px 0 40px rgba(10, 28, 18, .4);
        overflow-y: auto;
        z-index: 1001;
    }

    .hpp-painel[hidden] {
        display: none;
    }

    .hpp-painel a {
        display: block;
        padding: 15px 28px;          /* alvo de toque confortável */
        color: rgba(255, 255, 255, .86);
        font-family: var(--f-ui);
        font-size: 13px;
        font-weight: 400;
        letter-spacing: .14em;
        text-transform: uppercase;
        text-decoration: none;
        border-bottom: 1px solid rgba(255, 255, 255, .08);
    }

    .hpp-painel a:hover,
    .hpp-painel a:active,
    .hpp-painel a:focus {
        background: rgba(255, 255, 255, .07);
        color: #fff;
    }

    .hpp-painel a.ativo {
        color: #fff;
    }

    .hpp-painel a.ativo::before {
        content: "";
        display: inline-block;
        width: 14px;
        height: 1px;
        margin-right: 10px;
        vertical-align: middle;
        background: var(--acao);
    }

    /* Reservas continua sendo a ação em destaque */
    .hpp-painel a[href="reservas.php"] {
        margin: 20px 28px 0;
        padding: 14px 16px;
        color: #fff;
        background: var(--acao);
        border: 0;
        border-radius: var(--raio);
        text-align: center;
        font-weight: 500;
    }

    /* O item do WhatsApp é o único sem href de verdade (o menu-mobile.js
       copia o onclick e põe href="#"). Vinha logo depois do botão de
       Reservas com a mesma borda dos demais e ficava órfão. */
    .hpp-painel a[href="#"] {
        margin-top: 6px;
        border-bottom: 0;
        color: rgba(255, 255, 255, .58);
    }

    .hpp-fundo {
        display: block;
        position: fixed;
        inset: 0;
        background: rgba(10, 28, 18, .55);
        z-index: 1000;
    }

    .hpp-fundo[hidden] {
        display: none;
    }

    body.hpp-menu-aberto {
        overflow: hidden;
    }
}

@media only screen and (max-width: 767px) {

    :root {
        --barra: 62px;
        --barra-min: 56px;
    }

    .navbar .container {
        padding: 0 16px;
    }

    /* O logo tem 373px de largura numa tela de 414: ocupava quase tudo e
       não sobrava espaço para o botão. */
    .navbar .menu-top .logo img,
    body.hpp-rolou .navbar .menu-top .logo img {
        width: 150px;
    }
}


/* -----------------------------------------------------------------
   13b. AVISO DE ENVIO DE FORMULÁRIO (criado por js/interface.js)

   Substitui o alert() do navegador — aquela caixa cinza do sistema, sem
   identidade nenhuma e que ainda por cima trava a página até o clique.

   Como funciona: os scripts PHP não mostram mais alert; eles voltam para
   a tela do formulário com ?envio=ok, ?envio=erro ou ?envio=dados. O
   interface.js lê esse parâmetro, monta o aviso e limpa a URL, para que
   um F5 não mostre a mensagem de novo.

   Sem JavaScript o visitante simplesmente volta ao formulário sem aviso —
   igual ao que acontecia antes quando o alert era bloqueado.
   ----------------------------------------------------------------- */

.hpp-aviso {
    position: fixed;
    inset: 0;
    z-index: 2000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
}

.hpp-aviso-fundo {
    position: absolute;
    inset: 0;
    background: rgba(8, 20, 14, .78);
    -webkit-backdrop-filter: blur(5px);
            backdrop-filter: blur(5px);
    animation: hpp-aviso-entra-fundo .35s var(--curva) both;
}

.hpp-aviso-caixa {
    position: relative;
    width: min(460px, 100%);
    max-height: calc(100vh - 48px);
    overflow-y: auto;
    padding: clamp(32px, 5vw, 46px) clamp(26px, 4vw, 42px) clamp(28px, 4vw, 38px);
    background: var(--areia);
    border-radius: var(--raio-g);
    box-shadow: 0 30px 80px rgba(8, 20, 14, .45);
    text-align: center;
    animation: hpp-aviso-entra .45s var(--curva) both;
}

.hpp-aviso-marca {
    display: block;
    width: 172px;
    height: auto;
    margin: 0 auto clamp(20px, 3vw, 28px);
}

/* --- o selo: círculo e sinal desenhados na hora --- */

.hpp-aviso-selo {
    width: 76px;
    height: 76px;
    margin: 0 auto 22px;
}

.hpp-aviso-selo svg {
    width: 100%;
    height: 100%;
}

.hpp-aviso-selo circle,
.hpp-aviso-selo path {
    fill: none;
    stroke-width: 2.5;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* O traço é desenhado escondendo a linha inteira (dasharray = comprimento)
   e puxando o offset até zero. O círculo tem 2*pi*24 = 151 de perímetro;
   os sinais têm folga de sobra em 60. */
.hpp-aviso-selo circle {
    stroke-dasharray: 151;
    stroke-dashoffset: 151;
    animation: hpp-risca .6s var(--curva) .15s forwards;
}

.hpp-aviso-selo path {
    stroke-dasharray: 60;
    stroke-dashoffset: 60;
    animation: hpp-risca .4s var(--curva) .55s forwards;
}

.hpp-aviso--ok .hpp-aviso-selo circle,
.hpp-aviso--ok .hpp-aviso-selo path {
    stroke: var(--verde-vivo);
}

.hpp-aviso--erro .hpp-aviso-selo circle,
.hpp-aviso--erro .hpp-aviso-selo path {
    stroke: var(--acao);
}

/* "confira os dados": verde-escuro da marca, para não soar como falha */
.hpp-aviso--dados .hpp-aviso-selo circle,
.hpp-aviso--dados .hpp-aviso-selo path {
    stroke: var(--verde);
}

/* o ponto da exclamação aparece depois do traço */
.hpp-aviso--dados .hpp-aviso-selo path + path {
    animation-delay: .8s;
}

/* a caixa recebe foco para o leitor de tela; não precisa de anel */
.hpp-aviso-caixa:focus {
    outline: none;
}

/* a segunda perna do X sai um pouco depois da primeira */
.hpp-aviso--erro .hpp-aviso-selo path + path {
    animation-delay: .72s;
}

.hpp-aviso-caixa h2 {
    margin: 0 0 12px;
    font-family: var(--f-display);
    font-variant: normal;
    font-stretch: normal;
    font-size: clamp(26px, 3.4vw, 34px);
    font-weight: 500;
    line-height: 1.15;
    color: var(--verde);
}

.hpp-aviso-caixa p {
    margin: 0 auto;
    max-width: 34ch;
    font-size: 16px;
    line-height: 1.65;
    color: var(--tinta-2);
}

.hpp-aviso-acoes {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: center;
    margin-top: clamp(24px, 3.5vw, 32px);
}

/* --- as animações --- */

@keyframes hpp-aviso-entra-fundo {
    from { opacity: 0; }
    to   { opacity: 1; }
}

@keyframes hpp-aviso-entra {
    from { opacity: 0; transform: translateY(18px) scale(.96); }
    to   { opacity: 1; transform: none; }
}

@keyframes hpp-risca {
    to { stroke-dashoffset: 0; }
}

/* quem pediu menos movimento recebe o aviso pronto, sem desenho */
@media (prefers-reduced-motion: reduce) {
    .hpp-aviso-fundo,
    .hpp-aviso-caixa {
        animation: none;
    }
    .hpp-aviso-selo circle,
    .hpp-aviso-selo path {
        stroke-dashoffset: 0;
        animation: none;
    }
}

/* a página atrás não rola enquanto o aviso está aberto */
body.hpp-aviso-aberto {
    overflow: hidden;
}


/* -----------------------------------------------------------------
   14. WHATSAPP FLUTUANTE (criado por js/interface.js)

   No site antigo o WhatsApp era um link de texto no meio do menu,
   apontando para web.whatsapp.com — que só funciona no computador. O
   wa.me abre o aplicativo no celular, que é de onde vem a maior parte
   das mensagens.
   ----------------------------------------------------------------- */

.hpp-zap {
    position: fixed;
    right: 22px;
    bottom: 22px;
    z-index: 1020;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    border-radius: 50%;
    background: #25d366;
    color: #fff;
    font-size: 27px;
    text-decoration: none;
    box-shadow: 0 8px 26px rgba(10, 28, 18, .32);
    transition: transform .3s var(--curva), box-shadow .3s var(--curva);
}

.hpp-zap:hover,
.hpp-zap:focus {
    color: #fff;
    transform: scale(1.07);
    box-shadow: 0 12px 34px rgba(10, 28, 18, .4);
}

/* some quando o painel do celular está aberto, para não cobrir o menu */
body.hpp-menu-aberto .hpp-zap {
    display: none;
}

@media only screen and (max-width: 767px) {
    .hpp-zap {
        right: 16px;
        bottom: 16px;
        width: 52px;
        height: 52px;
        font-size: 25px;
    }
}


/* -----------------------------------------------------------------
   15. MOVIMENTO

   Antes conviviam três regimes de transição (0.25s em layout2.css, 0.45s
   e 0.2s em quartos.css) e vários elementos clicáveis não davam sinal
   nenhum.

   A revelação ao rolar só existe quando o JavaScript confirma que está
   vivo (html.hpp-anima). Sem essa trava, um erro de script deixaria a
   página inteira invisível.
   ----------------------------------------------------------------- */

a,
.btn,
.panel {
    transition: color .25s var(--curva),
                background-color .25s var(--curva),
                border-color .25s var(--curva),
                box-shadow .25s var(--curva);
}

/* ZOOM AO PASSAR O MOUSE — quem cresce é a imagem, não a caixa.

   Antes o próprio .bg recebia `transform: scale(1.04)`. Como .bg é o
   elemento que ocupa a moldura inteira, ele crescia PARA FORA dela: a foto
   passava dos quatro lados enquanto a legenda, que não é transformada,
   continuava parada na largura original. O resultado era a faixa escura da
   legenda terminando antes da foto, como um retângulo marcado no meio da
   imagem transbordada. Em piscinas.html dava para ver a foto escapando
   ~23px de cada lado.

   Não bastava pôr `overflow:hidden` no .picture: ele é uma coluna do
   Bootstrap com 15px de padding, e overflow corta na caixa de PADDING —
   ainda escapariam 8px por lado.

   A solução é separar quem clipa de quem cresce. O .bg passa a clipar, e
   um pseudo-elemento dentro dele carrega a foto e cresce. A URL vem por
   `background-image: inherit`, porque a foto está num style inline no
   HTML de cada bloco (e `background-position: inherit` preserva os
   enquadramentos manuais, como o `center -380px` da capa de piscinas).

   Assim o zoom acontece DENTRO da moldura, que é o comportamento que se
   espera, e a legenda continua casando com a borda da foto. */

.picture .bg.grow {
    position: relative;
    overflow: hidden;
    transition: box-shadow .4s var(--curva);
}

.picture .bg.grow::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: inherit;
    background-position: inherit;
    background-size: cover;
    background-repeat: no-repeat;
    border-radius: inherit;
    /* devagar de propósito: um movimento lento lê como sofisticado, um
       movimento rápido lê como reação de botão */
    transition: transform 1.1s var(--curva);
}

/* NEUTRALIZAR A REGRA ANTIGA — sem isto o conserto acima não vale nada.

   layout2.css:238 declara `.grow:hover { transform: scale(1.025);
   opacity:.90 }`. É uma classe mais uma pseudo-classe, (0,2,0). A regra
   nova aqui é (0,4,0) e vence — mas só nas propriedades que ela DECLARA.
   Enquanto ela mexia apenas em box-shadow, o `transform` da regra antiga
   continuava valendo e escalava a CAIXA inteira, que é justamente o que
   se queria evitar: a foto crescia para fora da moldura e a legenda
   ficava mais estreita que ela.

   `transform: none` e `opacity: 1` desarmam as duas heranças. O
   `opacity:.90` também precisava sair: ele desbotava a foto no hover, o
   que somado ao salto de escala dava o efeito exagerado. */
.picture .bg.grow:hover {
    transform: none;
    opacity: 1;
}

/* Zoom discreto: 3,5% em vez dos 6% anteriores, e sem a sombra saltando
   junto. O movimento se percebe, não se anuncia. */
.picture .bg.grow:hover::before {
    transform: scale(1.035);
}

@media (prefers-reduced-motion: reduce) {
    .picture .bg.grow:hover::before {
        transform: none;
    }
}

html.hpp-anima .hpp-revela {
    opacity: 0;
    transform: translateY(22px);
    transition: opacity .9s var(--curva), transform .9s var(--curva);
    will-change: opacity, transform;
}

html.hpp-anima .hpp-revela.hpp-visivel {
    opacity: 1;
    transform: none;
}

/* quem prefere menos movimento, recebe menos movimento */
@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }
    *,
    *::before,
    *::after {
        transition-duration: .01ms !important;
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
    }
    html.hpp-anima .hpp-revela {
        opacity: 1;
        transform: none;
    }
}


/* -----------------------------------------------------------------
   16. TELAS ESTREITAS
   Tudo que precisa desmontar as grades acima.
   ----------------------------------------------------------------- */

@media only screen and (max-width: 991px) {
    .hpp-vitrine {
        gap: 14px;
    }
    .hpp-trilho {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    .hpp-numeros ul {
        grid-template-columns: repeat(2, 1fr);
    }
    .hpp-rodape-grade {
        grid-template-columns: 1fr 1fr;
    }
    .hpp-rodape-marca {
        grid-column: 1 / -1;
    }
}

@media only screen and (max-width: 767px) {
    .segment3 .container {
        padding: clamp(48px, 11vw, 70px) 18px;
    }

    .hpp-duplo,
    .hpp-chegar {
        grid-template-columns: 1fr;
        gap: 30px;
    }

    .hpp-duplo--texto-direita {
        direction: ltr;
    }

    /* no celular a foto vem antes do texto, como na leitura natural */
    .hpp-duplo .hpp-foto {
        order: -1;
        aspect-ratio: 3 / 2;
    }

    .hpp-vitrine {
        grid-template-columns: 1fr;
    }

    .hpp-cartao {
        aspect-ratio: 4 / 3;
    }

    .hpp-cabeca {
        flex-direction: column;
        align-items: flex-start;
        gap: 18px;
    }

    .hpp-citacao {
        max-width: none;
    }

    .navbar + .picture.picture-big {
        height: 52vh;
        min-height: 330px;
    }

    .hpp-rodape-grade {
        grid-template-columns: 1fr;
        gap: 34px;
    }

    .hpp-rodape-fim {
        flex-direction: column;
        align-items: flex-start;
    }

    footer .container {
        padding-left: 18px;
        padding-right: 18px;
    }
}
