/* =========================================================
   SITE — base comum a todas as páginas do portfólio
   (tokens, tipografia, tags, botões, entrada .rv, leitura, nav, menu, contato, rodapé, voltar ao topo)
   Cada página carrega este arquivo e depois o próprio <style> com o que é só dela.
   ========================================================= */
/* =========================================================
   BASE
   ========================================================= */
:root{
  --bg:#FFFFFF; --surface:#F5F5F7; --text:#1D1D1F; --muted:#6E6E73; --faint:#A1A1A6; --line:#E8E8EA;
  --tag-gray-bg:#F1F1F2; --tag-gray:#6E6E73;
  --ok-bg:#EDF3EC; --ok:#448361;
  --radius:20px;
  --ease:cubic-bezier(.22,1,.36,1);
  --bar:0px; /* altura da barra do navegador no celular */
}
*{box-sizing:border-box;margin:0;padding:0}
html.lenis,html.lenis body{height:auto}
.lenis.lenis-smooth{scroll-behavior:auto !important}
.lenis.lenis-stopped{overflow:hidden}
/* com o menu aberto a página para de rolar por trás */
.menu-lock,.menu-lock body{overflow:hidden}
body{background:var(--bg);color:var(--text);font-family:Manrope,-apple-system,BlinkMacSystemFont,sans-serif;-webkit-font-smoothing:antialiased;font-size:16px;line-height:1.5;overflow-x:hidden}
/* o corte horizontal fica no main: em html/body ele quebraria o sticky */
main{overflow-x:clip}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
a,button{-webkit-tap-highlight-color:transparent}
img{display:block;max-width:100%}
:focus-visible{outline:2px solid currentColor;outline-offset:3px}
.wrap{width:100%;max-width:1360px;margin:0 auto;padding:0 40px}
.label{font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase}

/* =========================================================
   COMPONENTES
   ========================================================= */
.tag{display:inline-flex;align-items:center;gap:6px;font-size:13px;line-height:1;padding:6px 9px;border-radius:999px;background:var(--tag-gray-bg);color:var(--tag-gray);font-weight:600;white-space:nowrap}
.tag.dark{background:var(--text);color:#fff}
.tag.status{background:var(--ok-bg);color:var(--ok);white-space:normal;line-height:1.25;text-align:left}
.tag .ico{flex-shrink:0;width:13px;height:13px;margin-left:-1px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.dot{flex-shrink:0;width:7px;height:7px;border-radius:50%;background:currentColor;animation:pulse 2s var(--ease) infinite}
@keyframes pulse{50%{opacity:.35}}

.btn{display:inline-flex;align-items:center;gap:10px;font-size:15px;font-weight:600;padding:14px 24px;border-radius:999px;background:var(--text);color:#fff;white-space:nowrap;transition:transform .5s var(--ease)}
@media (hover:hover){.btn:hover{transform:translateY(-2px)}}
.btn .arr{transition:transform .5s var(--ease)}
@media (hover:hover){.btn:hover .arr{transform:translateX(4px)}}
.btn-ghost{background:var(--surface);color:var(--text)}

/* entrada de cada .rv (0→1), escrita pelo assets/js/motion.js */
.rv{opacity:var(--e,1);transform:translate3d(0,calc((1 - var(--e,1)) * 40px),0)}
.contact h2 .l1,.contact h2 .l2{display:inline-block;transform:translateX(calc((1 - var(--e,1)) * var(--dir) * 12vw))}

/* leitura: cada palavra vai do cinza claro ao tom final */
[data-read]{--read-from:#DCDCE0;--read-to:var(--text)}
[data-read] .wd{display:inline-block;color:color-mix(in srgb,var(--read-to) calc(var(--w,0) * 100%),var(--read-from));transform:translateY(calc((1 - var(--w,0)) * .16em))}
.contact-row p[data-read]{--read-to:var(--muted)}
.contact h2 .soft{--read-to:var(--faint)}
/* =========================================================
   NAV + MENU MOBILE
   ========================================================= */
/* só entra depois do "Olá" (--nav vem do scroll da abertura) */
.nav{position:fixed;top:0;left:0;right:0;z-index:50;background:rgba(255,255,255,.8);backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:saturate(180%) blur(20px);border-bottom:1px solid var(--line);transform:translateY(calc((1 - var(--nav,1)) * -110%));opacity:var(--nav,1)}
.nav .wrap{display:flex;align-items:center;justify-content:space-between;height:60px}
.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:15px}
.brand-mark{width:30px;height:30px;border-radius:50%;object-fit:cover;flex-shrink:0}
.nav-links{display:flex;gap:28px;font-size:14px;font-weight:500;color:var(--muted)}
@media (hover:hover){.nav-links a:hover{color:var(--text)}}
.nav-cta{font-size:14px;font-weight:600;background:var(--text);color:#fff;padding:8px 16px;border-radius:999px}
/* 44px: área mínima de toque recomendada */
.menu-btn{display:none;width:44px;height:44px;border-radius:50%;background:var(--text);position:relative}
.menu-btn i{position:absolute;left:14px;right:14px;height:1.5px;background:#fff;transition:transform .5s var(--ease)}
.menu-btn i:first-child{top:18px}
.menu-btn i:last-child{top:25px}
.menu-open .menu-btn i:first-child{transform:translateY(3.5px) rotate(45deg)}
.menu-open .menu-btn i:last-child{transform:translateY(-3.5px) rotate(-45deg)}
.menu{position:fixed;inset:0;z-index:40;background:var(--bg);display:flex;flex-direction:column;justify-content:flex-end;padding:0 20px 48px;clip-path:inset(0 0 100% 0);transition:clip-path .8s var(--ease);visibility:hidden}
.menu-open .menu{clip-path:inset(0);visibility:visible}
.menu a{font-size:56px;font-weight:800;letter-spacing:-.05em;line-height:1.05;opacity:0;transform:translateY(24px);transition:opacity .4s var(--ease),transform .7s var(--ease)}
.menu-open .menu a{opacity:1;transform:none;transition-delay:calc(var(--i) * 70ms + 250ms)}
.menu .label{color:var(--faint);margin-top:32px}
/* =========================================================
   CONTATO + RODAPÉ
   ========================================================= */
.contact{padding:160px 0 96px}
.contact .label{color:var(--muted);display:block;margin-bottom:28px}
.contact h2{font-size:clamp(76px,16vw,280px);line-height:.82;letter-spacing:-.075em;font-weight:800}
.contact h2 .soft{color:var(--faint)}
.contact-row{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-top:56px}
.contact-row p{color:var(--muted);font-size:19px;flex-basis:100%;margin-bottom:12px}
.copy .done{display:none}
.copy.copied .done{display:inline}
.copy.copied .idle{display:none}
footer{border-top:1px solid var(--line)}
footer .wrap{display:flex;justify-content:space-between;align-items:center;gap:16px;height:72px;font-size:13px;color:var(--faint)}
footer .links{display:flex;gap:20px}
@media (hover:hover){footer a:hover{color:var(--text)}}

/* botão voltar ao topo — aparece a partir da seção de cases */
.to-top{position:fixed;right:24px;bottom:calc(24px + env(safe-area-inset-bottom));z-index:60;width:52px;height:52px;border-radius:50%;background:var(--text);color:#fff;display:flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.18);box-shadow:0 10px 30px rgba(0,0,0,.25);opacity:0;transform:translateY(16px) scale(.8);pointer-events:none;transition:opacity .4s var(--ease),transform .5s var(--ease)}
.to-top.show{opacity:1;transform:none;pointer-events:auto}
@media (hover:hover){.to-top:hover{transform:translateY(-3px)}}
.to-top svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

/* =========================================================
   MOBILE
   ========================================================= */
@media (max-width:900px){
  :root{--bar:calc(100lvh - 100svh)}
  .wrap{padding:0 20px}
  /* nav */
  .nav-links,.nav .nav-cta{display:none}
  .menu-btn{display:block}
  .contact{padding:112px 0 64px}
  .contact h2{font-size:clamp(56px,17vw,120px)}
  .contact-row .btn{font-size:14px}
  footer .wrap{flex-direction:column;justify-content:center;gap:8px;height:auto;padding:24px 20px}
  .to-top{right:16px;bottom:calc(16px + env(safe-area-inset-bottom));width:46px;height:46px}
}

/* os efeitos seguem a rolagem e rodam sempre; só as animações em loop param com "reduzir movimento" */
@media (prefers-reduced-motion:reduce){
  .dot{animation:none}
}
