html, body { margin: 0; padding: 0; background: #ffffff; }
* { box-sizing: border-box; }
body { -webkit-font-smoothing: antialiased; }
a { color: inherit; text-decoration: none; }
a:hover { color: #6f6b66; }
::selection { background: #1c1b1a; color: #fff; }

/* fotos das seções — preenchem o container pai (position:relative) */
.slot { position: absolute; inset: 0; width: 100%; height: 100%;
        object-fit: cover; display: block; }
.slot--contain { object-fit: contain; }
.slot--pad { padding: 26px 18px; }

/* Estados hover (vinham de style-hover no design).
   Estas propriedades NÃO podem voltar para o style="" inline: inline vence
   qualquer seletor, e o :hover deixaria de ter efeito. */

/* Links do menu: linha branca que cresce da esquerda.
   :active cobre o toque, :focus-visible cobre a navegação por teclado. */
.navlink { position: relative; opacity: 0.94; transition: opacity 240ms ease; }
.navlink::after {
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: -6px;
  height: 1px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 420ms cubic-bezier(0.22, 1, 0.36, 1);
}
/* o `a:hover` global pinta de cinza-escuro; aqui o fundo é a foto do hero */
.navlink:hover,
.navlink:focus-visible,
.navlink:active { opacity: 1; color: #fff; }
.navlink:hover::after,
.navlink:focus-visible::after,
.navlink:active::after { transform: scaleX(1); }

.pill, .pill-lg { transition: transform 240ms ease; }
.pill:hover { transform: translateY(-1px); color: #1c1b1a; }
.pill-lg:hover { transform: translateY(-2px); color: #1c1b1a; }

.toggle { border: 1px solid #dedbd7; color: #77736e;
          transition: border-color 240ms ease, color 240ms ease; }
.toggle:hover { border-color: #1c1b1a; color: #1c1b1a; }

/* Portfólio: o card cresce empurrando os vizinhos (flex-grow é animável).
   Curva ease-in-out: arranca e assenta devagar nas duas pontas, o que
   também suaviza o regresso quando o rato sai. */
.tile { flex: 1 1 0; transition: flex-grow 1100ms cubic-bezier(0.65, 0, 0.35, 1); }
.tile:hover { flex-grow: 2.35; }

/* Serviços de Estimativa: o card escolhido abre e os outros encolhem.
   Por clique/toque, não por hover — funciona igual em rato e dedo. */
.est-card {
  flex: 1 1 0;
  transition: flex-grow 620ms cubic-bezier(0.22, 1, 0.36, 1);
}
.est-card.is-open { flex-grow: 2; }
.est-card:focus-visible { outline: 2px solid #fff; outline-offset: -4px; }

/* a descrição longa só cabe no card aberto */
.est-card .est-desc {
  opacity: 0;
  transition: opacity 300ms ease;
}
.est-card.is-open .est-desc { opacity: 1; transition-delay: 180ms; }

.f-lead { color: #cfcbc6; transition: color 240ms ease; }
.f-lead:hover { color: #fff; }

.f-social { border: 1px solid rgba(255,255,255,0.28); color: #e6e3df;
            transition: border-color 240ms ease, color 240ms ease; }
.f-social:hover { border-color: #fff; color: #fff; }

.f-link { transition: color 240ms ease; }
.f-link:hover { color: #fff; }

.allbtn { background: #f4f3f1; transition: background 240ms ease; }
.allbtn:hover { background: #eae7e3; }

/* Quem pede menos movimento no sistema recebe a página sem transições.
   O JS complementa isto desligando o Lenis e as animações do GSAP. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ===========================================================================
   MENU MOBILE
   O design original não tinha alternativa ao menu horizontal, por isso
   abaixo de 900px não havia forma de navegar. O painel segue a linguagem
   do site: fundo escuro do rodapé, Jost, letter-spacing largo.
   =========================================================================== */

.nav-toggle {
  display: none;                    /* só existe em ecrãs estreitos */
  flex: 0 0 auto;
  width: 44px; height: 44px;        /* alvo de toque mínimo */
  align-items: center; justify-content: center;
  flex-direction: column; gap: 5px;
  background: transparent; border: 0; padding: 0;
  cursor: pointer;
  z-index: 2;
}
.nav-toggle span {
  display: block;
  width: 22px; height: 1px;
  background: #fff;
  transition: transform 340ms cubic-bezier(0.65, 0, 0.35, 1),
              opacity 200ms ease;
}
/* as duas barras cruzam-se e formam um × */
.nav-toggle[aria-expanded="true"] span:first-child { transform: translateY(3px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] span:last-child  { transform: translateY(-3px) rotate(-45deg); }

.nav-panel {
  display: none;
  position: fixed;
  inset: 0;
  padding: 104px clamp(24px, 7vw, 60px) 40px;
  background: rgba(8, 7, 6, 0.97);
  -webkit-backdrop-filter: saturate(140%) blur(18px);
  backdrop-filter: saturate(140%) blur(18px);
  flex-direction: column;
  gap: 4px;
  overflow-y: auto;
  overscroll-behavior: contain;     /* não arrasta a página por baixo */
  /* Vive como filho directo do <body>, não dentro do <nav>: o nav ganha
     backdrop-filter ao rolar, e isso torna-o containing block dos
     descendentes fixed — o painel ficava confinado à altura da barra.
     Abaixo do nav (60) para o logo e o hambúrguer ficarem por cima. */
  z-index: 55;
  /* fechado tem de deixar de existir para o toque: opacity:0 sozinho
     continuaria a cobrir o ecrã e a engolir todos os cliques */
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 320ms ease, visibility 0s linear 320ms;
}
.nav-panel.is-open {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition: opacity 320ms ease;
}

/* logo e hambúrguer ficam por cima do painel */
nav > a:first-child { position: relative; z-index: 2; }

.nav-panel a {
  display: flex;
  align-items: center;
  min-height: 56px;                 /* confortável para o polegar */
  padding: 4px 0;
  font-size: 20px;
  font-weight: 300;
  letter-spacing: 0.02em;
  color: #f2efec;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.nav-panel a:active { color: #fff; }

.nav-panel .nav-panel-cta {
  justify-content: center;
  gap: 10px;
  margin-top: 28px;
  border: 0;
  border-radius: 999px;
  background: #fff;
  color: #1c1b1a;
  font-size: 16px;
}

/* ===========================================================================
   BREAKPOINTS
   =========================================================================== */

/* --- portátil pequeno: o hero e as grelhas largas começam a apertar ------ */
@media (max-width: 1100px) {
  .navlinks { gap: 24px !important; font-size: 14px !important; }
  .services-body { margin-left: 48px !important; }
  .portfolio-strip { height: 420px !important; }
}

/* --- tablet e abaixo: uma coluna, menu passa a painel -------------------- */
@media (max-width: 900px) {
  .navlinks { display: none !important; }
  .nav-toggle { display: flex; }
  .nav-panel { display: flex; }

  .g-about, .g-footer { grid-template-columns: minmax(0,1fr) !important; }
  .g-about { gap: 40px !important; }
  .g-footer { gap: 48px !important; }
  .g-foot-cols { grid-template-columns: repeat(2, minmax(0,1fr)) !important; gap: 32px !important; }

  /* Em coluna, o `flex: 1 1 0` destes cards passa a valer como ALTURA base 0
     e eles colapsam para 0px. Aqui a altura tem de vir do `height`. */
  .g-est { flex-direction: column; }
  .est-card, .est-card.is-open { flex: 0 0 auto; }
  .est-card .est-desc { opacity: 1; }

  .services-body { margin-left: 0 !important; }
  .services-row { grid-template-columns: minmax(0,1fr) !important; gap: 10px !important; }

  .portfolio-strip { flex-direction: column; height: auto !important; }
  .tile, .tile:hover { flex: 0 0 auto; }        /* mesmo motivo */
  .portfolio-strip > div { height: 260px; }

  .about-art { height: 300px !important; margin-top: 0 !important; }
  .footer-art { height: 340px !important; }
}

/* --- telemóvel: respiração vertical menor, tudo ao alcance do polegar ---- */
@media (max-width: 640px) {
  /* o design foi desenhado para desktop; estes espaços tornam-se vazio morto */
  section { padding-top: 68px !important; padding-bottom: 24px !important; }
  #top { padding: 0 !important; }
  .faq-section { padding-bottom: 72px !important; }
  .footer-inner { padding-top: 72px !important; }

  /* o CTA vive no painel; na barra só ficam logo e hambúrguer */
  nav .pill { display: none !important; }

  .hero-copy { padding: 0 24px 56px !important; gap: 24px !important; }

  .brand-grid { max-width: 100% !important; }
  .brand-cell { height: 128px !important; }

  .est-card { height: 260px !important; }
  .portfolio-strip > div { height: 220px; }
  .about-art { height: 240px !important; }
  .footer-art { height: 260px !important; border-radius: 16px !important; }

  /* o texto do rodapé não pode empurrar a página para o lado */
  .f-lead { padding: 24px 0 !important; word-break: break-word; }
  .g-foot-cols { grid-template-columns: minmax(0,1fr) !important; padding: 48px 0 56px !important; }
}

/* --- ecrãs muito estreitos (360px e abaixo) ----------------------------- */
@media (max-width: 400px) {
  .navlinks, nav .pill { display: none !important; }
  .brand-grid { grid-template-columns: repeat(2, minmax(0,1fr)) !important; }
  .brand-cell:last-child { border-right: 0 !important; }
  .nav-panel a { font-size: 18px; min-height: 52px; }
}

/* --- ecrã baixo e deitado: o hero a 100svh não deixa ver nada ------------ */
@media (max-height: 520px) and (orientation: landscape) {
  #top { height: auto !important; min-height: 420px !important; }
  .nav-panel { padding-top: 72px; }
}

/* a resposta do FAQ: no desktop recua à direita, no telemóvel usa a largura */
.faq-answer { padding: 0 90px 26px 26px; }
@media (max-width: 640px) {
  .faq-answer { padding: 0 22px 24px 22px; }
}

/* ---------------------------------------------------------------------------
   Últimos pontos que transbordavam a 320–360px de largura.
   O texto do design foi escrito para desktop e algumas linhas são longas:
   "Arquitetura no México | Estimativas dos EUA", o e-mail, os títulos.
--------------------------------------------------------------------------- */
@media (max-width: 640px) {
  h1, h2, h3, p, a, span { overflow-wrap: break-word; }
  section h2 { font-size: clamp(23px, 6.4vw, 32px) !important; }
  .hero-badge { font-size: 12px !important; padding: 7px 14px !important; line-height: 1.4; }
  .hero-copy h1 { font-size: clamp(27px, 7.6vw, 38px) !important; }
}

/* ---------------------------------------------------------------------------
   CSS oficial do Lenis. Não estamos a importar o lenis.css do pacote, mas
   estas regras são necessárias — sobretudo com syncTouch ligado, em que o
   Lenis conduz o scroll do dedo e o do browser tem de sair da frente.
--------------------------------------------------------------------------- */
html.lenis, html.lenis body { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-smooth [data-lenis-prevent] { overscroll-behavior: contain; }
.lenis.lenis-stopped { overflow: hidden; }
.lenis.lenis-scrolling iframe { pointer-events: none; }
