@charset "UTF-8";
/*==================================================================
    Clinica Veterinaria Sao Francisco - camada de marca
    ------------------------------------------------------------------
    Carregar SEMPRE por ultimo, depois de style.css e responsive.css.
    Esta folha sobrescreve o template CarePress: paleta, tipografia,
    foco visivel (WCAG 2.2) e o CTA de WhatsApp.

    As fontes vem de um <link> no <head> do HTML (Fraunces + DM Sans).
    Nao ha @import aqui de proposito: @import bloqueia o render.
==================================================================*/

/*------------------------------------------------------------------
  1. Tokens da marca
------------------------------------------------------------------*/
:root {
    /* Verdes (extraidos por amostragem da logo do cliente) */
    --sf-verde-900: #0F2E1C;   /* footer, superficies escuras */
    --sf-verde-800: #183C24;
    --sf-verde-700: #184824;   /* PRIMARIA da marca - 10.55:1 em branco */
    --sf-verde-600: #1D5C33;
    --sf-verde-500: #187848;   /* botoes / acento - 5.50:1 em branco */
    --sf-verde-400: #3C8460;
    --sf-verde-300: #769984;
    --sf-verde-200: #A1B9AA;
    --sf-verde-100: #C0D0C6;
    --sf-verde-50:  #EBF0ED;

    /* Neutros quentes */
    --sf-creme:     #FBF7EF;   /* fundo quente principal */
    --sf-creme-200: #F2EADA;
    --sf-creme-300: #E4E4CC;

    /* Acento pontual (coracao da logo) - nunca em area grande */
    --sf-vermelho:        #B40C18;
    --sf-vermelho-escuro: #8E0A13;

    /* Texto */
    --sf-texto:   #1C2A20;
    --sf-texto-2: #5A6B60;
    --sf-branco:  #FFFFFF;

    /* Tipografia */
    --sf-font-titulo: 'Fraunces', Georgia, 'Times New Roman', serif;
    --sf-font-corpo:  'DM Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;

    /* Foco visivel */
    --sf-focus:       var(--sf-verde-500);
    --sf-focus-claro: var(--sf-verde-100);
}

/*------------------------------------------------------------------
  2. Base: fundo, texto e rolagem
------------------------------------------------------------------*/
html {
    scroll-behavior: smooth;
    /* header fixo nao pode cobrir a ancora nem o elemento focado
       (WCAG 2.2 - 2.4.11 Focus Not Obscured) */
    scroll-padding-top: 110px;
}

body {
    background: var(--sf-creme);
    color: var(--sf-texto);
    font-family: var(--sf-font-corpo);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

/*------------------------------------------------------------------
  3. Tipografia
     Titulos em Fraunces 700, corpo em DM Sans.
     Os seletores abaixo repetem os do template de proposito: como
     brand.css carrega depois, a mesma especificidade ja vence.
------------------------------------------------------------------*/

/* --- Titulos: Fraunces --- */
h1, h2, h3, h4, h5, h6,
.sec-title h2,
.main-slider .content h2,
.offers-content-box .big-title,
.single-service-style2 .inner-box .big-text,
.product-tab-box .review-form .shop-page-title .title,
.error-content .title,
.single-fact-counter .count-box h2,
.about-experience-box .count-box h2,
.btn-one,
.btn-one .txt {
    font-family: var(--sf-font-titulo);
    font-weight: 700;
    font-optical-sizing: auto;
    letter-spacing: -0.01em;
}

/* --- Corpo, navegacao, formularios e microtexto: DM Sans --- */
body,
p, li, span, a, label, small, blockquote, td, th,
input, select, textarea, button,
.main-menu .navigation>li>a,
.main-menu .navigation> li> ul> li> a,
.main-menu .navigation> li> ul> li> ul> li> a,
.mobile-menu .navigation li > a,
.main-slider .content h5,
.main-slider.style2 .content h5,
.sec-title h5,
.single-fact-counter .count-box h5,
.about-experience-box .count-box h5,
.single-team-member .title-holder h5,
.working-hours-box ul li .left,
.working-hours-box ul li .right,
.single-featured-box .inner .text p,
.single-service-style1 .text-holder .button a,
.single-service-style2 .text-holder .button a,
.priceing-plan-tabs .tab-button-column .tab-buttons li,
.product-tab-box .tab-btns .tab-btn span,
.progress-block .graph-outer .count-text,
.blog-details-text-3 ul li,
.single-sidebar .popular-tag li a,
.tag-social-share-box .tag-list li a,
.styled-pagination li a,
.post-pagination li a,
.footer-menu-style2 ul li a,
.filter-checkbox label,
.showing-result-shorting .showing p,
.review-box-holder .single-review-box .text-holder .top .name h3 span,
.quantity-box input.quantity-spinner.form-control,
.sidebar-search-box .search-form input[type="text"],
.subscribe-form input[type="email"],
.thm-formbox1 input[type="email"],
.thm-formbox1 .bootstrap-select>.dropdown-toggle,
.thm-formbox1 .dropdown-item,
.cost-calculator-box .bootstrap-select>.dropdown-toggle,
.cost-calculator-box .dropdown-item,
.contact-form form textarea,
.contact-form form .bootstrap-select>.dropdown-toggle,
.contact-form form .dropdown-item,
.product-cart-box .bootstrap-select>.dropdown-toggle,
.product-cart-box .dropdown-item,
.shorting .bootstrap-select>.dropdown-toggle,
.shorting .dropdown-item,
.add-comment-box #add-comment-form textarea,
#ui-datepicker-div.ui-widget-content {
    font-family: var(--sf-font-corpo);
}

/* Kicker acima do titulo de secao: leve espacamento para separar da serif */
.sec-title h5 {
    letter-spacing: 0.02em;
}

/*------------------------------------------------------------------
  4. Foco visivel  (WCAG 2.2 - 2.4.11 Focus Appearance)
     O template zera o foco com `* { outline: none }`. Restauramos aqui.
------------------------------------------------------------------*/
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible,
[role="button"]:focus-visible,
[role="link"]:focus-visible,
[role="tab"]:focus-visible,
.btn-one:focus-visible,
.btn-whatsapp:focus-visible,
.scroll-top:focus-visible,
.hidden-bar-opener:focus-visible,
.hidden-bar-closer:focus-visible,
.mobile-nav-toggler:focus-visible,
.owl-nav [class*="owl-"]:focus-visible,
.owl-dot:focus-visible,
.accord-btn:focus-visible {
    outline: 3px solid var(--sf-focus);
    outline-offset: 2px;
}

/* Dentro de superficie escura o verde-500 nao alcanca 3:1 contra o fundo.
   Nesses containers o anel vira verde-100 (9.16:1 sobre verde-900).
   Botoes que ficam sobre creme/branco continuam com o anel verde-500. */
.fact-counter-box a:focus-visible,
.video-gallery-area a:focus-visible,
.callto-action-box a:focus-visible,
.single-priceing-plan-box.style2 a:focus-visible,
.single-priceing-plan-box.style3 a:focus-visible {
    outline-color: var(--sf-focus-claro);
    outline-offset: 3px;
}

/* Navegadores sem :focus-visible. Fica dentro do @supports para nao
   ligar o anel em clique de mouse nos navegadores que ja suportam. */
@supports not selector(:focus-visible) {
    a:focus,
    button:focus,
    input:focus,
    select:focus,
    textarea:focus {
        outline: 3px solid var(--sf-focus);
        outline-offset: 2px;
    }
}

/*------------------------------------------------------------------
  5. Selecao de texto
------------------------------------------------------------------*/
::selection {
    background: var(--sf-verde-500);
    color: var(--sf-branco);
    text-shadow: none;
}
::-moz-selection {
    background: var(--sf-verde-500);
    color: var(--sf-branco);
    text-shadow: none;
}

/*------------------------------------------------------------------
  6. CTA de WhatsApp
------------------------------------------------------------------*/
.btn-whatsapp {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    min-height: 52px;
    padding: 14px 34px;
    background: var(--sf-verde-500);
    color: var(--sf-branco);
    font-family: var(--sf-font-corpo);
    font-size: 16px;
    line-height: 24px;
    font-weight: 700;
    text-align: center;
    text-decoration: none;
    border: none;
    border-radius: 30px;
    cursor: pointer;
    transition: background-color 0.25s ease, color 0.25s ease,
                box-shadow 0.25s ease, transform 0.25s ease;
}
.btn-whatsapp:hover,
.btn-whatsapp:focus {
    background: var(--sf-verde-700);
    color: var(--sf-branco);
    box-shadow: 0 8px 20px rgba(15, 46, 28, 0.22);
    transform: translateY(-2px);
}
.btn-whatsapp:active {
    transform: translateY(0);
    box-shadow: none;
}
.btn-whatsapp i,
.btn-whatsapp svg {
    font-size: 20px;
    line-height: 1;
    flex: 0 0 auto;
}
/* Variante contorno, para usar sobre fundo verde */
.btn-whatsapp.outline {
    background: transparent;
    color: var(--sf-branco);
    box-shadow: inset 0 0 0 2px var(--sf-branco);
}
.btn-whatsapp.outline:hover,
.btn-whatsapp.outline:focus {
    background: var(--sf-branco);
    color: var(--sf-verde-700);
}

/*------------------------------------------------------------------
  7. Correcoes de contraste e ajustes finos da recolorizacao
     (cada item aqui resolve um par que ficaria abaixo de 4.5:1
      ou uma cor que ficaria chapada depois da troca)
------------------------------------------------------------------*/

/* .btn-one no hover: o template punha texto navy sobre o preenchimento
   secundario. Com verde escuro daria 1.9:1 - vai para branco (10.55:1). */
.btn-one,
.btn-one:hover,
.btn-one:focus,
.btn-one .txt {
    color: var(--sf-branco);
}

/* Gradiente do template (era rosa) -> verde-500 para verde-700.
   A classe .gradient-bg-1 aparece no HTML mas nao tinha regra em CSS. */
.gradient-bg-1,
.btn-one.gradient-bg-1,
.gradient-bg-2 {
    background-image: linear-gradient(90deg, var(--sf-verde-500) 0%, var(--sf-verde-700) 100%);
    color: var(--sf-branco);
}

/* Rede de seguranca: em superficie escura, o texto herdado precisa ser
   claro. Especificidade baixa - as regras proprias do template vencem. */
.fact-counter-box,
.video-gallery-area,
.callto-action-box,
.blog-details-author-box,
.single-priceing-plan-box.style2,
.single-priceing-plan-box.style3,
.servicedet-prev-next-option .box.prev {
    color: var(--sf-verde-100);
}

/* Setas de carrossel: primaria no repouso, verde-700 no hover.
   (o mapeamento direto deixaria repouso e hover identicos) */
.owl-nav-style-one.owl-theme .owl-nav [class*="owl-"] {
    background: var(--sf-verde-500);
    border-color: var(--sf-verde-500);
    color: var(--sf-branco);
}
.owl-nav-style-one.owl-theme .owl-nav [class*="owl-"]:hover {
    background: var(--sf-verde-700);
    border-color: var(--sf-verde-700);
    color: var(--sf-branco);
}

/* Contadores: o "+" ficava em verde-500 sobre verde-900 (2.7:1).
   Verde-200 sobre verde-900 da 6.96:1. */
.single-fact-counter .count-box h2 .red,
.single-fact-counter .count-box h2 .green,
.single-fact-counter .count-box h2 .orange,
.single-fact-counter .count-box h2 .blues {
    color: var(--sf-verde-200);
}

/* Aba de plano ativa: fundo verde-500 exigia texto claro (era 2.8:1) */
.priceing-plan-tabs .tab-button-column .tab-buttons li.tab-btn.active-btn,
.priceing-plan-tabs .tab-button-column .tab-buttons li.tab-btn.active-btn a {
    color: var(--sf-branco);
}

/* Titulo grande nao leva vermelho (regra: vermelho so em acento pequeno) */
.offers-content-box h2,
.single-product-info-box .product-value h3,
.widget-company-info .readmore a {
    color: var(--sf-verde-700);
}

/* Pontinho decorativo do titulo do rodape: verde escuro some no fundo
   verde-900. Vira o vermelho da logo - acento minusculo, permitido. */
.single-footer-widget .title h3 span,
.working-hours-box .title h3 span {
    background: var(--sf-vermelho);
}

/* Tres icones da faixa de destaques: verde / verde escuro / vermelho */
.single-featured-box .inner .icon span.clr2:before {
    color: var(--sf-verde-700);
}
.single-featured-box .inner .icon span.clr3:before {
    color: var(--sf-vermelho);
}

/* Links do rodape: garante 4.5:1 sobre o verde-900 */
.single-footer-widget .widget-link1 li a,
.single-footer-widget .widget-link2 li a,
.footer-menu-style2 ul li a,
.widget-company-info p,
.footer-logo .copy-right p {
    color: var(--sf-verde-100);
}
.single-footer-widget .widget-link1 li a:hover,
.single-footer-widget .widget-link2 li a:hover,
.footer-menu-style2 ul li a:hover {
    color: var(--sf-branco);
}

/* Campos de formulario: borda de foco visivel alem do outline */
input[type="text"]:focus,
input[type="email"]:focus,
input[type="tel"]:focus,
input[type="password"]:focus,
select:focus,
textarea:focus {
    border-color: var(--sf-verde-500);
}

/*------------------------------------------------------------------
  8. Alvo de toque minimo 24x24  (WCAG 2.2 - 2.5.8 Target Size)
     Apenas os alvos so-icone que nao tinham dimensao no template.
     Os que ja sao >=40px (.team-social-link, .scroll-top, closer da
     hidden-bar) ficam como estao para nao mexer no layout.
------------------------------------------------------------------*/
.header-social-link ul li a,
.header-social-link.style2 ul li a,
.sidebar-social-link ul li a,
.mobile-menu .social-links li a,
.footer-social-info ul li a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 24px;
    min-height: 24px;
}

/*------------------------------------------------------------------
  9. Movimento reduzido
     Desliga wow.js / animate.css / AOS sem esconder conteudo.
------------------------------------------------------------------*/
@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }
    *,
    *::before,
    *::after {
        animation-duration: 0.001ms !important;
        animation-delay: 0ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.001ms !important;
        transition-delay: 0ms !important;
        scroll-behavior: auto !important;
    }
    .wow,
    .animated,
    [class*="fadeIn"],
    [class*="slideIn"],
    [class*="zoomIn"],
    [class*="bounceIn"] {
        animation: none !important;
        visibility: visible !important;
        opacity: 1 !important;
        transform: none !important;
    }
    [data-aos] {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
    .parallax-bg-one,
    [data-paroller-factor],
    [data-enllax-ratio] {
        transform: none !important;
        background-attachment: scroll !important;
    }
    /* o CTA continua mudando de cor no hover, mas nao se desloca */
    .btn-whatsapp:hover,
    .btn-whatsapp:focus,
    .btn-whatsapp:active {
        transform: none !important;
    }
}


/*==================================================================
  9. Componentes criados para a São Francisco
  ------------------------------------------------------------------
  Blocos que não existiam no template CarePress: seção do Clube
  POPVET (no lugar do blog), formulário de agendamento por WhatsApp,
  botão flutuante e ajustes de rodapé.
==================================================================*/

/*--- 9.1 Correções de acento herdadas do mapeamento -------------*/

/* Os 3 ícones da faixa de destaque devem ler como um conjunto.
   O terceiro herdava vermelho e puxava a atenção sozinho. */
.single-featured-box .inner .icon span.clr3:before {
    color: var(--sf-verde-500);
}

/* Horário: o dia útil é informação neutra, não alerta.
   O vermelho fica só no "Fechado", onde carrega sentido. */
.working-hours-box ul li .right {
    color: var(--sf-verde-700);
}
.working-hours-box ul li .right.holiday {
    color: var(--sf-vermelho);
    font-weight: 700;
}

/* Cargo na equipe: acento discreto, não alarme. */
.single-team-member .title-holder h5 {
    color: var(--sf-verde-500);
}

/* O slide 1 usa <h1> (um por página, para SEO) e precisa herdar
   exatamente o desenho dos <h2> dos outros slides. */
.main-slider .content h1 {
    font-family: var(--sf-font-titulo);
    font-size: 70px;
    line-height: 1.07;
    font-weight: 700;
    color: var(--sf-verde-900);
    margin: 0 0 34px;
    position: relative;
    text-transform: none;
}

/* Português não usa Title Case: reforço, caso alguma regra do
   template volte a aplicar capitalize em cascata. */
h1, h2, h3, h4, h5, h6,
.btn-one .txt,
.navigation > li > a {
    text-transform: none;
}

/*--- 9.2 Seção Clube POPVET -------------------------------------*/
.clube-area {
    position: relative;
    padding: 96px 0 104px;
    background: var(--sf-creme-200);
}
.clube-intro {
    font-size: 17px;
    line-height: 1.75;
    color: var(--sf-texto-2);
    margin: 0 auto 46px;
    max-width: 780px;
}
.clube-cards {
    margin-bottom: 44px;
}
.clube-card {
    height: 100%;
    background: var(--sf-branco);
    border: 1px solid var(--sf-verde-100);
    border-radius: 14px;
    padding: 34px 28px 30px;
    text-align: center;
    transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}
.clube-card:hover {
    transform: translateY(-6px);
    border-color: var(--sf-verde-500);
    box-shadow: 0 16px 34px rgba(15, 46, 28, .12);
}
.clube-card-icon {
    width: 68px;
    height: 68px;
    margin: 0 auto 20px;
    border-radius: 50%;
    background: var(--sf-verde-50);
    color: var(--sf-verde-500);
    font-size: 30px;
    line-height: 68px;
    text-align: center;
}
.clube-card h3 {
    font-family: var(--sf-font-titulo);
    font-size: 21px;
    font-weight: 700;
    color: var(--sf-verde-900);
    margin: 0 0 10px;
}
.clube-card p {
    font-size: 15.5px;
    line-height: 1.65;
    color: var(--sf-texto-2);
    margin: 0;
}
.clube-cta {
    margin-top: 6px;
}

/*--- 9.3 Formulário de agendamento ------------------------------*/

/* O template usava só placeholder como rótulo. Placeholder some ao
   digitar e não é lido de forma confiável por leitor de tela. */
.form-label-visivel {
    display: block;
    font-family: var(--sf-font-corpo);
    font-size: 13.5px;
    font-weight: 700;
    letter-spacing: .2px;
    color: var(--sf-verde-900);
    margin-bottom: 8px;
}
.contact-form .input-box {
    margin-bottom: 22px;
}
.form-erro {
    display: block;
    background: rgba(180, 12, 24, .08);
    border-left: 3px solid var(--sf-vermelho);
    border-radius: 6px;
    color: var(--sf-vermelho);
    font-size: 15px;
    font-weight: 500;
    padding: 12px 16px;
    margin: 0 0 18px;
}
.form-erro[hidden] {
    display: none;
}
.form-microcopy {
    max-width: 680px;
    margin: 20px auto 0;
    font-size: 14.5px;
    line-height: 1.6;
    color: var(--sf-texto-2);
}
#form-agendamento .btn-one .fa-whatsapp {
    margin-right: 8px;
}

/*--- 9.4 Botão flutuante de WhatsApp ----------------------------*/
.whatsapp-flutuante {
    position: fixed;
    right: 20px;
    bottom: 20px;
    z-index: 999;
    width: 60px;
    height: 60px;
    border-radius: 50%;
    background: var(--sf-verde-500);
    color: var(--sf-branco);
    font-size: 32px;
    line-height: 60px;
    text-align: center;
    box-shadow: 0 6px 20px rgba(15, 46, 28, .3);
    transition: background .25s ease, transform .25s ease;
}
.whatsapp-flutuante:hover,
.whatsapp-flutuante:focus {
    background: var(--sf-verde-700);
    color: var(--sf-branco);
    transform: scale(1.06);
}

/* O botão "voltar ao topo" do template ocupava este mesmo canto:
   sobe para não cobrir o CTA principal. */
.scroll-top {
    bottom: 92px !important;
}

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

/*--- 9.6 Nota do horário ----------------------------------------*/
.horario-nota {
    margin: 18px 0 0;
    font-size: 14px;
    line-height: 1.6;
    font-style: italic;
    /* a caixa de horário tem fundo claro: o verde-100 dava ~1.8:1 */
    color: var(--sf-texto-2);
}

/*--- 9.7 Responsivo dos blocos novos ----------------------------*/
@media only screen and (max-width: 991px) {
    .clube-area {
        padding: 70px 0 76px;
    }
    .clube-card {
        margin-bottom: 24px;
    }
    .main-slider .content h1 {
        font-size: 46px;
    }
}

@media only screen and (max-width: 767px) {
    .main-slider .content h1 {
        font-size: 34px;
        margin-bottom: 24px;
    }
    .clube-intro {
        font-size: 16px;
    }
    .whatsapp-flutuante {
        width: 54px;
        height: 54px;
        font-size: 28px;
        line-height: 54px;
        right: 16px;
        bottom: 16px;
    }
    .scroll-top {
        bottom: 82px !important;
    }
    .footer-legal {
        font-size: 12.5px;
    }
}

/*------------------------------------------------------------------
  10. Escala tipográfica ajustada à Fraunces
  ------------------------------------------------------------------
  O template foi desenhado para Poppins. A Fraunces tem caixa mais
  larga, então os mesmos 60px estouravam a coluna do "Sobre" e
  deixavam uma palavra órfã na linha. Reduzir a escala mantém o peso
  visual do desenho original sem quebrar o texto em português.
------------------------------------------------------------------*/
.sec-title h2 {
    font-size: 52px;
    line-height: 1.12;
    letter-spacing: -0.4px;
}

/* Coluna estreita: o "Sobre" divide espaço com a imagem */
.about-style1-content-box .sec-title h2 {
    font-size: 44px;
}

@media only screen and (max-width: 1199px) {
    .sec-title h2 { font-size: 44px; }
    .about-style1-content-box .sec-title h2 { font-size: 40px; }
}
@media only screen and (max-width: 767px) {
    .sec-title h2,
    .about-style1-content-box .sec-title h2 {
        font-size: 32px;
        letter-spacing: -0.2px;
    }
}


/*==================================================================
  11. Refino — 2ª rodada
  ------------------------------------------------------------------
  Ajustes pedidos depois de ver a página no ar:
    · raio de borda maior e consistente
    · cards da mesma altura dentro de cada linha
    · formulário refeito (o do template quebrava no campo de telefone)
    · modal de agendamento
    · CTA nas seções
    · rodapé reconstruído
==================================================================*/

:root {
    --r-xs:   8px;
    --r-sm:   12px;   /* ícones, chips */
    --r-md:   16px;   /* inputs, selects */
    --r-lg:   22px;   /* cards */
    --r-xl:   30px;   /* caixas grandes, modal */
    --r-full: 999px;  /* pílulas */

    --sombra-sm: 0 4px 14px rgba(15, 46, 28, .06);
    --sombra-md: 0 10px 30px rgba(15, 46, 28, .10);
    --sombra-lg: 0 24px 60px rgba(15, 46, 28, .18);
}

/*------------------------------------------------------------------
  11.1 Raio consistente
------------------------------------------------------------------*/
/* o raio do cartão de destaque fica na caixa externa (.single-featured-box,
   mais abaixo); o .inner é só layout e não pinta nada */
.single-service-style1,
.single-service-style1 .img-holder,
.single-service-style1 .img-holder .inner,
.working-hours-box,
.clube-card,
.fact-counter-box,
.about-style1-image-box .about-experience-box,
.sf-form-caixa {
    border-radius: var(--r-lg);
}

.single-service-style1 .img-holder,
.single-service-style1 .img-holder .inner,
.single-service-style1 .img-holder img {
    border-radius: var(--r-lg) var(--r-lg) 0 0;
    overflow: hidden;
}

.btn-one,
.sf-enviar,
.sf-cta-botao,
.single-service-style1 .text-holder .button a {
    border-radius: var(--r-full);
}

.single-featured-box .inner .icon,
.clube-card-icon,
.sf-icone,
.scroll-top {
    border-radius: var(--r-sm);
}

.scroll-top { border-radius: var(--r-md); }

/*------------------------------------------------------------------
  11.2 Cards da mesma altura
  ------------------------------------------------------------------
  O Bootstrap 4 já usa flex na .row: basta esticar a coluna e mandar
  o card ocupar 100% da altura. Sem isso, quem tem uma linha a mais
  de texto fica mais alto que os vizinhos.
------------------------------------------------------------------*/
.featured-area .row,
.service-style1-area .row,
.clube-cards,
.team-area .row {
    align-items: stretch;
}

.featured-area .row > [class*="col-"],
.service-style1-area .row > [class*="col-"],
.clube-cards > [class*="col-"],
.team-area .row > [class*="col-"] {
    display: flex;
    flex-direction: column;
    margin-bottom: 26px;
}

.single-featured-box,
.single-featured-box .inner,
.single-service-style1,
.clube-card,
.single-team-member {
    height: 100%;
    display: flex;
    flex-direction: column;
    width: 100%;
}

/* o texto empurra o botão para a base, alinhando os CTAs entre cards */
.single-service-style1 .text-holder,
.single-featured-box .inner .text {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
}
.single-service-style1 .text-holder .button {
    margin-top: auto;
    padding-top: 14px;
}

/* a imagem do card de serviço não pode esticar junto */
.single-service-style1 .img-holder {
    flex: 0 0 auto;
}
.single-service-style1 .img-holder img {
    width: 100%;
    height: 210px;
    object-fit: cover;
    display: block;
}

/*
   Cartão de destaque.

   O template desenhava a caixa branca em .single-featured-box (sem raio) e
   usava .inner com `padding-left: 60px` só para abrir espaço ao ícone, que é
   `position: absolute; left: 0`. Ao estilizar o .inner como se fosse o cartão,
   o padding-left foi sobrescrito e o título encostou no ícone — além de criar
   uma segunda borda arredondada dentro da caixa quadrada.

   Aqui o cartão é a caixa externa e o miolo vira flex: o espaço entre ícone e
   texto passa a ser um `gap` explícito, em vez de padding calculado na mão.
*/
.single-featured-box {
    background: var(--sf-branco);
    border: 1px solid var(--sf-verde-100);
    border-radius: var(--r-lg);
    box-shadow: var(--sombra-sm);
    padding: 30px 30px 28px;
    transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}
.single-featured-box:hover {
    transform: translateY(-5px);
    border-color: var(--sf-verde-500);
    box-shadow: var(--sombra-md);
}

/* Ícone em cima, texto embaixo — e não lado a lado. Em três colunas o
   ícone de 54px roubava largura demais e o título quebrava em duas linhas
   ("Clínica / veterinária"). Empilhado, cada título cabe em uma linha só. */
.single-featured-box .inner {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 18px;
    padding: 0;
    border: 0;
    box-shadow: none;
    background: none;
}

/* sai do posicionamento absoluto: agora é um item do flex */
.single-featured-box .inner .icon {
    position: static;
    flex: 0 0 auto;
    width: 54px;
    height: 54px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--sf-verde-50);
    border-radius: var(--r-sm);
}
.single-featured-box .inner .icon span:before {
    font-size: 34px;
    line-height: 1;
}

.single-featured-box .inner .text {
    padding-left: 0;
    padding-top: 2px;
}
.single-featured-box .inner .text h3 {
    font-size: 21px;
    line-height: 1.25;
    margin: 0 0 7px;
    color: var(--sf-verde-900);
}
.single-featured-box .inner .text p {
    margin: 0;
    color: var(--sf-texto-2);
}

/*------------------------------------------------------------------
  11.3 Formulário
  ------------------------------------------------------------------
  Markup e estilo próprios. O template só previa input[type="text"],
  então o campo de telefone (type="tel") ficava sem estilo nenhum e
  os ícones escapavam da caixa.
------------------------------------------------------------------*/
.sf-form-caixa {
    background: var(--sf-branco);
    border: 1px solid var(--sf-verde-100);
    box-shadow: var(--sombra-md);
    padding: 40px 42px 34px;
}

.sf-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
}
.sf-largo { grid-column: 1 / -1; }

.sf-campo { display: flex; flex-direction: column; }

.sf-campo > label {
    font-family: var(--sf-font-corpo);
    font-size: 13.5px;
    font-weight: 700;
    letter-spacing: .2px;
    color: var(--sf-verde-900);
    margin-bottom: 8px;
}
.sf-opcional {
    font-weight: 400;
    font-size: 12px;
    color: var(--sf-texto-2);
    background: var(--sf-verde-50);
    border-radius: var(--r-full);
    padding: 2px 9px;
    margin-left: 6px;
}

.sf-controle {
    position: relative;
    display: flex;
    align-items: center;
    background: var(--sf-creme);
    border: 1.5px solid var(--sf-verde-100);
    border-radius: var(--r-md);
    transition: border-color .18s ease, box-shadow .18s ease, background .18s ease;
}
.sf-controle:focus-within {
    background: var(--sf-branco);
    border-color: var(--sf-verde-500);
    box-shadow: 0 0 0 4px rgba(24, 120, 72, .13);
}
.sf-controle.tem-erro {
    border-color: var(--sf-vermelho);
    background: rgba(180, 12, 24, .04);
}

.sf-icone {
    flex: 0 0 auto;
    width: 40px;
    text-align: center;
    font-size: 16px;
    color: var(--sf-verde-500);
    pointer-events: none;
}

/* Em coluna estreita (3 campos lado a lado no modal) o placeholder
   longo era cortado no meio da palavra. Reticências deixam claro que
   o texto continua, em vez de parecer defeito. */
.sf-controle input::placeholder,
.sf-controle select {
    text-overflow: ellipsis;
}

/* zera o que o template impõe a input/select/textarea */
.sf-controle input,
.sf-controle select,
.sf-controle textarea {
    flex: 1 1 auto;
    width: 100%;
    height: 54px;
    padding: 0 16px 0 0;
    border: 0;
    background: transparent;
    box-shadow: none;
    outline: none;
    font-family: var(--sf-font-corpo);
    font-size: 15.5px;
    color: var(--sf-texto);
    border-radius: var(--r-md);
}
.sf-controle input::placeholder,
.sf-controle textarea::placeholder {
    color: var(--sf-texto-2);
    opacity: 1;
}

/* select nativo: no celular abre o seletor do próprio sistema */
.sf-controle select {
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    cursor: pointer;
    padding-right: 44px;
}
.sf-seta {
    position: absolute;
    right: 18px;
    width: 9px;
    height: 9px;
    border-right: 2px solid var(--sf-verde-500);
    border-bottom: 2px solid var(--sf-verde-500);
    transform: rotate(45deg) translateY(-3px);
    pointer-events: none;
}

.sf-controle-area { align-items: stretch; padding: 0; }
.sf-controle textarea {
    height: auto;
    min-height: 108px;
    padding: 15px 18px;
    resize: vertical;
    line-height: 1.6;
}

.sf-erro {
    background: rgba(180, 12, 24, .08);
    border-left: 3px solid var(--sf-vermelho);
    border-radius: 0 var(--r-xs) var(--r-xs) 0;
    color: var(--sf-vermelho);
    font-size: 15px;
    font-weight: 500;
    padding: 12px 16px;
    margin: 22px 0 0;
}
.sf-erro[hidden] { display: none; }

.sf-enviar {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    margin: 26px auto 0;
    padding: 0 40px;
    height: 58px;
    min-width: 260px;
    border: 0;
    cursor: pointer;
    background: var(--sf-verde-500);
    color: var(--sf-branco);
    font-family: var(--sf-font-titulo);
    font-size: 17px;
    font-weight: 700;
    box-shadow: var(--sombra-sm);
    transition: background .2s ease, transform .2s ease, box-shadow .2s ease;
}
.sf-enviar .fa { font-size: 21px; }
.sf-enviar:hover,
.sf-enviar:focus {
    background: var(--sf-verde-700);
    transform: translateY(-2px);
    box-shadow: var(--sombra-md);
}

.sf-microcopy {
    max-width: 620px;
    margin: 18px auto 0;
    text-align: center;
    font-size: 14.5px;
    line-height: 1.6;
    color: var(--sf-texto-2);
}

/*------------------------------------------------------------------
  11.4 CTA de seção
------------------------------------------------------------------*/
.sf-cta-faixa {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 22px;
    margin-top: 46px;
    padding: 30px 38px;
    background: var(--sf-verde-900);
    border-radius: var(--r-xl);
    box-shadow: var(--sombra-md);
}
.sf-cta-texto h3 {
    font-family: var(--sf-font-titulo);
    font-size: 25px;
    font-weight: 700;
    color: var(--sf-branco);
    margin: 0 0 4px;
}
.sf-cta-texto p {
    margin: 0;
    font-size: 15.5px;
    color: var(--sf-verde-100);
}

.sf-cta-botao {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    flex: 0 0 auto;
    height: 56px;
    padding: 0 32px;
    background: var(--sf-verde-500);
    color: var(--sf-branco);
    font-family: var(--sf-font-titulo);
    font-size: 16.5px;
    font-weight: 700;
    box-shadow: var(--sombra-sm);
    transition: background .2s ease, transform .2s ease;
}
.sf-cta-botao .fa { font-size: 21px; }
.sf-cta-botao:hover,
.sf-cta-botao:focus {
    background: var(--sf-branco);
    color: var(--sf-verde-700);
    transform: translateY(-2px);
}
.sf-cta-botao-claro {
    background: var(--sf-branco);
    color: var(--sf-verde-700);
}
.sf-cta-botao-claro:hover,
.sf-cta-botao-claro:focus {
    background: var(--sf-verde-500);
    color: var(--sf-branco);
}

/*------------------------------------------------------------------
  11.5 Modal de agendamento
------------------------------------------------------------------*/
.sf-modal {
    position: fixed;
    inset: 0;
    /* O template usa z-index de até 999999999 no header e no menu fixo.
       Com 9999 o cabeçalho ficava POR CIMA do overlay: dava para clicar no
       menu através do fundo escurecido e o clique no backdrop não fechava. */
    z-index: 2147483000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 28px 18px;
    overflow-y: auto;
}
.sf-modal[hidden] { display: none; }

.sf-modal-fundo {
    position: fixed;
    inset: 0;
    background: rgba(15, 46, 28, .62);
    backdrop-filter: blur(3px);
    opacity: 0;
    transition: opacity .2s ease;
}
.sf-modal.aberto .sf-modal-fundo { opacity: 1; }

.sf-modal-caixa {
    position: relative;
    width: 100%;
    max-width: 720px;
    margin: auto;
    background: var(--sf-branco);
    border-radius: var(--r-xl);
    box-shadow: var(--sombra-lg);
    padding: 42px 44px 36px;
    opacity: 0;
    transform: translateY(14px) scale(.98);
    transition: opacity .22s ease, transform .22s ease;
}
.sf-modal.aberto .sf-modal-caixa {
    opacity: 1;
    transform: translateY(0) scale(1);
}

body.sf-modal-travado { overflow: hidden; }

.sf-modal-fechar {
    position: absolute;
    top: 16px;
    right: 18px;
    width: 42px;
    height: 42px;
    border: 0;
    border-radius: var(--r-full);
    background: var(--sf-verde-50);
    color: var(--sf-verde-700);
    font-size: 27px;
    line-height: 1;
    cursor: pointer;
    transition: background .18s ease, color .18s ease;
}
.sf-modal-fechar:hover,
.sf-modal-fechar:focus {
    background: var(--sf-verde-500);
    color: var(--sf-branco);
}

.sf-modal-topo { margin-bottom: 26px; padding-right: 46px; }
.sf-modal-kicker {
    display: block;
    font-family: var(--sf-font-corpo);
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--sf-verde-500);
    margin-bottom: 8px;
}
.sf-modal-topo h2 {
    font-family: var(--sf-font-titulo);
    font-size: 31px;
    line-height: 1.15;
    font-weight: 700;
    color: var(--sf-verde-900);
    margin: 0;
}

/* dentro do modal o formulário não tem caixa própria */
.sf-modal .sf-form-caixa {
    background: none;
    border: 0;
    box-shadow: none;
    padding: 0;
}

/*------------------------------------------------------------------
  11.6 Rodapé (tema claro)
  ------------------------------------------------------------------
  Passou de verde escuro para creme. Dois motivos:

  1. A logo do cliente não tem versão monocromática para fundo escuro
     (o "logo_white.png" da IDV é a arte colorida achatada sobre branco).
     No escuro ela precisava de um chip creme atrás, que ficava como um
     remendo. Em fundo claro a arte original funciona direto.
  2. A faixa de CTA verde ganha mais destaque sobre creme do que sobre
     verde escuro.

  IMPORTANTE: .sf-footer precisa de position/z-index. A seção de contato
  acima dele é `position: relative; z-index: 1`, e o fundo dela pintava
  por cima da faixa de CTA — que sobe 46px para fora do rodapé.
------------------------------------------------------------------*/
.sf-footer {
    position: relative;
    z-index: 2;
    background: var(--sf-creme-200);
    color: var(--sf-texto-2);
    margin-top: 0;
}

.sf-footer-cta {
    transform: translateY(-46px);
    margin-bottom: -20px;
}
.sf-footer-cta-caixa {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 22px;
    background: var(--sf-verde-700);
    border-radius: var(--r-xl);
    padding: 34px 42px;
    box-shadow: 0 18px 40px rgba(15, 46, 28, .22);
}
.sf-footer-cta-caixa h2 {
    font-family: var(--sf-font-titulo);
    font-size: 29px;
    font-weight: 700;
    color: var(--sf-branco);
    margin: 0 0 5px;
}
.sf-footer-cta-caixa p {
    margin: 0;
    font-size: 15.5px;
    color: rgba(255, 255, 255, .9);
}

.sf-footer-grid {
    display: grid;
    grid-template-columns: 1.6fr 1fr 1fr 1.4fr;
    gap: 44px;
    padding: 26px 0 56px;
}

/* sem chip: em fundo claro a logo colorida se resolve sozinha */
.sf-footer-logo {
    display: inline-block;
    line-height: 0;
    margin-bottom: 18px;
}
.sf-footer-logo img { display: block; }

.sf-footer-marca p {
    font-size: 15px;
    line-height: 1.7;
    color: var(--sf-texto-2);
    margin: 0 0 20px;
    max-width: 330px;
}

.sf-footer-social { display: flex; gap: 10px; }
.sf-footer-social a {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 46px;
    height: 46px;
    border-radius: var(--r-sm);
    background: var(--sf-branco);
    border: 1px solid var(--sf-verde-100);
    color: var(--sf-verde-700);
    font-size: 21px;
    transition: background .2s ease, color .2s ease, transform .2s ease, border-color .2s ease;
}
.sf-footer-social a:hover,
.sf-footer-social a:focus {
    background: var(--sf-verde-500);
    border-color: var(--sf-verde-500);
    color: var(--sf-branco);
    transform: translateY(-2px);
}

.sf-footer-col h3 {
    font-family: var(--sf-font-titulo);
    font-size: 19px;
    font-weight: 700;
    color: var(--sf-verde-900);
    margin: 6px 0 18px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--sf-verde-100);
}
.sf-footer-col ul {
    list-style: none;
    margin: 0;
    padding: 0;
}
.sf-footer-col li { margin-bottom: 11px; }
.sf-footer-col a {
    color: var(--sf-texto-2);
    font-size: 15px;
    transition: color .18s ease, padding-left .18s ease;
}
.sf-footer-col a:hover,
.sf-footer-col a:focus {
    color: var(--sf-verde-700);
    padding-left: 4px;
}

.sf-footer-contato li {
    display: flex;
    align-items: flex-start;
    gap: 11px;
    font-size: 15px;
    line-height: 1.55;
    color: var(--sf-texto-2);
}
.sf-footer-contato .fa {
    color: var(--sf-verde-500);
    width: 17px;
    margin-top: 4px;
    flex: 0 0 auto;
}

.sf-footer-legal {
    border-top: 1px solid var(--sf-verde-100);
    padding: 22px 0 26px;
}
.sf-footer-legal .container {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 10px 24px;
}
.sf-footer-legal p {
    margin: 0;
    font-size: 13px;
    line-height: 1.7;
    color: var(--sf-texto-2);
}
.sf-footer-assinatura { color: var(--sf-verde-700) !important; font-weight: 500; }

/* Responsaveis tecnicos: dado de conselho, nao chamada. Fica no mesmo
   cinza-verde do resto da linha legal (5.30:1 sobre o creme do rodape). */
.sf-footer-rt { display: inline-block; }

/* Os dois links daqui (politica de privacidade e assinatura da agencia)
   nasceram sem regra e caiam no azul padrao do navegador — a unica
   ocorrencia de azul no site inteiro. Verde-700 sobre o creme do rodape
   da 9:1, bem acima do minimo de contraste. */
.sf-footer-legal a {
    color: var(--sf-verde-700);
    text-decoration: none;
    transition: color .2s ease;
}
/* Sem sublinhado parado, com sublinhado no hover: a linha continua
   existindo como sinal de "isto e clicavel" na hora em que a pessoa
   aponta, sem riscar o rodape o tempo todo. */
.sf-footer-legal a:hover,
.sf-footer-legal a:focus-visible {
    color: var(--sf-verde-500);
    text-decoration: underline;
    text-underline-offset: 2px;
}

/*------------------------------------------------------------------
  11.7 Responsivo
------------------------------------------------------------------*/
@media only screen and (max-width: 991px) {
    .sf-footer-grid {
        grid-template-columns: 1fr 1fr;
        gap: 34px;
    }
    .sf-footer-marca { grid-column: 1 / -1; }

    /* Um responsavel tecnico por linha do tablet para baixo. Em linha
       corrida ela chegava ate a borda direita e passava por tras do
       botao flutuante de voltar ao topo, que e fixo: no fim da pagina
       o final do CRMV ficava encoberto — logo o dado obrigatorio. */
    .sf-footer-rt .sf-rt-item { display: block; }
    .sf-footer-rt .sf-rt-sep { display: none; }

    .sf-form-caixa { padding: 30px 26px 28px; }
    .sf-modal-caixa { padding: 36px 28px 30px; }
    .sf-modal-topo h2 { font-size: 26px; }
}

@media only screen and (max-width: 767px) {
    .sf-grid { grid-template-columns: 1fr; gap: 16px; }

    .sf-cta-faixa,
    .sf-footer-cta-caixa {
        flex-direction: column;
        align-items: flex-start;
        text-align: left;
        padding: 26px 24px;
    }
    .sf-cta-botao { width: 100%; justify-content: center; }
    .sf-cta-texto h3 { font-size: 21px; }
    .sf-footer-cta-caixa h2 { font-size: 23px; }

    .sf-footer-grid { grid-template-columns: 1fr; gap: 30px; }
    .sf-footer-legal .container { flex-direction: column; text-align: center; }

    .sf-enviar { width: 100%; min-width: 0; }
    .sf-form-caixa { padding: 24px 20px 22px; }

    .sf-modal { padding: 0; align-items: stretch; }
    .sf-modal-caixa {
        border-radius: var(--r-xl) var(--r-xl) 0 0;
        max-width: none;
        margin: auto 0 0;
        padding: 30px 20px 26px;
    }
    .sf-modal-topo h2 { font-size: 22px; }

    .single-service-style1 .img-holder img { height: 180px; }
}

/* quem pediu menos movimento não recebe a entrada do modal */
@media (prefers-reduced-motion: reduce) {
    .sf-modal-caixa,
    .sf-modal-fundo {
        transition: none;
    }
    .sf-enviar:hover,
    .sf-cta-botao:hover,
    .sf-footer-social a:hover {
        transform: none;
    }
}

/*------------------------------------------------------------------
  12. Correções de contraste sobre fundo verde escuro
  ------------------------------------------------------------------
  Medido com ferramentas/contraste.mjs. Estes textos usavam tons de
  verde pensados para fundo claro e ficavam entre 2.67:1 e 3.26:1
  sobre o verde-900 — abaixo do mínimo AA de 4.5:1 para texto normal.
------------------------------------------------------------------*/

/* (o rodapé passou a ser claro; as cores de texto dele agora saem
   direto do bloco 11.6 e não precisam mais destas correções) */

/*==================================================================
  13. Navbar em pílula flutuante
  ------------------------------------------------------------------
  Saíram: a barra de topo (e-mail/telefone/redes) e o botão dos nove
  pontinhos, que abria uma barra lateral com a mesma informação já
  presente no rodapé. A barra lateral foi removida junto.

  O header do template já é `position:absolute` sobre o hero — aqui
  ele deixa de ser uma faixa branca de ponta a ponta e vira um bloco
  arredondado flutuando, com respiro nas laterais.
==================================================================*/

.main-header .header {
    background: transparent;
    padding: 16px 0 0;
}

.main-header .header .outer-container {
    max-width: 1360px;
    padding: 0 22px;
}

/* a pílula */
.main-header .header .outer-box {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    background: var(--sf-branco);
    border: 1px solid rgba(24, 72, 36, .07);
    border-radius: var(--r-full);
    box-shadow: 0 12px 34px rgba(15, 46, 28, .13);
    /* enxuto: o lockup horizontal permitiu baixar a barra de ~104px para ~74px */
    padding: 9px 9px 9px 26px;
}

/* os filhos usavam float; no flex o float é ignorado */
.main-header .header .header-left,
.main-header .header .header-right {
    float: none;
    display: flex;
    align-items: center;
    gap: 8px;
}
.main-header .header .header-left { flex: 1 1 auto; min-width: 0; }
.main-header .header .header-right { flex: 0 0 auto; }

/* Lockup horizontal (brasão + texto lado a lado), montado a partir das
   partes da logo original. O empilhado obrigava a escolher entre barra
   alta ou marca ilegível; assim a marca fica maior e a barra mais baixa. */
.main-header .header .logo {
    flex: 0 0 auto;
    padding: 0;
    margin-right: 0;
}
.main-header .header .logo img {
    width: 215px;
    height: auto;
    display: block;
}

/* menu centralizado na pílula: logo à esquerda, CTA à direita */
.main-header .header .nav-outer {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    justify-content: center;
}
.main-header .header .main-menu .navigation {
    display: flex;
    align-items: center;
    justify-content: center;
}

/* menu */
.main-header .header .main-menu .navigation > li {
    margin: 0 3px;
    padding: 0;
}
.main-header .header .main-menu .navigation > li > a {
    padding: 10px 15px;
    border-radius: var(--r-full);
    font-size: 15.5px;
    font-weight: 500;
    line-height: 1.2;
    color: var(--sf-verde-900);
    transition: background .18s ease, color .18s ease;
}
.main-header .header .main-menu .navigation > li:hover > a,
.main-header .header .main-menu .navigation > li.current > a {
    background: var(--sf-verde-50);
    color: var(--sf-verde-700);
}

/* CTA dentro da pílula.
   O .button do template trazia padding: 25px 0 — herdado do layout com
   barra de topo. Eram 50px de altura só de respiro morto. */
.main-header .header .header-right .button {
    padding: 0;
    margin: 0;
}
.main-header .header .header-right .button .btn-one {
    height: 50px;
    display: inline-flex;
    align-items: center;
    padding: 0 30px;
    font-size: 15.5px;
}

/*--- sticky: mesma pílula, colada no topo ao rolar ---------------*/
.sticky-header {
    background: transparent !important;
    box-shadow: none !important;
    padding: 12px 0 0;
}
.sticky-header .container {
    max-width: 1360px;
    padding: 0 22px;
}
/* Filho direto de propósito: dentro do sticky a classe .clearfix também
   aparece no <nav class="main-menu clearfix"> e no .navbar-collapse.
   Com `.sticky-header .clearfix` os três viravam pílula, uma dentro da
   outra. */
.sticky-header > .container > .clearfix {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    background: var(--sf-branco);
    border: 1px solid rgba(24, 72, 36, .07);
    border-radius: var(--r-full);
    box-shadow: 0 12px 34px rgba(15, 46, 28, .16);
    padding: 8px 22px;
}
.sticky-header .logo,
.sticky-header .right-col { float: none; }
.sticky-header .logo img {
    width: 196px;
    height: auto;
    display: block;
}
.sticky-header .main-menu .navigation > li { margin: 0 3px; }
.sticky-header .main-menu .navigation > li > a {
    padding: 9px 14px;
    border-radius: var(--r-full);
    font-size: 15px;
    font-weight: 500;
    color: var(--sf-verde-900);
}
.sticky-header .main-menu .navigation > li:hover > a,
.sticky-header .main-menu .navigation > li.current > a {
    background: var(--sf-verde-50);
    color: var(--sf-verde-700);
}

/*--- responsivo --------------------------------------------------*/
@media only screen and (max-width: 1199px) {
    .main-header .header .outer-box { padding: 10px 12px 10px 22px; }
    .main-header .header .logo { margin-right: 12px; }
    .main-header .header .main-menu .navigation > li > a {
        padding: 10px 11px;
        font-size: 14.5px;
    }
    .main-header .header .header-right .button .btn-one {
        padding: 0 22px;
        font-size: 14.5px;
    }
}

@media only screen and (max-width: 991px) {
    .main-header .header .outer-box {
        padding: 10px 14px 10px 20px;
        border-radius: var(--r-xl);
    }
    /* o CTA de texto sai; o botão flutuante de WhatsApp cobre essa função */
    .main-header .header .header-right .button { display: none; }
    .main-header .header .logo img { width: 176px; }
    .main-header .header .logo { margin-right: 0; }

    /* sem menu horizontal, o hambúrguer vai para a direita
       (no desktop este contêiner centraliza o menu) */
    .main-header .header .nav-outer { justify-content: flex-end; }

    .main-header .header .mobile-nav-toggler {
        margin: 0;
        padding: 0;
    }
    .main-header .header .mobile-nav-toggler .inner {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 5px;
        width: 46px;
        height: 46px;
        border-radius: var(--r-sm);
        background: var(--sf-verde-500);
    }
    .main-header .header .mobile-nav-toggler .inner .icon-bar {
        display: block;
        width: 20px;
        height: 2px;
        margin: 0;
        border-radius: 2px;
        background: var(--sf-branco);
    }
}

@media only screen and (max-width: 767px) {
    .main-header .header { padding-top: 12px; }
    .main-header .header .outer-container { padding: 0 14px; }
    .main-header .header .outer-box { padding: 9px 12px 9px 16px; }
    .main-header .header .logo img { width: 152px; }
}

/* CTA do header fixo */
.sticky-header .right-col { flex: 1 1 auto; display: flex; justify-content: center; }
.sticky-header .sticky-cta { flex: 0 0 auto; }
.sticky-header .sticky-cta .btn-one {
    height: 46px;
    display: inline-flex;
    align-items: center;
    padding: 0 26px;
    font-size: 15px;
    border-radius: var(--r-full);
}
@media only screen and (max-width: 991px) {
    /* no mobile o header fixo do template nem aparece */
    .sticky-header .sticky-cta { display: none; }
}

/*==================================================================
  14. Hover dos botões
  ------------------------------------------------------------------
  O .btn-one do template pinta o hover com um ::after que cobre o
  botão inteiro — e esse ::after tem `border-radius: 10px` fixo.
  Com o botão em pílula, o hover aparecia com cantos quadrados e mais
  escuro, como se fosse outro botão. `inherit` amarra o pseudo-elemento
  ao raio real de cada botão, seja pílula ou cartão.
==================================================================*/
.btn-one::after,
.btn-one::before {
    border-radius: inherit;
}

/* transição igual em todos os botões da página */
.btn-one,
.sf-enviar,
.sf-cta-botao,
.whatsapp-flutuante,
.single-service-style1 .text-holder .button a {
    transition: background-color .22s ease, color .22s ease,
                transform .22s ease, box-shadow .22s ease;
}

/*==================================================================
  15. Dropdown do select
  ------------------------------------------------------------------
  O <select> nativo abre um menu desenhado pelo sistema operacional,
  que não aceita CSS da página — no Windows saía azul, destoando do
  formulário inteiro. assets/js/select.js monta esta alternativa e só
  então esconde o nativo; sem JS, o <select> original segue no lugar.
==================================================================*/
.sf-select {
    position: relative;
    flex: 1 1 auto;
    min-width: 0;
}

/* o nativo continua no DOM como fonte da verdade, fora da tela */
select.sf-select-nativo {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
}

.sf-select-botao {
    display: flex;
    align-items: center;
    width: 100%;
    height: 54px;
    padding: 0 42px 0 0;
    border: 0;
    background: transparent;
    font-family: var(--sf-font-corpo);
    font-size: 15.5px;
    color: var(--sf-texto);
    text-align: left;
    cursor: pointer;
}
/* enquanto nada foi escolhido, o texto é instrução, não valor */
.sf-select:not(.tem-valor) .sf-select-texto { color: var(--sf-texto-2); }

/* a seta já existe no markup; gira ao abrir */
.sf-select.aberto ~ .sf-seta,
.sf-controle .sf-select.aberto + .sf-seta {
    transform: rotate(-135deg) translateY(-3px);
}
.sf-seta { transition: transform .2s ease; }

.sf-select-lista {
    position: absolute;
    top: calc(100% + 10px);
    left: -46px;
    right: -14px;
    z-index: 40;
    max-height: 288px;
    overflow-y: auto;
    margin: 0;
    padding: 6px;
    list-style: none;
    background: var(--sf-branco);
    border: 1px solid var(--sf-verde-100);
    border-radius: var(--r-md);
    box-shadow: 0 16px 40px rgba(15, 46, 28, .18);
}
.sf-select-lista[hidden] { display: none; }

.sf-select-item {
    padding: 11px 14px;
    border-radius: var(--r-sm);
    font-size: 15.5px;
    line-height: 1.35;
    color: var(--sf-texto);
    cursor: pointer;
}
.sf-select-item.ativo { background: var(--sf-verde-50); }
.sf-select-item.selecionado {
    background: var(--sf-verde-500);
    color: var(--sf-branco);
    font-weight: 500;
}
/* a primeira opção é o texto de instrução */
.sf-select-item.sf-select-vazio { color: var(--sf-texto-2); }
.sf-select-item.sf-select-vazio.selecionado {
    background: var(--sf-verde-50);
    color: var(--sf-texto-2);
    font-weight: 400;
}

/* rolagem discreta dentro da lista */
.sf-select-lista::-webkit-scrollbar { width: 10px; }
.sf-select-lista::-webkit-scrollbar-thumb {
    background: var(--sf-verde-100);
    border: 3px solid var(--sf-branco);
    border-radius: var(--r-full);
}

/* dentro do modal a lista precisa vencer a caixa */
.sf-modal .sf-select-lista { z-index: 60; }

/*==================================================================
  16. Mapa
  ------------------------------------------------------------------
  O embed do Google Maps só entra depois do clique (assets/js/mapa.js).
  Até lá o que existe aqui é um cartão de espera em HTML puro — sem
  request, sem cookie de terceiro e sem 1 MB de script no carregamento.
==================================================================*/
.sf-mapa-area {
    padding: 90px 0 96px;
    background: var(--sf-creme);
}

.sf-mapa-grid {
    display: grid;
    grid-template-columns: 1.45fr 1fr;
    gap: 30px;
    align-items: stretch;
}

/* --- caixa do mapa --- */
.sf-mapa-caixa {
    position: relative;
    min-height: 420px;
    border-radius: var(--r-lg);
    overflow: hidden;
    background: var(--sf-verde-50);
    border: 1px solid var(--sf-verde-100);
}

.sf-mapa-espera {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 14px;
    padding: 30px 26px;
    text-align: center;
    /* trama leve de fundo, para não ser um retângulo chapado */
    background-image:
        linear-gradient(rgba(24, 120, 72, .05) 1px, transparent 1px),
        linear-gradient(90deg, rgba(24, 120, 72, .05) 1px, transparent 1px);
    background-size: 34px 34px;
}
.sf-mapa-caixa.carregado .sf-mapa-espera { display: none; }

.sf-mapa-pino {
    width: 62px;
    height: 62px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--r-full);
    background: var(--sf-branco);
    border: 1px solid var(--sf-verde-100);
    color: var(--sf-verde-500);
    font-size: 27px;
    box-shadow: var(--sombra-sm);
}
.sf-mapa-chamada {
    margin: 0;
    font-family: var(--sf-font-titulo);
    font-size: 21px;
    font-weight: 700;
    color: var(--sf-verde-900);
}
.sf-mapa-botao {
    height: 50px;
    padding: 0 30px;
    border: 0;
    border-radius: var(--r-full);
    background: var(--sf-verde-500);
    color: var(--sf-branco);
    font-family: var(--sf-font-titulo);
    font-size: 16px;
    font-weight: 700;
    cursor: pointer;
    box-shadow: var(--sombra-sm);
    transition: background .2s ease, transform .2s ease;
}
.sf-mapa-botao:hover,
.sf-mapa-botao:focus {
    background: var(--sf-verde-700);
    transform: translateY(-2px);
}
.sf-mapa-aviso {
    margin: 0;
    max-width: 330px;
    font-size: 13px;
    line-height: 1.55;
    color: var(--sf-texto-2);
}

.sf-mapa-caixa.carregando::after {
    content: "Carregando o mapa…";
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--sf-verde-50);
    color: var(--sf-texto-2);
    font-size: 15px;
}

.sf-mapa-iframe {
    display: block;
    width: 100%;
    height: 100%;
    min-height: 420px;
    border: 0;
}

/* --- cartão de informações --- */
.sf-mapa-info {
    background: var(--sf-branco);
    border: 1px solid var(--sf-verde-100);
    border-radius: var(--r-lg);
    box-shadow: var(--sombra-sm);
    padding: 34px 32px;
    display: flex;
    flex-direction: column;
}
.sf-mapa-info h3 {
    font-family: var(--sf-font-titulo);
    font-size: 23px;
    font-weight: 700;
    color: var(--sf-verde-900);
    margin: 0 0 22px;
    line-height: 1.25;
}

.sf-mapa-dados {
    list-style: none;
    margin: 0 0 26px;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 18px;
}
.sf-mapa-dados li {
    display: flex;
    gap: 14px;
    align-items: flex-start;
    font-size: 15.5px;
    line-height: 1.6;
    color: var(--sf-texto-2);
}
.sf-mapa-dados .fa {
    flex: 0 0 auto;
    width: 34px;
    height: 34px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--r-sm);
    background: var(--sf-verde-50);
    color: var(--sf-verde-500);
    font-size: 15px;
}
.sf-mapa-dados strong { color: var(--sf-verde-900); }
.sf-mapa-dados a { color: var(--sf-texto-2); }
.sf-mapa-dados a:hover { color: var(--sf-verde-700); }
.sf-mapa-fechado { color: var(--sf-vermelho); font-size: 14px; }

.sf-mapa-acoes {
    margin-top: auto;
    display: flex;
    flex-direction: column;
    gap: 12px;
    align-items: stretch;
}
.sf-mapa-acoes .sf-cta-botao { justify-content: center; }
.sf-mapa-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 9px;
    height: 50px;
    border-radius: var(--r-full);
    border: 1px solid var(--sf-verde-100);
    background: var(--sf-branco);
    color: var(--sf-verde-700);
    font-family: var(--sf-font-corpo);
    font-size: 15.5px;
    font-weight: 500;
    transition: background .2s ease, border-color .2s ease;
}
.sf-mapa-link .fa { font-size: 19px; }
.sf-mapa-link:hover,
.sf-mapa-link:focus {
    background: var(--sf-verde-50);
    border-color: var(--sf-verde-500);
    color: var(--sf-verde-700);
}

@media only screen and (max-width: 991px) {
    .sf-mapa-grid { grid-template-columns: 1fr; }
    .sf-mapa-caixa,
    .sf-mapa-iframe { min-height: 330px; }
}
@media only screen and (max-width: 767px) {
    .sf-mapa-area { padding: 64px 0 70px; }
    .sf-mapa-info { padding: 26px 22px; }
    .sf-mapa-caixa,
    .sf-mapa-iframe { min-height: 280px; }
}

/*==================================================================
  17. Hero: headline preta e véu escuro na foto
  ------------------------------------------------------------------
  O template clareava a foto com um véu BRANCO de 20%. Trocado por um
  preto suave: unifica fotos de exposição diferente e assenta melhor a
  tipografia. Como o texto do hero é escuro, o véu fica de propósito
  discreto — escurecer demais derrubaria o contraste em vez de ajudar.
==================================================================*/
.main-slider .slide .image-layer:before {
    background-color: rgba(0, 0, 0, .18);
}

/*
   Scrim claro sob a coluna de texto.

   Medido em ferramentas/contraste-hero.mjs: só com o véu preto, os trechos
   de headline que cruzam as partes escuras da foto (o pelo do cachorro no
   slide 1) caíam para 1,0:1 — texto preto sobre fundo quase preto, ou seja,
   invisível. O contraste médio parecia bom (7:1) e escondia o problema.

   Este gradiente clareia só a faixa da esquerda, onde o texto vive, e some
   antes do meio da imagem — a foto continua à mostra e o véu escuro segue
   fazendo o trabalho dele no restante.
*/
.main-slider .slide .image-layer:after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(
        100deg,
        rgba(251, 247, 239, .97) 0%,
        rgba(251, 247, 239, .93) 30%,
        rgba(251, 247, 239, .72) 48%,
        rgba(251, 247, 239, 0) 70%
    );
}

/* o conteúdo fica acima dos dois véus */
.main-slider .slide .auto-container { position: relative; z-index: 2; }

/* headline em preto; o ponto final e o kicker seguem verdes,
   dando o único respiro de cor da dobra */
.main-slider .content h1,
.main-slider .content h2 {
    color: #111111;
}

@media only screen and (max-width: 767px) {
    /* No celular o texto ocupa a largura toda, entao o scrim deixa de ser
       lateral e vira vertical: opaco na faixa do texto (0-55%) e caindo
       rapido depois, para o pet aparecer na faixa de baixo.

       A versao anterior terminava em .55 e lavava a foto inteira — com a
       arte vertical nova, isso apagava justamente o animal. */
    .main-slider .slide .image-layer:after {
        background: linear-gradient(
            176deg,
            rgba(251, 247, 239, .95) 0%,
            rgba(251, 247, 239, .90) 45%,
            rgba(251, 247, 239, .58) 62%,
            rgba(251, 247, 239, .16) 84%,
            rgba(251, 247, 239, .06) 100%
        );
    }

    /* Padding simetrico: o bloco de texto fica no centro vertical do
       slide, nao no terco de cima.

       A versao anterior (112 em cima, 300 embaixo) empurrava o texto
       para o topo para deixar o animal livre embaixo. Funcionava, mas
       o hero ficava com o conteudo todo amontoado numa ponta e um
       vazio grande na outra. Com o padding igual o texto passa por
       cima da foto — e tudo bem: o scrim do bloco 17 segura o
       contraste (medido em 16:1 no celular, o minimo e 3:1). */
    .main-slider .slide {
        padding: 200px 0px 200px;
    }
}


/*==================================================================
  17.1. Fotos do hero: uma arte para cada formato
  ------------------------------------------------------------------
  As URLs vivem aqui, e não no style inline do HTML, por um motivo:
  inline serve o mesmo arquivo para todo mundo. A foto widescreen
  (1920x800) num celular entra em `cover` e perde as laterais — some
  justamente o animal, que fica no terco direito.

  Por isso existe um par por slide:
    slide-v1-N.jpg         1920x800   animal entre 58% e 95% da largura
    slide-v1-N-mobile.jpg  1080x1620  animal na metade de baixo

  O recorte de cada arte foi feito para o scrim do bloco 17: no desktop
  ele cobre a esquerda ate 70%, no celular cobre o topo. Trocar uma foto
  sem respeitar isso devolve o problema de contraste que o bloco 17
  resolveu.
==================================================================*/
/*------------------------------------------------------------------
  17.2. Notebook (992-1699px): o texto tem que caber ANTES do animal
  ------------------------------------------------------------------
  Medido em 1366px, que e a largura de tela mais comum em notebook:
  a headline ia ate 75% da largura e a foto poe o animal a partir de
  61% — o texto passava por cima do bicho.

  Duas causas, as duas so nesta faixa:

  1. O hero usa .auto-container (1200px + 120px de padding), enquanto
     o resto da pagina usa o .container do bootstrap (1140px). Em 1366
     isso jogava o texto 90px mais para dentro que os cards logo abaixo
     — desalinhado com a pagina E comendo o espaco da foto.

  2. A headline de 70px so cabe em 1 linha ate ~1700px de tela.

  Acima de 1700px nada disso acontece: a foto tem largura de sobra e a
  headline volta ao tamanho cheio.
------------------------------------------------------------------*/
@media only screen and (min-width: 992px) and (max-width: 1699px) {
    .main-slider .auto-container {
        max-width: 1140px;
        padding: 0px 15px;
    }
    .main-slider .content h1,
    .main-slider .content h2 {
        font-size: 58px;
    }
}


.main-slider .slide-1 .image-layer { background-image: url(../images/slides/slide-v1-1.jpg); }
.main-slider .slide-2 .image-layer { background-image: url(../images/slides/slide-v1-2.jpg); }
.main-slider .slide-3 .image-layer { background-image: url(../images/slides/slide-v1-3.jpg); }

@media only screen and (max-width: 767px) {
    .main-slider .slide-1 .image-layer { background-image: url(../images/slides/slide-v1-1-mobile.jpg); }
    .main-slider .slide-2 .image-layer { background-image: url(../images/slides/slide-v1-2-mobile.jpg); }
    .main-slider .slide-3 .image-layer { background-image: url(../images/slides/slide-v1-3-mobile.jpg); }
}

/*==================================================================
  17.3. Linha de apoio do hero
  ------------------------------------------------------------------
  A frase do slide 1 veio inteira do cliente: "Aqui e clinica
  veterinaria e banho e tosa: tudo pronto para cuidar de quem voce
  mais ama". Nos 70px da headline ela ocupa 4 linhas e empurra os
  botoes para fora da dobra em notebook — entao a segunda metade virou
  linha de apoio, com o corpo do site.

  A animacao repete a dos outros elementos do slide (opacidade +
  subida quando o slide fica .active). Sem ela o paragrafo seria o
  unico elemento ja visivel enquanto kicker, titulo e botoes deslizam.

  O max-width em ch, e nao em px, mantem a medida de leitura quando o
  bloco 17.2 encolhe a headline em notebook.
==================================================================*/
.main-slider .content .sf-hero-apoio {
    max-width: 46ch;
    /* o h1 ja reserva 34px embaixo; aqui a margem negativa devolve o
       vao de titulo->apoio para 16px, sem mexer no h1 dos outros slides */
    margin: -18px 0 32px;
    color: var(--sf-texto);
    font-family: var(--sf-font-corpo);
    font-size: 20px;
    line-height: 1.55;
    opacity: 0;
    transform: translateY(80px);
    transition: all .4s ease-in-out .1s;
}
.main-slider .active .content .sf-hero-apoio {
    opacity: 1;
    transform: translateY(0px);
    /* entra depois da headline (.5s) e antes dos botoes */
    transition: all .7s ease-in-out .6s;
}

@media only screen and (max-width: 991px) {
    .main-slider .content .sf-hero-apoio {
        font-size: 18px;
        margin: -14px 0 28px;
    }
}

@media only screen and (max-width: 767px) {
    .main-slider .content .sf-hero-apoio {
        max-width: none;
        font-size: 17px;
        margin: -10px 0 26px;
    }
}


/*==================================================================
  18. Agendamento online - REMOVIDO
  ------------------------------------------------------------------
  A agenda online (calendario + grade de horarios + integracao com o
  Google Agenda pelo n8n) foi descartada a pedido do cliente em
  agosto de 2026: o site ficou so com o formulario, que abre o
  WhatsApp preenchido. O numero 18 fica vago de proposito para nao
  renumerar as secoes seguintes, que sao citadas nos docs.
  O codigo saiu daqui, de index.html, de tracking.js e do
  agendamento.js; esta guardado em descartado/agenda/.
==================================================================*/

/*==================================================================
  19. Celular: uma regra de alinhamento para a pagina inteira
  ------------------------------------------------------------------
  O template nao tinha criterio: metade das secoes vinha com
  .sec-title text-center no HTML (Servicos, Equipe, Clube,
  Contato, Mapa) e a outra metade sem (Sobre, Por que), entao no
  celular a pagina alternava entre centralizado e alinhado a esquerda
  conforme a pessoa rolava.

  Criterio adotado, valendo so ate 767px:

    - cabecalho de secao (kicker + titulo) SEMPRE centralizado;
    - texto corrido, listas e cartoes SEMPRE a esquerda.

  O motivo de nao centralizar o texto junto: em coluna estreita cada
  linha passaria a comecar num ponto diferente, e o olho perde o
  inicio da linha seguinte. Titulo centralizado tem 2 ou 3 linhas e
  nao sofre disso; paragrafo de 6 linhas sofre.
==================================================================*/
@media only screen and (max-width: 767px) {

    /*--- 19.1 Cabecalho de secao: centralizado em todas ---------*/
    .sec-title {
        text-align: center;
    }
    /* o <br> do HTML foi escrito para a largura do desktop e quebrava
       o titulo em lugar errado no celular */
    .sec-title h2 br,
    .sf-footer-cta-caixa h2 br {
        display: none;
    }

    /* O ponto decorativo depois do titulo e inline: quando a ultima
       linha enche, ele desce sozinho e vira um ponto solto no meio da
       tela. Acontecia em "Conta pra gente o que seu pet esta
       precisando" a 390px — some numa largura, volta em outra, porque
       depende de onde o texto quebra. No celular ele sai de cena; o
       ponto do hero (.round) continua, la a linha e curta e cabe. */
    .sec-title h2 .round-box {
        display: none;
    }

    /*--- 19.2 Conteudo: alinhado a esquerda ---------------------*/
    .about-style1-content-box .text,
    .feautres-content-box .inner-content,
    .single-featured-box .inner .text,
    .single-service-style1 .text-holder {
        text-align: left;
    }

    /* Paragrafos de introducao que o template deixava centralizados
       junto com o titulo. De 3 a 7 linhas em coluna estreita: e onde
       o centralizado mais atrapalha a leitura.

       O !important e obrigatorio aqui: .text-center do bootstrap ja
       vem com !important, entao seletor mais especifico nao resolve. */
    .clube-intro.text-center,
    .sf-microcopy,
    .sf-footer-legal p {
        text-align: left !important;
    }
    /* a assinatura fecha a pagina no centro, como carimbo */
    .sf-footer-legal .sf-footer-assinatura {
        text-align: center !important;
        margin-top: 14px;
    }

    /*--- 19.1b Header: o hamburguer encosta na borda da pilula ---
      A .outer-box e flex com space-between e tem dois filhos:
      .header-left (logo + menu + hamburguer) e .header-right (o CTA
      "Agendar no WhatsApp"). No celular o CTA esta display:none, mas
      o .header-right continua no fluxo com largura 0 — e o
      space-between reserva o lugar dele na direita.

      Resultado medido em 390px: o hamburguer terminava em 315px e a
      pilula ia ate 376px. Sessenta e um pixels de vazio a direita de
      um botao que deveria estar encostado na margem.
    -------------------------------------------------------------*/
    .main-header .outer-box .header-right {
        display: none;
    }
    .main-header .outer-box .header-left {
        flex: 1 1 auto;
        justify-content: space-between;
        align-items: center;
    }
    /* O ::after do .clearfix vira ITEM FLEX aqui dentro. Ele nao tem
       largura, mas entra na conta do space-between e ganha uma fatia
       do espaco no fim da linha — o que empurrava o hamburguer 29px
       para dentro, mesmo depois de esconder o .header-right. */
    .main-header .outer-box::after,
    .main-header .header-left::after,
    .main-header .nav-outer::after {
        display: none;
    }

    /*--- 19.2b Hero: mesmo criterio do resto da pagina ----------
      O hero era a unica secao que continuava a esquerda depois que
      os cabecalhos foram centralizados — e e o maior titulo da
      pagina, entao a diferenca saltava logo na primeira tela.

      Os botoes tinham larguras diferentes (257px e 231px) porque
      cada um se ajustava ao proprio texto. Empilhados e alinhados a
      esquerda, formavam uma escada. Em coluna estreita o certo e os
      dois ocuparem a largura toda: viram dois blocos iguais, com a
      area de toque maxima.
    -------------------------------------------------------------*/
    .main-slider .content {
        text-align: center;
    }

    /* Respiro entre as partes do hero. Medido antes: o kicker ficava a
       0px do titulo, o titulo tinha line-height 1.07 (as 3 linhas
       grudadas), 24px ate os botoes e 12px entre eles — tudo espremido
       num bloco so. O que se ganha aqui saiu do padding de cima do
       slide (128px -> 112px, la no bloco 17), que era o maior espaco
       vazio da dobra: 50px parados entre o header e o kicker. */
    .main-slider .content h5 {
        margin-bottom: 12px;
    }
    .main-slider .content h1,
    .main-slider .content h2 {
        line-height: 1.18;
        margin-bottom: 34px;
    }
    .main-slider .content .btns-box {
        display: flex;
        flex-direction: column;
        gap: 16px;
    }
    /* o .marleft precisa aparecer no seletor: o template da a ele
       margin-left:16px com 4 classes de especificidade, e o
       responsive.css so zera isso entre 500 e 767px. Abaixo de 500px
       — ou seja, em praticamente todo celular — a margem sobrevivia e
       empurrava o segundo botao 16px para a direita, desalinhado do
       primeiro. */
    .main-slider .content .btns-box a,
    .main-slider .content .btns-box a.marleft {
        width: 100%;
        margin: 0;
    }

    /*--- 19.3 Rodape: tudo centralizado -------------------------
      No desktop o rodape e uma grade de 4 colunas e o alinhamento a
      esquerda faz sentido: cada coluna tem sua margem. No celular as
      colunas viram uma pilha unica e centralizado fecha melhor o fim
      da pagina.
    -------------------------------------------------------------*/
    .sf-footer-marca,
    .sf-footer-col {
        text-align: center;
    }
    .sf-footer-social {
        justify-content: center;
    }
    /* itens de contato sao flex (icone + texto): o text-align nao
       alcanca a linha, quem centraliza o par e o justify-content */
    .sf-footer-contato li {
        justify-content: center;
    }
    /* o hover empurra o link 4px para a direita; com texto centralizado
       isso desloca o centro e o item "pula" ao passar o dedo */
    .sf-footer-col a:hover,
    .sf-footer-col a:focus {
        padding-left: 0;
    }

    /*--- 19.4 Caixa de horario ----------------------------------
      Dois defeitos que so apareciam aqui:

      1. "Horario de funcionamento" transbordava 29px em telas de
         360px — a caixa e estreita porque fica sobre a foto.
      2. Cada dia era <span> + <span class="right"> com float e 40px
         de padding de cada lado. Em 220px uteis isso nao cabia, o
         float caia para a linha de baixo e o horario aparecia
         desencontrado do dia. Vira flex: o par fica na mesma linha
         em qualquer largura.
    -------------------------------------------------------------*/
    .working-hours-box .title h3 {
        font-size: 22px;
        line-height: 1.25;
        overflow-wrap: break-word;
    }
    /* o ponto decorativo de 5px vinha depois de "funcionamento" e, sem
       espaco na linha, descia sozinho para a linha de baixo — um ponto
       vermelho solto no meio da caixa */
    .working-hours-box .title h3 span {
        margin-left: 3px;
    }
    .working-hours-box ul li {
        display: flex;
        align-items: baseline;
        justify-content: space-between;
        gap: 8px;
    }
    .working-hours-box ul li .left {
        padding-right: 10px;
    }
    .working-hours-box ul li .right {
        float: none;
        padding-left: 10px;
        /* "8h–12h · 13h–18h" e uma informacao so: quebrada no meio,
           vira "18h" sozinho na linha de baixo */
        white-space: nowrap;
    }

    /* 3. O que realmente apertava a linha: 40px de padding na caixa
       mais 50px no bloco branco, dos DOIS lados — 180px de recuo numa
       tela de 375. Sobravam 165px uteis para um par (dia + horario)
       que precisa de 226px, e TODAS as linhas quebravam, nao so a
       "Segunda" (a mais larga, a primeira a denunciar). Medidas do
       template, pensadas para a coluna de ~570px do desktop. */
    .working-hours-box {
        padding-left: 20px;
        padding-right: 20px;
    }
    .working-hours-box .inner-content {
        padding-left: 22px;
        padding-right: 22px;
    }
}

/* Abaixo de 360px o recuo acima ainda nao basta: sobram 206px para os
   mesmos 226px de texto. Aperta mais o recuo e desce um ponto na fonte
   dos dias — 15px mantem o par inteiro na linha ate 320px, a tela mais
   estreita que ainda aparece nos acessos. */
@media only screen and (max-width: 360px) {
    .working-hours-box {
        padding-left: 14px;
        padding-right: 14px;
    }
    .working-hours-box .inner-content {
        padding-left: 16px;
        padding-right: 16px;
    }
    .working-hours-box ul li .left,
    .working-hours-box ul li .right {
        font-size: 15px;
    }
}


/*==================================================================
  20. Menu do celular: gaveta clara, tipografia verde
  ------------------------------------------------------------------
  A gaveta vinha com `background: #000000` do template — preto puro,
  a unica superficie preta do site inteiro, e sem relacao nenhuma com
  a marca.

  Virou branca com texto verde, e isso resolveu tres coisas de uma vez:

  1. O logo da gaveta (mobilemenu-logo.png) e a versao para fundo
     CLARO — desenho escuro e letreiro verde. Sobre o preto ele
     aparecia esmaecido; sobre branco fica como foi desenhado.
  2. O item atual usa o verde-500, o acento da marca. Ele nao serviria
     num fundo escuro (2,9:1, abaixo do minimo de 4,5:1 para 15px);
     sobre branco da 5,5:1.
  3. O botao de fechar era branco — invisivel numa gaveta clara.

  O vidro por tras (.menu-backdrop) continua verde-900 a 90%: gaveta
  clara sobre a pagina escurecida separa bem as duas camadas.

  Fica fora de media query de proposito: e estilo do componente, nao
  de layout — a gaveta so aparece no celular porque o botao que a
  abre so existe la.

  O seletor inclui .menu-box para passar na frente do color.css, que
  pinta o item atual de verde-500 com a mesma especificidade da regra
  daqui.
==================================================================*/
.mobile-menu .menu-box {
    background: var(--sf-branco);
}

.mobile-menu .menu-box .navigation li,
.mobile-menu .menu-box .navigation:last-child,
.mobile-menu .menu-box .navigation li > ul > li:first-child {
    border-color: var(--sf-verde-100);
}

.mobile-menu .menu-box .navigation li > a {
    color: var(--sf-verde-700);
}
.mobile-menu .menu-box .navigation li.current > a,
.mobile-menu .menu-box .navigation li > a:hover,
.mobile-menu .menu-box .navigation li > a:focus {
    color: var(--sf-verde-500);
}
.mobile-menu .menu-box .navigation li > a:before {
    border-left-color: var(--sf-verde-500);
}

/* Icones sociais alinhados com o resto da gaveta.
   O template centralizava; os itens do menu tem 25px de recuo, entao
   os icones passam a comecar na mesma linha vertical. O primeiro <li>
   perde a margem da esquerda, senao ficaria 5px fora do prumo. */
.mobile-menu .social-links {
    text-align: left;
}
.mobile-menu .social-links li:first-child {
    margin-left: 0;
}
.mobile-menu .menu-box .social-links li a {
    color: var(--sf-verde-700);
}
.mobile-menu .menu-box .social-links li a:hover,
.mobile-menu .menu-box .social-links li a:focus {
    color: var(--sf-verde-500);
}

/* o X de fechar era branco: sumia na gaveta clara */
.mobile-menu .close-btn {
    color: var(--sf-verde-700);
}


/*==================================================================
  21. Texto centralizado dentro do botao
  ------------------------------------------------------------------
  .btn-one .txt e um flex container sem justify-content, ou seja,
  conteudo grudado no inicio. Enquanto o botao teve a largura do
  proprio texto isso nao aparecia — os 40px de padding de cada lado
  davam a impressao de centralizado.

  No celular os botoes do hero passaram a ocupar a largura toda, e o
  texto ficou encostado na esquerda com um vazio enorme a direita.
  A correcao vale para o site inteiro: em qualquer botao mais largo
  que o proprio texto, o certo e o rotulo no meio. Onde o botao se
  ajusta ao texto, nao ha espaco sobrando e nada muda.
==================================================================*/
.btn-one .txt {
    justify-content: center;
}


/*==================================================================
  21.1. Glifo oficial do WhatsApp
  ------------------------------------------------------------------
  Fica no lugar do .fa-whatsapp do Font Awesome 4 nos quatro links que
  abrem a conversa de verdade. Herda tamanho e cor do contexto: `1em`
  acompanha o font-size de quem o contem e `currentColor` acompanha a
  cor do texto, entao ele funciona igual no menu escuro, no rodape e
  na caixa do mapa sem regra propria em cada lugar.

  O `.sf-footer-contato li` e flex e alinha por baseline; o SVG nao
  tem baseline de texto, dai o alinhamento explicito.
==================================================================*/
.sf-zap {
    width: 1em;
    height: 1em;
    fill: currentColor;
    flex: 0 0 auto;
    vertical-align: -.125em;
}
.sf-footer-contato .sf-zap {
    width: 17px;
    height: 17px;
    margin-top: 3px;
    color: var(--sf-verde-500);
}
.sf-mapa-link .sf-zap {
    width: 19px;
    height: 19px;
}
/* o link do card de servico e sublinhado: o icone fica fora do
   sublinhado e com um respiro, senao encosta na primeira letra */
.single-service-style1 .text-holder .button a .sf-zap {
    width: 15px;
    height: 15px;
    margin-right: 7px;
    vertical-align: -.15em;
    text-decoration: none;
}

/* Botoes: .sf-enviar e .sf-cta-botao ja sao flex com gap, entao o
   icone so precisa de tamanho. O .btn-one usa .txt como flex sem gap
   proprio — ali a separacao vem da margem. */
.sf-enviar .sf-zap,
.sf-cta-botao .sf-zap {
    width: 21px;
    height: 21px;
}
.btn-one .txt .sf-zap {
    width: 19px;
    height: 19px;
    margin-right: 9px;
}

/* Icone dentro do campo do formulario. A caixinha tem largura fixa e
   centraliza por text-align; um SVG inline-block obedece a isso, mas
   precisa de tamanho proprio — sem width ele colapsaria para 0. */
.sf-icone .sf-zap {
    width: 17px;
    height: 17px;
    vertical-align: -.2em;
}

/* O flutuante centralizava o glifo do Font Awesome por line-height,
   que nao vale para SVG. Vira flex e o icone fica no meio de verdade. */
.whatsapp-flutuante {
    display: flex;
    align-items: center;
    justify-content: center;
}
.whatsapp-flutuante .sf-zap {
    width: 32px;
    height: 32px;
}


/*==================================================================
  22. Preloader: patinha no lugar do GIF do template
  ------------------------------------------------------------------
  O template carregava preloader.gif — um anel rosa, cor que nao
  existe na marca, em bitmap de tamanho fixo que serrilha em tela
  retina. Trocado por SVG inline: escala em qualquer densidade, usa
  os tokens de cor e nao custa requisicao nenhuma.

  A animacao acende os quatro dedos em sequencia, como passos, e a
  almofada pulsa junto. Sao 4 delays de 0,12s dentro de um ciclo de
  1,2s — rapido o bastante para parecer atividade sem virar piscada.

  Cuidado ao mexer: os dedos tem transform="rotate(...)" no SVG. Uma
  animacao com `transform` em CSS SUBSTITUI esse atributo e a patinha
  se desmonta — por isso os dedos animam so a opacidade. A almofada,
  que nao tem atributo transform, pode escalar a vontade.
==================================================================*/
.preloader {
    background-image: none;
    display: flex;
    align-items: center;
    justify-content: center;
}

.sf-patinha {
    width: 84px;
    height: 84px;
}

.sf-patinha-dedo,
.sf-patinha-almofada {
    fill: var(--sf-verde-700);
}

.sf-patinha-dedo {
    opacity: .3;
    animation: sf-patinha-passo 1.2s ease-in-out infinite;
}
.sf-patinha-dedo:nth-of-type(1) { animation-delay: 0s; }
.sf-patinha-dedo:nth-of-type(2) { animation-delay: .12s; }
.sf-patinha-dedo:nth-of-type(3) { animation-delay: .24s; }
.sf-patinha-dedo:nth-of-type(4) { animation-delay: .36s; }

.sf-patinha-almofada {
    opacity: .9;
    transform-box: fill-box;
    transform-origin: center;
    animation: sf-patinha-pulso 1.2s ease-in-out .48s infinite;
}

@keyframes sf-patinha-passo {
    0%, 70%, 100% { opacity: .3; }
    35%           { opacity: 1; }
}

@keyframes sf-patinha-pulso {
    0%, 100% { opacity: .9;  transform: scale(.94); }
    40%      { opacity: 1;   transform: scale(1); }
}

/* WCAG 2.2 - 2.3.3: quem pediu menos animacao ve a patinha parada e
   inteira, nao uma tela branca vazia */
@media (prefers-reduced-motion: reduce) {
    .sf-patinha-dedo,
    .sf-patinha-almofada {
        opacity: 1;
        animation: none;
        transform: none;
    }
}

/*==================================================================
  23. Galeria de banho e tosa: carrossel e lupa
  ------------------------------------------------------------------
  As fotos vieram do celular da clinica: todas 720x1280, retrato de
  9:16. A decisao foi NAO recortar para um formato "de galeria" — em
  varias delas o pet esta encostado na borda de baixo, e qualquer
  corte centralizado comia as patinhas. O card entao repete o 9:16 do
  arquivo, e o resultado tem a leitura de story: o publico ja
  reconhece o formato e sabe que da para arrastar.

  Fundo verde escuro num site inteiro claro. Dois motivos: foto
  colorida de bicho salta muito mais sobre superficie escura, e a
  faixa cria o unico respiro visual entre o hero e o rodape.

  O trilho fica DENTRO de um .container de verdade (ver o HTML). Foi a
  segunda tentativa: na primeira ele sangrava de ponta a ponta em toda
  largura, e sangramento nao convive com seta — a seta ancora na borda
  do container e os cards passam por baixo dela, entao em 1920px a
  ">" caia em cima da quinta foto, e em toda largura de desktop tapava
  alguma. Contido, o ultimo card termina exatamente onde o CTA termina.

  Herdar o .container em vez de repetir 1170px/930px no CSS importa:
  o template sobrescreve o max-width do Bootstrap, e a conta a mao
  acertava em 1200px+ mas errava por 120px na faixa dos 992–1199px.

  O sangramento sobrevive so ate 991px (bloco 23.3), onde nao ha seta
  para atrapalhar: la o card cortado na margem da tela e o que avisa
  "tem mais coisa aqui" sem texto nenhum, e a faixa de ponta a ponta e
  o que da a leitura de story.
==================================================================*/
.sf-galeria-area {
    position: relative;
    padding: 100px 0 96px;
    background: var(--sf-verde-800);
    overflow: hidden;
}

/* o .sec-title do template reserva 68px embaixo, pensado para paragrafo
   de apoio; aqui embaixo vem foto, e o vao ficava com 112px de vazio */
.sf-galeria-area .sec-title { padding-bottom: 20px; }

/* o cabecalho de secao nasce escuro no template; aqui o fundo inverteu */
.sf-galeria-area .sec-title h2 { color: var(--sf-branco); }
.sf-galeria-area .sec-title h5 { color: var(--sf-verde-200); }
.sf-galeria-area .sec-title h5 span { color: var(--sf-creme); }
.sf-galeria-area .sec-title .icon i { color: var(--sf-verde-300); }

.sf-galeria {
    position: relative;
    margin-top: 24px;
}

/*------------------------------------------------------------------
  Trilho
------------------------------------------------------------------*/
.sf-galeria-trilho {
    display: flex;
    gap: 18px;
    margin: 0;
    /* padding vertical de 6px: o card sobe 6px no hover e o overflow-y
       do trilho cortaria a sombra */
    padding: 6px 0;
    list-style: none;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    scroll-padding-left: 0;
    scroll-behavior: smooth;
    /* iOS: sem isto o scroll horizontal engasga dentro da pagina */
    -webkit-overflow-scrolling: touch;
    /* a barra do sistema apareceria por cima das fotos; o progresso
       proprio, logo abaixo, cumpre o papel de dizer onde a pessoa esta */
    scrollbar-width: none;
}
.sf-galeria-trilho::-webkit-scrollbar { display: none; }

/* quem chega no trilho pelo teclado precisa ver que ele e rolavel */
.sf-galeria-trilho:focus-visible {
    outline: 3px solid var(--sf-creme);
    outline-offset: 4px;
    border-radius: 20px;
}

@media (prefers-reduced-motion: reduce) {
    .sf-galeria-trilho { scroll-behavior: auto; }
}

.sf-galeria-item {
    flex: 0 0 auto;
    width: 220px;
    scroll-snap-align: start;
}

/*------------------------------------------------------------------
  Card
------------------------------------------------------------------*/
.sf-galeria-foto {
    position: relative;
    display: block;
    width: 100%;
    aspect-ratio: 9 / 16;
    padding: 0;
    border: 0;
    border-radius: 20px;
    overflow: hidden;
    background: var(--sf-verde-900);
    cursor: zoom-in;
    /* o proprio card e o alvo de toque: 220x391 passa longe do minimo
       de 24x24 do WCAG 2.2 - 2.5.8 */
    transition: transform .3s ease, box-shadow .3s ease;
}

.sf-galeria-foto img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform .45s ease;
}

/* lupa no canto: aparece so quando o card e alvo, para nao poluir a
   faixa inteira com 17 icones */
.sf-galeria-foto::after {
    content: "\f00e"; /* fa-search-plus */
    font-family: FontAwesome;
    position: absolute;
    right: 12px;
    bottom: 12px;
    width: 38px;
    height: 38px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 15px;
    color: var(--sf-verde-700);
    background: rgba(255, 255, 255, .92);
    border-radius: 50%;
    opacity: 0;
    transform: scale(.8);
    transition: opacity .25s ease, transform .25s ease;
}

.sf-galeria-foto:hover,
.sf-galeria-foto:focus-visible {
    transform: translateY(-6px);
    box-shadow: 0 18px 34px rgba(0, 0, 0, .34);
}
.sf-galeria-foto:hover img { transform: scale(1.06); }
.sf-galeria-foto:hover::after,
.sf-galeria-foto:focus-visible::after {
    opacity: 1;
    transform: scale(1);
}

.sf-galeria-foto:focus-visible {
    outline: 3px solid var(--sf-creme);
    outline-offset: 3px;
}

@media (prefers-reduced-motion: reduce) {
    .sf-galeria-foto,
    .sf-galeria-foto img,
    .sf-galeria-foto::after { transition: none; }
    .sf-galeria-foto:hover { transform: none; }
    .sf-galeria-foto:hover img { transform: none; }
}

/*------------------------------------------------------------------
  Setas do trilho — desktop
  Nascem [hidden] no HTML: sem JS elas nao fariam nada, e botao que
  nao faz nada e pior do que botao que nao existe.
------------------------------------------------------------------*/
.sf-galeria-seta {
    position: absolute;
    top: 50%;
    z-index: 3;
    width: 52px;
    height: 52px;
    transform: translateY(-50%);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 26px;
    line-height: 1;
    color: var(--sf-verde-700);
    background: var(--sf-branco);
    border: 0;
    border-radius: 50%;
    box-shadow: 0 8px 20px rgba(0, 0, 0, .3);
    cursor: pointer;
    transition: background .25s ease, color .25s ease, opacity .25s ease;
}
/* encostadas na quina do primeiro e do ultimo card. A partir de 1400px
   sobra tela e elas saem de cima da foto (regra logo abaixo) */
.sf-galeria-seta.anterior { left: 6px; }
.sf-galeria-seta.proxima  { right: 6px; }

@media (min-width: 1400px) {
    .sf-galeria-seta.anterior { left: -66px; }
    .sf-galeria-seta.proxima  { right: -66px; }
}

.sf-galeria-seta:hover {
    background: var(--sf-verde-500);
    color: var(--sf-branco);
}
.sf-galeria-seta:focus-visible {
    outline: 3px solid var(--sf-creme);
    outline-offset: 3px;
}

/* ponta do trilho: o botao continua no lugar, so para de responder */
.sf-galeria-seta[disabled] {
    opacity: .3;
    cursor: default;
    pointer-events: none;
}

/*------------------------------------------------------------------
  Barra de progresso
------------------------------------------------------------------*/
.sf-galeria-barra {
    position: relative;
    height: 4px;
    max-width: 240px;
    margin: 34px auto 0;
    border-radius: 4px;
    background: rgba(255, 255, 255, .18);
    overflow: hidden;
}
.sf-galeria-progresso {
    position: absolute;
    inset: 0 auto 0 0;
    width: 30%;
    border-radius: 4px;
    background: var(--sf-verde-300);
    transition: transform .15s linear;
    will-change: transform;
}

/*------------------------------------------------------------------
  CTA da secao, sobre fundo escuro
------------------------------------------------------------------*/
.sf-galeria-cta {
    margin-top: 46px;
    background: rgba(255, 255, 255, .06);
    border: 1px solid rgba(255, 255, 255, .14);
}
.sf-galeria-cta .sf-cta-texto h3 { color: var(--sf-branco); }
.sf-galeria-cta .sf-cta-texto p  { color: var(--sf-verde-100); }

/*------------------------------------------------------------------
  Lupa (dialog)
------------------------------------------------------------------*/
/* O <dialog> centraliza sozinho com o margin:auto da folha do navegador,
   mas so enquanto ninguem mexe em width/inset — e o template mexe. Em vez
   de disputar especificidade com ele, a lupa toma a tela inteira e
   centraliza a foto no flex, que nao depende de UA nenhum. */
.sf-lupa {
    position: fixed;
    inset: 0;
    width: 100vw;
    max-width: 100vw;
    height: 100%;
    max-height: none;
    margin: 0;
    padding: 0;
    border: 0;
    background: transparent;
    overflow: hidden;
    color: var(--sf-branco);
}

/* trocar o display do dialog custa repor o display:none do fechado —
   sem esta linha a lupa nasce aberta por cima da pagina */
.sf-lupa:not([open]) { display: none; }
.sf-lupa[open] {
    display: flex;
    align-items: center;
    justify-content: center;
}
.sf-lupa::backdrop {
    background: rgba(9, 24, 15, .88);
    backdrop-filter: blur(3px);
}

.sf-lupa-palco {
    margin: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 14px;
}
.sf-lupa-palco img {
    display: block;
    width: auto;
    max-width: 100%;
    max-height: 78vh;
    height: auto;
    border-radius: 18px;
    background: var(--sf-verde-900);
    box-shadow: 0 26px 60px rgba(0, 0, 0, .5);
}

.sf-lupa-legenda {
    font-family: var(--sf-font-corpo);
    font-size: 14px;
    letter-spacing: .04em;
    color: var(--sf-verde-100);
}

/* absolute, nao fixed: o dialog ja e a tela inteira, e fixed dentro de
   elemento no top layer se ancora em coisa diferente conforme o navegador */
.sf-lupa-fechar,
.sf-lupa-seta {
    position: absolute;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--sf-branco);
    background: rgba(255, 255, 255, .14);
    border: 0;
    border-radius: 50%;
    cursor: pointer;
    transition: background .25s ease;
}
.sf-lupa-fechar:hover,
.sf-lupa-seta:hover { background: rgba(255, 255, 255, .3); }
.sf-lupa-fechar:focus-visible,
.sf-lupa-seta:focus-visible {
    outline: 3px solid var(--sf-creme);
    outline-offset: 3px;
}

.sf-lupa-fechar {
    top: 20px;
    right: 20px;
    width: 46px;
    height: 46px;
    font-size: 30px;
    line-height: 1;
}
.sf-lupa-seta {
    top: 50%;
    width: 54px;
    height: 54px;
    margin-top: -27px;
    font-size: 28px;
}
.sf-lupa-seta.anterior { left: 20px; }
.sf-lupa-seta.proxima  { right: 20px; }

/*------------------------------------------------------------------
  23.1. Consequencia do link "Galeria" no menu

  O item de menu virou o oitavo, e a barra foi dimensionada para sete:
  a lista media 698px e entrava por baixo do botao "Agendar" a partir
  de ~1366px — os dois sobrepostos, sem quebrar linha e sem nada
  denunciando na tela.

  Quem manda no espacamento nao e o margin-right: 40px do <li> do
  template: o bloco 13 daqui mesmo ja reescreveu a barra em pilula, com
  padding de 15px no link e 3px de margem no li, e vence por ter a
  cadeia .main-header .header na frente. Mexer no seletor do template
  nao muda nada na tela — por isso a regra abaixo repete a cadeia do
  bloco 13.

  10px devolve 80px de folga e mantem a pilula com respiro. Vale de
  1200px para cima, que e onde o menu horizontal existe; abaixo disso
  o template ja troca pelo hamburger e a conta nao se aplica.
------------------------------------------------------------------*/
@media (min-width: 1200px) {
    .main-header .header .main-menu .navigation > li > a {
        padding-left: 10px;
        padding-right: 10px;
    }
}

/* 1200–1365px e o trecho mais apertado da faixa: o menu horizontal ja
   apareceu (o hamburger sai em 1200) mas o header ainda nao ganhou a
   largura que ele pede. Aqui a pilula encolhe ate o limite do
   confortavel — abaixo de 1200 quem resolve e o hamburger. */
@media (min-width: 1200px) and (max-width: 1365px) {
    .main-header .header .main-menu .navigation > li { margin: 0 1px; }
    .main-header .header .main-menu .navigation > li > a {
        padding-left: 8px;
        padding-right: 8px;
    }
}

/*------------------------------------------------------------------
  23.2. Galeria em telas menores
------------------------------------------------------------------*/
@media (max-width: 1199px) {
    .sf-galeria-item { width: 200px; }
}

@media (max-width: 991px) {
    .sf-galeria-area { padding: 84px 0 80px; }
    .sf-galeria-item { width: 30vw; }

    /* aqui o trilho volta a sangrar: o .container em volta dele solta a
       largura e o recuo passa para dentro do proprio trilho, para o
       primeiro card continuar no prumo do CTA enquanto os ultimos somem
       na borda da tela */
    .sf-galeria-palco {
        max-width: none;
        padding-left: 0;
        padding-right: 0;
    }
    .sf-galeria-trilho {
        padding-left: 15px;
        padding-right: 15px;
        scroll-padding-left: 15px;
    }
}

/*------------------------------------------------------------------
  Celular: uma foto por vez

  Aqui o item passa a medir a largura inteira do trilho — e e ele, nao
  o card, que define o passo do scroll-snap. Com isso nenhum vizinho
  espia pela borda: cada arrasto troca exatamente uma foto.

  O card entao encolhe DENTRO do item, limitado pela altura (68vh) em
  vez da largura. Sem esse teto, o 9:16 de um celular de 390px daria um
  card de 640px de altura — 76% da tela para uma foto so, empurrando o
  CTA para fora do campo de visao. Limitando pela altura, a foto segue
  inteira (nada de recorte comendo as patinhas) e ainda sobra faixa
  lateral, que e onde as setas ficam sem tapar bicho nenhum.
------------------------------------------------------------------*/
@media (max-width: 767px) {
    .sf-galeria-area { padding: 70px 0 72px; }
    .sf-galeria-area .sec-title { padding-bottom: 14px; }
    .sf-galeria { margin-top: 18px; }
    .sf-galeria-trilho { gap: 12px; }
    .sf-galeria-barra { margin-top: 26px; }

    .sf-galeria-item {
        width: 100%;
        display: flex;
        justify-content: center;
    }
    .sf-galeria-foto {
        /* Dois tetos, e vale o menor. O aspect-ratio 9/16 da regra base
           deriva a altura a partir desta largura.

           36vh = os 64vh de altura que o card pode ter, convertidos para
           largura pelo 9/16. E o teto que impede a foto de tomar a tela
           inteira e empurrar o CTA para fora.

           66px = a faixa que as duas setas ocupam para dentro do item
           (2px de margem + 46px de botao, menos os 15px de padding do
           trilho, vezes dois). Sem descontar isso, a seta da direita
           come uns 15px da foto e rouba area de toque do card. */
        width: min(calc(100% - 66px), 36vh);
        border-radius: 16px;
    }

    /* alvo de toque de 46px: acima do minimo de 24x24 da WCAG 2.2 (2.5.8)
       e dentro do que o polegar acerta sem mirar */
    .sf-galeria-seta {
        width: 46px;
        height: 46px;
        font-size: 23px;
    }
    .sf-galeria-seta.anterior { left: 2px; }
    .sf-galeria-seta.proxima  { right: 2px; }
}

@media (max-width: 575px) {
    /* na lupa sobra pouco espaco lateral, entao as setas descem para os
       cantos de baixo, onde o polegar chega */
    .sf-lupa-palco img { max-height: 68vh; }
    .sf-lupa-seta {
        top: auto;
        bottom: 22px;
        margin-top: 0;
        width: 50px;
        height: 50px;
    }
    .sf-lupa-seta.anterior { left: 24px; }
    .sf-lupa-seta.proxima  { right: 24px; }
}


/*==================================================================
  24. Depoimentos dos tutores: carrossel
  ------------------------------------------------------------------
  Prova social pedida pelo cliente. Entra entre a equipe (creme) e o
  Clube POPVET (creme-200): por isso o fundo aqui e branco puro — sem
  ele as tres secoes viravam uma faixa creme so, de 900px de altura.

  Virou carrossel a pedido do cliente, na revisao de agosto de 2026
  — antes era grid fixo dos 3 cards. Mostra 3 cards por vez no
  desktop, 2 no tablet, 1 no celular (mesmos cortes de largura do
  grid antigo: 991px e 767px) — so que agora e um trilho de verdade,
  com setas e animacao suave, nao uma grade parada.

  Mesma base do trilho da galeria (bloco 23): overflow-x com
  scroll-snap, entao SEM depoimentos.js o card ja troca pelo
  arrasto/scroll do sistema. O JS so acrescenta setas e a barra de
  progresso — mesmo papel que cumprem la, e por isso reaproveita a
  mesma logica (passo do scroll, desabilitar seta na ponta).

  Hoje sao so 3 depoimentos, e no desktop os 3 cabem de uma vez: as
  setas nascem desabilitadas ali ate chegar um 4o depoimento. Isso e
  esperado, nao bug — e o "preparado para quando vierem mais" que o
  cliente pediu. No tablet (2 por vez) e no celular (1 por vez) ja ha
  o que rolar mesmo com so 3, entao a animacao aparece hoje.

  Sem foto do tutor de proposito: foto de pessoa exige autorizacao de
  uso de imagem, e cobrar isso do cliente atrasaria a publicacao. A
  inicial no circulo cumpre o papel e nunca fica quebrada.

  Sem loop nos leitores de tela: os <li> continuam todos no DOM ao
  mesmo tempo (nenhum ganha aria-hidden), exatamente como a galeria —
  quem navega por teclado/leitor de tela le os depoimentos em ordem,
  sem depender de quais cards o scroll deixou visiveis.
==================================================================*/
.sf-depoimentos-area {
    position: relative;
    padding: 96px 0 88px;
    background: var(--sf-branco);
}

/* o .sec-title do template reserva 68px embaixo para paragrafo de
   apoio, que aqui nao existe */
.sf-depoimentos-area .sec-title { padding-bottom: 24px; }

/*------------------------------------------------------------------
  Carrossel: seta - trilho - seta

  Grid e nao flex de proposito: no celular (bloco 24.1) as duas setas
  precisam ficar LADO A LADO numa faixa abaixo do card, e flex-direction
  column empilharia cada item em sua propria linha — teria de embrulhar
  as setas numa div extra so para agrupa-las. Com grid-template-areas
  cada elemento (seta/trilho/seta) e posicionado direto pelo nome, sem
  wrapper novo no HTML, nas tres larguras.
------------------------------------------------------------------*/
.sf-depoimentos-carrossel {
    position: relative;
    display: grid;
    grid-template-columns: auto 1fr auto;
    grid-template-areas: "anterior trilho proxima";
    align-items: center;
    gap: 20px;
}
.sf-depoimentos-seta.anterior { grid-area: anterior; }
.sf-depoimentos-seta.proxima  { grid-area: proxima; }
.sf-depoimentos-trilho        { grid-area: trilho; }

.sf-depoimentos-trilho {
    display: flex;
    gap: 24px;
    /* cada card encaixa pela borda de inicio dele — com varios
       visiveis de uma vez, "center" (usado quando era 1 por vez)
       fazia o snap mirar o meio de um card do meio, nao a borda */
    scroll-snap-type: x mandatory;
    overflow-x: auto;
    overflow-y: hidden;
    margin: 0;
    padding: 6px 2px;
    list-style: none;
    scroll-behavior: smooth;
    scrollbar-width: none;
    /* iOS: sem isto o arrasto engasga dentro da pagina */
    -webkit-overflow-scrolling: touch;
}
.sf-depoimentos-trilho::-webkit-scrollbar { display: none; }

@media (prefers-reduced-motion: reduce) {
    .sf-depoimentos-trilho { scroll-behavior: auto; }
}

.sf-depoimentos-trilho:focus-visible {
    outline: 3px solid var(--sf-verde-300);
    outline-offset: 4px;
    border-radius: 20px;
}

/* 3 por vez no desktop (>=992px, o padrao — telas menores sao
   sobrescritas abaixo). 48px = 2 vaos de 24px entre os 3 cards. */
.sf-depoimento {
    flex: 0 0 calc((100% - 48px) / 3);
    scroll-snap-align: start;
    display: flex;
    flex-direction: column;
    padding: 30px 30px 26px;
    background: var(--sf-creme);
    border: 1px solid var(--sf-verde-50);
    border-radius: 18px;
}

.sf-depoimento blockquote {
    position: relative;
    /* o blockquote do template vem com barra lateral e recuo; aqui o
       card ja e a moldura */
    margin: 0;
    padding: 22px 0 0;
    border: 0;
    background: none;
    /* empurra a assinatura para a base do card mesmo quando um
       depoimento e bem mais curto que o vizinho */
    flex: 1 1 auto;
}

/* aspa decorativa. Em ::before de proposito: pseudo-elemento nao entra
   na arvore de acessibilidade, entao o leitor de tela nao anuncia um
   caractere solto antes da frase. */
.sf-depoimento blockquote::before {
    content: "\201C";
    position: absolute;
    top: -10px;
    left: -2px;
    font-family: var(--sf-font-titulo);
    font-size: 62px;
    line-height: 1;
    color: var(--sf-verde-300);
}

.sf-depoimento blockquote p {
    margin: 0;
    color: var(--sf-texto);
    font-size: 17px;
    line-height: 1.7;
}

.sf-depoimento-quem {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-top: 22px;
    padding-top: 18px;
    border-top: 1px solid var(--sf-creme-300);
}

.sf-depoimento-inicial {
    flex: 0 0 auto;
    width: 46px;
    height: 46px;
    border-radius: 50%;
    /* enquanto o conteudo for o placeholder [[INICIAL_N]] ele vazaria por
       cima do nome; com o valor real (1 letra) isto nao tem efeito */
    overflow: hidden;
    background: var(--sf-verde-700);
    color: var(--sf-branco);
    font-family: var(--sf-font-titulo);
    font-size: 20px;
    font-weight: 700;
    line-height: 46px;
    text-align: center;
}

.sf-depoimento-nome strong {
    display: block;
    color: var(--sf-verde-900);
    font-size: 17px;
    font-weight: 700;
    line-height: 1.3;
}
.sf-depoimento-nome span {
    color: var(--sf-texto-2);
    font-size: 14px;
}

/*------------------------------------------------------------------
  Setas
  Nascem [hidden] no HTML: sem depoimentos.js elas nao fariam nada, e
  botao que nao faz nada e pior do que botao que nao existe. Tambem
  nascem [disabled] quando nao ha para onde rolar — hoje e o caso do
  desktop, com exatamente 3 depoimentos cabendo nos 3 slots.

  Fora do trilho (grid, nao absolute) de proposito: um botao absoluto
  encostado na quina, como na galeria, cairia em cima do texto da
  citacao — na galeria quem esta por tras e uma foto, aqui e o
  proprio corpo do card.
------------------------------------------------------------------*/
.sf-depoimentos-seta {
    flex: 0 0 auto;
    width: 52px;
    height: 52px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 22px;
    line-height: 1;
    color: var(--sf-verde-700);
    background: var(--sf-branco);
    border: 1px solid var(--sf-verde-50);
    border-radius: 50%;
    box-shadow: 0 8px 20px rgba(15, 46, 28, .12);
    cursor: pointer;
    transition: background .25s ease, color .25s ease, transform .25s ease, opacity .25s ease;
}
.sf-depoimentos-seta:hover {
    background: var(--sf-verde-500);
    color: var(--sf-branco);
    transform: scale(1.06);
}
.sf-depoimentos-seta:focus-visible {
    outline: 3px solid var(--sf-verde-300);
    outline-offset: 3px;
}
/* ponta do trilho (ou os 3 cabendo de uma vez): o botao continua no
   lugar, so para de responder — mesma regra da galeria */
.sf-depoimentos-seta[disabled] {
    opacity: .3;
    cursor: default;
    pointer-events: none;
}
@media (prefers-reduced-motion: reduce) {
    .sf-depoimentos-seta { transition: none; }
    .sf-depoimentos-seta:hover { transform: none; }
}

/*------------------------------------------------------------------
  Barra de progresso
  Mesma peca da galeria (bloco 23), recolorida para fundo claro: la o
  fundo da secao e verde-escuro, aqui e branco. Preferida a pontinhos
  porque "quantos pontos" dependeria de quantos cards cabem por vez
  (3 no desktop, 2 no tablet, 1 no celular) — a barra so reflete a
  fracao rolada, entao funciona igual nas tres larguras sem precisar
  saber quantos "paginas" existem.
------------------------------------------------------------------*/
.sf-depoimentos-barra {
    position: relative;
    height: 4px;
    max-width: 240px;
    margin: 30px auto 0;
    border-radius: 4px;
    background: var(--sf-creme-300);
    overflow: hidden;
}
.sf-depoimentos-progresso {
    position: absolute;
    inset: 0 auto 0 0;
    width: 30%;
    border-radius: 4px;
    background: var(--sf-verde-500);
    transition: transform .15s linear;
    will-change: transform;
}

/* convite para o proximo depoimento: o unico jeito de a secao se
   alimentar sozinha depois da entrega */
.sf-depoimentos-cta {
    margin: 30px 0 0;
    color: var(--sf-texto-2);
    font-size: 17px;
    text-align: center;
}
.sf-depoimentos-cta a {
    color: var(--sf-verde-700);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
}
.sf-depoimentos-cta a:hover {
    color: var(--sf-verde-500);
}

/*------------------------------------------------------------------
  24.1. Depoimentos em telas menores
------------------------------------------------------------------*/
/* tablet: 2 por vez. 24px = 1 vao entre os 2 cards visiveis */
@media only screen and (max-width: 991px) {
    .sf-depoimentos-area { padding: 84px 0 80px; }
    .sf-depoimento { flex: 0 0 calc((100% - 24px) / 2); }
}

/*------------------------------------------------------------------
  Celular: 1 por vez, com as setas abaixo do card

  As setas descem para uma faixa abaixo do card em vez de ficarem ao
  lado do trilho: lado a lado, os dois botoes de 52px comeriam mais
  de 100px dos ~345px uteis de um celular comum, deixando o card
  estreito demais para o texto da citacao. Embaixo, card e citacao
  ganham a largura toda e as setas continuam ao alcance do polegar —
  mesma logica das setas da lupa (bloco 23), que tambem migram para
  baixo no celular.
------------------------------------------------------------------*/
@media only screen and (max-width: 767px) {
    .sf-depoimentos-area { padding: 70px 0 72px; }

    .sf-depoimento { flex: 0 0 100%; }

    /* card na largura toda numa linha, as duas setas lado a lado na
       linha de baixo — perto uma da outra, entao centralizadas (nao
       espalhadas nas pontas) */
    .sf-depoimentos-carrossel {
        grid-template-columns: 1fr 1fr;
        grid-template-areas:
            "trilho    trilho"
            "anterior  proxima";
        row-gap: 18px;
        column-gap: 16px;
    }
    .sf-depoimentos-seta.anterior { justify-self: end; }
    .sf-depoimentos-seta.proxima  { justify-self: start; }

    .sf-depoimento {
        padding: 26px 22px 22px;
    }
    .sf-depoimento blockquote p { font-size: 16px; }
}

/*==================================================================
  25. Fotos da equipe: circulo maior
  ------------------------------------------------------------------
  O template desenha o avatar em 220px, medida pensada para tres
  pessoas na linha. A Sao Francisco tem duas, e nessa largura sobrava
  espaco dos dois lados enquanto os rostos ficavam pequenos demais
  para se reconhecer quem atende.

  Os dois circulos brancos decorativos (.round-top e .round-bottom)
  sao posicionados em px absolutos, calculados para os 220px do
  template: mantidos como estavam, sairiam do lugar. Os valores
  abaixo sao os mesmos percentuais do desenho original, recalculados
  para 300px — por isso nao sao numeros redondos.

  A foto e servida em 600x600, entao 276px de area util continua
  dentro do 2x: nada de imagem esticada em tela retina.
==================================================================*/
.single-team-member .img-holder {
    width: 300px;
    height: 300px;
    padding: 12px;
}
.single-team-member .img-holder .round-top {
    top: -18px;
    left: 109px;
    width: 61px;
    height: 61px;
}
.single-team-member .img-holder .round-bottom {
    right: 27px;
    width: 95px;
    height: 95px;
}

/* No celular a largura util e ~345px: 300px de foto encostaria nas
   bordas. Volta para um meio-termo, ainda maior que o template. */
@media only screen and (max-width: 575px) {
    .single-team-member .img-holder {
        width: 260px;
        height: 260px;
    }
    .single-team-member .img-holder .round-top {
        top: -15px;
        left: 95px;
        width: 53px;
        height: 53px;
    }
    .single-team-member .img-holder .round-bottom {
        right: 24px;
        width: 82px;
        height: 82px;
    }
}

/*==================================================================
  25.1. Equipe: sem o veu verde no hover
  ------------------------------------------------------------------
  O template cobre a foto com `.overlay-style-one` (verde 90%) quando
  o mouse passa, e pinta de verde os dois circulos decorativos. Com
  foto de gente de verdade isso apaga o rosto justamente na hora em
  que a pessoa parou para olhar — vale para uma foto de banco de
  imagem, nao para o Leonardo e a Andrea.

  Feito por CSS, e nao apagando a <div> do HTML: mantem o markup do
  template intacto e reversivel, do mesmo jeito que o resto desta
  camada de marca.
==================================================================*/
.single-team-member .overlay-style-one,
.single-team-member:hover .overlay-style-one {
    opacity: 0;
}
.single-team-member:hover .img-holder .round-top,
.single-team-member:hover .img-holder .round-bottom {
    background: #ffffff;
}

/*==================================================================
  25.2. Equipe: linha de CRMV abaixo do nome
  ------------------------------------------------------------------
  Anuncio de estabelecimento veterinario tem que identificar quem
  responde tecnicamente e o numero de inscricao no conselho
  (Res. CFMV 1.071/2014). A linha entra abaixo do nome, e nao no
  lugar do cargo, para o dado legal aparecer sem transformar o
  bloco "quem atende voce" numa ficha de registro.

  Tamanho menor e cinza-verde do corpo: o CRMV e informacao de
  conferencia, nao chamada. Da 5.30:1 sobre o creme da secao
  (#FBF7EF), acima do 4.5:1 do WCAG AA para texto normal.
==================================================================*/
.single-team-member .title-holder h3 {
    margin-bottom: 5px;
}
.single-team-member .title-holder .sf-crmv {
    margin: 0;
    font-size: 14px;
    line-height: 22px;
    font-weight: 500;
    color: var(--sf-texto-2);
    letter-spacing: .01em;
}
