/* ==========================================================================
   Cuoncient agency — portfólio
   --------------------------------------------------------------------------
   Este arquivo espelha o design "CUONCIENT — Portfólio (site)" no Canva.
   Cada seção do HTML carrega data-canva-page="N" apontando para a página N.
   Ver MAPPING.md para o contrato completo.
   ========================================================================== */

/* ==========================================================================
   TOKENS — é aqui que as mudanças do Canva aterrissam
   ========================================================================== */
:root{
  /* --- cores: fundo e texto --------------------------------------------- */
  --bg:#050506;              /* fundo das páginas escuras do Canva */
  --bg-2:#0a0a0c;            /* fundo de blocos elevados */
  --ink:#ffffff;             /* texto principal */
  --ink-2:#c9c9cf;           /* corpo de texto (cinza claro do Canva) */
  --ink-3:#9a9aa2;           /* kicker / legendas */
  --ink-4:#8c8c93;           /* eyebrow / tags */
  --line:rgba(255,255,255,.12);
  --line-soft:rgba(255,255,255,.07);

  /* --- cores: destaque --------------------------------------------------- */
  --glow-rgb:26,165,184;     /* ciano do brilho da capa */
  --glow-deep-rgb:15,125,144;
  --glow-dark-rgb:10,60,80;

  /* --- cores por case (usadas no brilho atrás de cada mockup) ------------ */
  --case-art7:rgba(28,71,196,.34);
  --case-duact:rgba(224,31,38,.30);
  --case-vbike:rgba(233,236,42,.26);
  --case-glow:rgba(var(--glow-rgb),.30);  /* padrão; cada case sobrescreve inline */

  /* --- tipografia -------------------------------------------------------- */
  --font:"Archivo","Helvetica Neue",Helvetica,Arial,sans-serif;
  --fs-hero:clamp(42px,8.4vw,110px);      /* h1 da capa */
  --fs-section:clamp(38px,6.6vw,86px);    /* títulos de seção (Design, Devop…) */
  --fs-case:clamp(30px,4vw,50px);         /* nome do cliente nos cases */
  --fs-body:16.5px;
  --fs-small:15.5px;
  --fs-eyebrow:11px;

  /* --- ritmo ------------------------------------------------------------- */
  --pad-section:120px;
  --gap-col:64px;
  --radius:18px;
  --maxw:1240px;
  --ease:cubic-bezier(.22,.61,.36,1);
}

*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}

body{
  margin:0;
  background:var(--bg);
  color:var(--ink);
  font-family:var(--font);
  font-size:16px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  /* Aqui havia overflow-x:hidden. Ele existia para engolir a pilula do
     orcamento, que furava a calha do .wrap no celular — e engolia tambem
     qualquer outro estouro, calado. A pilula foi resolvida na origem (a
     barra nao carrega mais links no celular), e uma varredura de 320px a
     1920px nao acha mais nada transbordando, entao o curativo saiu. Sem ele,
     um estouro futuro aparece como barra de rolagem em vez de sumir sem
     aviso — e position:sticky volta a funcionar nos descendentes. O brilho
     da capa continua contido pelo overflow:hidden do proprio .hero. */
}

img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}

.wrap{width:min(100% - 48px,var(--maxw));margin-inline:auto}

/* ---------- tipografia utilitária ---------- */
.eyebrow{
  font-size:var(--fs-eyebrow);letter-spacing:.22em;text-transform:uppercase;
  color:var(--ink-4);font-weight:600;
}
.lead{color:var(--ink-2);font-size:var(--fs-body);max-width:52ch}
.lead strong{color:var(--ink);font-weight:600}

.section-title{
  font-size:var(--fs-section);
  line-height:.94;letter-spacing:-.035em;font-weight:800;margin:0;
}
.rule{height:1px;background:var(--line);border:0;margin:0}

/* ---------- botões ---------- */
.btn{
  display:inline-flex;align-items:center;gap:10px;
  padding:15px 30px;border-radius:999px;
  font-size:12px;letter-spacing:.16em;text-transform:uppercase;font-weight:700;
  background:var(--ink);color:#0a0a0a;border:1px solid var(--ink);
  transition:transform .35s var(--ease),background .35s var(--ease),color .35s var(--ease);
  white-space:nowrap;
}
.btn:hover{transform:translateY(-2px);background:transparent;color:var(--ink)}
.btn--ghost{background:transparent;color:var(--ink);border-color:var(--line)}
.btn--ghost:hover{background:var(--ink);color:#0a0a0a;border-color:var(--ink)}

/* ==========================================================================
   NAV
   ========================================================================== */

/* ---------- pular para o conteudo ----------
   Fica fora da tela ate receber foco pelo teclado. E o primeiro elemento do
   <body>, entao e o primeiro Tab de quem chega. */
.skip{
  position:fixed;top:0;left:0;z-index:100;
  padding:15px 24px;border-radius:0 0 12px 0;
  background:var(--ink);color:#0a0a0a;
  font-size:12px;letter-spacing:.16em;text-transform:uppercase;font-weight:700;
  transform:translateY(-120%);
  transition:transform .25s var(--ease);
}
.skip:focus{transform:none}
.nav{
  position:fixed;inset:0 0 auto 0;z-index:60;padding:18px 0;
  backdrop-filter:blur(14px);
  background:linear-gradient(to bottom,rgba(5,5,6,.92),rgba(5,5,6,0));
  transition:background .4s var(--ease);
}
.nav.is-stuck{background:rgba(5,5,6,.9);border-bottom:1px solid var(--line-soft);padding:12px 0}
.nav__inner{display:flex;align-items:center;justify-content:space-between;gap:24px;position:relative}

/* No desktop o wrapper do menu nao existe visualmente: display:contents faz
   os tres filhos (links, idioma, botao) cairem direto no flex da barra,
   exatamente onde sempre estiveram. Abaixo de 980px ele vira o painel. */
.nav__menu{display:contents}
.brand{position:relative;z-index:2}

/* ---------- botao do menu ----------
   So aparece no celular. As tres barras viram um X quando o painel abre: o
   estado mora no aria-expanded do proprio botao, entao marcacao e visual
   nunca saem de sincronia. */
.nav__toggle{
  display:none;position:relative;z-index:2;
  width:44px;height:44px;flex:none;margin-right:-10px;
  align-items:center;justify-content:center;
  background:none;border:0;padding:0;cursor:pointer;color:var(--ink);
}
.nav__burger{position:relative;display:block;width:21px;height:1.5px}
.nav__burger,.nav__burger::before,.nav__burger::after{
  background:currentColor;border-radius:2px;
  transition:transform .3s var(--ease),background-color .2s var(--ease);
}
.nav__burger::before,.nav__burger::after{content:"";position:absolute;left:0;width:100%;height:100%}
.nav__burger::before{top:-6px}
.nav__burger::after{top:6px}
.nav__toggle[aria-expanded="true"] .nav__burger{background:transparent}
.nav__toggle[aria-expanded="true"] .nav__burger::before{transform:translateY(6px) rotate(45deg)}
.nav__toggle[aria-expanded="true"] .nav__burger::after{transform:translateY(-6px) rotate(-45deg)}
.nav__toggle:focus-visible{outline:1px solid var(--ink-3);outline-offset:2px;border-radius:8px}
.nav__links{display:flex;gap:30px;font-size:12.5px;letter-spacing:.08em;color:var(--ink-2)}
.nav__links a{transition:color .3s var(--ease)}
.nav__links a:hover{color:var(--ink)}

/* ---------- seletor de idioma ----------
   Discreto de propósito: sem caixa, sem fundo, só o globo e as duas siglas.
   O idioma em uso fica branco; o outro fica apagado e clicável. */
.lang{display:flex;align-items:center;gap:5px;flex:none;color:var(--ink-4)}
.lang__globo{
  width:14px;height:14px;flex:none;margin-right:2px;
  fill:none;stroke:currentColor;stroke-width:1.5;
  stroke-linecap:round;opacity:.75;
}
.lang__op{
  background:none;border:0;padding:2px 1px;cursor:pointer;font:inherit;
  font-size:11px;letter-spacing:.1em;font-weight:600;color:var(--ink-4);
  transition:color .3s var(--ease);
}
.lang__op:hover{color:var(--ink-2)}
.lang__op[aria-pressed="true"]{color:var(--ink);cursor:default}
.lang__sep{font-size:10px;opacity:.4}
.lang__op:focus-visible{outline:1px solid var(--ink-3);outline-offset:2px;border-radius:3px}

/* o <svg> do topo do body só guarda o <symbol> da marca — não deve ocupar
   espaço nem aparecer */
.sprite{position:absolute;width:0;height:0;overflow:hidden}

.brand{display:flex;align-items:center;gap:11px}
.brand__mark{width:26px;height:26px;flex:none}
.brand__text{display:flex;flex-direction:column;line-height:1}
.brand__name{font-size:19px;font-weight:600;letter-spacing:-.02em}
.brand__sub{font-size:8.5px;letter-spacing:.42em;color:var(--ink-4);text-transform:lowercase;margin-top:3px}

/* ==========================================================================
   1 · CAPA
   ========================================================================== */
.hero{position:relative;min-height:100svh;display:flex;align-items:center;overflow:hidden}
.hero__glow{
  position:absolute;top:50%;right:-6%;transform:translateY(-50%);
  width:min(78vw,980px);aspect-ratio:1;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle at 50% 50%,
    rgba(var(--glow-rgb),.55) 0%,rgba(var(--glow-deep-rgb),.30) 32%,
    rgba(var(--glow-dark-rgb),.12) 55%,transparent 72%);
  filter:blur(28px);
}
.hero__grain{
  position:absolute;inset:0;pointer-events:none;opacity:.35;
  background-image:radial-gradient(rgba(255,255,255,.05) 1px,transparent 1px);
  background-size:3px 3px;
}
.hero__inner{position:relative;z-index:2;padding:150px 0 90px}
.hero__logo{margin-bottom:52px}
.hero__logo .brand{flex-direction:column;gap:8px;align-items:flex-start}
.hero__logo .brand__mark{width:34px;height:34px}
.hero__logo .brand__name{font-size:34px}
.hero__logo .brand__sub{font-size:9.5px;letter-spacing:.5em}

.hero h1{
  margin:0;font-weight:300;font-size:var(--fs-hero);
  line-height:.96;letter-spacing:-.045em;
}
.hero h1 .thin{font-weight:300}
.hero h1 .dim{color:rgba(255,255,255,.72);font-weight:300}
.hero h1 .bold{display:block;font-weight:800}

.hero__copy{margin:34px 0 40px;color:var(--ink-2);max-width:40ch;font-size:var(--fs-small);line-height:1.75}
.hero__copy b{color:var(--ink);font-weight:600}

.hero__scroll{
  position:absolute;bottom:34px;left:0;right:0;z-index:2;
  display:flex;justify-content:space-between;align-items:flex-end;
  font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-4);
}

/* ==========================================================================
   2 · MANIFESTO + VENN
   ========================================================================== */
.manifesto{padding:var(--pad-section) 0;border-top:1px solid var(--line-soft);position:relative;overflow:hidden}
.manifesto__grid{display:grid;grid-template-columns:1.05fr 1fr;gap:70px;align-items:center}
.manifesto__text p{color:var(--ink-2);font-size:var(--fs-body);line-height:1.8;margin:0 0 22px}
.manifesto__text p b{color:var(--ink);font-weight:600}
.manifesto__ghost{
  position:absolute;right:4%;bottom:22px;z-index:0;pointer-events:none;
  font-size:clamp(30px,5.4vw,78px);line-height:.95;letter-spacing:-.04em;font-weight:300;
  color:rgba(255,255,255,.05);text-align:right;max-width:92vw;
}
.manifesto__ghost b{font-weight:800;display:block}

/* container-type para os rótulos poderem ser medidos em cqw, igual aos
   mockups dos cases: assim eles encolhem junto com o diagrama em vez de
   estourar a composição no celular. 100cqw = largura do .venn. */
.venn{position:relative;width:100%;aspect-ratio:1;max-width:520px;margin-inline:auto;container-type:inline-size}
.venn__c{
  position:absolute;width:58%;aspect-ratio:1;border-radius:50%;
  border:1px solid rgba(255,255,255,.34);
  transition:opacity .35s var(--ease),border-color .35s var(--ease),box-shadow .35s var(--ease);
}
.venn__c--t{top:0;left:21%}
.venn__c--b{bottom:0;left:21%}
.venn__c--l{left:0;top:21%}
.venn__c--r{right:0;top:21%}
.venn__lab{
  position:absolute;transform:translate(-50%,-50%);
  /* o piso em px é o que impede o texto de virar ilegível no celular; o teto
     é o tamanho do design no desktop */
  font-size:clamp(11px,2.4cqw,12.5px);
  color:rgba(255,255,255,.9);white-space:nowrap;text-align:center;
  transition:opacity .35s var(--ease),color .35s var(--ease);
}
.venn__lab--sm{font-size:clamp(11px,2.15cqw,11.5px);color:rgba(255,255,255,.74)}
.venn__lab--xs{font-size:clamp(11px,2.2cqw,11.5px);color:rgba(255,255,255,.62)}

/* ---------- as quatro disciplinas são botões ---------- */
.venn__disc{
  background:none;border:0;padding:9px 12px;margin:0;cursor:pointer;
  font:inherit;font-size:clamp(11px,2.4cqw,12.5px);
  color:rgba(255,255,255,.9);line-height:1.2;
}
.venn__disc:focus-visible{
  outline:2px solid rgba(var(--glow-rgb),.85);outline-offset:2px;border-radius:6px;
}

/* ---------- estado aceso ----------
   Enquanto uma disciplina está ativa, tudo apaga e só volta quem pertence ao
   círculo dela. O ~= casa item a item na lista do data-venn. */
.venn[data-ativo] .venn__c{opacity:.22}
.venn[data-ativo] .venn__lab{opacity:.24}
.venn[data-ativo="t"] .venn__c--t,
.venn[data-ativo="b"] .venn__c--b,
.venn[data-ativo="l"] .venn__c--l,
.venn[data-ativo="r"] .venn__c--r{
  opacity:1;border-color:rgba(var(--glow-rgb),.9);
  box-shadow:0 0 34px -6px rgba(var(--glow-rgb),.45),inset 0 0 40px -18px rgba(var(--glow-rgb),.6);
}
.venn[data-ativo="t"] .venn__lab[data-venn~="t"],
.venn[data-ativo="b"] .venn__lab[data-venn~="b"],
.venn[data-ativo="l"] .venn__lab[data-venn~="l"],
.venn[data-ativo="r"] .venn__lab[data-venn~="r"]{opacity:1;color:#fff}
.venn[data-ativo] .venn__disc[aria-pressed="true"]{color:rgb(var(--glow-rgb))}

/* ---------- miolo ---------- */
.venn__core{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:19%;aspect-ratio:1;border-radius:50%;
  background:radial-gradient(circle,rgba(var(--glow-rgb),.4),rgba(5,5,6,.9) 70%);
  border:1px solid rgba(255,255,255,.5);display:grid;place-items:center;
  transition:box-shadow .45s var(--ease);
}
.venn[data-ativo] .venn__core{box-shadow:0 0 40px -4px rgba(var(--glow-rgb),.5)}
.venn__mark{width:52%;height:52%;color:var(--ink)}

/* frase só para leitor de tela */
.venn__fala{
  position:absolute;width:1px;height:1px;margin:0;padding:0;
  overflow:hidden;clip-path:inset(50%);white-space:nowrap;
}

/* ==========================================================================
   3 / 4 / 9 · DISCIPLINAS (Design, Social Media, Anúncios)
   Uma seção inteira por página do Canva.
   ========================================================================== */
.disc{padding:var(--pad-section) 0;border-top:1px solid var(--line-soft)}
.disc__head{display:flex;align-items:flex-end;gap:34px;margin-bottom:12px}
.disc__head .section-title{flex:none}
.disc__head .rule{flex:1;margin-bottom:26px}
.disc__grid{display:grid;grid-template-columns:.9fr 1.1fr;gap:var(--gap-col);align-items:start;padding-top:44px}
.disc__body p{color:var(--ink-2);font-size:var(--fs-body);line-height:1.8;margin:0 0 24px;max-width:46ch}
.disc__body p b{color:var(--ink);font-weight:600}
.disc__aside{
  border:1px solid var(--line-soft);border-radius:var(--radius);
  background:linear-gradient(150deg,rgba(255,255,255,.04),rgba(255,255,255,.01));
  padding:34px 32px;
}
.disc__aside h3{margin:0 0 18px;font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-4);font-weight:600}
.disc__list{list-style:none;margin:0;padding:0;display:grid;gap:14px}
.disc__list li{
  display:flex;gap:14px;align-items:baseline;
  color:var(--ink-2);font-size:15px;line-height:1.55;
  padding-bottom:14px;border-bottom:1px solid var(--line-soft);
}
.disc__list li:last-child{border-bottom:0;padding-bottom:0}
.disc__list i{font-style:normal;color:var(--ink-4);font-size:11px;letter-spacing:.1em;flex:none;width:22px}

/* ---------- galeria de design gráfico (dentro da seção Design) ---------- */
.dgal{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));
  gap:18px;margin-top:56px;
}
.dgal__item{margin:0}
.dgal__item img{
  /* height:auto é obrigatório: sem ele o atributo height="600" do HTML vence
     e a proporção 4/5 é ignorada, esticando o card */
  width:100%;height:auto;aspect-ratio:4/5;object-fit:cover;display:block;
  border-radius:10px;border:1px solid var(--line-soft);background:#0e1016;
  transition:transform .5s var(--ease),border-color .5s var(--ease);
}
.dgal__item:hover img{transform:translateY(-3px);border-color:var(--line)}
.dgal__item figcaption{padding-top:12px;line-height:1.45}
.dgal__item figcaption b{display:block;font-size:13.5px;font-weight:600;color:var(--ink)}
.dgal__item figcaption span{font-size:12px;color:var(--ink-4)}

/* ---------- galeria de vídeo (dentro da seção Social Media) ---------- */
.vgal{
  /* 41/59 não é chute: é a proporção em que a coluna do vídeo vertical (9:16)
     fica exatamente da mesma altura que os dois horizontais (16:9) empilhados
     ao lado, legendas incluídas. Qualquer outra divisão deixa um buraco. */
  display:grid;grid-template-columns:41fr 59fr;
  gap:20px;margin-top:56px;align-items:start;
}
.vgal__item--tall{grid-row:span 2}
.vgal__item{margin:0}
.vgal__v{
  /* --ar vem inline em cada vídeo, porque um é vertical e dois horizontais.
     height:auto pelo mesmo motivo das imagens: sem ele o vídeo ignora a proporção */
  width:100%;height:auto;aspect-ratio:var(--ar,16/9);object-fit:cover;display:block;
  border-radius:10px;border:1px solid var(--line-soft);background:#0e1016;
}
.vgal__item figcaption{padding-top:12px;line-height:1.45}
.vgal__item figcaption b{display:block;font-size:13.5px;font-weight:600;color:var(--ink)}
.vgal__item figcaption span{font-size:12px;color:var(--ink-4)}

/* ==========================================================================
   5 · DEVOP (abertura dos cases)
   ========================================================================== */
.devop{padding:var(--pad-section) 0 30px;border-top:1px solid var(--line-soft)}
.devop__head{display:flex;align-items:flex-end;justify-content:space-between;gap:40px;flex-wrap:wrap;margin-bottom:14px}
.devop__head .lead{margin:0}

/* ==========================================================================
   6 / 7 / 8 · CASES
   ========================================================================== */
.case{
  padding:80px 0;border-top:1px solid var(--line-soft);
  display:grid;grid-template-columns:.85fr 1.15fr;gap:var(--gap-col);align-items:center;
}
.case--flip .case__media{order:-1}
.case__index{font-size:var(--fs-eyebrow);letter-spacing:.22em;color:var(--ink-4);font-weight:600;margin-bottom:18px}
.case__name{font-size:var(--fs-case);line-height:1;letter-spacing:-.035em;font-weight:800;margin:0 0 6px}
.case__kicker{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3);margin-bottom:22px}
.case__desc{color:var(--ink-2);font-size:var(--fs-small);line-height:1.75;margin:0 0 26px;max-width:44ch}
.case__tags{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:28px}
.tag{
  font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  padding:7px 13px;border:1px solid var(--line);border-radius:999px;color:var(--ink-2);
}
.case__link{
  display:inline-flex;align-items:center;gap:9px;font-size:12px;letter-spacing:.14em;
  text-transform:uppercase;font-weight:700;padding-bottom:6px;border-bottom:1px solid var(--line);
  transition:border-color .3s var(--ease),gap .3s var(--ease);
}
.case__link:hover{border-color:var(--ink);gap:15px}

/* ---------- mockup de navegador ----------
   IMPORTANTE: tudo daqui para baixo é medido em cqw (% da largura da própria
   moldura), não em px. É o que faz o "sitezinho" encolher junto com o mockup
   no celular em vez de estourar a proporção.
   Referência: 100cqw = largura da moldura. Um valor que era 6px numa moldura
   de 660px vira 0.91cqw (6 ÷ 660 × 100).
   ------------------------------------------------------------------------ */
.case__media{position:relative}
.case__media::after{
  content:"";position:absolute;inset:12% 6% -6% 6%;z-index:-1;border-radius:50%;
  background:radial-gradient(ellipse at 50% 50%,var(--case-glow),transparent 68%);
  filter:blur(46px);
}
.browser{
  container-type:inline-size;
  border-radius:clamp(9px,2.1cqw,14px);overflow:hidden;border:1px solid rgba(255,255,255,.16);
  background:var(--bg-2);box-shadow:0 40px 90px -30px rgba(0,0,0,.9);
  transition:transform .6s var(--ease);
}
.case:hover .browser{transform:translateY(-6px)}
.browser__bar{
  display:flex;align-items:center;gap:1.36cqw;padding:1.67cqw 2.12cqw;
  background:#141418;border-bottom:1px solid rgba(255,255,255,.08);
}
.browser__dots{display:flex;gap:.91cqw}
.browser__dots i{width:1.36cqw;height:1.36cqw;border-radius:50%;background:rgba(255,255,255,.22)}
.browser__url{
  flex:1;text-align:center;font-size:1.59cqw;letter-spacing:.06em;color:rgba(255,255,255,.5);
  background:rgba(255,255,255,.06);border-radius:999px;padding:.76cqw 1.82cqw;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.browser__view{container-type:inline-size;position:relative;aspect-ratio:16/10.4;overflow:hidden;background:#000}
/* o print ocupa a moldura inteira; object-position:top mantém o topo do site à vista */
.frame__shot{
  position:absolute;inset:0;width:100%;height:100%;display:block;
  object-fit:cover;object-position:top center;
}

/* O celularzinho é filho de .case__media (position:relative) — se ele escapar
   desse pai, o absolute passa a contar de outro ancestral e o mockup "anda"
   para fora do case. Foi o que aconteceu quando os prints entraram e sobraram
   </div> soltos no HTML. Se um dia ele voltar a se deslocar, o problema é o
   aninhamento no index.html, não este bloco.

   O quanto ele vaza para fora da moldura (right/bottom negativos) precisa ser
   MENOR que a calha do .wrap — 24px no geral, 16px abaixo de 620px. Passando
   disso, a página inteira ganha barra de rolagem horizontal no tablet. */
.phone{
  container-type:inline-size;
  position:absolute;right:-20px;bottom:-30px;width:26%;max-width:150px;z-index:3;
  border-radius:clamp(9px,12cqw,20px);overflow:hidden;border:1px solid rgba(255,255,255,.22);
  background:var(--bg-2);box-shadow:0 30px 60px -18px rgba(0,0,0,.95);
  transition:transform .6s var(--ease);
}
.case:hover .phone{transform:translateY(-10px)}
.phone__view{container-type:inline-size;position:relative;aspect-ratio:9/17;overflow:hidden;background:#000}
.phone__notch{
  position:absolute;top:4.7cqw;left:50%;transform:translateX(-50%);z-index:4;
  width:34%;height:3.3cqw;border-radius:99px;background:rgba(255,255,255,.28);
}


/* ==========================================================================
   PROJETOS — grade com todos os sites entregues (seção só do código)
   ========================================================================== */
.projetos{padding:var(--pad-section) 0;border-top:1px solid var(--line-soft)}
.projetos__head{display:flex;align-items:flex-end;justify-content:space-between;gap:40px;flex-wrap:wrap;margin-bottom:14px}
.projetos__head .lead{margin:0}

.proj-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));
  gap:18px;padding-top:46px;
}
/* O `display:flex` abaixo vence o atributo `hidden` do HTML — sem a regra
   seguinte, o filtro marcava os cards como escondidos e eles continuavam na
   tela. Esta linha é o que faz o filtro funcionar de verdade. */
.proj[hidden]{display:none}

.proj{
  display:flex;flex-direction:column;
  border:1px solid var(--line-soft);border-radius:12px;overflow:hidden;
  background:var(--bg-2);
  transition:transform .4s var(--ease),border-color .4s var(--ease);
}
.proj:hover{transform:translateY(-3px);border-color:var(--line)}
.proj__media{position:relative;display:block;aspect-ratio:16/10;overflow:hidden;background:#0e1016}
.proj__shot{
  /* serve para os dois: <img> (prints locais) e <span> com background-image
     (as 6 miniaturas antigas do portfólio, que ainda vêm de fora) */
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:top center;
  background-size:cover;background-position:top center;
  transition:transform .6s var(--ease);
}
.proj:hover .proj__shot{transform:scale(1.04)}
.proj__mono{
  position:absolute;inset:0;display:grid;place-items:center;
  background:linear-gradient(145deg,hsl(var(--h) 42% 21%),hsl(var(--h) 38% 9%));
}
.proj__mono i{
  font-style:normal;font-size:30px;font-weight:800;letter-spacing:-.03em;
  color:rgba(255,255,255,.8);
}
/* o nome é a única linha de texto do card — o padding de baixo era do domínio,
   que saiu daqui */
.proj__name{padding:14px 16px 16px;font-size:14.5px;font-weight:600;letter-spacing:-.01em}

/* Selo dos clientes nos Estados Unidos. Fica sobre o print, no canto de cima. */
.proj__usa{
  position:absolute;top:9px;right:9px;z-index:2;
  font-size:11px;letter-spacing:.14em;font-weight:700;
  padding:4px 7px;border-radius:5px;
  background:rgba(8,8,10,.72);color:rgba(255,255,255,.92);
  border:1px solid rgba(255,255,255,.2);backdrop-filter:blur(6px);
}

/* Projeto cujo domínio caiu: o trabalho continua no portfólio, mas o card não
   leva a lugar nenhum — link morto queima mais do que um projeto a menos. */
.proj--fora{cursor:default}
.proj--fora .proj__media{opacity:.55}
.proj--fora:hover .proj__shot{transform:none}
.proj__fora{
  padding:12px 16px 0;font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-4);
}
.proj--fora .proj__name{padding-top:4px;color:var(--ink-2)}

/* ---------- filtro por mercado ----------
   Mesma lógica visual do seletor de idioma: sem caixa, o ativo em branco. */
.filtro{display:flex;align-items:center;gap:18px;padding-top:26px;flex-wrap:wrap}
.filtro__op{
  background:none;border:0;padding:0;cursor:pointer;font:inherit;
  font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;font-weight:600;
  color:var(--ink-4);transition:color .3s var(--ease);
}
.filtro__op:hover{color:var(--ink-2)}
.filtro__op[aria-pressed="true"]{color:var(--ink);cursor:default}
.filtro__op:focus-visible{outline:1px solid var(--ink-3);outline-offset:3px;border-radius:3px}
.filtro__conta{margin-left:auto;font-size:11.5px;color:var(--ink-4);letter-spacing:.04em}

/* ---------- ver mais ----------
   Em tela estreita a grade abre com um lote e este botão traz o resto. No
   desktop ele nunca aparece: com 4 ou 5 colunas as 55 miniaturas de uma vez
   são o argumento, não um problema. */
.ver-mais{
  display:block;width:100%;margin-top:22px;padding:17px 24px;
  background:none;border:1px solid var(--line);border-radius:999px;
  color:var(--ink-2);font:inherit;
  font-size:12px;letter-spacing:.16em;text-transform:uppercase;font-weight:700;
  cursor:pointer;
  transition:color .3s var(--ease),border-color .3s var(--ease);
}
.ver-mais[hidden]{display:none}
.ver-mais:hover{color:var(--ink);border-color:var(--ink)}
.ver-mais:focus-visible{outline:2px solid rgba(var(--glow-rgb),.85);outline-offset:3px}
@media (max-width:620px){
  .filtro{gap:14px}
  .filtro__op{font-size:11px;letter-spacing:.1em}
  .filtro__conta{margin-left:0;width:100%}
}

/* ==========================================================================
   BOTÃO FLUTUANTE DO WHATSAPP
   O ícone é um balão de conversa desenhado aqui — não é a marca do WhatsApp.
   Se quiser o símbolo oficial, baixe em whatsappbrand.com e troque o <svg>.
   Os três pontinhos usam --zap-bg de propósito: eles são "buracos" que deixam
   ver o fundo do botão, então acompanham qualquer troca de cor.
   ========================================================================== */
.zap{
  --zap-bg:#25d366;
  position:fixed;right:22px;bottom:22px;z-index:70;
  display:inline-flex;align-items:center;gap:9px;
  padding:12px 18px 12px 14px;border-radius:999px;
  background:var(--zap-bg);color:#06301a;
  font-size:12px;letter-spacing:.12em;text-transform:uppercase;font-weight:700;
  box-shadow:0 16px 36px -12px rgba(0,0,0,.9),inset 0 0 0 1px rgba(255,255,255,.18);
  opacity:0;transform:translateY(16px) scale(.96);pointer-events:none;
  transition:opacity .45s var(--ease),transform .45s var(--ease);
}
.zap.is-in{opacity:1;transform:none;pointer-events:auto}
.zap.is-in:hover,.zap.is-in:focus-visible{transform:translateY(-3px)}
.zap:focus-visible{outline:2px solid #fff;outline-offset:3px}
.zap__icon{width:20px;height:20px;flex:none;display:block}

/* ==========================================================================
   10 · FECHAMENTO
   ========================================================================== */
.cta{padding:130px 0;text-align:center;position:relative;overflow:hidden;border-top:1px solid var(--line-soft)}
.cta__glow{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(90vw,860px);aspect-ratio:1;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle,rgba(var(--glow-rgb),.34),transparent 66%);filter:blur(40px);
}
.cta__inner{position:relative;z-index:2}
.cta h2{font-size:clamp(30px,5vw,64px);line-height:1.02;letter-spacing:-.035em;font-weight:300;margin:0 auto 30px;max-width:18ch}
.cta h2 b{font-weight:800}

.footer{border-top:1px solid var(--line-soft);padding:60px 0 40px}
.footer__grid{display:flex;justify-content:space-between;gap:40px;flex-wrap:wrap;align-items:flex-end}
/* os dois cards de pessoa ficam lado a lado e quebram juntos no celular */
.footer__time{display:flex;gap:14px;flex-wrap:wrap}

.footer__card{
  display:flex;align-items:center;gap:16px;
  border:1px solid var(--line);border-radius:14px;padding:16px 22px 16px 16px;
  background:linear-gradient(140deg,rgba(var(--glow-rgb),.10),rgba(255,255,255,.02));
}
.footer__avatar{
  width:52px;height:52px;border-radius:50%;flex:none;
  background:rgba(255,255,255,.08);border:1px solid var(--line);
  display:grid;place-items:center;font-size:15px;font-weight:700;letter-spacing:-.02em;
  object-fit:cover;   /* vale quando a classe está num <img> */
}
.footer__who b{display:block;font-size:14px;letter-spacing:.02em}
.footer__who small{font-size:11px;letter-spacing:.1em;color:var(--ink-4);text-transform:uppercase}
.footer__meta{font-size:11.5px;color:var(--ink-4);letter-spacing:.04em}
.footer__links{display:flex;gap:22px;font-size:12px;color:var(--ink-2)}
.footer__links a:hover{color:var(--ink)}

/* ==========================================================================
   REVEAL
   ========================================================================== */
/* Animação de entrada.
   O esconder está atrás de `.js`, uma classe que um script mínimo no <head>
   coloca no <html>. Se o JavaScript falhar, não rodar ou for bloqueado, a
   classe nunca entra e TUDO aparece normalmente. Sem isso, qualquer problema
   no script deixa o site em branco — foi o que aconteceu com a grade de
   projetos no celular. */
.js .reveal{opacity:0;transform:translateY(26px);transition:opacity .9s var(--ease),transform .9s var(--ease)}
.js .reveal.is-in{opacity:1;transform:none}

@media (prefers-reduced-motion:reduce){
  .js .reveal{opacity:1;transform:none;transition:none}
  .zap{transition:none}
  html{scroll-behavior:auto}
}

/* ==========================================================================
   RESPONSIVO — o Canva desenha o desktop; aqui fica a regra do mobile
   ========================================================================== */
@media (max-width:980px){
  :root{--pad-section:84px;--gap-col:40px}
  .manifesto__grid{grid-template-columns:1fr;gap:56px}
  .disc__grid{grid-template-columns:1fr;gap:40px;padding-top:32px}
  .vgal{grid-template-columns:1fr}
  .vgal__item--tall{grid-row:auto}
  .case{grid-template-columns:1fr;gap:40px;padding:64px 0}
  .case--flip .case__media{order:0}
  /* em coluna única a moldura ocupa a largura inteira; sem soltar o teto de
     150px o celular ficava miúdo demais ao lado dela */
  .phone{width:22%;max-width:none}

  /* ---------- navegacao no celular ----------
     Antes daqui os links simplesmente sumiam (display:none) e nada entrava
     no lugar: numa pagina de ~28.000px o visitante de celular ficava sem
     nenhum atalho de secao. Agora a barra fica so com a marca e o botao, e
     o menu inteiro (secoes, idioma e CTA) vive neste painel de tela cheia.
     Tirar os tres elementos da barra e tambem o que devolve espaco para a
     tipografia voltar a tamanho legivel la em cima. */
  /* O backdrop-filter da barra precisa sair aqui: um ancestral com filtro
     vira bloco de contencao para descendentes position:fixed, e com ele o
     painel ficava preso a altura da propria barra em vez de cobrir a tela.
     O desfoque nao se perde, so muda de dono: passa para o painel. */
  .nav{backdrop-filter:none}
  .nav__toggle{display:inline-flex}
  .nav__menu{
    position:fixed;inset:0;z-index:1;
    display:flex;flex-direction:column;justify-content:center;align-items:flex-start;
    gap:clamp(20px,4vh,34px);
    padding:clamp(96px,15vh,150px) max(28px,env(safe-area-inset-left))
            calc(44px + env(safe-area-inset-bottom));
    background:rgba(5,5,6,.97);
    backdrop-filter:blur(22px);
    opacity:0;visibility:hidden;
    /* visibility nao entra na transicao: enquanto ela interpola, o painel
       continua fora de alcance do foco e o primeiro link nao recebe Tab.
       Aqui ela vira instantanea ao abrir e so espera o fade ao fechar. */
    transition:opacity .3s var(--ease),visibility 0s linear .3s;
  }
  .nav__menu.is-open{
    opacity:1;visibility:visible;
    transition:opacity .3s var(--ease),visibility 0s linear 0s;
  }
  .nav__links{
    display:flex;flex-direction:column;align-items:flex-start;gap:2px;
    font-size:clamp(27px,7.6vw,40px);letter-spacing:-.025em;
    font-weight:600;color:var(--ink);
  }
  .nav__links a{padding:9px 0}
  .nav__menu .lang{gap:2px;padding-top:6px;color:var(--ink-3)}
  .nav__menu .lang__globo{width:17px;height:17px;margin-right:6px}
  .nav__menu .lang__op{font-size:15px;letter-spacing:.12em;padding:13px 14px}
  .nav__menu .lang__sep{font-size:13px}
  .nav__menu .btn{font-size:12px;padding:17px 32px}
}
@media (max-width:620px){
  .wrap{width:calc(100% - 32px)}
  :root{--pad-section:64px}
  .hero__inner{padding:130px 0 80px}
  /* no celular o celularzinho encolhe e sai mais para a quina, para não
     cobrir o miolo do mockup (que também ficou baixinho) */
  .phone{right:-6px;bottom:-22px;width:23%;max-width:none}
  /* A barra do topo ja nao carrega links, idioma nem CTA: tudo isso mora no
     painel. Sem a disputa por espaco, a pilula deixou de furar a calha do
     .wrap (ia ate 374,3px num viewport de 375) e a tipografia voltou para
     tamanhos legiveis. Nada aqui encolhe mais para caber. */
  .brand__mark{width:24px;height:24px}
  .brand__name{font-size:17px}
  .brand__sub{font-size:9px;letter-spacing:.36em}
  .zap{right:14px;bottom:14px;padding:11px 15px 11px 12px;font-size:11px;letter-spacing:.09em;gap:7px}
  .zap__icon{width:18px;height:18px}
  .disc__aside{padding:26px 22px}
  .disc__head{gap:18px}
  .hero__scroll{font-size:11px;letter-spacing:.14em}
  .footer__grid{align-items:flex-start}
}


/* ==========================================================================
   ALVOS DE TOQUE
   --------------------------------------------------------------------------
   Tamanho de tela nao diz o metodo de entrada: existe notebook com touch e
   tablet com mouse. Quem decide aqui e o ponteiro, nao o breakpoint. Assim
   o dedo ganha area sem inchar a barra de quem esta no mouse.
   ========================================================================== */
@media (pointer:coarse){
  /* no dedo o rotulo vira alvo de 44px; o padding e transparente, entao a
     composicao do diagrama nao muda */
  .venn__disc{padding:0 14px;min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}
  .lang__op{padding:12px 10px}
  .filtro{gap:10px}
  .filtro__op{padding:13px 8px}
  .case__link{padding-top:10px;padding-bottom:12px}
  .footer__links{gap:16px}
  .footer__links a{display:inline-block;padding:11px 6px}
  .nav__links a{padding-top:10px;padding-bottom:10px}
}

/* ==========================================================================
   ANEL DE FOCO
   --------------------------------------------------------------------------
   O seletor de idioma, o filtro e o botao do WhatsApp ja tinham o seu; o
   resto caia no anel padrao do navegador, que nao pertence a nenhum design
   e destoa no escuro. Aqui ele passa a usar o ciano da marca.
   ========================================================================== */
.nav__links a:focus-visible,.brand:focus-visible,.btn:focus-visible,
.case__link:focus-visible,.proj:focus-visible,.footer__links a:focus-visible{
  outline:2px solid rgba(var(--glow-rgb),.85);outline-offset:3px;border-radius:6px;
}
.proj:focus-visible{border-radius:12px;outline-offset:2px}

/* ==========================================================================
   GRADE DE PROJETOS NO CELULAR
   --------------------------------------------------------------------------
   Em coluna unica a grade tinha 16.252px — 58% da pagina inteira — e o filtro
   sumia da tela depois de duas rolagens: quem chegava no card 30 nao tinha
   como voltar para trocar de mercado. Duas colunas cortam a altura pela
   metade, o lote inicial corta de novo, e o filtro passa a acompanhar a
   rolagem.
   ========================================================================== */
@media (max-width:700px){
  .proj-grid{grid-template-columns:repeat(2,1fr);gap:12px;padding-top:24px}
  .proj__name{padding:11px 12px 13px;font-size:12.5px;letter-spacing:0}
  .proj__fora{padding:10px 12px 0;font-size:11px;letter-spacing:.1em}
  .proj__usa{top:7px;right:7px;padding:3px 6px;letter-spacing:.1em}
  .ver-mais{margin-top:16px;padding:16px 20px;font-size:11px}

  /* O filtro so gruda depois que a pessoa pede o resto da grade. Recolhida,
     a secao tem 1.540px e ele esta a duas telas de distancia; expandida,
     passa de 8.000px e ai vale ocupar a faixa. 68px e a altura da barra do
     topo no celular: abaixo disso ele grudaria atras dela. */
  .projetos.is-expandido .filtro{
    position:sticky;top:68px;z-index:5;
    margin-inline:-16px;padding:10px 16px;gap:8px;
    background:rgba(5,5,6,.94);
    border-bottom:1px solid var(--line-soft);
  }
  .projetos.is-expandido .filtro__op{padding:11px 7px}
  .filtro__conta{margin-left:auto;width:auto}
}

/* Trava a rolagem do fundo enquanto o painel de navegacao esta aberto. */
html.menu-aberto,html.menu-aberto body{overflow:hidden}

/* O botao flutuante do WhatsApp vive no z-index 70, acima da barra (60), entao
   passava por cima do painel. Com o menu aberto ele nao faz falta: o painel
   tem o proprio CTA. */
html.menu-aberto .zap{opacity:0;visibility:hidden;pointer-events:none}
