/* ==========================================================================
   VIPER TATTOO
   Modelo de portfólio | Aurora Studio

   Paleta derivada do próprio logo (naja urbana): vermelho tijolo #A2140F,
   pretos quentes e pergaminho. O site original usava neutros FRIOS
   (#f5f5f5, #0a0a0a azulado) contra uma marca quente. Aqui os neutros
   acompanham a marca.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. TOKENS
   -------------------------------------------------------------------------- */
:root{
  /* escuros quentes */
  --ink:      #0B0A09;
  --ink-2:    #16130F;
  --ink-3:    #241E18;

  /* acento único, amostrado do logo */
  --blood:     #A2140F;
  --blood-lit: #C4211A;

  /* claros quentes */
  --bone:   #F3F0E9;
  --paper:  #E9E2D2;

  /* texto */
  --on-dark:    #F2EDE4;
  --on-dark-2:  #A79E90;
  --on-light:   #17130F;
  --on-light-2: #5E564B;

  --line-dark:  rgba(242,237,228,.13);
  --line-light: rgba(23,19,15,.14);

  --r: 2px;
  --ease: cubic-bezier(.23,1,.32,1);

  /* UM sistema de espaçamento, aplicado em TODAS as seções.
     O site original tinha 100/10, 10/10 e 0/0 sem critério. */
  --sect: clamp(80px, 9vw, 132px);
  --shell: 1280px;
  --gut: 24px;

  --z-nav: 50;
}

/* --------------------------------------------------------------------------
   2. BASE
   -------------------------------------------------------------------------- */
*,*::before,*::after{ box-sizing:border-box; }

html{ scroll-behavior:smooth; -webkit-text-size-adjust:100%; }

body{
  margin:0;
  background:var(--ink);
  color:var(--on-light);
  font-family:'Outfit',system-ui,-apple-system,sans-serif;
  font-size:17px;
  line-height:1.62;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

img{ display:block; max-width:100%; height:auto; }
h1,h2,h3{ margin:0; }
p{ margin:0; }
ul,ol,dl{ margin:0; padding:0; list-style:none; }
figure{ margin:0; }
a{ color:inherit; text-decoration:none; }

::selection{ background:var(--blood); color:var(--on-dark); }

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

.skip{
  position:absolute;
  left:-9999px;
  top:0;
  background:var(--blood);
  color:var(--on-dark);
  padding:12px 20px;
  z-index:100;
}
.skip:focus{ left:0; }

.shell{
  width:100%;
  max-width:var(--shell);
  margin-inline:auto;
  padding-inline:var(--gut);
}

/* --------------------------------------------------------------------------
   3. TIPOGRAFIA
   Bricolage Grotesque no display (eixos de largura e peso), Outfit no corpo.

   A correção central: o site original tinha o título do HERO em 33px e os
   títulos de SEÇÃO em 42px no mobile. O nome do estúdio era menor que os
   rótulos. Aqui o h1 sempre domina, em qualquer largura.
   -------------------------------------------------------------------------- */
.eyebrow{
  font-family:'Outfit',sans-serif;
  font-size:12px;
  font-weight:500;
  letter-spacing:.24em;
  text-transform:uppercase;
  color:var(--blood-lit);
  margin-bottom:26px;
}

.h2{
  font-family:'Bricolage Grotesque','Outfit',sans-serif;
  font-variation-settings:'wdth' 88, 'wght' 700;
  font-size:clamp(1.9rem,3.4vw,3rem);
  line-height:1.02;
  letter-spacing:-.025em;
  text-transform:uppercase;
  color:var(--on-light);
}
.h2--light{ color:var(--on-dark); }

.lede{
  margin-top:18px;
  font-size:clamp(1rem,1.2vw,1.1rem);
  color:var(--on-light-2);
  max-width:52ch;
}
.lede--dark{ color:var(--on-dark-2); }

/* --------------------------------------------------------------------------
   4. BOTÕES
   -------------------------------------------------------------------------- */
.btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:9px;
  white-space:nowrap;
  padding:14px 28px;
  border:1px solid transparent;
  border-radius:var(--r);
  font-family:'Outfit',sans-serif;
  font-size:14px;
  font-weight:600;
  letter-spacing:.06em;
  text-transform:uppercase;
  cursor:pointer;
  transition:transform 160ms var(--ease), background-color 200ms ease, border-color 200ms ease;
}
.btn:active{ transform:scale(.975); }

.btn--blood{ background:var(--blood); color:#FCEFEC; }
.btn--ghost{ border-color:rgba(242,237,228,.3); color:var(--on-dark); }

@media (hover:hover) and (pointer:fine){
  .btn--blood:hover{ background:var(--blood-lit); }
  .btn--ghost:hover{ border-color:var(--on-dark); background:rgba(242,237,228,.07); }
}

.btn--sm{ padding:10px 20px; font-size:13px; }
.btn--lg{ padding:17px 34px; font-size:15px; }

.round{
  width:46px; height:46px;
  display:grid;
  place-items:center;
  border:1px solid var(--line-dark);
  border-radius:50%;
  background:none;
  color:var(--on-dark);
  cursor:pointer;
  padding:0;
  transition:background-color 200ms ease, border-color 200ms ease, transform 160ms var(--ease);
}
.round svg{ width:22px; height:22px; }
.round:active{ transform:scale(.94); }
@media (hover:hover) and (pointer:fine){
  .round:hover{ background:var(--blood); border-color:var(--blood); }
}

/* --------------------------------------------------------------------------
   5. NAV
   -------------------------------------------------------------------------- */
.nav{
  position:fixed;
  inset:0 0 auto 0;
  z-index:var(--z-nav);
  /* 88px em vez de 74: o logo cresceu para 66px e precisava de folga.
     Continua abaixo do teto de 80px só na aparência, porque o fundo é
     transparente até sair do hero. */
  height:88px;
  border-bottom:1px solid transparent;
  transition:background-color .3s ease, border-color .3s ease, backdrop-filter .3s ease;
}
.nav.is-stuck{
  background:rgba(11,10,9,.9);
  backdrop-filter:blur(14px);
  border-bottom-color:var(--line-dark);
}

.nav__inner{ height:100%; display:flex; align-items:center; gap:34px; }

.brand{
  display:inline-flex;
  align-items:center;
  gap:11px;
  flex-shrink:0;
  color:var(--on-dark);
  font-family:'Bricolage Grotesque','Outfit',sans-serif;
  font-variation-settings:'wdth' 85, 'wght' 700;
  font-size:19px;
  letter-spacing:.02em;
  text-transform:uppercase;
}
.brand em{ font-style:normal; color:var(--blood-lit); }
.brand img{ width:66px; height:auto; }

.nav__links{
  display:flex;
  gap:30px;
  margin-left:auto;
  font-size:15px;
  color:var(--on-dark-2);
}
.nav__links a{ transition:color 180ms ease; }
@media (hover:hover) and (pointer:fine){
  .nav__links a:hover{ color:var(--on-dark); }
}

.nav__toggle{
  display:none;
  margin-left:auto;
  width:44px; height:44px;
  padding:0;
  background:none;
  border:1px solid var(--line-dark);
  border-radius:var(--r);
  cursor:pointer;
  place-content:center;
}
.nav__toggle span{
  display:block;
  width:19px; height:1.5px;
  background:var(--on-dark);
  margin:3.5px auto;
}

.nav__drawer{
  display:flex;
  flex-direction:column;
  gap:2px;
  padding:14px var(--gut) 26px;
  background:rgba(11,10,9,.98);
  backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line-dark);
}
.nav__drawer a{ color:var(--on-dark); padding:13px 0; font-size:16px; }
.nav__drawer .btn{ margin-top:12px; }
.nav__drawer[hidden]{ display:none; }

/* --------------------------------------------------------------------------
   6. HERO
   O original tinha 810px de altura com o conteúdo ocupando 288px, sobrando
   341px acima e 181px abaixo. Aqui o conteúdo é ancorado embaixo e o título
   cresce até 6.5rem, para competir com a foto em vez de sumir nela.
   -------------------------------------------------------------------------- */
.hero{
  position:relative;
  min-height:100dvh;
  display:flex;
  align-items:flex-end;
  background:var(--ink);
  overflow:hidden;
}

/* Ken Burns: a foto nunca fica parada. Escala e deslocamento lentos, em
   direções opostas nas duas imagens, para a troca não parecer repetição.
   Só transform e opacity: roda na GPU, sem custo de layout. */
.hero__slides{ position:absolute; inset:0; overflow:hidden; }
.hero__img{
  position:absolute; inset:0;
  width:100%; height:100%;
  object-fit:cover;
  object-position:center 35%;
  opacity:0;
  transition:opacity 1.8s ease;
  will-change:transform;
  animation:kenburns-a 26s ease-in-out infinite alternate;
}
.hero__img:nth-child(2){ animation-name:kenburns-b; }
.hero__img.is-on{ opacity:1; }

@keyframes kenburns-a{
  from{ transform:scale(1.05) translate3d(0,0,0); }
  to  { transform:scale(1.17) translate3d(-2%,-1.6%,0); }
}
@keyframes kenburns-b{
  from{ transform:scale(1.16) translate3d(1.8%,1.2%,0); }
  to  { transform:scale(1.04) translate3d(0,0,0); }
}

.hero__scrim{
  position:absolute; inset:0;
  background:
    linear-gradient(to top, var(--ink) 2%, rgba(11,10,9,.72) 38%, rgba(11,10,9,.3) 70%, rgba(11,10,9,.55) 100%),
    linear-gradient(100deg, rgba(11,10,9,.75) 0%, transparent 62%);
}

.hero__inner{
  position:relative;
  padding-bottom:clamp(72px,9vh,116px);
  padding-top:calc(88px + 40px);
}

.hero__title{
  font-family:'Bricolage Grotesque','Outfit',sans-serif;
  font-variation-settings:'wdth' 82, 'wght' 800;
  font-size:clamp(3rem,7.6vw,6.4rem);
  line-height:.94;
  letter-spacing:-.035em;
  text-transform:uppercase;
  color:var(--on-dark);
}
.hero__title em{ font-style:normal; color:var(--blood-lit); }

.hero__sub{
  margin-top:26px;
  max-width:44ch;
  font-size:clamp(1.02rem,1.3vw,1.18rem);
  color:var(--on-dark-2);
}

.hero__actions{
  display:flex;
  flex-wrap:wrap;
  gap:13px;
  margin-top:38px;
}

/* --------------------------------------------------------------------------
   7. MARQUEE  (um por página)
   -------------------------------------------------------------------------- */
.marquee{
  background:var(--blood);
  color:#F7E9E7;
  overflow:hidden;
  padding-block:15px;
  border-block:1px solid rgba(0,0,0,.25);
}
.marquee__track{
  display:flex;
  align-items:center;
  gap:26px;
  width:max-content;
  animation:slide 38s linear infinite;
  font-family:'Bricolage Grotesque','Outfit',sans-serif;
  font-variation-settings:'wdth' 84, 'wght' 700;
  font-size:15px;
  letter-spacing:.14em;
  text-transform:uppercase;
}
.marquee__track i{
  width:5px; height:5px;
  background:currentColor;
  border-radius:50%;
  flex-shrink:0;
}
@keyframes slide{ to{ transform:translateX(-50%); } }

/* --------------------------------------------------------------------------
   8. ARTES  (carrossel com scroll-snap nativo)
   No original o mobile mostrava um card por vez. Aqui sempre sobra a borda
   do próximo, para o dedo saber que há mais.
   -------------------------------------------------------------------------- */
.artes{
  background:var(--ink-2);
  padding-block:var(--sect);
}

.artes__head{ margin-bottom:clamp(36px,4vw,56px); }

/* Setas ancoradas nas laterais do container, na altura do desenho.
   38% cai sobre o pergaminho, não sobre o texto do card. */
.railwrap{ position:relative; }

.railbtn{
  position:absolute;
  top:38%;
  transform:translateY(-50%);
  z-index:2;
  width:52px; height:52px;
  background:rgba(11,10,9,.72);
  backdrop-filter:blur(6px);
  border-color:rgba(242,237,228,.22);
}
.railbtn:active{ transform:translateY(-50%) scale(.94); }
.railbtn--prev{ left:max(8px, calc((100vw - var(--shell)) / 2 - 12px)); }
.railbtn--next{ right:max(8px, calc((100vw - var(--shell)) / 2 - 12px)); }

/* Sem scroll-snap: o trilho anda sozinho, e o snap ficaria brigando com a
   animação a cada quadro, tentando ancorar um card que já saiu do lugar. */
.rail{
  display:flex;
  gap:20px;
  overflow-x:auto;
  padding-inline:max(var(--gut), calc((100vw - var(--shell)) / 2 + var(--gut)));
  padding-block:4px 26px;
  scrollbar-width:none;
}
.rail::-webkit-scrollbar{ display:none; }

.arte{ flex:0 0 clamp(232px, 25vw, 300px); }

/* O pergaminho é o fundo. As artes são desenhos de traço, então usam
   `contain`: recortar destruiria o desenho. */
.arte__paper{
  position:relative;
  aspect-ratio:3/4;
  border-radius:var(--r);
  overflow:hidden;
  background:url('../img/card-bg.jpg') center/cover no-repeat, var(--paper);
  box-shadow:0 20px 44px -22px rgba(0,0,0,.85);
}
.arte__paper img{
  position:absolute;
  inset:11%;
  width:78%; height:78%;
  object-fit:contain;
  mix-blend-mode:multiply;
}

.arte__info{ padding-top:18px; }
.arte__info h3{
  font-family:'Bricolage Grotesque','Outfit',sans-serif;
  font-variation-settings:'wdth' 90, 'wght' 700;
  font-size:1.15rem;
  letter-spacing:-.01em;
  text-transform:uppercase;
  color:var(--on-dark);
}
.arte__meta{
  margin-top:5px;
  font-size:13.5px;
  color:var(--on-dark-2);
}
.arte__preco{
  margin-top:9px;
  font-size:1.05rem;
  font-weight:600;
  color:var(--blood-lit);
}
/* Cada card fecha com sua própria ação: o cliente escolhe a arte e pede
   aquela arte, em vez de rolar de volta até um botão único da seção. */
.btn--card{
  margin-top:14px;
  width:100%;
  padding:12px 18px;
  font-size:13px;
}

.artes__foot{
  margin-top:clamp(24px,3vw,40px);
  padding-top:28px;
  border-top:1px solid var(--line-dark);
}
.artes__foot p{ font-size:14.5px; color:var(--on-dark-2); max-width:52ch; }

/* --------------------------------------------------------------------------
   9. TRABALHOS  (masonry real)
   O original forçava tudo em quadrados de 226x250. Estas fotos vão de 0,67
   a 1,5 de proporção: o masonry preserva o formato de cada peça.
   -------------------------------------------------------------------------- */
.trabalhos{
  background:var(--bone);
  padding-block:var(--sect);
}

.masonry{
  margin-top:clamp(40px,4.5vw,64px);
  columns:3;
  column-gap:20px;
}
.peca{
  break-inside:avoid;
  margin-bottom:20px;
  border-radius:var(--r);
  overflow:hidden;
  background:#DED8CE;
}
.peca img{
  width:100%;
  transition:transform 700ms var(--ease), filter 500ms ease;
}
@media (hover:hover) and (pointer:fine){
  .peca:hover img{ transform:scale(1.035); filter:saturate(1.08); }
}

/* --------------------------------------------------------------------------
   10. ARTISTAS
   Bio alinhada à esquerda: no original eram 8 linhas centralizadas, e cada
   quebra jogava o olho numa margem diferente.
   -------------------------------------------------------------------------- */
.artistas{
  background:var(--ink);
  padding-block:var(--sect);
}

.crew{
  margin-top:clamp(40px,4.5vw,64px);
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:clamp(20px,2.2vw,30px);
}
.artista figure{
  aspect-ratio:4/5;
  border-radius:var(--r);
  overflow:hidden;
  background:var(--ink-3);
}
.artista figure img{
  width:100%; height:100%;
  object-fit:cover;
  filter:grayscale(1) contrast(1.06);
  transition:filter 600ms ease, transform 700ms var(--ease);
}
@media (hover:hover) and (pointer:fine){
  .artista:hover figure img{ filter:grayscale(0) contrast(1); transform:scale(1.03); }
}

.artista__txt{ padding-top:20px; }
.artista__txt h3{
  font-family:'Bricolage Grotesque','Outfit',sans-serif;
  font-variation-settings:'wdth' 90, 'wght' 700;
  font-size:1.28rem;
  letter-spacing:-.015em;
  text-transform:uppercase;
  color:var(--on-dark);
}
.artista__tag{
  margin-top:6px;
  font-size:12.5px;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--blood-lit);
}
.artista__txt p:last-child{
  margin-top:14px;
  font-size:15px;
  color:var(--on-dark-2);
  max-width:38ch;
}

/* --------------------------------------------------------------------------
   11. CONTATO
   -------------------------------------------------------------------------- */
.contato{
  background:var(--ink-2);
  padding-block:var(--sect);
  border-top:1px solid var(--line-dark);
}
.contato__topo{ max-width:56ch; margin-bottom:clamp(44px,5vw,68px); }
.contato__topo .btn{ margin-top:32px; }

.contato__grid{
  display:grid;
  grid-template-columns:1.25fr .75fr;
  gap:clamp(36px,4vw,64px);
  align-items:stretch;
}

.dados{ display:grid; gap:2px; align-content:start; }
.dados li{
  display:grid;
  grid-template-columns:26px 1fr;
  gap:16px;
  align-items:start;
  padding-block:20px;
  border-bottom:1px solid var(--line-dark);
}
.dados li:first-child{ border-top:1px solid var(--line-dark); }
/* Ícones vieram em traço preto. Recoloridos no arquivo para o tom claro
   da paleta: o vermelho da marca daria 2,36:1 em linha fina, abaixo do
   mínimo de 3:1 para elemento gráfico. */
.dados img{ width:26px; height:26px; margin-top:2px; opacity:.85; }
.dados__rot{
  font-size:11.5px;
  letter-spacing:.2em;
  text-transform:uppercase;
  color:var(--blood-lit);
  margin-bottom:6px;
}
.dados p:not(.dados__rot){
  font-size:15.5px;
  color:var(--on-dark);
  line-height:1.5;
}
.dados a{ border-bottom:1px solid var(--line-dark); }
@media (hover:hover) and (pointer:fine){
  .dados a:hover{ border-bottom-color:var(--blood-lit); }
}

/* O mapa é referência, não conteúdo: fica na coluna menor e não puxa a
   altura da seção. A informação que converte são os dados ao lado. */
.mapa{
  position:relative;
  min-height:0;
  height:100%;
  border-radius:var(--r);
  overflow:hidden;
  border:1px solid var(--line-dark);
  background:var(--ink-3);
}
.mapa iframe{
  position:absolute; inset:0;
  width:100%; height:100%;
  border:0;
  /* O mapa do Google chega branco e brilhante no meio de uma seção quase
     preta. Invertido e dessaturado, ele entra na paleta em vez de furar. */
  filter:invert(.92) hue-rotate(180deg) saturate(.5) contrast(.9);
}

/* --------------------------------------------------------------------------
   12. FOOTER
   -------------------------------------------------------------------------- */
.foot{
  background:var(--ink);
  padding-block:34px 42px;
  border-top:1px solid var(--line-dark);
}
.foot__inner{
  display:flex;
  align-items:center;
  gap:28px;
  flex-wrap:wrap;
}
.brand--foot{ font-size:17px; }
.brand--foot img{ width:44px; }

.foot__links{
  display:flex;
  gap:24px;
  margin-left:auto;
  font-size:14.5px;
  color:var(--on-dark-2);
}
@media (hover:hover) and (pointer:fine){
  .foot__links a:hover{ color:var(--on-dark); }
}

.foot__legal{
  width:100%;
  padding-top:24px;
  border-top:1px solid var(--line-dark);
  font-size:13px;
  color:var(--on-dark-2);
}

/* --------------------------------------------------------------------------
   13. REVEAL
   -------------------------------------------------------------------------- */
.reveal{
  opacity:0;
  transform:translateY(20px);
  transition:opacity .7s var(--ease), transform .7s var(--ease);
}
.reveal.is-in{ opacity:1; transform:none; }

/* --------------------------------------------------------------------------
   14. RESPONSIVO
   -------------------------------------------------------------------------- */
@media (max-width:1024px){
  .masonry{ columns:2; }
  .crew{ grid-template-columns:repeat(2,1fr); }
  .contato__grid{ grid-template-columns:1fr; }
  .mapa{ min-height:300px; }
  /* Sem folga lateral no container: as setas entram por cima do trilho. */
  .railbtn--prev{ left:10px; }
  .railbtn--next{ right:10px; }
}

@media (max-width:860px){
  .nav__links,.nav__cta{ display:none; }
  .nav__toggle{ display:grid; }
}

@media (max-width:640px){
  :root{ --gut:20px; }
  body{ font-size:16px; }

  .hero{ min-height:88svh; }
  .hero__inner{ padding-top:calc(88px + 76px); }
  .hero__actions .btn{ flex:1 1 auto; }

  /* No toque o dedo arrasta: seta vira estorvo em cima do conteúdo. */
  .railbtn{ display:none; }
  /* Sobra a borda do próximo card: sinaliza que o trilho continua. */
  .arte{ flex:0 0 76%; }

  .masonry{ columns:2; column-gap:12px; }
  .peca{ margin-bottom:12px; }

  /* Empilhado com foto em largura cheia, esta seção sozinha somava 2107px:
     35% da página. Em linha, cai para cerca de um terço disso. */
  .crew{ grid-template-columns:1fr; gap:0; }
  .artista{
    display:grid;
    grid-template-columns:112px 1fr;
    gap:18px;
    align-items:start;
    padding-block:24px;
    border-bottom:1px solid var(--line-dark);
  }
  .artista:first-child{ border-top:1px solid var(--line-dark); }
  .artista figure{ aspect-ratio:3/4; }
  .artista__txt{ padding-top:0; }
  .artista__txt h3{ font-size:1.12rem; }
  .artista__txt p:last-child{ max-width:none; margin-top:10px; font-size:14.5px; }

  .foot__links{ margin-left:0; flex-wrap:wrap; gap:14px 20px; }
}

/* --------------------------------------------------------------------------
   15. MOVIMENTO REDUZIDO
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  html{ scroll-behavior:auto; }
  *,*::before,*::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
  .reveal{ opacity:1; transform:none; }
  .marquee__track{ animation:none; }
  /* Ken Burns é movimento contínuo: some por completo, não fica lento. */
  .hero__img{ animation:none; transform:scale(1.04); }
}
