/* 2026-09-30: endereco novo para o navegador de quem pegou o CSS velho na propagacao do deploy (o ?v= anterior ficou 7 dias em cache no navegador). */
/* CSS do site institucional (www). FONTE UNICA: edite aqui.
   Ate 2026-09-28 era um <style> de 83 KB dentro do index.html, copiado pelos
   geradores para as 6 paginas geradas (TEC O4). Os geradores e o gerador dos
   modais do tema leem este arquivo; o carimba_assets.py poe o ?v= no link. */
  .skip-link{
    position: absolute;
    left: 8px;
    top: -48px;
    background: var(--azul-escuro);
    color: #fff;
    padding: 10px 16px;
    border-radius: 4px;
    font-family: var(--body, sans-serif);
    font-weight: 600;
    font-size: 0.88rem;
    text-decoration: none;
    z-index: 10000;
    transition: top .15s ease;
  }
  .skip-link:focus{
    top: 8px;
  }

  /* ======================================================================
     Sistema de cores — 4MIND Brandbook (2026-09-01), dark mode total.
     Contraste verificado por 08_TESTS/SCRIPTS/check-contrast.py (WCAG AA).
     Alterar qualquer valor aqui exige rodar aquele script de novo.
     ====================================================================== */
  :root{
    /* ---- Paleta da marca (brandbook, pág. 5) ---- */
    --verde-pastel: #E2F4EB;
    --verde-claro:  #A3E0C1;
    --verde:        #48A982;   /* Verde Logo Base (V3) — primária */
    --verde-medio:  #2F7E5E;
    --verde-deep:   #1B4E3A;
    --azul-pastel:  #E3F2FD;
    --azul:         #2B82C9;   /* Azul Logo Base (A3) — primária */
    --azul-escuro:  #1D5288;
    --azul-midnight:#0F2E4A;

    /* ---- Superfícies (dark mode obrigatório, brandbook pág. 9 e 20) ---- */
    --bg:          #0F172A;
    --surface:     #1E293B;
    --borda:       rgba(255,255,255,.10);
    --borda-forte: rgba(255,255,255,.18);
    /* Contorno de campo de formulário. Precisa de 3:1 contra a superfície
       (WCAG 1.4.11, componentes de interface). --linha dá 1.4:1 e --borda-forte
       1.74:1 sobre --bg: o contorno some. A 40% dá 3.81:1. */
    --borda-campo: rgba(255,255,255,.40);

    /* ---- Texto ---- */
    --texto:       #E8EDF4;
    --texto-suave: #A3B2C6;
    --texto-fraco: #8496AD;

    /* Marca clareada para uso COMO TEXTO sobre fundo escuro.
       As cores primárias não têm contraste suficiente nesse papel. */
    --verde-link:  #6FCBA4;
    --azul-link:   #5BB4EE;

    /* Texto sobre superfícies de marca claras (CTA verde, tags pastéis).
       Branco sobre --verde dá apenas 2.89:1 e reprova em AA — inclusive no
       exemplo da pág. 10 do brandbook. Texto escuro preserva a cor exata da
       marca e sobe para 6.18:1. */
    --sobre-marca: #0F172A;

    /* ---- Compatibilidade: nomes antigos mapeados ao novo sistema ----
       Mantidos para não reescrever ~90 usos espalhados pelo CSS. */
    /* --marinho era o azul escuro para TEXTO sobre fundo claro. Sobre --bg
       ele dá apenas 2.22:1 e fica ilegível — 11 dos seus 15 usos são texto,
       e os outros 4 são anéis de foco, que também ganham em clarear.
       Onde ele precisa continuar escuro (fundo de botão), o valor está
       declarado explicitamente no componente. */
    --marinho:     var(--azul-link);
    --pista:       var(--azul);
    --verde-texto: var(--verde-link);
    --pista-texto: var(--azul-link);
    --grafite:     var(--texto);
    --off-white:   var(--bg);
    --cinza:       var(--texto-suave);
    --linha:       var(--borda);

    /* ---- Gradiente bi-cor (brandbook pág. 8) ----
       USO RESTRITO: capas hero, banners institucionais e logo.
       Proibido em fundos de texto extenso. */
    --gradiente: linear-gradient(90deg, var(--verde), var(--azul));
    --grad-verde: linear-gradient(180deg, var(--verde), var(--verde-medio));
    --grad-azul:  linear-gradient(180deg, var(--azul), var(--azul-escuro));

    /* ---- Tipografia (brandbook pág. 10) ----
       Comfortaa Bold em títulos; Exo 2 / Orbitron nos rótulos técnicos em
       caixa alta. O corpo permanece IBM Plex Sans: o brandbook especifica
       Calibri, que é proprietária Microsoft e não tem licença para web. */

    /* Componentes compartilhados — mesmos valores nos tres HTMLs. O header, os controles circulares e as pilulas divergiam entre as paginas (sombra, borda, fundo); estes tokens tornam a padronizacao estrutural. */
    /* ---- Contexto do header: superficie CLARA sobre pagina escura ----
       Decisao do designer, 2026-09-01: o header volta a ser branco em todas as
       paginas, inclusive no dark mode. E o unico bloco claro do site.
       A capsula e OPACA: translucidez sobre fundo escuro puxaria o branco para
       cinza e deixaria de ser branco.
       Contrastes medidos contra #FFFFFF antes de fixar estes valores. */
    --nav-bg:#FFFFFF;
    --nav-bg-scrolled:#FFFFFF;
    --nav-blur:none;
    --nav-blur-scrolled:none;
    --nav-texto:#0F172A;        /* 17.85:1 */
    --nav-texto-suave:#475569;  /*  7.58:1 */
    --nav-verde:#2F7E5E;        /*  4.92:1 — --verde daria 2.89:1 e reprovaria */
    --nav-azul:#1D5288;         /*  8.03:1 — --azul daria 4.09:1 e reprovaria */
    --nav-divisor:rgba(15,23,42,.12);  /* divisor decorativo */
    --nav-borda:rgba(15,23,42,.48);    /* 3.20:1 — contorno de controle, WCAG 1.4.11 */
    --nav-hover:rgba(15,23,42,.06);    /* realce de hover sobre a capsula branca */
    /* Estado rolado. Sobre fundo escuro, sombra preta nao se ve: a elevacao
       vem de um HALO CLARO em volta da capsula branca — o inverso da sombra —
       somado ao encolhimento e a um recuo lateral que estreita o cabecalho.
       O conjunto le como "o menu se afastou da pagina e flutuou". */
    --nav-halo:0 6px 18px rgba(15,23,42,.55), 0 0 0 1px rgba(255,255,255,.10), 0 0 22px 2px rgba(255,255,255,.07);
    --nav-halo-alto:0 10px 30px rgba(15,23,42,.7), 0 0 0 1px rgba(255,255,255,.16), 0 0 34px 4px rgba(255,255,255,.11);
    --nav-recuo:0px;
    --nav-recuo-scrolled:clamp(0px, 3vw, 46px);
    --sombra-flutuante:0 10px 28px rgba(0,0,0,.35);
    --sombra-elevada:0 18px 44px rgba(0,0,0,.5);
    --ctrl:44px;
    --ctrl-bg:var(--surface);
    --ctrl-borda:var(--borda-forte);
    --pilula:999px;
    --raio-card:12px;   /* blocos de conteudo — mesmo raio dos decks */

    --display: 'Comfortaa', 'Space Grotesk', sans-serif;
    --body: 'IBM Plex Sans', sans-serif;
    --tecnica: 'Exo 2', 'IBM Plex Mono', monospace;
    /* --mono foi retirado: o IBM Plex Mono não faz parte do brandbook, cujas
       faces são Comfortaa (títulos), Exo 2 / Orbitron (rótulos técnicos) e a
       de corpo. Os 25 usos que restavam migraram para --tecnica; a frase do
       painel de telemetria foi para --body. Os arquivos do Plex Mono seguem
       em assets/fonts/ porque os dois decks ainda os usam — remover só
       quando eles forem convertidos. */
  }

  /* Faz controles nativos (scrollbar, campos de formulário) acompanharem. */
  :root{ color-scheme: dark; }

  /* ---------- Contexto claro do header ----------
     Em vez de reescrever as ~30 regras de cor do cabecalho, os tokens
     semanticos sao REDEFINIDOS dentro do escopo do <header>. Como custom
     properties cascateiam, toda regra interna passa a ler o valor claro
     sozinha — inclusive o painel mobile e o submenu Explorar, que sao filhos.

     Isto vale para o header e so para ele: o resto da pagina segue escuro.
     Ao criar uma pagina nova, copiar este bloco junto com o :root. */
  header{
    --surface: #FFFFFF;
    --texto: var(--nav-texto);
    --grafite: var(--nav-texto);
    --texto-suave: var(--nav-texto-suave);
    --texto-fraco: var(--nav-texto-suave);
    --cinza: var(--nav-texto-suave);
    --borda: var(--nav-divisor);
    --linha: var(--nav-divisor);
    --borda-forte: var(--nav-borda);
    --ctrl-borda: var(--nav-borda);
    --ctrl-bg: #FFFFFF;
    --marinho: var(--nav-azul);
    --azul-link: var(--nav-azul);
    --verde-link: var(--nav-verde);
    --verde-texto: var(--nav-verde);
  }

  *{ margin:0; padding:0; box-sizing:border-box; }

  html{ scroll-behavior:smooth; }

  body{
    font-family: var(--body);
    color: var(--grafite);
    background: var(--off-white);
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
  }

  body::before{
    content:"";
    position:fixed;
    top:0;
    left:0;
    right:0;
    height:4px;
    background:var(--gradiente);
    pointer-events:none;
    z-index:10000;
  }

  img{ max-width:100%; display:block; }

  a{ color:inherit; }

  h1,h2,h3{
    /* Sem palavra sozinha na ultima linha do titulo (2026-09-28). */
    text-wrap: balance;
    overflow-wrap: break-word;
    font-family: var(--display);
    font-weight: 600;
    letter-spacing: -0.01em;
    line-height: 1.12;
  }
  /* Espacamento negativo so a partir de 1.5rem (TIP O7): todo h3 do site e menor. */
  h3{ letter-spacing: 0; }

  .eyebrow{
    /* Rótulo técnico em caixa alta — Exo 2, conforme brandbook pág. 10. */
    font-family: var(--tecnica);
    font-weight: 600;
    font-size: 0.78rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--azul-link);
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 18px;
  }
  .vh{
    position: absolute;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    white-space: nowrap;
    border: 0;
  }
  .eyebrow::before{
    content:"";
    width: 22px;
    height: 2px;
    background: var(--gradiente);
    display:inline-block;
  }

  .wrap{
    max-width: 1140px;
    margin: 0 auto;
    padding: 0 32px;
  }

  section{ position:relative; }

  :focus-visible{
    outline: 3px solid var(--marinho);
    outline-offset: 3px;
  }
  .hero :focus-visible,
  .diferenciais :focus-visible,
  footer :focus-visible,
  .cookie-banner :focus-visible{
    outline-color: #fff;
  }
  @media (forced-colors: active){
    :focus-visible{ outline-color: Highlight; }
  }


  /* ---------- nav ---------- */
  header{
    position: fixed;
    top: 0;
    left:0;
    width:100%;
    z-index: 50;
    padding: 14px 16px 0;
    background: transparent;
    pointer-events: none;
  }
  /* Menu aberto (painel ou Explorar): o header sobe acima do aviso de cookies (999) e fica
     abaixo dos modais (1200). Classe posta pelo site.js (WCAG 2.4.11, 2026-10-22). */
  header.menu-aberto{ z-index: 1000; }
  section[id], .service-card[id]{
    scroll-margin-top: 92px;
  }
  .primary-nav{
    position: relative;
    max-width: calc(1140px - var(--nav-recuo) * 2);
    width: 100%;
    margin: 0 auto;
    padding: 10px 10px;
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
    column-gap: clamp(14px, 2vw, 24px);
    /* Cápsula BRANCA e opaca sobre página escura (decisão do designer,
       2026-09-01). A elevação não pode vir de sombra preta — sobre #0F172A
       ela não aparece — então vem de um halo claro em volta da cápsula. */
    background: var(--nav-bg);
    border: 1px solid var(--ctrl-borda);
    border-radius: var(--pilula);
    box-shadow: var(--nav-halo);
    pointer-events: auto;
    
    transition: max-width .34s cubic-bezier(.22,.61,.36,1),
                padding .34s cubic-bezier(.22,.61,.36,1),
                box-shadow .34s ease,
                border-radius .34s ease;
  }
  header.is-scrolled .primary-nav{
    --nav-recuo: var(--nav-recuo-scrolled);
    padding-top: 6px;
    padding-bottom: 6px;
    background: var(--nav-bg-scrolled);
    box-shadow: var(--nav-halo-alto);
  }
  .brand{
    display:inline-flex;
    align-items:center;
    justify-self:start;
    min-width:0;
    min-height:44px;
    padding:0 8px;
    border-radius:999px;
    grid-column:1;
    grid-row:1;
  }
  .brand img{
    height:46px;
    width:auto;
    max-width:none;
    flex:0 0 auto;
    object-fit:contain;
    transition:height .28s ease;
  }
  header.is-scrolled .brand img{ height:42px; }

  .nav-brand-group{
    display:flex;
    align-items:center;
    justify-self:start;
    min-width:0;
    grid-column:1;
    grid-row:1;
  }
  .nav-brand-group .brand{ grid-column:auto; grid-row:auto; }
  .ecosystem-shortcuts{
    display:flex;
    align-items:center;
    gap:12px;
    margin-left:6px;
    padding-left:14px;
    border-left:1px solid var(--linha);
  }
  .ecosystem-shortcut{
    position:relative;
    display:inline-flex;
    align-items:center;
    gap:6px;
    min-height:44px;
    padding:0 2px;
    color:var(--grafite);
    text-decoration:none;
    font-size:0.88rem;
    font-weight:600;
  }
  .ecosystem-shortcut svg{ width:17px; height:17px; flex:0 0 auto; }
  .ecosystem-shortcut::after{
    content:"";
    position:absolute;
    left:0;
    bottom:2px;
    width:0;
    height:2px;
    background:var(--gradiente);
    transition:width .2s ease;
  }
  .ecosystem-shortcut:hover::after,
  .ecosystem-shortcut:focus-visible::after{ width:100%; }
  .nav-link-icon{ width:17px; height:17px; margin-right:7px; flex:0 0 auto; }

  .nav-left{
    display:flex;
    align-items:center;
    justify-self:center;
    gap: clamp(18px, 2.4vw, 32px);
    list-style:none;
    font-size: 0.96rem;
    font-weight: 500;
    grid-column:2;
    grid-row:1;
  }
  .nav-mobile-only{ display:none; }
  .nav-right{
    display:flex;
    align-items:center;
    justify-self:end;
    gap: 20px;
    grid-column:3;
    grid-row:1;
  }
  .nav-left a{
    text-decoration:none;
    color: var(--grafite);
    position:relative;
    min-height:44px;
    padding: 0 2px;
    display:inline-flex;
    align-items:center;
  }
  .nav-left a::after{
    content:"";
    position:absolute;
    left:0; bottom:-2px;
    width:0; height:2px;
    background: var(--gradiente);
    transition: width .25s ease;
  }
  .nav-left a:hover::after{ width:100%; }
  /* Pagina atual (UX D15): o mesmo sublinhado do hover, fixo. */
  .nav-left a[aria-current="page"]::after{ width:100%; }
  .nav-contact{
    text-decoration:none;
    background: var(--verde);
    color: var(--sobre-marca);
    padding: 9px 20px;
    min-height:44px;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    border-radius: 999px;
    font-weight: 600;
    font-size: 0.96rem;
    transition: transform .15s ease, box-shadow .15s ease, background .15s ease;
  }
  .nav-contact:hover{
    background: var(--verde-claro);
    transform: translateY(-1px);
    box-shadow: 0 8px 20px rgba(0,0,0,0.45);
  }
  .nav-extras-wrap{ position:relative; }
  .nav-extras{
    font-family:var(--body);
    cursor:pointer;
    background: transparent;
    color: var(--grafite);
    border: 0;
    padding: 0 2px;
    min-height:44px;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    position:relative;
    border-radius: 0;
    font-weight: 500;
    font-size: 0.96rem;
    line-height:1.55;
    transition: color .15s ease;
  }
  .nav-extras::after{
    content:"";
    position:absolute;
    left:0;
    bottom:-2px;
    width:0;
    height:2px;
    background:var(--gradiente);
    transition:width .25s ease;
  }
  .nav-extras:hover,
  .nav-extras[aria-expanded="true"]{
    background:transparent;
    color:var(--grafite);
    transform:none;
    box-shadow:none;
  }
  .nav-extras:hover::after,
  .nav-extras[aria-expanded="true"]::after,
  /* A pagina atual esta dentro do "Explorar" (revisao do Lote 7). */
  .nav-extras-wrap:has(a[aria-current="page"]) .nav-extras::after{ width:100%; }
  .nav-extras svg{ width:15px; height:15px; margin-left:7px; transition:transform .18s ease; }
  .nav-extras[aria-expanded="true"] svg{ transform:rotate(180deg); }
  /* Menus suspensos (lista do desktop e painel do celular): especificacao unica em
     06_DESIGN_SYSTEM/TOKENS/menus.json (2026-10-22), conferida ao vivo por
     08_TESTS/SCRIPTS/confere-menus-ao-vivo.py. Raio 20 px nos tres sites (decisao do dono). */
  .nav-extras-menu{
    position:absolute;
    top:calc(100% + 8px);
    right:0;
    width:max-content;
    min-width:240px;
    max-width:320px;
    max-height:calc(100dvh - 96px);
    overflow-y:auto;
    overscroll-behavior:contain;
    margin:0;
    padding:8px;
    list-style:none;
    display:flex;
    flex-direction:column;
    gap:2px;
    border:1px solid var(--borda-forte);
    border-radius:20px;
    background:var(--surface);
    -webkit-backdrop-filter:blur(18px);
    backdrop-filter:blur(18px);
    box-shadow:var(--sombra-elevada);
    opacity:0;
    visibility:hidden;
    transform:translateY(-6px);
    transition:opacity .18s ease,transform .18s ease,visibility .18s;
  }
  .nav-extras-menu.open{ opacity:1; visibility:visible; transform:none; }
  .nav-extras-menu a{ position:relative; display:flex; align-items:center; min-height:44px; padding:0 8px; border-radius:0; color:var(--grafite); text-decoration:none; font-size:0.96rem; font-weight:500; line-height:1.25;  justify-content:flex-start;}
  .nav-extras-menu a::after{ content:""; position:absolute; left:8px; bottom:4px; width:0; height:2px; background:var(--gradiente); transition:width .25s ease; }
  .nav-extras-menu a:hover,
  .nav-extras-menu a:focus-visible{ background:transparent; color:var(--grafite); }
  .nav-extras-menu a:hover::after,
  .nav-extras-menu a:focus-visible::after{ width:calc(100% - 16px); }
  /* Pagina atual: o mesmo sublinhado de texto do painel do celular (regra do Lote 7), para os
     dois menus terem um so estado de pagina atual (especificacao dos menus, 2026-10-22). */
  .nav-extras-menu a[aria-current="page"]{ font-weight:600; text-decoration:underline; text-decoration-color:var(--verde);
    text-decoration-thickness:2px; text-underline-offset:5px; }
  .nav-extras-menu a[aria-current="page"]::after{ width:0; }
  .nav-extras-group{
    padding:10px 8px 4px;
    color:var(--marinho);
    font:600 .68rem/1.3 var(--tecnica);
    letter-spacing:0.12em;
    text-transform:uppercase;
  }
  /* O divisor tem de vir ANTES do rotulo, senao ele separa o rotulo do
     grupo que o rotulo nomeia. */
  .nav-extras-group:not(:first-child){ border-top:1px solid var(--linha); margin-top:6px; padding-top:12px; }
  .nav-extras-group + li a{ margin-top:5px; }
  
  /* Rotulo de grupo do painel: nao e clicavel, entao nao precisa do alvo de 44 px.
     Mesma altura (28 px) e mesma divisoria do rotulo do Explorar do desktop. */
  .nav-mobile-label{ display:none; align-items:center; justify-content:center; min-height:28px; padding:10px 8px 4px; text-align:center; color:var(--marinho); font:600 .68rem/1.3 var(--tecnica); letter-spacing:0.12em; text-transform:uppercase; }
  .nav-mobile-label:not(:first-child){ border-top:1px solid var(--linha); margin-top:6px; padding-top:12px; }
  /* "Explorar" recolhido dentro do painel do celular (decisao do dono, 2026-10-22). */
  .nav-mobile-explorar-btn{
    width:100%;
    min-height:44px;
    display:flex;
    align-items:center;
    justify-content:center;
    gap:8px;
    padding:0 8px;
    background:transparent;
    border:0;
    border-radius:0;
    color:var(--grafite);
    font:500 0.96rem/1.55 var(--body);
    cursor:pointer;
  }
  .nav-mobile-explorar-btn svg{ width:15px; height:15px; flex:0 0 auto; transition:transform .18s ease; }
  .nav-mobile-explorar-btn[aria-expanded="true"] svg{ transform:rotate(180deg); }
  .nav-mobile-sub{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:2px; }
  .nav-mobile-sub[hidden]{ display:none; }

  .btn{
    font-family: var(--body);
    font-weight: 600;
    font-size: 0.92rem;
    padding: 11px 24px;
    /* M8 — formato pílula (brandbook pág. 13). Era 3px. */
    border-radius: var(--pilula);
    /* Transparente, e nao `none`: com `none`, o 1px do .btn-ghost soma
       a altura e os dois botoes ficam 2px diferentes lado a lado. */
    border: 1px solid transparent;
    cursor: pointer;
    text-decoration:none;
    display:inline-flex;
    align-items:center;
    min-height:44px;
    box-sizing:border-box;
    gap:8px;
    transition: transform .15s ease, box-shadow .15s ease;
  }
  .btn svg{ flex:0 0 auto; }
  /* CTA primário: verde da marca com texto escuro (6.18:1).
     Branco sobre --verde daria 2.89:1 e reprovaria em WCAG AA. */
  .btn-primary{
    background: var(--verde);
    color: var(--sobre-marca);
  }
  .btn-primary:hover{ transform: translateY(-1px); background: var(--verde-claro); }
  .btn-ghost{
    background: transparent;
    color: var(--texto);
    border: 1px solid var(--ctrl-borda);
  }
  .btn-ghost:hover{ border-color: var(--verde); color: var(--verde-link); }
  /* O display do .btn vencia o atributo hidden: o «Ver a página» do modal de servico aparecia na propria
     pagina do servico, sem destino (2026-10-22). */
  .btn[hidden]{ display: none; }
  .btn-instagram{
    background: linear-gradient(45deg, #8A5600, #A81758 45%, #4A1E9D 90%);
    color: #fff;
  }
  .btn-instagram:hover{ transform: translateY(-1px); box-shadow: 0 8px 20px rgba(238,42,123,0.35); }

  .nav-toggle{
    display:none;
    width:44px;
    height:44px;
    align-items:center;
    justify-content:center;
    flex-direction:column;
    background:none;
    border:none;
    cursor:pointer;
  }
  .nav-toggle span{
    display:block;
    width:24px;
    height:2px;
    background:var(--grafite);
    margin:5px 0;
    transition:transform .2s ease, opacity .2s ease;
  }
  .nav-toggle[aria-expanded="true"] span:nth-child(1){ transform:translateY(12px) rotate(45deg); }
  .nav-toggle[aria-expanded="true"] span:nth-child(2){ opacity:0; }
  .nav-toggle[aria-expanded="true"] span:nth-child(3){ transform:translateY(-12px) rotate(-45deg); }

  /* ---------- hero ---------- */
  .hero{
    padding: 96px 0 64px;
    overflow:hidden;
  }
  .hero-grid{
    display:grid;
    gap: 24px;
    max-width: 760px;
  }
  .hero h1{
    font-size: clamp(2.3rem, 4.4vw, 3.4rem);
    /* 17ch: "Performance / comeca na mente!" em duas linhas, sem "mente!"
       sozinha (medido pela revisao de tipografia, 2026-09-28). */
    max-width: 17ch;
  }
  .hero p.lead{
    font-size: 1.14rem;
    color: var(--cinza);
    max-width: 52ch;
  }
  .hero-ctas{
    display:flex;
    gap:14px;
    margin-top: 6px;
    flex-wrap: wrap;
  }

  /* ---------- telemetry strip ---------- */
  .telemetry{
    margin-top: 56px;
    background: var(--surface);
    border: 1px solid var(--borda);
    border-radius: var(--raio-card);
    padding: 28px 30px 24px;
    position: relative;
    overflow:hidden;
    min-height: 216px;
  }
  .telemetry::before{
    content:"";
    position:absolute;
    top:0; left:0; right:0; height:3px;
    background: var(--gradiente);
  }
  .telemetry-head{
    display:flex;
    justify-content:space-between;
    align-items:baseline;
    margin-bottom: 22px;
    flex-wrap: wrap;
    gap: 8px;
  }
  .telemetry-head span{
    font-family: var(--tecnica);
    font-size: 0.72rem;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--texto-fraco);
  }
  .telemetry-head .live{
    color: var(--verde);
    display:flex;
    align-items:center;
    gap:7px;
  }
  .live-dot{
    width:7px; height:7px; border-radius:50%;
    background: var(--verde);
    box-shadow: 0 0 0 0 rgba(72,169,130,0.6);
    animation: pulse 2s infinite;
  }
  @keyframes pulse{
    0%{ box-shadow: 0 0 0 0 rgba(72,169,130,0.55); }
    70%{ box-shadow: 0 0 0 8px rgba(72,169,130,0); }
    100%{ box-shadow: 0 0 0 0 rgba(72,169,130,0); }
  }

  .telemetry-grid{
    display:grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 26px;
  }
  /* Sem isto os filhos nao encolhem abaixo do proprio conteudo e vazam da
     coluna: em 375px a coluna tem 138,5px e o cartao insistia em 159px. */
  .telemetry-grid > *{
    min-width: 0;
  }
  .telemetry-grid[hidden]{
    display:none;
  }
  .metric-label{
    font-family: var(--tecnica);
    font-size: 0.72rem;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--texto-suave);
    margin-bottom: 10px;
  }
  .metric-value{
    font-family: var(--tecnica);
    color: #fff;
    font-size: 1.5rem;
    line-height: 1.8rem;
    font-weight: 500;
    font-variant-numeric: tabular-nums; /* numeros que mudam nao pulam (TIP O5) */
    margin-bottom: 10px;
  }
  .metric-bar{
    height: 5px;
    background: rgba(255,255,255,0.12);
    border-radius: 999px;
    overflow:hidden;
  }
  .metric-bar > span{
    display:block;
    height:100%;
    width:0%;
    /* M9 — "NUNCA misturar verde e azul no mesmo gráfico" (brandbook pág.
       17). Estas barras usavam o gradiente bi-cor da marca, que além de
       misturar as duas famílias é de uso restrito a capas e banners.
       Família azul: o painel mede foco, decisão e consistência, que no
       brandbook são "foco, estrutura e técnica". */
    background: var(--grad-azul);
    border-radius: 999px;
    transition: width 1.4s cubic-bezier(.2,.7,.3,1);
  }
  .metric-game{
    cursor: pointer;
    padding: 10px;
    /* A margem negativa amplia a area clicavel sem deslocar o layout, mas
       na horizontal ela esticava o cartao 20px alem da coluna da grade e
       vazava 10px em 375px. Na vertical o ganho continua; na horizontal a
       area ja e a coluna inteira. */
    margin: -10px 0;
    border-radius: 8px;
    transition: background .2s ease;
  }
  .metric-game:hover,
  .metric-game:focus-visible{
    background: rgba(255,255,255,0.07);
  }
  .metric-game #reactionBar{
    transition: width .08s linear;
  }
  .metric-game.metric-game--result #reactionValue{
    color: var(--verde);
  }
  .metric-game.metric-game--countdown #reactionValue{
    color: var(--azul-link);
    display: inline-block;
    transform: scale(1.15);
    transform-origin: left center;
  }
  .metric-game.metric-game--go #reactionValue{
    color: var(--verde);
    transform: scale(1.15);
    transform-origin: left center;
    display: inline-block;
    transition: transform .15s ease;
  }
  .metric-game.metric-game--hint-flash{
    background: rgba(72,169,130,0.14);
  }
  .metric-game.metric-holding{
    background: rgba(72,169,130,0.16);
  }
  .metric-game.metric-holding .metric-bar > span{
    transition: width .15s linear;
  }
  .metric-game.metric-complete{
    background: rgba(72,169,130,0.16);
    cursor: default;
  }
  .metric-game.metric-complete .metric-value{
    color: var(--verde);
  }
  .metric-game.metric-complete .metric-bar > span{
    background: var(--verde);
  }
  .telemetry-note{
    margin-top: 20px;
    /* Frase corrida: fonte de corpo, não a técnica. */
    font-family: var(--body);
    font-size: 0.82rem;
    color: var(--texto-suave);
    line-height:1.6;
  }
  .telemetry-celebration{
    display:flex;
    flex-direction:column;
    align-items:center;
    justify-content:center;
    text-align:center;
    padding: 14px 20px;
    gap: 8px;
    min-height: 116px;
  }
  .telemetry-celebration[hidden]{
    display:none;
  }
  .celebration-trophy{
    font-size: 2rem;
    line-height:1;
    animation: celebration-bounce 1.1s ease-in-out infinite;
  }
  .celebration-trophy svg{ display: block; width: 1em; height: 1em; }
  .celebration-title{
    font-family: var(--display);
    font-size: 1.05rem;
    color: #fff;
  }
  .celebration-countdown{
    font-family: var(--tecnica);
    font-size: 0.78rem;
    color: var(--verde);
  }
  @keyframes celebration-bounce{
    0%, 100%{ transform: translateY(0); }
    50%{ transform: translateY(-8px); }
  }

  /* ---------- about ---------- */
  .about{ padding: 88px 0; }
  .about-grid{
    display:grid;
    grid-template-columns: 300px 1fr;
    gap: 56px;
    align-items:start;
  }
  .team-photo-card{
    border: 1px solid var(--linha);
    border-radius: var(--raio-card);
    overflow: hidden;
    position: sticky;
    top: 96px;
    background: var(--off-white);
  }
  .team-photo-card img{
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: top center;
    aspect-ratio: 3 / 4.6;
    transition: transform .4s ease;
  }
  .team-photo-card:hover img{
    transform: scale(1.05);
  }

  .about-text h2{
    font-size: clamp(1.7rem, 2.6vw, 2.2rem);
    margin-bottom: 22px;
  }
  .about-text p{
    color: var(--cinza);
    margin-bottom: 16px;
    max-width: 62ch;
    font-size: 1.02rem;
  }
  .about-text strong{ color: var(--grafite); font-weight:600; }

  .team-eyebrow{ margin-top: 72px; }

  .team-grid{
    display:grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 28px;
  }
  .team-card{
    background:var(--surface);
    border: 1px solid var(--linha);
    border-radius: var(--raio-card);
    overflow: hidden;
    position: relative;
  }
  .founder-badge{
    position:absolute;
    top: 14px; left: 14px;
    z-index: 2;
    background: var(--verde);
    color: var(--sobre-marca);
    font-family: var(--tecnica);
    font-size: 0.68rem;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    padding: 5px 10px;
    border-radius: 3px;
  }
  .team-photo{
    aspect-ratio: 3 / 3.6;
    overflow:hidden;
    background: var(--off-white);
  }
  .team-photo img{
    width:100%;
    height:100%;
    object-fit: cover;
    object-position: top center;
    transition: transform .4s ease;
  }
  .team-card:hover .team-photo img{
    transform: scale(1.05);
  }
  .team-info{ padding: 22px 24px 26px; }
  .team-name-row{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap: 10px;
    margin-bottom: 3px;
  }
  .team-info h3{
    font-size: 1.1rem;
    margin-bottom: 0;
  }
  .team-instagram{
    flex-shrink:0;
    display:flex;
    align-items:center;
    justify-content:center;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    border: 1px solid var(--linha);
    color: var(--cinza);
    transition: transform .15s ease, border-color .15s ease, color .15s ease;
  }
  .team-instagram:hover{
    border-color: var(--marinho);
    color: var(--marinho);
    transform: translateY(-1px);
  }
  .team-instagram svg{ width:15px; height:15px; }
  .team-icons{
    display:flex;
    align-items:center;
    gap: 8px;
    flex-shrink:0;
  }
  .team-bio-btn{
    background:none;
    padding:0;
    font: inherit;
    cursor: pointer;
  }
  .team-role{
    font-size: 0.88rem;
    color: var(--marinho);
    font-weight: 600;
    margin-bottom: 8px;
  }
  .team-cred{
    /* CRP legivel e em fonte de corpo: e o registro profissional que o
       Codigo de Etica pede na divulgacao (2026-09-28). */
    font-family: var(--body);
    font-size: 0.82rem;
    letter-spacing: 0.02em;
    color: var(--cinza);
    margin-bottom: 14px;
    line-height: 1.5;
  }
  .team-bio{
    font-size: 0.88rem;
    color: var(--cinza);
    margin-bottom: 14px;
  }
  .team-quote{
    font-size: 0.88rem;
    font-style: normal; /* sem face italica carregada: era sintetico (TIP D6) */
    color: var(--grafite);
    padding-left: 14px;
    border-left: 2px solid var(--verde);
  }
  /* ---------- services ---------- */
  .services{
    padding: 88px 0;
    background: var(--surface);
    /* Sem borda de seção: no layout claro --linha era um divisor quase
       imperceptível; no dark mode vira uma linha branca a 10% cruzando
       toda a largura — e sobre as ondas de transição fica evidente.
       A separação agora vem da mudança de superfície e das ondas. */
  }
  .services-head{
    max-width: 620px;
    margin-bottom: 48px;
  }
  .services-head h2{
    font-size: clamp(1.7rem, 2.6vw, 2.2rem);
  }
  /* Blocos separados, no padrao dos decks. Antes era uma malha de 1px
     (gap:1px sobre fundo de --linha), que faz o conjunto parecer planilha:
     tudo colado, sem hierarquia entre um card e outro. */
  .services-grid{ display:grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
    .service-card{
    position: relative;
    padding: 26px 22px;
    border: 1px solid var(--borda); /* sem borda colorida no topo (P2-26, dono 2026-09-29) */
    border-radius: var(--raio-card);
    background: var(--surface);
    box-shadow: var(--sombra-flutuante);
    cursor: pointer;
    transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
  }
  /* Uma cor so para o acento dos 8 cards. A alternancia verde/azul nao
     ficava uniforme na grade de 4 colunas: a segunda fileira invertia a
     leitura em relacao a primeira. */
  .service-card--verde{ --acento: var(--verde); }
  .service-card.reveal:focus-within{
    opacity: 1;
    filter: none;
    transform: none;
    transition: none;
  }
    .service-card:hover, .service-card:has(.service-hint:focus-visible){
    transform: translateY(-4px);
    border-color: var(--acento, var(--verde));
    box-shadow: var(--sombra-elevada);
    z-index: 2;
  }
  .service-card:active{ transform: translateY(-1px); }
  /* O "Ver detalhes" e um <button> de verdade (2026-09-28, P2-12): com o
     cartao inteiro em role=button o leitor de tela nao via o titulo h3.
     O clique no cartao inteiro continua (JS); o teclado para no botao. */
  /* Area minima de 24 px (WCAG 2.5.8): com o texto recolhido sobravam 22x16. */
  button.service-hint{ background: none; border: 0; padding: 4px; margin: -4px; font: inherit; cursor: pointer; min-width: 24px; min-height: 24px; }
  .service-hint:focus-visible{ outline: 2px solid var(--azul-link); outline-offset: 4px; border-radius: 4px; }
  .service-card .service-hint{
    position: absolute;
    top: 24px; right: 22px;
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 0.72rem;
    color: var(--marinho);
    font-family: var(--tecnica);
  }
  .service-hint-text{
    opacity: 0;
    max-width: 0;
    overflow: hidden;
    white-space: nowrap;
    transition: opacity .25s ease, max-width .25s ease;
  }
  .service-hint-arrow{
    flex-shrink: 0;
    stroke: var(--pista);
    opacity: 0.55;
    transition: stroke .25s ease, opacity .25s ease, transform .25s ease;
  }
  .service-card:hover .service-hint-text, .service-card:has(.service-hint:focus-visible) .service-hint-text{
    opacity: 1;
    max-width: 110px;
  }
  .service-card:hover .service-hint-arrow, .service-card:has(.service-hint:focus-visible) .service-hint-arrow{
    stroke: url(#hintGradient);
    opacity: 1;
    transform: translateX(3px);
  }
  /* Ícones de serviço — brandbook pág. 19.
     Antes os 8 cards repetiam o mesmo raster (assets/service-icon.webp), um
     mini-logo sobre gradiente, sem relação com o serviço. Desde 2026-09-28 são
     os ícones da APOSTILA 4MIND: silhueta preenchida, solta (sem o disco com
     borda fina, que o sistema da apostila proíbe), cor pelo `currentColor`.
     Os desenhos vivem no sprite (`ic-pessoa` etc.), gerados por
     03_OUTPUTS/2026-09-28_icones-caminho-a/aplica_icones.py. Escolhas e cor
     (todos em verde) foram decisão do dono sobre a prancha. */
  .service-icon{
    width: 36px; height: 36px;
    flex: 0 0 auto;
    margin-bottom: 16px;
    transition: transform .25s ease;
  }
  .service-icon svg{ display: block; width: 100%; height: 100%; }
  .service-icon--verde{ color: var(--verde-link); }
  .service-card:hover .service-icon, .service-card:has(.service-hint:focus-visible) .service-icon{ transform: scale(1.10); }
  /* Ícone de cada pilar, ao lado do nome (2026-09-28). O número e o "+" do
     acordeão continuam: o número diz a sequência, o "+" abre o painel. */
  .nome-node-pilar{ display: block; flex: 0 0 auto; width: 24px; height: 24px; }
  .nome-node-pilar--azul{ color: var(--azul-link); }
  .nome-node-pilar--verde{ color: var(--verde-link); }
  @media (prefers-reduced-motion: reduce){
    .service-icon{ transition: none; }
    .service-card:hover .service-icon, .service-card:has(.service-hint:focus-visible) .service-icon{ transform: none; }
  }
  .service-card h3{
    font-size: 1.05rem;
    line-height: 1.25;
    margin-bottom: 9px;
  }
  .service-card p{
    font-size: 0.88rem;
    color: var(--cinza);
  }
  .service-modal-meta{
    margin-top: 20px;
    padding-top: 18px;
    border-top: 1px solid var(--linha);
    display: grid;
    gap: 10px;
  }
  .service-modal-meta p{ font-size: 0.88rem; }
  .service-modal-meta strong{ color: var(--grafite); }
  .service-modal-acoes{
    margin-top: 24px;
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
  }

  /* ---------- diferenciais ---------- */
  .diferenciais{
    background: var(--surface);
    color: var(--texto);
    padding: 64px 0;
  }
  .diferenciais .eyebrow{ color: var(--verde-link); }
  .diferenciais .process-head{ max-width: 760px; margin-bottom: 48px; }
  .diferenciais .process-head h2{ color:#fff; margin-bottom: 14px; }
  .process-intro{ max-width: 680px; color:var(--texto-suave); font-size:0.96rem; }
  .diferenciais .process-content h3{ color:#fff; }
  .diferenciais .process-content p{ color:var(--texto-suave); }
  .diferenciais .process-step:not(:last-child)::before{
    background-image:
      linear-gradient(90deg, transparent, rgba(72,169,130,.9), transparent),
      linear-gradient(90deg, rgba(255,255,255,.18), rgba(255,255,255,.18));
  }
  .diferenciais .process-step:not(:last-child)::after{
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='10' viewBox='0 0 14 10'%3E%3Cpath d='M2 1L9 5L2 9' fill='none' stroke='%2348A982' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  }
  .diferenciais .process-step:last-child::before{ background:rgba(255,255,255,.18); }

  .dif-more{
    margin-top: 48px;
    padding-top: 32px;
    border-top: 1px solid rgba(255,255,255,0.12);
  }
  .dif-more-teaser{ flex-wrap: wrap; }
  .dif-more-trigger{
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    gap: 6px;
    background: transparent;
    border: 1px solid rgba(72,169,130,0.35);
    border-radius: 3px;
    padding: 10px 12px;
    font-family: var(--tecnica);
    font-size: 0.75rem;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--verde);
    cursor: pointer;
    transition: border-color .2s ease, background .2s ease;
  }
  .dif-more-trigger:hover,
  .dif-more-trigger:focus-visible{
    border-color: var(--verde);
    background: rgba(72,169,130,0.14);
  }
  .dif-more-trigger:focus-visible{
    outline: 2px solid var(--verde);
    outline-offset: 2px;
  }
  .dif-more-icon{
    position: relative;
    width: 10px;
    height: 10px;
    flex-shrink: 0;
    transition: transform .3s ease;
  }
  .dif-more-icon::before,
  .dif-more-icon::after{
    content: "";
    position: absolute;
    background: currentColor;
    border-radius: 1px;
  }
  .dif-more-icon::before{ left: 0; top: 4.2px; width: 10px; height: 1.6px; }
  .dif-more-icon::after{ left: 4.2px; top: 0; width: 1.6px; height: 10px; }
  .dif-more.is-open .dif-more-icon{ transform: rotate(45deg); }
  .dif-more-collapse{
    display: grid;
    grid-template-rows: 0fr;
    visibility: hidden;
    transition: grid-template-rows .5s cubic-bezier(.4,0,.2,1), visibility 0s linear .5s;
  }
  .dif-more.is-open .dif-more-collapse{
    grid-template-rows: 1fr;
    visibility: visible;
    transition: grid-template-rows .5s cubic-bezier(.4,0,.2,1), visibility 0s linear 0s;
  }
  .dif-more-inner{ overflow: hidden; min-height: 0; }
  .dif-more-panel{
    max-width: 720px;
    padding-top: 28px;
    opacity: 0;
    transform: translateY(-6px);
    transition: opacity .35s ease .05s, transform .35s ease .05s;
  }
  .dif-more.is-open .dif-more-panel{ opacity: 1; transform: translateY(0); }
  .dif-more-panel h3{
    font-family: var(--display);
    font-size: 1.05rem;
    color: #fff;
    margin-bottom: 12px;
  }
  .dif-more-panel p{
    font-size: 0.92rem;
    color: var(--texto-suave);
    margin-bottom: 14px;
  }

  /* ---------- nome-panel: conteúdo interno do .dif-more (o porquê do nome) ---------- */
  .nome-panel{ max-width: none; width: 100%; }
  .nome-heading{
    font-family: var(--display);
    font-size: 1.15rem;
    color: #fff;
    margin-bottom: 18px;
  }

  .nome-origin{ max-width: 760px; margin-bottom: 56px; }
  .nome-origin-grid{
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: stretch;
    gap: 20px;
  }
  .nome-origin-card{
    border: 1px solid rgba(255,255,255,0.14);
    border-radius: var(--raio-card);
    padding: 20px 22px;
    background: rgba(255,255,255,0.04);
  }
  .nome-origin-tag{
    display: inline-block;
    font-family: var(--tecnica);
    font-size: 0.72rem;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--verde);
    border: 1px solid rgba(72,169,130,0.4);
    border-radius: 3px;
    padding: 3px 8px;
    margin-bottom: 12px;
  }
  .nome-origin-card p{
    font-size: 0.92rem;
    color: var(--texto-suave);
    margin: 0;
  }
  .nome-origin-divider{
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: var(--tecnica);
    font-size: 1.1rem;
    color: rgba(255,255,255,0.3);
    width: 28px;
  }

  .nome-flow{ max-width: 1040px; margin-bottom: 48px; }
  .nome-flow-track{
    position: relative;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    column-gap: 16px;
    align-items: start;
  }
  .nome-flow-svg{
    position: absolute;
    top: 0; left: 0;
    width: 100%;
    height: 100px;
    pointer-events: none;
    z-index: 0;
  }
  .nome-flow-path{
    transition: stroke-dashoffset 1.1s cubic-bezier(.4,0,.2,1) .15s;
  }
  .dif-more.is-open .nome-flow-path{ stroke-dashoffset: 0; }
  .nome-flow-pulse{ opacity: 0.9; }

  .nome-node{ position: relative; z-index: 1; }
  .nome-node-trigger{
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    width: 100%;
    padding-top: 26px;
    background: transparent;
    border: 0;
    cursor: pointer;
    text-align: center;
  }
  .nome-node-trigger:focus-visible{
    outline: 2px solid var(--verde);
    outline-offset: 4px;
    border-radius: 8px;
  }
  .nome-node-marker{
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: var(--gradiente);
    color: var(--sobre-marca);
    font-family: var(--tecnica);
    font-weight: 600;
    font-size: 1rem;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 3px 10px rgba(29,82,136,0.28);
    transition: transform .25s ease;
  }
  .nome-node-trigger:hover .nome-node-marker,
  .nome-node-trigger:focus-visible .nome-node-marker{ transform: scale(1.07); }
  .nome-node-label{
    font-family: var(--display);
    font-size: 0.96rem;
    color: #fff;
  }
  .nome-node-icon{
    position: relative;
    width: 10px; height: 10px;
    margin-top: 2px;
    color: var(--verde);
    transition: transform .3s ease;
  }
  .nome-node-icon::before,
  .nome-node-icon::after{
    content:"";
    position:absolute;
    background: currentColor;
    border-radius: 1px;
  }
  .nome-node-icon::before{ left:0; top:4.2px; width:10px; height:1.6px; }
  .nome-node-icon::after{ left:4.2px; top:0; width:1.6px; height:10px; }
  .nome-node.is-open .nome-node-icon{ transform: rotate(45deg); }

  .nome-node-collapse{
    display: grid;
    grid-template-rows: 0fr;
    visibility: hidden;
    transition: grid-template-rows .45s cubic-bezier(.4,0,.2,1), visibility 0s linear .45s;
  }
  .nome-node.is-open .nome-node-collapse{
    grid-template-rows: 1fr;
    visibility: visible;
    transition: grid-template-rows .45s cubic-bezier(.4,0,.2,1), visibility 0s linear 0s;
  }
  .nome-node-inner{ overflow: hidden; min-height: 0; }
  .nome-node-panel{
    padding-top: 14px;
    opacity: 0;
    transform: translateY(-6px);
    transition: opacity .3s ease .05s, transform .3s ease .05s;
  }
  .nome-node.is-open .nome-node-panel{ opacity: 1; transform: translateY(0); }
  .nome-node-panel p{
    font-size: 0.88rem;
    color: var(--texto-suave);
    margin: 0;
  }

  .nome-history{
    margin-top: 16px;
    padding: 14px 16px;
    border: 1px solid rgba(255,255,255,0.1);
    border-left: 2px solid var(--verde);
    border-radius: var(--raio-card);
    background: rgba(255,255,255,0.03);
    text-align: left;
  }
  .nome-history-label{
    font-family: var(--tecnica);
    font-size: 0.68rem;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--verde);
    margin: 0 0 10px;
  }
  .nome-history-track{
    list-style: none;
    margin: 0; padding: 0;
    display: flex;
    flex-direction: column;
    gap: 10px;
  }
  .nome-history-item{
    position: relative;
    padding-left: 16px;
    display: flex;
    flex-direction: column;
    gap: 2px;
  }
  .nome-history-dot{
    position: absolute;
    left: 0; top: 6px;
    width: 6px; height: 6px;
    border-radius: 50%;
    background: var(--pista);
  }
  .nome-history-item:not(:last-child)::after{
    content:"";
    position: absolute;
    left: 2.5px; top: 14px; bottom: -10px;
    width: 1px;
    background: rgba(255,255,255,0.14);
  }
  .nome-history-name{
    font-family: var(--display);
    font-size: 0.82rem;
    color: #fff;
  }
  .nome-history-name em{ font-style: normal; color: var(--texto-suave); }
  .nome-history-desc{
    font-size: 0.78rem;
    color: var(--texto-suave);
    line-height: 1.5;
  }

  .nome-faq-bridge{
    margin: 14px 0 0;
    color: var(--texto-suave);
    font-family: var(--body);
    font-size: 0.94rem;
    line-height: 1.6;
    text-align: center;
  }
  .nome-faq-bridge a{ color: var(--verde-link); text-decoration: underline; text-underline-offset: 3px; }
  .nome-faq-bridge a:hover{ color: var(--verde-claro); }
  .nome-closing{
    max-width: 640px;
    margin: 8px auto 0;
    padding-top: 36px;
    border-top: 1px solid rgba(255,255,255,0.1);
    text-align: center;
    font-family: var(--display);
    font-size: clamp(1.25rem, 2.4vw, 1.7rem);
    line-height: 1.3;
    background: var(--gradiente);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  .nome-node.reveal:nth-child(2){ transition-delay: .08s; }
  .nome-node.reveal:nth-child(3){ transition-delay: .16s; }
  .nome-node.reveal:nth-child(4){ transition-delay: .24s; }

  @media (max-width: 900px){
    .nome-origin-grid{ grid-template-columns: 1fr; }
    .nome-origin-divider{ width: auto; padding: 2px 0; }
    .nome-flow-svg{ display: none; }
    .nome-flow-track{
      grid-template-columns: 1fr;
      row-gap: 30px;
    }
    .nome-node-trigger{
      flex-direction: row;
      justify-content: flex-start;
      text-align: left;
      padding-top: 0;
    }
    .nome-node-label{ flex: 1; }
    .nome-node-collapse{
      /* 64 + 24 do ícone do pilar (2026-09-28): o texto aberto alinha com o nome. */
      margin-left: 88px;
    }
    .nome-node:not(:last-child)::after{
      content: "";
      position: absolute;
      top: 40px; left: 19px; bottom: -30px;
      width: 2px;
      background-image: linear-gradient(180deg, rgba(72,169,130,.7), rgba(43,130,201,.5));
      -webkit-mask-image: repeating-linear-gradient(180deg, #000 0 4px, transparent 4px 9px);
              mask-image: repeating-linear-gradient(180deg, #000 0 4px, transparent 4px 9px);
      animation: nome-flow-drip 2.4s linear infinite;
    }
  }
  @keyframes nome-flow-drip{
    0%{ mask-position: 0 0; -webkit-mask-position: 0 0; }
    100%{ mask-position: 0 18px; -webkit-mask-position: 0 18px; }
  }

  @media (max-width: 680px){
    .nome-origin-card{ padding: 16px 18px; }
    .nome-node-marker{ width: 40px; height: 40px; font-size: 0.88rem; }
    .nome-node-collapse{ margin-left: 80px; } /* 56 + 24 do ícone do pilar (2026-09-28) */
    .nome-node:not(:last-child)::after{ top: 34px; left: 15px; }
    .nome-history{ padding: 12px 14px; }
    .nome-closing{ padding-top: 28px; }
  }

  @media (prefers-reduced-motion: reduce){
    .nome-flow-path{ transition: none; stroke-dashoffset: 0; }
    .nome-flow-pulse{ display: none; }
    .nome-node-marker{ transition: none; }
    .nome-node-icon{ transition: none; }
    .nome-node-collapse{ transition: none; }
    .nome-node-panel{ transition: none; }
    .nome-node:not(:last-child)::after{ animation: none; }
  }

  /* ---------- 4Mind na mídia ---------- */
  .media-mentions{
    padding: 80px 0;
    background: var(--off-white);
    /* Sem borda de seção: no layout claro --linha era um divisor quase
       imperceptível; no dark mode vira uma linha branca a 10% cruzando
       toda a largura — e sobre as ondas de transição fica evidente.
       A separação agora vem da mudança de superfície e das ondas. */
  }
  .media-mentions .eyebrow{
    display:flex;
    align-items:center;
    gap: 10px;
  }
  .media-mentions h2{
    font-size: clamp(1.6rem, 2.4vw, 2.1rem);
    margin: 10px 0 32px;
    max-width: 34ch;
    white-space: nowrap;
  }
  .media-board{
    display:grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 22px;
    max-width: 880px;
  }
  .media-col-title{
    display:flex;
    align-items:center;
    justify-content: space-between;
    gap: 7px;
    font-family: var(--tecnica);
    font-size: 0.72rem;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--cinza);
    padding: 0 14px 10px 0;
    margin-bottom: 4px;
    border-bottom: 1px solid var(--linha);
  }
  .media-col-label{
    display:flex;
    align-items:center;
    gap: 7px;
  }
  .media-col-count{
    font-family: var(--tecnica);
    font-size: 0.72rem;
    letter-spacing: 0;
    text-transform: none;
    color: inherit;
    opacity: 0.75;
  }
  .media-col-title.imprensa{ color: var(--pista-texto); }
  .media-col-title.video{ color: var(--marinho); }
  .media-col-title.podcast{ color: var(--verde-texto); }
  .media-col-list{
    display:flex;
    flex-direction: column;
    max-height: 210px;
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: var(--linha) transparent;
  }
  .media-col-list::-webkit-scrollbar{ width: 5px; }
  .media-col-list::-webkit-scrollbar-thumb{ background: var(--linha); border-radius: 3px; }
  .media-col-list::-webkit-scrollbar-thumb:hover{ background: var(--cinza); }
  .media-item{
    display:flex;
    align-items:center;
    gap: 10px;
    padding: 12px 6px;
    border-bottom: 1px solid var(--linha);
    text-decoration:none;
    color: inherit;
    transition: background .2s ease, padding-left .2s ease;
  }
  .media-col-list .media-item:last-child{ border-bottom: none; }
  .media-item:hover{
    background: var(--surface);
    padding-left: 10px;
    box-shadow: inset 3px 0 0 var(--pista);
  }
  .media-thumb{
    flex-shrink:0;
    width: 32px; height: 32px;
    border-radius: 7px;
    background: var(--gradiente);
    color: var(--sobre-marca);
    display:flex;
    align-items:center;
    justify-content:center;
  }
  .media-info{
    flex: 1 1 auto;
    display:flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
  }
  .media-title{
    font-family: var(--display);
    font-size: 0.82rem;
    line-height: 1.45;
    color: var(--grafite);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }
  .media-meta{
    font-size: 0.68rem;
    color: var(--cinza);
  }
  .media-meta .mono{
    font-family: var(--tecnica);
    font-variant-numeric: tabular-nums;
  }

  /* ---------- busca/filtro de mídias ---------- */
  .media-filter-bar{
    display:flex;
    align-items:center;
    gap: 14px;
    margin-bottom: 22px;
  }
  .media-filter-btn{
    display:inline-flex;
    align-items:center;
    min-height:44px;
    gap: 9px;
    background: var(--surface);
    border: 1px solid var(--linha);
    border-radius: 999px;
    padding: 9px 18px;
    font-family: var(--body);
    font-weight: 600;
    font-size: 0.88rem;
    color: var(--grafite);
    cursor: pointer;
    transition: border-color .15s ease, color .15s ease, box-shadow .15s ease;
  }
  .media-filter-btn:hover{
    border-color: var(--marinho);
    color: var(--marinho);
    box-shadow: 0 4px 14px rgba(29,82,136,0.12);
  }
  .media-filter-btn svg{ width:16px; height:16px; flex-shrink:0; }
  .media-filter-count{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    border-radius: 999px;
    background: var(--gradiente);
    color: var(--sobre-marca);
    font-family: var(--tecnica);
    font-size: 0.68rem;
  }
  .media-filter-count[hidden]{ display:none; }
  .media-filter-clear{
    background:none;
    border:none;
    font-family: var(--body);
    font-size: 0.82rem;
    color: var(--cinza);
    text-decoration: underline;
    cursor:pointer;
    padding: 4px 0;
  }
  .media-filter-clear:hover{ color: var(--grafite); }
  .media-item.is-filtered-out{ display:none !important; }
  .media-col-empty{
    display:none;
    font-size: 0.78rem;
    color: var(--cinza);
    padding: 14px 6px;
  }
  .media-col-empty.is-visible{ display:block; }

  /* ---------- popup de filtro (autor/tema) ---------- */
  .filter-group{ margin-bottom: 22px; }
  .filter-group-label{
    font-family: var(--tecnica);
    font-size: 0.72rem;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--cinza);
    margin-bottom: 10px;
  }
  .filter-chip-list{
    display:flex;
    flex-wrap:wrap;
    gap: 8px;
  }
  .filter-chip{
    display:inline-flex;
    align-items:center;
    gap: 6px;
    min-height: 44px;
    box-sizing: border-box;
    font-family: var(--tecnica);
    font-size: 0.68rem;
    line-height: 1;
    letter-spacing: 0.05em;
    border: 1px solid var(--linha);
    border-radius: 4px;
    padding: 5px 12px;
    color: var(--grafite);
    cursor:pointer;
    transition: border-color .15s ease, background .15s ease, color .15s ease;
    user-select: none;
  }
  .filter-chip input{
    position:absolute;
    width:1px; height:1px;
    padding:0; margin:-1px;
    overflow:hidden;
    clip: rect(0,0,0,0);
    white-space:nowrap;
    border:0;
  }
  .filter-chip .chip-dot{
    display:none;
    width:6px; height:6px;
    border-radius:50%;
    background: var(--pista-texto);
    flex-shrink:0;
    /* sem animacao -- apenas indicador estatico de selecao */
  }
  .filter-chip:has(input:checked) .chip-dot,
  .filter-chip.is-checked .chip-dot{
    display:inline-block;
  }
  .filter-chip:has(input:checked),
  .filter-chip.is-checked{
    border-color: rgba(43,130,201,0.45);
    background: rgba(29,82,136,0.06);
    color: var(--pista-texto);
    font-weight: 600;
  }
  .filter-chip:has(input:focus-visible){
    outline: 2px solid var(--marinho);
    outline-offset: 2px;
  }
  .filter-chip:hover{ border-color: var(--marinho); }
  .filter-more{
    margin-top: 12px;
    border-top: 1px dashed var(--linha);
    padding-top: 12px;
  }
  .filter-more summary{
    cursor: pointer;
    list-style: none;
    display: flex;
    align-items: center;
    gap: 6px;
    font-family: var(--tecnica);
    font-size: 0.72rem;
    letter-spacing: 0.04em;
    color: var(--marinho);
  }
  .filter-more summary::-webkit-details-marker{ display:none; }
  /* Chevron desenhado, nao o caractere de antes (2026-09-28). */
  .filter-more summary::before{
    content: '';
    display: inline-block;
    width: 6px;
    height: 6px;
    margin-right: 2px;
    border-right: 1.6px solid currentColor;
    border-bottom: 1.6px solid currentColor;
    transform: rotate(-45deg);
    transition: transform .15s ease;
  }
  .filter-more[open] summary::before{ transform: rotate(45deg); }
  .filter-more summary:focus-visible{
    outline: 2px solid var(--marinho);
    outline-offset: 3px;
    border-radius: 3px;
  }
  .filter-more-count{ color: var(--cinza); font-weight: 400; }
  .filter-more-body{ margin-top: 14px; }
  .filter-subgroup-label{
    font-family: var(--tecnica);
    font-size: 0.68rem;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--cinza);
    margin: 14px 0 8px;
  }
  .filter-subgroup-label:first-child{ margin-top: 0; }
  .filter-active-summary{
    font-size: 0.78rem;
    color: var(--cinza);
    margin: 0 0 4px;
  }
  .filter-actions{
    display:flex;
    align-items:center;
    justify-content: flex-end;
    gap: 12px;
    margin-top: 26px;
    padding-top: 18px;
    border-top: 1px solid var(--linha);
  }

  /* ---------- instagram ---------- */
  .instagram{
    padding: 88px 0;
    background: var(--surface);
    /* Sem borda de seção: no layout claro --linha era um divisor quase
       imperceptível; no dark mode vira uma linha branca a 10% cruzando
       toda a largura — e sobre as ondas de transição fica evidente.
       A separação agora vem da mudança de superfície e das ondas. */
  }
  .instagram-head{
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 20px;
    margin-bottom: 40px;
  }
  .instagram-head .eyebrow{ margin-bottom: 10px; }
  .instagram-head h2{
    font-size: clamp(1.7rem, 2.6vw, 2.2rem);
  }
  /* Grade do feed proprio (2026-09-30): cartao com cabecalho de perfil e 3 x 3 capas em 4:5, como o
     perfil do Instagram e o antigo widget; cada capa leva ao post. */
  .ig-cartao{
    max-width: 760px;
    margin: 0 auto;
    padding: 28px;
    border: 1px solid var(--borda);
    border-radius: var(--raio-card);
    background: var(--bg);
  }
  .ig-cartao[hidden], .ig-perfil[hidden], .ig-perfil__foto[hidden]{ display: none; }
  .ig-perfil{
    display: flex;
    align-items: center;
    gap: 24px;
    margin-bottom: 24px;
  }
  .ig-perfil__foto{
    width: 88px;
    height: 88px;
    flex: none;
    border-radius: 50%;
    background: #fff;
    object-fit: cover;
  }
  .ig-perfil__texto p{ margin: 0; }
  .ig-perfil__nome{ font-weight: 700; font-size: 1.05rem; color: var(--texto); }
  .ig-perfil__texto .ig-perfil__numeros{ margin-top: 4px; color: var(--texto); }
  .ig-perfil__texto .ig-perfil__bio{ margin-top: 6px; color: var(--texto-suave); font-size: .95rem; line-height: 1.45; }
  /* Carrossel (2026-09-30, pedido do dono): 3 capas por vez no computador, 1 no celular. */
  .ig-carrossel{ position: relative; }
  .ig-janela{
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    overscroll-behavior-x: contain;
    scrollbar-width: none;
  }
  .ig-janela::-webkit-scrollbar{ display: none; }
  .ig-grade{
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    gap: 12px;
  }
  .ig-grade > li{
    flex: 0 0 calc((100% - 24px) / 3);
    scroll-snap-align: start;
  }
  .ig-grade:empty{ aspect-ratio: 12 / 5; }      /* reserva a altura de uma fileira ate as fotos chegarem */
  .ig-seta{
    position: absolute;
    top: 50%;
    z-index: 2;
    width: 44px;
    height: 44px;
    display: grid;
    place-items: center;
    padding: 0;
    border: 1px solid var(--borda);
    border-radius: 50%;
    background: rgba(15, 23, 42, .82);
    color: #fff;
    cursor: pointer;
    transform: translateY(-50%);
    transition: opacity .2s ease;
  }
  .ig-seta--ant{ left: -22px; }
  .ig-seta--prox{ right: -22px; }
  .ig-seta[disabled]{ opacity: 0; pointer-events: none; }
  .ig-pontos{
    display: flex;
    justify-content: center;
    gap: 7px;
    margin-top: 16px;
  }
  .ig-pontos span{
    width: 7px;
    height: 7px;
    border-radius: 50%;
    color: var(--texto-fraco);
    background: currentColor;
    transition: color .2s ease;
  }
  .ig-pontos span.ativo{ color: var(--verde); }
  .ig-post{
    position: relative;
    display: block;
    aspect-ratio: 4 / 5;
    overflow: hidden;
    border-radius: 10px;
    background: var(--surface);
  }
  .ig-post img{
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform .3s ease;
  }
  .ig-post:hover img{ transform: scale(1.03); }
  .ig-post__tipo{
    position: absolute;
    top: 8px;
    right: 8px;
    width: 22px;
    height: 22px;
    color: #fff;
    filter: drop-shadow(0 1px 2px rgba(0, 0, 0, .6));
    pointer-events: none;
  }
  .ig-post__tipo svg{ width: 100%; height: 100%; display: block; }
  /* Visualizacoes, como na grade do app (2026-09-30). */
  .ig-post__views{
    position: absolute;
    left: 8px;
    bottom: 8px;
    display: flex;
    align-items: center;
    gap: 4px;
    color: #fff;
    font-size: .8rem;
    font-weight: 600;
    line-height: 1;
    text-shadow: 0 1px 3px rgba(0, 0, 0, .7);
    pointer-events: none;
  }
  .ig-post__views svg{
    width: 16px;
    height: 16px;
    flex: none;
    filter: drop-shadow(0 1px 2px rgba(0, 0, 0, .6));
  }
  @media (max-width: 680px){
    .ig-cartao{ padding: 16px; }
    .ig-perfil{ gap: 16px; margin-bottom: 16px; }
    .ig-perfil__foto{ width: 64px; height: 64px; }
    .ig-perfil__texto .ig-perfil__bio{ font-size: .9rem; }
    .ig-grade{ gap: 8px; }
    .ig-grade > li{ flex-basis: 100%; }
    .ig-grade:empty{ aspect-ratio: 4 / 5; }
    .ig-seta{ display: none; }                  /* celular: arrasto e pontos, como no app do Instagram */
    .ig-post{ border-radius: 6px; }
    .ig-post__tipo{ top: 5px; right: 5px; width: 16px; height: 16px; }
  }
  @media (prefers-reduced-motion: reduce){
    .ig-post img{ transition: none; }
    .ig-seta, .ig-pontos span{ transition: none; }
  }

  /* ---------- contact ---------- */
  .contact{ padding: 96px 0; }
  .contact-grid{
    display:grid;
    grid-template-columns: 1fr;
  }
  .contact-text{ max-width: 480px; }
  .contact-text h2{
    font-size: clamp(1.8rem, 2.8vw, 2.4rem);
    margin-bottom: 24px;
    max-width: 16ch;
  }

  .contact-card{
    background: var(--surface);
    border: 1px solid var(--linha);
    border-radius: var(--raio-card);
    padding: 30px;
  }
  .contact-card > p{
    color: var(--cinza);
    margin-bottom: 22px;
  }
  .contact-actions{
    display:flex;
    flex-wrap:wrap;
    gap: 12px;
  }

  form{ display:flex; flex-direction:column; gap:18px; max-width: 480px; }
  .field{ display:flex; flex-direction:column; gap:7px; }
  .field label{
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--grafite);
  }
  .field input, .field select, .field textarea{
    font-family: var(--body);
    font-size: 0.96rem;
    padding: 12px 14px;
    border: 1px solid var(--borda-campo);
    border-radius: 4px;
    background: var(--bg);
    color: var(--grafite);
  }
  .field textarea{ resize: vertical; min-height: 100px; }
  .field input:focus, .field select:focus, .field textarea:focus{
    border-color: var(--marinho);
  }
  .form-note{
    font-size: 0.78rem;
    color: var(--cinza);
    display:none;
  }
  .form-note.show{ display:block; }
  /* Dica fixa sob a mensagem (P2-30): a politica pede para nao mandar dado de
     saude por aqui, e o formulario nao dizia. */
  .form-note.form-note--dica{ display:block; }
  /* Erro do formulário. #B3261E era vermelho escuro para fundo claro e dá
     apenas 2.24:1 sobre --surface — reprovaria em WCAG AA. Clareado para o
     mesmo tom usado no selo de status do deck FVEE (6.20:1). */
  .form-note.form-note--error{ color: #E8909B; }

  .field-consent{ flex-direction: row; }
  .consent-label{
    display:flex;
    align-items:flex-start;
    gap: 9px;
    font-size: 0.82rem;
    font-weight: 400;
    color: var(--cinza);
    line-height: 1.5;
    cursor: pointer;
  }
  .consent-label input[type="checkbox"]{
    margin-top: 3px;
    width: 15px;
    height: 15px;
    flex-shrink: 0;
    accent-color: var(--marinho);
    cursor: pointer;
  }
  .consent-label a{
    color: var(--marinho);
    text-decoration: underline;
  }
  .privacy-text p{
    color: var(--cinza);
    font-size: 0.88rem;
    margin-bottom: 14px;
    line-height: 1.6;
  }
  .privacy-text strong{ color: var(--grafite); }
  .privacy-text a{ color: var(--marinho); }

  /* ---------- email modal ---------- */
  .modal-overlay{
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,0.72);
    display:flex;
    align-items:center;
    justify-content:center;
    padding: 24px;
    z-index: 1200;
    opacity: 0;
    pointer-events: none;
    transition: opacity .2s ease;
  }
  .modal-overlay[hidden]{ display: none; }
  .modal-overlay.open{
    opacity: 1;
    pointer-events: auto;
  }
  .modal{
    background: var(--surface);
    border-radius: 8px;
    padding: 34px;
    max-width: 460px;
    width: 100%;
    max-height: 90vh;
    overflow-y: auto;
    position: relative;
    transform: translateY(12px) scale(0.98);
    transition: transform .2s ease;
  }
  /* declaradas depois de .modal (mesma especificidade 0,1,0) para
     garantir que vencem na cascata -- ver bio-modal, que ja seguia
     esse padrao corretamente. */
  .modal--wide{ max-width: 560px; }
  .filter-modal{ max-width: 480px; }
  .modal-overlay.open .modal{ transform: translateY(0) scale(1); }
  .modal h2{
    font-family: var(--display);
    font-size: 1.3rem;
    margin-bottom: 8px;
    padding-right: 24px;
    text-align: center;
  }
  .modal-subtitle{
    font-size: 0.88rem;
    color: var(--cinza);
    margin-bottom: 22px;
  }
  .modal-close{
    position: absolute;
    top: 8px; right: 8px;
    width: 44px;
    height: 44px;
    display:flex;
    align-items:center;
    justify-content:center;
    background: none;
    border: none;
    font-size: 1.6rem;
    line-height: 1;
    color: var(--cinza);
    cursor: pointer;
    padding: 0;
  }
  .modal-close svg{ display: block; width: 22px; height: 22px; } /* era o caractere &times; (2026-09-28) */
  .modal-close:hover{ color: var(--grafite); }
  /* O X e `position:absolute` dentro de `.modal`, que e justamente quem
     rola. No texto da politica (cerca de 1450px de conteudo em 730px de
     janela) ele sai de tela ao rolar e nao volta: quem le ate o fim fica
     sem nenhuma affordance visivel de fechar. Aqui o scroll desce para o
     texto, entao titulo e X ficam parados. Esc e o clique no overlay
     continuam valendo, mas deixam de ser a unica saida. */
  #privacyModalOverlay .modal{
    display: flex;
    flex-direction: column;
    overflow: hidden;
  }
  #privacyModalOverlay .privacy-text{
    overflow-y: auto;
    min-height: 0;            /* sem isto o filho flex nao encolhe */
    overscroll-behavior: contain;
  }

  /* ---------- popup de bio estendida ---------- */
  .bio-modal{ max-width: 540px; }
  .bio-field{ margin-bottom: 24px; }
  .bio-field:last-child{ margin-bottom: 0; }
  .bio-field-label{
    font-family: var(--display);
    font-size: 1rem;
    font-weight: 600;
    color: var(--grafite);
    margin-bottom: 12px;
  }
  .bio-subfield{ margin-bottom: 14px; }
  .bio-subfield:last-child{ margin-bottom: 0; }
  .bio-subfield-tag{
    display: block;
    font-family: var(--tecnica);
    font-size: 0.68rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    font-weight: 600;
    color: var(--pista-texto);
    margin-bottom: 4px;
  }
  .bio-subfield-text{
    font-size: 0.88rem;
    color: var(--cinza);
    line-height: 1.55;
  }


  /* ---------- partners ---------- */
  .partners{
    padding: 56px 0 72px;
    /* Sem borda de seção: no layout claro --linha era um divisor quase
       imperceptível; no dark mode vira uma linha branca a 10% cruzando
       toda a largura — e sobre as ondas de transição fica evidente.
       A separação agora vem da mudança de superfície e das ondas. */
  }
  /* Logos de parceiros no dark mode.
     Os 9 arquivos são WebP lossless com transparência e arte predominantemente
     escura — feitos para fundo claro. Em repouso o tratamento original
     (grayscale + opacidade baixa) os tornava invisíveis sobre --bg, então
     acrescentamos invert(): a arte escura vira clara e mantém o efeito
     monocromático discreto pretendido no design.
     No hover, um chip claro devolve as cores reais de cada marca. */
  .partner-logo{
    display:flex;
    align-items:center;
    justify-content:center;
    /* O chip do hover precisa de respiro: com padding curto alguns logos
       encostavam na borda. A altura fixa vira mínima para o chip crescer. */
    min-height: 24px;
    padding: 9px 12px;
    border-radius: 8px;
    transition: background-color .2s ease;
  }
  .partner-logo img{
    max-height: 24px;
    max-width: 100px;
    width: auto;
    height: auto;
    object-fit: contain;
    filter: grayscale(100%) invert(1) brightness(1.25);
    opacity: 0.72;
    transition: opacity .2s ease, filter .2s ease;
  }
  .partner-logo:hover{
    background: #FFFFFF;
  }
  .partner-logo:hover img{
    filter: none;
    opacity: 1;
  }
  @media (prefers-reduced-motion: reduce){
    .partner-logo, .partner-logo img{ transition: none; }
  }
  /* Duas fileiras: com uma só, cabiam poucos logos por página e o carrossel
     paginava cedo demais. O JS mede quantos cabem de fato no espaço
     disponível, então isto se adapta à largura da tela. */
  .partners-carousel{ position: relative; --carousel-max-rows: 2; }
  .carousel-track{ position: relative; }
  .carousel-slide{
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 14px 18px;
  }
  .carousel-track.is-paginated{ min-height: 96px; }
  .carousel-track.is-paginated .carousel-slide{
    position: absolute;
    inset: 0;
    opacity: 0;
    pointer-events: none;
    transition: opacity .5s ease;
  }
  .carousel-track.is-paginated .carousel-slide.is-active{
    opacity: 1;
    pointer-events: auto;
  }
  /* Camada oculta de medição: precisa reproduzir EXATAMENTE o layout da
     slide real, senão a contagem de quantos logos cabem sai errada.
     Duas armadilhas já encontradas aqui:
     1. o `gap` precisa ser o mesmo da .carousel-slide — com valores
        diferentes, a medição usa uma folga que não existe no layout real;
     2. `align-items` tem de ser flex-start, NÃO center. O JS detecta fileiras
        comparando offsetTop; com os itens centralizados verticalmente, cada
        logo de altura diferente ganha um offsetTop diferente (0, 2, 3, 8…) e
        o algoritmo conta uma fileira por logo, paginando cedo demais.
        O alinhamento aqui é invisível, então não afeta a aparência. */
  .carousel-measure{
    position: absolute;
    top: -9999px;
    left: 0;
    width: 100%;
    visibility: hidden;
    pointer-events: none;
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: center;
    gap: 14px 18px;
  }
  .carousel-status{
    position: absolute;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    white-space: nowrap;
    border: 0;
  }
  .carousel-controls{
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 18px;
    margin-top: 20px;
  }
  .carousel-controls[hidden]{ display: none; }
  .carousel-arrow{
    width: var(--ctrl); height: var(--ctrl);
    flex-shrink: 0;
    border-radius: 50%;
    border: 1px solid var(--ctrl-borda);
    background: var(--ctrl-bg);
    color: var(--texto);
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: border-color .2s ease, color .2s ease, transform .15s ease;
  }
  .carousel-arrow:hover{
    border-color: var(--azul-link);
    color: var(--azul-link);
  }
  .carousel-arrow:active{ transform: scale(0.94); }
  .carousel-pause{
    width:44px;
    height:44px;
    flex-shrink:0;
    border-radius:50%;
    border:1px solid var(--linha);
    background:var(--surface);
    color:var(--cinza);
    display:flex;
    align-items:center;
    justify-content:center;
    cursor:pointer;
  }
  .carousel-pause:hover{ border-color:var(--pista); color:var(--pista-texto); }
  .carousel-dots{
    display: flex;
    gap: 8px;
  }
  .carousel-dot{
    width: 44px; height: 44px;
    position: relative;
    border: none;
    background: transparent;
    cursor: pointer;
    padding: 0;
  }
  .carousel-dot::before{
    content:'';
    position:absolute;
    top:50%; left:50%;
    width:7px; height:7px;
    border-radius:50%;
    background:var(--linha);
    transform:translate(-50%,-50%);
    transition:background .2s ease, transform .2s ease;
  }
  .carousel-dot.is-active::before{
    background: var(--pista);
    transform: translate(-50%,-50%) scale(1.3);
  }
  @media (prefers-reduced-motion: reduce){
    .carousel-track.is-paginated .carousel-slide{ transition: none; }
  }

  /* ---------- footer ----------
     Reorganizado em 2026-09-01. Antes: 3 colunas rígidas, tudo em IBM Plex
     Mono (inclusive os links de navegação) e o aviso de copyright enfiado
     dentro da lista "Informações", misturado com links clicáveis.
     Agora: 4 colunas com hierarquia tipográfica do brandbook — rótulos em
     Exo 2 caixa alta, links em IBM Plex Sans — e uma barra inferior própria
     para copyright e crédito. Cores tokenizadas. */
  footer{
    /* Sem border-top: a onda de transição logo acima já separa o rodapé. */
    background: var(--surface);
    color: var(--texto-suave);
    padding: 48px 0 34px;
  }
  .footer-grid{
    display:grid;
    grid-template-columns: minmax(200px, 1.4fr) repeat(3, minmax(140px, 1fr));
    align-items:start;
    gap: clamp(28px, 4vw, 56px);
  }

  /* --- coluna da marca --- */
  /* O logo estava alinhado a esquerda e ficava deslocado em relacao aos
     botoes Blog e Loja logo abaixo. Centralizar os dois no mesmo eixo. */
  .footer-brand{ display:flex; flex-direction:column; align-items:center; gap:16px; text-align:center; }
  .footer-brand-link{ display:inline-flex; border-radius:8px; }
  /* Logo do rodape: versao COM gradiente e subtitulo, SEM placa de fundo.
     Decisao do designer em 2026-09-01, tomada sabendo do custo: o subtitulo e
     #3E5785 e da 2.02:1 sobre --surface, abaixo do minimo de 4.5:1. Os traços
     da marca em si (gradiente #2ABCE9→#3DA587) continuam legiveis; quem perde
     e a linha "PREPARACAO PSICOLOGICA". O nome acessivel esta no alt. */
  .footer-brand img{ width:132px; height:auto; max-width:none; flex:0 0 auto; object-fit:contain; }
  .footer-ecosystem-links{ display:flex; align-items:center; gap:12px; margin-top:4px; }
  .footer-ecosystem-links a{
    min-height:42px; padding:0 20px;
    display:inline-flex; align-items:center; gap:7px;
    border: 1px solid var(--borda-campo); border-radius:999px;
    font: 600 .78rem/1 var(--body);
    color: var(--texto); white-space:nowrap; text-decoration:none;
    transition: border-color .18s ease, background-color .18s ease;
  }
  .footer-ecosystem-links a:hover{
    border-color: var(--verde); background: color-mix(in srgb, var(--verde) 14%, transparent);
  }
  .footer-ecosystem-links svg{ width:16px; height:16px; flex:0 0 auto; color:var(--verde-link); }

  /* --- colunas de links --- */
  .footer-column strong{
    display:block;
    font: 600 .72rem/1.4 var(--tecnica);
    letter-spacing:0.12em;
    text-transform:uppercase;
    color: var(--verde-link);
    margin-bottom: 14px;
  }
  .footer-navigation .footer-nav,
  .footer-information-list,
  .footer-contact-list{
    display:flex; flex-direction:column; align-items:flex-start; gap:2px;
  }
  .footer-column a,
  .footer-link-button{
    display:inline-flex; align-items:center; gap:8px;
    width:max-content; max-width:100%; min-height:32px;
    font: 400 .88rem/1.5 var(--body);
    text-decoration:none;
    color: var(--texto-suave);
    transition: color .15s ease;
  }
  /* Tela de toque: 44 px de alvo (UX D12); com mouse, 32 px bastam e o rodape fica compacto. */
  @media (pointer: coarse){
    .footer-column a, .footer-link-button{ min-height: var(--ctrl); }
  }
  .footer-column a[aria-current="page"]{ color: var(--texto); text-decoration: underline;
    text-decoration-color: var(--verde); text-underline-offset: 5px; }
  .footer-column a:hover,
  .footer-link-button:hover{ color: var(--texto); }
  .footer-column a svg{ width:15px; height:15px; flex:0 0 auto; color:var(--verde-link); }
  .footer-link-button{
    padding:0; border:0; background:transparent; cursor:pointer;
    font: 400 .88rem/1.5 var(--body);
    /* Botao centraliza o texto por padrao: no celular "Preferencias de
       cookies" quebrava em duas linhas centradas, fora do alinhamento dos
       links da coluna (2026-09-28). */
    text-align: left;
    justify-content: flex-start;
  }

  /* --- aviso legal, dentro da coluna da marca ---
     Antes era uma barra de largura total no pé do rodapé, o que somava mais
     uma linha e um bloco de espaço. Trazendo para baixo dos atalhos, o rodapé
     encurta e a coluna da marca fica com leitura contínua. */
  .footer-legal{
    margin-top: 22px;
    display:flex; flex-direction:column; gap:2px;
    font: 400 .78rem/1.6 var(--body);
    color: var(--texto-fraco);
  }
  .footer-credit-link{
    color: var(--texto-suave);
    text-decoration: underline;
    text-underline-offset: 2px;
    transition: color .15s ease;
  }
  .footer-credit-link:hover{ color: var(--texto); }

  @media (max-width: 900px){
    .footer-grid{ grid-template-columns: repeat(2, minmax(140px, 1fr)); }
    .footer-brand{ grid-column: 1 / -1; }
  }
  @media (max-width: 560px){
    .footer-grid{ grid-template-columns: 1fr; }
  }


  /* ---------- divisórias em onda entre seções de cor contrastante ---------- */
  .section-wave{
    display:block;
    line-height:0;
    margin-top:-1px;
    margin-bottom:-1px;
    overflow:hidden;
  }
  .section-wave svg{
    display:block;
    width:100%;
    height:44px;
  }
  /* Ondas de transição entre seções.
     A div pinta a seção de CIMA; o <path> pinta a de BAIXO.
     Os nomes antigos (--bg-offwhite / --bg-dark) descreviam cores de um
     layout claro e deixaram de fazer sentido no dark mode; agora cada
     classe declara a transição que representa. O fill vem do CSS e não do
     atributo do SVG, para não haver hex fixo espalhado no markup. */
  .section-wave--bg-to-surface{ background:var(--bg); }
  .section-wave--bg-to-surface path{ fill:var(--surface); }

  .section-wave--surface-to-bg{ background:var(--surface); }
  .section-wave--surface-to-bg path{ fill:var(--bg); }

  @media (max-width: 680px){
    .section-wave svg{ height:28px; }
  }

  /* ---------- reveal on scroll ---------- */
  .js .reveal{
    opacity:0;
    transform: translateY(16px);
    transition: opacity .6s ease, transform .6s ease;
  }
  .js .reveal.in{
    opacity:1;
    transform: translateY(0);
  }

  /* cascata sutil nos cards de grid, um pouco depois um do outro */
  .service-card.reveal:nth-child(2){ transition-delay: .05s; }
  .service-card.reveal:nth-child(3){ transition-delay: .10s; }
  .service-card.reveal:nth-child(4){ transition-delay: .15s; }
  .service-card.reveal:nth-child(5){ transition-delay: .20s; }
  .service-card.reveal:nth-child(6){ transition-delay: .25s; }
  .service-card.reveal:nth-child(7){ transition-delay: .30s; }
  .service-card.reveal:nth-child(8){ transition-delay: .35s; }

  .team-card.reveal:nth-child(2){ transition-delay: .08s; }
  .team-card.reveal:nth-child(3){ transition-delay: .16s; }

  /* ---------- fluxo de atendimento integrado aos diferenciais ---------- */
  .process-head{ margin-bottom: 44px; max-width: 640px; }
  .process-head h2{ font-size: clamp(1.5rem, 2.4vw, 2rem); }
  .process-timeline{
    position: relative;
    display: flex;
    gap: 28px;
  }
  .process-step{
    position: relative;
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 16px;
  }
  /* Conector: começa exatamente na borda direita do círculo (left:36px,
     36px = diâmetro do marcador) e termina exatamente na borda esquerda
     do PRÓXIMO círculo (right:-28px, 28px = gap do flex). Usando
     left+right SEM width, o navegador calcula o comprimento real a
     cada largura de coluna/viewport -- nunca sobra "flutuando" sozinho
     no vão, nem cruza a área atrás do marcador (a linha fica no y do
     centro do círculo, tangenciando-o, nunca "por trás" dele). */
  .process-step:not(:last-child)::before{
    content: "";
    position: absolute;
    top: 17px;
    left: 36px;
    right: -28px;
    height: 2px;
    background-image:
      linear-gradient(90deg, transparent, rgba(29,82,136,.65), transparent),
      linear-gradient(90deg, var(--linha), var(--linha));
    background-repeat: no-repeat, no-repeat;
    background-size: 46px 100%, 100% 100%;
    background-position: -60% 0, 0 0;
    animation: process-flow 4.8s ease-in-out infinite;
  }
  .process-step:nth-child(2):not(:last-child)::before{ animation-delay: .5s; }
  .process-step:nth-child(3):not(:last-child)::before{ animation-delay: 1s; }
  .process-step:not(:last-child)::after{
    content: "";
    position: absolute;
    top: 13px;
    right: -26px;
    width: 14px;
    height: 10px;
    pointer-events: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='10' viewBox='0 0 14 10'%3E%3Cpath d='M2 1L9 5L2 9' fill='none' stroke='%231D5288' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    opacity: .55;
    animation: process-arrow-pulse 4.8s ease-in-out infinite;
  }
  .process-step:nth-child(2):not(:last-child)::after{ animation-delay: .5s; }
  .process-step:nth-child(3):not(:last-child)::after{ animation-delay: 1s; }
  @keyframes process-flow{
    0%, 8%  { background-position: -60% 0, 0 0; }
    45%     { background-position: 160% 0, 0 0; }
    100%    { background-position: 160% 0, 0 0; }
  }
  @keyframes process-arrow-pulse{
    0%, 40%   { opacity: .55; transform: translateX(0) scale(1); }
    48%       { opacity: 1;   transform: translateX(1px) scale(1.12); }
    60%, 100% { opacity: .55; transform: translateX(0) scale(1); }
  }
  /* rabo depois da última etapa -- mesma técnica de insets, some em
     degradê; sem seta, pra não apontar pro vazio */
  .process-step:last-child::before{
    content: "";
    position: absolute;
    top: 17px;
    left: 36px;
    right: -32px;
    height: 2px;
    background: var(--linha);
    -webkit-mask-image: linear-gradient(to right, #000 0%, #000 55%, transparent 100%);
            mask-image: linear-gradient(to right, #000 0%, #000 55%, transparent 100%);
    animation: process-tail-breathe 3.6s ease-in-out infinite;
  }
  @keyframes process-tail-breathe{
    0%, 100%{ opacity: .5; }
    50%     { opacity: .85; }
  }
  .process-marker{
    position: relative;
    z-index: 1;
    flex-shrink: 0;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--gradiente);
    border: none;
    color: var(--sobre-marca);
    font-family: var(--tecnica);
    font-size: 0.88rem;
    font-weight: 600;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 3px 10px rgba(29,82,136,0.28);
  }
  .process-content h3{
    font-family: var(--display);
    font-size: 1.05rem;
    margin-bottom: 6px;
  }
  .process-content p{
    font-size: 0.92rem;
    color: var(--cinza);
  }
  .process-step.reveal:nth-child(2){ transition-delay: .08s; }
  .process-step.reveal:nth-child(3){ transition-delay: .16s; }
  .process-step.reveal:nth-child(4){ transition-delay: .24s; }

  @media (max-width: 900px){
    .process-timeline{ flex-direction: column; gap: 30px; }
    .process-step{ flex-direction: row; gap: 22px; }

    /* mesma lógica de insets, eixos trocados: top:36px (base do
       círculo de cima) até bottom:-30px (topo do próximo círculo,
       30px = gap vertical deste breakpoint) */
    .process-step:not(:last-child)::before{
      top: 36px; left: 17px; right: auto; bottom: -30px;
      width: 2px; height: auto;
      background-image:
        linear-gradient(180deg, transparent, rgba(29,82,136,.65), transparent),
        linear-gradient(180deg, var(--linha), var(--linha));
      background-repeat: no-repeat, no-repeat;
      background-size: 100% 30px, 100% 100%;
      background-position: 0 -60%, 0 0;
      animation: process-flow-v 4.8s ease-in-out infinite;
    }
    .process-step:not(:last-child)::after{
      top: auto; right: auto; left: 13px; bottom: -28px;
      width: 10px; height: 14px;
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='14' viewBox='0 0 10 14'%3E%3Cpath d='M1 2L5 9L9 2' fill='none' stroke='%231D5288' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    }
    .diferenciais .process-step:not(:last-child)::before{
      background-image:
        linear-gradient(180deg, transparent, rgba(72,169,130,.9), transparent),
        linear-gradient(180deg, rgba(255,255,255,.18), rgba(255,255,255,.18));
    }
    .diferenciais .process-step:not(:last-child)::after{
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='14' viewBox='0 0 10 14'%3E%3Cpath d='M1 2L5 9L9 2' fill='none' stroke='%2348A982' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
      background-repeat: no-repeat;
      background-position: center;
      animation: process-arrow-pulse-v 4.8s ease-in-out infinite;
    }
    .process-step:nth-child(2):not(:last-child)::before,
    .process-step:nth-child(2):not(:last-child)::after{ animation-delay: .5s; }
    .process-step:nth-child(3):not(:last-child)::before,
    .process-step:nth-child(3):not(:last-child)::after{ animation-delay: 1s; }
    @keyframes process-flow-v{
      0%, 8%  { background-position: 0 -60%, 0 0; }
      45%     { background-position: 0 160%, 0 0; }
      100%    { background-position: 0 160%, 0 0; }
    }
    @keyframes process-arrow-pulse-v{
      0%, 40%   { opacity: .55; transform: translateY(0) scale(1); }
      48%       { opacity: 1;   transform: translateY(1px) scale(1.12); }
      60%, 100% { opacity: .55; transform: translateY(0) scale(1); }
    }
    .process-step:last-child::before{
      top: 36px; left: 17px; right: auto; bottom: -32px;
      width: 2px; height: auto;
      background: var(--linha);
      -webkit-mask-image: linear-gradient(to bottom, #000 0%, #000 55%, transparent 100%);
              mask-image: linear-gradient(to bottom, #000 0%, #000 55%, transparent 100%);
      animation: process-tail-breathe 3.6s ease-in-out infinite;
    }
  }


  /* ---------- banner de cookies ---------- */
  .cookie-banner{
    /* z-index abaixo do modal-overlay (1200) de proposito -- um
       modal aberto deve sempre ficar por cima do banner de cookies */
    position: fixed !important;
    left: 20px;
    right: 20px;
    bottom: 20px;
    z-index: 999;
    max-width: 620px;
    margin: 0 auto;
    background: var(--surface);
    color: var(--texto);
    border: 1px solid var(--borda-forte);
    border-radius: 8px;
    padding: 22px 26px;
    box-shadow: 0 12px 32px rgba(0,0,0,0.5);
    display: flex;
    flex-direction: column;
    gap: 14px;
  }
  .cookie-banner[hidden]{ display:none; }
  .cookie-banner p{
    font-size: 0.88rem;
    color: var(--texto-suave);
    line-height: 1.55;
    margin: 0;
  }
  .cookie-banner p a{
    color: #fff;
    text-decoration: underline;
  }
  .cookie-actions{
    display:flex;
    gap: 12px;
    flex-wrap: wrap;
  }
  .cookie-actions .btn-ghost{
    color: #fff;
    border-color: rgba(255,255,255,0.3);
  }
  .cookie-actions .btn-ghost:hover{
    border-color: #fff;
    color: #fff;
  }
  @media (max-width: 680px){
    .cookie-banner{ left: 12px; right: 12px; bottom: 12px; padding: 18px 20px; }
  }

  /* ---------- easter egg ---------- */
  .easter-egg{
    position: fixed;
    right: 18px;
    bottom: 18px;
    z-index: 60;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    /* --grafite virou cor de TEXTO no dark mode; aqui era fundo, então o
       botão ficava um círculo claro. Passa a superfície com borda. */
    border: 1px solid var(--borda-forte);
    background: var(--surface);
    color: var(--texto-suave);
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    /* 0.6 e o minimo para o icone ficar a 3:1 do fundo (WCAG 1.4.11); em
       0.35 ficava perto de 2:1 (2026-09-28). */
    opacity: 0.6;
    transition: opacity .3s ease, transform .3s ease, color .3s ease;
    animation: egg-pulse 4s ease-in-out infinite;
  }
  .easter-egg svg{ width: 19px; height: 19px; }
  /* No celular o botao fixo cobria cartoes e o painel ao rolar. O minijogo
     continua no painel; so a pista do canto sai. */
  @media (max-width: 680px){
    .easter-egg{ display: none; }
  }
  .easter-egg:hover,
  .easter-egg:focus-visible{
    opacity: 1;
    color: var(--azul-link);
    transform: scale(1.08);
  }
  @keyframes egg-pulse{
    0%, 100%{ box-shadow: 0 0 0 0 rgba(72,169,130,0); }
    50%{ box-shadow: 0 0 0 6px rgba(72,169,130,0.08); }
  }

  @media (prefers-reduced-motion: reduce){
    html{ scroll-behavior:auto; }
    nav, .brand img, .nav-toggle span{ transition:none; }
    .nav-mobile-explorar-btn svg, .nav-extras svg{ transition:none; }
    .js .reveal{ opacity:1; transform:none; transition:none; }
    .metric-bar > span{ transition:none; }
    .live-dot{ animation:none; }
    .easter-egg{ animation:none; }
    .celebration-trophy{ animation:none; }
    .process-step:not(:last-child)::before,
    .process-step:last-child::before{
      animation: none;
      background-image: linear-gradient(var(--linha), var(--linha));
      background-size: 100% 100%;
      background-position: 0 0;
    }
    .process-step:not(:last-child)::after{
      animation: none;
      opacity: .85;
      transform: none;
    }
    .dif-more-collapse{ transition:none; }
    .dif-more-panel{ transition:none; }
    .dif-more-icon{ transition:none; }
  }

  /* ---------- responsive ---------- */
  @media (max-width: 1080px){
    header{ padding:10px 10px 0; }
    section[id]{ scroll-margin-top:84px; }
    .nav-left{
      position:absolute;
      grid-column:1 / -1;
      grid-row:auto;
      z-index:2;
      top:calc(100% + 8px);
      left:50%;
      right:auto;
      width:calc(100vw - 40px);
      max-width:640px;
      transform:translateX(-50%);
      /* Painel suspenso: superfície elevada, não a cor da página — senão o
         menu aberto se confunde com o fundo. */
      background:var(--surface);
      -webkit-backdrop-filter:blur(18px);
      backdrop-filter:blur(18px);
      border:1px solid var(--borda-forte);
      border-radius:20px;
      box-shadow:var(--sombra-elevada);
      flex-direction:column;
      align-items:stretch;
      padding:10px 16px;
      gap:2px;
      display:none;
      /* O painel tem 15 itens e vive dentro de um header fixo: sem altura
         maxima e rolagem propria, os ultimos ficam fora da tela em celular
         pequeno e nao ha como alcanca-los. */
      max-height: calc(100dvh - 96px);
      overflow-y: auto;
      overscroll-behavior: contain;
    }
    .nav-left a{ width:100%; justify-content:center; padding:0 8px; gap:8px; }
    .nav-left .nav-link-icon{ margin-right:0; }
    /* Divisoria entre o ecossistema (Blog, Loja) e a navegacao do site. */
    .nav-mobile-sep{ padding-bottom:6px; margin-bottom:6px; border-bottom:1px solid var(--linha); }
    /* Hover no painel: traco so sob o texto, nunca com a largura da linha (2026-10-22). */
    .nav-left a::after{ display:none; }
    /* Pagina atual no menu aberto (revisao do Lote 7): o traco da largura da linha parecia
       divisoria entre dois itens. Aqui e sublinhado so no texto. */
    .nav-left a[aria-current="page"]::after{ width:0; }
    .nav-left a[aria-current="page"]{ font-weight:600; text-decoration:underline; text-decoration-color:var(--verde);
      text-decoration-thickness:2px; text-underline-offset:5px; }
    .nav-left.open{ display:flex; }
    .nav-toggle{ display:flex; }
    .nav-mobile-only{ display:block; }
    .nav-mobile-label{ display:flex; }
    .nav-extras-wrap{ display:none; }
    .ecosystem-shortcuts{ display:none; }
    .brand{ grid-column:1; justify-self:start; }
    .brand img{ height:38px; }
    header.is-scrolled .brand img{ height:36px; }
    .nav-right{ grid-column:3; gap:6px; }
    .nav-contact{ padding:8px 12px; font-size:0.82rem; }
    .primary-nav{ grid-template-columns:auto 1fr auto; column-gap:6px; padding:7px 8px; }
    .about-grid{ grid-template-columns: 1fr; }
    .team-photo-card{ position:static; max-width: 340px; }
    .team-grid{ grid-template-columns: repeat(2,1fr); }
    .services-grid{ grid-template-columns: repeat(2,1fr); }
    .telemetry-grid{ grid-template-columns: repeat(2,1fr); row-gap: 26px; }
    .contact-grid{ grid-template-columns: 1fr; }
    .media-board{ grid-template-columns: 1fr; max-width: 420px; gap: 30px; }
  }
  @media (max-width: 1080px) and (hover: hover){
    .nav-left a:hover:not([aria-current="page"]),
    .nav-mobile-explorar-btn:hover{ text-decoration:underline; text-decoration-color:var(--nav-azul);
      text-decoration-thickness:2px; text-underline-offset:5px; }
  }

  @media (max-width: 680px){
    .wrap{ padding: 0 20px; }
    .hero{ padding: 88px 0 40px; }
    .telemetry{ padding: 22px 18px; }
    .telemetry-grid{ grid-template-columns: 1fr 1fr; gap: 20px; }
    .services-grid{ grid-template-columns: 1fr; }
    .team-grid{ grid-template-columns: 1fr; }
    .carousel-slide{ gap: 12px 14px; }
    .carousel-measure{ gap: 12px 14px; }
    .carousel-track.is-paginated{ min-height: 120px; }
    .media-mentions h2{ white-space:normal; max-width:none; font-size:1.35rem; }
    .media-filter-btn{ min-height:44px; }
    .media-meta, .media-col-count, .filter-group-label, .filter-chip, .filter-more summary, .filter-subgroup-label{ font-size:0.75rem; }
    .field input, .field select, .field textarea{ font-size:1rem; }
    /* Texto de apoio a 1rem no celular (TIP O1, 2026-09-29): a .88rem ficava em 14 px. */
    .service-card p, .team-bio, .process-content p, .nome-node-panel p{ font-size: 1rem; }
    .modal{ padding:30px 20px 24px; }
    .filter-actions{ flex-wrap:wrap; }
    .filter-actions .btn{ min-height:44px; }
    .carousel-dots{ display:none; }
    .about{ padding: 56px 0; }
    .instagram{ padding: 56px 0; }
    .instagram-head{ align-items: flex-start; }
    .contact{ padding: 56px 0; }
    footer{ padding:20px 0; }
    .footer-grid{ grid-template-columns:minmax(0,1fr) minmax(0,1.2fr); gap:14px 22px; }
    .footer-brand{ grid-column:1 / -1; justify-self:center; min-height:44px; }
    .footer-information-list > span{ min-height:36px; }
    .footer-column a,
    .footer-link-button{ min-height:var(--ctrl); }
  }

