  :root{--ease:cubic-bezier(.19,1,.22,1);
    --cream:#F6F7FB;
    --ink:#030B17;
    --blue:#0E5BD0;
    --line:#E8ECFF;
    --dot:#D9D9D9;
    --quote:#E6E4D7;
    --gray:#7B7B7B;
  }
  *{margin:0;padding:0;box-sizing:border-box}
  html{scroll-behavior:smooth}
  html,body{overflow-x:clip}
  body{
    background:var(--cream);
    color:var(--ink);
    font-family:"Inter",-apple-system,"Helvetica Neue",Arial,sans-serif;
    font-size:16px;
    line-height:normal;
    -webkit-font-smoothing:antialiased;
  }
  img{display:block;max-width:100%}
  a{color:inherit;text-decoration:none}
  button,input,textarea{font:inherit;color:inherit}
  .wrap{width:1440px;max-width:100%;margin:0 auto;position:relative}
  /* página de 1440px com grid de conteúdo de 1376px: em viewports maiores,
     o gutter cresce para manter o grid centralizado e alinhado ao hero */
  :root{--grid:1376px}

  /* ---------- header ---------- */
  header{background:var(--cream);border-bottom:2px solid var(--line)}
  .header-in{
    display:flex;align-items:center;justify-content:space-between;gap:24px;
    padding:16px 32px;
  }
  .brand img{width:37px;height:37px;border-radius:70px;object-fit:cover}
  nav.main{display:flex;gap:32px;align-items:center}
  nav.main a{font-size:16px;font-weight:400;color:var(--ink)}
  nav.main a.active{font-weight:500;color:var(--blue)}
  nav.main a:hover{color:var(--blue)}
  /* ---------- seletor de idioma: dropdown ---------- */
  .lang{position:relative;display:flex;align-items:center}
  .lang-btn{
    display:flex;align-items:center;gap:6px;padding:6px 4px;
    background:transparent;border:0;cursor:pointer;
    font-size:16px;font-weight:500;color:var(--blue);
  }
  .lang-btn .chev{width:16px;height:16px;transition:transform .25s var(--ease)}
  .lang.open .lang-btn .chev{transform:rotate(180deg)}
  .lang-menu{
    position:absolute;right:0;top:calc(100% + 12px);min-width:176px;z-index:120;
    background:#fff;border:1px solid var(--line);border-radius:14px;padding:6px;
    box-shadow:0 12px 34px rgba(3,11,23,.12);
    opacity:0;visibility:hidden;translate:0 -6px;
    transition:opacity .22s ease, translate .25s var(--ease), visibility 0s linear .25s;
  }
  .lang.open .lang-menu{opacity:1;visibility:visible;translate:0 0;transition-delay:0s}
  .lang-menu button{
    display:flex;width:100%;gap:10px;align-items:baseline;
    padding:9px 12px;border:0;border-radius:9px;background:transparent;cursor:pointer;
    font-size:15px;text-align:left;color:var(--ink);
  }
  .lang-menu button b{font-weight:700;min-width:24px}
  .lang-menu button span{font-weight:400;font-size:13px;color:var(--gray)}
  .lang-menu button:hover{background:var(--cream)}
  .lang-menu button[aria-selected="true"]{color:var(--blue)}
  .lang-menu button[aria-selected="true"] span{color:var(--blue)}

  /* ---------- botões ---------- */
  .btn{
    display:inline-flex;gap:10px;align-items:center;justify-content:center;
    padding:12px 18px;border-radius:68px;border:0;cursor:pointer;
    font-weight:500;font-size:16px;text-align:center;white-space:nowrap;
    transition:filter .25s,background .25s,color .25s;
  }
  .btn img{width:19px;height:19px}
  /* seta que herda a cor do texto do botão: no b-outline vira cream no
     hover (antes o SVG ink ficava invisível sobre o fundo ink) */
  .btn .arw{
    width:19px;height:19px;flex:none;background:currentColor;
    -webkit-mask:url(assets/icon-arrow-ink.svg) center/contain no-repeat;
    mask:url(assets/icon-arrow-ink.svg) center/contain no-repeat;
  }
  .btn:hover{filter:brightness(1.12)}
  .btn.b-ink{background:var(--ink);color:var(--cream)}
  .btn.b-blue{background:var(--blue);color:#F8F7F1}
  .btn.b-outline{background:var(--cream);border:2px solid var(--ink);color:var(--ink)}
  .btn.b-outline:hover{background:var(--ink);color:var(--cream)}
  .btn.b-royal{background:#0F59CA;color:var(--cream)} /* azul do botão Get in touch no About (Figma) */
  .btn.w211{width:211.333px}

  /* ---------- section heading pattern ---------- */
  .sec-head{
    position:absolute;left:0;width:100%;
    display:flex;flex-direction:column;gap:20px;
    padding:0 max(32px, calc((100% - var(--grid)) / 2));z-index:2;
  }
  .sec-head h2{font-weight:900;font-size:120px;line-height:normal;white-space:nowrap}
  .sec-head p{font-size:18px;font-weight:400;width:662.874px;max-width:100%}

  /* ---------- hero ---------- */
  /* topos do Figma medidos do frame incluindo o header de 71px; aqui o header é irmão, então -71px */
  .hero{position:relative;height:959px;background:var(--cream)}
  .hero-photo{
    position:absolute;left:811px;top:64px;width:597px;height:622px;
    filter:drop-shadow(-30px 34px 42px rgba(0,0,0,.15));
  }
  .hero-photo img{width:100%;height:100%;object-fit:cover}
  /* moldura fixa: a silhueta vive numa máscara CSS; a foto retangular
     desliza por dentro (parallax) sem mover os notches nem os círculos */
  .hp-frame{
    position:absolute;inset:0;display:block;overflow:hidden;
    -webkit-mask:url(assets/hero-mask.png) center / 100% 100% no-repeat;
    mask:url(assets/hero-mask.png) center / 100% 100% no-repeat;
  }
  .hp-frame img{width:100%;height:100%;object-fit:cover;display:block}
  @media (hover: hover) and (pointer: fine){
    .hp-frame img{
      transform:scale(1.08);will-change:transform;
      transition:transform .45s cubic-bezier(.19,1,.22,1);
    }
  }
  /* flip de moeda dos círculos: rotator 3D com duas faces (SVGs do Figma).
     Com o JS ativo (.coin-on) o fundo do container sai de cena — as faces é
     que são o círculo, então o CÍRCULO INTEIRO gira e some de perfil. */
  .coin{perspective:420px}
  .hero-circle.coin-on,.hero-deco .c.coin.coin-on{background:transparent}
  .coin .coin-rot{
    position:absolute;inset:0;transform-style:preserve-3d;
    transition:transform .9s cubic-bezier(.45,.05,.2,1);
  }
  .coin .cface{
    position:absolute;inset:0;border-radius:50%;
    backface-visibility:hidden;-webkit-backface-visibility:hidden;
    background:center / cover no-repeat;
  }
  .coin .cface.back{transform:rotateY(180deg)}
  /* círculo preto (spark): gira lentamente sem parar */
  .hero-deco .c.navy img{animation:spark-rot 14s linear infinite}
  @keyframes spark-rot{to{transform:rotate(360deg)}}
  /* fingerprint e decorações agora vivem dentro de .hero-photo (offset parent) */
  .hero-circle{
    position:absolute;left:526px;top:-3px;width:71px;height:71px;
    border-radius:50%;background:var(--ink);
  }
  /* o SVG do fingerprint tem viewBox 23.33×32 com preserveAspectRatio none — caixa exata para não distorcer */
  .hero-circle img{position:absolute;left:24.3px;top:19px;width:23.33px;height:32px}
  .hero-deco{
    position:absolute;left:0;top:391px;width:71px;
    display:flex;flex-direction:column;gap:9px;
  }
  .hero-deco .c{position:relative;width:71px;height:71px;border-radius:50%}
  .hero-deco .c.blue{background:var(--blue)}
  .hero-deco .c.navy{background:var(--ink)}
  .hero-deco .c img{position:absolute;left:20px;top:19px;width:32px;height:32px}
  .hero-deco .c img.tall{left:19px;top:10px;width:33.5px;height:50px}
  .hero-left{
    position:absolute;left:32px;top:65px;width:684px;
    display:flex;flex-direction:column;gap:32px;
  }
  .hero-id{display:flex;flex-direction:column;gap:34px}
  .hero-id .names{display:flex;flex-direction:column;gap:4px}
  .hero-name{font-weight:700;font-size:24px;color:#000;height:29px}
  .hero-title{
    font-weight:900;font-size:150px;line-height:128px;
    color:var(--blue);white-space:pre;
  }
  .hero-title span{display:block}
  .hero-intro{font-size:18px;font-weight:400;color:var(--ink);width:100%;height:66px}
  .hero-row{display:flex;gap:24px;align-items:center;width:100%}
  .hero-socials{display:flex;align-items:center}
  .hero-socials a,.hero-pill{
    background:var(--cream);border:2px solid var(--ink);border-radius:80px;
    display:flex;align-items:center;justify-content:center;
    font-weight:600;font-size:16px;color:var(--ink);
  }
  .hero-socials a{width:44px;height:44px;margin-right:-10px}
  .hero-socials a:last-child{margin-right:0}
  .hero-socials a:hover{background:var(--ink);color:var(--cream)}
  .hero-pill{height:44px;padding:16px;white-space:nowrap;gap:8px}
  .hero-pill svg{flex-shrink:0}
  .hero-row .rule{flex:1 0 0;height:2px;background:var(--line)}
  .hero-stats{display:flex;align-items:center;justify-content:space-between;width:100%}
  .stat{width:138px;display:flex;flex-direction:column;align-items:flex-start}
  .stat b{font-weight:900;font-size:68px;color:var(--ink);line-height:normal;transition:color .3s}
  .stat span{font-size:18px;font-weight:400;color:#000;transition:color .3s}
  .stat:hover b,.stat:hover span{color:var(--blue)}
  .stat-sep{width:2px;height:120.5px;background:var(--line)}
  .hero-hr{width:100%;height:2px;background:var(--line)}
  .hero-companies{padding-top:16px;font-weight:700;font-size:18px;color:var(--ink)}
  .hero-logos{
    position:absolute;left:32px;top:804px;
    width:1376px;max-width:calc(100% - 64px);
    overflow:hidden;
  }
  .logo-track{
    display:flex;gap:44px;width:max-content;
    animation:logo-slide 32s linear infinite;
  }
  .hero-logos:hover .logo-track{animation-play-state:paused}
  .logo-track img{width:133.557px;height:89px;object-fit:cover;flex-shrink:0}
  /* o track tem 2 cópias da sequência; -50% (compensando meio gap) reinicia sem emenda */
  @keyframes logo-slide{to{transform:translateX(calc(-50% - 22px))}}

  /* ---------- featured projects ---------- */
  .projects{
    position:relative;background:var(--ink);overflow:clip;
    display:flex;flex-direction:column;gap:60px;align-items:flex-start;
    padding:260px max(32px, calc((100% - var(--grid)) / 2)) 90px;
  }
  .projects .p-head{position:absolute;left:0;top:0;width:100%;color:var(--cream);z-index:2}
  .projects h2{
    position:absolute;top:-30px;left:max(32px, calc((100% - var(--grid)) / 2));
    font-weight:900;font-size:120px;white-space:nowrap;
  }
  .projects .lede{
    position:absolute;left:max(32px, calc((100% - var(--grid)) / 2));
    top:121px;width:662.874px;font-size:18px;
  }
  .proj-grid{display:flex;flex-direction:column;gap:10px;width:100%}
  /* easing com overshoot (spring/back-out) para o bounce da referência */
  .proj-row{
    display:flex;gap:10px;align-items:center;height:423px;width:100%;
    transition:height .65s cubic-bezier(.34,1.45,.55,1);
  }
  .proj-row:has(a:hover){height:595px}
  .proj-row a{
    flex:1 1 0;min-width:1px;height:100%;border-radius:10px;overflow:clip;position:relative;
    transition:flex-grow .65s cubic-bezier(.34,1.45,.55,1),flex-basis .65s cubic-bezier(.34,1.45,.55,1);
  }
  .proj-row a:hover{flex:0 1 777px}
  .proj-row img{width:100%;height:100%;object-fit:cover}
  /* hover da home (ref. vídeo): sem véu — gradiente sutil na base + legenda */
  .p-grad{
    position:absolute;left:0;right:0;bottom:0;height:46%;border-radius:0 0 10px 10px;
    background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,.55) 100%);
    opacity:0;transition:opacity .4s;
  }
  .p-cap{
    position:absolute;left:0;right:0;bottom:26px;z-index:2;
    display:flex;flex-direction:column;gap:4px;align-items:center;text-align:center;
    color:var(--cream);opacity:0;transform:translateY(14px);
    transition:opacity .35s .06s, transform .55s cubic-bezier(.34,1.5,.6,1) .06s;
  }
  .p-cap b{font-weight:900;font-size:28px;line-height:normal}
  .p-cap i{font-style:normal;font-weight:500;font-size:13px;opacity:.85}
  .proj-row a:hover .p-grad,.proj-row a:hover .p-cap,
  .proj-row a:focus-visible .p-grad,.proj-row a:focus-visible .p-cap{opacity:1}
  .proj-row a:hover .p-cap,.proj-row a:focus-visible .p-cap{transform:none}
  /* tag da categoria nos cards "More projects": texto azul (Figma 73:2727),
     substitui o antigo chip pill azul */
  .pcard-sm .info .p-cat{
    font-weight:700;font-size:16px;line-height:normal;color:var(--blue);white-space:nowrap;
  }
  .browse{
    display:flex;gap:24px;height:61px;align-items:center;justify-content:center;
    width:100%;margin-top:20px;color:var(--cream);
    transition:color .3s;
  }
  .browse:hover{color:var(--blue)}
  .browse b{font-weight:900;font-size:50px;white-space:nowrap}
  .browse .arr{
    width:32px;height:32px;background:currentColor;
    mask:url(assets/icon-arrow-big.svg) no-repeat center/contain;
    -webkit-mask:url(assets/icon-arrow-big.svg) no-repeat center/contain;
    transition:transform .3s;
  }
  .browse:hover .arr{transform:translateX(8px)}

  /* ---------- about ---------- */
  .about{
    position:relative;background:var(--cream);overflow:clip;
    display:flex;flex-direction:column;gap:80px;align-items:flex-start;
    padding:130px 0 40px;
  }
  .about .sec-head{top:-36px}
  .about-grid-wrap{display:flex;justify-content:center;width:100%}
  .about-grid{
    display:flex;gap:24px;align-items:center;height:602px;
    width:1376px;max-width:calc(100% - 64px);
  }
  .about-col{flex:1 0 0;min-width:1px;height:100%;display:flex;flex-direction:column;gap:24px;justify-content:center}
  .bio-card{
    flex:1 0 0;min-height:1px;width:100%;
    background:var(--blue);color:var(--cream);
    border-radius:20px;padding:32px;overflow:clip;
    display:flex;align-items:center;
  }
  .bio-card div{font-size:18px;font-weight:400}
  .bio-card p + p{margin-top:1.2em}
  .bio-card strong{font-weight:700}
  .bio-actions{display:flex;gap:20px;align-items:center;width:100%}
  .about-photo{
    position:relative;flex:1 0 0;min-width:1px;height:100%;
    border:2px solid var(--line);border-radius:20px;overflow:hidden;
  }
  /* slideshow: imagens empilhadas, cross-fade controlado por JS */
  .about-photo img{
    position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
    opacity:0;transition:opacity 1.1s ease;
  }
  .about-photo img.on{opacity:1}
  .about-right-top{display:flex;gap:24px;align-items:flex-start;flex:1 0 0;min-height:1px;width:100%}
  .mini-col{display:flex;flex-direction:column;gap:24px;height:100%;justify-content:center}
  .mini-col span{
    display:block;flex:1 0 0;min-height:1px;width:72.33px;
    border:2px solid var(--line);border-radius:20px;overflow:hidden;
  }
  .mini-col span img{width:100%;height:100%;object-fit:cover;pointer-events:none}
  /* coin flip dos ícones: gira o ELEMENTO inteiro (moldura + imagem). O flip
     vai 0->90 (some de perfil), troca a imagem escondida e volta -90->0 —
     nunca ultrapassa 90°, então o ícone jamais aparece espelhado. */
  .mini-col{perspective:700px}
  .mini-col span{backface-visibility:hidden;-webkit-backface-visibility:hidden;will-change:transform}
  .skills-card{
    flex:1 0 0;min-width:1px;height:100%;
    background:var(--blue);border:2px solid var(--line);border-radius:20px;
    padding:32px;overflow:clip;color:var(--cream);
    display:flex;flex-direction:column;justify-content:space-between;align-items:flex-start;
  }
  .skills-card b{font-weight:900;font-size:18px}
  /* troca com giro vertical: a palavra atual gira para cima (rotateX 90°)
     e a próxima entra girando de baixo (-90° → 0). Altura/fonte fixas:
     skills longas são recortadas sem redimensionar o card. */
  .skills-card b.flipline{
    display:block;position:relative;width:100%;height:1.45em;line-height:1.45em;
    overflow:hidden;font-size:clamp(13px,1.1vw,16px);
    perspective:420px;
  }
  .skills-card b.flipline .goo{position:absolute;inset:0;transform-style:preserve-3d}
  .skills-card b.flipline .sk-word{
    position:absolute;left:0;top:0;width:100%;height:100%;line-height:inherit;
    white-space:nowrap;overflow:hidden;text-overflow:clip;
    color:inherit;backface-visibility:hidden;will-change:transform,opacity;
  }
  .skills-card b.flipline .sk-word.swap{
    transition:transform .56s cubic-bezier(.3,.7,.25,1),opacity .38s ease;
  }
  /* divisor do Figma: #E4E4E3 (228,228,227) @ opacity 0.2, 1px */
  .skills-card .rule{width:100%;height:1px;background:rgba(228,228,227,.2)}
  @media (min-width:721px) and (max-width:1240px){
    .skills-card b.flipline{font-size:18px}
  }
  .skills-card .more{
    display:flex;gap:10px;align-items:center;padding:12px 0;border-radius:68px;
    font-weight:500;font-size:16px;color:var(--cream);
  }
  .skills-card .more img{width:19px;height:19px;transition:transform .3s}
  .skills-card .more:hover img{transform:translateX(6px)}
  .lang-card{
    width:100%;background:var(--ink);color:var(--cream);
    border-radius:20px;padding:32px;overflow:clip;
    display:flex;flex-direction:column;justify-content:center;
  }
  .lang-card > div{display:flex;flex-direction:column;gap:24px;width:100%}
  .lang-card b{font-weight:900;font-size:24px;display:block}
  .lang-card span{font-weight:400;font-size:18px}
  .lang-card .rule{width:100%;height:1px;background:rgba(228,228,227,.2)}
  .full-rule{width:100%;height:1px;background:var(--line)}

  /* ---------- my work experience ---------- */
  /* Figma: 2 colunas de 700 num canvas 1440 → gap 40px; rows px-32 py-24, gap-10 interno */
  .wexp{
    display:flex;gap:40px;align-items:flex-start;width:100%;
    padding:0 max(32px, calc((100% - var(--grid)) / 2));
  }
  .wexp-intro{
    flex:1 0 0;min-width:1px;
    display:flex;flex-direction:column;gap:24px;justify-content:center;
  }
  .wexp-intro h3{font-weight:900;font-size:70px;color:var(--ink)}
  /* 66px = as 3 linhas do texto em inglês (spec do Figma). Como mínimo em vez
     de altura fixa, o inglês fica idêntico e o português, que ocupa 4 linhas,
     cresce a caixa em vez de transbordar por cima do gap até o botão. */
  .wexp-intro p{font-size:18px;min-height:66px;margin-top:10px}
  .wexp-list{flex:1 0 0;min-width:1px;display:flex;flex-direction:column}
  .wexp-row{
    display:flex;flex-direction:column;gap:10px;justify-content:center;
    padding:24px 32px;width:100%;
  }
  .wexp-row + .wexp-row{border-top:1px solid var(--line)}
  .wexp-row .years{font-weight:900;font-size:20px;color:var(--blue)}
  .wexp-row .meta{font-weight:400;font-size:20px;color:var(--ink)}
  .wexp-row .role{font-weight:900;font-size:30px;color:var(--ink)}

  /* ---------- peer feedback ---------- */
  .feedback{
    position:relative;background:var(--blue);
    padding:0 0 50px;display:flex;flex-direction:column;gap:32px;
  }
  /* cabeçalho em fluxo: cruza a divisa via margem negativa e as fileiras
     ficam sempre a 32px do subtítulo, em qualquer altura de título */
  .feedback .sec-head{position:static;margin-top:-33px;color:var(--cream)}
  /* carrossel infinito (Figma 25:403): cada fileira é um marquee com dois
     conjuntos idênticos; o track desliza -50% em loop e pausa no hover */
  .fb-rows{display:flex;flex-direction:column;gap:20px;width:100%}
  /* o avanço é feito em JS via scrollLeft (app.js): anda sozinho, pausa no
     hover e aceita arrastar/deslizar; o wrap entre os 3 conjuntos é invisível */
  /* o gesto é 100% JS (pointer events em toda a fileira): o track anda por
     transform, então nenhum quirk de scroll nativo em touch atrapalha.
     touch-action:pan-y preserva o scroll vertical da página. */
  .fb-mq{
    width:100%;overflow:hidden;cursor:grab;touch-action:pan-y;
    -webkit-user-select:none;user-select:none;-webkit-touch-callout:none;
  }
  .fb-mq img{-webkit-user-drag:none;pointer-events:none}
  .fb-mq-track{will-change:transform}
  .fb-mq.dragging{cursor:grabbing}
  .fb-mq-track{display:flex;width:max-content}
  .fb-set{display:flex;gap:20px;padding-right:20px;align-items:stretch}
  .fb-card{
    position:relative;
    flex:0 0 auto;width:445.33px;background:#f6f7fb;border:2px solid transparent;border-radius:30px;
    padding:32px 31px;display:flex;flex-direction:column;gap:24px;align-items:flex-start;
    overflow:clip;
    transition:background .3s ease, border-color .3s ease;
  }
  .fb-card .q{
    position:absolute;left:14px;top:14px;width:120px;height:92px;
    background:#ECF0FF;
    -webkit-mask:url(assets/quote-mark.svg) no-repeat center/contain;
            mask:url(assets/quote-mark.svg) no-repeat center/contain;
    transition:left .3s ease, top .3s ease;
  }
  .fb-card blockquote{
    position:relative;flex:1 0 0;
    font-size:16px;font-weight:400;color:var(--ink);width:100%;border:0;
  }
  .fb-card .rule{position:relative;width:100%;height:2px;background:#E8ECFF;flex-shrink:0}
  .fb-who{position:relative;display:flex;gap:16px;align-items:center;width:100%}
  .fb-who img{width:57px;height:57px;border-radius:107.838px;border:2px solid #e4e4e3;object-fit:cover}
  .fb-id{display:flex;flex-direction:column;gap:4px}
  .fb-id .n{font-weight:700;font-size:16px;color:var(--blue)}
  .fb-id .r{font-weight:400;font-size:14px;color:var(--ink)}
  .fb-id .t{font-weight:400;font-size:10px;color:var(--ink)}
  /* hover do card (Figma 29:773 — Default #f6f7fb -> Hover branco) */
  @media (pointer: fine){
    .fb-card:hover{background:#fff;border-color:#fff}
    .fb-card:hover .q{left:12px;top:12px}
  }

  /* ---------- footer / contato ---------- */
  .foot{
    position:relative;background:var(--cream);overflow:clip;
    display:flex;flex-direction:column;gap:20px;align-items:flex-start;
    padding-top:25vw; /* 360px em 1440; acompanha a escala do Zehdsgn */
  }
  /* Zedsgn é elemento gráfico sem grid: texto de 350.5px num canvas de 1440
     (1561.741px de largura — sangra ~61px de cada lado, cortado pelo overflow
     da seção) e top -91px. Proporcional: 350.5/1440 = 24.34vw; -91/1440 = -6.32vw.
     Tablet (Figma 272:72249): 200.5/810 = 24.75vw, top -49/810 = -6.05vw.
     Celular (Figma 272:72284): 150.5/620 = 24.27vw, top -49/620 = -7.9vw. */
  .zehdsgn{
    position:absolute;left:50%;transform:translateX(-50%);top:-6.32vw;
    width:max-content;pointer-events:none;
  }
  .zehdsgn p{
    font-weight:900;font-size:24.34vw;line-height:normal;
    color:var(--blue);text-align:center;white-space:nowrap;
  }
  .lets{display:flex;gap:24px;align-items:center;width:100%;padding:0 32px}
  .lets .mark{width:33.504px;height:50px}
  .lets h2{font-weight:900;font-size:50px;white-space:nowrap;color:var(--ink)}
  .lets .rule{flex:1 0 0;min-width:1px;height:2px;background:var(--line)}
  .lets .tag{font-weight:900;font-size:20px;white-space:nowrap;color:var(--ink)}
  .lets .tag span{color:var(--blue)}
  .contact-block{display:flex;flex-direction:column;width:100%}
  .contact-lede{
    margin:0 32px;
    font-size:18px;width:380px;max-width:100%;height:66px;white-space:pre-wrap;
  }
  .contact-row{
    display:flex;align-items:flex-start;width:100%;
    padding:24px 32px;
  }
  .contact-cols{display:flex;gap:40px;align-items:flex-start;align-self:stretch;flex:1 0 0;min-width:1px}
  .contact-row h4{font-weight:700;font-size:12px;color:var(--ink)}
  .contact-cols .vsep2{width:2px;align-self:stretch;background:var(--line);flex-shrink:0}
  .ccol{display:flex;flex-direction:column;gap:24px}
  .ccol.info{flex:1 0 0;min-width:1px}
  .ccol.links{flex:1 0 0;min-width:1px}
  .ccol .big{display:flex;flex-direction:column;gap:16px}
  .ccol .big .mail{font-weight:600;font-size:30px}
  .ccol .big .mail span{color:var(--gray)}
  .ccol .big .tel{font-weight:700;font-size:30px}
  .ccol nav{display:flex;flex-direction:column;gap:32px}
  .ccol nav a{font-size:16px;font-weight:400}
  .ccol nav a:hover{color:var(--blue)}
  .foot-bar{
    display:flex;gap:24px;align-items:center;width:100%;font-size:16px;
    padding:40px 32px;
  }
  .foot-bar .rule{flex:1 0 0;min-width:1px;height:2px;background:var(--line)}
  .foot-bar p{white-space:nowrap}

  /* ---------- responsive fallback (design é 1440px) ---------- */
  @media (max-width: 1439px){
    .sec-head h2{font-size:clamp(3rem,8.3vw,120px);white-space:normal}
    .projects h2{font-size:clamp(3rem,8.3vw,120px);left:32px;transform:none;white-space:normal;text-align:left}
    .hero-title{font-size:clamp(4rem,10.4vw,150px);line-height:.86}
    .browse b{font-size:clamp(1.8rem,3.5vw,50px)}
  }
  /* ============================================================
     Breakpoints do projeto:
       · web     ≥ 1241px  (canvas do Figma: 1440)
       · tablet  721–1240px (layout empilhado; foto = variante Web, 597px)
       · celular ≤ 720px    (layouts mobile do Figma: canvas 620)
     ============================================================ */
  @media (max-width: 1240px){
    /* ===== hero (Figma tablet 177:33364): nome centralizado, título dividido
       "Product" / foto (variante Web, 597px, centralizada) / "Designer" ===== */
    .hero{height:auto;padding-bottom:60px}
    /* hero é above-the-fold: conteúdo visível na hora (evita reveal preso no reflow) */
    html.rev-on .hero .rev{opacity:1;animation:none}
    .hero .wrap{display:flex;flex-direction:column;align-items:stretch;padding:8px 32px 0;height:auto}
    /* achata a hierarquia p/ ordenar tudo no mesmo contexto flex */
    .hero-left,.hero-id,.hero-id .names,.hero-title{display:contents}
    .hero-name{order:1;text-align:center;height:auto;margin:0 0 2px;font-size:clamp(1.25rem,5.5vw,24px)}
    .hero-title .tw1{order:2}
    .hero-photo{order:3}
    .hero-title .tw2{order:4}
    .hero-intro{order:5;text-align:left;height:auto;margin-top:26px;width:100%}
    .hero-row{order:6;margin-top:22px}
    .hero-stats{order:7;margin-top:26px}
    .hero-hr{order:8;margin-top:26px}
    .hero-companies{order:9;margin-top:6px}
    .hero-logos{order:10;position:static;margin:20px 0 0;width:auto;max-width:100%}
    /* título do tablet: Inter Black 120/128 (Figma 177:33767) */
    .hero-title .tw1,.hero-title .tw2{
      display:block;text-align:center;color:var(--blue);
      font-weight:900;font-size:min(15.8vw,120px);line-height:1.07;letter-spacing:-.02em;
    }
    /* foto centralizada no tamanho da variante Web (círculos nas posições px da base) */
    .hero-photo{position:relative;left:auto;top:auto;margin:24px auto;
      width:min(597px,100%);height:auto;aspect-ratio:597/622}

    /* headings cruzam a divisa da seção, como no web (Figma: h2 em y=-30,
       lede em y=260, grade em y=386) */
    .projects{padding:386px 32px 90px}
    .projects .lede{top:260px;width:calc(100% - 64px)}
    /* featured projects: grade 2 colunas (Figma 177:33800) */
    .proj-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
    /* "Browse All Projects" mantém os 50px do node (177:33805) */
    .browse b{font-size:min(6.2vw,50px)}
    .proj-row{display:contents}
    .proj-row:has(a:hover){height:auto}
    .proj-row a{width:100%;height:423px;flex:none}
    .proj-row a:hover{flex:none}
    /* touch não tem hover: legenda + gradiente sempre visíveis nos cards da home */
    .proj-row a .p-grad{opacity:1}
    .proj-row a .p-cap{opacity:1;transform:none}

    .about{padding-top:130px}
    .about .sec-head{top:-36px}
    /* headings de seção mantêm o display grande do Figma tablet (~120px, quebrando linha) */
    .sec-head h2{font-size:min(14.8vw,120px)}
    .projects h2{font-size:min(14.8vw,120px)}
    /* about (Figma 177:34011): bio | foto lado a lado; embaixo minis + skills + idiomas.
       height:auto em tudo — o height:100% da base cria ciclo de % no wrap e a
       2ª linha vazava por cima do My Work Experience */
    .about-grid{flex-wrap:wrap;height:auto;align-items:stretch}
    .about-col{flex:1 1 calc(50% - 12px);min-width:calc(50% - 12px);height:auto}
    /* linha 1 na altura do node (554): bio-card estica e a foto acompanha */
    .about-grid .about-col:first-child{min-height:554px}
    .about-photo{flex:1 1 calc(50% - 12px);min-height:400px;height:auto}
    .about-col:last-child{flex:1 1 100%;min-width:100%;flex-direction:row;align-items:stretch}
    /* linha 2: todos os cards na mesma altura (skills não esticava) */
    .about-right-top{flex:1 1 auto;width:auto;min-height:0;height:auto;align-items:stretch}
    .about-right-top .skills-card{order:3}
    /* skills e idiomas com larguras iguais (Figma 180:35641/35653):
       minis fixos (~247px c/ gap) e o restante dividido ao meio */
    .lang-card{flex:0 0 calc((100% - 247px)/2);min-width:1px;height:auto}
    .bio-card,.skills-card{min-height:280px;height:auto}
    .mini-col span{border-radius:23.6px}
    .bio-card{padding:32px}
    .bio-card div{font-size:16px}
    /* botões da bio empilhados em largura total (Figma 177:34168) */
    .bio-actions{flex-direction:column;gap:20px}
    .bio-actions .btn{width:100%}
    /* mini-cards de 85px com gap 28 (Figma 177:34038) */
    .mini-col{gap:28px}
    .mini-col span{min-height:0;width:85px;height:85px;flex:none}

    /* wexp (Figma 180:35668/35675): linhas full-bleed com divisores de 2px;
       o padding lateral do .wexp saía dobrado (32 da seção + 32 da linha) */
    .wexp{flex-direction:column;padding:0;align-items:stretch}
    .wexp-intro{padding:0 32px}
    /* "My Work Experience" em Inter Black 80px (Figma 180:35670) */
    .wexp-intro h3{font-size:min(9.9vw,80px);line-height:normal}
    /* alturas fixas de texto (desenhadas p/ 1440) colapsam ao quebrar linha no mobile */
    .wexp-intro p{min-height:0}
    .wexp-row + .wexp-row{border-top-width:2px}

    /* peer feedback: carrossel ativo com sangria — a página mantém 1376px e o
       track centraliza, deixando os cards vizinhos vazarem (Figma x=-283) */
    /* cards do tablet: citações 16px e linha 1 mais baixa (Figma 178:34429) */

    /* footer tablet (Figma 272:72249): linha do lets em 210 (25.93vw),
       wordmark 200.5px, contato numa linha só — coluna esquerda fixa em 356
       com divisor vertical em 396 */
    .foot{padding-top:25.93vw}
    .zehdsgn{top:-6.05vw}
    .zehdsgn p{font-size:24.75vw}
    .contact-row{gap:40px}
    .ccol.info{flex:0 0 356px;min-width:0}
    .contact-lede{height:auto}
    .lets{gap:24px}
    .lets h2{font-size:24px}
    .lets .tag{font-size:16px}
  }
  @media (prefers-reduced-motion: reduce){
    .logo-track{animation:none}
    .hero-deco .c.navy img{animation:none}
    .coin .coin-rot,.hp-frame img{transition-duration:.01ms !important}
    .proj-row,.proj-row a,.p-grad,.p-cap,.browse img,.skills-card .more img,
    .about-photo img,.mini-col span,.skills-card b .sk-word{transition-duration:.01ms !important}
    .fb-card,.fb-card .q{transition-duration:.01ms !important}
    html{scroll-behavior:auto}
  }
  @media (max-width: 720px){
    nav.main{display:none}

    /* ===== hero celular (Figma 130:30471) — diferenças sobre o tablet ===== */
    .hero-intro{font-size:16px}
    .hero-row{flex-wrap:nowrap;gap:16px}
    .hero-row .rule{display:none}
    .hero-stats{display:flex;flex-wrap:nowrap;gap:0;justify-content:space-between}
    .hero-title .tw1,.hero-title .tw2{font-size:min(18vw,120px);line-height:1}

    /* ===== Figma Mobile - Home (180:37005, canvas 620): headings cruzam a
       divisa como no web, tipografia e offsets proporcionais à viewport ===== */

    /* projetos: 1 coluna, cards na proporção 556×423 do node */
    .proj-grid{grid-template-columns:1fr}
    .proj-row a{height:auto;aspect-ratio:556/423}
    .projects{padding:54.2vw 32px 90px}     /* grade em y=336 no canvas 620 */
    .projects h2{top:-6.3vw}                /* -39 */
    .projects .lede{top:37.1vw}             /* 230 */
    .sec-head h2,.projects h2{font-size:min(16.1vw,100px)}  /* 100px no node */
    /* ledes proporcionais (18px no canvas 620) p/ não invadir o conteúdo */
    .sec-head p,.projects .lede{font-size:clamp(13px,2.9vw,18px)}
    .browse b{font-size:min(6.45vw,40px)}

    .about{padding-top:21vw}                /* conteúdo em y=130 */
    .about .sec-head{top:-5.8vw}            /* -36 */
    .feedback{gap:min(5.16vw,32px)}
    .feedback .sec-head{margin-top:-5.3vw}  /* -33 no canvas 620 */

    /* about mobile (180:37271): sem foto; bio + 2 botões meio a meio;
       minis e skills lado a lado; idiomas viram barra horizontal */
    .about-grid{flex-direction:column;flex-wrap:nowrap}
    .about-col{min-width:100%;flex:none;height:auto}
    .about-photo{display:none}
    .about-grid .about-col:first-child{min-height:0}
    .about-col:last-child{flex-direction:column}
    /* flex-basis 0 das bases colapsa em coluna de altura auto → fluxo normal */
    .bio-card{flex:none;height:auto;min-height:0}
    .about-right-top{flex:none;height:auto;flex-wrap:nowrap;align-items:stretch}
    .skills-card,.mini-col{height:auto}
    .bio-actions{flex-direction:row;gap:20px}
    .bio-actions .btn{flex:1 1 0;width:auto}
    .mini-col{gap:calc((100vw - 64px)*.051)}
    .mini-col span{width:calc((100vw - 64px)*.1536);height:calc((100vw - 64px)*.1536);
      min-height:0;flex:none;border-radius:23.6px}
    .skills-card{min-height:0}
    .lang-card{flex:none;height:auto;width:100%}
    .lang-card > div{flex-direction:row;justify-content:space-between;gap:8px}
    .lang-card .rule{display:none}
    .lang-card b{font-size:min(3.9vw,24px)}
    .lang-card span{font-size:min(2.9vw,18px)}

    /* wexp: mesmo tratamento do tablet, heading 80 proporcional (180:37327) */
    .wexp-intro h3{font-size:min(12.9vw,80px)}

    /* peer feedback: marquee; cards encolhem um pouco no celular */
    .fb-card{width:min(445.33px, 85vw)}

    /* footer (180:37496): régua acima das colunas (sem divisor vertical),
       'Let's work together!' e foot-bar em linha única compacta */
    .foot{padding-top:min(33.87vw,210px)}   /* lets em 210 no canvas 620 */
    .zehdsgn{top:-7.9vw}
    .zehdsgn p{font-size:24.27vw}
    /* contato empilhado: CONTACT ME, régua horizontal, NAVIGATION|SOCIAL */
    .contact-block{margin-top:min(3.7vw,23px)}
    .contact-row{flex-direction:column;gap:40px}
    .contact-cols{width:100%;flex-wrap:wrap;gap:40px 0;justify-content:space-between;align-self:auto}
    .contact-cols .vsep2{width:100%;height:2px;align-self:auto}
    .ccol.links{flex:0 1 auto;min-width:0}
    .ccol .big .mail,.ccol .big .tel{font-size:min(4.84vw,30px)}
    /* lets: linha marca+título 32px, régua inteira, tag 20px (272:72287) */
    .lets{flex-wrap:wrap;gap:24px}
    .lets h2{font-size:min(5.16vw,32px)}
    .lets .rule{flex:0 0 100%}
    .lets .tag{font-size:min(3.23vw,20px)}
    .foot-bar{flex-wrap:nowrap}
    .foot-bar p{font-size:clamp(10px,2.26vw,14px)}

    /* foto — variante Mobile do componente (Figma 132:31124, 549×572):
       círculos de 11,89% da largura, fingerprint em right:0/top:-0,48%,
       grupo esquerdo centrado em 81,43% da altura, gap 12,68% da largura
       do grupo (8,276/65,292) e sombra proporcional à foto */
    .hero-photo{
      position:relative;left:auto;top:auto;margin:4px 0;width:100%;height:auto;aspect-ratio:549/572;
      filter:drop-shadow(calc((100vw - 64px)*-.0503) calc((100vw - 64px)*.057)
             calc((100vw - 64px)*.0704) rgba(0,0,0,.15));
    }
    .hero-photo img{border-radius:24px}
    .hero-circle{display:block;left:auto;right:0;top:-0.48%;
      width:11.89%;height:auto;aspect-ratio:1}
    .hero-circle img{left:34%;top:30%;width:32%;height:40%}
    .hero-deco{display:flex;left:0;top:81.43%;transform:translateY(-50%);width:11.89%;gap:0}
    .hero-deco .c{position:relative;width:100%;height:auto;aspect-ratio:1}
    .hero-deco .c + .c{margin-top:12.68%}
    .hero-deco .c img{left:28%;top:27%;width:44%;height:44%}
    .hero-deco .c img.tall{left:26%;top:18%;width:48%;height:64%}

    /* stats: 3 colunas com divisores */
    .stat{width:auto;flex:1 1 0;min-width:0}
    .stat b{font-size:clamp(2rem,10vw,42px)}
    .stat span{font-size:clamp(.82rem,3.4vw,16px)}
    .stat-sep{display:block;width:2px;height:auto;align-self:stretch;margin:0 3vw}
    .sec-head p{width:100%}
    .ccol.info{width:100%;flex:none}

    /* bento de estratégia: fotos na proporção do canvas mobile (556/270) */
    .strat .sphoto,.strat .sphoto.sq{aspect-ratio:556/270}

    /* ===== About mobile (Figma 183:45556) ===== */
    .ab h1{font-size:min(12.9vw,80px)}
    .ab-hello h2{font-size:min(9.7vw,60px)}
    /* langbar vira grade 2×2 de cards navy (203:49634) */
    .ab .ab-langbar{background:transparent;padding:0;border-radius:0;flex-wrap:wrap;gap:20px}
    .ab .ab-langbar .vsep{display:none}
    .ab .ab-langbar .lang-item{
      background:var(--ink);color:var(--cream);border-radius:min(4.84vw,30px);
      width:calc(50% - 10px);padding:min(6.45vw,40px);min-height:123px;justify-content:center;
    }
    .ab .ab-langbar .lang-item b{font-size:min(3.23vw,20px)}
    .ab .ab-langbar .lang-item span{font-size:min(2.58vw,16px)}
    /* cards de feedback com raio proporcional ao canvas 620 */
    .fb-card{border-radius:min(4.84vw,30px)}
    /* headings das seções do About no canvas 620: Companies/Tech 50,
       Skills 70, Design with Strategy 80 */
    .ab .sec70 h2{font-size:min(8.06vw,50px)}
    .ab .sec70:has(.chip-block) h2{font-size:min(11.3vw,70px)}
    .ab .sec70:has(.strat) h2{font-size:min(12.9vw,80px)}
  }

/* ================= página Projects ================= */
.plist{
  background:var(--cream);
  display:flex;flex-direction:column;gap:40px;align-items:center;
  padding:20px max(32px, calc((100% - var(--grid)) / 2)) 0;
}
.phead{width:100%;display:grid;gap:0}
.phead h1{font-weight:900;font-size:120px;color:var(--ink);line-height:normal}
.phead p{font-size:18px;color:var(--ink);width:62.48%;margin-top:6px;height:66px}
.pcard-lg{
  position:relative;width:100%;height:907px;border-radius:30px;overflow:clip;display:block;
}
.pcard-lg > img{width:100%;height:100%;object-fit:cover}
.pcard-lg .grad{
  position:absolute;inset:0;
  background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,.6) 30%, #000 100%);
}
/* info centralizada (Figma 73:3418): categoria → título → descrição */
.pcard-lg .pinfo{
  position:absolute;left:50%;top:calc(50% + 160px);transform:translate(-50%,-50%);
  width:800px;max-width:92%;
  display:flex;flex-direction:column;gap:18px;align-items:center;text-align:center;
  color:var(--cream);
}
.pcard-lg .pinfo .p-cat{font-weight:700;font-size:16px;color:#fff;white-space:nowrap}
.pcard-lg .pinfo b{font-weight:900;font-size:50px;line-height:normal;min-width:100%}
.pcard-lg .pinfo .pdesc{font-weight:400;font-size:16px;min-width:100%}
.more-head{display:flex;gap:24px;align-items:center;width:100%}
.more-head h2{font-weight:900;font-size:70px;color:var(--ink);white-space:nowrap}
.more-head .rule{flex:1 0 0;min-width:1px;height:2px;background:var(--line)}
.pgrid2{display:flex;flex-direction:column;gap:60px;width:100%}
.pgrid2 .prow{display:flex;gap:40px;align-items:flex-start;width:100%}
.pcard-sm{flex:1 0 0;min-width:1px;display:flex;flex-direction:column;gap:24px}
.pcard-sm .thumb{height:423px;border-radius:30px;overflow:clip}
.pcard-sm .thumb img{width:100%;height:100%;object-fit:cover;transition:transform .6s cubic-bezier(.19,1,.22,1)}
.pcard-sm:hover .thumb img{transform:scale(1.04)}
.pcard-sm .info{display:flex;flex-direction:column;gap:18px;height:157px}
.pcard-sm .info b{font-weight:900;font-size:40px;color:var(--ink);line-height:normal}
.pcard-sm .info p{font-weight:400;font-size:16px;color:var(--ink)}
.plist .full-rule{margin-top:20px}

/* ================= página About ================= */
.ab{
  background:var(--cream);
  display:flex;flex-direction:column;gap:80px;align-items:center;
  padding:20px 0 40px;overflow:clip;
}
.ab .head-block{width:100%;display:flex;flex-direction:column;gap:20px}
.ab h1{
  font-weight:900;font-size:120px;color:var(--ink);line-height:normal;
  padding:0 max(32px, calc((100% - var(--grid)) / 2));
}
.ab-intro-wrap{display:flex;justify-content:center;width:100%}
/* hero do About (Figma 96:2662): "Hello!" azul 60 + texto 18 direto no creme,
   gap de 80 entre o texto e a foto (mesmo componente do hero da home) */
.ab-intro{display:flex;gap:80px;align-items:center;height:622px;width:1376px;max-width:calc(100% - 64px)}
.ab-col{flex:1 0 0;min-width:1px;height:618px;display:flex;flex-direction:column;gap:24px;justify-content:center}
.ab-hello{display:flex;flex-direction:column;gap:40px;width:100%}
.ab-hello h2{font-weight:900;font-size:60px;line-height:normal;color:var(--blue)}
.ab-hello .txt{font-size:18px;font-weight:400;color:var(--ink)}
.ab-hello .txt p + p{margin-top:1.2em}
.ab-actions{display:flex;gap:24px;align-items:center;width:100%}
.ab-actions .rule{flex:1 0 0;min-width:1px;height:2px;background:var(--line)}
/* pin do Figma: viewBox 12.93×18.93 com preserveAspectRatio none — caixa exata */
.ab-actions .hero-pill img{width:12.93px;height:18.93px}
.ab-photo{
  position:relative;flex-shrink:0;width:597px;height:622px;
  filter:drop-shadow(-30px 34px 42px rgba(0,0,0,.15));
}
.ab-photo > img{width:100%;height:100%;object-fit:cover}
.ab-photo .fp{position:absolute;left:526px;top:-3px;width:71px;height:71px;border-radius:50%;background:var(--ink)}
.ab-photo .fp img{position:absolute;left:24.3px;top:19px;width:23.33px;height:32px}
.ab-photo .col{position:absolute;left:0;top:391px;display:flex;flex-direction:column;gap:9px}
.ab-photo .col .c{position:relative;width:71px;height:71px;border-radius:50%}
.ab-photo .col .c.blue{background:var(--blue)}
.ab-photo .col .c img{position:absolute;left:20px;top:19px;width:32px;height:32px}
.ab-photo .col > img{width:71px;height:71px}
/* barra alinhada ao grid de 1376px do header em qualquer viewport */
.ab-langbar-wrap{padding:32px max(32px, calc((100% - var(--grid)) / 2));width:100%}
.ab-langbar{
  background:var(--ink);color:var(--cream);border-radius:30px;
  padding:24px 40px;display:flex;align-items:center;justify-content:space-between;width:100%;
}
.ab-langbar .lang-item{width:138px;display:flex;flex-direction:column}
.ab-langbar .lang-item b{font-weight:900;font-size:24px}
.ab-langbar .lang-item span{font-weight:400;font-size:18px}
.ab-langbar .vsep{width:1px;height:73px;background:rgba(228,228,227,.2)}
.sec70{
  width:100%;display:flex;flex-direction:column;gap:40px;align-items:center;
}
.sec70 .h-block{
  width:100%;padding:0 max(32px, calc((100% - var(--grid)) / 2));
  display:flex;flex-direction:column;gap:10px;
}
.sec70 h2{font-weight:900;font-size:70px;color:var(--ink);line-height:normal}
.sec70 .h-block p{font-size:18px;width:636px;max-width:100%;height:66px}
/* carrossel infinito, igual ao da home, contido no grid */
.ab-logos{width:1376px;max-width:calc(100% - 64px);overflow:hidden}
.ab-logos:hover .logo-track{animation-play-state:paused}
.techstack{width:1376px;max-width:calc(100% - 64px);height:auto}
.ab .chip-block{
  width:100%;padding:0 max(32px, calc((100% - var(--grid)) / 2));
  display:flex;flex-direction:column;gap:16px;
}
.ab .chip-row{gap:16px 12px}
.strat{display:flex;flex-direction:column;gap:20px;width:1376px;max-width:calc(100% - 64px)}
.strat .srow{display:flex;gap:20px;align-items:center;width:100%}
.scard{
  flex:1 0 0;min-width:1px;height:445.33px;
  border:1px solid var(--line);border-radius:30px;padding:40px;overflow:clip;
  display:flex;flex-direction:column;gap:24px;align-items:flex-start;
}
.scard.navy{background:var(--ink);color:var(--cream)}
.scard.blue{background:var(--blue);color:var(--cream)}
.scard.white{background:#fff;color:var(--ink);justify-content:space-between;gap:0}
.scard .num{font-weight:900;font-size:70px;line-height:normal;width:100%}
.scard .t{font-weight:900;font-size:35px;line-height:normal;width:100%}
.scard .rule{width:100%;height:1px;background:rgba(228,228,227,.2)}
.scard.white .rule{background:var(--line)}
.scard p{font-weight:400;font-size:16px;width:100%}
.scard.white .low{display:flex;flex-direction:column;gap:24px;width:100%}
.sphoto{
  flex:1 0 0;min-width:1px;height:445.33px;
  border:1px solid var(--line);border-radius:30px;overflow:clip;
}
.sphoto.sq{flex:none;width:445.33px}
.sphoto img{width:100%;height:100%;object-fit:cover}

@media (max-width: 1240px){
  /* Projects tablet (Figma 180:37552): cards 746×557, heading 80px/2 linhas,
     grade de baixo mantém 2 colunas com thumbs 353×263 */
  .pcard-lg{height:auto;aspect-ratio:746/557;min-height:0}
  /* tipografia do card é a MESMA do web (cat 16 / título 50 / desc 16 fixos);
     só o bloco de info estreita p/ 600 (Figma 180:38813) */
  .pcard-lg .pinfo{width:600px}
  .ab h1{font-size:min(9.9vw,80px)}   /* 'About me' 80px (183:40749) */
  .phead h1{font-size:min(9.9vw,80px)}
  .phead p{width:100%;height:auto;margin-top:46px}
  .pcard-sm .thumb{height:auto;aspect-ratio:353/263}
  .pcard-sm .info{height:auto}
  .sec70 h2{font-size:min(8.6vw,70px);white-space:normal}
  /* lede das seções 70: o height:66px da base (2 linhas em 1440) transborda
     quando o texto quebra mais — o gap de 40 do node some visualmente */
  .sec70 .h-block p{height:auto}
  /* Skills ≤1240: o JS redistribui as chips em fileiras reais balanceadas;
     nowrap garante que cada fileira segura exatamente o que a simulação pôs */
  .ab .chip-block .chip-row{flex-wrap:nowrap}
  .more-head h2{font-size:min(8.6vw,70px);white-space:normal}
  /* ritmo de seções do node tablet/mobile: 40px (base web usa 80) */
  .ab{gap:40px}
  .ab-langbar-wrap{padding:20px 32px}
  /* raios proporcionais ao canvas (30 no 620+; escala abaixo) */
  .scard,.sphoto{border-radius:min(4.84vw,30px)}
  /* hero do About tablet (Figma 183:40748): Hello → foto centralizada →
     texto → ações, no mesmo fluxo (hierarquia achatada p/ ordenar) */
  .ab-intro{flex-direction:column;height:auto;gap:24px}
  .ab-col,.ab-hello{display:contents}
  .ab-hello h2{order:1;font-size:min(7.4vw,60px)}
  .ab-photo{order:2;width:min(597px,100%);height:auto;aspect-ratio:597/622;
    flex-shrink:1;margin:16px auto}
  .ab-hello .txt{order:3}
  .ab-actions{order:4;flex-wrap:wrap}
  /* langbar: linha única com divisores, type 20/16 (183:41987) */
  .ab .ab-langbar .lang-item b{font-size:min(2.5vw,20px)}
  .ab .ab-langbar .lang-item span{font-size:min(2vw,16px)}
  /* wexp do About: linhas de 746 recuadas em 32 (183:42012) — o conteúdo
     alinha em 32 com as demais seções (sem somar o padding interno da linha) */
  .ab .wexp{padding:0 32px}
  .ab .wexp-row{padding:24px 0}
  .ab .wexp-intro{padding:0}
  /* bento de estratégia igual ao mobile (183:45052): full-width, 03 e a 3ª
     foto ocultos, fotos landscape */
  .strat .srow{flex-direction:column}
  .sphoto.sq{width:100%}
  .scard,.sphoto{width:100%;flex:none}
  .strat .scard{height:auto}
  .strat .sphoto,.strat .sphoto.sq{flex:none;height:auto;aspect-ratio:746/270;position:relative}
  /* img absoluta: a altura natural não pode vencer o aspect-ratio do container */
  .strat .sphoto img{position:absolute;inset:0;width:100%;height:100%}
  /* 03 (Product Thinking) presente nos nodes novos (226:55242/55250):
     card branco de 445.33 com num no topo e texto na base, ANTES da 2ª foto */
  .strat .scard.white{display:flex;height:445.33px}
  .strat .sphoto.sq{order:1}
  .strat .srow:last-child .sphoto{display:none}
}
@media (max-width: 720px){
  /* Projects mobile (Figma 180:38356, canvas 620): heading 80 proporcional,
     cards 556×400, grade de baixo em 1 coluna com thumbs 556×333 */
  .phead h1{font-size:min(12.9vw,80px)}
  .phead p{font-size:clamp(13px,2.9vw,18px)}
  .pcard-lg{aspect-ratio:556/400}
  /* info do card mobile (180:38825): no canvas 620 o bloco (500 de largura,
     type 16/50/16) termina rente à base do card — âncora em bottom, com o
     type proporcional p/ caber em telas menores que o canvas */
  .pcard-lg .pinfo{top:auto;bottom:0;transform:translateX(-50%);width:500px}
  .pcard-lg .pinfo b{font-size:min(8.06vw,50px)}
  .pcard-lg .pinfo .p-cat,.pcard-lg .pinfo .pdesc{font-size:clamp(12px,2.58vw,16px)}
  .more-head h2{font-size:min(8.06vw,50px)}
  .pgrid2 .prow{flex-direction:column}
  .pcard-sm .thumb{aspect-ratio:556/333}
  /* cards de idioma do About (2×2): type do canvas 620 (203:49617) */
  .ab .ab-langbar .lang-item b{font-size:min(3.23vw,20px)}
  .ab .ab-langbar .lang-item span{font-size:min(2.58vw,16px)}
  /* fotos do bento no mobile: proporção 556/270 do node (183:47533) */
  .strat .sphoto,.strat .sphoto.sq{aspect-ratio:556/270}
  /* 03: 445.33 no canvas 620; abaixo disso cresce p/ o texto não clipar */
  .strat .scard.white{height:auto;min-height:445.33px}
  /* hero do About mobile (183:45727): 'About me' 80 e Hello 60 proporcionais,
     foto na variante Mobile (549×572), texto 16 */
  .ab h1{font-size:min(12.9vw,80px)}
  .ab-hello h2{font-size:min(9.7vw,60px)}
  .ab-photo{aspect-ratio:549/572;margin:16px 0;width:100%}
  .ab-hello .txt{font-size:16px}
}

/* chips outline (Skills — About page) */
.chip-row{display:flex;flex-wrap:wrap;gap:16px 12px;align-items:flex-start}
.chip{
  border:3px solid var(--blue);border-radius:68px;
  padding:12px 18px;font-weight:500;font-size:16px;color:var(--blue);
  letter-spacing:-.02em;
  text-align:center;white-space:nowrap;
  transition:background .25s,color .25s;
}
.chip:hover{background:var(--blue);color:var(--cream)}

/* Peer Feedback do About: citações em 16px (rev. Figma) */

/* empilhamento dos featured projects: sticky puro, como em zedsgn.com/projects */
.scroll-stack{width:100%}
.scroll-stack .pcard-lg{
  position:sticky;top:80px;
  margin-bottom:40px;
}
.scroll-stack .pcard-lg:last-of-type{margin-bottom:0}

/* ============================================================
   Header fixo + glass pill no scroll (ref. zedsgn.com / Figma 120-15458)
   ============================================================ */
header{position:sticky;top:0;z-index:100;transition:background .3s, border-color .3s, padding-top .4s cubic-bezier(.19,1,.22,1)}
.header-in{transition:max-width .4s cubic-bezier(.19,1,.22,1), margin .4s cubic-bezier(.19,1,.22,1),
           padding .3s, border-radius .4s cubic-bezier(.19,1,.22,1), background .3s, box-shadow .3s}
/* estado rolado: barra vira pill de vidro central flutuante */
/* padding-top no header cria o respiro real (margin colapsaria com o sticky) */
header.scrolled{background:transparent;border-bottom-color:transparent;padding-top:24px}
/* barra larga inset flutuante (ref. pedroguimaraes.work): mantém logo/nav/lang
   espalhados, apenas recua 32px de cada lado + 16px do topo, com glass forte */
header.scrolled .header-in{
  max-width:min(1040px, calc(100% - 48px));margin:0 auto;
  padding:12px 28px;border-radius:100px;
  border:2px solid var(--line);
  background:rgba(246,247,251,.72);
  -webkit-backdrop-filter:blur(20px) saturate(1.6);backdrop-filter:blur(20px) saturate(1.6);
  box-shadow:0 12px 34px rgba(3,11,23,.10);
}
/* elementos exclusivos do mobile (escondidos no desktop) */
.avail{display:none;align-items:center;gap:8px;font-weight:500;font-size:16px;color:var(--ink);white-space:nowrap}
.avail-dot{position:relative;width:14px;height:14px;flex-shrink:0}
.avail-dot::before,.avail-dot::after{content:"";position:absolute;border-radius:50%;background:var(--blue)}
/* brilho pulsante: o halo expande e some (ping de radar) enquanto o núcleo
   respira um glow suave — o selo só existe no mobile (≤720px) */
.avail-dot::before{inset:0;opacity:.5;animation:availPing 2.2s cubic-bezier(.25,.6,.35,1) infinite}
.avail-dot::after{inset:4px;animation:availGlow 2.2s ease-in-out infinite}
@keyframes availPing{
  0%{transform:scale(.55);opacity:.55}
  70%,100%{transform:scale(1.9);opacity:0}
}
@keyframes availGlow{
  0%,100%{box-shadow:0 0 0 0 rgba(14,91,208,.45)}
  45%{box-shadow:0 0 8px 2px rgba(14,91,208,.55)}
}
@media (prefers-reduced-motion:reduce){
  .avail-dot::before,.avail-dot::after{animation:none}
  .avail-dot::before{transform:none;opacity:.5}
}
.menu-btn{display:none;width:37px;height:37px;border-radius:50%;background:var(--blue);
  border:0;padding:0;cursor:pointer;flex-direction:column;align-items:center;justify-content:center;
  gap:5px;flex-shrink:0}
/* as barras são itens flex: flex:none impede que encolham/estiquem */
.menu-btn .menu-line{flex:none;display:block;width:17px;height:2px;border-radius:2px;background:#fff;
  transition:transform .3s var(--ease), opacity .3s var(--ease)}
.menu-btn.open{background:var(--ink)}
.menu-btn.open .menu-line:first-child{transform:translateY(3.5px) rotate(45deg)}
.menu-btn.open .menu-line:last-child{transform:translateY(-3.5px) rotate(-45deg)}
.menu-sheet{display:none}

@media (max-width: 720px){
  /* header vira sempre um pill de vidro (Figma Menu Mobile) */
  header{background:transparent;border-bottom:0}
  .header-in{
    width:fit-content;max-width:calc(100% - 24px);margin:12px auto;gap:16px;
    padding:12px 16px;border-radius:90px;
    border:2px solid var(--line);
    background:rgba(246,247,251,.72);
    -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
    box-shadow:0 10px 30px rgba(3,11,23,.08);
  }
  header.scrolled .header-in{margin:12px auto} /* já é pill */
  .lang{display:none}
  .avail{display:flex}
  .menu-btn{display:flex}
  /* pílulas do BubbleMenu: ver bloco ".menu-sheet (BubbleMenu)" no fim do arquivo */
}

/* ============================================================
   Cursor bolinha azul (ref. muvuca.studio): dot que segue o mouse,
   cresce em elementos interativos e encolhe no clique
   ============================================================ */
/* botão "View Project" dos overlays (Figma 124:16134) */
.btn-vp{
  display:inline-block;background:var(--cream);color:var(--blue);
  font-weight:500;font-size:18px;text-align:center;white-space:nowrap;
  padding:14px 24px;border-radius:68px;
}
/* home: imagem alternativa no estado expandido (card Dashboard Redesign) */
.proj-row a .img-hover{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  opacity:0;transition:opacity .4s;
}
.proj-row a:hover .img-hover{opacity:1}
@media (prefers-reduced-motion: reduce){
  .header-in,.card-cursor,.menu-sheet{transition:none}
}

/* ============================================================
   Tech Stack bento com efeito MagicBento (border-glow na cor de cada card)
   ============================================================ */
.mb-grid{
  position:relative;width:1376px;max-width:calc(100% - 64px);
  aspect-ratio:1376/1100;
}
.mb-card{
  position:absolute;border-radius:30px;overflow:hidden;
  border:1px solid rgba(3,11,23,.06);
  transform:perspective(900px);
  transition:transform .28s cubic-bezier(.19,1,.22,1), box-shadow .3s ease;
  will-change:transform;
  --gi:0;--glow-x:50%;--glow-y:50%;
}
.mb-card picture{display:contents}
.mb-card img{width:100%;height:100%;object-fit:cover;display:block}
.mb-card::after{
  content:"";position:absolute;inset:0;padding:2px;border-radius:inherit;
  background:radial-gradient(260px circle at var(--glow-x) var(--glow-y),
    rgba(var(--glow), calc(var(--gi) * .9)) 0%,
    rgba(var(--glow), calc(var(--gi) * .35)) 35%, transparent 65%);
  -webkit-mask:linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask:linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);mask-composite:exclude;
  pointer-events:none;z-index:2;transition:opacity .3s ease;
}
.mb-card.hot{box-shadow:0 12px 30px rgba(3,11,23,.14), 0 0 26px rgba(var(--glow), .35)}

/* ---- card Figma do Tech Stack: no hover a arte gira pelas TRÊS versões —
   a padrão continua abrindo o ciclo — com crossfades suaves de ~0,4s
   (Figma 464:16201). A base fica sempre por baixo; as variantes fundem por
   cima e, ao sair do card, esvaecem de volta. Sob o ::after do glow. ---- */
.mb-card .ts-swap{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  opacity:0;pointer-events:none;z-index:1;
  transition:opacity .3s ease;
}
@media (hover:hover) and (pointer:fine){
  .mb-card:hover .ts-swap.s1{animation:tsSwapA 3.6s linear infinite}
  .mb-card:hover .ts-swap.s2{animation:tsSwapB 3.6s linear infinite}
  /* Illustrator (mb-8) tem TRÊS variantes: ciclo de 4,8s em quatro fases */
  .mb-card.mb-8:hover .ts-swap.s1{animation:tsSwap4A 4.8s linear infinite}
  .mb-card.mb-8:hover .ts-swap.s2{animation:tsSwap4B 4.8s linear infinite}
  .mb-card.mb-8:hover .ts-swap.s3{animation:tsSwap4C 4.8s linear infinite}
}
@keyframes tsSwap4A{0%,21%{opacity:0}26%,46%{opacity:1}51%,100%{opacity:0}}
@keyframes tsSwap4B{0%,46%{opacity:0}51%,71%{opacity:1}76%,100%{opacity:0}}
@keyframes tsSwap4C{0%,71%{opacity:0}76%,95%{opacity:1}100%{opacity:0}}
/* ciclo de 3,6s: padrão (0–33%), variante 2 (33–66%), variante 3 (66–100%) */
@keyframes tsSwapA{0%,30%{opacity:0}37%,63%{opacity:1}70%,100%{opacity:0}}
@keyframes tsSwapB{0%,63%{opacity:0}70%,93%{opacity:1}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){
  .mb-card .ts-swap{animation:none !important;opacity:0 !important;transition:none}
}
/* ---- card Claude Code (mb-2): arte em camadas do Figma 96:3258. No hover o
   asterisco gira em sentido horário e as órbitas atrás giram ao contrário;
   as animações ficam pausadas fora do hover (congelam em vez de saltar).
   Desktop apenas — ≤1240px o <picture> volta a mostrar a arte única. ---- */
.mb-2 .ts-cbg,.mb-2 .ts-orbit,.mb-2 .ts-cmark{
  position:absolute;pointer-events:none;z-index:1;max-width:none;
}
.mb-2 .ts-cbg{inset:0;background:linear-gradient(146.5deg,#D77655 21.88%,#BB5634 100%)}
.mb-2 .ts-orbit{
  left:-50.419%;top:-22.13%;width:201.117%;height:auto;
  animation:tsSpinCCW 30s linear infinite paused;
}
.mb-2 .ts-cmark{
  left:20.67%;top:23.333%;width:58.659%;height:auto;
  animation:tsSpinCW 16s linear infinite paused;
}
@keyframes tsSpinCW{to{transform:rotate(360deg)}}
@keyframes tsSpinCCW{to{transform:rotate(-360deg)}}
/* ---- card Lovable (mb-3): no desktop a arte vira sanduíche — fundo chapado
   (#141414, o fill do card no Figma), o brilho holográfico varre SÓ o fundo
   e os elementos (coração, divisor, screenshot) ficam por cima em .ts-lfg ---- */
.mb-3 .ts-lbg{position:absolute;inset:0;z-index:1;pointer-events:none;background:#141414}
.mb-3 .ts-lfg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:3;pointer-events:none;max-width:none}
.mb-3::before{
  content:"";position:absolute;inset:0;z-index:2;pointer-events:none;
  background:linear-gradient(115deg,
    transparent 14%,
    rgba(251,104,6,.55) 30%,
    rgba(246,76,140,.55) 42%,
    rgba(153,104,238,.6) 54%,
    rgba(91,103,230,.5) 66%,
    transparent 82%);
  background-size:240% 240%;background-position:88% 88%;
  mix-blend-mode:screen;opacity:0;transition:opacity .35s ease;
}
@media (hover:hover) and (pointer:fine){
  .mb-2:hover .ts-orbit,.mb-2:hover .ts-cmark{animation-play-state:running}
  .mb-3:hover::before{opacity:1;animation:tsHolo 2.8s ease-in-out infinite alternate}
  /* card Figma: a 3ª arte do ciclo (v3, memojis) é escura — o texto fica
     branco só na janela dela, sincronizado com tsSwapB (63–70% e 93–100%) */
  .mb-1:hover .ts-tt,.mb-1:hover .ts-td{animation:tsInkSwap 3.6s linear infinite}
}
@keyframes tsInkSwap{0%,63%{color:#030B17}70%,93%{color:#F1EFE5}100%{color:#030B17}}
@keyframes tsHolo{from{background-position:88% 88%}to{background-position:10% 10%}}
@media (max-width:1240px){
  .mb-2 .ts-cbg,.mb-2 .ts-orbit,.mb-2 .ts-cmark,.mb-3 .ts-lbg,.mb-3 .ts-lfg{display:none}
}
@media (prefers-reduced-motion:reduce){
  .mb-2 .ts-orbit,.mb-2 .ts-cmark{animation:none}
  .mb-3::before{animation:none !important}
}
/* ---- Tech Stack: títulos e descrições como HTML real (localizáveis).
   As artes foram reexportadas do Figma sem os textos; cada .ts-tt/.ts-td
   replica a tipografia do Figma (Inter Black 30 / Regular 16) com posição
   em % do card e fonte em cqw, escalando com o container. Âncora inferior
   (bottom) nos blocos que no Figma encostam na margem de baixo, para
   traduções mais longas crescerem para cima sem vazar do card. ---- */
.mb-card{container-type:size}
.mb-card .ts-tt,.mb-card .ts-td{
  position:absolute;z-index:4;pointer-events:none;margin:0;display:block;
  line-height:1.21;
}
.mb-card .ts-tt{font-weight:900}
.mb-card .ts-td{font-weight:400}
.ts-tt.c2,.ts-td.c2{display:none}   /* par Confluence do card combinado: só no celular */
/* desktop (canvas 1376x1100; cards 620/358/300) */
.mb-1 .ts-tt{left:6.452%;top:35.556%;font-size:4.839cqw;color:#030B17}
.mb-1 .ts-td{left:6.452%;top:49.63%;width:59.677%;font-size:2.581cqw;color:#030B17}
.mb-2 .ts-tt{left:11.173%;right:11.173%;top:7.407%;font-size:8.38cqw;color:#F1EFE5;text-align:center}
.mb-2 .ts-td{left:11.173%;right:11.173%;bottom:7.407%;font-size:4.469cqw;color:#F1EFE5;text-align:center}
.mb-3 .ts-tt{left:11.173%;top:28.148%;font-size:8.38cqw;color:#F1EFE5}
.mb-3 .ts-td{left:11.173%;right:11.173%;top:42.222%;font-size:4.469cqw;color:#F1EFE5}
.mb-4 .ts-tt{left:11.173%;right:11.173%;top:67.963%;font-size:8.38cqw;color:#F1EFE5;text-align:center}
.mb-4 .ts-td{left:11.173%;right:11.173%;bottom:7.407%;font-size:4.469cqw;color:#F1EFE5;text-align:center}
.mb-5 .ts-tt{left:6.452%;top:12.862%;font-size:4.839cqw;color:#F1EFE5}
.mb-5 .ts-td{left:6.452%;top:37.299%;width:37.097%;font-size:2.581cqw;color:#F1EFE5}
.mb-6 .ts-tt{left:28.667%;top:19.139%;font-size:10cqw;color:#030B17}
.mb-6 .ts-td{left:13.333%;top:44.498%;width:73.333%;font-size:5.333cqw;color:#030B17}
.mb-7 .ts-tt{left:29.333%;top:19.139%;font-size:10cqw;color:#F1EFE5}
.mb-7 .ts-td{left:13.333%;top:59.331%;width:73.333%;font-size:5.333cqw;color:#F1EFE5}
.mb-8 .ts-tt{left:11.173%;right:11.173%;top:71.481%;font-size:8.38cqw;color:#F1EFE5;text-align:center}
.mb-8 .ts-td{left:11.173%;right:11.173%;top:85.556%;font-size:4.469cqw;color:#F1EFE5;text-align:center}
@media (max-width:1240px){
  /* tablet (node 183:42536; canvas 746/363) */
  .mb-1 .ts-tt{left:5.362%;top:35.556%;font-size:4.021cqw}
  .mb-1 .ts-td{left:5.362%;top:49.63%;width:49.598%;font-size:2.145cqw}
  .mb-2 .ts-tt{font-size:8.264cqw;left:11.019%;right:11.019%}
  .mb-2 .ts-td{font-size:4.408cqw;left:11.019%;right:11.019%}
  .mb-3 .ts-tt{left:11.019%;font-size:8.264cqw}
  .mb-3 .ts-td{left:11.019%;right:11.019%;font-size:4.408cqw}
  .mb-4 .ts-tt{left:11.019%;right:11.019%;font-size:8.264cqw}
  .mb-4 .ts-td{left:11.019%;right:11.019%;font-size:4.408cqw}
  .mb-5 .ts-tt{left:11.019%;right:11.019%;top:7.407%;width:auto;font-size:8.264cqw;text-align:center}
  .mb-5 .ts-td{left:11.019%;right:11.019%;top:21.481%;width:auto;font-size:4.408cqw;text-align:center}
  .mb-6 .ts-tt{left:23.691%;top:15.385%;font-size:8.264cqw}
  .mb-6 .ts-td{left:11.019%;top:70%;width:77.961%;font-size:4.408cqw}
  .mb-7 .ts-tt{left:24.242%;top:37.692%;font-size:8.264cqw}
  .mb-7 .ts-td{left:11.019%;top:70%;width:77.961%;font-size:4.408cqw}
  .mb-8 .ts-tt{left:11.019%;right:11.019%;font-size:8.264cqw}
  .mb-8 .ts-td{left:11.019%;right:11.019%;font-size:4.408cqw}
}
@media (max-width:720px){
  /* celular (node 183:45960; canvas 556) */
  .mb-card .ts-tt{font-size:5.396cqw}
  .mb-card .ts-td{font-size:2.878cqw}
  .mb-1 .ts-tt{left:7.194%;top:35.556%}
  .mb-1 .ts-td{left:7.194%;top:49.63%;width:66.547%}
  .mb-2 .ts-tt{left:7.194%;right:7.194%;top:8.299%}
  .mb-2 .ts-td{left:7.194%;right:7.194%;bottom:8.299%}
  .mb-3 .ts-tt{left:7.194%;top:49.673%}
  .mb-3 .ts-td{left:7.194%;right:7.194%;top:74.51%}
  .mb-4 .ts-tt{left:7.194%;right:7.194%;top:77.219%}
  .mb-4 .ts-td{left:7.194%;right:7.194%;bottom:5.917%}
  .mb-5 .ts-tt{left:7.194%;right:auto;top:15.873%;text-align:left}
  .mb-5 .ts-td{left:7.194%;right:7.194%;top:46.032%;width:auto;text-align:left}
  .mb-6 .ts-tt{left:15.468%;top:9.091%}
  .mb-6 .ts-td{left:7.194%;top:30%;width:85.612%}
  .mb-6 .ts-tt.c2{display:block;left:15.827%;top:67.5%;color:#F1EFE5}
  .mb-6 .ts-td.c2{display:block;left:7.194%;top:86.591%;width:85.612%;color:#F1EFE5}
  .mb-8 .ts-tt{left:7.194%;right:7.194%;top:79.294%}
  .mb-8 .ts-td{left:7.194%;right:7.194%;top:90.951%}
}
.mb-ripple{position:absolute;border-radius:50%;pointer-events:none;z-index:3;
  transform:scale(0);opacity:.6;}
/* posições (do Figma 1376x1100) */
.mb-1{left:0;top:0;width:45.058%;height:49.091%}
.mb-2{left:46.512%;top:0;width:26.017%;height:49.091%}
.mb-3{left:73.983%;top:0;width:26.017%;height:49.091%}
.mb-4{left:0;top:50.909%;width:26.017%;height:49.091%}
.mb-5{left:27.471%;top:50.909%;width:45.058%;height:28.273%}
.mb-6{left:27.471%;top:81%;width:21.802%;height:19%}
.mb-7{left:50.727%;top:81%;width:21.802%;height:19%}
.mb-8{left:73.983%;top:50.909%;width:26.017%;height:49.091%}

@media (max-width: 1240px){
  /* tablet e celular: grade de 2 colunas (Figma 183:42536 / 129:21896) —
     recortes próprios via <picture>. Figma ocupa a linha inteira;
     Miro+Confluence empilham na coluna 1 e o Illustrator ocupa as duas
     linhas na coluna 2. Gap 20 no tablet, 12 no celular. */
  .mb-grid{
    aspect-ratio:auto;display:grid;grid-template-columns:1fr 1fr;
    gap:20px;margin:0;max-width:none;
    /* largura explícita: com container-type nos cards o conteúdo não tem
       largura intrínseca e o pai (flex centrado) encolheria o grid a zero */
    width:calc(100% - 64px);
  }
  .mb-card{position:static;width:auto;height:auto;transform:none;
    border-radius:min(4.84vw,30px)}      /* raio proporcional ao canvas */
  .mb-card::after{display:none}          /* sem glow/hover */
  /* tablet: alturas do node 183:42536 (cards 540 fixos na largura 746/363) */
  .mb-1{grid-column:1 / -1;aspect-ratio:746/540}
  .mb-2,.mb-3,.mb-4,.mb-5{aspect-ratio:363/540}
  .mb-6,.mb-7{aspect-ratio:363/260}
  .mb-6{grid-column:1;grid-row:4}
  .mb-7{grid-column:1;grid-row:5}
  .mb-8{grid-column:2;grid-row:4 / span 2;aspect-ratio:363/540}
}
@media (max-width: 720px){
  /* celular (Figma 183:45960): coluna única, cards nas alturas do node;
     Miro+Confluence viram um card só (ts-am-miroconf) e o mb-7 sai */
  .mb-grid{grid-template-columns:1fr;gap:20px}
  .mb-1{grid-column:auto;aspect-ratio:556/540}
  .mb-2{aspect-ratio:556/482}
  .mb-3{aspect-ratio:556/306}
  .mb-4{aspect-ratio:556/676}
  .mb-5{aspect-ratio:556/252}
  .mb-6{grid-column:auto;grid-row:auto;aspect-ratio:556/440}
  .mb-7{display:none}
  .mb-8{grid-column:auto;grid-row:auto;aspect-ratio:556/652}
}
@media (prefers-reduced-motion: reduce){
  .mb-card{transition:none}
  .mb-card::after{display:none}
}


/* ============================================================
   Reveal on scroll (home, ref. template Spector): elementos surgem
   em fade + leve subida conforme entram na viewport
   ============================================================ */
html.rev-on .rev{opacity:0}
html.rev-on .rev.rev-in{
  animation:revIn .7s cubic-bezier(.19,1,.22,1) both;
  animation-delay:var(--rd,0s);
}
html.rev-on .rev.rev-done{opacity:1;animation:none}
@keyframes revIn{
  from{opacity:0;transform:translateY(28px)}
  to{opacity:1;transform:none}
}

/* ============================================================
   Citric — case study (Figma 227:57601, canvas 1440)
   Conteúdo no grid central da home (--grid 1376). A coluna equivale
   à área útil do canvas (x32–1408); imagens são recortes 1:1 e os
   textos são HTML real. Títulos cruzam a divisa anterior (-30px).
   ============================================================ */
.cs-page{background:var(--cream)}
/* header translúcido: o banner passa por baixo (o 1º bleed sobe a altura
   do header) e o vidro deixa a arte aparecer atrás */
.cs-page header:not(.scrolled){
  background:transparent;
  -webkit-backdrop-filter:none;backdrop-filter:none;
  border-bottom-color:transparent;
}

/* ---- faixa de vidro de largura total sobre o banner. O app.js mede a
   luminância da arte atrás do header uma vez e escolhe o material: vidro
   claro com a tinta padrão, ou (.hd-dark) vidro escuro com texto branco —
   o banner segue visível através do blur nos dois casos. ---- */
.cs-page header:not(.scrolled){
  background:rgba(246,247,251,.55);
  -webkit-backdrop-filter:blur(16px) saturate(1.5);
  backdrop-filter:blur(16px) saturate(1.5);
  border-bottom-color:rgba(232,236,255,.45);
}
.cs-page header:not(.scrolled).hd-dark{
  background:rgba(8,12,22,.42);
  border-bottom-color:rgba(255,255,255,.14);
}
.cs-page header:not(.scrolled).hd-dark nav.main a{color:rgba(255,255,255,.88)}
.cs-page header:not(.scrolled).hd-dark nav.main a.active{color:#fff;font-weight:600}
.cs-page header:not(.scrolled).hd-dark nav.main a:hover{color:#fff}
.cs-page header:not(.scrolled).hd-dark .lang-btn{color:#fff}
.cs-page .cs > .bleed:first-child{margin-top:-71px}
/* mobile: header segue transparente com o pill de vidro, mas o banner vai
   ao topo da página por baixo dele — e cresce (170vw, recorte central) para
   a arte não ficar escondida atrás do header */
@media (max-width:720px){
  .cs-page header:not(.scrolled){
    background:transparent;
    -webkit-backdrop-filter:none;backdrop-filter:none;
    border-bottom:0;
  }
  .cs-page{overflow-x:clip}
  .cs-page .cs > .bleed:first-child{
    margin-top:-90px;
    width:170vw;max-width:none;
    margin-left:calc(50% - 85vw);margin-right:calc(50% - 85vw);
  }
}
/* nesta página o pill de vidro é branco (não creme como nas demais) */
.cs-page header.scrolled .header-in{
  background:rgba(246,247,251,.72);
  border-color:var(--line);
}
.cs{background:#fff;color:var(--ink);max-width:var(--grid);margin:0 auto}
/* Citric (.cs-page): fundo igual ao da home; faixas escuras/cinza seguem */
.cs-page .cs{background:var(--cream)}
.cs-page .cs-head:not(.dark):not(.gray){background:var(--cream)}

/* ---- Citric: grade de ícones em HTML (componente Figma 334:13015).
   Card 183px branco, borda 2px #e8ecff, raio 30, ícone 70px em tinta;
   hover: ícone azul + border-glow do Dashboard (herda .cs-glow). ---- */
.ci-igrid{display:grid;grid-template-columns:repeat(7,1fr);gap:16px;width:100%}
.ci-icard{
  position:relative;display:flex;align-items:center;justify-content:center;
  aspect-ratio:1/1;background:#fff;border:2px solid #e8ecff;border-radius:30px;
  color:#2f2f3c;overflow:clip;
  transition:color .3s ease;
}
/* símbolos do sprite são no espaço do card (183): o ícone interno já ocupa ~38% */
.ci-icard .ic{width:100%;height:100%;fill:currentColor}
@media (hover:hover) and (pointer:fine){
  /* hover: outline glow NA borda — a borda física fica fixa em 2px (o ícone
     nunca muda de tamanho); o arco cobre exatamente a zona da borda e
     projeta 1px para fora (inset -1px + traço 3px = 1px externo + 2px sobre
     a borda, nada para dentro do card) */
  .ci-icard:hover:not(.ci-more){color:var(--blue)}
  .cs-guided .ci-icard.cs-glow::before{
    inset:-1px;
    border:3px solid var(--glow);
    box-shadow:0 0 10px 1px var(--glow-soft);
  }
}
/* card final "And many more" (Figma 338:19160): ocupa o restante da linha,
   borda azul 4px permanente, sem hover/glow */
.ci-icard.ci-more{
  grid-column:auto / span 3;aspect-ratio:auto;
  border:4px solid var(--blue);
}
.ci-icard.ci-more b{
  font-weight:900;font-size:28px;line-height:normal;color:var(--blue);
  text-align:center;padding:0 32px;width:100%;
}
@media (max-width:720px){
  .ci-icard.ci-more b{font-size:clamp(16px,5vw,22px);padding:0 16px}
}
@media (max-width:1240px){
  .ci-igrid{grid-template-columns:repeat(5,1fr)}
  .ci-icard.ci-more{grid-column:auto / span 2}
}
@media (max-width:720px){
  .ci-igrid{grid-template-columns:repeat(3,1fr);gap:10px}
  .ci-icard{border-radius:20px}
  .ci-icard.ci-more{grid-column:1 / -1}
}

/* zoom no hover das imagens dos cards (mesmo efeito dos cards de projeto):
   a moldura recorta com o raio da própria arte (~5,2% da largura, medido nos
   PNGs) e a imagem cresce 4% */
.cs-guided .cs-card .ci-thumb{display:block;border-radius:22px;overflow:clip}
.cs-guided .cs-card .ci-thumb img{
  display:block;width:100%;height:auto;
  transition:transform .6s cubic-bezier(.19,1,.22,1);
}
@media (hover:hover) and (pointer:fine){
  .cs-guided .cs-card:hover .ci-thumb img{transform:scale(1.04)}
}
@media (max-width:720px){
  .cs-guided .cs-card .ci-thumb{border-radius:16px}
}
@media (prefers-reduced-motion:reduce){
  .cs-guided .cs-card .ci-thumb img{transition:none}
  .cs-guided .cs-card:hover .ci-thumb img{transform:none}
}
.cs .cs-art{display:block;width:100%;height:auto}
/* Charles: molduras das seções (Figma 422:64632). Os webp novos já trazem o
   painel arredondado assado sobre o creme da página; os dois gifs animados
   continuam gifs — um só precisa do raio, o outro vive dentro do painel
   largo cuja cor é exatamente o fundo do gif (#3B383B), então a emenda some. */
.ch-round{border-radius:24px}
.ch-panel{
  background:#3B383B;border-radius:24px;overflow:hidden;
  aspect-ratio:1376/616;display:flex;align-items:center;
}
.ch-panel img{display:block;height:100%;width:auto;max-width:none}

/* ===== Dashboard - cards de Problem e Solution: arte do Figma + zoom no
   hover. Problem em 2 colunas (arte 678x393), Solution em 3 (arte 432x270).
   Os cards de Problem carregam .dbs-card, então herdam moldura e zoom. ===== */
.dbp-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-top:24px}
.dbs-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin-top:24px}
.dbp-card .th img{aspect-ratio:678/393}
.dbs-card .th{display:block;border-radius:30px;overflow:clip}
.dbs-card .th img{
  display:block;width:100%;aspect-ratio:432/270;object-fit:cover;
  transition:transform .55s var(--ease);
}
.dbs-card:hover .th img{transform:scale(1.06)}
.dbs-card h3{font-weight:900;font-size:30px;line-height:normal;margin:24px 0 0}
.dbs-card p{font-size:16px;line-height:normal;margin:8px 0 0;color:var(--ink)}

@media (max-width:940px){
  .dbp-grid,.dbs-grid{grid-template-columns:1fr}
}
@media (max-width:720px){
  .dbp-card h3,.dbs-card h3{font-size:30px}
}
@media (prefers-reduced-motion:reduce){
  .dbs-card .th img{transition:none}
}

/* full-bleed: fundo (ou imagem) ocupa a largura da tela; conteúdo segue no grid */
.cs .bleed{
  width:100vw;max-width:100vw;
  margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);
}
/* bleed uniforme de todas as faixas: regra única definida abaixo (após .z-gray) */
.cs-title{padding:32px 0}
.cs-title .cat{font-weight:700;font-size:16px;color:var(--blue);margin:0}
.cs-title h1{font-weight:900;font-size:100px;line-height:normal;margin:18px 0 0}
.cs-title .lede{font-size:18px;line-height:normal;margin:18px 0 0}
.cs-meta .row{
  display:flex;align-items:center;justify-content:space-between;
  padding:24px 40px;border-bottom:1px solid var(--line);
}
.cs-meta .item{width:138px}
.cs-meta .item i{display:block;font-style:normal;font-size:18px;line-height:normal;color:var(--ink)}
.cs-meta .item b{font-weight:900;font-size:24px;line-height:normal;color:var(--blue);white-space:nowrap}
.cs-meta .vr{width:1px;height:73px;background:var(--line);flex:none}
.cs-intro{padding:32px 0;display:flex;flex-direction:column;gap:32px;align-items:center}
.cs-intro > p{font-weight:900;font-size:40px;line-height:normal;text-align:center;margin:0}
.cs-intro .rule{width:100%;height:1px;background:var(--line)}
.cs-chip{
  display:inline-flex;align-items:center;justify-content:center;
  padding:8px 16px;border-radius:16px;background:var(--blue);
  color:#F6F7FB;font-weight:500;font-size:16px;line-height:normal;white-space:nowrap;
}
.cs-sub{padding:32px 0;display:flex;flex-direction:column;gap:32px}
.cs-sub h2{font-weight:900;font-size:50px;line-height:normal;margin:0}
.cs-sub p{font-size:18px;line-height:normal;margin:0}
/* flow-root: impede o colapso da margem do .in, então só o TÍTULO cruza a
   divisa (o fundo da faixa fica na borda limpa) — igual à home */
.cs-head{position:relative;background:#fff;padding:0 0 16px;display:flow-root}
.cs-head.dark{background:#15141A}
.cs-head.gray{background:#F7F7F9}
.cs-head .in{
  position:relative;z-index:2;margin-top:-30px;
  display:flex;flex-direction:column;gap:32px;align-items:flex-start;
}
.cs-head.up69 .in{margin-top:-69px}
.cs-head .trow{display:flex;gap:32px;align-items:center;flex-wrap:wrap;width:100%}
.cs-head h2{font-weight:900;font-size:120px;line-height:normal;color:#15141A;margin:0}
.cs-head.dark h2{color:#fff}
.cs-head .lede{font-size:18px;line-height:normal;max-width:790px;color:var(--ink)}
.cs-head .lede.wfull{max-width:none}
.cs-head .lede p{margin:0}
.cs-head .lede p + p{margin-top:22px}
.cs-head.dark .lede{color:#fff}

/* zonas e blocos internos das seções (antes rasterizados) */
.cs-zone{position:relative}
.z-dark{background:#15141A;color:#fff}
.z-gray{background:#F7F7F9}
/* full-bleed uniforme: toda faixa-seção (branca, cinza ou escura) ocupa a
   largura da tela; o conteúdo interno permanece no grid de 1376px. Em telas
   <= grid o calc colapsa para 0 (sem efeito). O hero (.bleed) é imagem cheia
   e mantém sua regra própria. */
.cs .cs-head,
.cs .cs-zone,
.cs > .cs-title,
.cs > .cs-meta,
.cs > .cs-intro,
.cs > .cs-sub,
.cs > .cs-sec,
.cs > .cs-more{
  margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);
  /* gutter mínimo de 32px em tablet/celular (mesma regra das outras páginas),
     alinhado ao grid quando a tela ultrapassa 1376 */
  padding-left:max(32px, calc(50vw - 50%));padding-right:max(32px, calc(50vw - 50%));
}
.cs-cards{display:flex;gap:40px}
.cs-card{flex:1;min-width:0}
.cs-card img{display:block;width:100%;height:auto}
.cs-card h3{font-weight:900;font-size:30px;line-height:normal;margin:24px 0 0}
.cs-card p{font-size:16px;line-height:normal;margin:16px 0 0}
/* Color system — swatches em HTML (substitui a imagem), 5 x 2 */
.col-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:20px}
.col-card{display:flex;flex-direction:column;min-width:0}
.col-sw{position:relative;display:block;width:100%;aspect-ratio:250/107;border-radius:20px;background:var(--c)}
.col-badge{position:absolute;top:12px;left:12px;display:inline-flex;align-items:center;gap:6px;
  background:#fff;border-radius:100px;padding:4px 10px 4px 8px;font-weight:500;font-size:14px;line-height:1;color:var(--ink)}
.col-badge i{width:8px;height:8px;border-radius:50%;background:var(--ink)}
.col-card b{font-weight:700;font-size:20px;line-height:normal;margin-top:16px;color:var(--ink)}
.col-n{font-size:16px;line-height:normal;color:#8b8b8b;margin-top:4px}
@media (max-width:720px){
  .col-grid{grid-template-columns:repeat(2,1fr);gap:16px}
  .col-badge{font-size:min(2.9vw,14px);padding:3px 8px 3px 6px}
  .col-card b{font-size:min(3.23vw,20px)}
  .col-n{font-size:min(2.58vw,16px)}
}
/* Primitive colors — palette em HTML (substitui a imagem) */
.pgrid{display:flex;flex-direction:column}
.pf{padding:36px 0}
.pf + .pf{border-top:1px solid var(--line)}
.pf-head{display:flex;align-items:center;gap:16px;margin-bottom:28px}
.pf-head b{font-weight:700;font-size:32px;line-height:1;color:var(--ink)}
.pf-tag{background:#eaeaec;color:#09090c;font-weight:400;font-size:16px;line-height:1;padding:6px 12px;border-radius:34px;white-space:nowrap}
.pf-sw{display:grid;grid-template-columns:repeat(5,1fr);gap:16px}
.pf-chip{display:flex;flex-direction:column;min-width:0}
.pf-fill{position:relative;display:block;width:100%;aspect-ratio:237/83;border-radius:14px;background:var(--c);border:1px solid #e9ebf8;overflow:hidden}
.pf-r{position:absolute;left:8px;display:inline-flex;align-items:center;gap:3px;max-width:calc(100% - 16px);
  background:rgba(255,255,255,.8);border-radius:8px;padding:2px 5px;font-size:11px;line-height:1.25;color:#000;white-space:nowrap;overflow:hidden}
.pf-r.dark{top:8px}
.pf-r.light{top:33px}
.pf-r i{width:11px;height:11px;border-radius:50%;flex:none;border:1px solid #e9ebf8}
.pf-r.dark i{background:#000}
.pf-r.light i{background:#fff}
.pf-r em{font-style:normal;font-size:8px}
.pf-chip > b{font-weight:500;font-size:18px;line-height:1.4;margin-top:10px;color:var(--ink)}
.pf-hex{font-size:14px;line-height:1.4;color:#8e98a8}
@media (max-width:1240px){
  .pf-head b{font-size:min(3.95vw,32px)}
  .pf-r{font-size:min(1.36vw,11px);gap:2px;padding:2px 4px}
  .pf-r i{width:min(1.36vw,11px);height:min(1.36vw,11px)}
  .pf-r em{font-size:min(0.99vw,8px)}
  .pf-r.light{top:min(4.07vw,33px)}
}
@media (max-width:720px){
  .pf{padding:24px 0}
  .pf-head{gap:10px;margin-bottom:18px}
  .pf-head b{font-size:min(5.16vw,32px)}
  /* reflow igual ao Color System: 5 → 2 colunas no celular. Com chips maiores,
     as pílulas de contraste e os rótulos voltam a tamanhos legíveis. */
  .pf-sw{grid-template-columns:repeat(2,1fr);gap:16px}
  .pf-r{font-size:min(2.4vw,11px);gap:3px;padding:2px 5px}
  .pf-r i{width:min(2.4vw,11px);height:min(2.4vw,11px)}
  .pf-r em{font-size:min(1.75vw,8px)}
  .pf-r.light{top:33px}
  .pf-chip > b{font-size:min(4vw,18px);margin-top:8px}
  .pf-hex{font-size:min(3.1vw,14px)}
  .pf-tag{font-size:min(2.58vw,16px);padding:5px 10px}
}
/* páginas de case em tema cream (Illustration — Figma 256:67909/257:70099):
   mesma arquitetura .cs, fundo cream do site em vez do branco */
.cs.cs-cream{background:var(--cream)}

/* componentes dos cases migrados (mesma linguagem do Citric):
   citação destacada, linha de estatísticas, tags neutras e listas */
.cs-quote{font-weight:900;font-size:24px;line-height:1.4;color:var(--ink);max-width:1000px;margin:0}
.cs-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:20px;width:100%}
.cs-stat{display:flex;flex-direction:column;gap:8px;min-width:0}
.cs-stat b{font-weight:900;font-size:70px;line-height:1;color:var(--blue)}
.cs-stat span{font-size:16px;line-height:normal;color:var(--ink)}
.cs-tags{display:flex;flex-wrap:wrap;gap:12px}
.cs-tag{background:#eaeaec;color:#09090c;font-weight:500;font-size:16px;line-height:1;
  padding:8px 14px;border-radius:34px;white-space:nowrap}
.cs-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:14px;max-width:900px}
.cs-list li{position:relative;padding-left:26px;font-size:18px;line-height:normal;color:var(--ink)}
.cs-list li::before{content:"";position:absolute;left:0;top:.42em;width:9px;height:9px;border-radius:50%;background:var(--blue)}
@media (max-width:1240px){
  .cs-stat b{font-size:min(8.6vw,70px)}
}
@media (max-width:720px){
  .cs-quote{font-size:clamp(16px,3.9vw,24px)}
  .cs-stat b{font-size:min(9.7vw,60px)}
  .cs-stat span{font-size:clamp(13px,2.58vw,16px)}
  .cs-tag{font-size:min(2.58vw,16px);padding:6px 11px}
  .cs-list li{font-size:clamp(13px,2.9vw,18px)}
}

/* Dashboard Redesign — componentes do case (Figma 261:70295) */
.cs-sec{padding:32px 0 40px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:32px}
.cs-sec.first{border-top:1px solid var(--line)}
.cs-sech{display:flex;flex-direction:column;gap:16px;align-items:flex-start}
.cs-sech h2{font-weight:900;font-size:52px;line-height:normal;margin:0;color:var(--ink)}
.cs-sec > .lede{font-size:18px;line-height:normal;margin:0;color:var(--ink)}
.cs-grid{display:grid;gap:40px}
.cs-grid.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.cs-grid.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.cs-grid.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.cs-wcard{background:#fff;border-radius:30px;padding:40px}
.cs-wcard h4{font-weight:900;font-size:24px;line-height:normal;color:var(--blue);margin:0 0 16px}
.cs-wcard > p{font-size:18px;line-height:normal;margin:0;color:var(--ink)}
.cs-callout{background:var(--blue);color:#fff;border-radius:20px;padding:24px 40px}
.cs-callout b{display:block;font-weight:900;font-size:32px;line-height:normal;margin-bottom:8px}
.cs-callout p{font-size:18px;line-height:normal;margin:0}
.cs-method .eb{font-weight:700;font-size:20px;line-height:normal;color:var(--blue);margin:0}
.cs-method h3{font-weight:900;font-size:32px;line-height:normal;margin:16px 0 0;color:var(--ink)}
.cs-method .tx{font-size:20px;line-height:normal;margin:16px 0 0;color:var(--ink)}
.cs-method .qt{font-style:italic;font-size:18px;line-height:normal;color:#555;margin:16px 0 0}
.cs-method .at{font-weight:600;font-size:18px;line-height:normal;color:var(--blue);margin:16px 0 0;position:relative;padding-left:27px}
.cs-method .at::before{content:"";position:absolute;left:9px;top:.5em;width:6px;height:6px;border-radius:50%;background:var(--blue)}
.cs-gbox{background:#e1f0ea;color:#358f6c;border-radius:20px;padding:24px;margin-top:16px}
.cs-gbox b{display:block;font-weight:700;font-size:20px;line-height:normal;margin-bottom:8px}
.cs-gbox p{font-size:18px;line-height:normal;margin:0;color:inherit}
.cs-bet{border-radius:30px;overflow:hidden;display:flex;flex-direction:column}
.cs-bet .bh{background:#f5f5f5;padding:40px;display:flex;gap:16px;align-items:center}
.cs-bet .num{flex:none;width:61px;height:61px;border-radius:50%;background:var(--ink);color:#fff;
  font-weight:900;font-size:24px;display:flex;align-items:center;justify-content:center}
.cs-bet .bh b{font-weight:900;font-size:32px;line-height:normal;color:var(--blue)}
.cs-bet .bb{background:#fff;padding:40px;display:flex;flex-direction:column;gap:24px;flex:1}
.cs-bet .bb > p{font-size:20px;line-height:normal;margin:0;color:var(--ink)}
.cs-bet .cs-gbox{margin-top:0}
.cs-dec{border-radius:30px;overflow:hidden}
.cs-dec .dh{background:#f5f5f5;padding:40px}
.cs-dec .dh i{display:block;font-style:normal;font-weight:700;font-size:20px;color:var(--blue);margin-bottom:16px}
.cs-dec .dh b{font-weight:900;font-size:32px;line-height:normal;color:var(--ink)}
.cs-dec .db{background:#fff;padding:40px;display:flex;justify-content:space-between;gap:40px}
.cs-dec .col{width:600px;max-width:46%;display:flex;flex-direction:column;gap:24px}
.cs-dec .lbl{font-weight:700;font-size:20px;color:#555;margin:0}
.cs-dec .alt{display:flex;gap:16px;align-items:center;font-size:20px;color:var(--ink)}
.cs-dec .disc{flex:none;border:2px solid #ec472e;color:#ec472e;border-radius:80px;padding:10px 16px;
  font-size:20px;line-height:1;white-space:nowrap}
.cs-dec .db .vr{width:1px;background:var(--line);align-self:stretch;flex:none}
.cs-dec .col > p{font-size:20px;line-height:normal;margin:0;color:var(--ink)}
.cs-out{background:#fff;border-radius:30px;display:flex}
.cs-out .oc{flex:1;padding:40px;display:flex;flex-direction:column;gap:40px;min-width:0}
.cs-out .oc + .oc{border-left:1px solid var(--line)}
.cs-out .ol{font-weight:700;font-size:18px;letter-spacing:.02em;color:#555;margin:0}
.cs-out .ot{display:flex;gap:16px;align-items:center;font-weight:900;font-size:50px;line-height:normal;color:#009e63}
.cs-out .ot svg{width:40px;height:40px;flex:none}
.cs-out .od{font-size:18px;line-height:normal;margin:16px 0 0;color:var(--ink)}
.cs-take .n{font-weight:900;font-size:50px;line-height:normal;color:var(--blue);margin:0}
.cs-take h3{font-weight:900;font-size:30px;line-height:normal;color:var(--blue);margin:8px 0 0}
.cs-take p{font-size:18px;line-height:normal;margin:16px 0 0;color:var(--ink)}
.cs-retro{border-radius:30px;padding:40px}
.cs-retro.good{background:#e1f0ea;color:#009e63}
.cs-retro.bad{background:#fbe3df;color:#ec472e}
.cs-retro h3{font-weight:900;font-size:30px;line-height:normal;margin:0 0 32px;color:inherit}
.cs-retro ul{list-style:disc;padding-left:27px;margin:0;display:flex;flex-direction:column;gap:18px}
.cs-retro li{font-size:18px;line-height:normal}
.cs-stat100 b{display:block;font-weight:900;font-size:100px;line-height:normal;color:var(--blue)}
.cs-stat100 span{display:block;font-size:18px;line-height:normal;color:var(--ink);margin-top:16px}
.cs-h52{font-weight:900;font-size:52px;line-height:normal;margin:0;color:var(--ink)}
@media (max-width:1240px){
  .cs-sech h2,.cs-h52{font-size:min(6.42vw,52px)}
  .cs-bet .bh b,.cs-dec .dh b,.cs-method h3,.cs-callout b{font-size:min(3.95vw,32px)}
  .cs-take h3,.cs-retro h3{font-size:min(3.7vw,30px)}
  .cs-take .n{font-size:min(6.2vw,50px)}
  .cs-out .ot{font-size:min(3.8vw,50px)}
  .cs-out .ot svg{width:min(3vw,40px);height:min(3vw,40px)}
  .cs-stat100{padding:min(3vw,40px)}
  .cs-stat100 b{font-size:min(7.1vw,100px)}
  .cs-grid.g4{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:1000px){
  .cs-grid.g2{grid-template-columns:1fr}
}
@media (pointer:coarse){
  .cs-viewall{min-height:44px}
}
@media (max-width:720px){
  .cs-sec{padding:min(5.16vw,32px) 0 min(6.45vw,40px);gap:min(5.16vw,32px)}
  .cs-callout{padding:min(3.87vw,24px) min(6.45vw,40px)}
  .cs-gbox{padding:min(3.87vw,24px)}
  .cs-sech h2,.cs-h52{font-size:min(8.39vw,52px)}
  .cs-grid.g2,.cs-grid.g3,.cs-grid.g4{grid-template-columns:1fr;gap:24px}
  .cs-grid{gap:24px}
  .cs-wcard,.cs-retro,.cs-bet .bh,.cs-bet .bb,.cs-dec .dh,.cs-dec .db,.cs-out .oc{padding:min(6.45vw,40px)}
  .cs-bet .bh b,.cs-dec .dh b,.cs-method h3,.cs-callout b{font-size:min(5.16vw,32px)}
  .cs-wcard h4{font-size:min(3.87vw,24px)}
  .cs-wcard > p,.cs-callout p,.cs-gbox p,.cs-method .qt,.cs-method .at,.cs-out .od,.cs-take p,.cs-retro li,
  .cs-stat100 span,.cs-out .ol{font-size:clamp(13px,2.9vw,18px)}
  .cs-method .tx,.cs-bet .bb > p,.cs-dec .col > p,.cs-dec .alt,.cs-dec .lbl,.cs-dec .disc,
  .cs-method .eb,.cs-gbox b,.cs-dec .dh i{font-size:clamp(14px,3.23vw,20px)}
  .cs-bet .num{width:min(9.84vw,61px);height:min(9.84vw,61px);font-size:min(3.87vw,24px)}
  .cs-dec .db{flex-direction:column}
  .cs-dec .col{width:100%;max-width:none}
  .cs-dec .db .vr{width:100%;height:1px}
  .cs-out{flex-direction:column}
  .cs-out .oc + .oc{border-left:0;border-top:1px solid var(--line)}
  .cs-out .ot{font-size:min(8.06vw,50px)}
  .cs-out .ot svg{width:min(6.45vw,40px);height:min(6.45vw,40px)}
  .cs-take .n{font-size:min(8.06vw,50px)}
  .cs-take h3,.cs-retro h3{font-size:min(4.84vw,30px)}
  .cs-stat100 b{font-size:min(16.13vw,100px)}
}

/* ===== Dashboard Redesign (case) — fidelidade 1:1 ao Figma 261:70295.
   Escopo .cs-reading: sobrepõe as regras-base SOMENTE nesta página; as 4
   páginas .cs-dash e o restante do site permanecem intactos. Maior
   especificidade que a base garante vitória inclusive dentro das media
   queries. ===== */
/* tokens transversais */
.cs-reading .cs-sec > .lede{font-size:16px}
.cs-reading .cs-wcard,
.cs-reading .cs-bet,
.cs-reading .cs-dec,
.cs-reading .cs-out,
.cs-reading .cs-retro{border-radius:20px}
.cs-reading .cs-grid{gap:20px}
.cs-reading .cs-art:not(.bleed){border-radius:20px}
.cs-reading .cs-callout b{font-size:12px}
.cs-reading .cs-callout p{font-size:16px}
.cs-reading .cs-gbox p{font-size:16px}
.cs-reading .cs-gbox.blue{background:#f1f6fe;color:var(--ink)}

/* ---- Problem (4-up) / Solution (3-up): feature cards imagem + corpo branco ---- */
.cs-reading .cs-feat{display:grid;gap:20px}
.cs-reading .cs-feat.p4{grid-template-columns:repeat(4,minmax(0,1fr))}
.cs-reading .cs-feat.p3{grid-template-columns:repeat(3,minmax(0,1fr))}
.cs-reading .cs-feat .cs-card{background:#fff;border-radius:20px;overflow:hidden;display:flex;flex-direction:column}
.cs-reading .cs-feat .cs-card img{width:100%;height:290px;object-fit:cover;margin:0}
.cs-reading .cs-feat.p4 .cs-card img{height:210px}
.cs-reading .cs-feat .cb{padding:20px;display:flex;flex-direction:column;gap:16px}
.cs-reading .cs-feat .cs-card h3{font-size:24px;font-weight:900;color:var(--ink);margin:0;line-height:normal}
.cs-reading .cs-feat.p4 .cs-card h3{font-size:18px}
.cs-reading .cs-feat .cs-card p{font-size:16px;margin:0;line-height:normal;color:var(--ink)}
@media (max-width:1240px){.cs-reading .cs-feat.p4,.cs-reading .cs-feat.p3{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:720px){.cs-reading .cs-feat.p4,.cs-reading .cs-feat.p3{grid-template-columns:1fr}}

/* ---- Where I fit in: cards ricos (badge + checklist + pílula) ---- */
.cs-reading .cs-rcard{background:#fff;border-radius:20px;padding:40px;display:flex;flex-direction:column;gap:20px}
.cs-reading .cs-rcard .rh{display:flex;gap:16px;align-items:center}
.cs-reading .cs-rcard .ic{flex:none;display:flex;align-items:center;justify-content:center;background:#dae6fc;border-radius:10px;padding:10px}
.cs-reading .cs-rcard .ic img{width:25px;height:25px;display:block}
.cs-reading .cs-rcard .ic.rot img{transform:rotate(180deg)}
.cs-reading .cs-rcard h4{font-size:24px;font-weight:900;color:var(--blue);margin:0;line-height:normal;flex:1;min-width:0}
.cs-reading .cs-rcard .rule{height:1px;background:var(--line);width:100%}
.cs-reading .cs-rcard ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}
.cs-reading .cs-rcard li{display:flex;gap:8px;align-items:flex-start;font-size:16px;color:var(--ink);line-height:normal}
.cs-reading .cs-rcard li img{flex:none;width:15px;height:15px;margin-top:2px}
.cs-reading .cs-rcard .pill{display:flex;gap:8px;align-items:center;background:#e9f0fd;border-radius:8px;padding:8px}
.cs-reading .cs-rcard .pill img{flex:none;width:15px;height:15px}
.cs-reading .cs-rcard .pill span{font-size:14px;font-weight:600;color:var(--blue);line-height:normal}

/* ---- Goal: cards numerados ---- */
.cs-reading .cs-gcard{background:#fff;border-radius:20px;padding:40px;display:flex;flex-direction:column;gap:16px}
.cs-reading .cs-gcard .gh{display:flex;gap:16px;align-items:center}
.cs-reading .cs-gcard .gn{flex:none;display:flex;align-items:center;justify-content:center;width:40px;height:40px;background:#e0eafa;border-radius:10px;color:var(--blue);font-weight:900;font-size:19.672px;line-height:1}
.cs-reading .cs-gcard h4{font-size:16px;font-weight:900;color:var(--blue);margin:0;line-height:normal}
.cs-reading .cs-gcard .rule{height:1px;background:var(--line);width:100%}
.cs-reading .cs-gcard p{font-size:16px;margin:0;color:var(--ink);line-height:normal}

/* ---- Discovery: descrição do método 16px ---- */
.cs-reading .cs-method .tx{font-size:16px}

/* ---- Approach: bets header branco + badge quadrada + divisor ---- */
.cs-reading .cs-bet .bh{background:#fff;padding:20px;gap:16px;align-items:center}
.cs-reading .cs-bet .num{width:50px;height:50px;border-radius:10px;background:#e0eafa;color:var(--blue);font-size:19.672px;font-weight:900}
.cs-reading .cs-bet .bh b{font-size:24px;color:var(--ink)}
.cs-reading .cs-bet .bb{padding:20px;border-top:1px solid var(--line)}
.cs-reading .cs-bet .bb > p{font-size:16px}

/* ---- Decisions: 3 cards lado a lado, conteúdo empilhado ---- */
.cs-reading .cs-decrow{display:flex;gap:20px;align-items:stretch}
.cs-reading .cs-decrow .cs-dec{flex:1;min-width:0;border-radius:20px;overflow:hidden;display:flex;flex-direction:column}
.cs-reading .cs-dec .dh{background:#fff;padding:40px;display:flex;flex-direction:column;gap:8px}
.cs-reading .cs-dec .dh i{font-style:normal;font-weight:700;font-size:16px;color:var(--blue);margin:0}
.cs-reading .cs-dec .dh b{font-size:20px;color:var(--ink);font-weight:900}
.cs-reading .cs-dec .db{background:#fff;border-top:1px solid var(--line);padding:29px 40px;display:flex;flex-direction:column;gap:24px;flex:1}
.cs-reading .cs-dec .alts,.cs-reading .cs-dec .why{display:flex;flex-direction:column;gap:24px}
.cs-reading .cs-dec .lbl{font-weight:700;font-size:16px;color:var(--ink);margin:0}
.cs-reading .cs-dec .alt{display:flex;gap:16px;align-items:center;font-size:16px;color:var(--ink)}
.cs-reading .cs-dec .disc{flex:none;border:2px solid #ec472e;color:#ec472e;border-radius:80px;padding:10px 16px;font-size:15px;font-weight:400}
.cs-reading .cs-dec .rule{height:1px;background:var(--line);width:100%}
.cs-reading .cs-dec .why > p{font-size:16px;color:var(--ink);margin:0;font-weight:400}
@media (max-width:1240px){.cs-reading .cs-decrow{flex-direction:column}}

/* ---- Design System: stat cards horizontais ---- */
.cs-reading .cs-dstat{background:#fff;border-radius:20px;padding:40px 30px;display:flex;gap:16px;align-items:center}
.cs-reading .cs-dstat > b{flex:none;font-weight:900;font-size:50px;color:var(--blue);line-height:normal}
.cs-reading .cs-dstat .vr{flex:none;width:1px;height:73px;background:var(--line)}
.cs-reading .cs-dstat .dt{display:flex;flex-direction:column;gap:8px;min-width:0}
.cs-reading .cs-dstat .l{font-weight:700;font-size:16px;color:var(--blue);margin:0;line-height:normal}
.cs-reading .cs-dstat .d{font-weight:400;font-size:16px;color:var(--ink);margin:0;line-height:normal}

/* ---- Results ---- */
.cs-reading .cs-out{border:1px solid var(--line)}
.cs-reading .cs-out .ot{font-size:40px}
.cs-reading .cs-out .od{font-size:16px}
.cs-reading .cs-out .ol{letter-spacing:normal}

/* ---- Key Learnings: badge numerada ---- */
.cs-reading .cs-take .n{display:inline-flex;align-items:center;justify-content:center;width:50px;height:50px;background:#e0eafa;border-radius:10px;color:var(--blue);font-weight:900;font-size:19.672px;line-height:1;margin:0}
.cs-reading .cs-take h3{font-size:20px;margin-top:16px}
.cs-reading .cs-take p{font-size:16px}

/* ---- Retrospective ---- */
.cs-reading .cs-retro.bad{background:#ffd5ce}
.cs-reading .cs-retro h3{font-size:18px}
.cs-reading .cs-retro li{font-size:16px}

/* ritmo de padding no mobile: acompanha o restante da página (~24px) */
@media (max-width:720px){
  .cs-reading .cs-rcard,
  .cs-reading .cs-gcard,
  .cs-reading .cs-dstat{padding:24px}
  .cs-reading .cs-dec .dh,
  .cs-reading .cs-dec .db{padding:24px}
}

/* ===== Border glow reativo ao ponteiro (porte do BorderGlow / React Bits para
   vanilla). Escopo .cs-reading. Outline padrão #E8ECFF em todos os cards; um
   glow #0E5BD0 acende e traça a borda mais próxima do cursor (máscara cônica
   guiada por --cursor-angle + --edge-proximity, setados via JS). A classe
   .cs-glow só é adicionada em dispositivos com hover + ponteiro fino. ===== */
.cs-reading .cs-rcard,
.cs-reading .cs-gcard,
.cs-reading .cs-feat .cs-card,
.cs-reading .cs-wcard.cs-method,
.cs-reading .cs-bet,
.cs-reading .cs-dec,
.cs-reading .cs-wcard.cs-take,
.cs-reading .cs-dstat,
.cs-reading .cs-retro,
.cs-reading .cs-out{border:1px solid #E8ECFF;position:relative}

:is(.cs-reading,.cs-guided,.cs-nwp,.cs-gam,.ss) .cs-glow{
  --edge-proximity:0;--cursor-angle:45deg;--gsens:30;--cone:24;
  --glow:#0e5bd0;--glow-soft:rgb(14 91 208 / .55);
}
/* cor do glow por card: os dois cards do retrospective usam a cor
   predominante de cada um (verde = deu certo, vermelho = mudaria) */
.cs-reading .cs-retro.good{--glow:#009e63;--glow-soft:rgb(0 158 99 / .55)}
.cs-reading .cs-retro.bad{--glow:#ec472e;--glow-soft:rgb(236 71 46 / .55)}
/* apenas o glow no outline (borda que acende perto do cursor); sem halo interno */
:is(.cs-reading,.cs-guided,.cs-nwp,.cs-gam,.ss) .cs-glow::before{
  content:"";position:absolute;inset:0;border-radius:inherit;
  pointer-events:none;z-index:4;opacity:0;transition:opacity .45s ease-out;
  box-shadow:inset 0 0 0 var(--gring,1px) var(--glow), inset 0 0 4px 0 var(--glow-soft);
  -webkit-mask-image:conic-gradient(from var(--cursor-angle) at 50% 50%,#000 calc(var(--cone)*1%),rgba(0,0,0,0) calc((var(--cone) + 15)*1%),rgba(0,0,0,0) calc((100 - var(--cone) - 15)*1%),#000 calc((100 - var(--cone))*1%));
          mask-image:conic-gradient(from var(--cursor-angle) at 50% 50%,#000 calc(var(--cone)*1%),rgba(0,0,0,0) calc((var(--cone) + 15)*1%),rgba(0,0,0,0) calc((100 - var(--cone) - 15)*1%),#000 calc((100 - var(--cone))*1%));
}
@media (hover:hover) and (pointer:fine){
  :is(.cs-reading,.cs-guided,.cs-nwp,.cs-gam,.ss) .cs-glow:hover::before{opacity:clamp(0,calc((var(--edge-proximity) - var(--gsens))/(100 - var(--gsens))),1)}
}
@media (prefers-reduced-motion:reduce){
  :is(.cs-reading,.cs-guided,.cs-nwp,.cs-gam,.ss) .cs-glow::before{transition:none}
}

/* ===== Dashboard case — refino de design dos cards/componentes (escopo .cs-dash;
   não afeta nenhuma outra página). Sistema de elevação em cima do creme +
   micro-interações e acabamentos. ===== */
.cs-dash{
  --el-bd:1px solid rgba(3,11,23,.06);
  --el-rest:0 1px 3px rgba(3,11,23,.045), 0 12px 30px -18px rgba(3,11,23,.16);
  --el-hover:0 6px 14px -6px rgba(3,11,23,.10), 0 26px 54px -22px rgba(3,11,23,.26);
  --ease:cubic-bezier(.19,1,.22,1);
}
/* superfícies brancas ganham definição sobre o creme (borda hairline + sombra
   baixa, tonalizada na tinta — não é sombra genérica) */
.cs-dash .cs-wcard,
.cs-dash .cs-bet,
.cs-dash .cs-dec,
.cs-dash .cs-out{
  border:var(--el-bd);
  box-shadow:var(--el-rest);
  transition:transform .4s var(--ease), box-shadow .4s var(--ease);
}
/* superfície única: sem a banda cinza de header (lia "tabela" e datava o
   card) — título e corpo fluem no mesmo branco, com padding mais enxuto */
.cs-dash .cs-bet .bh{background:#fff;padding:26px 28px 0}
.cs-dash .cs-bet .bb{padding:16px 28px 26px;gap:16px}
.cs-dash .cs-dec .dh{background:#fff;padding:26px 28px 0}
.cs-dash .cs-dec .db{padding:16px 28px 26px;gap:32px}
/* caixas internas (Outcome / Key Finding) deixam de parecer "card dentro de
   card": marcador de ponto no rótulo e fundo levemente mais suave */
.cs-dash .cs-gbox b,
.cs-dash .cs-retro h3{position:relative}
.cs-dash .cs-gbox b{padding-left:18px}
.cs-dash .cs-gbox b::before{
  content:"";position:absolute;left:0;top:.5em;width:8px;height:8px;border-radius:50%;
  background:currentColor;transform:translateY(-1px);
}
/* pílula "Discarted": ganha um leve preenchimento p/ presença (sem virar botão) */
.cs-dash .cs-dec .disc{background:rgba(236,71,46,.06)}
/* stat cards: fina régua-acento sob o número gigante, ligando número e rótulo */
.cs-dash .cs-stat100{position:relative}
.cs-dash .cs-stat100 b{margin-bottom:14px}
.cs-dash .cs-stat100 b::after{
  content:"";display:block;width:44px;height:3px;border-radius:2px;
  background:var(--blue);opacity:.9;margin-top:14px;
}
.cs-dash .cs-stat100 span{margin-top:0}
/* callout azul (insight-chave): sombra tonalizada no azul p/ ganhar presença */
.cs-dash .cs-callout{
  box-shadow:0 2px 6px rgba(14,91,208,.18), 0 20px 44px -20px rgba(14,91,208,.5);
}
/* retro (verde/vermelho): mesma elevação, sem borda cinza */
.cs-dash .cs-retro{box-shadow:var(--el-rest);padding:30px}
/* raio unificado dos cards do case: 20px (o mesmo do callout) */
.cs-dash .cs-wcard,
.cs-dash .cs-bet,
.cs-dash .cs-dec,
.cs-dash .cs-out,
.cs-dash .cs-retro{border-radius:20px}
.cs-dash .cs-wcard{padding:28px}
.cs-dash .cs-out .oc{padding:30px;gap:30px}
.cs-dash .cs-callout{padding:22px 28px}
.cs-dash .cs-gbox{padding:16px 20px}

/* feature cards (Problema 4-up / Pilares 3-up): imagem emoldurada + corpo
   com régua-acento azul — mesma assinatura dos stat cards */
.cs-dash .cs-fgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:24px}
.cs-dash .cs-fgrid.p3{grid-template-columns:repeat(3,minmax(0,1fr))}
.cs-dash .cs-fcard{
  background:#fff;border-radius:20px;border:var(--el-bd);box-shadow:var(--el-rest);
  overflow:hidden;display:flex;flex-direction:column;
  transition:transform .4s var(--ease),box-shadow .4s var(--ease);
}
.cs-dash .cs-fcard img{display:block;width:100%;height:auto;
  transform:scale(1.045);transform-origin:center top}
.cs-dash .cs-fcard .fb{padding:20px 22px 24px;display:flex;flex-direction:column;gap:9px;flex:1}
.cs-dash .cs-fcard .fb::before{content:"";width:34px;height:3px;border-radius:2px;background:var(--blue);margin-bottom:3px}
.cs-dash .cs-fcard h3{font-size:16px;font-weight:800;letter-spacing:-.01em;line-height:1.3;margin:0;color:var(--ink)}
.cs-dash .cs-fcard p{font-size:14px;line-height:1.55;margin:0;color:var(--ink-body)}
@media (max-width:1240px){
  .cs-dash .cs-fgrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .cs-dash .cs-fgrid.p3{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:1000px){
  .cs-dash .cs-fgrid.p3{grid-template-columns:1fr}
}
@media (max-width:720px){
  .cs-dash .cs-fgrid{grid-template-columns:1fr;gap:16px}
}

/* ===== Escala tipográfica editorial (só .cs-dash) — corpo menor com respiro
   correto, hierarquia de PESO (400 corpo → 700/800 títulos → 900 nos números),
   micro-rótulos tracked e tracking negativo nos displays. Deixa o caso com
   acabamento profissional sem mudar conteúdo nem a fonte (Inter). ===== */
.cs-dash{ --ink-body:#2b3340; --ink-label:#5b6472; }

/* corpo de leitura em superfície branca: 15px, entrelinha 1.62, peso 400 */
.cs-dash .cs-wcard > p,
.cs-dash .cs-bet .bb > p,
.cs-dash .cs-dec .col > p,
.cs-dash .cs-method .tx,
.cs-dash .cs-out .od,
.cs-dash .cs-take p{
  font-size:clamp(14px,1.05vw,15px);line-height:1.62;font-weight:400;
  color:var(--ink-body);letter-spacing:0;max-width:64ch;
}
/* corpo temático (caixas verde/vermelha) — mantém a cor, só ajusta escala */
.cs-dash .cs-gbox p,
.cs-dash .cs-retro li{font-size:clamp(14px,1.05vw,15px);line-height:1.58;font-weight:400}
.cs-dash .cs-retro ul{gap:16px}
/* ledes de seção: medida confortável de leitura */
.cs-dash .cs-sec > .lede{
  font-size:clamp(15px,1.15vw,17px);line-height:1.6;color:var(--ink-body);
  max-width:72ch;letter-spacing:0;text-wrap:pretty;
}
/* títulos de card: tamanho moderado, peso 800 (não 900), tracking apertado */
.cs-dash .cs-wcard h4{
  font-size:clamp(15px,1.2vw,17px);font-weight:700;letter-spacing:-.005em;
  line-height:1.25;margin-bottom:12px;
}
.cs-dash .cs-bet .bh b,
.cs-dash .cs-dec .dh b,
.cs-dash .cs-method h3{
  font-size:clamp(19px,1.85vw,22px);font-weight:800;letter-spacing:-.015em;line-height:1.2;
}
/* eyebrows / kickers → micro-rótulos tracked */
.cs-dash .cs-method .eb{
  font-size:12px;font-weight:700;letter-spacing:.06em;color:var(--blue);line-height:1.3;
}
.cs-dash .cs-dec .dh i{
  font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--blue);margin-bottom:10px;
}
/* rótulos de coluna (ALTERNATIVES / WHY) e de caixa (Outcome / Key Finding) */
.cs-dash .cs-dec .lbl{font-size:12px;font-weight:700;letter-spacing:.09em;color:var(--ink-label)}
.cs-dash .cs-gbox b{
  font-size:12px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  margin-bottom:10px;padding-left:16px;
}
.cs-dash .cs-gbox b::before{width:7px;height:7px}
/* linhas de alternativa + pílula Discarted */
.cs-dash .cs-dec .alt{font-size:clamp(14px,1.1vw,15px);color:var(--ink-body)}
.cs-dash .cs-dec .disc{
  font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;padding:7px 13px;
}
/* citação + atribuição dos métodos */
.cs-dash .cs-method .qt{font-size:clamp(15px,1.2vw,16px);line-height:1.55;color:#4a5260}
.cs-dash .cs-method .at{
  font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--blue);
}
/* callout azul: rótulo micro + frase de leitura (não um h1 preto de 32px) */
.cs-dash .cs-callout b{
  font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  opacity:.85;margin-bottom:12px;
}
.cs-dash .cs-callout p{font-size:clamp(17px,1.5vw,20px);line-height:1.5;font-weight:500;color:#fff}
/* números-display: mantêm presença, mas com tracking negativo e tabular */
.cs-dash .cs-stat100 b{
  font-size:clamp(58px,7vw,86px);letter-spacing:-.04em;font-feature-settings:"tnum";line-height:1;
}
.cs-dash .cs-stat100 span{font-size:clamp(13px,1vw,14px);line-height:1.45;color:var(--ink-label)}
.cs-dash .cs-out .ot{font-size:clamp(30px,3.3vw,40px);letter-spacing:-.02em;line-height:1.05}
.cs-dash .cs-out .ot svg{width:clamp(24px,2.4vw,32px);height:clamp(24px,2.4vw,32px)}
.cs-dash .cs-out .ol{font-size:12px;font-weight:700;letter-spacing:.09em;color:var(--ink-label)}
.cs-dash .cs-out .od{color:var(--ink-body)}
.cs-dash .cs-take .n{font-size:clamp(34px,3.6vw,44px);letter-spacing:-.02em;line-height:1}
.cs-dash .cs-take h3,
.cs-dash .cs-retro h3{
  font-size:clamp(18px,1.85vw,22px);font-weight:800;letter-spacing:-.012em;line-height:1.22;margin-bottom:20px;
}
/* badge numerada dos bets: um pouco menor, proporcional ao título refinado */
.cs-dash .cs-bet .num{
  width:48px;height:48px;font-size:19px;letter-spacing:-.01em;
}
/* contraste acessível nas caixas temáticas (o verde/vermelho do Figma ficavam
   ~3:1 — abaixo de 4.5). Escurecidos na mesma matiz: verde 5.3:1, vermelho 5.1:1 */
.cs-dash .cs-gbox{color:#1c6e4e}
.cs-dash .cs-retro.good{color:#157a52}
.cs-dash .cs-retro.bad{color:#b3301b}
.cs-dash .cs-dec .disc{color:#c8381f;border-color:#c8381f;background:rgba(200,56,31,.05)}
/* cabeçalhos de seção: só tracking/entrelinha (sem mexer no tamanho que cruza a divisa) */
.cs-dash .cs-sech h2,
.cs-dash .cs-h52{letter-spacing:-.03em;line-height:1.06;text-wrap:balance}

/* adaptadores p/ componentes citric-style nas páginas convertidas ao padrão
   do case (StackSpot, Netflix WP, Charles, Gamification): mesma escala
   editorial — títulos 800 moderados, corpo 15/1.62, imagens emolduradas */
.cs-dash .cs-b h3{font-size:clamp(19px,1.85vw,22px);font-weight:800;letter-spacing:-.015em;line-height:1.25}
.cs-dash .cs-b p,
.cs-dash .cs-b .w790{font-size:clamp(14px,1.05vw,15px);line-height:1.62;color:var(--ink-body);max-width:72ch}
.cs-dash .cs-b p + p{margin-top:10px}
.cs-dash .cs-sec > .lede p + p{margin-top:10px}
.cs-dash .cs-sec > div.lede{font-size:clamp(15px,1.15vw,17px);line-height:1.6;color:var(--ink-body);max-width:72ch}
/* o gap da seção é dono do ritmo: neutraliza utilitários mt* herdados da
   arquitetura antiga quando são filhos diretos de .cs-sec (flex gap + margin
   somavam 72-76px e invertiam o agrupamento título/conteúdo) */
.cs-dash .cs-sec > .mt24,.cs-dash .cs-sec > .mt32,.cs-dash .cs-sec > .mt40,
.cs-dash .cs-sec > .mt64,.cs-dash .cs-sec > .mt72{margin-top:0}
/* última seção fecha sem hairline sobre o More projects (igual ao dashboard) */
.cs-dash .cs-sec:has(+ .cs-more){border-bottom:0;}
.cs-dash .cs-card h3{font-size:clamp(17px,1.5vw,19px);font-weight:800;letter-spacing:-.012em;line-height:1.3;margin:18px 0 0}
.cs-dash .cs-card p{font-size:clamp(14px,1.05vw,15px);line-height:1.6;color:var(--ink-body);margin:8px 0 0}
.cs-dash .cs-card img{border-radius:14px;border:1px solid rgba(3,11,23,.08)}
.cs-dash .cs-quote{font-weight:500;font-size:clamp(17px,1.55vw,20px);line-height:1.5;color:var(--ink);max-width:64ch}
.cs-dash .cs-list li{font-size:clamp(14px,1.05vw,15px);line-height:1.55;color:var(--ink-body)}
.cs-dash .cs-note{border-radius:20px}

/* ===== Leitura do case: interações de orientação (só no dashboard; elementos
   criados por JS apenas quando existe .cs-dash, então não vazam p/ outras págs) ===== */

/* 1) barra de progresso de leitura no topo */
.cs-read{position:fixed;inset:0 0 auto 0;height:3px;z-index:101;pointer-events:none;background:rgba(3,11,23,.06)}
.cs-read i{display:block;height:100%;width:100%;transform-origin:0 50%;transform:scaleX(0);
  background:var(--blue);will-change:transform}

/* 2) navegador de seções (rail à direita) — some abaixo de 1180 p/ não poluir */
.cs-toc{position:fixed;right:20px;top:50%;transform:translateY(-50%);z-index:90;
  display:none;flex-direction:column;gap:4px}
@media (min-width:1180px){ .cs-toc{display:flex} }
.cs-toc a{display:flex;align-items:center;justify-content:flex-end;gap:12px;
  padding:6px 0;text-decoration:none;position:relative}
.cs-toc .lbl{
  font-size:12px;font-weight:600;color:var(--ink);white-space:nowrap;
  background:#fff;border:1px solid var(--line);border-radius:9px;padding:5px 11px;
  box-shadow:0 6px 18px -8px rgba(3,11,23,.28);
  opacity:0;transform:translateX(8px);transition:opacity .28s var(--ease),transform .28s var(--ease);
  pointer-events:none;max-width:0;overflow:hidden}
.cs-toc .dot{flex:none;width:9px;height:9px;border-radius:50%;background:rgba(3,11,23,.22);
  transition:background .28s var(--ease),transform .28s var(--ease)}
.cs-toc a:hover .dot{background:rgba(3,11,23,.5)}
.cs-toc a.on .dot{background:var(--blue);transform:scale(1.4)}
.cs-toc a:hover .lbl,.cs-toc a:focus-visible .lbl{opacity:1;transform:translateX(0);max-width:260px}
.cs-toc a:focus-visible{outline:none}
.cs-toc a:focus-visible .dot{box-shadow:0 0 0 4px rgba(14,91,208,.25)}
/* rail em páginas com faixas claras E escuras (Citric): pontos inativos num
   cinza neutro que enxerga sobre os dois fundos; ativo continua azul */
.cs-toc.mixed a:not(.on) .dot{background:rgba(126,130,145,.6)}
.cs-toc.mixed a:hover:not(.on) .dot{background:rgba(126,130,145,.95)}

/* 2b) navegador de seções — versão tablet/mobile (FAB + bottom-sheet).
   O rail de pontos só aparece >=1180; abaixo disso mostramos um botão flutuante
   que abre uma folha inferior com todas as seções. */
.cs-toc-fab{
  position:fixed;right:16px;bottom:max(16px,env(safe-area-inset-bottom));z-index:92;
  display:none;align-items:center;gap:10px;max-width:min(74vw,320px);
  background:var(--ink);color:#fff;border:0;border-radius:100px;padding:11px 18px 11px 15px;
  font-weight:600;font-size:13px;cursor:pointer;
  box-shadow:0 10px 30px -8px rgba(3,11,23,.55);
  transition:transform .3s var(--ease),opacity .3s var(--ease);
}
@media (max-width:1179px){ .cs-toc-fab{display:inline-flex} }
.cs-toc-fab svg{width:18px;height:18px;flex:none}
.cs-toc-fab .num{flex:none;font-size:11px;font-weight:700;letter-spacing:.03em;
  background:rgba(255,255,255,.16);border-radius:20px;padding:3px 8px;font-variant-numeric:tabular-nums}
.cs-toc-fab .cur{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.cs-toc-fab:active{transform:scale(.96)}
.cs-toc-sheet{
  position:fixed;inset:auto 0 0 0;margin:0;width:100%;max-width:100%;max-height:78vh;
  border:0;border-radius:22px 22px 0 0;padding:0;background:var(--cream);color:var(--ink);
  box-shadow:0 -24px 70px -20px rgba(3,11,23,.5);overflow:hidden;
  transform:translateY(100%);transition:transform .34s var(--ease);
}
.cs-toc-sheet.up{transform:translateY(0)}
.cs-toc-sheet::backdrop{background:rgba(3,11,23,.5);backdrop-filter:blur(2px)}
.cs-toc-sheet .sh-grip{width:40px;height:4px;border-radius:3px;background:rgba(3,11,23,.18);margin:12px auto 4px}
.cs-toc-sheet .sh-head{display:flex;align-items:center;gap:10px;
  padding:6px 20px 12px}
.cs-toc-sheet .sh-head b{font-weight:800;font-size:15px;letter-spacing:-.01em;flex:1}
.cs-toc-sheet .sh-head .cnt{font-size:11px;font-weight:700;letter-spacing:.04em;color:var(--blue);
  background:rgba(14,91,208,.09);border-radius:20px;padding:4px 10px;font-variant-numeric:tabular-nums}
.cs-toc-sheet .sh-prog{height:3px;background:rgba(3,11,23,.07)}
.cs-toc-sheet .sh-prog i{display:block;height:100%;width:0;background:var(--blue);border-radius:2px;
  transition:width .25s var(--ease)}
.cs-toc-sheet .sh-x{width:34px;height:34px;border-radius:50%;border:0;background:rgba(3,11,23,.06);
  color:var(--ink);font-size:20px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
.cs-toc-sheet ol{list-style:none;margin:0;padding:8px;overflow-y:auto;max-height:calc(78vh - 64px);
  -webkit-overflow-scrolling:touch}
.cs-toc-sheet li{counter-increment:sec}
.cs-toc-sheet button{
  width:100%;display:flex;align-items:center;gap:14px;text-align:left;
  background:transparent;border:0;border-radius:12px;padding:13px 14px;cursor:pointer;
  font-size:15px;font-weight:600;color:var(--ink);line-height:1.3;
}
.cs-toc-sheet button .n{flex:none;width:26px;height:26px;border-radius:50%;
  background:rgba(3,11,23,.06);color:var(--ink);font-size:12px;font-weight:700;
  display:flex;align-items:center;justify-content:center}
.cs-toc-sheet button:hover{background:rgba(3,11,23,.04)}
.cs-toc-sheet button.on{color:var(--blue);background:rgba(14,91,208,.08)}
.cs-toc-sheet button.on .n{background:var(--blue);color:#fff}
/* tablet: vira um popover ancorado no botão (folha full-width lê pobre) */
@media (min-width:600px) and (max-width:1179px){
  .cs-toc-sheet{
    inset:auto 16px calc(84px + env(safe-area-inset-bottom)) auto;
    width:400px;max-height:60vh;border-radius:18px;
    transform:translateY(10px) scale(.98);opacity:0;
    transition:transform .3s var(--ease),opacity .3s var(--ease);
    box-shadow:0 18px 60px -18px rgba(3,11,23,.45);
  }
  .cs-toc-sheet.up{transform:none;opacity:1}
  .cs-toc-sheet::backdrop{background:rgba(3,11,23,.28)}
  .cs-toc-sheet .sh-grip{display:none}
  .cs-toc-sheet ol{max-height:calc(60vh - 88px)}
}

/* 3) lightbox das telas do case — com controle de zoom (botões + roda + arrastar
   + pinça). dialog = top layer, a11y nativo. */
.cs-dash .cs-art:not(.bleed){cursor:zoom-in}
.cs-lb{border:0;padding:0;background:transparent;max-width:100vw;max-height:100vh;
  width:100%;height:100%;margin:0;overflow:hidden}
.cs-lb::backdrop{background:rgba(3,11,23,.85);backdrop-filter:blur(3px)}
.cs-lb .wrap{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  padding:4vh 4vw;overflow:hidden;touch-action:none}
.cs-lb img{max-width:100%;max-height:92vh;border-radius:14px;box-shadow:0 30px 80px -20px rgba(0,0,0,.6);
  opacity:0;transform:translate(0,0) scale(1);transform-origin:center center;
  transition:opacity .3s var(--ease),transform .22s var(--ease);will-change:transform;user-select:none;-webkit-user-drag:none}
.cs-lb[open] img{opacity:1}
.cs-lb.zoomed .wrap{cursor:grab}
.cs-lb.grabbing .wrap{cursor:grabbing}
.cs-lb.grabbing img{transition:opacity .3s var(--ease)}   /* sem transição no pan */
.cs-lb .x{position:fixed;top:16px;right:18px;width:44px;height:44px;border-radius:50%;border:0;cursor:pointer;
  background:rgba(255,255,255,.14);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;
  transition:background .2s;z-index:3}
.cs-lb .x:hover{background:rgba(255,255,255,.28)}
/* barra de zoom */
.cs-lb .bar{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);z-index:3;
  display:flex;align-items:center;gap:2px;padding:6px;border-radius:100px;
  background:rgba(18,22,30,.72);backdrop-filter:blur(10px);box-shadow:0 12px 34px -10px rgba(0,0,0,.6)}
.cs-lb .bar button{width:42px;height:42px;border-radius:50%;border:0;background:transparent;color:#fff;
  cursor:pointer;font-size:20px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .18s}
.cs-lb .bar button:hover{background:rgba(255,255,255,.16)}
.cs-lb .bar button:disabled{opacity:.35;cursor:default}
.cs-lb .bar .pct{min-width:56px;text-align:center;font-size:12px;font-weight:600;color:#fff;
  font-variant-numeric:tabular-nums;cursor:pointer;user-select:none}
@media (prefers-reduced-motion:reduce){
  .cs-read i,.cs-toc .lbl,.cs-toc .dot,.cs-lb img,.cs-toc-sheet{transition:none}
}

/* ===== Modernização: enquadramento das telas + ritmo de espaçamento ===== */
/* telas do case ganham moldura consistente (cantos, hairline, sombra suave) */
.cs-dash .cs-art:not(.bleed){
  border-radius:16px;border:1px solid rgba(3,11,23,.08);
  box-shadow:0 1px 3px rgba(3,11,23,.05),0 20px 44px -26px rgba(3,11,23,.24);
}
/* mais ar entre seções — leitura calma, menos cansativa */
.cs-dash .cs-sec{
  padding-top:clamp(32px,4vw,52px);padding-bottom:clamp(40px,4.6vw,60px);
  gap:clamp(28px,2.8vw,36px);
}
/* ritmo interno agora que o texto respira */
.cs-dash .cs-bet .bb,
.cs-dash .cs-method,
.cs-dash .cs-wcard{gap:20px}
.cs-dash .cs-gbox{margin-top:4px}

@media (max-width:720px){
  .cs-dash .cs-bet .bh b,.cs-dash .cs-dec .dh b,.cs-dash .cs-method h3{font-size:clamp(18px,4.6vw,22px)}
  .cs-dash .cs-callout p{font-size:clamp(16px,4.2vw,20px)}
  .cs-dash .cs-bet .num{width:44px;height:44px;font-size:18px}
  .cs-dash .cs-art:not(.bleed){border-radius:12px}
}

@media (hover:hover) and (pointer:fine){
  .cs-dash .cs-bet,
  .cs-dash .cs-dec,
  .cs-dash .cs-out,
  .cs-dash .cs-wcard.cs-stat100,
  .cs-dash .cs-wcard.cs-take,
  .cs-dash .cs-method{
    cursor:default;
  }
  .cs-dash .cs-bet:hover,
  .cs-dash .cs-dec:hover,
  .cs-dash .cs-out:hover,
  .cs-dash .cs-fcard:hover,
  .cs-dash .cs-wcard.cs-stat100:hover,
  .cs-dash .cs-wcard.cs-take:hover,
  .cs-dash .cs-method:hover{
    transform:translateY(-4px);
    box-shadow:var(--el-hover);
  }
}
@media (prefers-reduced-motion:reduce){
  .cs-dash .cs-wcard,.cs-dash .cs-bet,.cs-dash .cs-dec,.cs-dash .cs-out{transition:none}
  .cs-dash .cs-bet:hover,.cs-dash .cs-dec:hover,.cs-dash .cs-out:hover,
  .cs-dash .cs-wcard.cs-stat100:hover,.cs-dash .cs-wcard.cs-take:hover,
  .cs-dash .cs-method:hover{transform:none}
}

/* More projects — navegação prev/next acima do footer (Figma 249:67293).
   Reaproveita .more-head; o fundo é o da própria página (o degradê
   branco→creme que existia aqui só aparecia na Citric e destoava dela). */
.cs-more{
  background:var(--cream);
  border-bottom:1px solid var(--line);
  padding-top:40px;padding-bottom:72px;
  display:flex;flex-direction:column;gap:40px;
}
.cs-more .more-head{width:100%}
/* variante usada por todas as páginas de projeto: respiro superior menor */
.cs-more.crm{padding-top:32px}
.cs-viewall{
  flex:none;display:inline-flex;align-items:center;gap:10px;
  border:2px solid var(--ink);border-radius:68px;padding:12px 18px;
  font-weight:500;font-size:16px;line-height:normal;color:var(--ink);
  text-decoration:none;white-space:nowrap;
  transition:background .3s cubic-bezier(.19,1,.22,1),color .3s cubic-bezier(.19,1,.22,1);
}
.cs-viewall svg{width:19px;height:19px;flex:none}
@media (hover:hover) and (pointer:fine){
  .cs-viewall:hover{background:var(--ink);color:#fff}
}
.cs-more-row{display:flex;gap:40px;align-items:flex-start;width:100%}
.cs-pcard{flex:1 0 0;min-width:1px;display:flex;flex-direction:column;gap:24px;color:inherit;text-decoration:none}
.cs-pthumb{display:block;height:423px;border-radius:30px;overflow:clip}
.cs-pthumb img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.19,1,.22,1)}
.cs-pinfo{display:flex;flex-direction:column;gap:18px}
.cs-pcat{font-weight:700;font-size:16px;line-height:normal;color:var(--blue)}
.cs-pinfo b{font-weight:900;font-size:30px;line-height:normal;color:var(--ink)}
.cs-pinfo p{font-weight:400;font-size:16px;line-height:normal;color:var(--ink)}
@media (hover:hover) and (pointer:fine){
  .cs-pcard:hover .cs-pthumb img{transform:scale(1.04)}
}
@media (max-width:1240px){
  .cs-pinfo b{font-size:30px}
}
@media (max-width:720px){
  .cs-more{gap:min(6.45vw,40px);padding-bottom:min(11.6vw,72px)}
  .cs-more.crm{padding-top:min(5.16vw,32px)}
  .cs-more .more-head{gap:12px}
  .cs-viewall{padding:8px 14px;font-size:clamp(12px,2.58vw,16px)}
  .cs-viewall svg{width:16px;height:16px}
  .cs-more-row{flex-direction:column;gap:min(9.7vw,60px)}
  /* sem os rótulos Previous/Next no celular */
  .cs-pthumb{height:auto;aspect-ratio:556/333}
  .cs-pinfo b{font-size:30px}
  .cs-pcat{font-size:clamp(12px,2.58vw,16px)}
  .cs-pinfo p{font-size:16px}
}
.cs-b h3{font-weight:900;font-size:40px;line-height:normal;margin:0}
.cs-b p{font-size:18px;line-height:normal;margin:32px 0 0}
.cs-b .w790{max-width:790px}
.cs-b.w856{max-width:856px}
.cs-b.off{margin-left:37.79%}
.cs-b .tok{display:block;margin-top:32px;width:100%;max-width:338px;height:auto}
.cs-note{
  background:var(--blue);color:#fff;border-radius:20px;
  padding:24px 40px;font-size:18px;line-height:normal;text-align:center;
}
.cs-hr{height:1px;background:var(--line)}
.z-dark .cs-hr{background:#222127}
.cs-panel{background:#1E1E1E;border-radius:20px;height:402px}

/* utilitários de ritmo vertical (valores do Figma) */
.cs .mt24{margin-top:24px}.cs .mt32{margin-top:32px}.cs .mt40{margin-top:40px}
.cs .mt64{margin-top:64px}.cs .mt72{margin-top:72px}
.cs .pt32{padding-top:32px}
.cs .pb0{padding-bottom:0}.cs .pb6{padding-bottom:6px}.cs .pb32{padding-bottom:32px}
.cs .pb40{padding-bottom:40px}.cs .pb48{padding-bottom:48px}.cs .pb56{padding-bottom:57px}
.cs .pb62{padding-bottom:62px}.cs .pb72{padding-bottom:72px}.cs .pb84{padding-bottom:84px}
.cs .pb100{padding-bottom:100px}

/* tablet e abaixo: tipografia proporcional (fatores = valor/810) */
@media (max-width:1240px){
  .cs-title h1{font-size:min(12.35vw,100px)}
  .cs-head h2{font-size:min(14.8vw,120px)}
  .cs-head .in{margin-top:max(-3.7vw,-30px)}
  .cs-head.up69 .in{margin-top:max(-8.5vw,-69px)}
  .cs-sub h2{font-size:min(6.2vw,50px)}
  .cs-intro > p{font-size:min(4.94vw,40px)}
  .cs-b h3{font-size:min(4.94vw,40px)}
  .cs-card h3{font-size:30px}
}

/* celular (canvas 620): textos corridos com clamp, meta em grade 2x2 */
@media (max-width:720px){
  /* celular: headings re-escalados ao canvas 620 (mesmo padrão das outras
     páginas — seções caem p/ o node mobile de 100px). */
  .cs-title h1{font-size:min(12.6vw,100px);overflow-wrap:anywhere}
  .cs-head h2{font-size:min(16.1vw,100px)}
  .cs-head .in{margin-top:max(-4.84vw,-30px)}
  .cs-head.up69 .in{margin-top:max(-11.13vw,-69px)}
  .cs-sub h2{font-size:min(8.06vw,50px)}
  .cs-b h3{font-size:min(6.45vw,40px)}
  .cs-card h3{font-size:30px}
  .cs-title .lede,.cs-sub p,.cs-head .lede,
  .cs-head .lede p + p,.cs-card p,.cs-b p,.cs-note{font-size:clamp(13px,2.9vw,18px)}
  .cs-head .lede p + p{margin-top:min(2.9vw,18px)}
  .cs-card p{font-size:16px}
  .cs-title .cat{font-size:clamp(12px,2.58vw,16px)}
  .cs-chip{font-size:clamp(12px,2.58vw,16px);padding:min(1.3vw,8px) min(2.58vw,16px)}
  .cs-meta .row{display:grid;grid-template-columns:1fr 1fr;gap:24px;padding:24px 0}
  .cs-meta .vr{display:none}
  .cs-meta .item{width:auto}
  .cs-meta .item i{font-size:clamp(13px,2.9vw,18px)}
  .cs-meta .item b{font-size:min(3.87vw,24px)}
  .cs-intro > p{font-size:min(6.45vw,40px)}
  .cs-cards{flex-direction:column}
  .cs-b.off{margin-left:0}
  .cs-note{padding:min(3.9vw,24px) min(6.45vw,40px)}
  .cs-panel{height:min(64.8vw,402px)}
}

/* ===== Cursor custom (ref. muvuca.studio) na cor primária ===== */
.cursor-dot{
  position:fixed;top:0;left:0;width:9px;height:9px;padding:0;
  background:var(--blue);border-radius:50%;
  border:1px solid rgba(232,236,255,0);box-sizing:border-box;
  display:flex;align-items:center;justify-content:center;
  overflow:hidden;white-space:nowrap;
  color:#f6f7fb;font-size:16px;font-weight:400;line-height:1;
  pointer-events:none;z-index:9999;
  transform:translate(-50%,-50%);will-change:transform,width,height;opacity:0;
  transition:width .44s cubic-bezier(.19,1,.22,1),height .44s cubic-bezier(.19,1,.22,1),
             padding .44s cubic-bezier(.19,1,.22,1),border-radius .44s cubic-bezier(.19,1,.22,1),
             border-color .3s ease,opacity .25s ease;
}
body.cursor-on .cursor-dot{opacity:1}
body.cursor-hover .cursor-dot{width:18px;height:18px}
body.cursor-press:not(.pcursor-on) .cursor-dot{width:6px;height:6px}
@media (pointer:fine){
  html.cursor-active,html.cursor-active *{cursor:none !important}
}
@media (prefers-reduced-motion:reduce){
  .cursor-dot{transition:opacity .25s ease}
}

/* ===== StackSpot (case) — estruturas do Figma 315:9041. Escopo .ss, então
   nenhuma outra página é afetada. Mantém .cs-dash (barra de progresso,
   seletor de seções e lightbox das telas). ===== */
/* vídeo (315:9087): 16:9, raio 20, poster local + play; o iframe do YouTube
   só entra no clique (não custa nada no carregamento da página) */
.ss .ss-video{position:relative;width:100%;aspect-ratio:16/9;border-radius:20px;overflow:hidden;background:#0b0f16}
.ss .ss-video-btn{
  position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;cursor:pointer;
  background:none;display:block;
}
.ss .ss-video-btn img{width:100%;height:100%;object-fit:cover;display:block;border:0;border-radius:0}
.ss .ss-video-btn .pb{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:84px;height:84px;border-radius:50%;background:var(--blue);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 10px 30px rgba(3,11,23,.35);
  transition:transform .32s var(--ease), background .32s var(--ease);
}
.ss .ss-video-btn .pb svg{width:34px;height:34px;fill:#fff;margin-left:3px}
.ss .ss-video iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}
@media (hover:hover) and (pointer:fine){
  .ss .ss-video-btn:hover .pb{transform:translate(-50%,-50%) scale(1.08)}
}
.ss .ss-video-btn:focus-visible{outline:none}
.ss .ss-video-btn:focus-visible .pb{box-shadow:0 0 0 5px rgba(14,91,208,.35)}

/* Core areas (315:9097/9110): 2 colunas, imagem raio 30 + título 40 + texto 18 */
.ss .ss-grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:40px}
/* ---- cards de ícone (Figma 456:17308/17664): brancos, borda #E8ECFF,
   título Black azul com tile de ícone #DAE6FC, divisor e texto. Duas escalas:
   a grade de 3 (45px/21px) e a de 2 (50px/24px). ---- */
.ss .ss-igrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin-top:40px}
.ss .ss-igrid.two{grid-template-columns:repeat(2,minmax(0,1fr))}
.ss .ss-icard{
  background:#fff;border:1px solid var(--line);border-radius:20px;padding:40px;
  display:flex;flex-direction:column;gap:16px;position:relative;
}
.ss .ss-icard .hd{display:flex;align-items:center;gap:16px}
.ss .ss-icard .ico{
  flex:none;display:flex;align-items:center;justify-content:center;
  width:45px;height:45px;border-radius:10px;background:#DAE6FC;
}
.ss .ss-icard .ico svg{display:block;width:25px;height:25px}
.ss .ss-icard b{font-weight:900;font-size:21px;line-height:normal;color:var(--blue)}
.ss .ss-icard .rule{width:100%;height:1px;background:var(--line)}
.ss .ss-icard p{font-size:16px;line-height:normal;margin:0;color:var(--ink)}
.ss .ss-igrid.two .ico{width:50px;height:50px;border-radius:11px}
.ss .ss-igrid.two .ico svg{width:28px;height:28px}
.ss .ss-igrid.two b{font-size:24px}

.ss .ss-gcard{display:flex;flex-direction:column;gap:24px}
.ss .ss-gcard .th{display:block;border-radius:30px;overflow:clip;border:1px solid rgba(3,11,23,.08)}
.ss .ss-gcard img{
  display:block;width:100%;aspect-ratio:668/393;object-fit:cover;
  transition:transform .6s cubic-bezier(.19,1,.22,1);
}
@media (hover:hover) and (pointer:fine){
  .ss .ss-gcard:hover img{transform:scale(1.04)}
}
@media (prefers-reduced-motion:reduce){
  .ss .ss-gcard img{transition:none}
  .ss .ss-gcard:hover img{transform:none}
}
.ss .ss-gcard h3{font-weight:900;font-size:30px;line-height:normal;margin:0;color:var(--ink)}
.ss .ss-gcard p{font-size:16px;line-height:normal;margin:-8px 0 0;color:var(--ink)}

/* Impact (315:9177): cards de citação — mesmo componente do Peer feedback */
.ss .ss-quotes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.ss .ss-qcard{
  position:relative;background:#fff;border:1px solid var(--line);border-radius:30px;
  padding:32px 31px;margin:0;display:flex;flex-direction:column;gap:24px;overflow:clip;
}
.ss .ss-qcard .q{
  position:absolute;left:14px;top:14px;width:120px;height:92px;background:#F6F7FB;
  -webkit-mask:url(assets/quote-mark.svg) no-repeat center/contain;
          mask:url(assets/quote-mark.svg) no-repeat center/contain;
  transition:left .3s ease, top .3s ease;
}
.ss .ss-qcard blockquote{position:relative;flex:1 0 0;margin:0;border:0;font-size:16px;line-height:normal;color:var(--ink)}
.ss .ss-qcard .rule{position:relative;width:100%;height:2px;background:var(--line);flex-shrink:0}
.ss .ss-qcard .who{position:relative;display:flex;gap:16px;align-items:center;margin:0}
.ss .ss-qcard .who img{
  width:57px;height:57px;flex:none;border-radius:50%;object-fit:cover;
  border:2px solid #e4e4e3;
}
.ss .ss-qcard .id{display:flex;flex-direction:column;gap:4px;min-width:0}
.ss .ss-qcard .id b{font-weight:700;font-size:16px;color:var(--blue)}
.ss .ss-qcard .id .r{font-weight:400;font-size:14px;color:var(--ink)}
@media (hover:hover) and (pointer:fine){
  .ss .ss-qcard:hover .q{left:12px;top:12px}
}

/* Conclusion (315:9714): 4 cards numerados */

@media (max-width:1240px){
  .ss .ss-igrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ss .ss-grid2{gap:24px}
  .ss .ss-gcard h3{font-size:30px}
  .ss .ss-quotes{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:720px){
  .ss .ss-grid2{grid-template-columns:1fr}
  .ss .ss-gcard{gap:16px}
  .ss .ss-gcard .th{border-radius:20px}
  .ss .ss-gcard p{font-size:16px;margin:-4px 0 0}
  .ss .ss-quotes{grid-template-columns:1fr}
  .ss .ss-qcard{padding:24px 22px;border-radius:20px}
  .ss .ss-qcard .q{width:88px;height:68px}
  .ss .ss-igrid,.ss .ss-igrid.two{grid-template-columns:1fr;margin-top:24px}
  .ss .ss-icard{padding:24px;border-radius:16px}
  .ss .ss-video{border-radius:14px}
  .ss .ss-video-btn .pb{width:60px;height:60px}
  .ss .ss-video-btn .pb svg{width:24px;height:24px}
}
@media (prefers-reduced-motion:reduce){
  .ss .ss-video-btn .pb,.ss .ss-qcard,.ss .ss-qcard .q{transition:none}
}
/* tipografia do Figma nesta página (a escala reduzida do .cs-dash encolhia o
   corpo para ~14px; o Figma 315:9041 pede 16px em ledes, corpo e callout) */
.ss .cs-sec > .lede{font-size:16px;line-height:normal;color:var(--ink);max-width:none}
.ss .cs-b p,.ss .cs-b .w790{font-size:16px;line-height:normal;color:var(--ink);max-width:none}
.ss .cs-b p + p{margin-top:16px}
.ss .cs-callout{padding:24px 40px;border-radius:20px}
.ss .cs-callout p{font-size:16px;line-height:normal}
@media (max-width:720px){
  .ss .cs-sec > .lede,.ss .cs-b p,.ss .cs-b .w790,.ss .cs-callout p{font-size:clamp(14px,3.6vw,16px)}
  .ss .cs-callout{padding:20px 24px}
}

/* ===== Projects no mobile (Figma 180:38356): listagem simples — os cards não
   se sobrepõem. Card = imagem 556×400 (raio 30) com categoria+título
   sobrepostos; a descrição sai do overlay e fica abaixo, em tinta. ===== */
@media (max-width:720px){
  .scroll-stack{display:flex;flex-direction:column;gap:40px}
  .scroll-stack .pcard-lg{
    position:relative;top:auto;margin-bottom:0;transform:none !important;
    display:flex;flex-direction:column;gap:16px;
    height:auto;aspect-ratio:auto;border-radius:0;overflow:visible;
  }
  .scroll-stack .pcard-lg > img{
    width:100%;height:auto;aspect-ratio:556/400;object-fit:cover;border-radius:30px;
  }
  /* gradiente e overlay cobrem apenas a área da imagem */
  .scroll-stack .pcard-lg .grad{
    inset:auto;top:0;left:0;right:0;aspect-ratio:556/400;border-radius:30px;
  }
  .scroll-stack .pcard-lg .pinfo{
    top:0;left:0;right:0;bottom:auto;width:auto;max-width:none;transform:none;
    aspect-ratio:556/400;justify-content:flex-end;padding:0 24px 32px;
  }
  /* descrição abaixo do card (fora do overlay) */
  .scroll-stack .pcard-lg > .pdesc{
    position:static;width:100%;text-align:left;color:var(--ink);
    font-size:clamp(14px,3.4vw,18px);line-height:normal;
  }
}

/* ===== Menu mobile: painel inteiro na superfície ink (mesma do footer e da
   seção Featured Projects). Links em /barra/ alinhados à esquerda, muito
   respiro e o bloco de contato ancorado embaixo. ===== */
@media (max-width:720px){
  .menu-sheet{
    display:block;position:fixed;inset:0;z-index:98;
    background:var(--ink);color:var(--cream);
    opacity:0;visibility:hidden;pointer-events:none;
    transition:opacity .32s var(--ease), visibility 0s linear .32s;
    transform:none;border:0;box-shadow:none;width:auto;max-width:none;margin:0;border-radius:0;
    overflow-y:auto;-webkit-overflow-scrolling:touch;
  }
  .menu-sheet.open{opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s}
  /* o header some como caixa: logo e X ficam direto sobre a ink (ref.) */
  .header-in{position:relative;z-index:99}
  body.menu-open .header-in{
    background:transparent;border-color:transparent;box-shadow:none;
    -webkit-backdrop-filter:none;backdrop-filter:none;
  }
  body.menu-open .avail{color:var(--cream)}
  .menu-btn.open{background:transparent}
  .menu-btn.open .menu-line{background:var(--cream)}

  .msheet-in{
    min-height:100%;box-sizing:border-box;
    display:flex;flex-direction:column;justify-content:space-between;gap:48px;
    padding:104px 24px calc(28px + env(safe-area-inset-bottom));
  }
  /* --- navegação --- */
  .mnav{display:flex;flex-direction:column;align-items:flex-start;gap:6px}
  .mnav-link{
    display:inline-flex;align-items:baseline;text-decoration:none;
    font-size:clamp(30px,9.5vw,44px);font-weight:900;line-height:1.28;
    letter-spacing:-.02em;text-transform:lowercase;color:var(--cream);opacity:.72;
    transition:opacity .3s var(--ease), color .3s var(--ease);
  }
  .mnav-link.active,.mnav-link:hover,.mnav-link:focus-visible{opacity:1;outline:none}
  .mnav .lang-row{
    display:flex;gap:18px;margin-top:22px;font-size:15px;font-weight:600;
  }
  .mnav .lang-row a{color:var(--cream);opacity:.5;text-decoration:none;
    transition:opacity .25s var(--ease), color .25s var(--ease)}
  .mnav .lang-row a.on{color:var(--blue);opacity:1}

  /* --- contato ancorado no rodapé do painel --- */
  .mfoot{display:flex;flex-direction:column;align-items:flex-start;gap:14px}
  .mfoot .mcontact{margin-top:2px}
  .mfoot .mlegal{margin-top:8px}
  .mcontact{display:flex;flex-direction:column;gap:6px;font-size:16px}
  .mtel,.mmail{color:var(--cream);text-decoration:none}
  .mmail{text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--blue)}
  .mcta{
    display:block;text-decoration:none;text-wrap:balance;
    font-size:clamp(24px,7.4vw,32px);font-weight:900;letter-spacing:-.02em;
    color:var(--blue);line-height:1.15;
  }
  .mlegal{font-size:12px;line-height:1.6;color:var(--cream);opacity:.5;margin:0}

  /* entrada escalonada: sobe + aparece */
  .menu-sheet .mnav-link,
  .menu-sheet .mnav .lang-row,
  .menu-sheet .mfoot{
    opacity:0;transform:translateY(18px);
    transition:opacity .2s ease-in, transform .2s ease-in;
  }
  .menu-sheet.open .mnav-link,
  .menu-sheet.open .mnav .lang-row,
  .menu-sheet.open .mfoot{
    opacity:1;transform:none;
    transition:opacity .5s cubic-bezier(.215,.61,.355,1) calc(var(--i) * .07s + .06s),
               transform .5s cubic-bezier(.215,.61,.355,1) calc(var(--i) * .07s + .06s);
  }
  .menu-sheet.open .mnav-link{opacity:.72}
  .menu-sheet.open .mnav-link.active,
  .menu-sheet.open .mnav-link:hover{opacity:1}
  body.menu-open{overflow:hidden}
}
@media (prefers-reduced-motion:reduce){
  .menu-sheet,.menu-sheet .mnav-link,.menu-sheet .mfoot,
  .menu-sheet .mnav .lang-row,.menu-btn .menu-line{transition-duration:.01ms !important;transition-delay:0s !important}
}

/* ===== Cards de projeto: o ponto do cursor VIRA a pílula "View Project"
   (Figma 360:20333). Mesmo elemento: cresce em largura/altura/raio e o
   rótulo aparece dentro. São propriedades de layout, mas num único elemento
   position:fixed fora do fluxo — não reflui a página. ===== */
.cursor-dot .cd-pill{
  display:inline-flex;align-items:center;gap:10px;
  opacity:0;transform:translateY(3px);
  transition:opacity .2s ease, transform .32s var(--ease);
}
/* seta diagonal: caixa quadrada, ~81% da altura do rótulo de 16px */
.cursor-dot .cd-pill svg{width:13px;height:13px;flex:none;overflow:visible}
/* pílula: o círculo se abre até a largura medida em --pw */
body.pcursor-on .cursor-dot{
  width:var(--pw,152px);height:44px;padding:10px 16px;
  border-radius:70px;border-color:rgba(232,236,255,.4);
  box-shadow:0 10px 30px rgba(3,11,23,.22);
}
body.pcursor-on .cursor-dot .cd-pill{opacity:1;transform:none;transition-delay:.14s}
/* a seta dá UM avanço na diagonal, depois que o círculo terminou de virar
   pílula e o rótulo apareceu (morph .44s + rótulo .14s+.2s) */
@keyframes pc-arrow{
  0%,100%{transform:translate(0,0)}
  55%{transform:translate(4px,-4px)}
}
body.pcursor-on .cursor-dot .cd-pill svg{
  animation:pc-arrow .62s cubic-bezier(.4,0,.2,1) .5s 1 both;
}
@media (prefers-reduced-motion:reduce){
  body.pcursor-on .cursor-dot .cd-pill svg{animation:none}
}
/* o clique não deve encolher a pílula de volta a um ponto */
body.pcursor-on.cursor-press .cursor-dot{width:var(--pw,152px);height:44px}

/* ===== Netflix Watch Party — componentes fiéis ao Figma 315:10067.
   Escopo .cs-nwp: as outras páginas .cs-dash (Charles, Gamification,
   StackSpot) não são afetadas. Tokens do Figma: card branco + borda
   #E8ECFF + raio 20, números 50px em #0E5BD0, corpo 16px. ===== */
:is(.cs-nwp,.cs-gam) .cs-sec{gap:32px}
:is(.cs-nwp,.cs-gam) .cs-sec > .lede,
:is(.cs-nwp,.cs-gam) .nwp-block > .lede{
  font-size:16px;line-height:normal;color:var(--ink);max-width:none;letter-spacing:0;
}
/* títulos internos: 42px nos blocos, 52px nos sub-cabeçalhos do fluxo */
:is(.cs-nwp,.cs-gam) .nwp-h{font-weight:900;font-size:42px;line-height:normal;margin:0;color:var(--ink)}
:is(.cs-nwp,.cs-gam) .nwp-h2{font-weight:900;font-size:52px;line-height:normal;margin:0;color:var(--ink)}
:is(.cs-nwp,.cs-gam) .nwp-block{display:flex;flex-direction:column;gap:16px}
:is(.cs-nwp,.cs-gam) .nwp-block.gap32{gap:32px}
:is(.cs-nwp,.cs-gam) .rule{display:block;width:100%;height:1px;background:var(--line);flex:none}
/* ...mas essa regra vale para as réguas DENTRO dos cards. A do cabeçalho
   "More projects" precisa crescer no flex e ceder espaço ao botão "View all";
   sem esta linha ela ocupava 100% e empurrava o botão para fora da tela. */
:is(.cs-nwp,.cs-gam) .more-head .rule{flex:1 0 0;width:auto;height:2px}
:is(.cs-nwp,.cs-gam) .cs-art.r30{border-radius:30px}

/* banner preto da pergunta norteadora (texto à esquerda, still à direita) */
:is(.cs-nwp,.cs-gam) .nwp-hero{
  display:flex;align-items:center;justify-content:flex-end;gap:10px;padding-left:40px;
  background:#000;border-radius:20px;overflow:hidden;
}
:is(.cs-nwp,.cs-gam) .nwp-hero-tx{
  flex:0 1 421px;min-width:0;display:flex;flex-direction:column;gap:10px;color:#fff;
}
:is(.cs-nwp,.cs-gam) .nwp-hero-tx .q{font-weight:900;font-size:32px;line-height:normal;margin:0}
:is(.cs-nwp,.cs-gam) .nwp-hero-tx .s{font-weight:500;font-size:16px;line-height:normal;margin:0}
:is(.cs-nwp,.cs-gam) .nwp-hero-tx .s b{font-weight:700;color:#ff1e34}
:is(.cs-nwp,.cs-gam) .nwp-hero img{
  display:block;width:63.7%;aspect-ratio:851/568;object-fit:cover;flex:none;
}

/* cards com ícone (The problem / The opportunity) */
:is(.cs-nwp,.cs-gam) .nwp-icards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
:is(.cs-nwp,.cs-gam) .nwp-icard{
  background:#fff;border:1px solid var(--line);border-radius:20px;padding:40px;
  display:flex;flex-direction:column;gap:16px;
}
:is(.cs-nwp,.cs-gam) .nwp-icard .hd{display:flex;align-items:center;gap:16px}
:is(.cs-nwp,.cs-gam) .nwp-icard .ico{
  display:flex;align-items:center;justify-content:center;flex:none;
  padding:10px;border-radius:10px;background:#dae6fc;
}
:is(.cs-nwp,.cs-gam) .nwp-icard .ico.bad{background:#fcdadb}
:is(.cs-nwp,.cs-gam) .nwp-icard .ico svg{display:block;width:24px;height:24px}
:is(.cs-nwp,.cs-gam) .nwp-icard b{font-weight:900;font-size:24px;line-height:normal;color:var(--ink)}
:is(.cs-nwp,.cs-gam) .nwp-icard p{font-size:16px;line-height:normal;margin:0;color:var(--ink)}
/* no Figma os títulos desses cards são nowrap — "Native synchronized view"
   avança ~9px sobre o padding de 40px em vez de quebrar em duas linhas */
@media (min-width:1241px){
  :is(.cs-nwp,.cs-gam) .nwp-icard b{white-space:nowrap}
}

/* cards de dado (survey, %, how data guided) */
:is(.cs-nwp,.cs-gam) .nwp-grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
:is(.cs-nwp,.cs-gam) .nwp-grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px}
:is(.cs-nwp,.cs-gam) .nwp-c{
  background:#fff;border:1px solid var(--line);border-radius:20px;padding:40px 30px;
  display:flex;flex-direction:column;gap:8px;justify-content:center;
}
:is(.cs-nwp,.cs-gam) .nwp-c.end{justify-content:flex-end}
:is(.cs-nwp,.cs-gam) .nwp-c .t{font-size:16px;line-height:normal;margin:0;color:var(--ink)}
:is(.cs-nwp,.cs-gam) .nwp-c .num{
  font-weight:900;font-size:50px;line-height:normal;color:var(--blue);
  font-feature-settings:"tnum";white-space:nowrap;
}
:is(.cs-nwp,.cs-gam) .nwp-c .ill{display:block;width:88px;height:88px}
/* stat: número + régua vertical + frase */
:is(.cs-nwp,.cs-gam) .nwp-c.nwp-stat{flex-direction:row;align-items:center;gap:16px}
:is(.cs-nwp,.cs-gam) .nwp-c.nwp-stat .num{flex:none}
:is(.cs-nwp,.cs-gam) .nwp-c.nwp-stat .vr{width:1px;height:73px;background:var(--line);flex:none}
:is(.cs-nwp,.cs-gam) .nwp-c.blue{background:var(--blue);border-color:var(--blue)}
:is(.cs-nwp,.cs-gam) .nwp-c.blue p{font-weight:500;font-size:20px;line-height:normal;margin:0;color:#fff}
/* how data guided: número + rótulo azul + corpo */
:is(.cs-nwp,.cs-gam) .nwp-c.dg{gap:16px}
:is(.cs-nwp,.cs-gam) .nwp-c.dg .tx{display:flex;flex-direction:column;gap:8px}
:is(.cs-nwp,.cs-gam) .nwp-c.dg .bl{font-weight:700;font-size:16px;line-height:normal;color:var(--blue)}
:is(.cs-nwp,.cs-gam) .nwp-c.dg .t{display:block}

/* personas */
:is(.cs-nwp,.cs-gam) .nwp-personas{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
:is(.cs-nwp,.cs-gam) .nwp-persona{
  background:#fff;border:1px solid var(--line);border-radius:20px;overflow:hidden;
  display:flex;flex-direction:column;
}
:is(.cs-nwp,.cs-gam) .nwp-persona > img{display:block;width:100%;aspect-ratio:1;object-fit:cover}
:is(.cs-nwp,.cs-gam) .nwp-persona .pb{flex:1;padding:40px 30px;display:flex;flex-direction:column;gap:24px}
:is(.cs-nwp,.cs-gam) .nwp-persona .g{display:flex;flex-direction:column;gap:8px}
:is(.cs-nwp,.cs-gam) .nwp-persona .nm{font-weight:900;font-size:30px;line-height:normal;color:var(--blue)}
:is(.cs-nwp,.cs-gam) .nwp-persona p{font-size:16px;line-height:normal;margin:0;color:var(--ink)}
:is(.cs-nwp,.cs-gam) .nwp-persona .lb{font-weight:900;font-size:12px;line-height:normal;color:var(--blue)}
:is(.cs-nwp,.cs-gam) .nwp-persona .lb.ink{color:var(--ink)}
:is(.cs-nwp,.cs-gam) .nwp-persona ul{
  list-style:disc;margin:0;padding-left:24px;display:flex;flex-direction:column;gap:16px;
}
:is(.cs-nwp,.cs-gam) .nwp-persona li{font-size:16px;line-height:normal;color:var(--ink)}

/* arquitetura Mobile ↔ TV */
:is(.cs-nwp,.cs-gam) .nwp-arch{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
:is(.cs-nwp,.cs-gam) .nwp-acard{
  background:#fff;border:2px solid var(--line);border-radius:20px;padding:40px;
  display:flex;flex-direction:column;gap:16px;
}
:is(.cs-nwp,.cs-gam) .nwp-acard .hd{display:flex;align-items:center;gap:16px}
:is(.cs-nwp,.cs-gam) .nwp-acard .ico{
  display:flex;align-items:center;justify-content:center;flex:none;
  padding:10px;border-radius:10px;background:#dae6fc;
}
:is(.cs-nwp,.cs-gam) .nwp-acard .ico svg{display:block;width:25px;height:25px}
:is(.cs-nwp,.cs-gam) .nwp-acard b{font-weight:900;font-size:24px;line-height:normal;color:var(--blue)}
:is(.cs-nwp,.cs-gam) .nwp-acard ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}
:is(.cs-nwp,.cs-gam) .nwp-acard li{display:flex;align-items:flex-start;gap:8px;font-size:16px;line-height:normal;color:var(--ink)}
:is(.cs-nwp,.cs-gam) .nwp-acard li svg{display:block;width:15px;height:15px;flex:none;margin-top:2px}
/* faixa azul da decisão de design */
:is(.cs-nwp,.cs-gam) .nwp-decision{background:var(--blue);border-radius:20px;padding:24px 40px;color:#fff}
:is(.cs-nwp,.cs-gam) .nwp-decision .lb{font-weight:700;font-size:12px;line-height:normal;margin:0 0 8px}
:is(.cs-nwp,.cs-gam) .nwp-decision p{font-size:16px;line-height:normal;margin:0;color:#fff}

/* trade-offs */
:is(.cs-nwp,.cs-gam) .nwp-trade{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
:is(.cs-nwp,.cs-gam) .nwp-tcard{
  background:#fff;border:1px solid var(--line);border-radius:20px;overflow:hidden;
  display:flex;flex-direction:column;
}
:is(.cs-nwp,.cs-gam) .nwp-tcard .th{background:#dae6fc;padding:40px;display:flex;align-items:center;min-height:152px}
:is(.cs-nwp,.cs-gam) .nwp-tcard .th b{font-weight:900;font-size:20px;line-height:normal;color:var(--blue)}
:is(.cs-nwp,.cs-gam) .nwp-tcard .tb{
  flex:1;padding:29px 40px;display:flex;flex-direction:column;gap:24px;
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);
}
:is(.cs-nwp,.cs-gam) .nwp-tcard .opt{display:flex;flex-direction:column;gap:24px}
:is(.cs-nwp,.cs-gam) .nwp-tcard .oh{display:flex;align-items:center;gap:8px}
:is(.cs-nwp,.cs-gam) .nwp-tcard .oh svg{display:block;width:16px;height:15.75px;flex:none}
:is(.cs-nwp,.cs-gam) .nwp-tcard .oh b{font-weight:700;font-size:16px;line-height:normal}
:is(.cs-nwp,.cs-gam) .nwp-tcard .ok b{color:#009e63}
:is(.cs-nwp,.cs-gam) .nwp-tcard .no b{color:#ec472e}
:is(.cs-nwp,.cs-gam) .nwp-tcard p{font-size:16px;line-height:normal;margin:0;color:var(--ink)}
:is(.cs-nwp,.cs-gam) .nwp-tcard .tf{padding:40px;display:flex;flex-direction:column;gap:24px}
:is(.cs-nwp,.cs-gam) .nwp-tcard .tf b{font-weight:700;font-size:16px;line-height:normal;color:var(--ink)}

/* hipóteses de validação */
:is(.cs-nwp,.cs-gam) .nwp-hyp{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
:is(.cs-nwp,.cs-gam) .nwp-hcard{
  background:#fff;border:1px solid var(--line);border-radius:20px;overflow:hidden;
  display:flex;flex-direction:column;
}
:is(.cs-nwp,.cs-gam) .nwp-hcard .hh{padding:20px}
:is(.cs-nwp,.cs-gam) .nwp-hcard .hh b{font-weight:700;font-size:20px;line-height:normal;color:var(--blue)}
:is(.cs-nwp,.cs-gam) .nwp-hcard .hb{
  flex:1;padding:29px 20px;display:flex;flex-direction:column;gap:24px;
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);
}
:is(.cs-nwp,.cs-gam) .nwp-hcard p{font-size:16px;line-height:normal;margin:0;color:var(--ink)}
:is(.cs-nwp,.cs-gam) .nwp-hcard .kv{display:flex;flex-direction:column;gap:8px}
:is(.cs-nwp,.cs-gam) .nwp-hcard .kv i{font-style:normal;color:#8e98a8}
:is(.cs-nwp,.cs-gam) .nwp-hcard .hf{padding:20px;display:flex;align-items:center;gap:16px}
:is(.cs-nwp,.cs-gam) .nwp-hcard .hf .lb{font-size:16px;line-height:normal;color:#8e98a8;flex:none}
:is(.cs-nwp,.cs-gam) .nwp-hcard .bar{flex:1;min-width:0;height:5px;border-radius:60px;background:#dadada}
:is(.cs-nwp,.cs-gam) .nwp-hcard .bar i{display:block;height:100%;border-radius:60px;background:currentColor}
:is(.cs-nwp,.cs-gam) .nwp-hcard .val{font-weight:700;font-size:16px;line-height:normal;flex:none}
:is(.cs-nwp,.cs-gam) .nwp-hcard .hf.t-high{color:#009e63}
:is(.cs-nwp,.cs-gam) .nwp-hcard .hf.t-mid{color:#0065ff}
:is(.cs-nwp,.cs-gam) .nwp-hcard .hf.t-med{color:#fe7b02}
:is(.cs-nwp,.cs-gam) .nwp-hcard .hf .val{color:currentColor}
/* a trilha da barra "High" é preenchida por inteiro (sem faixa cinza) */
:is(.cs-nwp,.cs-gam) .nwp-hcard .hf.t-high .bar{background:#009e63}
/* a barra cresce da esquerda quando o card entra na tela. O preenchimento é
   escalado (não animo width, que causaria layout a cada quadro); a classe
   .bar-anim só é posta pelo JS, então sem JS a barra já nasce cheia. */
:is(.cs-nwp,.cs-gam) .nwp-hcard .bar i{transform-origin:left center}
:is(.cs-nwp,.cs-gam) .nwp-hcard.bar-anim .bar i{
  transform:scaleX(0);transition:transform 1.1s cubic-bezier(.19,1,.22,1);
}
:is(.cs-nwp,.cs-gam) .nwp-hcard.bar-anim.bar-in .bar i{transform:scaleX(1)}
/* a trilha verde do "High" é o próprio preenchimento — some junto e volta */
:is(.cs-nwp,.cs-gam) .nwp-hcard.bar-anim .hf.t-high .bar{
  background:#dadada;transition:background 0s;
}
@media (prefers-reduced-motion:reduce){
  :is(.cs-nwp,.cs-gam) .nwp-hcard.bar-anim .bar i{transform:none;transition:none}
  :is(.cs-nwp,.cs-gam) .nwp-hcard.bar-anim .hf.t-high .bar{background:#009e63}
}

/* guardrails (painel vermelho claro) */
:is(.cs-nwp,.cs-gam) .nwp-guard{background:#ffd5ce;border-radius:20px;padding:40px;color:#ec472e}
:is(.cs-nwp,.cs-gam) .nwp-guard .gh{font-weight:900;font-size:18px;line-height:normal;margin:0 0 32px}
:is(.cs-nwp,.cs-gam) .nwp-guard ul{list-style:disc;margin:0;padding-left:24px;display:flex;flex-direction:column;gap:16px}
:is(.cs-nwp,.cs-gam) .nwp-guard li{font-size:16px;line-height:normal;color:#ec472e}
:is(.cs-nwp,.cs-gam) .nwp-guard li b{font-weight:700}

/* conclusão */
:is(.cs-nwp,.cs-gam) .nwp-blue{background:var(--blue);border-radius:20px;padding:24px 40px}
:is(.cs-nwp,.cs-gam) .nwp-blue p{font-size:16px;line-height:normal;margin:0;color:#fff}
:is(.cs-nwp,.cs-gam) .nwp-prose{display:flex;flex-direction:column;gap:16px}
:is(.cs-nwp,.cs-gam) .nwp-prose p{font-size:16px;line-height:normal;margin:0;color:var(--ink)}

/* cards de imagem do case (solução / edge cases): raio 30 do Figma */
:is(.cs-nwp,.cs-gam) .cs-cards{gap:20px}
/* mesmo zoom dos cards de projeto: a moldura recorta e a imagem cresce 4% */
:is(.cs-nwp,.cs-gam) .cs-card .nwp-thumb{display:block;border-radius:30px;overflow:clip}
:is(.cs-nwp,.cs-gam) .cs-card .nwp-thumb img{
  border-radius:0;transition:transform .6s cubic-bezier(.19,1,.22,1);
}
@media (hover:hover) and (pointer:fine){
  :is(.cs-nwp,.cs-gam) .cs-card:hover .nwp-thumb img{transform:scale(1.04)}
}
@media (prefers-reduced-motion:reduce){
  :is(.cs-nwp,.cs-gam) .cs-card .nwp-thumb img{transition:none}
  :is(.cs-nwp,.cs-gam) .cs-card:hover .nwp-thumb img{transform:none}
}
:is(.cs-nwp,.cs-gam) .cs-card h3{font-size:30px}
:is(.cs-nwp,.cs-gam) .cs-card p{font-size:16px}

/* protótipo navegável do Figma (embed) no lugar do frame estático */
:is(.cs-nwp,.cs-gam) .nwp-proto{
  position:relative;width:100%;aspect-ratio:16/9;
  background:#000;border:1px solid var(--line);border-radius:30px;overflow:hidden;
}
:is(.cs-nwp,.cs-gam) .nwp-proto iframe{display:block;width:100%;height:100%;border:0}

/* ---- border glow: as superfícies de card desta página participam do efeito
   (mesmo porte do BorderGlow usado no Dashboard/Citric) ---- */
:is(.cs-nwp,.cs-gam) .nwp-icard,
:is(.cs-nwp,.cs-gam) .nwp-c,
:is(.cs-nwp,.cs-gam) .nwp-persona,
:is(.cs-nwp,.cs-gam) .nwp-acard,
:is(.cs-nwp,.cs-gam) .nwp-tcard,
:is(.cs-nwp,.cs-gam) .nwp-hcard,
:is(.cs-nwp,.cs-gam) .nwp-guard{position:relative}
/* cor do glow por card: a fileira "The problem" e o painel de guardrails são
   vermelhos — o outline acende na cor predominante de cada um, em vez do azul */
:is(.cs-nwp,.cs-gam) .nwp-icards.bad .nwp-icard,
:is(.cs-nwp,.cs-gam) .nwp-guard{--glow:#ec472e;--glow-soft:rgb(236 71 46 / .55)}
/* o anel do glow acompanha a espessura da borda do card */
:is(.cs-nwp,.cs-gam) .nwp-acard{--gring:2px}

/* ---- tablet ---- */
@media (max-width:1240px){
  :is(.cs-nwp,.cs-gam) .nwp-h{font-size:clamp(28px,3.6vw,42px)}
  :is(.cs-nwp,.cs-gam) .nwp-h2{font-size:clamp(32px,4.4vw,52px)}
  :is(.cs-nwp,.cs-gam) .nwp-grid3,
  :is(.cs-nwp,.cs-gam) .nwp-grid4,
  :is(.cs-nwp,.cs-gam) .nwp-personas{grid-template-columns:repeat(2,minmax(0,1fr))}
  :is(.cs-nwp,.cs-gam) .nwp-icards,
  :is(.cs-nwp,.cs-gam) .nwp-trade{grid-template-columns:1fr}
  :is(.cs-nwp,.cs-gam) .nwp-persona .pb{padding:28px 22px;gap:18px}
  :is(.cs-nwp,.cs-gam) .nwp-persona .nm{font-size:24px}
  :is(.cs-nwp,.cs-gam) .nwp-icard,
  :is(.cs-nwp,.cs-gam) .nwp-acard,
  :is(.cs-nwp,.cs-gam) .nwp-tcard .th,
  :is(.cs-nwp,.cs-gam) .nwp-tcard .tf,
  :is(.cs-nwp,.cs-gam) .nwp-guard{padding:28px}
  :is(.cs-nwp,.cs-gam) .nwp-tcard .tb{padding:24px 28px}
  :is(.cs-nwp,.cs-gam) .nwp-c{padding:28px 24px}
  :is(.cs-nwp,.cs-gam) .nwp-hero{flex-direction:column;align-items:stretch;justify-content:flex-start;gap:0;padding:0}
  /* em coluna o flex-basis vira ALTURA — precisa voltar a auto, senão sobra
     um vazio preto de 421px entre o texto e a imagem */
  :is(.cs-nwp,.cs-gam) .nwp-hero-tx{flex:0 0 auto;max-width:none;padding:32px;gap:12px}
  :is(.cs-nwp,.cs-gam) .nwp-hero-tx .q{font-size:clamp(22px,3vw,32px)}
  :is(.cs-nwp,.cs-gam) .nwp-hero img{width:100%;aspect-ratio:16/9}
}
/* ---- mobile ---- */
@media (max-width:720px){
  :is(.cs-nwp,.cs-gam) .nwp-grid3,
  :is(.cs-nwp,.cs-gam) .nwp-grid4,
  :is(.cs-nwp,.cs-gam) .nwp-personas,
  :is(.cs-nwp,.cs-gam) .nwp-arch,
  :is(.cs-nwp,.cs-gam) .nwp-hyp{grid-template-columns:1fr}
  :is(.cs-nwp,.cs-gam) .nwp-c.nwp-stat{flex-wrap:wrap}
  :is(.cs-nwp,.cs-gam) .nwp-c.nwp-stat .vr{display:none}
  :is(.cs-nwp,.cs-gam) .nwp-icard,
  :is(.cs-nwp,.cs-gam) .nwp-acard,
  :is(.cs-nwp,.cs-gam) .nwp-tcard .th,
  :is(.cs-nwp,.cs-gam) .nwp-tcard .tf,
  :is(.cs-nwp,.cs-gam) .nwp-guard,
  :is(.cs-nwp,.cs-gam) .nwp-blue,
  :is(.cs-nwp,.cs-gam) .nwp-decision{padding:22px}
  :is(.cs-nwp,.cs-gam) .nwp-tcard .tb{padding:22px}
  :is(.cs-nwp,.cs-gam) .nwp-persona > img{aspect-ratio:4/3}
  /* o protótipo é uma tela de celular: 16:9 ficaria alto demais para caber */
  :is(.cs-nwp,.cs-gam) .nwp-proto{aspect-ratio:3/4;border-radius:20px}
  :is(.cs-nwp,.cs-gam) .nwp-icard b{font-size:20px}
  :is(.cs-nwp,.cs-gam) .nwp-c .num{font-size:40px}
  :is(.cs-nwp,.cs-gam) .cs-card h3{font-size:30px}
  :is(.cs-nwp,.cs-gam) .nwp-tcard .th{min-height:0}
}

/* ===== Banners dos cases em HTML com parallax (antes: um <img> chapado).
   Cada banner é um empilhado de camadas absolutas; [data-d] é a profundidade
   em px@1440 que o app.js converte em translateY conforme o scroll. Tudo em
   cqw (1cqw = largura/100) para escalar como imagem. ===== */
.nb{
  position:relative;aspect-ratio:1440/820;overflow:hidden;
  container-type:inline-size;background:#000;
}
.nb .lyr{position:absolute;inset:0;will-change:transform}
.nb .lyr>img,.nb .ly{position:absolute;display:block}
/* as camadas sangram além do banner de propósito — nada de clamp global */
.nb img{max-width:none}

/* ---- Alloyal (Hero banners): a ilustração inteira (círculos + ícones, sem o
   celular) se move como uma camada; o celular fica FIXO por cima, recortado
   pela própria silhueta (raio nos cantos superiores) ---- */
.nb-al{background:#7a3acc}
.nb-al .bgm{width:100cqw;left:0;top:0;height:auto}
.nb-al .fone{left:19.12cqw;top:11.24cqw;width:61.77cqw;height:auto;
  border-radius:9.6cqw 9.6cqw 0 0}

/* ---- Persono: colagem de stickers, cada um em sua profundidade ---- */
.nb-pe{background:linear-gradient(150deg,#aac3d6 0%,#809ebc 100%)}
.nb-pe .bgm{width:100cqw;left:0;top:0;height:auto}
.nb-pe .t1{left:5.94cqw;top:33.16cqw;width:25.14cqw}
.nb-pe .t2{left:1.12cqw;top:-3.62cqw;width:26.11cqw}
.nb-pe .t3{left:51.30cqw;top:20.95cqw;width:21.88cqw}
.nb-pe .t4{left:84.83cqw;top:0.27cqw;width:20.97cqw}
.nb-pe .t5{left:27.58cqw;top:37.09cqw;width:25.62cqw}
.nb-pe .t6{left:69.36cqw;top:1.26cqw;width:23.47cqw}
.nb-pe .t7{left:84.93cqw;top:36.18cqw;width:17.43cqw}
.nb-pe .t8{left:-3.19cqw;top:14.78cqw;width:12.43cqw}
.nb-pe .t9{left:10.60cqw;top:10.19cqw;width:31.60cqw}
.nb-pe .t10{left:47.01cqw;top:0.72cqw;width:21.74cqw}
.nb-pe .t11{left:69.66cqw;top:26.34cqw;width:30.62cqw}
.nb-pe .t12{left:-4.30cqw;top:41.37cqw;width:30.97cqw}
.nb-pe .t13{left:21.78cqw;top:-0.15cqw;width:27.92cqw}
.nb-pe .t14{left:31.54cqw;top:17.53cqw;width:25.49cqw}
.nb-pe .t15{left:48.65cqw;top:34.35cqw;width:19.24cqw}
.nb-pe .t16{left:62.78cqw;top:41.88cqw;width:25.69cqw}
/* flutuação contínua, como os emojis do banner da Netflix */
@keyframes nbSway{
  from{transform:translateY(-.4cqw) rotate(-.7deg)}
  to{transform:translateY(.4cqw) rotate(.7deg)}
}
.nb-pe .stk{animation:nbSway var(--fd,3.6s) ease-in-out var(--ph,0s) infinite alternate}
@media (prefers-reduced-motion:reduce){.nb-pe .stk{animation:none}}

/* ---- Citric: base fiel (o painel de vidro precisa do fundo real atrás),
   avatares flutuando por cima como os emojis da Netflix ---- */
.nb-ci{background:#f6f7fb}
.nb-ci .bgm{left:0;top:0;width:100cqw;height:auto}
.nb-ci .av{animation:nbSway var(--fd,3.6s) ease-in-out var(--ph,0s) infinite alternate}
.nb-ci .av1{left:51.9cqw;top:24.4cqw;width:6.18cqw}
.nb-ci .av2{left:59.57cqw;top:21.31cqw;width:6.18cqw}
.nb-ci .av3{left:58.08cqw;top:29.79cqw;width:8.61cqw}
.nb-ci .av4{left:68.55cqw;top:34.06cqw;width:5.69cqw}
.nb-ci .av5{left:54.54cqw;top:17.54cqw;width:4.65cqw}
/* os demais elementos sobem e descem no lugar (só eixo Y) */
@keyframes nbBob{from{transform:translateY(-.35cqw)}to{transform:translateY(.35cqw)}}
.nb-ci .el{animation:nbBob var(--fd,3.6s) ease-in-out var(--ph,0s) infinite alternate}
.nb-ci .date{left:77.86cqw;top:0.67cqw;width:26.67cqw}
.nb-ci .card{left:73.72cqw;top:27.75cqw;width:33.19cqw}
.nb-ci .cibtn{left:62.2cqw;top:42.1cqw;width:12.71cqw}
.nb-ci .swr{left:60.74cqw;top:47.82cqw;width:42.92cqw}
@media (prefers-reduced-motion:reduce){.nb-ci :is(.av,.el){animation:none}}

/* ---- Dashboard: gradiente + três telas flutuando ---- */
.nb-da{background:linear-gradient(180deg,#7a3acc 0%,#3b2853 100%)}
.nb-da .d1{left:3.83cqw;top:13.81cqw;width:42.27cqw;border-radius:.71cqw}
.nb-da .d3{left:53.91cqw;top:13.81cqw;width:42.27cqw;border-radius:.71cqw}
.nb-da .d2{left:28.87cqw;top:8.61cqw;width:42.27cqw;border-radius:.71cqw;
  border:.49cqw solid #3b2853;box-sizing:border-box;background:#3b2853}

/* ---- StackSpot: hexágonos ao fundo + janela do app ---- */
.nb-ss .bgm{width:115.45cqw;left:-7.72cqw;top:-4.5cqw;height:auto}
.nb-ss .tint{position:absolute;inset:0;
  background:linear-gradient(148.17deg,rgba(255,102,51,.2) .96%,rgba(0,0,0,.2) 53.59%)}
.nb-ss .app{left:0;top:15.21cqw;width:69.51cqw;
  border-radius:0 1.14cqw 0 0;
  box-shadow:4.3cqw 2.2cqw 7.1cqw .14cqw rgba(0,0,0,.7)}

/* ---- Netflix Watch Party: cena animada ---- */
.nb-nwp .bgm{width:110cqw;left:-5cqw;top:-2.8cqw;height:auto}
/* anel + estrelas */
.nb-nwp .ring{left:31.94cqw;top:46.58cqw;width:36.11cqw;height:18.06cqw;position:absolute}
.nb-nwp .ring img{position:absolute;inset:-5.2% -2.6% 0;width:105.2%;height:105.2%}
.nb-nwp .st-a{left:34.24cqw;top:39.53cqw;width:31.6cqw}
.nb-nwp .st-d{left:27.42cqw;top:43.98cqw;width:45.08cqw}
.nb-nwp .st-b1{left:76.6cqw;top:52.04cqw;width:8.17cqw;rotate:45deg}
.nb-nwp .st-b2{left:89.47cqw;top:36.58cqw;width:8.17cqw;rotate:45deg}
.nb-nwp .st-c1{left:22.49cqw;top:51.76cqw;width:8.72cqw;rotate:-45deg;scale:-1 1}
.nb-nwp .st-c2{left:19.99cqw;top:33.7cqw;width:8.72cqw;rotate:-45deg;scale:-1 1}
/* logo + chip CONCEPT: um único SVG reimportado do Figma (Group 391 +
   Frame 52). O tile tem stroke gradiente POR FORA do frame nominal de
   164px — os bounds reais são 171x183 com origem ~3.5px acima/à esquerda,
   daí o offset de .243cqw sobre a posição nominal (637,596 do canvas 1440). */
.nb-nwp .logo{position:absolute;left:44.017cqw;top:41.147cqw;width:11.875cqw;height:12.708cqw}
.nb-nwp .logo img{display:block;width:100%;height:100%}
/* chips de status */
.nb-nwp .nchip{position:absolute;left:50cqw;transform:translateX(-50%);
  display:flex;align-items:center;gap:.93cqw;padding:.74cqw .93cqw;
  background:#1a1a1a;border-radius:.76cqw;white-space:nowrap;
  color:#fff;font-weight:300;font-size:1.12cqw;letter-spacing:-.02cqw}
.nb-nwp .nchip img{display:block;width:1.48cqw;height:1.48cqw;border-radius:.17cqw}
.nb-nwp .nchip-join{top:23.89cqw}
@property --nbga{syntax:'<angle>';initial-value:0deg;inherits:false}
.nb-nwp .nchip-party{top:36.39cqw;border:.14cqw solid transparent;
  background:linear-gradient(#1a1a1a,#1a1a1a) padding-box,
    conic-gradient(from var(--nbga),#2df370,#00b7ff,#f600ff,#e50914,#ffb800,#2df370) border-box;
  animation:nbSpin 3.2s linear infinite}
@keyframes nbSpin{to{--nbga:360deg}}
/* balões de chat */
.nb-nwp .bub{position:absolute;display:flex;flex-direction:column;gap:.74cqw;
  color:#fff;font-weight:300}
.nb-nwp .bub .meta{display:flex;align-items:center;gap:.74cqw;
  color:#ccc;font-size:1.2cqw;line-height:1.6}
.nb-nwp .bub .meta img{display:block;width:1.48cqw;height:1.48cqw;border-radius:.17cqw}
.nb-nwp .bub .bx{padding:1.11cqw;border-radius:.69cqw;
  border:.09cqw solid rgba(255,255,255,.2);font-size:1.3cqw;line-height:1.4}
.nb-nwp .bub-k{left:24.35cqw;top:10.84cqw;width:29.26cqw}
.nb-nwp .bub-k .bx{background:rgba(0,183,255,.4);height:8.89cqw;
  display:flex;align-items:center}
.nb-nwp .bub-you{align-items:flex-end}
.nb-nwp .bub-you .meta{justify-content:flex-end;width:100%}
.nb-nwp .bub-you .bx{background:rgba(246,0,255,.4);white-space:nowrap}
.nb-nwp .bub-hello{left:50.56cqw;top:27.59cqw}
.nb-nwp .bub-yes{left:59.81cqw;top:5.37cqw}
/* emojis */
.nb-nwp .face{position:absolute}
.nb-nwp .face img{display:block;width:100%;height:auto;transform:rotate(var(--rot,0deg))}
.nb-nwp .f1{left:6.42cqw;top:39.91cqw;width:11.23cqw;--rot:-15deg;--by:20cqw;--fd:3.1s}
.nb-nwp .f2{left:88.05cqw;top:50.89cqw;width:8.07cqw;--rot:14.1deg;--by:10.1cqw;--fd:3.6s}
.nb-nwp .f3{left:59.4cqw;top:51.3cqw;width:8.14cqw;--rot:15deg;--by:9.7cqw;--fd:2.9s}
.nb-nwp .f4{left:3.98cqw;top:51.06cqw;width:6.73cqw;--rot:-15deg;--by:9.9cqw;--fd:3.4s}
.nb-nwp .f5{left:33.4cqw;top:50.28cqw;width:7.36cqw;--rot:-17.83deg;--by:10.7cqw;--fd:3.2s}
.nb-nwp .f6{left:72.03cqw;top:36.39cqw;width:11.06cqw;--rot:21.78deg;--by:23.6cqw;--fd:3.8s}
.nb-nwp .f7{left:26.2cqw;top:32.41cqw;width:5.99cqw;--rot:-15deg;--by:27.5cqw;--fd:3s}

/* --- sequência: o JS arma (.nb-armed) e dispara (.nb-play) --- */
.nb-nwp.nb-armed :is(.logo,.concept,.nchip,.bub){opacity:0}
.nb-nwp.nb-armed :is(.logo,.concept){transform:scale(.6)}
.nb-nwp.nb-armed .concept{transform:translateX(-50%) scale(.6)}
.nb-nwp.nb-armed .nchip{transform:translateX(-50%) translateY(1.4cqw) scale(.85)}
.nb-nwp.nb-armed .bub{transform:translateY(1.7cqw) scale(.94)}
.nb-nwp.nb-armed :is(.face,.ring,.st){opacity:0}
.nb-nwp.nb-play :is(.logo,.concept,.nchip,.bub){
  opacity:1;transform:none;
  transition:opacity .5s ease var(--d,0s),transform .55s cubic-bezier(.34,1.56,.64,1) var(--d,0s)}
.nb-nwp.nb-play .concept{transform:translateX(-50%)}
.nb-nwp.nb-play .nchip{transform:translateX(-50%)}
.nb-nwp.nb-play .logo{--d:.15s}
.nb-nwp.nb-play .concept{--d:.3s}
.nb-nwp.nb-play .nchip-party{--d:.95s}
.nb-nwp.nb-play .bub-hello{--d:1.7s}
.nb-nwp.nb-play .nchip-join{--d:2.45s}
.nb-nwp.nb-play .bub-k{--d:3.2s}
.nb-nwp.nb-play .bub-yes{--d:3.95s}
/* explosão: emojis saem de perto do logo, estouram e ficam flutuando */
.nb-nwp.nb-play .face{
  animation:nbBurst .75s cubic-bezier(.34,1.56,.64,1) var(--bd,4.7s) both,
            nbFloat var(--fd,3.2s) ease-in-out calc(var(--bd,4.7s) + .75s) infinite alternate}
.nb-nwp.nb-play .f1{--bd:4.7s}.nb-nwp.nb-play .f5{--bd:4.76s}
.nb-nwp.nb-play .f3{--bd:4.82s}.nb-nwp.nb-play .f7{--bd:4.88s}
.nb-nwp.nb-play .f6{--bd:4.94s}.nb-nwp.nb-play .f2{--bd:5s}
.nb-nwp.nb-play .f4{--bd:5.06s}
@keyframes nbBurst{
  0%{opacity:0;transform:translateY(var(--by)) scale(.35)}
  62%{opacity:1;transform:translateY(-.7cqw) scale(1.1)}
  100%{opacity:1;transform:translateY(0) scale(1)}
}
@keyframes nbFloat{
  from{transform:translateY(-.45cqw) rotate(-1.6deg)}
  to{transform:translateY(.45cqw) rotate(1.6deg)}
}
/* estrelas, anel e luzes entram junto da explosão */
.nb-nwp.nb-play .ring{opacity:1;transition:opacity .8s ease 4.85s}
.nb-nwp.nb-play .st{
  animation:nbBurst .7s cubic-bezier(.34,1.56,.64,1) var(--sd,4.9s) both}
.nb-nwp .st-a{--by:21cqw}.nb-nwp .st-d{--by:16.5cqw}
.nb-nwp .st-b1{--by:8.4cqw}.nb-nwp .st-b2{--by:23.9cqw}
.nb-nwp .st-c1{--by:8.7cqw}.nb-nwp .st-c2{--by:26.8cqw}
.nb-nwp.nb-play .st-a{--sd:4.85s}.nb-nwp.nb-play .st-d{--sd:4.95s}
.nb-nwp.nb-play .st-b1{--sd:5.05s}.nb-nwp.nb-play .st-c1{--sd:5.1s}
.nb-nwp.nb-play .st-b2{--sd:5.15s}.nb-nwp.nb-play .st-c2{--sd:5.2s}

@media (prefers-reduced-motion:reduce){
  .nb .lyr{transform:none !important}
  .nb-nwp :is(.logo,.concept,.nchip,.bub,.face,.g,.ring,.st){opacity:1 !important;animation:none;transition:none;--by:0cqw}
  .nb-nwp .nchip-party{animation:none}
}

/* ===== Gamification Module (escopo .cs-gam) — componentes próprios; o
   restante reaproveita o sistema de cards do case Netflix ===== */
/* passos numerados (How the work was structured) */
.cs-gam .gm-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.cs-gam .gm-step{
  background:#fff;border:1px solid var(--line);border-radius:20px;padding:30px;
  display:flex;flex-direction:column;gap:16px;position:relative;
}
.cs-gam .gm-step .hd{display:flex;align-items:center;gap:16px}
.cs-gam .gm-step .n{
  display:flex;align-items:center;justify-content:center;flex:none;
  width:36px;height:36px;border-radius:8px;background:#dae6fc;
  font-weight:700;font-size:16px;color:var(--blue);
}
.cs-gam .gm-step b{font-weight:700;font-size:16px;color:var(--blue)}
.cs-gam .gm-step p{font-size:16px;line-height:normal;margin:0;color:var(--ink)}
/* tabela do benchmark */
.cs-gam .gm-tablewrap{
  background:#fff;border:1px solid var(--line);border-radius:24px;
  padding:10px 40px 18px;overflow-x:auto;position:relative;
}
.cs-gam .gm-table{width:100%;border-collapse:collapse;min-width:640px}
.cs-gam .gm-table th,.cs-gam .gm-table td{padding:20px 10px;text-align:center}
.cs-gam .gm-table thead th{
  font-weight:700;font-size:12px;letter-spacing:.09em;text-transform:uppercase;
  color:#8e98a8;padding-top:26px;padding-bottom:14px;
}
.cs-gam .gm-table tbody th{text-align:left;font-weight:800;font-size:16px;color:var(--ink)}
.cs-gam .gm-table .prog{display:flex;align-items:center;gap:16px;white-space:nowrap}
.cs-gam .gm-table .prog img{width:38px;height:38px;flex:none;border-radius:50%;
  box-shadow:0 1px 3px rgba(3,11,23,.08)}
.cs-gam .gm-table tbody tr{border-top:1px solid var(--line);transition:background .25s ease}
.cs-gam .gm-table tbody tr:hover{background:#f6f7fb}
.cs-gam .gm-table tbody tr:first-child{border-top:0}
/* fichas suaves na paleta do site (verde/vermelho dos retros) */
.cs-gam .gm-table .tok{
  display:inline-flex;align-items:center;justify-content:center;
  width:32px;height:32px;border-radius:11px;
}
.cs-gam .gm-table .tok svg{width:13px;height:13px}
.cs-gam .gm-table .tok.ok{background:#e1f0ea}
.cs-gam .gm-table .tok.ok path{stroke:#009e63}
.cs-gam .gm-table .tok.no{background:#ffe3dd}
.cs-gam .gm-table .tok.no path{stroke:#ec472e}
/* fluxos: respiros e sub-rótulos App/Admin */
.cs-gam .gm-p{font-size:16px;line-height:normal;margin:0;color:var(--ink)}
.cs-gam .gm-sub{font-weight:900;font-size:28px;line-height:normal;margin:0;color:var(--ink)}
.cs-gam .cs-sec .cs-art{border-radius:20px}
/* card meia-largura (Expiration) */
.cs-gam .cs-cards.half .cs-card{flex:0 1 calc(50% - 10px)}
/* banner */
.nb-gm{background:#3178f2}
.nb-gm .bgm{left:-.3cqw;top:-.3cqw;width:100.6cqw;height:auto}
.nb-gm .gchip{left:66.53cqw;top:5.08cqw;width:27.08cqw}
.nb-gm .gcard{left:80.28cqw;top:16.32cqw;width:24.86cqw}
.nb-gm .gchip,.nb-gm .gcard{
  animation:nbBob var(--fd,3.6s) ease-in-out var(--ph,0s) infinite alternate}
@media (prefers-reduced-motion:reduce){.nb-gm :is(.gchip,.gcard){animation:none}}
@media (max-width:1240px){
  .cs-gam .gm-steps{grid-template-columns:repeat(2,minmax(0,1fr))}
  .cs-gam .gm-tablewrap{padding:8px 20px}
}
@media (max-width:720px){
  .cs-gam .gm-steps{grid-template-columns:1fr}
  .cs-gam .gm-step{padding:22px}
  .cs-gam .gm-sub{font-size:22px}
  .cs-gam .cs-cards.half .cs-card{flex:1 1 auto}
}

.cs-gam :is(.cs-card,.gm-step,.gm-tablewrap,.nwp-c,.nwp-acard){position:relative}

/* ============================================================
   Rodapé: botão de voltar ao topo, no fim da foot-bar — mesmo
   padrão dos círculos sociais do hero (creme, borda ink 2px,
   hover invertido). O scroll suave fica no app.js e respeita
   prefers-reduced-motion.
   ============================================================ */
.foot-bar .to-top{
  width:44px;height:44px;flex-shrink:0;appearance:none;
  background:var(--cream);border:2px solid var(--ink);border-radius:80px;
  display:flex;align-items:center;justify-content:center;
  color:var(--ink);cursor:pointer;padding:0;
  transition:background .2s ease,color .2s ease,transform .25s ease;
}
.foot-bar .to-top:hover{background:var(--ink);color:var(--cream);transform:translateY(-3px)}
@media (prefers-reduced-motion:reduce){
  .foot-bar .to-top{transition:none}
  .foot-bar .to-top:hover{transform:none}
}
