:root{
  --navy-950:#0F172A;
  --navy-900:#1E293B;
  --navy-800:#334155;
  --navy-700:#475569;
  --blue-600:#059669;
  --blue-500:#10B981;
  --orange-solid:#10B981;
  --taupe:#64748B;
  /* A familia "blue" e VERDE desde a troca de identidade: os nomes ficaram,
     os valores viraram esmeralda. Quem for definir um tom novo aqui tem de
     seguir a esmeralda, e nao o azul que o nome sugere. */
  --blue-700:#047857;
  --blue-300:#6EE7B7;
  --blue-100:#D1FAE5;
  --blue-50:#ECFDF5;
  --gray-900:#0F172A;
  --gray-800:#1E293B;
  --gray-700:#475569;
  /* Degrau que faltava. Era usado em 38 lugares sem nunca ter sido definido,
     e `color` com variavel inexistente HERDA a cor do pai -- entao todo
     texto secundario saia na cor do corpo, mais escuro do que devia. O valor
     e o meio exato entre o 700 e o 500, que e o papel que esses 38 usos
     pedem: legenda, descricao e nota. */
  --gray-600:#56657A;
  --gray-500:#64748B;
  --gray-400:#94A3B8;
  --gray-300:#CBD5E1;
  --gray-200:#E2E8F0;
  --gray-100:#F1F5F9;
  --gray-50:#F8FAFC;
  --white:#ffffff;
  --line:#E2E8F0;
  --amber:#059669;
  /* ---------- Tipografia ----------
     Poppins em tudo (títulos e corpo) — linguagem tipográfica única,
     estilo SaaS B2B. System-ui segue como fallback caso a fonte web
     não carregue. Páginas de curso (.courses-page) mantêm a dupla
     Montserrat/Playfair Display antiga — ver overrides mais abaixo. */
  --serif: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
  --sans: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
  --mono: ui-monospace, 'SFMono-Regular', Menlo, Consolas, 'Liberation Mono', monospace;
  /* Escala tipográfica consistente (referência — os componentes já usam
     tamanhos próximos a esta escala; os pesos e o ritmo abaixo é que
     ficam centralizados aqui para todo o site). */
  --lh-heading: 1.15;
  --lh-body: 1.7;
  --ls-heading: -0.025em;
  --fw-heading: 600;
  --fw-heading-strong: 700;
  --fw-body: 400;
  --fw-body-medium: 500;
  --radius: 10px;
  --shadow-sm: 0 1px 2px rgba(15,23,42,0.06), 0 1px 1px rgba(15,23,42,0.04);
  --shadow-md: 0 8px 24px rgba(15,23,42,0.10);
  --shadow-lg: 0 20px 48px rgba(15,23,42,0.16);
  --maxw: 1180px;
  /* Pílula do nav flutuante — ver bloco NAV mais abaixo. Centralizados aqui
     porque várias regras fora desse bloco (drawer mobile, painel de busca,
     min-height de telas com .auth-wrap/.dash-shell) precisam do mesmo
     número pra ficar logo abaixo da pílula, não de 64px fixo como antes. */
  --nav-offset: 14px;
  --nav-h: 64px;
}

*{box-sizing:border-box;}
/* background aqui, não só em body: sem isso, rolar além do topo (gesto de
   rolagem elástico do trackpad/touch) expõe o branco padrão do <html> por
   cima da pílula do nav — ela é position:fixed e não acompanha o rebote,
   então o branco aparecia como uma tarja acima dela. */
html{scroll-behavior:smooth; background:var(--navy-950);}
body{
  margin:0;
  font-family:var(--sans);
  font-weight:var(--fw-body);
  font-size:16px;
  color:var(--gray-900);
  background:var(--gray-50);
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;
  line-height:1.6;
}
/* .nav virou position:fixed (pílula flutuante) — saiu do fluxo normal, então
   o corpo precisa desse respiro no topo pra o conteúdo não nascer embaixo
   dela. :has() escopa isso só às páginas que de fato incluem a nav (ver
   base.html — banco de questões e Studio dispensam o bloco inteiro e não
   devem ganhar esse espaço vazio no topo). */
body:has(> .nav){padding-top:calc(var(--nav-offset) + var(--nav-h) + 20px);}
/* Páginas de curso (catálogo/player/bloqueado) ficam de fora da troca de
   fonte pra Poppins — mantêm a dupla Montserrat/Playfair Display de antes.
   O <link> dessas fontes é carregado à parte, via {% block extra_head %}
   nos próprios templates de app/templates/courses/. */
.courses-page{
  --serif: 'Playfair Display', Georgia, 'Iowan Old Style', 'Times New Roman', 'Noto Serif', serif;
  --sans: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
  --lh-heading: 1.24;
  --ls-heading: -0.006em;
}

img,svg{display:block;max-width:100%;}
a{color:inherit;}
h1,h2,h3,h4{font-family:var(--serif); font-weight:var(--fw-heading); line-height:var(--lh-heading); letter-spacing:var(--ls-heading); margin:0; color:var(--navy-900);}
/* Escala tipográfica base para h1-h3 sem classe própria — títulos que já têm
   estilo específico (.hero h1, .section__title etc.) continuam com o deles. */
h1{font-size:72px; margin-bottom:24px;}
h2{font-size:48px; margin-bottom:24px;}
h3{font-size:28px; margin-bottom:16px;}
@media(max-width:1024px){
  h1{font-size:48px;}
  h2{font-size:36px;}
  h3{font-size:24px;}
}
@media(max-width:768px){
  h1{font-size:32px;}
  h2{font-size:26px;}
  h3{font-size:20px;}
}
small, .small{font-size:14px; line-height:1.6;}
.meta, .caption{font-size:12px; font-weight:500; letter-spacing:0.05em;}
p{margin:0;}
ul{margin:0;padding:0;}
.wrap{max-width:var(--maxw); margin:0 auto; padding:0 28px;}

/* ---------- Skip link ---------- */
.skip-link{position:absolute; left:-999px; top:0; background:var(--navy-900); color:#fff; padding:10px 16px; z-index:999; border-radius:0 0 8px 0;}
.skip-link:focus{left:0;}

/* ---------- Reading progress ---------- */
.progress-bar{position:fixed; top:0; left:0; height:2.5px; width:0%; background:var(--navy-700); z-index:200; transition:width .08s linear;}

/* ---------- NAV ----------
   Pílula flutuante fixa, inspirada na barra do site da ROIT: solta do topo
   (não mais colada nas bordas), cantos arredondados, fundo com desfoque
   (glass) e um brilho verde — a cor de destaque REAL do site, ver a nota
   sobre a família "blue" ser esmeralda lá no :root, não um azul literal
   copiado da ROIT — que desliza devagar atrás do conteúdo (.nav__glow),
   dando a sensação de "viva" que foi o pedido original.

   Estrutura e IDs inalterados: nav-toggle.js, nav-more.js e
   global-search.js continuam lendo exatamente os mesmos seletores de
   sempre. position:fixed (em vez de sticky) já resolve sozinho o "fica
   fixa no topo ao rolar" sem precisar de JS nenhum.

   Abaixo de 1024px o comportamento não muda em nada: mesma gaveta de
   hambúrguer de sempre (ver o media query mais abaixo), só que agora
   dentro da pílula em vez de uma barra colada na borda — só a posição
   (top:64px) do drawer e do painel de busca precisou acompanhar o novo
   deslocamento (--nav-offset + --nav-h). Acima de 1024px, as duas linhas
   de antes (marca+busca+conta / categorias) viram UMA linha só — ver
   @media(min-width:1025px) mais abaixo, que "desembrulha" .nav__top com
   display:contents para intercalar seus filhos com os de .nav__links via
   `order`, sem tocar em HTML/JS nenhum. O breakpoint original era 1200px
   (mesmo valor de --maxw); baixado pra 1024px porque um notebook comum
   com a janela do navegador não-maximizada (ou com zoom/escala do SO)
   cai facilmente nessa faixa, e ficava preso na gaveta sem precisar. */
.nav{
  /* Centralizado com left/right+margin, NÃO transform:translateX(-50%) —
     um transform aqui viraria o "containing block" de TUDO que é
     position:fixed/absolute lá dentro (a gaveta mobile #navLinks e o
     painel de busca), que passariam a se ancorar na pílula (~64px de
     altura) em vez da viewport inteira. Achado quebrando a gaveta mobile
     bem na hora de testar — ver a nota no MDN sobre transform criar
     containing block. */
  position:fixed; top:var(--nav-offset); left:0; right:0; margin:0 auto;
  width:calc(100% - 32px); max-width:1200px; z-index:100;
  border-radius:28px;
  /* "visible", não "hidden": quem recorta o brilho pra caber nos cantos
     arredondados é a camada própria .nav__glow logo abaixo, não o .nav —
     os painéis de dropdown (.nav-more__panel) e os resultados de busca
     precisam poder escapar da pílula pra baixo, sem ficar cortados. */
  overflow:visible;
}
/* O glass (fundo + blur + sombra) mora num ::before, NÃO direto em .nav.
   backdrop-filter em .nav criaria um "containing block" novo pra tudo que é
   position:fixed/absolute lá dentro — a gaveta mobile (#navLinks) e o
   painel de busca passariam a se ancorar na pílula (~64px) em vez da
   viewport inteira (o mesmíssimo bug do transform:translateX, documentado
   acima — só que com backdrop-filter no lugar do transform). Um ::before
   tem filter/backdrop-filter próprio sem "contaminar" o .nav real. */
.nav::before{
  content:""; position:absolute; inset:0; z-index:-1; border-radius:inherit;
  background:rgba(15,23,42,0.74);
  backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px);
  box-shadow:
    0 20px 46px -12px rgba(0,0,0,0.55),
    inset 0 1px 0 rgba(255,255,255,0.07),
    0 0 36px -10px rgba(16,185,129,0.28);
}
/* Camada do brilho: cobre a pílula inteira, recorta A SI MESMA nos mesmos
   cantos (border-radius:inherit) e fica atrás do conteúdo (z-index:0) — o
   conteúdo de verdade (.nav__top, .nav__links) recebe z-index:1 abaixo. */
.nav__glow{position:absolute; inset:0; overflow:hidden; border-radius:inherit; z-index:0; pointer-events:none;}
.nav__glow-blob{
  position:absolute; top:-55%; left:-6%; width:240px; height:150px;
  background:radial-gradient(50% 50%, rgba(16,185,129,0.55) 0%, rgba(16,185,129,0) 100%);
  filter:blur(32px);
  animation:navGlowSweep 4.8s ease-in-out infinite alternate;
}
@keyframes navGlowSweep{
  from{transform:translateX(0) scale(1);}
  to{transform:translateX(560px) scale(1.18);}
}
@media(prefers-reduced-motion:reduce){
  .nav__glow-blob{animation:none;}
}
.nav__top{
  position:relative; z-index:1; /* acima da camada de brilho */
  /* Mesmo valor de --maxw (usado no resto do site) — com os itens
     secundários agrupados nos menus "Ferramentas"/"Conteúdo" (ver
     .nav-more), o que sobra inline cabe numa linha só bem antes disso.
     Ver breakpoint do hambúrguer logo abaixo, ajustado pro mesmo valor. */
  max-width:1180px; margin:0 auto; padding:0 24px;
  display:flex; align-items:center; gap:20px;
  height:var(--nav-h);
}
.brand{display:flex; align-items:center; gap:10px; text-decoration:none; color:#fff; flex-shrink:0;}
.brand__logo{height:32px; width:auto; display:block;}

/* 2ª linha (blocos de categoria), visível só abaixo de 1024px — acima
   disso ela é "desembrulhada" para dentro da mesma linha da marca (ver
   @media(min-width:1025px) no fim deste bloco). Sem fundo próprio: a
   pílula inteira já tem o glass de .nav, não precisa de uma 2ª camada
   opaca por trás das categorias como na barra antiga colada na borda. */
.nav__links{
  position:relative; z-index:1;
  display:flex; gap:2px; align-items:center; justify-content:flex-start;
  max-width:1180px; margin:0 auto; padding:4px 24px 8px;
}
.nav__links a{
  color:var(--gray-300); text-decoration:none; font-size:13.5px; font-weight:500;
  padding:9px 12px; border-radius:7px; transition:all .15s ease; white-space:nowrap;
}
.nav__links a:hover{color:#fff; background:rgba(255,255,255,0.08);}
/* Mesmo tratamento de botão redondo do .nav-search__toggle (app.css) — antes
   o hambúrguer era só um ícone solto, sem fundo nenhum, flutuando perto da
   borda arredondada da pílula: em telas estreitas (~360px e abaixo) ele
   ficava raspando/saindo do canto arredondado, parecendo quebrado. Um
   círculo de verdade por trás resolve os dois problemas de uma vez — dá
   uma área de toque clara e deixa uma margem visual real até a borda. */
.nav__toggle{
  display:none; width:36px; height:36px; border-radius:50%; border:none;
  background:rgba(255,255,255,0.08); color:#fff; cursor:pointer; flex-shrink:0;
  align-items:center; justify-content:center; transition:background .15s ease;
}
.nav__toggle:hover, .nav__toggle[aria-expanded="true"]{background:rgba(255,255,255,0.18);}
.nav__toggle .icon{width:17px; height:17px;}
.nav__top-right{display:flex; align-items:center; gap:14px; margin-left:auto; flex-shrink:0;}

/* Entrar / Sair / Cadastre-se, agora na linha de cima (fundo escuro nos
   dois casos — mesma cor de texto/hover de .nav__links a, repetida aqui
   porque .nav__top-right não é descendente de .nav__links). */
.nav__top-link{
  color:var(--gray-300); text-decoration:none; font-size:13.5px; font-weight:500;
  padding:9px 12px; border-radius:7px; transition:all .15s ease; white-space:nowrap;
  background:none; border:none; cursor:pointer; font-family:var(--sans);
}
.nav__top-link:hover{color:#fff; background:rgba(255,255,255,0.08);}
.nav__top-link--button{font-size:13.5px;}
.nav__top-link--cta{background:var(--blue-600); color:#fff;}
.nav__top-link--cta:hover{background:var(--blue-500); color:#fff;}

/* Ícone de "Minha área" — fica fora de .nav__links de propósito, para não
   sumir dentro do menu hambúrguer colapsado e manter destaque próprio. */
.nav__user{
  flex-shrink:0; width:38px; height:38px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  background:linear-gradient(135deg, var(--blue-500) 0%, var(--blue-600) 100%);
  box-shadow:0 0 0 2px rgba(16,185,129,0.28), 0 2px 8px rgba(0,0,0,0.35);
  text-decoration:none; transition:transform .15s ease, box-shadow .15s ease;
}
.nav__user:hover, .nav__user:focus-visible{transform:translateY(-2px); box-shadow:0 0 0 2px rgba(16,185,129,0.45), 0 6px 14px rgba(0,0,0,0.4);}
.nav__user-emoji{font-size:18px; line-height:1;}
.nav__user-avatar{width:100%; height:100%; border-radius:50%; background-size:cover; background-position:center;}
.nav__user-avatar--initials{display:flex; align-items:center; justify-content:center; font-size:13px; font-weight:700; color:#fff; letter-spacing:0.02em;}

/* Testado até 1024px com o pior caso (5 categorias, incl. Administração, +
   busca em ícone + conta logada) sem vazar — abaixo disso vira gaveta de
   hambúrguer em vez de arriscar overflow-x. */
@media(max-width:1024px){
  .nav__links{
    position:fixed; top:calc(var(--nav-offset) + var(--nav-h) + 10px); left:0; right:0; bottom:0;
    background:var(--navy-950); flex-direction:column; align-items:stretch;
    padding:14px; gap:2px; margin:0; border-top:none;
    transform:translateX(100%); transition:transform .25s ease;
    overflow-y:auto;
  }
  .nav__links.open{transform:translateX(0);}
  .nav__links a{padding:13px 14px; font-size:15px; border-bottom:1px solid rgba(255,255,255,0.06);}
  .nav__toggle{display:flex;}
}

/* 1025px+: as duas linhas viram uma só, dentro da pílula — ver o
   comentário grande no início do bloco NAV. .nav__top vira display:contents
   (some como caixa, promove .brand/.nav-search/.nav__top-right a filhos
   diretos de .nav) e todo mundo se intercala por `order`, na mesma ordem
   visual da ROIT: marca | categorias | busca | conta. */
@media(min-width:1025px){
  .nav{display:flex; align-items:center; gap:16px; padding:0 24px;}
  .nav__top{display:contents;}
  .nav__links{
    max-width:none; margin:0; padding:0; order:2;
  }
  .brand{order:1;}
  .nav-search{order:3;}
  .nav__top-right{order:4;}
}

/* Celular: .nav__top não cabia em 375px — marca (142px, largura fixa da
   logo) + busca + conta, com 28px de respiro de cada lado e os dois
   grupos travados com flex-shrink:0, passavam de 370px de conteúdo
   precisando de ~319px disponíveis. O nav inteiro vazava (scrollWidth
   maior que o viewport), empurrando a página inteira pra largura errada
   — não um corte visual isolado, o layout viewport do navegador crescia
   pra caber o nav, e o resto da página vinha cortado atrás dele. */
@media(max-width:480px){
  .nav__top{padding:0 12px; gap:6px;}
  .brand__logo{height:24px;}
  .nav__top-right{gap:6px;}
  .nav-search__toggle{width:30px; height:30px;}
  .nav__toggle{width:30px; height:30px;}
  .nav__top-link{padding:7px 8px; font-size:13px;}
  /* "Cadastre-se" (o botão cheio) sai, "Entrar" fica — dois CTAs de texto
     grande competindo com a busca e o hambúrguer era o que mais apertava
     a pílula nessa largura, a ponto do hambúrguer raspar no canto
     arredondado. "Entrar" sozinho já cobre o caso de quem não tem conta. */
  .nav__top-link--cta{display:none;}
  /* "Entrar" já cobre o anônimo — o ícone de conta genérico ao lado é
     redundante ali, e o único dos três que dá pra tirar sem perder uma
     ação. Weblogado continua tendo "Sair" + o ícone (vira o avatar de
     verdade), então fica. */
  .nav__top-right:has(.nav__top-link--cta) .nav__user{display:none;}
}
@media(max-width:390px){
  .brand__logo{height:20px;}
  .nav__top{gap:4px;}
}
@media(max-width:340px){
  .brand__logo{height:18px;}
  .nav__top{padding:0 8px; gap:2px;}
  .nav-search__toggle{width:26px; height:26px;}
  .nav__toggle{width:26px; height:26px;}
  .nav__top-link{padding:5px 6px; font-size:12px;}
}

/* ---------- HERO ---------- */
.hero{
  background:linear-gradient(160deg, var(--navy-950) 0%, var(--navy-800) 75%, var(--navy-700) 140%);
  color:#fff; padding:64px 0 56px; position:relative; overflow:hidden;
}
.hero::after{
  content:""; position:absolute; inset:0;
  background-image:radial-gradient(circle at 82% 18%, rgba(255,255,255,0.08), transparent 42%),
                    radial-gradient(circle at 8% 92%, rgba(255,255,255,0.06), transparent 40%);
  pointer-events:none;
}
.hero__inner{position:relative; display:grid; grid-template-columns:1.3fr 1fr; gap:48px; align-items:center;}
.hero__eyebrow{
  display:inline-flex; align-items:center; gap:8px; font-family:var(--mono); font-size:11.5px;
  letter-spacing:0.09em; text-transform:uppercase; color:var(--gray-200);
  background:rgba(255,255,255,0.08); border:1px solid rgba(255,255,255,0.15);
  padding:6px 12px; border-radius:99px; margin-bottom:22px;
}
.hero__eyebrow .dot{width:6px;height:6px;border-radius:50%; background:#6fbf73; box-shadow:0 0 0 3px rgba(111,191,115,0.25);}
.hero h1{font-size:clamp(34px,4.6vw,58px); font-weight:600; color:#fff; line-height:1.08; letter-spacing:-0.03em; margin-bottom:18px;}
.hero h1 em{font-style:normal; color:var(--blue-500);}
.hero__wink{
  font-family:var(--serif); font-style:italic; font-size:14px; color:var(--gray-300);
  margin:-8px 0 18px; opacity:0.9;
}
.hero__lede{font-size:16.5px; font-weight:var(--fw-body); line-height:1.65; color:var(--gray-200); max-width:56ch; margin-bottom:28px;}
.hero__ctas{display:flex; gap:12px; flex-wrap:wrap;}
.btn{
  display:inline-flex; align-items:center; gap:8px; font-weight:600; font-size:14px;
  padding:12px 20px; border-radius:8px; text-decoration:none; cursor:pointer; border:1px solid transparent;
  transition:all .15s ease; font-family:var(--sans);
}
.btn--primary{background:#fff; color:var(--navy-900);}
.btn--primary:hover{background:var(--gray-100); transform:translateY(-1px);}
.btn--ghost{background:rgba(255,255,255,0.06); color:#fff; border-color:rgba(255,255,255,0.28);}
.btn--ghost:hover{background:rgba(255,255,255,0.14);}

/* Variante dos CTAs do hero: pill verde + contorno branco, uppercase.
   Escopado a .hero__ctas--v2 para não alterar .btn--primary/.btn--ghost
   usados em todo o resto do site (upsells TAX PRO, dashboards etc.). */
.hero__ctas--v2 .btn{
  padding:13px 30px; font-weight:700; text-transform:uppercase; letter-spacing:0.06em; font-size:13px;
  transition:transform .25s ease, box-shadow .25s ease, background .25s ease, border-color .25s ease;
}
.hero__ctas--v2 .btn--primary{background:var(--blue-600); color:#fff; border-color:var(--blue-600);}
.hero__ctas--v2 .btn--primary:hover{
  background:var(--blue-500); border-color:var(--blue-500); transform:translateY(-2px);
  box-shadow:0 4px 12px rgba(5,150,105,0.3);
}
.hero__ctas--v2 .btn--ghost{background:transparent; border:2px solid #fff; color:#fff;}
.hero__ctas--v2 .btn--ghost:hover{
  background:rgba(255,255,255,0.1); transform:translateY(-2px); box-shadow:0 4px 12px rgba(255,255,255,0.2);
}
@media(max-width:640px){
  .hero__ctas--v2{flex-direction:column; align-items:stretch;}
  .hero__ctas--v2 .btn{text-align:center;}
}

/* Empilha o hero de apresentação (hero-intro) sobre o hero do mapa —
   o degradê vive só no wrapper para os dois blocos parecerem uma única
   faixa contínua, sem corte de cor entre eles (.hero individual fica
   transparente aqui dentro). */
.hero-stack{
  /* Termina achatado em --navy-950 (sem clarear no 3º stop) de propósito —
     a home agora emenda direto com .home-hub-zone/.wce/.stats-section, e um
     degrade que clareia no final cria uma emenda visível bem ali (mesmo bug
     já corrigido em .pricing-hero, ver app.css). */
  background:linear-gradient(165deg, #060C1A 0%, var(--navy-950) 55%);
  position:relative; overflow:hidden;
}
.hero-stack .hero{background:none;}
.hero-stack .hero::after{display:none;} /* evita 2 brilhos radiais empilhados criando uma linha visível na emenda */
.hero-stack .hero-intro{overflow:visible;} /* sem isso o próprio brilho da ilustração era cortado reto na base da seção */
.hero-intro{padding-bottom:32px;}
.hero-intro .hero__inner{grid-template-columns:1.1fr 1fr; position:relative;}
/* texto sempre por cima do brilho da ilustração — sem isso o halo (que
   estoura a caixa da imagem por causa do blur) podia pintar por cima
   das palavras onde as duas áreas se cruzam */
.hero-intro__copy{position:relative; z-index:2;}
.hero-intro__kicker{
  font-family:var(--sans); font-weight:500; font-size:clamp(20px,2.6vw,28px);
  margin:0 0 8px; line-height:1.3; letter-spacing:-0.005em;
  background:linear-gradient(90deg, #FFFFFF 0%, #D1FAE5 30%, #6EE7B7 65%, #10B981 100%);
  -webkit-background-clip:text; background-clip:text; color:transparent;
}
.hero-intro__cta-btn{
  background:var(--blue-600); color:#fff; border-radius:999px; padding:15px 32px;
  font-size:15px; font-weight:600; text-transform:none; letter-spacing:normal;
}
.hero-intro__cta-btn:hover{background:var(--blue-500); transform:translateY(-1px);}
.hero-intro__cta-note{font-size:13px; color:var(--gray-300); margin-top:12px;}
/* Ilustração + fio agora são UMA imagem só (o fio já nasce ligado ao
   núcleo). Fica fora do fluxo do grid (position:absolute) pra não esticar
   a altura da seção — só o texto define a altura do hero-intro — e o fio
   desce por conta própria até a área do mapa. z-index abaixo de
   .hero__map (2) faz a ponta de baixo sumir atrás do mapa; como o mapa só
   existe na seção seguinte, isso não tapa os painéis lá em cima. */
.hero-intro__art{
  position:absolute; top:0; right:0; z-index:1; overflow:visible; pointer-events:none;
  /* O brilho mora AQUI, no pai, e não no <img> logo abaixo — é por causa da
     ordem em que o CSS aplica as coisas. `mask-image` recorta na border-box,
     e esse recorte acontece DEPOIS do filtro; com os dois no mesmo elemento,
     o halo que o drop-shadow desenha PARA FORA da caixa batia na borda e era
     cortado reto, aparecendo como um risco vertical na lateral esquerda da
     ilustração. Separados, a máscara recorta só o desenho e o brilho sai por
     fora sem encontrar borda nenhuma.

     halo reduzido mais ~25% (36px -> 27px, opacidade 0.24 -> 0.19): pra
     ficar com cara de SaaS premium o verde precisa ler como luz emitida
     pelos conectores/núcleo, não como a cor do objeto inteiro */
  filter:drop-shadow(0 20px 40px rgba(0,0,0,0.5)) drop-shadow(0 0 27px rgba(16,185,129,0.19));
}
.hero-intro__art img{
  display:block; width:min(36vw, 620px); height:auto;
  /* JÁ TEVE uma máscara aqui, e o motivo dela acabou. A arte antiga
     terminava num fio de circuito que descia até a área do mapa, e como o
     mapa muda de proporção com a largura da tela, a ponta às vezes aparecia
     pela lateral do desenho do país; o fade a apagava antes disso.

     Hoje o mapa é uma seção própria, longe daqui, e a arte nova termina em
     base e reflexo — desenho, não sobra. A máscara passou a cortar a base
     no meio. Como .hero-intro__art tem um único usuário no site inteiro (o
     hero da Home), ela sai daqui em vez de ganhar um `mask:none` por cima
     em app.css: duas regras brigando escondem qual das duas manda. */
}
@media(max-width:980px){
  .hero-intro__art{display:none;}
}

/* countdown card */
.countdown{
  background:rgba(255,255,255,0.07); border:1px solid rgba(255,255,255,0.16);
  border-radius:14px; padding:22px 24px;
}
.countdown__label{font-family:var(--mono); font-size:10.5px; letter-spacing:0.08em; text-transform:uppercase; color:var(--gray-300); margin-bottom:6px;}
.countdown__title{font-family:var(--serif); font-size:18px; font-weight:600; color:#fff; margin-bottom:16px; line-height:1.3;}
.countdown__grid{display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:14px;}
.countdown__unit{background:rgba(15,23,42,0.35); border-radius:8px; padding:10px 4px; text-align:center;}
.countdown__num{font-family:var(--mono); font-size:22px; font-weight:600; color:#fff;}
.countdown__unitlabel{font-size:9.5px; color:var(--gray-300); text-transform:uppercase; letter-spacing:0.05em; margin-top:2px;}
.countdown__note{font-size:12.5px; color:var(--gray-300); line-height:1.5; margin-top:10px;}
.countdown__note strong{color:#fff;}
/* Nota completa fica recolhida por padrão (o título acima já resume o fato
   principal) — mesmo padrão de link com chevron giratório do
   .cst-clastrib__summary em codigos_cst.html, só que em contexto escuro. */
.countdown__more{
  display:flex; align-items:center; gap:6px; list-style:none; cursor:pointer;
  font-size:12px; font-weight:600; color:var(--blue-300);
}
.countdown__more::-webkit-details-marker{display:none;}
.countdown__more::before{content:"›"; transition:transform .15s ease;}
.countdown__details[open] .countdown__more::before{transform:rotate(90deg);}

/* ---------- SECTION generic ---------- */
.section{padding:64px 0;}
.section--alt{background:var(--white); border-top:1px solid var(--line); border-bottom:1px solid var(--line);}
.section__head{max-width:720px; margin:0 auto 40px; text-align:center;}
.section__eyebrow{font-family:var(--mono); font-size:11px; letter-spacing:0.1em; text-transform:uppercase; color:var(--navy-800); font-weight:600; margin-bottom:10px; display:block;}
.section__title{font-size:clamp(24px,3vw,32px); margin-bottom:12px;}
.section__desc{color:var(--gray-700); font-size:15.5px;}

/* Variante do cabeçalho de seção para "Linha do tempo": troca o eyebrow
   genérico pelo próprio selo "VOCÊ ESTÁ AQUI" (reaproveita .tl-badge, já
   usado no card do marco atual) como gancho da seção, alinhado à esquerda
   em vez do bloco centralizado padrão. */
.section__head--timeline{text-align:left; max-width:560px; margin:0 0 40px;}
.section__head--timeline .tl-badge{margin-bottom:10px;}

/* Variante para "47 Temas": o próprio número vira o elemento visual do
   cabeçalho (em vez de repetir "47" no eyebrow e no título), com o
   título e a descrição ao lado em vez de embaixo. */
.section__head--numeral{display:flex; align-items:center; gap:18px; text-align:left; max-width:640px; margin:0 0 32px;}
.section__head-numeral{font-family:var(--serif); font-size:52px; font-weight:700; color:var(--blue-500); line-height:1; flex-shrink:0;}
@media(max-width:768px){
  .section__head--numeral{gap:12px;}
  .section__head-numeral{font-size:38px;}
}

/* ---------- REGULATORY CARDS ---------- */
.reg-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:16px;}
.reg-card{
  background:var(--white); border:1px solid var(--line); border-radius:var(--radius);
  padding:20px; box-shadow:var(--shadow-sm); border-top:3px solid var(--navy-800);
}
.reg-card__top{display:flex; justify-content:space-between; align-items:baseline; gap:8px; margin-bottom:10px; flex-wrap:wrap;}
.reg-card__code{font-family:var(--mono); font-size:11.5px; font-weight:600; color:var(--navy-800); background:var(--gray-100); padding:3px 8px; border-radius:5px;}
.reg-card__date{font-family:var(--mono); font-size:11px; color:var(--gray-500);}
.reg-card__title{font-size:16px; margin-bottom:8px; line-height:1.3;}
.reg-card__desc{font-size:13.5px; color:var(--gray-700); line-height:1.5;}
.reg-card__pdf{
  display:inline-flex; align-items:center; gap:6px; margin-top:12px; font-size:12px; font-weight:600;
  color:var(--navy-800); text-decoration:none; padding-top:10px; border-top:1px solid var(--gray-100);
}
.reg-card__pdf:hover{color:var(--navy-900);}
.nt-teaser{
  display:flex; align-items:center; justify-content:center; gap:8px; margin-top:20px; padding:14px 20px;
  background:var(--gray-50); border:1px dashed var(--navy-700); border-radius:10px; text-decoration:none;
  color:var(--navy-800); font-size:13.5px; font-weight:600; text-align:center;
}
.nt-teaser:hover{background:var(--gray-100);}
.cst-highlight{
  position:relative; display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:8px; margin-top:20px; min-height:210px; border-radius:14px; overflow:hidden; text-decoration:none;
  background-image:url('/static/img/cst-card-bg.jpg'); background-size:cover; background-position:center;
  text-align:center; box-shadow:0 4px 16px rgba(15,23,42,0.16); transition:transform .2s ease, box-shadow .2s ease;
}
.cst-highlight:hover{transform:translateY(-2px); box-shadow:0 10px 26px rgba(15,23,42,0.26);}
.cst-highlight::before{
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(15,23,42,0.35) 0%, rgba(15,23,42,0.6) 55%, rgba(15,23,42,0.92) 100%);
}
.cst-highlight__label{
  position:relative; font-family:var(--serif); font-size:52px; font-weight:700; color:#fff;
  letter-spacing:0.02em; line-height:1;
}
.cst-highlight__tag{
  position:relative; font-family:var(--serif); font-style:italic; font-weight:600; font-size:16px;
  color:var(--gray-200); letter-spacing:0.01em;
}
.cst-highlight__sub{
  position:relative; display:inline-flex; align-items:center; gap:7px; font-size:13.5px; font-weight:500;
  color:var(--gray-300); max-width:32ch; margin-top:2px;
}
.cst-highlight__sub .icon{width:15px; height:15px;}
@media(max-width:640px){
  .cst-highlight{min-height:170px;}
  .cst-highlight__label{font-size:38px;}
  .cst-highlight__tag{font-size:14px;}
  .cst-highlight__sub{font-size:12.5px; max-width:26ch;}
}
.nf-highlight{
  position:relative; display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:8px; margin-top:20px; min-height:210px; border-radius:14px; overflow:hidden; text-decoration:none;
  background-image:url('/static/img/nf-card-bg.jpg'); background-size:cover; background-position:center;
  text-align:center; box-shadow:0 4px 16px rgba(15,23,42,0.16); transition:transform .2s ease, box-shadow .2s ease;
}
.nf-highlight:hover{transform:translateY(-2px); box-shadow:0 10px 26px rgba(15,23,42,0.26);}
.nf-highlight::before{
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(15,23,42,0.35) 0%, rgba(15,23,42,0.6) 55%, rgba(15,23,42,0.92) 100%);
}
.nf-highlight__label{
  position:relative; font-family:var(--serif); font-size:42px; font-weight:700; color:#fff;
  letter-spacing:0.01em; line-height:1.1;
}
.nf-highlight__sub{
  position:relative; display:inline-flex; align-items:center; gap:7px; font-size:13.5px; font-weight:500;
  color:var(--gray-300); max-width:32ch;
}
.nf-highlight__sub .icon{width:15px; height:15px;}
@media(max-width:640px){
  .nf-highlight{min-height:170px;}
  .nf-highlight__label{font-size:30px;}
  .nf-highlight__sub{font-size:12.5px; max-width:26ch;}
}
.pill{
  display:inline-block; font-size:12px; font-weight:600; color:var(--navy-800); background:var(--white);
  border:1px solid var(--line); padding:7px 14px; border-radius:99px; text-decoration:none; transition:all .15s ease;
}
.pill:hover{border-color:var(--navy-700); color:var(--navy-800); background:var(--gray-50);}

/* ---------- TIMELINE ---------- */
.timeline{position:relative; padding-left:28px;}
.timeline::before{content:""; position:absolute; left:5px; top:6px; bottom:6px; width:2px; background:var(--gray-200);}
.tl-item{position:relative; padding-bottom:30px;}
.tl-item:last-child{padding-bottom:0;}
.tl-dot{
  position:absolute; left:-28px; top:6px; width:12px; height:12px; border-radius:50%;
  background:var(--gray-300); border:2px solid var(--white); box-shadow:0 0 0 2px var(--gray-300);
}
.tl-item--done .tl-dot{background:var(--navy-800); box-shadow:0 0 0 2px var(--navy-800);}
.tl-item--current .tl-dot{
  background:var(--navy-900); box-shadow:0 0 0 2px var(--navy-900);
  position:relative;
}
.tl-item--current .tl-dot::after{
  content:""; position:absolute; inset:-5px; border-radius:50%; border:2px solid var(--navy-900);
  opacity:0.5; animation:pulse-ring 2.4s ease-out infinite;
}
@keyframes pulse-ring{0%{transform:scale(0.7); opacity:0.55;}100%{transform:scale(1.7); opacity:0;}}
.tl-card{background:var(--white); border:1px solid var(--line); border-radius:var(--radius); padding:18px 20px; box-shadow:var(--shadow-sm);}
.tl-item--current .tl-card{border-color:var(--navy-800); box-shadow:var(--shadow-md);}
.tl-badge{
  display:inline-block; background:var(--navy-900); color:#fff; font-family:var(--mono); font-size:10px;
  letter-spacing:0.08em; padding:3px 9px; border-radius:99px; margin-bottom:8px; font-weight:600;
}
.tl-date{font-family:var(--mono); font-size:12px; color:var(--navy-800); font-weight:600; margin-right:10px;}
.tl-tag{font-size:11.5px; color:var(--gray-500); background:var(--gray-100); padding:2px 8px; border-radius:5px;}
.tl-title{font-size:16.5px; margin:8px 0 6px;}
.tl-desc{font-size:13.8px; color:var(--gray-700); line-height:1.55;}

/* ---------- STRUCTURE ---------- */
.struct-grid{display:grid; grid-template-columns:1fr 1fr; gap:28px;}
.struct-col{background:var(--white); border:1px solid var(--line); border-radius:12px; padding:24px; box-shadow:var(--shadow-sm);}
.struct-col__title{font-size:17px; margin-bottom:4px; display:flex; align-items:center; gap:8px;}
.struct-col__sub{font-family:var(--mono); font-size:11.5px; color:var(--gray-500); margin-bottom:18px; display:block;}
.book{display:flex; gap:14px; padding:14px 0; border-top:1px solid var(--gray-100);}
.book[hidden]{display:none;}
.book:first-of-type{border-top:none;}
.book__code{
  font-family:var(--mono); font-size:11px; font-weight:600; color:var(--white); background:var(--navy-800);
  padding:5px 8px; border-radius:5px; height:fit-content; flex-shrink:0; letter-spacing:0.03em;
  max-width:55%; white-space:normal;
}
.book__title{font-size:14.5px; margin-bottom:4px; color:var(--navy-900);}
.book__desc{font-size:13px; color:var(--gray-700); line-height:1.5;}

/* ---------- Theme search & print ---------- */
.tema-search-wrap{
  display:flex; align-items:center; gap:10px; max-width:640px; margin:0 auto 20px;
  background:var(--white); border:1px solid var(--gray-300); border-radius:9px; padding:0 14px;
}
.tema-search-icon{color:var(--gray-500); flex-shrink:0; display:flex;}
.tema-search-icon .icon{width:17px; height:17px;}
.tema-search{
  flex:1; border:none; outline:none; padding:12px 4px; font-size:14px; font-family:var(--sans);
  background:transparent; color:var(--gray-900); min-width:0;
}
.tema-search::placeholder{color:var(--gray-500);}
.tema-print-btn{
  display:flex; align-items:center; gap:7px; background:none; border:none; border-left:1px solid var(--gray-200);
  padding:10px 4px 10px 14px; font-size:12.5px; font-weight:600; color:var(--navy-800); cursor:pointer;
  font-family:var(--sans); flex-shrink:0; white-space:nowrap;
}
.tema-print-btn .icon{width:16px; height:16px;}
.tema-print-btn:hover{color:var(--navy-900);}
.tema-search-empty{text-align:center; color:var(--gray-500); font-size:13.5px; margin-bottom:20px;}
.theme--hidden, .block--hidden{display:none !important;}
@media(max-width:560px){
  .tema-print-btn span{display:none;}
  .tema-print-btn{border-left:none; padding-left:4px;}
}

/* ---------- BLOCKS / THEMES (accordion) ---------- */
.block{margin-bottom:44px; scroll-margin-top:80px;}
.block__head{display:flex; align-items:center; gap:14px; margin-bottom:20px;}
.block__num{
  font-family:var(--serif); font-size:20px; font-weight:600; color:#fff; background:var(--navy-900);
  width:40px; height:40px; border-radius:9px; display:flex; align-items:center; justify-content:center; flex-shrink:0;
}
.block__title{font-size:22px;}
.block__themes{display:flex; flex-direction:column; gap:10px;}

.theme{background:var(--white); border:1px solid var(--line); border-radius:10px; overflow:hidden;}
.theme[open]{border-color:var(--navy-700); box-shadow:var(--shadow-sm);}
.theme__summary{
  list-style:none; cursor:pointer; padding:16px 18px; display:flex; align-items:center; gap:14px;
  user-select:none;
}
.theme__summary::-webkit-details-marker{display:none;}
.icon{width:18px; height:18px; stroke:currentColor; fill:none; display:block;}
.theme__icon-wrap{
  width:34px; height:34px; border-radius:9px; background:var(--gray-100); color:var(--navy-800);
  display:flex; align-items:center; justify-content:center; flex-shrink:0;
}
.theme__heading{flex:1; display:flex; flex-direction:column; gap:3px; min-width:0;}
.theme__title{font-family:var(--serif); font-weight:600; font-size:15.5px; color:var(--navy-900);}
.theme__tags{font-family:var(--mono); font-size:11px; color:var(--gray-500);}
.theme__chevron{font-size:20px; color:var(--gray-400); transition:transform .2s ease; flex-shrink:0;}
.theme[open] .theme__chevron{transform:rotate(90deg); color:var(--navy-800);}
.theme__body{padding:0 18px 20px 52px;}
.theme__bullets{list-style:none; margin-bottom:16px;}
.theme__bullets li{
  position:relative; padding-left:16px; font-size:13.8px; color:var(--gray-700);
  margin-bottom:6px; line-height:1.5;
}
.theme__bullets li::before{content:"–"; position:absolute; left:0; color:var(--gray-500);}
.theme__details{background:var(--gray-50); border:1px solid var(--gray-200); border-radius:8px; padding:14px 16px;}
.theme__details-label{font-family:var(--mono); font-size:10.5px; letter-spacing:0.08em; text-transform:uppercase; color:var(--gray-500); margin-bottom:10px;}
.art{display:flex; gap:12px; padding:9px 0; border-top:1px solid var(--gray-200);}
.art:first-of-type{border-top:none;}
.art__code{
  font-family:var(--mono); font-size:10.8px; font-weight:600; color:var(--navy-800); background:var(--gray-100);
  padding:3px 7px; border-radius:4px; height:fit-content; flex-shrink:0; white-space:nowrap;
}
.art strong{font-size:13px; color:var(--navy-900); display:block; margin-bottom:2px;}
.art p{font-size:12.6px; color:var(--gray-700); line-height:1.5;}

/* ---------- TUTORIALS ---------- */
.tutorial-list{display:flex; flex-direction:column; gap:10px;}
.tutorial .theme__body{padding-left:52px;}
.tutorial__summary{font-size:14px; color:var(--gray-700); font-style:italic; padding-bottom:14px; margin-bottom:14px; border-bottom:1px solid var(--gray-200); line-height:1.55;}
.tutorial__content p{font-size:13.8px; color:var(--gray-700); line-height:1.7; margin-bottom:14px;}
.tutorial__content p:last-child{margin-bottom:0;}
.tutorial__content ul{list-style:none; margin:14px 0 0;}
.tutorial__content li{position:relative; padding-left:20px; font-size:13.5px; color:var(--gray-700); margin-bottom:9px; line-height:1.55;}
.tutorial__content li::before{content:""; position:absolute; left:0; top:7px; width:7px; height:7px; border-radius:2px; background:var(--navy-700);}

.hp-field{position:absolute; left:-9999px; top:auto; width:1px; height:1px; overflow:hidden;}

/* ---------- FOOTER ---------- */
.footer{background:var(--navy-950); color:var(--gray-300); padding:52px 0 26px;}
/* Duas faixas: a marca em cima, os cinco grupos de links embaixo. Abaixo de
   900px vira `auto-fit` com mínimo de 150px — cinco colunas cravadas numa
   tela estreita dariam 140px cada e os títulos quebrariam em duas linhas. */
.footer__top{
  display:grid; grid-template-columns:repeat(auto-fit, minmax(150px, 1fr));
  gap:36px 32px; padding-bottom:36px; border-bottom:1px solid rgba(255,255,255,0.1);
}
/* O bloco da marca ocupa sempre a linha inteira, e os cinco grupos de links
   ficam na linha de baixo. Quando a marca disputava a MESMA linha, sobrava
   espaço para quatro grupos e o quinto ("Fontes oficiais") caia sozinho numa
   segunda linha, embaixo do parágrafo — parecia um grupo esquecido em vez de
   uma coluna. */
.footer__sobre{grid-column:1 / -1; max-width:560px;}
@media(min-width:900px){
  .footer__top{grid-template-columns:repeat(5, minmax(0, 1fr));}
}
.footer__brand{display:flex; align-items:center; gap:10px; margin-bottom:16px;}
.footer__logo{height:30px; width:auto; display:block;}
.footer p{font-size:13px; line-height:1.6; color:var(--gray-300); max-width:42ch;}
.footer h4{color:#fff; font-size:13px; text-transform:uppercase; letter-spacing:0.06em; margin-bottom:14px; font-family:var(--sans); font-weight:600;}
.footer ul{list-style:none;}
.footer li{margin-bottom:9px;}
.footer a{color:var(--gray-300); text-decoration:none; font-size:13.3px;}
.footer a:hover{color:#fff;}
.footer__bottom{
  padding-top:22px; display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px;
  font-size:12px; color:var(--gray-500);
}
.footer__credit{font-size:12px; color:var(--gray-500);}
.footer__legal{display:flex; gap:16px;}
.footer__legal a{font-size:12px;}
.footer__credit strong{color:var(--gray-200); font-weight:600;}
.footer__disclaimer{font-size:11.5px; color:var(--gray-500); max-width:900px; margin-top:16px; line-height:1.6;}

.back-to-top{
  position:fixed; bottom:24px; right:24px; width:44px; height:44px; border-radius:50%;
  background:var(--navy-900); color:#fff; border:none; cursor:pointer;
  display:flex; align-items:center; justify-content:center; box-shadow:var(--shadow-lg);
  opacity:0; pointer-events:none; transition:opacity .2s ease, transform .2s ease; z-index:90;
}
.back-to-top .icon{width:20px; height:20px;}
.back-to-top.show{opacity:1; pointer-events:auto;}
.back-to-top:hover{transform:translateY(-2px);}

/* ---------- RESPONSIVE ---------- */
@media(max-width:980px){
  .hero__inner{grid-template-columns:1fr;}
  .reg-grid{grid-template-columns:1fr 1fr;}
  .struct-grid{grid-template-columns:1fr;}
  .footer__top{grid-template-columns:1fr; gap:28px;}
}
@media(max-width:640px){
  .wrap{padding:0 18px;}
  .reg-grid{grid-template-columns:1fr;}
  .countdown__grid{grid-template-columns:repeat(4,1fr);}
  .theme__body, .tutorial .theme__body{padding-left:18px;}
  .theme__summary{padding:14px;}
}

/* ---------- PRINT ---------- */
@media print{
  .nav, .progress-bar, .back-to-top, .hero__ctas, .countdown, .hero__eyebrow,
  .tema-search-wrap, .tema-search-empty, #blockNav, .theme__chevron,
  .footer__top ul, .nav__toggle{ display:none !important; }
  body{ background:#fff; color:#000; }
  .hero-stack{ background:#fff !important; }
  .hero-intro__art{ display:none !important; }
  .hero{ background:#fff !important; color:#000 !important; padding:12px 0 20px; }
  .hero__inner{ grid-template-columns:1fr; }
  .hero h1, .hero h1 em{ color:#000 !important; }
  .hero__lede{ color:#222 !important; }
  .section, .section--alt{ padding:18px 0; border:none; }
  .reg-card, .tl-card, .theme, .struct-col, .course-list{ box-shadow:none !important; border:1px solid #999 !important; }
  .theme{ break-inside:avoid; }
  .art, .book{ break-inside:avoid; }
  a{ color:#000 !important; text-decoration:underline; }
  .footer{ background:#fff !important; color:#000 !important; border-top:1px solid #999; }
  .footer a{ color:#000 !important; }
  .theme__icon-wrap{ background:#eee !important; color:#000 !important; }
  .block__num{ background:#000 !important; }
}

/* ---------- ARTICLE CAROUSEL (dots reused pelo carrossel de fotos em
   app.css — .article-carousel-wrap--photo / .article-slide-photo) ---------- */
.icon--tiny{width:14px; height:14px;}
.icon--back{transform:rotate(180deg);}

.article-carousel-wrap{position:relative;}
.article-dots{display:flex; gap:6px;}
.article-dot{
  width:7px; height:7px; border-radius:50%; background:var(--gray-300); border:none; padding:0;
  cursor:pointer; transition:all .15s ease;
}
.article-dot.active{width:20px; border-radius:4px; background:var(--navy-900);}

/* ---------- ARTICLE READING PAGE ---------- */
.article-hero{
  background:linear-gradient(160deg, var(--navy-950) 0%, var(--navy-800) 80%, var(--navy-700) 150%);
  color:#fff; padding:48px 0 40px; position:relative; overflow:hidden;
}
.article-hero--photo{background-size:cover; background-position:center;}
.article-hero--photo::before{
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(15,23,42,0.55) 0%, rgba(15,23,42,0.75) 55%, rgba(15,23,42,0.94) 100%);
}
.article-hero--photo .wrap{position:relative; z-index:1;}
/* cst-card-bg.jpg e img-escritorio.jpg são fotos bem escuras/azuladas e o
   overlay escurecendo de .article-hero--photo::before (até 0.94 de opacidade
   embaixo) já apaga quase todo o conteúdo visível delas — o corte que
   "background-size:cover" faz em telas bem largas (confirmado: até ~122% da
   altura da imagem por lado no caso de img-escritorio.jpg, por ela ser quase
   quadrada) não muda o que se vê na prática, então não travo aspect-ratio
   aqui: faria o header ficar gigante (quase a largura inteira em altura) nas
   5 páginas que usam --notas, por um corte que ninguém percebe. */
.article-hero--cst{background-image:url('/static/img/cst-card-bg.jpg');}
.article-hero--notas{background-image:url('/static/img/img-escritorio.jpg');}
.article-hero--questoes{background-image:url('/static/img/img-questoes-hero.webp'); background-position:center right; aspect-ratio:2000/667;}
/* Overlay mais leve que o padrão de .article-hero--photo::before: a
   imagem (letras "TE" em vidro) é o ponto forte aqui, não uma foto de
   fundo genérica — o overlay padrão (até 0.94 de opacidade embaixo)
   apagava o brilho quase todo. */
.article-hero--questoes::before{
  background:linear-gradient(90deg, rgba(15,23,42,0.96) 0%, rgba(15,23,42,0.75) 45%, rgba(15,23,42,0.25) 100%);
}
/* img-glossario-livros.webp e img-calculadora-nova.webp têm o mesmo
   problema de cst-card-bg.jpg/img-escritorio.jpg acima: foto escura, overlay
   padrão já apaga o conteúdo, travar aspect-ratio (proporção 1,78 — quase
   quadrada pro tamanho do header) deixaria o hero desproporcionalmente alto
   por um corte que não se vê. */
.article-hero--glossario{background-image:url('/static/img/img-glossario-livros.webp');}
.article-hero--calculadora{background-image:url('/static/img/img-calculadora-nova.webp');}
.article-hero--comparador{background-image:url('/static/img/img-comparador-hero.webp'); aspect-ratio:2000/667;}
.article-hero--internacional{
  background-image:url('/static/img/brand/worldmap-internacional.webp');
  background-size:cover; background-position:center top;
  aspect-ratio:1628/1084;
}
.article-hero--internacional::before{
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(15,23,42,0.45) 0%, rgba(15,23,42,0.35) 45%, rgba(15,23,42,0.65) 100%);
}
.article-hero--internacional .wrap{position:relative; z-index:1;}
/* Capa pronta (arte já traz título, tag e texto embutidos na imagem) — ao
   contrário das outras variantes --photo, não leva overlay escurecendo nem
   padding, e trava a proporção exata da imagem (aspect-ratio) pra nunca
   cortar o texto embutido, em nenhuma largura — inclusive as bem largas:
   com max-height, "cover" escala pela largura e estoura a altura travada,
   cortando topo/base (foi o que cortou a cabeça de alguém na versão
   anterior); sem max-height, a altura segue a proporção real da imagem
   sempre, então "cover" não tem sobra nenhuma pra cortar. O h1/tag reais
   continuam no DOM pra SEO/leitor de tela, só escondidos visualmente
   (.sr-only). */
.article-hero--artigos{
  background-image:url('/static/img/img-artigos-hero.webp');
  background-size:cover; background-position:center;
  aspect-ratio:2000/667; padding:0;
}
/* Essa capa não traz texto embutido (é só o fundo) — usa o tratamento
   padrão --photo (overlay escurecendo + h1/tag reais por cima), igual
   CST/Notas/Questões/Calculadora/Comparador, em vez do padrão acima. Mas
   também trava a proporção real da imagem (aspect-ratio): sem isso, a
   altura do header fica fixa (só o quanto o texto precisa) enquanto a
   largura acompanha a tela — em monitores bem largos o "cover" precisa
   cortar boa parte de cima/baixo da foto pra caber numa faixa curta e
   larga, e cortou a cabeça de alguém na prática. */
.article-hero--debates{
  background-image:url('/static/img/img-debates-hero-v2.webp');
  aspect-ratio:1916/821;
}
/* Na largura do celular, a proporção trava uma altura baixa demais pro
   texto (tag + h1 + 2 linhas do parágrafo) caber sem estourar o box —
   min-height força espaço extra aqui; o "cover" cuida de cobrir o resto,
   com um corte bem mais leve que o da tela larga que motivou o fix acima. */
@media(max-width:640px){
  /* width:100% é necessário aqui: aspect-ratio + min-height juntos (sem
     width explícito) fazem o navegador calcular a largura a partir da
     altura mínima em vez de preencher o pai — a faixa ficava mais larga
     que a tela (700px numa tela de 375px), estourando o site inteiro
     pros lados. */
  .article-hero--debates{min-height:300px; width:100%;}
  /* Mesmo motivo acima, pros 3 headers que ganharam aspect-ratio nesta
     rodada (comparador, questões, internacional): a proporção real da
     imagem travaria uma altura baixa demais pro texto de cada um caber. */
  .article-hero--comparador{min-height:340px; width:100%;}
  .article-hero--questoes{min-height:510px; width:100%;}
  .article-hero--internacional{min-height:320px; width:100%;}
}
.sr-only{
  position:absolute; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;
}
.article-tag{
  display:inline-block; font-family:var(--mono); font-size:11px; letter-spacing:0.08em; text-transform:uppercase;
  color:var(--gray-200); background:rgba(255,255,255,0.08); border:1px solid rgba(255,255,255,0.18);
  padding:5px 12px; border-radius:99px; margin-bottom:16px;
}
.article-hero h1{color:#fff; font-weight:600; font-size:clamp(30px,4.8vw,44px); line-height:1.12; letter-spacing:-0.025em; margin-bottom:12px; max-width:20ch;}
.article-hero__meta{color:var(--gray-300); font-size:13px;}
.article-wrap{max-width:700px; padding:52px 28px 70px;}
.article-actions{display:flex; gap:10px; margin-bottom:28px;}
.article-actions__btn{
  display:inline-flex; align-items:center; gap:7px; font-size:13.5px; font-weight:600; cursor:pointer;
  background:var(--white); border:1px solid var(--line); border-radius:99px; padding:8px 16px; color:var(--gray-700);
  transition:background .15s ease, border-color .15s ease, color .15s ease;
}
.article-actions__btn:hover{background:var(--gray-50);}
.article-actions__btn.is-active{background:var(--blue-50); border-color:var(--blue-100); color:var(--blue-600);}
.article-actions__emoji{font-size:15px; line-height:1;}
.article-body h2{font-size:22px; font-weight:600; margin:34px 0 14px; color:var(--navy-900);}
.article-body h2:first-child{margin-top:0;}
.article-body p{font-size:16.5px; font-weight:var(--fw-body); line-height:var(--lh-body); color:var(--gray-800); margin-bottom:18px;}
.article-body ul{list-style:none; margin:0 0 20px;}
.article-body li{
  position:relative; padding-left:22px; font-size:15.5px; color:var(--gray-800); line-height:1.7; margin-bottom:11px;
}
.article-body li::before{content:""; position:absolute; left:0; top:9px; width:7px; height:7px; border-radius:2px; background:var(--navy-700);}
.article-figure{margin:30px 0 34px; border:1px solid var(--line); border-radius:var(--radius); background:var(--white); box-shadow:var(--shadow-sm); overflow:hidden;}
.article-figure svg, .article-figure img{display:block; width:100%; height:auto;}
.article-figure__caption{padding:13px 20px; font-size:12.5px; line-height:1.5; color:var(--gray-500); border-top:1px solid var(--line); background:var(--gray-50);}
.article-figure__caption strong{color:var(--gray-700); font-weight:600;}
@media(max-width:640px){ .article-figure__caption{padding:12px 16px; font-size:12px;} }
.article-table-wrap{overflow-x:auto; margin:8px 0 6px; border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow-sm);}
.article-table{width:100%; border-collapse:collapse; font-size:13.5px;}
.article-table th{
  background:var(--gray-50); color:var(--navy-900); font-family:var(--mono); font-size:11px; letter-spacing:0.04em;
  text-transform:uppercase; text-align:left; padding:12px 16px; border-bottom:1px solid var(--line); white-space:nowrap;
}
.article-table td{padding:14px 16px; border-bottom:1px solid var(--line); color:var(--gray-700); line-height:1.5; vertical-align:top;}
.article-table tr:last-child td{border-bottom:none;}
.article-table td:first-child{font-weight:600; color:var(--navy-900); white-space:nowrap;}
.article-table-note{font-size:12px; color:var(--gray-500); margin:-8px 0 20px; font-style:italic;}
.article-disclaimer{font-size:12px; color:var(--gray-500); line-height:1.6; margin-top:20px; padding-top:16px; border-top:1px solid var(--line); font-style:italic;}

.article-sources{margin-top:44px; padding-top:26px; border-top:1px solid var(--line);}
.article-sources__title{font-family:var(--mono); font-size:11px; letter-spacing:0.08em; text-transform:uppercase; color:var(--gray-500); margin-bottom:16px;}
.article-sources__list{list-style:none; margin:0; padding:0;}
.article-sources__list li{font-size:13.5px; line-height:1.55; color:var(--gray-700); padding-left:0; margin-bottom:16px;}
.article-sources__list li:last-child{margin-bottom:0;}
.article-sources__list li::before{content:none;}
.article-sources__link{color:var(--navy-800); font-weight:600; text-decoration:none; display:inline-flex; align-items:center; gap:7px;}
.article-sources__link .icon{width:14px; height:14px; flex-shrink:0;}
.article-sources__link:hover{text-decoration:underline;}
.article-sources__desc{display:block; color:var(--gray-500); font-size:12.5px; margin-top:3px; padding-left:21px;}
.article-back-btn{margin-top:20px; display:inline-flex;}
.nav-back-link{
  display:inline-flex; align-items:center; gap:7px; color:var(--gray-300); text-decoration:none;
  font-size:13.5px; font-weight:500; padding:9px 12px; border-radius:7px; transition:all .15s ease; white-space:nowrap;
}
.nav-back-link:hover{color:#fff; background:rgba(255,255,255,0.08);}
@media(max-width:480px){ .nav-back-link span{display:none;} }

/* ---------- NOTAS TÉCNICAS (dedicated page) ---------- */
.nt-grid{display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:8px;}
.nt-card{
  background:var(--white); border:1px solid var(--line); border-radius:var(--radius);
  padding:20px; box-shadow:var(--shadow-sm); border-top:3px solid var(--gray-300); display:flex; flex-direction:column;
}
.nt-card__top{display:flex; justify-content:space-between; align-items:flex-start; gap:10px; margin-bottom:6px;}
.nt-card__code{font-family:var(--mono); font-size:11.5px; font-weight:600; color:var(--navy-800); line-height:1.4;}
.nt-status{
  font-family:var(--mono); font-size:9.5px; letter-spacing:0.04em; text-transform:uppercase; font-weight:600;
  padding:3px 8px; border-radius:99px; white-space:nowrap; flex-shrink:0;
}
.nt-status--ok{background:var(--gray-100); color:var(--navy-800);}
.nt-status--warn{background:var(--gray-100); color:var(--gray-600);}
.nt-card__issuer{font-size:11.5px; color:var(--gray-500); margin-bottom:10px; display:block;}
.nt-card__title{font-size:15.5px; margin-bottom:8px; line-height:1.35; color:var(--navy-900);}
.nt-card__desc{font-size:13px; color:var(--gray-700); line-height:1.55; flex:1;}
@media(max-width:760px){ .nt-grid{grid-template-columns:1fr;} }

/* ---------- CST REFERENCE PAGE ---------- */
.cst-group{margin-bottom:40px; scroll-margin-top:80px;}
.cst-group__head{display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin-bottom:10px;}
.cst-group__title{font-size:22px; margin:0;}
.cst-group__subtitle{font-family:var(--mono); font-size:11.5px; color:var(--gray-500);}
.cst-group__intro{font-size:14.5px; line-height:1.7; color:var(--gray-700); margin-bottom:14px;}
.cst-structure-note{
  display:flex; align-items:flex-start; gap:10px; background:var(--gray-50); border:1px solid var(--gray-200);
  border-radius:10px; padding:14px 16px; margin-bottom:18px;
}
.cst-structure-note .icon{color:var(--navy-800); flex-shrink:0; margin-top:3px;}
.cst-structure-note p{font-size:13.3px; line-height:1.65; color:var(--navy-900); margin:0;}
.cst-structure-note a{color:var(--navy-800); font-weight:600;}
.cst-subgroup{margin-bottom:10px;}
.cst-table{display:flex; flex-direction:column; gap:0;}
.cst-row{display:flex; gap:14px; padding:12px 0; border-top:1px solid var(--gray-100);}
.cst-row:first-child{border-top:none;}
.cst-row__code{
  font-family:var(--mono); font-weight:700; font-size:13px; color:var(--navy-800); background:var(--gray-100);
  padding:4px 9px; border-radius:6px; height:fit-content; flex-shrink:0; min-width:38px; text-align:center;
}
.cst-row__body strong{font-size:13.8px; color:var(--navy-900); display:block; margin-bottom:3px;}
.cst-row__body p{font-size:12.8px; color:var(--gray-700); line-height:1.55; margin:0;}
.cst-row__indicators{display:flex; flex-wrap:wrap; gap:5px; margin-top:8px;}
.cst-indicator-pill{
  font-size:10.5px; font-weight:600; color:var(--navy-800); background:var(--gray-100);
  border:1px solid var(--gray-200); border-radius:999px; padding:2px 9px; line-height:1.6;
}

/* ---------- cClassTrib (recurso TAX PRO dentro de Códigos CST) ---------- */
.cst-clastrib{margin-top:10px; border:1px dashed var(--gray-200); border-radius:8px; padding:2px 10px;}
.cst-clastrib__summary{
  display:flex; align-items:center; gap:8px; padding:8px 2px; cursor:pointer; list-style:none;
  font-size:12px; font-weight:600; color:var(--blue-600);
}
.cst-clastrib__summary::-webkit-details-marker{display:none;}
.cst-clastrib__summary::before{content:"›"; transition:transform 0.15s ease;}
.cst-clastrib[open] .cst-clastrib__summary::before{transform:rotate(90deg);}
.cst-clastrib__count{font-weight:500; color:var(--gray-500); font-family:var(--mono); font-size:11px;}
.cst-clastrib__note{font-size:11.5px; color:var(--gray-500); line-height:1.5; margin:0 0 8px;}
.cst-clastrib__note a{color:var(--blue-600); font-weight:600;}
.cst-clastrib-table{display:flex; flex-direction:column; gap:0; margin-bottom:10px;}
.cst-clastrib-row{
  display:grid; grid-template-columns:70px 1fr 62px 62px 140px; gap:8px; padding:7px 4px;
  border-top:1px solid var(--gray-100); font-size:12px; color:var(--gray-700); align-items:baseline;
}
.cst-clastrib-row--free{grid-template-columns:70px 1fr;}
.cst-clastrib-row--anexo{grid-template-columns:110px 1fr 50px 130px;}
.cst-clastrib-row--doc{grid-template-columns:80px 1fr 110px;}
.cst-clastrib-row--head{font-weight:700; color:var(--navy-800); font-size:11px; text-transform:uppercase; letter-spacing:0.02em;}
.cst-clastrib-row:first-child{border-top:none;}
.cst-clastrib-row__code{font-family:var(--mono); font-weight:600; color:var(--navy-800);}
.cst-clastrib-upsell{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap; background:var(--gray-50); border:1px solid var(--gray-200);
  border-radius:8px; padding:10px 14px; margin-bottom:10px;
}
.cst-clastrib-upsell .icon{color:var(--navy-700); flex-shrink:0;}
.cst-clastrib-upsell p{font-size:12.5px; color:var(--gray-700); margin:0; flex:1; min-width:180px;}
.cst-clastrib-upsell .btn{padding:8px 14px; font-size:12.5px;}
@media(max-width:640px){
  .cst-clastrib-row{grid-template-columns:60px 1fr; grid-template-areas:"code desc" ". pct" ". fonte";}
  .cst-clastrib-row span:nth-child(3), .cst-clastrib-row span:nth-child(4), .cst-clastrib-row span:nth-child(5){grid-column:2; font-size:11px; color:var(--gray-500);}
  .cst-clastrib-row--anexo, .cst-clastrib-row--doc{grid-template-columns:60px 1fr; grid-template-areas:"code desc" ". pct";}
  .cst-clastrib-row--head{display:none;}
}

.cst-section-divider{border-top:1px solid var(--gray-200); margin:36px 0 24px; padding-top:28px;}
.cst-section-divider__title{font-size:22px; margin:0 0 6px;}
.cst-section-divider__desc{font-size:13.5px; color:var(--gray-500); line-height:1.6; margin:0 0 14px;}
.cst-link-btn{background:none; border:none; padding:0; margin:0; font:inherit; color:var(--blue-600); font-weight:600; cursor:pointer; text-decoration:underline;}

/* ---------- TUTORIAL "SUA NOTA FISCAL" (dedicated page, público leigo) ---------- */
.nf-hero{
  position:relative; color:#fff; padding:76px 0 60px;
  background-image:linear-gradient(180deg, rgba(15,23,42,0.80) 0%, rgba(15,23,42,0.88) 55%, rgba(30,41,59,0.97) 100%), url('/static/img/tutorial-hero.webp');
  background-size:cover; background-position:center 60%;
}
.nf-hero__inner{max-width:740px;}
.nf-hero h1{color:#fff; font-weight:700; font-size:clamp(27px,3.8vw,39px); line-height:1.2; letter-spacing:-0.01em; margin:16px 0 16px;}
.nf-hero__lede{color:var(--gray-200); font-size:16.5px; font-weight:var(--fw-body); line-height:1.65; max-width:58ch; margin-bottom:16px;}
@media(max-width:640px){ .nf-hero{padding:56px 0 44px;} }

/* comparison: "como é hoje" x "como será" */
.nf-compare{display:grid; grid-template-columns:1fr auto 1fr; gap:22px; align-items:center; margin:8px 0 10px;}
.nf-vs{
  width:52px; height:52px; border-radius:50%; background:var(--navy-900); color:#fff; flex-shrink:0;
  display:flex; align-items:center; justify-content:center; box-shadow:var(--shadow-md); justify-self:center;
}
.nf-vs .icon{width:22px; height:22px;}
.nf-compare-note{
  text-align:center; font-size:13px; color:var(--gray-600); max-width:520px; margin:4px auto 0;
  line-height:1.6;
}
.nf-compare-note strong{color:var(--navy-900);}

.nf-receipt{
  background:#fff; border:1px solid var(--line); padding:22px 22px 30px; font-family:var(--mono);
  box-shadow:var(--shadow-sm);
  clip-path:polygon(0% 0%,100% 0%,100% 100%,96% 94%,92% 100%,88% 94%,84% 100%,80% 94%,76% 100%,72% 94%,68% 100%,64% 94%,60% 100%,56% 94%,52% 100%,48% 94%,44% 100%,40% 94%,36% 100%,32% 94%,28% 100%,24% 94%,20% 100%,16% 94%,12% 100%,8% 94%,4% 100%,0% 94%);
}
.nf-receipt__eyebrow{
  font-family:var(--sans); font-size:10.5px; letter-spacing:0.07em; text-transform:uppercase; font-weight:700;
  padding:4px 10px; border-radius:99px; display:inline-block; margin-bottom:14px;
}
.nf-receipt--old .nf-receipt__eyebrow{background:var(--gray-100); color:var(--gray-700);}
.nf-receipt--new .nf-receipt__eyebrow{background:var(--gray-100); color:var(--navy-800);}
.nf-receipt__store{font-family:var(--serif); font-size:15px; font-weight:700; color:var(--navy-900); margin-bottom:2px;}
.nf-receipt__meta{font-family:var(--sans); font-size:10px; color:var(--gray-500); margin-bottom:16px;}
.nf-receipt__row{display:flex; justify-content:space-between; gap:10px; font-size:12px; color:var(--gray-800); padding:2.5px 0;}
.nf-receipt__row--total{border-top:1px dashed var(--gray-300); margin-top:8px; padding-top:10px; font-weight:700; font-size:14px; color:var(--navy-900);}
.nf-receipt__divider{border-top:1px dashed var(--gray-300); margin:10px 0;}
.nf-receipt__note{font-family:var(--sans); font-size:11px; color:var(--gray-500); line-height:1.55; margin-top:14px; font-style:italic;}
.nf-receipt__tax-block{margin-top:12px; background:var(--gray-50); border:1px dashed var(--navy-700); border-radius:6px; padding:10px 12px;}
.nf-receipt__tax-title{font-family:var(--sans); font-size:9.5px; text-transform:uppercase; letter-spacing:0.06em; color:var(--navy-800); font-weight:700; margin-bottom:7px;}
.nf-tag{
  display:inline-flex; align-items:center; justify-content:center; width:16px; height:16px; border-radius:50%;
  background:var(--navy-900); color:#fff; font-family:var(--sans); font-size:9px; font-weight:700; margin-right:6px; flex-shrink:0;
}
.nf-qr{
  width:48px; height:48px; margin-top:16px; border:1px solid var(--gray-300);
  background-image:linear-gradient(45deg,var(--navy-900) 25%,transparent 25%),linear-gradient(-45deg,var(--navy-900) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--navy-900) 75%),linear-gradient(-45deg,transparent 75%,var(--navy-900) 75%);
  background-size:10px 10px; background-position:0 0,0 5px,5px -5px,-5px 0px; opacity:0.82;
}
.nf-qr-label{font-family:var(--sans); font-size:9.5px; color:var(--gray-500); margin-top:5px; letter-spacing:0.03em;}

@media(max-width:760px){
  .nf-compare{grid-template-columns:1fr;}
  .nf-vs{transform:rotate(90deg); margin:2px auto;}
}

/* anatomy / campo-a-campo */
.nf-anatomy{display:grid; grid-template-columns:330px 1fr; gap:40px; align-items:start;}
.nf-legend{list-style:none; display:flex; flex-direction:column; gap:18px; margin:0; padding:0;}
.nf-legend li{display:flex; gap:12px;}
.nf-legend .nf-tag{width:24px; height:24px; font-size:11.5px; margin-right:0;}
.nf-legend__body strong{display:flex; align-items:center; gap:8px; font-size:14.5px; color:var(--navy-900); margin-bottom:4px; font-family:var(--serif);}
.nf-legend__body p{font-size:13px; color:var(--gray-700); line-height:1.6; margin:0;}
.nf-badge-new{
  font-family:var(--mono); font-size:9px; letter-spacing:0.05em; text-transform:uppercase; font-weight:700;
  background:var(--gray-100); color:var(--navy-800); padding:2px 7px; border-radius:99px;
}
@media(max-width:820px){
  .nf-anatomy{grid-template-columns:1fr; gap:28px;}
}

/* ---------- GLOSSARY ---------- */
.glossary-intro{font-size:15px; line-height:1.75; color:var(--gray-700); margin-bottom:24px;}

/* Barra de busca fixa ao rolar — --glossary-nav-h e preenchida via JS
   (glossario.js) com a altura real do .nav, que muda por breakpoint e
   não é seguro cravar em pixel fixo aqui. */
.glossary-search-wrap{position:sticky; top:var(--glossary-nav-h, 0px); z-index:40; background:var(--white); padding-top:4px;}
.glossary-search-count{position:absolute; right:16px; top:50%; transform:translateY(-50%); font-size:12.5px; color:var(--gray-500); white-space:nowrap;}

.glossary-chips{display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin:18px 0 6px;}
.glossary-chips__label{font-size:12px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--gray-500); margin-right:4px;}
.glossary-chip{
  display:inline-flex; align-items:center; padding:5px 13px; border-radius:999px;
  background:var(--blue-50); color:var(--blue-700); font-size:13px; font-weight:600;
  text-decoration:none; border:1px solid var(--blue-100); transition:background .12s ease, border-color .12s ease;
}
.glossary-chip:hover{background:var(--blue-100); border-color:var(--blue-300);}

.glossary-catnav{display:flex; flex-wrap:wrap; gap:7px; margin:16px 0 20px;}
.glossary-catnav__item{
  display:inline-flex; align-items:center; gap:6px; padding:7px 13px; border-radius:999px;
  background:var(--gray-50); border:1px solid var(--line); color:var(--navy-700);
  font-size:12.5px; font-weight:600; text-decoration:none; transition:background .12s ease, border-color .12s ease;
}
.glossary-catnav__item .icon{color:var(--gray-500); flex-shrink:0;}
.glossary-catnav__item:hover{background:var(--blue-50); border-color:var(--blue-300);}

.glossary-section{margin-top:40px; scroll-margin-top:calc(var(--glossary-nav-h, 0px) + 70px);}
.glossary-section:first-of-type{margin-top:28px;}
.glossary-section__title{
  display:flex; align-items:center; gap:9px; font-size:14px; font-weight:700;
  letter-spacing:.03em; text-transform:uppercase; color:var(--navy-700);
  margin:0 0 14px; padding-bottom:10px; border-bottom:1px solid var(--line);
}
.glossary-section__title .icon{color:var(--blue-500); flex-shrink:0;}
.glossary-section__count{
  margin-left:auto; font-size:11px; font-weight:700; color:var(--gray-500); background:var(--gray-100);
  border-radius:999px; padding:2px 8px; letter-spacing:0; text-transform:none;
}
.glossary-section[hidden]{display:none;}

.glossary-grid{display:grid; grid-template-columns:repeat(2, 1fr); gap:14px;}
.glossary-card{
  position:relative; background:var(--white); border:1px solid var(--line); border-radius:var(--radius);
  padding:16px 18px; scroll-margin-top:calc(var(--glossary-nav-h, 0px) + 64px);
}
.glossary-card[hidden]{display:none;}
.glossary-card__head{display:flex; align-items:flex-start; justify-content:space-between; gap:8px; margin-bottom:6px;}
.glossary-card__head h3{font-family:var(--serif); font-weight:600; font-size:16.5px; color:var(--navy-900); margin:0;}
.glossary-card__copy{
  flex-shrink:0; background:none; border:none; cursor:pointer; padding:3px; color:var(--gray-300);
  opacity:0; transition:opacity .12s ease, color .12s ease;
}
.glossary-card:hover .glossary-card__copy, .glossary-card__copy:focus-visible{opacity:1;}
.glossary-card__copy:hover{color:var(--blue-500);}
.glossary-card__def{margin:0; font-size:13.8px; color:var(--gray-700); line-height:1.65;}
.glossary-card__def mark, .glossary-card__head h3 mark{background:var(--blue-100); color:var(--navy-900); border-radius:3px; padding:0 2px;}
.glossary-card__link{color:var(--blue-600); font-weight:600; white-space:nowrap;}
.glossary-card__related{margin:8px 0 0; font-size:12.5px; color:var(--gray-500);}
.glossary-card__related a{color:var(--blue-600); font-weight:600;}
.glossary-card--seealso{background:var(--gray-50); border-style:dashed;}
.glossary-card__seealso{margin:0; font-size:13.8px; color:var(--gray-600); font-style:italic;}
.glossary-card__seealso a{color:var(--blue-600); font-weight:600; font-style:normal;}
.glossary-card--destaque{border-color:var(--blue-300);}

@keyframes glossaryFlash{
  0%{background:var(--blue-100);}
  100%{background:var(--white);}
}
.glossary-card--flash{animation:glossaryFlash 1.6s ease-out;}

@media(max-width:720px){
  .glossary-grid{grid-template-columns:1fr;}
}

/* ---------- COMPARADOR (sector tabs) ---------- */
/* Wrapper: fixa a fade nas bordas enquanto o conteúdo interno rola por baixo. */
.sector-tabs-wrap{position:relative; margin-bottom:26px;}
.sector-tabs-wrap::before, .sector-tabs-wrap::after{
  content:""; position:absolute; top:0; bottom:0; width:28px; pointer-events:none; z-index:2;
}
.sector-tabs-wrap::before{left:0; background:linear-gradient(to right, var(--gray-50), rgba(248,246,241,0));}
.sector-tabs-wrap::after{right:0; background:linear-gradient(to left, var(--gray-50), rgba(248,246,241,0));}
.sector-tabs{
  display:flex; gap:8px; overflow-x:auto; overflow-y:hidden;
  -webkit-overflow-scrolling:touch; scrollbar-width:none;
}
.sector-tabs::-webkit-scrollbar{display:none;}
.sector-tab{
  display:inline-flex; align-items:center; gap:8px; font-size:13.5px; font-weight:600; color:var(--gray-700);
  background:var(--white); border:1px solid var(--line); padding:10px 18px; border-radius:99px; cursor:pointer;
  transition:all .15s ease; font-family:var(--sans); flex-shrink:0; white-space:nowrap;
}
.sector-tab .icon{width:17px; height:17px;}
.sector-tab:hover{border-color:var(--navy-700); color:var(--navy-900);}
.sector-tab.active{background:var(--navy-900); border-color:var(--navy-900); color:#fff;}
.sector-panel{display:none;}
.sector-panel.active{display:block; animation:sectorFade .25s ease;}
@keyframes sectorFade{from{opacity:0; transform:translateY(4px);} to{opacity:1; transform:translateY(0);}}
.sector-visual{
  display:flex; align-items:center; gap:16px; margin-bottom:22px; padding:18px 22px;
  background:var(--navy-900); border-radius:14px; color:#fff;
}
.sector-visual__icon{
  width:56px; height:56px; border-radius:12px; background:rgba(255,255,255,0.12);
  display:flex; align-items:center; justify-content:center; flex-shrink:0;
}
.sector-visual__icon .icon{width:30px; height:30px; color:#fff;}
.sector-visual__text h3{color:#fff; font-size:18px; margin-bottom:4px;}
.sector-visual__text p{color:rgba(255,255,255,0.78); font-size:13px; line-height:1.5; margin:0;}
.struct-col--before .book__code--before{background:var(--gray-500);}
.struct-col--after{border:1px solid var(--navy-800);}
@media(max-width:640px){
  .sector-visual{flex-direction:column; align-items:flex-start; text-align:left;}
}
.sector-callout{
  display:flex; align-items:flex-start; gap:10px; background:var(--gray-50); border:1px solid var(--gray-200);
  border-radius:10px; padding:16px 18px; margin-top:20px;
}
.sector-callout .icon{color:var(--navy-800); flex-shrink:0; margin-top:2px;}
.sector-callout p{font-size:13.5px; line-height:1.65; color:var(--navy-900); margin:0;}

/* Variante editorial — pull-quote serifado para a frase de maior peso de
   uma seção (ex.: "o que muda na prática" no Comparador). Reaproveita a
   marcação de .sector-callout (ícone + <p><strong>rótulo</strong> texto</p>),
   só troca a apresentação visual — a base continua servindo o uso simples
   (ex.: resumo da calculadora). */
.sector-callout--quote{
  display:block; background:transparent; border:none; border-left:3px solid var(--blue-500);
  padding:2px 0 2px 26px; margin-top:26px; position:relative;
}
.sector-callout--quote .icon{display:none;}
.sector-callout--quote::before{
  content:"\201C"; font-family:var(--serif); font-size:64px; font-weight:700; color:var(--blue-100);
  position:absolute; left:10px; top:-22px; line-height:1; z-index:0;
}
.sector-callout--quote p{
  position:relative; font-family:var(--serif); font-style:italic; font-size:19px; line-height:1.48;
  color:var(--navy-900); font-weight:500;
}
.sector-callout--quote p strong{
  display:block; font-style:normal; font-weight:700; font-size:11px; text-transform:uppercase;
  letter-spacing:0.07em; color:var(--blue-600); margin-bottom:7px; font-family:var(--sans);
}

/* ---------- CALCULADORA ---------- */
.calc-disclaimer{
  display:flex; align-items:flex-start; gap:12px; background:var(--gray-50); border:1px solid var(--gray-300);
  border-left:3px solid var(--navy-800); border-radius:0 10px 10px 0; padding:16px 18px;
}
.calc-disclaimer .icon{color:var(--navy-800); flex-shrink:0; margin-top:2px;}
.calc-disclaimer p{font-size:13.3px; line-height:1.6; color:var(--gray-700); margin:0;}
.calc-form{display:flex; flex-direction:column; gap:16px; background:var(--white); border:1px solid var(--line); border-radius:12px; padding:24px;}
.calc-form__row{display:flex; flex-direction:column; gap:6px;}
.calc-form__row label{font-size:13px; font-weight:600; color:var(--navy-900);}
.calc-form__row input, .calc-form__row select{
  padding:11px 13px; border-radius:8px; border:1px solid var(--line); font-size:14px; font-family:var(--sans);
  background:var(--white); color:var(--gray-900);
}
.calc-form__row input:focus, .calc-form__row select:focus{outline:none; border-color:var(--navy-700); box-shadow:0 0 0 3px rgba(15,23,42,0.08);}
.calc-form__hint{font-size:12px; color:var(--gray-500); line-height:1.55; margin:0;}
.calc-form__hint a{color:var(--blue-600); font-weight:600;}
.calc-advanced{border:1px dashed var(--gray-300); border-radius:8px; padding:12px 14px;}
.calc-advanced summary{font-size:12.5px; font-weight:600; color:var(--navy-800); cursor:pointer;}
.calc-advanced .calc-advanced__note{font-size:12px; color:var(--gray-600); line-height:1.6; margin:10px 0 14px;}
.calc-advanced .calc-form__row{margin-top:10px;}
.calc-result__note{font-size:11.5px; color:var(--gray-500); line-height:1.55; margin:14px 0 0; text-align:center;}
.nf-compare-single{display:flex; justify-content:center; margin:8px 0 6px;}
.nf-receipt--generated{position:relative;}
.nf-receipt__seal{
  position:absolute; top:14px; right:14px; display:flex; flex-direction:column; align-items:center; gap:2px;
  color:var(--navy-700); opacity:0.35; transform:rotate(8deg);
}
.nf-receipt__seal svg{width:34px; height:34px;}
.nf-receipt__seal span{font-family:var(--serif); font-size:9px; font-weight:700; letter-spacing:0.02em;}
.nf-receipt__seal--isento{color:var(--blue-600); opacity:0.85;}
.nf-receipt__seal--isento span{font-family:var(--sans); font-size:10px;}
@media(max-width:640px){
  .nf-receipt__seal{display:none;}
}

/* ---------- TOOLS GRID (Ferramentas) ---------- */
/* Bento 1+2: Calculadora (maior intenção prática) ocupa a linha inteira,
   Glossário e Comparador dividem a linha debaixo — ela é sempre a primeira
   do loop em home.html, então o auto-placement do grid cuida do resto. */
.tools-grid{display:grid; grid-template-columns:repeat(2, 1fr); gap:18px;}
.tool-card{
  position:relative; display:flex; flex-direction:column; justify-content:flex-end;
  min-height:230px; border-radius:14px; overflow:hidden; text-decoration:none;
  background-color:var(--navy-900); background-size:cover; background-position:center;
  box-shadow:0 4px 16px rgba(15,23,42,0.16); transition:transform .2s ease, box-shadow .2s ease;
}
.tool-card--calculadora{grid-column:1 / -1; min-height:280px;}
.tool-card:hover{transform:translateY(-3px); box-shadow:0 14px 30px rgba(16,185,129,0.2), 0 6px 16px rgba(15,23,42,0.25);}
.tool-card::before{
  content:""; position:absolute; inset:0;
  background:
    radial-gradient(circle at 88% 6%, rgba(16,185,129,0.25), transparent 45%),
    linear-gradient(180deg, rgba(15,23,42,0.38) 0%, rgba(15,23,42,0.6) 55%, rgba(15,23,42,0.94) 100%);
}
.tool-card--calculadora{background-image:url('/static/img/img-calculadora-nova.webp');}
.tool-card--glossario{background-image:url('/static/img/img-glossario-livros.webp');}
.tool-card--comparador{background-image:url('/static/img/img-tributos-parede.jpg');}
.tool-card__badge{
  position:relative; z-index:1; width:40px; height:40px; margin:20px 0 0 20px; border-radius:10px;
  background:rgba(16,185,129,0.28); border:1px solid rgba(16,185,129,0.4);
  display:flex; align-items:center; justify-content:center; color:#fff;
}
.tool-card__badge .icon{width:20px; height:20px;}
.tool-card__body{position:relative; z-index:1; padding:14px 20px 22px;}
.tool-card__title{font-family:var(--serif); font-size:19px; font-weight:700; color:#fff; margin-bottom:8px;}
.tool-card__desc{font-size:13px; line-height:1.55; color:var(--gray-200); margin-bottom:14px;}
.tool-card__cta{display:inline-flex; align-items:center; gap:6px; font-size:12.5px; font-weight:600; color:#fff; border-bottom:1px solid rgba(255,255,255,0.4); padding-bottom:2px;}
@media(max-width:860px){
  .tools-grid{grid-template-columns:1fr;}
}

/* ========================================================================
   BARRAS DE ROLAGEM
   Minimalistas: trilho invisível, polegar fino e arredondado que só ganha
   contraste ao passar o mouse. A largura é a mesma em todo o site para o
   layout não "pular" entre uma área rolável e outra.
   ======================================================================== */

/* Firefox — só aceita estes dois, e por isso definem o padrão de todo o
   site; os seletores webkit abaixo refinam onde o navegador permite. */
* {
  scrollbar-width: thin;
  scrollbar-color: rgba(15, 23, 42, .22) transparent;
}

*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb {
  background-color: rgba(15, 23, 42, .2);
  border-radius: 999px;
  /* A borda transparente com background-clip é o truque que afina o polegar
     sem estreitar a área de arrasto — mantém o alvo de clique confortável. */
  border: 3px solid transparent;
  background-clip: content-box;
}
*::-webkit-scrollbar-thumb:hover { background-color: rgba(15, 23, 42, .38); }
*::-webkit-scrollbar-thumb:active { background-color: rgba(15, 23, 42, .5); }
*::-webkit-scrollbar-corner { background: transparent; }

/* Superfícies escuras: menu lateral do Organizador, aba Questões, painéis
   flutuantes e o Pomodoro. O polegar inverte para branco translúcido.
   A barra da PÁGINA também entra aqui: no Organizador com a aba Questões ou
   Pomodoro ativa, o corpo inteiro é escuro, e um polegar escuro sobre fundo
   escuro simplesmente some. */
.sp-body:has(.sp-content.is-questoes),
.sp-body:has(.sp-content.is-pomodoro),
.sp-sidebar,
.sp-sidebar *,
.sp-content.is-questoes,
.sp-content.is-questoes *,
.sp-content.is-pomodoro,
.sp-content.is-pomodoro *,
.qb-tree__panel,
.qb-tree__panel * {
  scrollbar-color: rgba(255, 255, 255, .22) transparent;
}
.sp-body:has(.sp-content.is-questoes)::-webkit-scrollbar-thumb,
.sp-body:has(.sp-content.is-pomodoro)::-webkit-scrollbar-thumb,
.sp-sidebar::-webkit-scrollbar-thumb,
.sp-sidebar *::-webkit-scrollbar-thumb,
.sp-content.is-questoes ::-webkit-scrollbar-thumb,
.sp-content.is-pomodoro ::-webkit-scrollbar-thumb,
.qb-tree__panel::-webkit-scrollbar-thumb {
  background-color: rgba(255, 255, 255, .2);
}
.sp-body:has(.sp-content.is-questoes)::-webkit-scrollbar-thumb:hover,
.sp-body:has(.sp-content.is-pomodoro)::-webkit-scrollbar-thumb:hover,
.sp-sidebar::-webkit-scrollbar-thumb:hover,
.sp-sidebar *::-webkit-scrollbar-thumb:hover,
.sp-content.is-questoes ::-webkit-scrollbar-thumb:hover,
.sp-content.is-pomodoro ::-webkit-scrollbar-thumb:hover,
.qb-tree__panel::-webkit-scrollbar-thumb:hover {
  background-color: rgba(255, 255, 255, .36);
}

/* Quem já esconde a própria barra de propósito (carrosséis com scroll-snap,
   abas de setor) continua escondendo — as regras acima não podem revivê-la. */
.article-track--photo::-webkit-scrollbar,
.sector-tabs::-webkit-scrollbar { display: none; }
.article-track--photo, .sector-tabs { scrollbar-width: none; }
