@charset "UTF-8";
/* ============================================================================
   OLIVEIRA FLOORING SERVICE — styles.css
   ----------------------------------------------------------------------------
   TODO o visual do site vive aqui. O index.html carrega apenas estrutura,
   classes semânticas e atributos data-* (ganchos de JS, nunca de estilo).

   ZERO !important. A cascata é resolvida por ORDEM DE ORIGEM:
   todo seletor tem a mesma especificidade (uma classe), então quem vem
   depois no arquivo vence. Por isso a ordem dos blocos abaixo é normativa
   e não pode ser reorganizada sem revisar os overrides.

   ORDEM OBRIGATÓRIA
     A. tokens, fontes, base, utilitários, componentes
     B. seções (desktop-first)
     C. @media (min-width:1025px)  — refinos exclusivos de desktop
     D. @media (max-width:1024px)  — tablet: coluna única + centralizado
     E. @media (max-width:768px)   — mobile: padding 20px, galeria 88vw
     F. @media (prefers-reduced-motion) — SEMPRE por último

   ÍNDICE
     01 tokens · 02 fontes · 03 base · 04 acessibilidade · 05 utilitários
     06 botão · 07 tile · 08 preloader · 09 header · 10 hero · 11 manifesto
     12 processo · 13 galeria · 14 prova · 15 sobre · 16 contato · 17 footer
     18 desktop ≥1025 · 19 tablet ≤1024 · 20 mobile ≤768 · 21 reduced-motion
   ============================================================================ */


/* ============================================================================
   01. TOKENS
   ============================================================================ */
:root{
  --deep-navy:#0F1E3F; --almond-gold:#CDAA80; --white:#FFFFFF;
  --sand:#DAD1B8; --bg:#F2F2F2; --black:#000000;
  --gold-500:#BE9463; --gold-100:#F1E7D6; --gold-50:#FAF5EE; --gold-700:#86633B;
  --navy-700:#1B2F58; --navy-900:#08122A;
  --neutral-300:#DAD1B8; --danger:#A5402F;

  /* dourado escurecido para texto pequeno sobre fundo claro (WCAG AA) */
  --gold-text:#a07b4d;
  /* dourado dos números grandes (AA em corpo ≥24px) */
  --gold-display:#b08a58;
  --ink-muted:#4a5163;
  --ink-faint:#6c7280;
  --hairline:#E7E3D9;
  --tile-dark:#0b1730;
  --tile-light:#e6e2d6;

  --radius-sm:4px; --radius-xs:2px; --radius-md:6px;
  --clip-corner:polygon(0 0, calc(100% - 18px) 0, 100% 18px, 100% 100%, 0 100%);
  --shadow-gold:0 8px 24px rgba(205,170,128,.35);
  --dur-base:200ms; --ease-standard:cubic-bezier(0.22,0.61,0.36,1);
  --transition-base:all var(--dur-base) var(--ease-standard);

  --font-display:'Lemon Milk','Jost',sans-serif;
  --font-text:'Montserrat',system-ui,sans-serif;
  --tracking-display:.06em;

  --gutter:clamp(20px,5vw,56px);
  --shell:1240px;
}


/* ============================================================================
   02. FONTES — Lemon Milk self-hosted (não existe no Google Fonts).
   Jost + Montserrat vêm do Google Fonts, via <link> no <head>.
   ============================================================================ */
@font-face{font-family:'Lemon Milk';font-style:normal;font-weight:400;font-display:swap;
  src:local('Lemon/Milk'),url("../fonts/lemonmilk-regular.woff") format('woff');}
@font-face{font-family:'Lemon Milk';font-style:normal;font-weight:700;font-display:swap;
  src:local('Lemon/Milk'),url("../fonts/lemonmilk-bold.woff") format('woff');}
@font-face{font-family:'Lemon Milk';font-style:normal;font-weight:300;font-display:swap;
  src:local('Lemon/Milk light'),url("../fonts/lemonmilk-light.woff") format('woff');}


/* ============================================================================
   03. BASE
   ============================================================================ */
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--deep-navy);font-family:var(--font-text);
  -webkit-font-smoothing:antialiased}
a{color:var(--deep-navy);text-decoration:none}
a:hover{color:var(--almond-gold)}
img,video{max-width:100%}
::selection{background:var(--almond-gold);color:var(--deep-navy)}
input,textarea{font-family:var(--font-text)}
input::placeholder,textarea::placeholder{color:#767c89} /* AA: era #9aa0ab, 2.6:1 */


/* ============================================================================
   04. ACESSIBILIDADE
   ============================================================================ */
a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{
  outline:2px solid var(--almond-gold);outline-offset:3px;border-radius:2px}
.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}
.skip-link{position:absolute;left:-9999px;top:0;z-index:200;background:var(--deep-navy);color:#fff;
  padding:12px 20px;font:600 12px var(--font-text);letter-spacing:.14em;text-transform:uppercase}
.skip-link:focus{left:0;color:#fff}


/* ============================================================================
   05. UTILITÁRIOS
   ============================================================================ */
.shell{max-width:var(--shell);margin:0 auto}

/* etiqueta dourada em versalete, repetida em várias seções */
.eyebrow{font:400 11px var(--font-text);letter-spacing:.3em;text-transform:uppercase;
  color:var(--gold-text)}
.eyebrow--wide{letter-spacing:.34em}
.eyebrow--on-dark{color:var(--almond-gold)} /* sobre navy o tom original já passa AA */


/* ============================================================================
   06. BOTÃO — réplica do Button variant="gold" do design system
   ============================================================================ */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-family:var(--font-display);text-transform:uppercase;letter-spacing:var(--tracking-display);
  font-weight:400;border:1.5px solid transparent;border-radius:var(--radius-sm);cursor:pointer;
  text-decoration:none;white-space:nowrap;transition:var(--transition-base);line-height:1;box-shadow:none}
.btn--gold{background:var(--almond-gold);color:var(--deep-navy);border-color:var(--almond-gold)}
.btn--gold:hover{background:var(--gold-500);border-color:var(--gold-500);color:var(--deep-navy);
  box-shadow:var(--shadow-gold)}
.btn--sm{padding:8px 16px;font-size:.75rem;height:36px}
.btn--lg{padding:15px 30px;font-size:1rem;height:54px}
.btn--clipped{clip-path:var(--clip-corner);border-radius:0}
.btn--full{width:100%}
.btn--pill{border-radius:30px;clip-path:none}


/* ============================================================================
   07. TILE — moldura de foto com zoom no hover
   ============================================================================ */
.tile{position:relative;overflow:hidden;border-radius:var(--radius-sm)}
.tile picture{display:block;width:100%;height:100%}
.tile img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .7s var(--ease-standard)}
.tile:hover img{transform:scale(1.05)}


/* ============================================================================
   08. PRELOADER — cobre a tela até o window.load
   Três redes de segurança para nunca prender o usuário:
     1) JS esconde no evento load          (main.js)
     2) JS esconde por teto de 7s          (main.js)
     3) CSS esconde aos 8s, mesmo sem JS   (aqui)
   ============================================================================ */
#preloader{position:fixed;inset:0;z-index:200;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:30px;background:var(--deep-navy);
  transition:opacity .6s ease,visibility .6s ease;
  animation:preloaderSafety .1s linear 8s forwards}
#preloader.is-done{opacity:0;visibility:hidden;pointer-events:none}
.preloader__logo{width:min(250px,56vw);height:auto;opacity:0;
  animation:preloaderLogo .9s var(--ease-standard) .1s forwards}
.preloader__bar{position:relative;width:min(170px,38vw);height:1px;
  background:rgba(205,170,128,.2);overflow:hidden}
.preloader__bar::after{content:'';position:absolute;inset:0;background:var(--almond-gold);
  transform:translateX(-100%);animation:preloaderSweep 1.3s cubic-bezier(.5,0,.5,1) infinite}
@keyframes preloaderLogo{to{opacity:1}}
@keyframes preloaderSweep{to{transform:translateX(100%)}}
@keyframes preloaderSafety{to{opacity:0;visibility:hidden}}
html.is-loading,html.is-loading body{overflow:hidden}


/* ============================================================================
   09. HEADER
   ============================================================================ */
.site-header{position:fixed;top:0;left:0;right:0;z-index:60;display:flex;align-items:center;
  justify-content:space-between;padding:0 var(--gutter);height:72px;backdrop-filter:blur(12px);
  border-bottom:1px solid rgba(218,209,184,0);background-color:rgba(242,242,242,.35);
  transition:background .5s var(--ease-standard),border-color .5s ease,box-shadow .5s ease}
.site-header__logo{display:flex;align-items:center}
.site-header__logo-img{height:36px;width:auto;display:block}

.nav{display:flex;align-items:center;gap:clamp(16px,2.2vw,36px)}
.nav__link{font:500 11.5px var(--font-text);letter-spacing:.14em;text-transform:uppercase;
  color:var(--deep-navy);padding:5px 0;border-bottom:1.5px solid transparent;
  transition:color .3s,border-color .3s}

.burger{display:none;align-items:center;justify-content:center;width:44px;height:44px;
  background:transparent;border:1px solid rgba(15,30,63,.2);border-radius:var(--radius-xs);
  cursor:pointer;color:var(--deep-navy)}
.burger__box{display:flex;flex-direction:column;gap:5px}
.burger__bar{display:block;width:20px;height:1.5px;background:var(--deep-navy)}

.mobile-nav{position:fixed;top:72px;left:0;right:0;z-index:55;background:var(--bg);
  border-bottom:1px solid var(--sand);flex-direction:column;padding:12px var(--gutter) 24px;
  box-shadow:0 16px 30px rgba(15,30,63,.08)}
.mobile-nav__link{font:500 13px var(--font-text);letter-spacing:.12em;text-transform:uppercase;
  color:var(--deep-navy);padding:15px 0;border-bottom:1px solid #e4e0d4}
.mobile-nav__link:last-child{border-bottom:0}


/* ============================================================================
   10. HERO
   ============================================================================ */
/* A seção é o trilho de scroll (100vh na base; 300vh no desktop — bloco 18b).
   Sem overflow:hidden aqui: quem recorta o vídeo é o .hero__sticky, e um
   overflow num ancestral quebraria o position:sticky do miolo. */
.hero{position:relative;height:100vh;min-height:640px;scroll-margin-top:0;
  background:linear-gradient(180deg,var(--deep-navy),#28211a)}
/* miolo fixo: enquanto a seção rola, o vídeo + conteúdo ficam grudados na tela.
   No desktop (seção 300vh) ele "prende" por 2 viewports; ≤1024px a seção é
   100vh e o sticky apenas preenche a tela, como um hero fullscreen comum. */
.hero__sticky{position:sticky;top:0;height:100vh;min-height:640px;overflow:hidden}
.hero__bg{position:absolute;inset:0}
.hero__video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hero__poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-1}
/* véu de contraste, o mais leve possível: nível calibrado medindo a luminância
   do vídeo sob cada bloco de texto em todos os frames. .50→.68 mantém o
   subtítulo (texto pequeno) em AA 4.5:1 sobre o fundo típico e os títulos
   grandes ≥3:1 — reduzir mais derruba o subtítulo abaixo de AA. */
.hero__veil{position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(9,18,38,.50) 0%,rgba(9,18,38,.68) 100%)}

/* Centralização do hero — vale em TODAS as larguras.
   align-items:center centra na vertical, justify-content:center na horizontal;
   o padding-top é zero de propósito: com ele o bloco caía abaixo do eixo. */
.hero__stage{position:relative;z-index:2;height:100%;display:flex;
  align-items:center;justify-content:center}
.hero__inner{width:100%;max-width:var(--shell);margin:0 auto;padding:0 var(--gutter);
  text-align:center}

/* opacity/transform iniciais moram aqui (não inline) para o bloco 21
   conseguir zerá-los por ordem de origem, sem !important */
.hero__eyebrow{display:flex;align-items:center;justify-content:center;gap:14px;
  margin-bottom:28px;opacity:0;transform:translateY(16px)}
.hero__eyebrow-rule{width:44px;height:1px;background:var(--almond-gold)}
.hero__eyebrow-text{font:400 11px var(--font-text);letter-spacing:.34em;text-transform:uppercase;
  color:var(--almond-gold)}

/* margin-inline auto é o que centra as colunas de largura limitada
   (max-width) dentro do .hero__inner, em qualquer viewport */
.hero__title{margin:0 auto;max-width:22ch;font-family:var(--font-display);font-weight:700;
  line-height:1.04;letter-spacing:.05em;text-transform:uppercase;color:#fff;
  font-size:clamp(34px,5.6vw,62px);text-align:center;opacity:0;transform:translateY(20px)}
.hero__title-accent{color:var(--almond-gold)}

.hero__sub{margin:34px auto 0;max-width:560px;font:300 clamp(15px,1.5vw,19px)/1.7 var(--font-text);
  color:rgba(255,255,255,.88);text-align:center;opacity:0;transform:translateY(20px)}

/* coluna, não linha: lado a lado o par CTA + nota fica centralizado como
   grupo, mas cada item individualmente sai do eixo. Empilhado, os dois
   caem exatamente no centro. */
.hero__actions{display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:26px;margin-top:44px;text-align:center;opacity:0;transform:translateY(20px)}
.hero__note{font:300 12px/1.6 var(--font-text);color:rgba(255,255,255,.75)}


/* ============================================================================
   11. MANIFESTO — painel dividido: texto sobre navy + foto da frase.
   Fundo navy da identidade, texto branco e acento em almond gold (o mesmo
   gold usado sobre fundo escuro no hero). Reveal escalonado em animations.js.
   ============================================================================ */
.manifesto{display:grid;grid-template-columns:1fr 1fr;background:var(--deep-navy);color:#fff}
.manifesto__panel{display:flex;flex-direction:column;justify-content:center;
  padding:clamp(48px,7vw,110px) clamp(28px,6vw,88px)}
.manifesto__tag{display:inline-block;font:400 11px var(--font-text);letter-spacing:.34em;
  text-transform:uppercase;color:var(--almond-gold);margin-bottom:clamp(24px,3.6vw,40px)}
.manifesto__line{margin:0 0 .5em;font-family:var(--font-display);font-weight:700;
  font-size:clamp(22px,2.6vw,34px);line-height:1.14;letter-spacing:.03em;text-transform:uppercase;
  color:#fff}
.manifesto__line:last-child{margin-bottom:0}
.manifesto__accent{color:var(--almond-gold)}
.manifesto__media{position:relative;min-height:340px;overflow:hidden}
.manifesto__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}


/* ============================================================================
   12. PROCESSO / ANATOMIA DA PRECISÃO
   ============================================================================ */
.process{background:var(--bg);padding:clamp(70px,10vw,130px) var(--gutter);scroll-margin-top:72px}
.process__grid{display:grid;grid-template-columns:0.9fr 1.1fr;gap:clamp(40px,6vw,96px);
  align-items:start}
.process__head{position:sticky;top:132px}
/* "Engenharia" e "Anatomia da precisão" partem da mesma margem esquerda,
   formando uma linha vertical limpa entre os dois títulos.
   O display:block é necessário no eyebrow: text-align não afeta um <span>
   inline — ele seria arrastado pelo text-align do container. As duas regras
   são declarações diretas, então vencem o text-align:center herdado do
   .process__grid no bloco 19, independente da ordem no arquivo. */
.process__eyebrow{display:block;text-align:left}
.process__title{margin:18px 0 0;font-family:var(--font-display);font-weight:700;
  font-size:clamp(30px,4.4vw,58px);line-height:1.06;letter-spacing:.04em;text-transform:uppercase;
  color:var(--deep-navy);text-align:left}
.process__lead{margin:26px 0 0;max-width:360px;font:300 15px/1.75 var(--font-text);
  color:var(--ink-muted)}
.process__meter{margin-top:38px;display:flex;align-items:center;gap:14px}
.process__track{position:relative;width:120px;height:2px;background:var(--sand);overflow:hidden}
.process__fill{position:absolute;inset:0;transform-origin:left;transform:scaleX(0);
  background:var(--almond-gold);transition:transform .6s ease}
.process__count{font:600 11px var(--font-display);letter-spacing:.1em;color:var(--deep-navy)}

.pillars{display:flex;flex-direction:column;gap:clamp(20px,3vw,32px)}
.pillar{background:#fff;border:1px solid var(--hairline);border-top:3px solid var(--almond-gold);
  border-radius:var(--radius-md);padding:clamp(28px,3.4vw,44px);
  opacity:0;transform:translateY(24px);
  transition:opacity .8s var(--ease-standard),transform .8s var(--ease-standard)}
.pillar__icon{display:flex;align-items:center;justify-content:center;width:52px;height:52px;
  border:1px solid var(--sand);border-radius:var(--radius-md);color:var(--deep-navy);
  margin-bottom:24px}
.pillar__badge{font:600 11px var(--font-display);letter-spacing:.14em;text-transform:uppercase;
  color:var(--gold-text)}
.pillar__title{margin:12px 0;font:600 clamp(18px,1.8vw,23px)/1.25 var(--font-text);
  letter-spacing:.01em;color:var(--deep-navy)}
.pillar__text{margin:0;font:300 15px/1.7 var(--font-text);color:var(--ink-muted)}


/* ============================================================================
   12b. OUR SERVICES — grid de 7 cards com foto (fade-in em animations.js §08)
   ============================================================================ */
.services{background:var(--bg);padding:clamp(70px,10vw,130px) var(--gutter)}
.services__head{max-width:640px;margin:0 auto clamp(40px,6vw,64px);text-align:center}
.services__title{margin:0;font-family:var(--font-display);font-weight:700;
  font-size:clamp(30px,4.4vw,54px);line-height:1.06;letter-spacing:.04em;
  text-transform:uppercase;color:var(--deep-navy)}
.services__lead{margin:16px 0 0;font:300 clamp(15px,1.6vw,18px)/1.7 var(--font-text);
  color:var(--ink-muted)}
.services__grid{max-width:var(--shell);margin:0 auto;list-style:none;padding:0;
  display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(20px,2.6vw,32px)}
/* card: foto 16:9 no topo + corpo; borda inferior gold e elevação no hover */
.service-card{display:flex;flex-direction:column;background:#fff;
  border:1px solid var(--hairline);border-radius:8px;overflow:hidden;
  border-bottom:3px solid transparent;box-shadow:0 6px 20px rgba(15,30,63,.05);
  transition:transform .4s var(--ease-standard),box-shadow .4s var(--ease-standard),
    border-bottom-color .4s var(--ease-standard)}
.service-card:hover{transform:translateY(-6px);
  box-shadow:0 20px 44px rgba(15,30,63,.14);border-bottom-color:var(--almond-gold)}
.service-card__media{aspect-ratio:16/9;overflow:hidden;background:var(--tile-light)}
.service-card__img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .6s var(--ease-standard)}
.service-card:hover .service-card__img{transform:scale(1.05)}
.service-card__body{display:flex;flex-direction:column;gap:10px;padding:clamp(20px,2.4vw,28px)}
.service-card__title{margin:0;font-family:var(--font-display);font-weight:700;
  font-size:clamp(16px,1.4vw,20px);line-height:1.18;letter-spacing:.03em;
  text-transform:uppercase;color:var(--deep-navy)}
.service-card__text{margin:0;font:300 14px/1.7 var(--font-text);color:var(--ink-muted)}


/* ============================================================================
   13. OUR PROJECTS — split navy (texto+destaque+stats+CTA | mosaico) + lightbox
   ============================================================================ */
.projects{background:var(--deep-navy);color:#fff;
  padding:clamp(70px,10vw,130px) 0;scroll-margin-top:72px;overflow:hidden}
.projects__grid{max-width:var(--shell);margin:0 auto;padding:0 var(--gutter);
  display:grid;grid-template-columns:0.92fr 1.08fr;gap:clamp(32px,5vw,72px);align-items:center}

/* -- lado esquerdo -- */
/* min-width:0 impede o "grid blowout": sem isso a track 1fr não encolhe abaixo
   do min-content (palavra longa do título / imagens), estourando no mobile. */
.projects__left,.projects__right{min-width:0}
.projects__left{display:flex;flex-direction:column}
.projects__eyebrow{font:300 12px var(--font-text);letter-spacing:.28em;text-transform:uppercase;
  color:var(--almond-gold)}
.projects__title{margin:16px 0 0;max-width:14ch;font-family:var(--font-display);font-weight:700;
  font-size:clamp(30px,3.6vw,52px);line-height:1.08;letter-spacing:.02em;text-transform:uppercase;color:#fff}
.projects__lead{margin:20px 0 0;max-width:48ch;font:300 clamp(14px,1.15vw,16px)/1.75 var(--font-text);
  color:#B0B0B0}

/* filtros por categoria (pills) */
.projects__filters{display:flex;flex-wrap:wrap;gap:10px;margin:28px 0 0}
.pfilter{font:500 12px var(--font-text);letter-spacing:.08em;text-transform:uppercase;color:#fff;
  background:transparent;border:1px solid rgba(255,255,255,.35);border-radius:30px;padding:9px 20px;
  cursor:pointer;white-space:nowrap;transition:border-color .3s,background .3s,color .3s}
.pfilter:hover{border-color:var(--almond-gold)}
.pfilter.is-active{background:var(--almond-gold);border-color:var(--almond-gold);color:var(--deep-navy)}

/* stats com counter-up */
.projects__stats{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin:36px 0 0}
.pstat__row{display:flex;align-items:baseline;gap:2px}
.pstat__num{font-family:var(--font-display);font-weight:700;font-size:clamp(30px,3.4vw,46px);
  line-height:1;color:#fff}
.pstat__suffix{font-family:var(--font-display);font-weight:700;font-size:clamp(20px,2vw,28px);
  color:var(--almond-gold)}
.pstat__label{display:block;margin-top:10px;font:300 11px/1.4 var(--font-text);letter-spacing:.08em;
  text-transform:uppercase;color:#B0B0B0}

.projects__left .btn--pill{margin-top:36px;align-self:center}

/* -- lado direito: mosaico assimétrico -- */
.projects__mosaic{display:grid;gap:10px;aspect-ratio:1/1;
  grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:repeat(3,minmax(0,1fr));
  grid-template-areas:"a a b c" "a a b d" "e e f d"}
.pm-tile{position:relative;min-width:0;overflow:hidden;border:0;padding:0;cursor:pointer;border-radius:12px;
  background:rgba(255,255,255,.05);opacity:0;transform:translateY(14px);
  transition:opacity .5s ease,transform .5s ease}
.pm-tile.is-in{opacity:1;transform:none}
.pm-tile img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .5s var(--ease-standard)}
.pm-tile:hover img{transform:scale(1.03)}
.pm-tile--a{grid-area:a}.pm-tile--b{grid-area:b}.pm-tile--c{grid-area:c}
.pm-tile--d{grid-area:d}.pm-tile--e{grid-area:e}.pm-tile--f{grid-area:f}

/* -- lightbox fullscreen -- */
.lightbox{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  background:rgba(6,12,26,.94);padding:clamp(16px,4vw,56px)}
.lightbox[hidden]{display:none}
.lightbox__stage{margin:0;display:flex;max-width:100%;max-height:100%}
.lightbox__img{max-width:100%;max-height:85vh;object-fit:contain;border-radius:8px;
  box-shadow:0 30px 80px rgba(0,0,0,.5)}
.lightbox__close{position:absolute;top:clamp(14px,2.5vw,28px);right:clamp(14px,2.5vw,28px);
  width:46px;height:46px}
.lightbox__nav{position:absolute;top:50%;transform:translateY(-50%);width:52px;height:52px}
.lightbox__nav--prev{left:clamp(10px,2vw,28px)}
.lightbox__nav--next{right:clamp(10px,2vw,28px)}
.lightbox__close,.lightbox__nav{display:flex;align-items:center;justify-content:center;color:#fff;
  cursor:pointer;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.25);
  border-radius:50%;transition:background .3s,border-color .3s}
.lightbox__close:hover,.lightbox__nav:hover{background:rgba(205,170,128,.2);border-color:var(--almond-gold)}


/* ============================================================================
   14. PROVA
   Duas seções separadas: a faixa de números vem logo depois do hero,
   o depoimento fica entre a galeria e o Sobre.
   ============================================================================ */

/* -- faixa de números (logo após o hero) -----------------------------------
   O padding-bottom fica só no .stats: a régua que fecha a faixa precisa
   respeitar o .shell (1240px), não sangrar até a borda da viewport. */
.stats-band{background:var(--bg);padding:clamp(70px,10vw,130px) var(--gutter) 0}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
  gap:clamp(28px,4vw,56px);text-align:center;padding-bottom:clamp(50px,6vw,84px);
  border-bottom:1px solid var(--sand)}

/* -- depoimento ------------------------------------------------------------ */
.proof{background:var(--bg);padding:clamp(70px,10vw,130px) var(--gutter)}
.stat__row{display:flex;align-items:baseline;justify-content:center;gap:2px}
.stat__num{font-family:var(--font-display);font-weight:700;font-size:clamp(52px,7vw,88px);
  line-height:1;color:var(--gold-display)}
.stat__suffix{font-family:var(--font-display);font-weight:700;font-size:clamp(32px,4vw,52px);
  color:var(--gold-display)}
.stat__label{margin-top:16px;font:500 11px var(--font-text);letter-spacing:.22em;
  text-transform:uppercase;color:var(--deep-navy)}

/* margin-top zerada: a distância até a galeria acima agora é dada pelo
   padding do .proof. A margem antiga separava o depoimento dos números,
   que não estão mais nesta seção. */
.quote{max-width:900px;margin:0 auto;text-align:center}
.quote__mark{color:#b8ad91;display:flex;justify-content:center;margin-bottom:18px}
.quote__body{margin:0}
.quote__text{margin:0;font:300 clamp(20px,2.6vw,32px)/1.5 var(--font-text);
  color:var(--deep-navy);letter-spacing:.005em}
.quote__meta{margin-top:30px;display:flex;flex-direction:column;align-items:center;gap:4px}
.quote__rule{width:36px;height:1px;background:var(--almond-gold);margin-bottom:12px}
.quote__author{font:600 12px var(--font-display);letter-spacing:.12em;text-transform:uppercase;
  color:var(--deep-navy)}
.quote__place{font:400 12px var(--font-text);color:var(--ink-faint)}

/* grid de depoimentos secundários (cards) abaixo do depoimento em destaque */
.tgrid{list-style:none;padding:0;max-width:var(--shell);margin:clamp(48px,6vw,76px) auto 0;
  display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(20px,2.4vw,28px)}
.tcard{display:flex;flex-direction:column;gap:16px;text-align:left;background:#fff;
  border:1px solid var(--hairline);border-radius:8px;padding:clamp(24px,3vw,36px);
  box-shadow:0 6px 20px rgba(15,30,63,.05)}
.tcard__stars{color:var(--almond-gold);font-size:14px;letter-spacing:3px;line-height:1}
.tcard__text{margin:0;font:300 clamp(15px,1.35vw,17px)/1.62 var(--font-text);color:var(--deep-navy)}
.tcard__meta{display:flex;flex-direction:column;gap:2px;margin-top:auto}
.tcard__author{font:600 12px var(--font-display);letter-spacing:.1em;text-transform:uppercase;
  color:var(--deep-navy)}
.tcard__place{font:400 12px var(--font-text);color:var(--ink-faint)}


/* ============================================================================
   15. SOBRE
   ============================================================================ */
.about{background:var(--bg);padding:clamp(30px,4vw,48px) var(--gutter) clamp(70px,10vw,130px);
  scroll-margin-top:72px}
.about__wrap{max-width:var(--shell);margin:0 auto;border-top:1px solid var(--sand);
  padding-top:clamp(50px,6vw,84px)}
.about__grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(40px,6vw,88px);align-items:start}
.about__media{position:sticky;top:110px;aspect-ratio:4/5;background:var(--tile-light)}
.about__title{margin:18px 0 0;font-family:var(--font-display);font-weight:700;
  font-size:clamp(28px,3.6vw,48px);line-height:1.1;letter-spacing:.03em;text-transform:uppercase;
  color:var(--deep-navy)}
.about__title-accent{color:var(--gold-text)}
.about__text{margin:30px 0 0;font:400 16px/1.8 var(--font-text);color:var(--ink-muted)}
.about__text + .about__text{margin-top:20px}

.facts{margin:38px 0 0;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:1px;background:var(--sand);border:1px solid var(--sand);border-radius:var(--radius-md);
  overflow:hidden}
.fact{background:var(--bg);padding:22px 24px}
.fact__value{font:700 26px var(--font-display);color:var(--deep-navy)}
.fact__label{margin:8px 0 0;font:400 11px var(--font-text);letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-faint)}


/* ============================================================================
   16. CONTATO — formulário
   ============================================================================ */
.contact{background:var(--bg);padding:clamp(30px,4vw,48px) var(--gutter) clamp(80px,10vw,130px);
  scroll-margin-top:72px}
.contact__wrap{max-width:720px;margin:0 auto}
.contact__head{text-align:center;margin-bottom:44px}
.contact__title{margin:16px 0 0;font-family:var(--font-display);font-weight:700;
  font-size:clamp(26px,3.4vw,44px);line-height:1.1;letter-spacing:.03em;text-transform:uppercase;
  color:var(--deep-navy)}

.lead-form{background:#fff;border:1px solid var(--sand);border-radius:var(--radius-md);
  padding:clamp(28px,4vw,52px)}
/* honeypot: fora da tela, invisível para humanos, preenchido por bots */
.honeypot{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

.field-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:24px}
.field{display:flex;flex-direction:column;gap:9px}
.field--block{margin-top:24px}
.field__label{font:600 10px var(--font-text);letter-spacing:.18em;text-transform:uppercase;
  color:var(--deep-navy)}
.field__input{border:0;border-bottom:1px solid var(--sand);padding:11px 2px;font-size:15px;
  color:var(--deep-navy);background:transparent}
.field__input:focus{outline:none;border-bottom-color:var(--almond-gold)}
.field__input--area{resize:vertical}
.field__error{font:400 11px var(--font-text);color:var(--danger)}

.form-submit{margin-top:36px}
.form-note{margin:18px 0 0;text-align:center;font:300 12px var(--font-text);color:var(--ink-faint)}
/* estado de sucesso injetado por main.js */
.form-done{text-align:center;padding:18px;background:var(--deep-navy);color:var(--almond-gold);
  border-radius:var(--radius-sm);font:600 13px var(--font-display);letter-spacing:.14em;
  text-transform:uppercase}
.form-failed{margin:14px 0 0;text-align:center;font:400 13px var(--font-text);color:var(--danger)}


/* ============================================================================
   17. FOOTER
   ============================================================================ */
.site-footer{background:var(--deep-navy);color:#fff;padding:clamp(54px,6vw,80px) var(--gutter)}
.site-footer__top{max-width:var(--shell);margin:0 auto;display:flex;flex-wrap:wrap;
  justify-content:space-between;align-items:center;gap:32px}
.site-footer__logo{height:52px;width:auto;display:block}
/* menu entre a logo e os contatos — ocupa o vão central do rodapé */
.site-footer__nav{display:grid;grid-template-columns:repeat(2,auto);gap:12px 40px}
.site-footer__nav-link{font:400 12px var(--font-text);letter-spacing:.1em;text-transform:uppercase;
  color:rgba(255,255,255,.75);transition:color .3s ease}
.site-footer__nav-link:hover{color:var(--almond-gold)}
.site-footer__meta{font:300 13px/1.8 var(--font-text);color:rgba(255,255,255,.78);text-align:right}
.site-footer__link{color:var(--almond-gold);border-bottom:1px solid rgba(205,170,128,.4)}
.site-footer__bottom{max-width:var(--shell);margin:38px auto 0;padding-top:26px;
  border-top:1px solid rgba(255,255,255,.1);display:flex;flex-wrap:wrap;
  justify-content:space-between;gap:12px;font:300 11px var(--font-text);letter-spacing:.06em;
  color:rgba(255,255,255,.6)}


/* ============================================================================
   18. DESKTOP ≥1025px
   Aqui o hero vira o trilho do scroll-scrub: 300vh de altura dão folga para o
   currentTime do vídeo avançar suave (animations.js §03). O miolo (.hero__sticky)
   fica preso por 2 viewports enquanto o vídeo roda. ≤1024px isto não vale e o
   hero volta a 100vh com o vídeo em loop; reduced-motion força 100vh no bloco 21.
   ============================================================================ */
@media (min-width:1025px){
  .hero{height:300vh}
}


/* ============================================================================
   19. TABLET ≤1024px — coluna única, tudo centralizado
   ============================================================================ */
@media (max-width:1024px){

  /* -- header -- */
  .nav{display:none}
  .burger{display:inline-flex;position:absolute;right:var(--gutter)}
  .site-header__cta{display:none}
  .site-header{justify-content:center}
  .site-header__logo{position:absolute;left:50%;transform:translateX(-50%)}
  .mobile-nav{align-items:center;text-align:center}
  .mobile-nav__link{width:100%}

  /* -- hero: já centralizado na base (bloco 10). Aqui só libera a largura
        do H1, que em tela estreita não deve ficar preso aos 18ch. -- */
  .hero__title{max-width:none}

  /* -- manifesto: empilha com a foto em cima e o texto navy centralizado -- */
  .manifesto{grid-template-columns:1fr}
  .manifesto__media{order:-1;min-height:0;aspect-ratio:16/10}
  .manifesto__panel{align-items:center;text-align:center}

  /* -- processo -- */
  .process__grid{grid-template-columns:1fr;text-align:center}
  .process__head{position:static;text-align:center}
  /* eyebrow e título têm text-align:left declarado direto na base (vence a
     herança do container); no responsivo re-centralizamos os dois na mão para
     alinhar com o lead e o meter, que já ficam centrados. */
  .process__eyebrow{text-align:center}
  .process__title{text-align:center}
  .process__lead{margin-left:auto;margin-right:auto}
  .process__meter{justify-content:center}
  .pillar{text-align:center}
  .pillar__icon{margin-left:auto;margin-right:auto}

  /* -- serviços: 2 colunas no tablet -- */
  .services__grid{grid-template-columns:repeat(2,1fr)}

  /* -- projetos: empilha em coluna única, tudo centralizado -- */
  .projects__grid{grid-template-columns:1fr;gap:clamp(32px,6vw,48px)}
  .projects__left{text-align:center}
  .projects__title{max-width:none}
  .projects__lead{max-width:none}
  .projects__filters{justify-content:center}
  .pstat__row{justify-content:center}
  .projects__mosaic{aspect-ratio:16/10}

  /* -- sobre -- */
  .about__grid{grid-template-columns:1fr;text-align:center}
  .about__media{position:static;max-width:520px;width:100%;margin:0 auto}
  .about__text{text-align:center}
  .fact{text-align:center}

  /* -- contato -- */
  .field{align-items:center}
  .field__label{text-align:center}

  /* -- footer -- */
  .site-footer__top{flex-direction:column;justify-content:center;text-align:center;gap:22px}
  .site-footer__meta{text-align:center}
  .site-footer__bottom{justify-content:center;text-align:center;gap:8px}
}


/* ============================================================================
   20. MOBILE ≤768px — padding lateral 20px, galeria 88vw
   ============================================================================ */
@media (max-width:768px){
  /* padding lateral uniforme em todas as seções */
  .process,.services,.proof,.stats-band,.about,.contact,.site-footer{padding-left:20px;padding-right:20px}
  /* o hero soma este recuo ao do .hero__inner: são 40px de respiro total,
     como no layout aprovado antes da refatoração */
  .hero{padding-left:20px;padding-right:20px}

  /* hero: H1 fluido. A 2ª linha ("LASTING SOPHISTICATION") é longa demais para
     caber inteira no celular, então cada palavra cai numa linha — empilhamento
     de forte impacto, no espírito do título original. */
  .hero__title{font-size:clamp(30px,8.6vw,42px)}
  .hero__actions{gap:18px} /* a direção já é coluna desde a base */
  /* CTA cabe em 375px sem clip: menos padding e letra menor */
  .hero__actions .btn{padding-left:18px;padding-right:18px;font-size:.86rem;letter-spacing:.05em}

  /* botão full-width (submit do form): largura travada em 100% + nowrap fazia
     o texto longo estourar a caixa em telas estreitas. Reduz a letra e permite
     quebrar em 2 linhas como rede de segurança (altura passa a ser fluida). */
  .btn--full{white-space:normal;height:auto;min-height:54px;
    padding-top:14px;padding-bottom:14px;font-size:.82rem;letter-spacing:.04em;line-height:1.2}

  .pillar{padding:clamp(24px,6vw,32px)}

  /* serviços e depoimentos: coluna única no mobile */
  .services__grid{grid-template-columns:1fr}
  .tgrid{grid-template-columns:1fr}

  /* projetos: mosaico vira 2 colunas simples (tiles quadrados),
     filtros com scroll horizontal se não couberem */
  .projects__mosaic{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none;
    grid-template-areas:none;aspect-ratio:auto}
  .pm-tile{grid-area:auto;aspect-ratio:1}
  .projects__stats{gap:12px}
  /* justify-content:flex-start: no mobile os filtros podem passar da largura e
     rolam na horizontal; centralizados, o scroll cortaria o primeiro chip. */
  .projects__filters{flex-wrap:nowrap;overflow-x:auto;justify-content:flex-start;padding-bottom:4px}

  .stats{gap:clamp(24px,7vw,36px)}
  .facts{grid-template-columns:1fr}

  .lead-form{padding:clamp(24px,6vw,32px)}
  .field-grid{grid-template-columns:1fr}
}


/* ============================================================================
   21. MOVIMENTO REDUZIDO — precisa ser o ÚLTIMO bloco do arquivo.
   Sem !important: cada regra tem a mesma especificidade da original e vence
   por vir depois. animations.js também deixa de aplicar transições inline
   quando prefers-reduced-motion está ativo (ver guarda `reduce`).
   ============================================================================ */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}

  /* estados iniciais de animação zerados */
  .hero__eyebrow,.hero__title,.hero__sub,.hero__actions,
  .pillar,.manifesto__line,.manifesto__tag,.service-card,.pm-tile{opacity:1;transform:none}
  /* sem scroll-scrub: hero volta a 100vh e mostra o poster no lugar do vídeo,
     sem 2 viewports de scroll parado. (vence o 300vh do bloco 18 por vir depois) */
  .hero{height:100vh}
  .hero__video{display:none}

  /* transições desligadas nos elementos que as declaram */
  .manifesto__tag,.manifesto__line,.pillar,.site-header,.nav__link,
  .btn,.tile img,.process__fill,#preloader,
  .service-card,.service-card__img,.pm-tile,.pm-tile img,
  .pfilter,.lightbox__close,.lightbox__nav{transition:none}
  .tile:hover img{transform:none}
  .pm-tile:hover img{transform:none}
  .service-card:hover{transform:none}
  .service-card:hover .service-card__img{transform:none}

  /* preloader estático: logo visível e linha dourada fixa.
     A animação de segurança (8s) continua, é ela que garante a saída sem JS. */
  .preloader__logo{opacity:1;animation:none}
  .preloader__bar::after{animation:none;transform:none;opacity:.55}
}
