/* ==========================================================================
   FIA digital — folha de estilo única do site
   Organizada em blocos: base → utilitários → cada seção da página → rodapé
   ========================================================================== */

/* ---------- Reset ---------- */
*,
*::before,
*::after { margin: 0; padding: 0; box-sizing: border-box; }

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

/* ---------- Variáveis de marca ---------- */
:root {
  /* Cores */
  --ink:        #10110b;   /* preto esverdeado do hero */
  --aqua:       #02ab95;   /* verde-água principal */
  --deep:       #084734;   /* verde escuro dos títulos */
  --text:       #333333;   /* texto corrido */
  --mint:       #eff5f4;   /* fundo claro das seções */
  --lime:       #c2fa75;   /* verde-limão de destaque */
  --white:      #ffffff;

  /* Tipografia */
  --font: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

  /* Grade */
  --gutter: 82px;          /* respiro lateral da página */
  --container: 1276px;     /* largura máxima do conteúdo */

  /* Respiro lateral efetivo: nunca menor que a margem, e em telas largas
     cresce para manter tudo alinhado ao container central de 1276px. */
  --edge:    max(var(--gutter), calc((100%   - var(--container)) / 2));
  --edge-vw: max(var(--gutter), calc((100vw  - var(--container)) / 2));

  /* Gradientes decorativos vindos do design */
  --grad-dash-a: linear-gradient(90deg, rgba(194, 250, 117, 0) 0%, #9bf686 21%, #2cebb8 82%, rgba(9, 231, 199, 0) 100%);
  --grad-dash-b: linear-gradient(90deg, #c2fa75 0%, rgba(105, 241, 156, 0) 14%, rgba(54, 236, 179, 0) 39%, #08e7c7 100%);
  --grad-dash-c: linear-gradient(90deg, #c2fa75 0%, #b6f782 42%, rgba(9, 231, 199, 0) 100%);
  --grad-dots:   linear-gradient(94deg, #c2fa75 4%, #08e7c7 100%);
  --grad-dots-transition: linear-gradient(29deg, #c2fa75 0%, rgba(8, 231, 199, 0) 65.38%);

  /* Curva padrão para entradas (strong ease-out) */
  --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
}

@media (max-width: 1100px) { :root { --gutter: 48px; } }
@media (max-width: 700px)  { :root { --gutter: 24px; } }

/* ---------- Base ---------- */
html {
  /* Sem `scroll-behavior: smooth` aqui de propósito: quem cuida da rolagem
     suave da página (inclusive dos links âncora) agora é o Lenis — ver o
     bloco "Rolagem suave (Lenis)" logo abaixo. As duas coisas ligadas ao
     mesmo tempo brigam entre si. O `scroll-behavior: smooth` que continua
     existindo nos carrosséis é outra história: lá ele serve às setinhas de
     avançar/voltar, que rolam de lado dentro do próprio carrossel. */
  /* Reserva o espaço da barra de rolagem de forma permanente. Sem isso, todo
     momento em que a página trava o scroll (é o que o preloader da Home faz)
     a barra some, a área útil alarga alguns pixels e o conteúdo inteiro dá um
     pulinho para o lado — e outro quando ela volta. Em sistemas com barra
     flutuante (padrão do Mac) não muda nada: lá ela não ocupa espaço. */
  scrollbar-gutter: stable;
}

body {
  font-family: var(--font);
  color: var(--text);
  background: var(--white);
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

a { color: inherit; text-decoration: none; }
strong { font-weight: 600; }

/* ---------- Rolagem suave (Lenis) ----------
   Regras recomendadas pela própria biblioteca (vendor/lenis.min.js). O Lenis
   coloca as classes `lenis`, `lenis-smooth` e `lenis-stopped` no <html>
   sozinho — nada aqui precisa ser ligado à mão. Ele NÃO usa wrapper com
   transform, então tudo que é `position: sticky` no site (faixa de transição
   da Home, banner final, coluna do FAQ) continua funcionando normalmente. */
html.lenis, html.lenis body { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-smooth [data-lenis-prevent] { overscroll-behavior: contain; }
.lenis.lenis-stopped { overflow: hidden; }

/* ==========================================================================
   Utilitários compartilhados
   ========================================================================== */

/* Faixa de conteúdo centralizada */
.container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
}

/* Olho / etiqueta acima dos títulos de seção */
.eyebrow {
  display: block;
  font-size: 16px;
  line-height: 1.4;
  color: var(--aqua);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.eyebrow--light { color: var(--white); }
.eyebrow--sentence { text-transform: none; letter-spacing: 0.03em; }

/* Bloco "Section Title": etiqueta + título */
.section-title { display: flex; flex-direction: column; gap: 4px; }
.section-title h2 {
  font-size: clamp(30px, 3.2vw, 42px);
  line-height: 1.2;
  font-weight: 400;
  color: var(--deep);
  letter-spacing: -0.01em;
  text-wrap: balance;
}

/* Variante centralizada do bloco de título */
.section-title--center { align-items: center; text-align: center; }

/* ---------- Botões ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  border: 1px solid transparent;
  font-family: inherit;
  font-size: 14px;
  font-weight: 600;
  line-height: 1;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  cursor: pointer;
  transition: background-color .2s ease, color .2s ease, border-color .2s ease;
}

.btn--sm { min-height: 40px; padding: 0 18px; font-size: 14px; font-weight: 600; letter-spacing: 0.03em; }
.btn--md { min-height: 70px; padding: 0 30px; }
.btn--lg {
  min-height: 88px;
  padding: 0 40px;
  font-size: 17px;
}

.btn--aqua        { background: var(--aqua); border-color: var(--aqua); color: var(--white); }
.btn--aqua:hover  { background: var(--lime); border-color: var(--lime); color: var(--deep); }

.btn--white       { background: var(--white); border-color: var(--white); color: var(--deep); }
.btn--white:hover { background: var(--lime); border-color: var(--lime); }

.btn--stroke-aqua       { background: rgba(0, 0, 0, .44); border-color: var(--aqua); color: var(--white); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); }
.btn--stroke-aqua:hover { background: var(--lime); border-color: var(--lime); color: var(--deep); backdrop-filter: none; -webkit-backdrop-filter: none; }

.btn--stroke-dark       { border-color: var(--deep); color: var(--deep); background: transparent; }
.btn--stroke-dark:hover { background: var(--lime); border-color: var(--lime); color: var(--deep); }

.btn--stroke-dark-soft       { border-color: rgba(8, 71, 52, .4); color: var(--deep); background: transparent; }
.btn--stroke-dark-soft:hover { border-color: var(--lime); background: var(--lime); }

.btn--stroke-white       { border-color: rgba(255, 255, 255, .55); color: var(--white); background: transparent; }
.btn--stroke-white:hover { background: var(--lime); border-color: var(--lime); color: var(--deep); }

/* ---------- Ícones ---------- */
.ico-chevron { width: 6px; height: 10px; flex: none; }
.ico-wa      { width: 18px; height: 18px; flex: none; }
.ico-arrow-ur { width: 10px; height: 10px; flex: none; }
.ico-seal    { width: 40px; height: 40px; }

/* ---------- Links ---------- */
.link-arrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--aqua);
  font-weight: 600 !important;
  transition: color 0.2s ease;
}
.link-arrow:hover { color: var(--deep); }
.ico-seta { width: 17px; height: 16px; flex: none; }

.link-underline {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding-bottom: 3px;
  font-size: 16px;
  color: var(--aqua);
  border-bottom: 1px solid var(--aqua);
  width: fit-content;
}
.link-underline:hover { color: var(--deep); border-bottom-color: var(--deep); }

/* ---------- Malha de quadradinhos (padrão de pontos) ----------
   Duas camadas de máscara se cruzam: listras verticais e horizontais
   recortando o preenchimento em grade de quadrados. O preenchimento é
   sempre o gradiente --grad-dots (limão → verde-água, direto do Figma),
   e uma terceira máscara (--fade) esmaece a malha de um lado para o outro. */
.dots {
  --sq: 12px;
  --pitch-x: 77px;
  --pitch-y: 77px;
  --dot-grad: var(--grad-dots);
  --fade: linear-gradient(90deg, rgba(0, 0, 0, .06) 0%, rgba(0, 0, 0, 1) 100%);
  --mask-base: linear-gradient(90deg, #000 var(--sq), transparent var(--sq)),
    linear-gradient(180deg, #000 var(--sq), transparent var(--sq)),
    var(--fade);
  position: absolute;
  pointer-events: none;
  background-image: var(--dot-grad);
  background-size: 100% 100%;
  background-repeat: no-repeat;
  -webkit-mask-image: var(--mask-base);
  mask-image: var(--mask-base);
  -webkit-mask-size: var(--pitch-x) var(--pitch-y), var(--pitch-x) var(--pitch-y), 100% 100%;
  mask-size: var(--pitch-x) var(--pitch-y), var(--pitch-x) var(--pitch-y), 100% 100%;
  -webkit-mask-repeat: repeat, repeat, no-repeat;
  mask-repeat: repeat, repeat, no-repeat;
  mask-composite: intersect;
}

/* Variante "revelar ao rolar": some com fade (opacity) e, ao mesmo tempo,
   uma 4ª camada de máscara (--sweep) varre da esquerda pra direita,
   acendendo a grade de quadradinhos aos poucos — um "stagger" simulado
   sem precisar de um elemento por pontinho. --reveal vai de 0% a 100%
   (registrado como <percentage> para poder ser animado suavemente).
   Ativada junto com o [data-reveal]/.is-revealed já usado no site (script.js). */
@property --reveal {
  syntax: '<percentage>';
  inherits: false;
  initial-value: 100%;
}

.dots[data-reveal] {
  transform: none;
  --reveal: 0%;
  --sweep: linear-gradient(90deg, #000 0%, #000 var(--reveal), transparent calc(var(--reveal) + 10%), transparent 100%);
  -webkit-mask-image: var(--mask-base), var(--sweep);
  mask-image: var(--mask-base), var(--sweep);
  -webkit-mask-size: var(--pitch-x) var(--pitch-y), var(--pitch-x) var(--pitch-y), 100% 100%, 100% 100%;
  mask-size: var(--pitch-x) var(--pitch-y), var(--pitch-x) var(--pitch-y), 100% 100%, 100% 100%;
  -webkit-mask-repeat: repeat, repeat, no-repeat, no-repeat;
  mask-repeat: repeat, repeat, no-repeat, no-repeat;
}

.dots[data-reveal].is-revealed {
  transform: none;
  animation: dots-sweep .9s cubic-bezier(.4, 0, .2, 1) forwards;
}

/* Estas quatro malhas quem varre é a timeline da hero (GSAP), não o
   observador de rolagem — é a mesma lista do isControlled() no script.js.
   Nelas a classe .is-revealed serve só para acender a opacidade junto com a
   varredura; a animação do CSS acima rodaria por cima do GSAP (animação de
   CSS ganha de estilo inline) e a malha varreria duas vezes. */
.dots--hero[data-reveal].is-revealed,
.dots--qs-hero[data-reveal].is-revealed,
.dots--contato[data-reveal].is-revealed,
.dots--course-banner[data-reveal].is-revealed { animation: none; }

@keyframes dots-sweep {
  to { --reveal: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .dots[data-reveal].is-revealed {
    animation: none;
    --reveal: 100%;
  }
}

/* ---------- Preloader de primeira visita (Home) ----------
   Reaproveita o .dots inteiro (mesma malha, mesmo --grad-dots, mesmo
   --sq/--pitch) — só espelha a direção da varredura (direita→esquerda,
   o oposto do padrão do site). Ligado/desligado via classe no <html>
   (ver index.html e script.js). Nunca aparece nas outras 3 páginas,
   que não têm essa marcação nem esse elemento. */
.preloader {
  position: fixed;
  inset: 0;
  z-index: 60;
  display: none;
  align-items: center;
  background: var(--white);
  padding-inline: var(--edge);
}
html.js-preloader-active .preloader { display: flex; }
/* Trava o scroll enquanto o preloader roda. Quem evita o pulo lateral nessa
   hora é o scrollbar-gutter lá no bloco "Base" do html — de propósito NÃO
   aqui e NÃO no body: no body, com overflow hidden, ele reservaria um espaço
   interno e estreitaria o conteúdo justamente durante o preloader. */
html.js-preloader-active,
html.js-preloader-active body { overflow: hidden; }

.preloader__stage {
  position: relative;
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  height: min(562px, 60vh); /* proporção do quadro do Figma (562/1024 do frame 1440×1024) */
}

.preloader__pct {
  position: absolute;
  left: 0;
  bottom: 0;
  /* Mesmo tamanho/peso do H1 da abertura (ver .hero h1) */
  font-size: clamp(34px, 3.9vw, 54px);
  line-height: 1.1;
  font-weight: 400;
  color: var(--deep);
  font-variant-numeric: tabular-nums; /* dígitos não "dançam" de largura ao contar */
}

/* Repare que esta malha NÃO usa [data-reveal] (como as outras do site):
   aquele atributo traz junto a regra genérica [data-reveal]{opacity:0}, que
   só volta a 1 quando o script soma .is-revealed — e aqui quem comanda a
   revelação é a timeline do preloader, via --reveal. Com o atributo, o
   elemento ficava invisível o tempo todo por causa do opacity. Por isso as
   camadas de máscara da varredura são declaradas aqui direto.
   Fórmula do --sweep idêntica à padrão (só o ângulo do gradiente
   invertido: 270deg em vez de 90deg), pra área revelada crescer a partir
   da borda DIREITA em vez da esquerda. */
.dots.dots--preloader {
  position: absolute;
  inset: 0;
  --reveal: 0%;
  --sweep: linear-gradient(270deg, #000 0%, #000 var(--reveal), transparent calc(var(--reveal) + 10%), transparent 100%);
  -webkit-mask-image: var(--mask-base), var(--sweep);
  mask-image: var(--mask-base), var(--sweep);
  -webkit-mask-size: var(--pitch-x) var(--pitch-y), var(--pitch-x) var(--pitch-y), 100% 100%, 100% 100%;
  mask-size: var(--pitch-x) var(--pitch-y), var(--pitch-x) var(--pitch-y), 100% 100%, 100% 100%;
  -webkit-mask-repeat: repeat, repeat, no-repeat, no-repeat;
  mask-repeat: repeat, repeat, no-repeat, no-repeat;
  /* Mesma âncora do .dots--hero: cola o quadrado da direita (o lado por
     onde a varredura começa) na borda direita da caixa, em vez de deixar
     sobrar meio vão. Só nas duas camadas que repetem em grade — o --fade
     e o --sweep continuam em "left top", senão a varredura sairia
     deslocada. */
  -webkit-mask-position: calc(100% + var(--pitch-x) - var(--sq)) top, calc(100% + var(--pitch-x) - var(--sq)) top, left top, left top;
  mask-position: calc(100% + var(--pitch-x) - var(--sq)) top, calc(100% + var(--pitch-x) - var(--sq)) top, left top, left top;
}

/* O Hero fica transparente enquanto o preloader está ativo — é isso que
   deixa o fundo branco + a malha aparecerem ao redor da janelinha da foto
   (que é o próprio .hero__media real, só que clipado a um único ponto no
   centro, ou seja, invisível, no início). Conforme o clip-path cresce
   (script.js), a foto vai cobrindo a malha por cima, do centro pra fora —
   sem precisar de nenhuma animação extra na malha em si.
   O empilhamento (z-index) NÃO muda aqui: ele é fixo no .hero e no
   .site-header — ver o comentário em ".hero". */
html.js-preloader-active .hero { background: transparent; }
html.js-preloader-active .hero__media {
  opacity: 1;
  clip-path: inset(50% 50% 50% 50%); /* colapsado num ponto — nada visível até o script.js começar a crescer */
}
/* O título é branco e, enquanto o fundo do preloader também é branco, ele
   passa despercebido — mas assim que a foto começa a crescer por trás dele,
   apareceria por cima dela, antes da hora. Fica escondido até o preloader
   entregar o bastão para a entrada normal da hero (que revela palavra por
   palavra). */
html.js-preloader-active .hero h1 { opacity: 0; }

@media (prefers-reduced-motion: reduce) {
  html.js-preloader-active .preloader { display: none; }
  html.js-preloader-active .hero { background: var(--ink); }
  html.js-preloader-active .hero__media { clip-path: none; opacity: 1; }
}

/* ---------- Linhas tracejadas com gradiente ---------- */
.dash-line {
  display: block;
  height: 7px;
  background-image: var(--grad-dash-a);
  -webkit-mask-image: linear-gradient(90deg, #000 0 46%, transparent 46% 49%, #000 49% 53%, transparent 53% 57%, #000 57% 100%);
  mask-image: linear-gradient(90deg, #000 0 46%, transparent 46% 49%, #000 49% 53%, transparent 53% 57%, #000 57% 100%);
}

/* ---------- Revelar ao rolar (cards em cascata) ----------
   Usado junto com o script.js: o grupo (ex.: uma grade de cards) ganha
   [data-reveal-group], e cada card dentro dele ganha [data-reveal]. Ao
   entrar na tela pela primeira vez, o script.js aplica um pequeno atraso
   crescente a cada card antes de somar a classe .is-revealed. */
[data-reveal] {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity .5s cubic-bezier(.4, 0, .2, 1), transform .5s cubic-bezier(.4, 0, .2, 1);
}
[data-reveal].is-revealed { opacity: 1; transform: none; }

/* Metade da viewport: mesma base, mas curva var(--ease-out) para casar com hero */
[data-reveal-half] [data-reveal] {
  transition: opacity .5s var(--ease-out), transform .5s var(--ease-out);
}

@media (prefers-reduced-motion: reduce) {
  [data-reveal] { opacity: 1; transform: none; transition: none; }
}

/* ---------- Títulos de banner com entrada palavra por palavra ----------
   [data-split-reveal] no HTML: o texto nasce invisível e, ao entrar na
   tela, o script.js divide as palavras (SplitText) e faz cada uma subir em
   sequência — o mesmo efeito do H1 da abertura, só que disparado ao rolar
   em vez de no carregamento da página. */
[data-split-reveal] { opacity: 0; }
[data-split-reveal].is-revealed { opacity: 1; }
[data-split-reveal] .word-wrap { overflow: hidden; display: inline-block; vertical-align: bottom; padding-bottom: 0.06em; margin-bottom: -0.06em; }
[data-split-reveal] .word { display: inline-block; will-change: transform; }

@media (prefers-reduced-motion: reduce) {
  [data-split-reveal] { opacity: 1; }
}

/* ---------- Hero — estados de entrada (GSAP timeline) ----------
   Antes da timeline rodar o <html> tem .js-hero-preload (injetado no <head>).
   Tudo que a timeline vai animar já nasce escondido só com transform/opacity.
   Sem JS a classe nunca entra, então nada fica escondido. */
.js-hero-preload:not(.js-preloader-active) .hero__media { opacity: 0; }
.js-hero-preload .site-header { opacity: 0; transform: translateY(-22px); }
.js-hero-preload .hero__aside { opacity: 0; transform: translateY(14px); }
.js-hero-preload .hero__actions { opacity: 0; transform: translateY(12px); }
/* SplitText cria estes wrappers — overflow esconde a palavra antes de subir */
.hero h1 .word-wrap { overflow: hidden; display: inline-block; vertical-align: bottom; padding-bottom: 0.06em; margin-bottom: -0.06em; }
.hero h1 .word { display: inline-block; will-change: transform; }
/* Dots do hero fica por último: congela o sweep até a timeline liberar */
.js-hero-preload .dots--hero[data-reveal] { --reveal: 0%; animation: none; }

/* ——— Quem Somos / Cursos / Contato — mesmas regras, mesmos valores ——— */
/* Eyebrows / textos / form escondidos via transform+opacity (H1 fica por conta do SplitText) */
.js-hero-preload .qs-hero .eyebrow { opacity: 0; transform: translateY(10px); }
.js-hero-preload .cursos-hero .eyebrow { opacity: 0; transform: translateY(10px); }
.js-hero-preload .cursos-hero__aside { opacity: 0; transform: translateY(12px); }
.js-hero-preload .contato-hero .eyebrow { opacity: 0; transform: translateY(10px); }
.js-hero-preload .contato-hero__text { opacity: 0; transform: translateY(12px); }
.js-hero-preload .form-embed { opacity: 0; transform: translateY(14px); }
.qs-hero h1 .word-wrap,
.cursos-hero h1 .word-wrap,
.contato-hero h1 .word-wrap { overflow: hidden; display: inline-block; vertical-align: bottom; padding-bottom: 0.06em; margin-bottom: -0.06em; }
.qs-hero h1 .word,
.cursos-hero h1 .word,
.contato-hero h1 .word { display: inline-block; will-change: transform; }
/* Dots dessas páginas também congelam até a timeline */
.js-hero-preload .dots--qs-hero[data-reveal],
.js-hero-preload .dots--contato[data-reveal] { --reveal: 0%; animation: none; }
.js-hero-preload .course-banner { opacity: 0; transform: translateY(24px); }
.js-hero-preload .dots--course-banner { --reveal: 0%; animation: none; }
.js-hero-preload .course-banner__content { opacity: 0; transform: translateY(16px); }
/* Dash-lines de Cursos: revelação por largura fakeada com scaleX (GPU, sem layout) */
.js-hero-preload .dash-line--hero-a,
.js-hero-preload .dash-line--hero-b { transform: scaleX(0); transform-origin: left; }

@media (prefers-reduced-motion: reduce) {
  .js-hero-preload .hero__media,
  .js-hero-preload .site-header,
  .js-hero-preload .hero__aside,
  .js-hero-preload .hero__actions,
  .js-hero-preload .qs-hero .eyebrow,
  .js-hero-preload .cursos-hero .eyebrow,
  .js-hero-preload .cursos-hero__aside,
  .js-hero-preload .contato-hero .eyebrow,
  .js-hero-preload .contato-hero__text,
  .js-hero-preload .form-embed,
  .js-hero-preload .course-banner,
  .js-hero-preload .course-banner__content { opacity: 1; transform: none; }
  .js-hero-preload .dots--hero[data-reveal],
  .js-hero-preload .dots--qs-hero[data-reveal],
  .js-hero-preload .dots--contato[data-reveal],
  .js-hero-preload .dots--course-banner { --reveal: 100%; }
  .js-hero-preload .dash-line--hero-a,
  .js-hero-preload .dash-line--hero-b { transform: none; }
  .hero h1 .word-wrap,
  .qs-hero h1 .word-wrap,
  .cursos-hero h1 .word-wrap,
  .contato-hero h1 .word-wrap { overflow: visible; }
}

/* ==========================================================================
   Cabeçalho
   ========================================================================== */
.site-header {
  position: absolute;
  inset: 0 0 auto 0;
  /* Acima do .hero (61) e do preloader (60); abaixo da dica de arraste (70)
     e do lightbox de vídeo (100). Enquanto o preloader roda o cabeçalho está
     em opacity 0 (ver .js-hero-preload .site-header), então ficar por cima
     do fundo branco não aparece. */
  z-index: 62;
}

.site-header__inner {
  display: flex;
  align-items: center;
  gap: 40px;
  max-width: 1440px;
  margin-inline: auto;
  padding: 20px var(--gutter);
}

.brand {
  display: flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: 100px;
  height: 93px;
  background: var(--aqua);
  transition: background-color .2s cubic-bezier(.4, 0, .2, 1);
}
.brand:hover { background: #019a86; }
.brand img { width: 56px; height: auto; }

.site-nav { display: flex; gap: 32px; }
.site-nav a {
  position: relative;
  font-size: 16px;
  color: var(--white);
  padding-bottom: 2px;
}
.site-nav a::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  height: 1px;
  background: var(--lime);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform .3s cubic-bezier(.4, 0, .2, 1);
}
.site-nav a:hover::after { transform: scaleX(1); }

.site-header__cta { margin-left: auto; }

/* Botão sanduíche (só aparece no celular) */
.nav-toggle {
  display: none;
  margin-left: auto;
  width: 44px;
  height: 44px;
  background: none;
  border: 1px solid rgba(255, 255, 255, .5);
  cursor: pointer;
  padding: 12px 10px;
}
.nav-toggle span {
  display: block;
  height: 2px;
  background: var(--white);
  margin-bottom: 5px;
}
.nav-toggle span:last-child { margin-bottom: 0; }

/* ==========================================================================
   Hero
   ========================================================================== */
.hero {
  position: relative;
  /* Acima do preloader (z-index 60) e abaixo do cabeçalho (62). É PERMANENTE
     de propósito: antes esse 61 só valia enquanto o preloader rodava, e no
     fim da animação o hero perdia a camada própria de uma vez — o navegador
     tinha que jogar fora e refazer a pintura das três fotos de tela cheia no
     mesmo quadro em que a página voltava a rolar, e isso aparecia como um
     apagão, igualzinho a um "refresh". Fixo, não tem transição nenhuma. */
  z-index: 61;
  min-height: 800px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding: 200px var(--edge) 100px;
  background: var(--ink);
  overflow: hidden;
}

.hero__media { position: absolute; inset: 0; }
.hero__media img {
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: 50% 50%;
}

.hero__slide {
  position: absolute;
  inset: 0;
  z-index: 0;
  clip-path: inset(0 0 0 0);
}
.hero__slide--next { z-index: 1; }
.hero__slide--current { z-index: 2; clip-path: inset(0 0 0 0); }
.hero__slide--current.hero__slide--wipe {
  /* Duração precisa bater com WIPE_MS no script.js */
  transition: clip-path 1.2s cubic-bezier(.65, 0, .35, 1), filter 1.2s cubic-bezier(.65, 0, .35, 1);
  clip-path: inset(0 0 0 100%);
  filter: brightness(.82);
}

.hero__slide img { transform: scale(1); }
.hero__slide--zoom img {
  /* Duração precisa bater com ZOOM_MS no script.js: o zoom começa um pouco
     antes da foto ficar 100% visível (para não parecer que "parou" na troca)
     e termina exatamente quando ela começa a sair de cena (efeito wipe). */
  transition: transform 9.04s linear;
  transform: scale(1.1);
}

.hero__scrim   {
  position: absolute;
  inset: 0;
  z-index: 3;
  background: hsla(0, 0%, 0%, 0.14);
  pointer-events: none;
}
.hero__topfade {
  position: absolute;
  inset: 0 0 auto 0;
  z-index: 3;
  height: 200px;
  background: linear-gradient(180deg, #000 0%, rgba(0, 0, 0, 0) 100%);
  opacity: .85;
}

.dots--hero {
  top: 156px;
  right: var(--edge);
  width: min(1081px, 76%);
  height: 169px;
  z-index: 4;
  --pitch-x: 76.5px;
  --pitch-y: 77px;
  --fade: linear-gradient(90deg, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, .5) 78%, #000 100%);
  /* Cola o quadradinho da direita (o lado que o --fade deixa 100% visível)
     na borda direita da caixa: cada quadrado ocupa só o canto esquerdo da
     sua célula (--sq de --pitch-x), então ancorar pela célula inteira (ex.:
     "right top") deixava um vão vazio de --pitch-x menos --sq antes da
     borda. Deslocando --pitch-x menos --sq além da borda, é o próprio
     quadrado que termina exatamente nela — e como isso não depende da
     largura da caixa, o último quadrado nunca mais aparece cortado nem
     afastado, em nenhuma resolução. O corte eventual passa a acontecer só
     do lado esquerdo, onde o --fade já deixa a malha quase invisível. */
  -webkit-mask-position: calc(100% + var(--pitch-x) - var(--sq)) top;
  mask-position: calc(100% + var(--pitch-x) - var(--sq)) top;
}

.hero__content {
  position: relative;
  z-index: 2;
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  display: flex;
  flex-direction: column;
  gap: 88px;
}

.hero__lead {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 60px;
}

.hero h1 {
  font-size: clamp(34px, 3.9vw, 54px);
  line-height: 1.1;
  font-weight: 400;
  color: var(--white);
  max-width: 14em;
}

.hero h1 span { display: block; }

.hero__aside { max-width: 412px; display: flex; flex-direction: column; gap: 20px; }
.hero__kicker { font-size: clamp(20px, 1.8vw, 24px); line-height: 1.2; font-weight: 500; color: var(--white); }
.hero__text   { font-size: 16px; line-height: 1.4; color: rgba(255, 255, 255, .92); }

.hero__actions { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.hero__actions .btn { width: 100%; }

/* ==========================================================================
   Sobre
   ========================================================================== */
.about {
  position: relative;
  padding: 100px var(--edge) 50px;
  display: flex;
  justify-content: center;
  overflow: hidden;
}

.dots--about {
  top: 78px;
  left: var(--edge);
  right: var(--edge);
  height: 203px;
  --sq: 15px;
  --pitch-x: 92.2px;
  --pitch-y: 91.5px;
  /* Bem apagada até passar da faixa do título (~41% da largura da caixa),
     pra não "invadir" visualmente atrás do texto; só depois disso é que
     começa a subir de verdade até ficar sólida na borda direita. */
  --fade: linear-gradient(90deg, rgba(0, 0, 0, .03) 0%, rgba(0, 0, 0, .04) 41%, rgba(0, 0, 0, .45) 55%, #000 100%);
  /* Mesma âncora do .dots--hero: cola o quadrado da direita (lado visível
     pelo --fade) na borda direita, sem vão, em qualquer largura. */
  -webkit-mask-position: calc(100% + var(--pitch-x) - var(--sq)) top;
  mask-position: calc(100% + var(--pitch-x) - var(--sq)) top;
  @media (max-width: 768px) {
    display: none;
  }
}

/* No computador sobra uma faixa livre à esquerda do título (por causa do
   recuo de 109px logo abaixo). Igual ao Figma, essa faixa ganha sua própria
   malha, independente da que já existe do lado direito — mesma técnica do
   par .dots--edge-left/.dots--edge-right usado em "Diferenciais". Do tablet
   pra baixo esse recuo some (ver bloco "Responsivo" ≤1200px), então a faixa
   nova fica escondida e a malha volta a ser só a de sempre. */
.dots--about-left {
  display: none;
  top: 78px;
  left: var(--edge);
  width: 109px;
  height: 203px;
  --pitch-x: 92.2px;
  --pitch-y: 91.5px;
  --dot-grad: linear-gradient(#c7faba, #c7faba);
  --fade: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .35) 55%, rgba(0, 0, 0, .1) 100%);
}
@media (min-width: 1201px) {
  .dots--about-left { display: block; }
}

.about__content {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-left: 109px;
  display: flex;
  flex-direction: column;
  gap: 40px;
}

.about__title {
  max-width: 412px;
  font-size: clamp(28px, 3vw, 40px);
  line-height: 1.2;
  font-weight: 400;
  color: var(--deep);
  letter-spacing: -0.01em;
}

.about__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 130px;
}

.about__copy {
  flex: 0 1 410px;
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.about__copy p { font-size: 20px; line-height: 1.6; }

/* Cartões de números */
.big-numbers { display: flex; flex: 0 0 auto; }
.bn-card {
  width: 313px;
  min-height: 275px;
  padding: 40px 32px;
  border: 1px solid var(--aqua);
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 12px;
}
.bn-card + .bn-card { margin-left: -1px; }
.bn-card__body { display: flex; flex-direction: column; gap: 10px; }
.bn-card__figure { font-size: 36px; line-height: 1; font-weight: 400; color: var(--deep); }
.bn-card__label  { font-size: 16px; line-height: 1.4; }

/* ==========================================================================
   Faixa com chamadas (imagem grande + botões)
   ========================================================================== */
.cta-band {
  padding: 50px var(--edge);
  background: linear-gradient(180deg, var(--white) 0%, var(--mint) 100%);
}

.cta-card {
  position: relative;
  max-width: var(--container);
  margin-inline: auto;
  aspect-ratio: 1276 / 480;
  min-height: 320px;
  overflow: hidden;
  display: flex;
  align-items: flex-end;
  justify-content: flex-end;
  padding: 40px;
}

.cta-card__img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 40%;
}

.dash-line--cta-1 {
  position: absolute;
  top: 31%;
  margin-right: 10;
  width: 30%;
}
.dash-line--cta-2 {
  position: absolute;
  top: 50%;
  left: 0;
  width: 34%;
  background-image: var(--grad-dash-b);
}

.cta-card__actions {
  position: relative;
  display: flex;
  gap: 17px;
  flex-wrap: wrap;
  justify-content: flex-end;
}

/* ==========================================================================
   Cursos
   ========================================================================== */
.courses {
  background: var(--mint);
  padding: 50px var(--edge) 100px;
}

.courses__inner {
  max-width: var(--container);
  margin-inline: auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 57px;
}

.courses__head {
  width: 100%;
  max-width: 700px;
  align-self: flex-start;
  display: flex;
  flex-direction: column;
  gap: 18px;
  margin-bottom: 15px;
}
.courses__sub { font-size: 18px; line-height: 1.2; }

.courses__grid {
  width: 100%;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 20px;
}

.course-card {
  display: flex;
  align-items: stretch;
  gap: 32px;
  padding: 4px 36px 4px 4px;
  background: var(--white);
  border: 1px solid var(--white);
  min-height: 428px;
  transition: border-color .2s cubic-bezier(.4, 0, .2, 1), opacity .5s cubic-bezier(.4, 0, .2, 1), transform .5s cubic-bezier(.4, 0, .2, 1);
}
.course-card:hover { border-color: var(--aqua); }

/* O cartão inteiro é clicável: o link "Matricule-se" continua sendo o único
   link real, mas seu ::after é esticado por cima de todo o cartão. Assim não
   há link duplicado nem link dentro de link, e leitores de tela continuam
   anunciando um único destino. */
.course-card { position: relative; }
.course-card .link-arrow::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 2;
}
.course-card:hover .link-arrow { color: var(--deep); }

.course-card__media {
  position: relative;
  flex: 0 0 49%;
  overflow: hidden;
}
/* Cards com dash-line (home) recortam a foto no frame interno, não mais
   aqui — assim o traço decorativo (irmão do frame) pode ultrapassar a
   foto e cruzar por cima da área branca do card sem ser cortado. */
.courses .course-card__media { overflow: visible; }
.course-card__media-frame {
  position: absolute;
  inset: 0;
  overflow: hidden;
}
.course-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform .4s cubic-bezier(.4, 0, .2, 1);
}
.course-card:hover .course-card__media img { transform: scale(1.1); }

@media (prefers-reduced-motion: reduce) {
  .course-card__media img { transition: none; }
}
.dash-line--card {
  position: absolute;
  bottom: 46px;
  left: 55%;
  width: 90%;
  background-image: var(--grad-dash-a);
  z-index: 1;
}

@media (max-width: 767px) {
  /* Abaixo de 768px o cartão empilha (foto em cima, texto embaixo) e some
     o espaço que o tracinho cruzava entre os dois, então ele é escondido. */
  .dash-line--card { display: none; }
}

.course-card__body {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  gap: 24px;
  padding: 40px 0;
  justify-content: center;
}

.course-card__group { display: flex; flex-direction: column; gap: 15px; }

.tags { display: flex; flex-wrap: wrap; gap: 8px; }
.tag {
  background: var(--aqua);
  color: var(--white);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.06em;
  padding: 4px 8px;
}

.course-card h3 {
  font-size: clamp(20px, 1.9vw, 24px);
  line-height: 1.35;
  font-weight: 400;
  color: var(--deep);
}

.courses__more { min-width: 412px; }

/* ==========================================================================
   Depoimentos
   ========================================================================== */
.testimonials {
  display: flex;
  background: var(--aqua);
  min-height: 500px;
}

.testimonials__media {
  position: relative;
  flex: 0 0 49.3%;
  overflow: hidden;
}
.testimonials__media img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 45% 40%;
}

.testimonials__caption {
  position: absolute;
  left: var(--edge-vw);
  bottom: 100px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
/* Ancoradas na própria legenda (não na imagem inteira) para que acompanhem
   o texto em qualquer largura de tela. left:0 alinha pela borda esquerda do
   texto; o transform desloca a linha para fora dele, criando o efeito do
   Figma sem nunca cruzar por cima das palavras. */
.dash-line--quote-1,
.dash-line--quote-2 {
  position: absolute;
  left: 0;
  transform: translateX(calc(-1 * var(--edge-vw)));
}
.dash-line--quote-1 {
  bottom: calc(100% + 28px);
  width: 220px;
  background-image: var(--grad-dash-b);
}
.dash-line--quote-2 {
  top: calc(100% + 22px);
  width: 260px;
  background-image: var(--grad-dash-a);
}
.testimonials__title {
  font-size: clamp(28px, 3.2vw, 42px);
  line-height: 1.2;
  color: var(--white);
}

.testimonials__panel {
  position: relative;
  flex: 1 1 auto;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  padding: 60px var(--edge-vw) 60px 72px;
}

.quote { position: relative; width: 100%; max-width: 548px; }

.quote__item { display: none; position: relative; padding-left: 0; }
.quote__item[data-active] { display: block; }

.quote__item.is-leaving { animation: quote-out .22s ease both; }

.quote__item.is-entering .quote__mark,
.quote__item.is-entering .quote__course,
.quote__item.is-entering blockquote,
.quote__item.is-entering .quote__author {
  opacity: 0;
  transform: translateY(10px);
  animation: quote-in .5s cubic-bezier(.22, .61, .36, 1) both;
}
.quote__item.is-entering .quote__mark    { animation-delay: 0ms; }
.quote__item.is-entering .quote__course  { animation-delay: 80ms; }
.quote__item.is-entering blockquote      { animation-delay: 160ms; }
.quote__item.is-entering .quote__author  { animation-delay: 240ms; }

@keyframes quote-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@keyframes quote-out { from { opacity: 1; transform: none; } to { opacity: 0; transform: translateY(-8px); } }

@media (prefers-reduced-motion: reduce) {
  .quote__item.is-leaving,
  .quote__item.is-entering .quote__mark,
  .quote__item.is-entering .quote__course,
  .quote__item.is-entering blockquote,
  .quote__item.is-entering .quote__author {
    animation: none;
    opacity: 1;
    transform: none;
  }
}

.quote__mark {
  position: absolute;
  top: -12px;
  left: -32px;
  font-size: 56px;
  line-height: 1;
  font-weight: 600;
  color: var(--lime);
}

.quote__course { font-size: 18px; line-height: 1.4; color: rgba(255, 255, 255, .8); margin-bottom: 5px; }
.quote blockquote { font-size: clamp(20px, 1.9vw, 24px); line-height: 1.4; color: var(--white); }

.quote__author {
  display: flex;
  align-items: center;
  gap: 20px;
  margin-top: 60px;
}
.quote__author img { width: 60px; height: 61px; object-fit: cover; }
.quote__name { font-size: 18px; font-weight: 600; line-height: 1.4; color: var(--white); }
.quote__role { font-size: 14px; line-height: 1.4; color: var(--white); }

.quote__nav { position: absolute; right: var(--edge-vw); bottom: 104px; display: flex; }
.quote__nav button {
  width: 60px; height: 60px;
  display: grid; place-items: center;
  background: none;
  border: 1px solid var(--white);
  color: var(--white);
  cursor: pointer;
  transition: background-color .2s ease;
}
.quote__nav button + button { margin-left: -1px; }
.quote__nav button:hover { background: rgba(255, 255, 255, .16); }
.quote__nav svg { width: 6px; height: 10px; }

/* ==========================================================================
   FAQ
   ========================================================================== */
.faq { background: var(--white); padding: 100px var(--edge); }

.faq__inner {
  max-width: var(--container);
  margin-inline: auto;
  display: grid;
  grid-template-columns: 631fr 629fr;
  gap: 17px;
}

.faq__aside {
  display: flex;
  flex-direction: column;
  gap: 72px;
  /* Acompanha a rolagem: o título e o contato seguem visíveis mesmo com muitas perguntas */
  position: sticky;
  top: 100px;
  align-self: start;
}
.faq__help  { display: flex; flex-direction: column; gap: 5px; }
.faq__help p { font-size: 16px; line-height: 1.4; color: rgba(51, 51, 51, .8); }

.faq__list { display: flex; flex-direction: column; gap: 4px; }

/* Versão do FAQ com as cores trocadas (fundo claro, caixas brancas) */
.faq--inverted { background: var(--mint); }
.faq--inverted .faq-item { background: var(--white); }

.faq-item { background: var(--mint); }
.faq-item__q {
  width: 100%;
  display: flex;
  align-items: flex-start;
  gap: 16px;
  padding: 28px;
  background: none;
  border: 0;
  font-family: inherit;
  font-size: 16px;
  line-height: 1.6;
  color: var(--text);
  text-align: left;
  cursor: pointer;
  transition: color .2s cubic-bezier(.4, 0, .2, 1);
  font-weight: 500;
}
.faq-item__q:hover { color: var(--aqua); }

/* Sinal "+" que vira "−" quando aberto */
.faq-item__sign {
  position: relative;
  flex: none;
  width: 14px;
  height: 14px;
  margin-top: 6px;
}
.faq-item__sign::before,
.faq-item__sign::after {
  content: '';
  position: absolute;
  inset: 50% 0 auto 0;
  height: 1.6px;
  background: var(--aqua);
  transform: translateY(-50%);
  transition: transform .2s ease, opacity .2s ease;
}
.faq-item__sign::after { transform: translateY(-50%) rotate(90deg); }
.faq-item__q[aria-expanded="true"] .faq-item__sign::after { transform: translateY(-50%) rotate(0deg); opacity: 0; }

.faq-item__a {
  display: grid;
  grid-template-rows: 0fr;
  opacity: 0;
  transition: grid-template-rows .28s cubic-bezier(.4, 0, .2, 1), opacity .2s ease;
}
.faq-item__a.is-open { grid-template-rows: 1fr; opacity: 1; }
.faq-item__a__inner { overflow: hidden; }
.faq-item__a p {
  font-size: 16px;
  line-height: 1.6;
  color: var(--text);
  padding: 0 28px 28px 58px;
}

@media (prefers-reduced-motion: reduce) {
  .faq-item__a { transition: none; }
}

/* ==========================================================================
   Faixa de transição
   ========================================================================== */
/* Fica grudada (sticky) no topo da tela. O `main` ganha um respiro reservado
   do mesmo tamanho da faixa (só quando a página tem essa faixa, via :has) e o
   rodapé sobe por cima dele com uma margem negativa do mesmo valor — o respiro
   e a margem se cancelam, então nada disso aparece como espaço em branco;
   eles só criam a "pista" de rolagem que faz o rodapé deslizar cobrindo a
   faixa enquanto ela está parada no topo. */
.transition {
  position: sticky;
  top: 0;
  z-index: 1;
  height: 620px;
  overflow: hidden;
  background: var(--ink);
}
main:has(> .transition)::after { content: ""; display: block; height: 620px; }
body:has(.transition) .site-footer { margin-top: -620px; }
.transition img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 45%;
}

.transition__fade { position: absolute; top: 0; bottom: 0; width: 384px; max-width: 30%; }
.transition__fade--left  {
  left: 0;
  background: linear-gradient(90deg, rgba(0, 0, 0, .62) 0%, rgba(0, 0, 0, .28) 55%, rgba(0, 0, 0, 0) 100%);
}
.transition__fade--right { right: 0; background: linear-gradient(270deg, rgba(75, 55, 10, .55) 0%, rgba(40, 30, 6, .24) 55%, rgba(0, 0, 0, 0) 100%); }

.dots--transition-left,
.dots--transition-right {
  top: 61px;
  width: 297px;
  height: 502.8px;
  --pitch-x: 70.5px;
  --pitch-y: 81.3px;
}
.dots--transition-left {
  left: 48px;
  --dot-grad: var(--grad-dots-transition);
  --fade: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .3) 50%, rgba(0, 0, 0, .04) 100%);
}
.dots--transition-right {
  right: 48px;
  --fade: linear-gradient(90deg, rgba(0, 0, 0, .08) 0%, rgba(0, 0, 0, .4) 45%, #000 100%);
}

/* ==========================================================================
   Rodapé
   ========================================================================== */
.site-footer {
  position: relative;
  z-index: 2;
  background: var(--white);
  padding: 100px var(--edge) 0;
}
.site-footer__inner { max-width: var(--container); margin-inline: auto; }

/* -- Parte de cima -- */
.footer-top {
  display: flex;
  justify-content: space-between;
  gap: 60px;
  flex-wrap: wrap;
}

.footer-top__brand { flex: 1 1 420px; max-width: 520px; }
.footer-logo { width: 200px; height: auto; }
.dash-line--footer {
  width: 285px;
  margin: 18px 0 24px;
  background-image: var(--grad-dash-c);
  -webkit-mask-image: linear-gradient(90deg, #000 0 55%, transparent 55% 60%, #000 60% 63%, transparent 63% 68%, #000 68% 100%);
  mask-image: linear-gradient(90deg, #000 0 55%, transparent 55% 60%, #000 60% 63%, transparent 63% 68%, #000 68% 100%);
}
.footer-claim {
  font-size: clamp(20px, 2vw, 24px);
  line-height: 1.4;
  color: var(--text);
  max-width: 420px;
}

.socials { display: flex; gap: 8px; margin-top: 56px; }
.socials a {
  width: 60px; height: 60px;
  display: grid; place-items: center;
  border: 1px solid var(--deep);
  color: var(--deep);
  transition: background-color .2s ease, color .2s ease, border-color .2s ease;
}
.socials a:hover { background: var(--lime); border-color: var(--lime); color: var(--deep); }
.socials svg { width: 22px; height: 22px; }

.footer-top__links {
  flex: 0 1 307px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.footer-top__links .btn { min-height: 60px; width: 100%; }
.footer-contact { align-self: flex-end; margin-top: 48px; font-size: 20px; }

/* -- Parte do meio -- */
.footer-mid {
  display: grid;
  grid-template-columns: 216px minmax(0, 1fr) 301px;
  gap: 62px;
  padding: 60px 0;
  margin-top: 60px;
  border-top: 1px solid #e3e8e7;
}

.footer-mec > p { font-size: 13px; line-height: 1.5; color: var(--text); }
.footer-mec__box {
  margin-top: 18px;
  background: var(--mint);
  padding: 20px;
  width: 162px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  align-items: center;
}
.footer-mec__logo { width: 80px; height: auto; }
.footer-mec__qr {
  width: 122px; height: 122px;
  background: var(--white);
  padding: 6px;
}

.footer-col h3 {
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--aqua);
  margin-bottom: 18px;
}

.portarias dt { font-size: 13px; font-weight: 600; color: var(--text); margin-top: 14px; }
.portarias dt:first-child { margin-top: 0; }
.portarias dd { font-size: 13px; line-height: 1.5; color: var(--text); max-width: 620px; }

.footer-links { list-style: none; display: flex; flex-direction: column; gap: 10px; }
.footer-links a { font-size: 14px; line-height: 1.4; color: var(--text); }
.footer-links a:hover { color: var(--aqua); }
.footer-links__disabled,
.footer-policies__disabled {
  font-size: 14px;
  line-height: 1.4;
  color: var(--text);
  opacity: .45;
  cursor: default;
  user-select: none;
}

/* -- Faixa final -- */
.footer-bottom {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
  padding: 26px 0 34px;
  border-top: 1px solid #e3e8e7;
  font-size: 13px;
  color: var(--text);
}
.footer-bottom__policies { display: flex; gap: 24px; }
.footer-bottom__policies a:hover { color: var(--aqua); }
.footer-bottom__policies .footer-policies__disabled { font-size: inherit; }
.footer-bottom__credit { display: flex; align-items: center; gap: 6px; }
.footer-bottom__credit img { width: 20px; height: 20px; }

/* ==========================================================================
   Responsivo
   ========================================================================== */
@media (max-width: 1200px) {
  .about__content { padding-left: 0; }
  .about__row { gap: 60px; flex-wrap: wrap; }
  .big-numbers { flex: 1 1 100%; }
  .bn-card { width: 50%; }
  .faq__aside { gap: 40px; }
}

@media (max-width: 1000px) {
  /* Mesmo respiro do computador (200px) — abaixo daqui o texto empilha e
     fica mais alto, então reduzir esse espaço encostava o conteúdo no menu. */
  .hero { min-height: 640px; padding-top: 200px; }
  .hero h1 span { display: inline; }
  .hero__lead { flex-direction: column; align-items: flex-start; gap: 32px; }
  .hero__content { gap: 48px; }
  /* Menos preenchimento nos botões pra "Falar com consultor" caber numa
     linha só lado a lado com o outro botão, nessa faixa mais estreita. */
  .hero__actions { gap: 12px; }
  .hero__actions .btn { padding: 0 22px; }

  .courses__grid { grid-template-columns: 1fr; }
  .course-card { min-height: 0; }

  .testimonials { flex-direction: column; }
  .testimonials__media { flex: none; height: 380px; }
  .testimonials__caption {
  bottom: 80px;
}
  .testimonials__panel { padding: 56px var(--gutter) 120px 72px; }
  .quote__nav { right: var(--gutter); bottom: 40px; }

  .faq__inner { grid-template-columns: 1fr; gap: 48px; }
  .faq__aside { position: static; }

  .footer-mid { grid-template-columns: 1fr; gap: 40px; }
}

@media (max-width: 760px) {
  .site-nav,
  .site-header__cta { display: none; }
  .nav-toggle { display: block; }

  .site-header.is-open {
    background: var(--white);
    border-bottom: 1px solid #e3e8e7;
  }
  .site-header.is-open .site-header__inner { flex-wrap: wrap; }
  .site-header.is-open .site-nav a { color: var(--deep); }
  .site-header.is-open .site-nav a::after { background: var(--aqua); }
  .site-header.is-open .nav-toggle { border-color: rgba(8, 71, 52, .4); }
  .site-header.is-open .nav-toggle span { background: var(--deep); }
  .site-header.is-open .site-header__cta {
    border-color: rgba(8, 71, 52, .4);
    color: var(--deep);
  }
  .site-header.is-open .site-header__cta:hover {
    background: var(--lime);
    border-color: var(--lime);
    color: var(--deep);
  }
  .site-header.is-open .site-nav {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 18px;
  width: 100%;
  margin-left: 0;
  order: 3;
  padding: 8px 0 1px;
  overflow: hidden;
  animation: nav-reveal .38s cubic-bezier(.4, 0, .2, 1) both;
}
  .site-header.is-open .site-nav a {
    animation: nav-item-reveal .38s cubic-bezier(.4, 0, .2, 1) both;
  }
  .site-header.is-open .site-nav a:nth-child(1) { animation-delay: .06s; }
  .site-header.is-open .site-nav a:nth-child(2) { animation-delay: .13s; }
  .site-header.is-open .site-header__cta {
    display: inline-flex;
    width: 100%;
    order: 4;
    margin: 0 0 24px;
    animation: nav-item-reveal .38s cubic-bezier(.4, 0, .2, 1) both;
    animation-delay: .2s;
  }

  @keyframes nav-reveal {
    from { max-height: 0; opacity: 0; }
    to   { max-height: 220px; opacity: 1; }
  }
  @keyframes nav-item-reveal {
    from { opacity: 0; transform: translateY(-10px); }
    to   { opacity: 1; transform: translateY(0); }
  }

  .hero {
  padding-top: 250px;
  padding-bottom: 56px;
  min-height: 800px;
}
  .hero__aside { max-width: none; }
  /* Do notebook até o tablet os dois botões ficam lado a lado; só empilha
     aqui, no celular, onde a coluna já não tem largura para os dois. */
  .hero__actions { grid-template-columns: 1fr; }

  .about { padding-top: 72px; }
  .about__copy p { font-size: 18px; }
  .bn-card { width: 100%; }
  .big-numbers { flex-direction: column; }
  .bn-card + .bn-card { margin-left: 0; margin-top: -1px; }

  .cta-card { aspect-ratio: auto; min-height: 420px; padding: 24px; }
  .cta-card__actions { width: 100%; }
  .cta-card__actions .btn { flex: 1 1 100%; }

  .courses { padding-bottom: 72px; }
  .course-card { flex-direction: column; padding-right: 0; gap: 0; }
  .course-card__media { flex: none; height: 240px; }
  .course-card__body { padding: 28px 24px 32px; }
  .courses__more { min-width: 0; width: 100%; }

  .testimonials__panel {
    padding: 48px var(--gutter) 48px 56px;
    flex-direction: column;
    align-items: flex-start;
  }
  .quote__mark { left: -24px; font-size: 44px; }
  .quote__author { margin-top: 36px; }
  .quote__nav { position: static; right: auto; bottom: auto; margin-top: 40px; }

  .faq { padding-block: 72px; }
  .faq-item__q { padding: 22px; font-size: 15px; }
  .faq-item__a p { padding: 0 22px 22px 52px; }

  .transition { height: 380px; }
  main:has(> .transition)::after { height: 380px; }
  body:has(.transition) .site-footer { margin-top: -380px; }
  .dots--transition-left, .dots--transition-right { top: 30px; height: 320px; width: 160px; }

  .site-footer { padding-top: 72px; }
  .footer-top__links { flex: 1 1 100%; }
  .footer-contact { align-self: flex-start; margin-top: 28px; }
  .socials { margin-top: 32px; }
  .footer-bottom { flex-direction: column; align-items: flex-start; }
}

/* ==========================================================================
   Variante do cabeçalho para páginas sem hero (fundo sólido)
   ========================================================================== */
.site-header--solid { position: relative; background: var(--ink); }

.page-intro {
  background: var(--white);
  padding: 100px var(--edge);
}
.page-intro__inner { max-width: var(--container); margin-inline: auto; display: flex; flex-direction: column; gap: 32px; }
.page-intro h1 {
  font-size: clamp(32px, 4vw, 54px);
  line-height: 1.1;
  font-weight: 400;
  color: var(--deep);
  max-width: 20ch;
}
.page-intro p { font-size: 20px; line-height: 1.6; max-width: 640px; }
.page-intro .btn { align-self: flex-start; }

/* ==========================================================================
   PÁGINA QUEM SOMOS
   ========================================================================== */

/* ---------- Cabeçalho sobre fundo claro ---------- */
.site-header--light { position: relative; inset: auto; }
.site-header--light .site-nav a { color: var(--deep); }
.site-header--light .site-nav a::after { background: var(--aqua); }
.site-header--light .nav-toggle { border-color: rgba(8, 71, 52, .4); }
.site-header--light .nav-toggle span { background: var(--deep); }
.site-header--light.is-open { background: var(--white); border-bottom-color: #e3e8e7; }

/* ---------- Blocos de texto corrido ---------- */
.prose-block {
  flex: 0 1 520px;
  display: flex;
  flex-direction: column;
  gap: 30px;
  font-size: 18px;
  line-height: 1.6;
  color: var(--text);
}

/* ---------- Abertura ---------- */
.qs-hero {
  background: var(--white);
  min-height: 530px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding-bottom: 100px;
}

.qs-hero__band {
  position: relative;
  padding: 36px var(--edge) 0;
}

.dots--qs-hero {
  top: 0;
  left: var(--edge);
  right: var(--edge);
  height: 290.1px;
  --pitch-x: 91.7px;
  --pitch-y: 91.7px;
  /* Zona baixa (0–70%) cobre a largura do título (max-width: 75%) para não
     brigar com a leitura do texto; só depois disso a malha ganha opacidade. */
  --fade: linear-gradient(90deg, rgba(0, 0, 0, .05) 0%, rgba(0, 0, 0, .08) 70%, rgba(0, 0, 0, .9) 92%, #000 100%);
  /* Mesma âncora do .dots--hero: cola o quadrado da direita (lado visível
     pelo --fade) na borda direita, sem vão, em qualquer largura. */
  -webkit-mask-position: calc(100% + var(--pitch-x) - var(--sq)) top;
  mask-position: calc(100% + var(--pitch-x) - var(--sq)) top;
}

.qs-hero__content {
  position: relative;
  max-width: 75%;
  display: flex;
  flex-direction: column;
  gap: 17px;
}

.qs-hero h1 {
  font-size: clamp(38px, 5vw, 72px);
  line-height: 1.02;
  font-weight: 400;
  color: var(--deep);
}
.qs-hero h1 span { display: block; }

/* ---------- Quem somos ---------- */
.qs-intro {
  padding: 0 var(--edge) 100px;
  display: flex;
  justify-content: center;
}

.qs-intro__inner {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  display: flex;
  flex-direction: column;
  gap: 117px;
  margin-top: 100px;
}

.qs-intro__row { display: flex; align-items: center; justify-content: space-between; gap: 128px; }

/* Mesmo recuo do texto em .about__content (home) */
.qs-intro__row .prose-block { margin-left: 109px; }

/* Carrossel automático (3 fotos) com o selo da marca fixo por cima, igual ao
   fundo rotativo da abertura da Home — ver `.hero__media` / `.hero__slide` */
.qs-slider {
  position: relative;
  flex: 0 0 520px;
  height: 374px;
  overflow: hidden;
  background: var(--mint);
}
.qs-slider__media { position: absolute; inset: 0; }
.qs-slider__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 50%;
}
/* Único recorte manual (o resto já vem enquadrado certo do Figma) */
.qs-slider__slide:first-child img { object-position: 50% 42%; }

.qs-slider__slide {
  position: absolute;
  inset: 0;
  z-index: 0;
  clip-path: inset(0 0 0 0);
}
.qs-slider__slide--next { z-index: 1; }
.qs-slider__slide--current { z-index: 2; clip-path: inset(0 0 0 0); }
.qs-slider__slide--current.qs-slider__slide--wipe {
  /* Duração precisa bater com QS_WIPE_MS no script.js */
  transition: clip-path 1.2s cubic-bezier(.65, 0, .35, 1), filter 1.2s cubic-bezier(.65, 0, .35, 1);
  clip-path: inset(0 0 0 100%);
  filter: brightness(.82);
}
.qs-slider__slide img { transform: scale(1); }
.qs-slider__slide--zoom img {
  /* Duração precisa bater com QS_ZOOM_MS no script.js */
  transition: transform 6.04s linear;
  transform: scale(1.1);
}

.qs-slider__logo {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 170px;
  height: auto;
  z-index: 3;
}

/* Cartões de números na versão larga */
.big-numbers--wide .bn-card { flex: 1 1 50%; width: 50%; min-height: 283px; }
.big-numbers--wide .bn-card__label { font-size: 20px; }

/* ---------- Faixa "Nossa trajetória" ---------- */
.qs-quote {
  position: relative;
  min-height: 588px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 130px var(--edge) 105px;
  background: var(--ink);
  overflow: hidden;
}
/* A foto é posicionada como no design: maior que a faixa e deslocada,
   para a executiva cair no mesmo ponto do layout. */
.qs-quote__img {
  position: absolute;
  top: -18%;
  left: -3.7%;
  width: 143.5%;
  max-width: none;
  height: auto;
}
.qs-quote__scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(200.66deg, rgba(0, 0, 0, 0) 20%, rgba(0, 0, 0, .98) 90%);
}
.dash-line--quote-a {
  position: absolute;
  top: 25%;
  left: 42%;
  width: 23.2%;
  background-image: var(--grad-dash-b);
}
.dash-line--quote-b { position: absolute; top: 77.4%; left: 1%;   width: 41%; }

.qs-quote__inner { position: relative; max-width: 50%; }
.qs-quote__inner p {
  font-size: clamp(26px, 2.9vw, 40px);
  line-height: 1.2;
  color: var(--white);
}

/* ---------- A FIA ---------- */
.qs-fia { background: var(--white); padding: 100px var(--edge); }
.qs-fia__inner {
  max-width: var(--container);
  margin-inline: auto;
  display: flex;
  flex-direction: column;
  gap: 40px;
}
.qs-fia .section-title { max-width: 480px; }
.qs-fia__row {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 128px;
}

/* Moldura do vídeo */
.video-frame {
  position: relative;
  flex: 0 0 520px;
  height: 300px;
  padding: 0;
  border: 0;
  background: var(--ink);
  overflow: hidden;
  cursor: pointer;
}
.video-frame__poster {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  pointer-events: none;
}
/* Véu escuro por cima do vídeo, para o botão de play ter contraste */
.video-frame::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
  background: rgba(16, 17, 11, .32);
  pointer-events: none;
  transition: background .35s ease-in-out;
}
.video-frame:hover::after { background: rgba(16, 17, 11, .45); }

.video-frame__play {
  position: absolute;
  z-index: 2;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 70px;
  height: 70px;
  padding: 0;
  border: 1px solid var(--aqua);
  background: transparent;
  color: var(--aqua);
  transition: background .35s ease-in-out, border-color .35s ease-in-out,
              color .35s ease-in-out, padding .35s ease-in-out;
}
.video-frame__play-label {
  max-width: 0;
  overflow: hidden;
  opacity: 0;
  font-size: 14px;
  font-weight: 500;
  line-height: 1;
  letter-spacing: .08em;
  text-transform: uppercase;
  white-space: nowrap;
  transition: max-width .35s ease-in-out, opacity .35s ease-in-out,
              margin-right .35s ease-in-out;
}
.video-frame__play-icon { flex: none; display: block; }

.video-frame:hover .video-frame__play {
  background: var(--aqua);
  color: var(--white);
  padding: 0 24px;
}
.video-frame:hover .video-frame__play-label {
  max-width: 90px;
  opacity: 1;
  margin-right: 12px;
}

/* ---------- Faixa deslizante ---------- */
.marquee {
  background: linear-gradient(180deg, var(--white) 0%, var(--mint) 100%);
  padding: 86px 0;
  overflow: hidden;
}
.marquee__track {
  display: flex;
  width: max-content;
  animation: marquee-scroll 44s linear infinite;
}
.marquee__group {
  display: flex;
  align-items: center;
  gap: 40px;
  padding-right: 40px;
}
.marquee__word {
  font-size: clamp(30px, 3.4vw, 48px);
  line-height: 1;
  color: var(--deep);
  white-space: nowrap;
}
.marquee__word--aqua { color: var(--aqua); }
.marquee__tile {
  flex: none;
  width: 108px;
  height: 108px;
  background: var(--aqua);
  overflow: hidden;
}
.marquee__tile img { width: 100%; height: 100%; object-fit: cover; }

@keyframes marquee-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .marquee__track { animation: none; }
}

/* ---------- Missão, visão e valores ---------- */
.mvv { background: var(--mint); padding: 100px 0; }
.mvv__head { padding: 0 var(--edge); margin-bottom: 72px; }
.mvv__head .section-title { max-width: 627px; }

.mvv__rail {
  display: flex;
  align-items: stretch;
  gap: 20px;
  padding: 0 var(--edge);
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scrollbar-width: none;
  cursor: grab;
  -webkit-user-select: none;
  user-select: none;
}
.mvv__rail::-webkit-scrollbar { display: none; }
.mvv__rail.is-dragging { cursor: grabbing; scroll-snap-type: none; }
.mvv__rail.is-dragging * { pointer-events: none; }

.mvv-card {
  flex: none;
  width: 627px;
  max-width: 100%;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 40px;
  padding: 40px 60px;
  background: var(--white);
}
.mvv-card__label {
  flex: none;
  width: 143px;
  display: flex;
  flex-direction: column;
  gap: 20px;
}
.mvv-card__label img { width: 63px; height: auto; }
.mvv-card__label p { font-size: 36px; line-height: 1.2; color: var(--aqua); }

.mvv-card__text { width: 299px; font-size: 20px; line-height: 1.4; color: var(--text); }
.mvv-card__lead { font-weight: 700; margin-bottom: 12px; }

.pillars { list-style: none; display: flex; flex-direction: column; gap: 12px; }
.pillars li {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  font-size: 18px;
  line-height: 1.2;
  color: var(--text);
}
.pillars img { flex: none; width: 6px; height: 10px; margin-top: 5px; }

/* ---------- Diferenciais ---------- */
.benefits {
  position: relative;
  background: var(--white);
  padding: 100px var(--edge);
  overflow: hidden;
}
.benefits__inner {
  position: relative;
  max-width: var(--container);
  margin-inline: auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 72px;
}
.benefits .section-title { max-width: 736px; }

.dots--edge-left,
.dots--edge-right {
  top: 113px;
  width: 290.1px;
  height: 106.7px;
  --pitch-x: 91.7px;
  --pitch-y: 91.7px;
}
.dots--edge-left {
  left: var(--edge);
  --fade: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .3) 55%, rgba(0, 0, 0, .1) 100%);
}
.dots--edge-right {
  right: var(--edge);
  --fade: linear-gradient(90deg, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, .35) 45%, #000 100%);
}

.benefits__grid { display: grid; grid-template-columns: 1fr 412px; align-items: stretch; gap: 20px; width: 100%; }
.benefits__col { display: flex; flex-direction: column; gap: 20px; min-width: 0; }
.benefits__row { display: flex; align-items: stretch; gap: 20px; }

.tile { min-height: 182px; }
.tile--logo {
  flex: none;
  width: 196px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--deep);
}
.tile--logo img { width: 93px; height: auto; }
.tile--text {
  flex: 1 1 auto;
  display: flex;
  align-items: center;
  padding: 50px;
  background: var(--mint);
  font-size: 18px;
  line-height: 1.4;
  color: var(--deep);
}
.tile--cta {
  flex: none;
  width: 196px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 31px 30px 24px;
  background: var(--aqua);
  color: var(--white);
  font-size: 20px;
  font-weight: 600;
  line-height: 1.4;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  transition: background-color .2s ease;
}
.tile--cta:hover { background: #019a86; }
.tile--cta img { width: 17px; height: 16px; }

.benefits__photo {
  position: relative;
  overflow: hidden;
}
.benefits__photo img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.dash-line--ben-a { position: absolute; height: 6px; top: 53%; left: -18%; width: 55%; }
.dash-line--ben-b { position: absolute; height: 6px; top: 82%; left: 80%;  width: 55%; }

/* ---------- Chamada "Saiba mais" ---------- */
.cta-banner {
  position: relative;
  min-height: 768px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding: 0 var(--edge) 100px;
  background: var(--aqua);
  overflow: hidden;
}
/* Nas páginas onde essa faixa é a última antes do rodapé (Cursos e Contato —
   na Quem Somos ela vem antes de outras seções, então não entra aqui), fica
   grudada no topo e o rodapé desliza cobrindo-a, igual à faixa de transição
   da Home: ver o comentário perto de `.transition` para a explicação da
   técnica (respiro reservado + rodapé subindo a mesma medida). */
main > .cta-banner:last-child {
  position: sticky;
  top: 0;
  z-index: 1;
  height: 768px;
}
main:has(> .cta-banner:last-child)::after { content: ""; display: block; height: 768px; }
body:has(main > .cta-banner:last-child) .site-footer { margin-top: -768px; }
.cta-banner__img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 40%;
}
.cta-banner__scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0, 0, 0, 0) 42.9%, rgba(0, 0, 0, .92) 100%);
}
.dash-line--cta-c {
  position: absolute;
  top: 51%;
  left: 0.3%;
  width: 23%;
  background-image: var(--grad-dash-b);
  @media (max-width: 480px) {
    display: none;
  }
}

.cta-banner__inner {
  position: relative;
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 40px;
}
.cta-banner__title {
  max-width: 50%;
  font-size: clamp(26px, 2.9vw, 42px);
  line-height: 1.2;
  color: var(--white);
}
/* ---------- Diretoria executiva ---------- */
.people { background: var(--mint); padding: 100px 0 50px; }
.people__head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 40px;
  padding: 0 var(--edge);
}
.people__head .section-title { max-width: 736px; }

.rail-nav { display: flex; flex: none; }
.rail-nav button {
  width: 60px;
  height: 60px;
  display: grid;
  place-items: center;
  background: none;
  border: 1px solid var(--aqua);
  color: var(--aqua);
  cursor: pointer;
  transition: background-color .2s ease, color .2s ease;
}
.rail-nav button + button { margin-left: -1px; }
.rail-nav button:hover { background: var(--aqua); color: var(--white); }
.rail-nav svg { width: 6px; height: 10px; }

/* Dica "Arraste" que acompanha o cursor sobre os carrosséis que arrastam
   (Missão/visão/valores, Diretoria executiva, Corpo docente). Um elemento só,
   criado pelo script.js e reaproveitado nos três — só existe em telas de
   computador, com mouse de verdade (ver media query no fim do bloco). */
.drag-hint {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 70;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 12px;
  background: var(--white);
  border: 1px solid var(--aqua);
  color: var(--text);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0em;
  text-transform: uppercase;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  will-change: transform, opacity;
}
.drag-hint__arrow { display: flex; color: var(--aqua); }
.drag-hint__arrow--left svg { transform: scaleX(-1); }

@media (max-width: 1000px), (hover: none), (pointer: coarse) {
  .drag-hint { display: none; }
}

.people__rail {
  display: flex;
  gap: 20px;
  margin-top: 72px;
  padding: 0 var(--edge);
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-behavior: smooth;
  scrollbar-width: none;
  cursor: grab;
  -webkit-user-select: none;
  user-select: none;
}
.people__rail::-webkit-scrollbar { display: none; }
.people__rail.is-dragging { cursor: grabbing; scroll-snap-type: none; }
.people__rail.is-dragging * { pointer-events: none; }

.person-card {
  position: relative;
  flex: none;
  width: 412px;
  max-width: 88vw;
  min-height: 565px;
  background: var(--white);
  overflow: hidden;
}
.person-card__photo {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 460px;
  overflow: hidden;
  background: linear-gradient(180deg, var(--white) 0%, #cdd6d5 100%);
}
.person-card__photo img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 20%;
}
.person-card__photo::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(0deg, #092d28 0%, rgba(0, 0, 0, 0) 42.6%);
  opacity: .85;
}
.person-card__body {
  position: absolute;
  inset: auto 0 0 0;
  min-height: 230px;
  background: var(--white);
  padding: 40px;
  display: flex;
  flex-direction: column;
  gap: 15px;
}
.person-card__body h3 {
  padding-right: 33px; /* espaço para o ícone do LinkedIn */
  font-size: 28px;
  line-height: 1.2;
  font-weight: 400;
  color: var(--deep);
  text-wrap: pretty;
}
.person-card__body p { font-size: 16px; line-height: 1.4; color: var(--text); }
.person-card__in {
  position: absolute;
  top: 40px;
  right: 40px;
  width: 21px;
  height: 21px;
  color: var(--aqua);
}

/* ---------- Vídeo institucional ---------- */
.qs-video {
  position: relative;
  background: var(--mint);
  padding: 50px var(--edge) 100px;
  overflow: hidden;
}
.qs-video__inner {
  position: relative;
  max-width: var(--container);
  margin-inline: auto;
  display: flex;
  flex-direction: column;
  gap: 40px;
}
.qs-video__logo { width: 304px; height: auto; }
.qs-video__row {
  display: flex;
  align-items: flex-start;
  justify-content: flex-end;
  gap: 238px;
}
.qs-video__copy {
  flex: 0 1 408px;
  display: flex;
  flex-direction: column;
  gap: 26px;
  font-size: 16px;
  line-height: 1.6;
  color: var(--deep);
}
.dash-line--vid-a { position: absolute; top: 82%; left: 0;   width: 39%; }
.dash-line--vid-b {
  position: absolute;
  top: 8.4%;
  right: 34%;
  width: 23%;
  background-image: var(--grad-dash-b);
}

/* ==========================================================================
   Responsivo da página Quem Somos
   ========================================================================== */
@media (max-width: 1280px) {
  .qs-intro__row { gap: 64px; }
  .qs-fia__row   { gap: 64px; }
  .qs-video__row { gap: 64px; }
  .qs-intro__row .prose-block { margin-left: 0; }
  .big-numbers--wide .bn-card { width: 50%; }
  .benefits__grid { grid-template-columns: 1fr; }
  .benefits__photo { height: 384px; }
}

@media (max-width: 1024px) {
  /* Nesta largura o vídeo ainda fica ao lado do texto (só empilha em
     telas menores), então alinhamos os dois pela base em vez do centro. */
  .qs-fia__row { align-items: flex-end; }
  /* Os tracinhos decorativos são posicionados em % da altura da seção;
     no laptop o conteúdo já reflui o bastante para eles caírem em cima
     do texto, então saem de cena a partir daqui. */
  .dash-line--vid-a, .dash-line--vid-b { display: none; }
}

@media (max-width: 1000px) {
  .qs-hero {
  min-height: 0;
  padding-bottom: 0px;
}
  .qs-hero h1 span { display: inline; }
  .qs-hero__band { padding-top: 72px; }
  .dots--qs-hero { display: none; }

  .qs-intro { padding-bottom: 72px; }
  .qs-intro__row,
  .qs-fia__row,
  .qs-video__row { flex-direction: column; align-items: stretch; gap: 40px; }
  .qs-video__copy { flex: none; }
  .qs-intro__inner { gap: 72px; margin-top: 48px; }
  .qs-slider  { flex: none; width: 100%; }
  .video-frame { flex: none; width: 100%; }
  .prose-block { flex: none; }

  .qs-quote { padding: 90px var(--gutter); min-height: 480px; }
  .qs-quote__img { inset: 0; width: 100%; max-width: 100%; height: 100%; object-fit: cover; object-position: 62% 45%; }
  .qs-quote__inner p { font-size: clamp(30px, 3.2vw, 42px); }

  .mvv-card { width: 88vw; padding: 32px; flex-direction: column; gap: 28px; }
  .mvv-card__text { width: 100%; }

  .benefits__row { flex-wrap: wrap; }
  .tile--text { flex: 1 1 100%; padding: 32px; }
  .benefits__row .tile--logo { width: 100%; min-height: 140px; }
  .benefits__row .tile--cta { width: 100%; min-height: 140px; flex-direction: row; align-items: flex-end; justify-content: space-between; padding: 24px; }
  .benefits__photo { display: none; }
  .dash-line--ben-a, .dash-line--ben-b { display: none; }

  .cta-banner { min-height: 620px; }
  main > .cta-banner:last-child { height: 620px; }
  main:has(> .cta-banner:last-child)::after { height: 620px; }
  body:has(main > .cta-banner:last-child) .site-footer { margin-top: -620px; }
  .cta-banner__title { font-size: clamp(30px, 3.2vw, 42px); }

  .people__head { flex-direction: column; align-items: flex-start; gap: 32px; }
  .people__rail { margin-top: 48px; }

  .qs-video__logo { width: 220px; }
}

@media (max-width: 760px) {
  .site-header--light.is-open .site-nav a { color: var(--deep); }

  .big-numbers--wide .bn-card { width: 100%; }
  .qs-slider { height: 300px; }

  .qs-quote__inner { max-width: 100%; }

  .marquee__tile { width: 72px; height: 72px; }
  .marquee__group { gap: 24px; padding-right: 24px; }

  .mvv { padding: 72px 0; }
  .mvv__head { margin-bottom: 40px; }
  .mvv-card__label p { font-size: 30px; }
  /* No celular os cartões ficam empilhados, sem rolagem/arraste horizontal. */
  .mvv__rail { flex-direction: column; overflow-x: visible; cursor: auto; }
  .mvv-card { width: 100%; }

  .benefits { padding-block: 72px; }
  /* no celular os quadradinhos ficariam por cima do título centralizado */
  .dots--edge-left, .dots--edge-right { display: none; }
  .cta-banner__inner { flex-direction: column; align-items: flex-start; gap: 32px; }
  .cta-banner__title { max-width: 100%; }

  .people { padding-top: 72px; }
  .person-card { min-height: 500px; }
  .person-card__photo { height: 380px; }
  .person-card__body { padding: 28px; }
  .person-card__in { top: 28px; right: 28px; }

  .people__rail { scroll-snap-type: x mandatory; scroll-padding-inline: var(--edge); }
  .people__rail .person-card { width: 100%; max-width: none; scroll-snap-align: start; }

  .qs-video { padding-block: 40px 72px; }
}

@media (max-width: 375px) {
  .qs-hero__content { max-width: 100%; }
}

/* ==========================================================================
   PÁGINA CURSOS
   ========================================================================== */

/* ---------- Abertura ---------- */
.cursos-hero {
  position: relative;
  background: var(--white);
  min-height: 650px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding-bottom: 100px;
  overflow: hidden;
}
.cursos-hero__content {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 237px;
  padding: 0 var(--edge);
}
.cursos-hero__lead {
  flex: 0 1 580px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.cursos-hero h1 {
  font-size: clamp(38px, 4.6vw, 66px);
  line-height: 1.02;
  font-weight: 400;
  color: var(--deep);
}
.cursos-hero__aside {
  flex: 0 1 411px;
  font-size: clamp(18px, 1.6vw, 22px);
  line-height: 1.4;
  color: var(--text);
}
.dash-line--hero-a { position: absolute; top: 61.8%; left: 55.2%; width: 23.2%; background-image: var(--grad-dash-b); }
.dash-line--hero-b { position: absolute; top: 92.2%; left: 75%;   width: 25%; }

/* ---------- Faixa de destaque com foto ---------- */
.course-banner {
  position: relative;
  min-height: 520px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 40px;
  padding: 100px var(--edge);
  background: var(--ink);
  overflow: hidden;
}
.course-banner__img {
  position: absolute;
  top: -17.4%;
  left: -7.5%;
  width: 122.8%;
  max-width: none;
  height: auto;
}
.course-banner__scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(198.45deg, rgba(0, 0, 0, 0) 24.3%, rgba(0, 0, 0, .95) 93.4%);
}
.dots--course-banner {
  position: relative;
  width: min(650.6px, 100%);
  height: 108.8px;
  --pitch-x: 90.8px;
  --pitch-y: 93.8px;
  --fade: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .8) 100%);
}
.course-banner__content {
  position: relative;
  max-width: 545px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  color: var(--white);
}
.course-banner__title { font-size: clamp(28px, 2.9vw, 40px); line-height: 1.2; }
.course-banner__text  { font-size: clamp(17px, 1.5vw, 20px); line-height: 1.4; }

/* ---------- Catálogo de cursos ---------- */
.catalog { background: var(--mint); padding: 100px var(--edge); }
.catalog__inner {
  max-width: var(--container);
  margin-inline: auto;
  display: flex;
  flex-direction: column;
  gap: 72px;
}
.catalog__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 60px;
}
.catalog__lead {
  flex: 0 1 520px;
  font-size: clamp(20px, 1.9vw, 24px);
  line-height: 1.2;
  font-weight: 500;
  color: var(--text);
}

.filters { display: flex; flex: none; flex-wrap: wrap; gap: 10px; }
.filters .btn { min-width: 130px; min-height: 70px; padding: 0 32px; font-size: 16px; font-weight: 600; letter-spacing: 0.03em; }

.filters .btn[aria-pressed="true"] { background: var(--deep); color: var(--white); }

.catalog__empty {
  font-size: 18px;
  line-height: 1.6;
  color: var(--text);
}

.catalog__grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
}

/* Versão em pé do cartão de curso (a deitada está na página inicial) */
.course-card--vertical {
  flex-direction: column;
  align-items: stretch;
  gap: 0;
  padding: 4px;
  min-height: 458px;
}
.course-card--vertical .course-card__media {
  flex: none;
  height: 300px;
  overflow: hidden;
  background: var(--aqua);
}
.course-card--vertical .course-card__body {
  padding: 30px;
  gap: 30px;
  justify-content: flex-start;
}
.course-card--vertical h3 { font-size: 24px; line-height: 1.3; }

/* ---------- Faixa de imagem entre seções ---------- */
.image-band {
  position: relative;
  height: 520px;
  background: var(--ink);
  overflow: hidden;
}
.image-band img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.image-band__fade {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: 384px;
  max-width: 40%;
  background: linear-gradient(241.54deg, rgba(0, 0, 0, 0) 40.1%, rgba(0, 0, 0, .95) 100%);
}
.dots--band {
  top: 11px;
  left: var(--edge);
  width: 297px;
  height: 502.8px;
  --pitch-x: 70.5px;
  --pitch-y: 81.3px;
  --dot-grad: var(--grad-dots-transition);
  --fade: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .3) 50%, rgba(0, 0, 0, .04) 100%);
}

/* ---------- Corpo docente ---------- */
.faculty { background: var(--mint); padding: 110px 0 95px; }
.faculty__row {
  display: flex;
  align-items: stretch;
  gap: 20px;
  margin-top: 72px;
  padding-left: var(--edge);
}
.faculty__intro {
  flex: none;
  width: 412px;
  min-height: 565px;
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  gap: 20px;
  padding: 205px 40px 40px 40px;
  background: var(--aqua);
  color: var(--white);
  overflow: hidden;
}
.faculty__intro strong { display: block; font-size: 20px; line-height: 1.3; font-weight: 700; }
.faculty__intro p { font-size: 18px; line-height: 1.4; }
.dash-line--faculty { position: absolute; top: 45%; left: -18%; width: 81%; }

.faculty__rail {
  display: flex;
  gap: 20px;
  flex: 1 1 auto;
  min-width: 0;
  padding-right: var(--edge-vw);
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-behavior: smooth;
  scrollbar-width: none;
  scroll-snap-type: x mandatory;
  cursor: grab;
  -webkit-user-select: none;
  user-select: none;
}
.faculty__rail::-webkit-scrollbar { display: none; }
.faculty__rail.is-dragging { cursor: grabbing; scroll-snap-type: none; }
.faculty__rail.is-dragging * { pointer-events: none; }
.faculty__rail .person-card { scroll-snap-align: start; }

/* ---------- Empresas parceiras ---------- */
.partners {
  background: linear-gradient(180deg, var(--mint) 0%, var(--white) 34.2%);
  padding: 50px var(--edge);
}
.partners__inner {
  max-width: var(--container);
  margin-inline: auto;
  display: flex;
  align-items: flex-start;
  gap: 128px;
}
.partners__copy {
  flex: 0 1 520px;
  display: flex;
  flex-direction: column;
  gap: 18px;
}
.partners__copy p {
  max-width: 304px;
  font-size: 16px;
  line-height: 1.4;
  letter-spacing: -0.01em;
  color: var(--text);
  opacity: .8;
}
.partners__grid {
  flex: 0 1 628px;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
}
.partner-tile {
  display: grid;
  place-items: center;
  min-height: 170px;
  padding: 20px;
  border: 1px solid var(--aqua);
  background: var(--white);
  overflow: hidden;
}
.partner-tile img { max-width: 100%; height: auto; mix-blend-mode: darken; }

/* ---------- Mural de depoimentos ---------- */
.wall {
  position: relative;
  background: var(--white);
  padding: 100px var(--edge);
  overflow: hidden;
}
.wall__inner {
  position: relative;
  max-width: var(--container);
  margin-inline: auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 80px;
}
.wall .section-title { max-width: 736px; }

.wall__stack { position: relative; width: 100%; height: 724px; }
.wall__stack .quote-card { position: absolute; }
.quote-card--a { left: 0;      top: 0;     width: 48.5%; }
.quote-card--b { left: 55.4%;  top: 6.5%;  width: 40.6%; }
.quote-card--c { left: 4.7%;   top: 48.3%; width: 40.6%; }
.quote-card--d { left: 51.5%;  top: 61.2%; width: 48.5%; }

/* Cartão de depoimento (fundo claro) */
.quote-card {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 8px;
  padding: 40px 50px;
  background: var(--white);
  border: 1px solid #e6e6e6;
}
.quote-card__mark {
  position: absolute;
  top: 29px;
  left: -31px;
  width: 64px;
  height: 47px;
  display: block;
}
.quote-card__course { font-size: 18px; line-height: 1.4; color: var(--aqua); opacity: .8; }
.quote-card blockquote { font-size: 18px; line-height: 1.6; color: var(--text); }
.quote-card__author { display: flex; align-items: center; gap: 20px; margin-top: 12px; }
.quote-card__author img { width: 60px; height: 61px; object-fit: cover; background: var(--text); }
.quote-card__name { font-size: 18px; font-weight: 600; line-height: 1.4; color: var(--deep); }
.quote-card__role { font-size: 14px; line-height: 1.4; color: var(--text); }

/* ==========================================================================
   Responsivo da página Cursos
   ========================================================================== */
@media (max-width: 1280px) {
  .cursos-hero__content { gap: 80px; }
  .partners__inner { gap: 64px; }
  .catalog__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 1000px) {
  .cursos-hero { min-height: 0; padding-bottom: 72px; }
  .cursos-hero__content {
  flex-direction: column;
  align-items: flex-start;
  gap: 32px;
  padding-top: 72px;
}
  .cursos-hero__lead { flex: none; width: 100%; }
  .cursos-hero__aside { flex: none; }
  .dash-line--hero-a, .dash-line--hero-b { display: none; }

  .course-banner { min-height: 460px; justify-content: flex-end; }
  .course-banner__img { inset: 0; width: 100%; max-width: 100%; height: 100%; object-fit: cover; object-position: 60% 50%; }
  .dots--course-banner { display: none; }

  .catalog__head { flex-direction: column; align-items: flex-start; gap: 32px; }
  .catalog__lead { flex: none; }
  .filters { width: 100%; }
  .filters .btn { flex: 1 1 auto; }

  .faculty { display: flex; flex-direction: column; padding-top: 72px; }
  .faculty .people__head { display: contents; }
  .faculty .people__head > .section-title { order: 1; padding-inline: var(--edge); }
  .faculty .people__head > .rail-nav { order: 3; align-self: flex-start; margin-top: 32px; margin-left: var(--edge); }
  .faculty__row { order: 2; flex-direction: column; padding-right: var(--gutter); margin-top: 48px; }
  .faculty__intro { width: 100%; min-height: 0; padding: 40px; }
  .faculty__rail { padding-right: 0; }
  .dash-line--faculty { display: none; }

  .partners__inner { flex-direction: column; gap: 40px; }
  .partners__copy, .partners__grid { flex: none; width: 100%; }

  /* No lugar do mural espalhado, uma lista simples */
  .wall__stack { height: auto; display: flex; flex-direction: column; gap: 40px; }
  .wall__stack .quote-card { position: relative; left: auto; top: auto; width: 100%; }
  .wall__inner { gap: 56px; }
}

@media (max-width: 760px) {
  .catalog { padding-block: 72px; }
  .catalog__grid { grid-template-columns: 1fr; }
  .course-card--vertical { min-height: 0; }

  .image-band { height: 340px; }
  .dots--band { height: 300px; width: 160px; }

  .partners__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .partner-tile { min-height: 130px; }

  .wall { padding-block: 72px; }
  .quote-card { padding: 32px 28px; }
  .quote-card__mark { left: -26px; top: 22px; width: 53px; height: 39px; }
}

/* Em telas estreitas os filtros viram um trilho que rola na horizontal,
   em vez de quebrarem em várias linhas. */
@media (max-width: 590px) {
  .filters {
    /* stretch + width auto: o trilho ocupa a largura da seção (e não a do
       conteudo), condição para o overflow virar rolagem em vez de vazamento */
    align-self: stretch;
    width: auto;
    flex-wrap: nowrap;
    overflow-x: auto;
    overflow-y: hidden;
    overscroll-behavior-x: contain;
    scrollbar-width: none;
    -ms-overflow-style: none;
    /* sangra até a borda da tela para o último botão não parecer cortado,
       mantendo o alinhamento visual com o resto da seção */
    margin-inline: calc(var(--gutter) * -1);
    padding-inline: var(--gutter);
    /* respiro para a borda de 1px e o anel de foco não serem cortados */
    padding-block: 2px;
  }
  .filters::-webkit-scrollbar { display: none; }
  .filters .btn { flex: 0 0 auto; }

  /* arrastar com o mouse, igual aos outros carrosséis do site */
  .filters { cursor: grab; -webkit-user-select: none; user-select: none; }
  .filters.is-dragging { cursor: grabbing; }
  .filters.is-dragging .btn { pointer-events: none; }
}

/* ==========================================================================
   PÁGINA CONTATO
   ========================================================================== */
.contato-hero {
  position: relative;
  background: var(--white);
  min-height: 1057px;
  padding-bottom: 50px;
  overflow: hidden;
}
.contato-hero__body {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 194px;
  padding: 112px var(--edge) 0;
  /* Deixa um respiro no topo quando o link do FAQ rola até aqui */
  scroll-margin-top: 90px;
}
.contato-hero__copy {
  flex: 0 1 520px;
  display: flex;
  flex-direction: column;
  gap: 30px;
}
.contato-hero h1 {
  font-size: clamp(38px, 4.6vw, 66px);
  line-height: 1.02;
  font-weight: 400;
  color: var(--deep);
}
.contato-hero__text {
  max-width: 520px;
  display: flex;
  flex-direction: column;
  gap: 24px;
  font-size: 18px;
  line-height: 1.4;
  color: var(--text);
}
.dots--contato {
  top: 719px;
  left: var(--edge);
  width: 560.4px;
  height: 289.2px;
  --pitch-x: 90.9px;
  --pitch-y: 91.4px;
  --fade: linear-gradient(90deg, #000 0%, #000 100%);
}

/* ---------- Formulário ----------
   As regras abaixo valem tanto para o formulário do layout quanto para o
   formulário do HubSpot (classes .hs-*), para o embed já entrar com a
   aparência certa. */
.form-embed {
  flex: 0 1 520px;
  padding-top: 50px;
}
.form-embed__field { display: flex; flex-direction: column; gap: 8px; margin-bottom: 28px; }
.form-embed .hs-form-field { margin-bottom: 28px; }

.form-embed label,
.form-embed .hs-form-field > label {
  display: block;
  font-family: var(--font);
  font-size: 16px;
  line-height: 1.4;
  color: var(--deep);
  margin-bottom: 8px;
}
.form-embed__field label { margin-bottom: 0; }

.form-embed input,
.form-embed select,
.form-embed textarea,
.form-embed .hs-input {
  width: 100%;
  height: 48px;
  padding: 0 16px;
  font-family: var(--font);
  font-size: 16px;
  color: var(--text);
  background: var(--mint);
  border: 1px solid rgba(0, 0, 0, .1);
  border-radius: 0;
  transition: border-color .2s ease;
}
.form-embed input:focus-visible,
.form-embed select:focus-visible,
.form-embed textarea:focus-visible,
.form-embed .hs-input:focus-visible {
  outline: 2px solid var(--aqua);
  outline-offset: 2px;
  border-color: var(--aqua);
}
.form-embed textarea,
.form-embed textarea.hs-input {
  height: 160px;
  min-height: 160px;
  padding: 14px 16px;
  resize: vertical;
}

.form-embed button[type="submit"],
.form-embed .hs-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  min-height: 70px;
  padding: 0 30px;
  font-family: var(--font);
  font-size: 16px;
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--deep);
  background: transparent;
  border: 1px solid var(--deep);
  border-radius: 0;
  cursor: pointer;
  transition: background-color .2s ease, color .2s ease;
}
.form-embed button[type="submit"]:hover,
.form-embed .hs-button:hover { background: var(--deep); color: var(--white); }

/* Recado que aparece ao enviar enquanto o formulário não está conectado */
.form-embed__note {
  margin-top: 16px;
  font-size: 16px;
  line-height: 1.4;
  color: var(--deep);
}

@media (max-width: 1280px) {
  .contato-hero__body { gap: 80px; }
  /* Nesta largura (ex.: laptop, 1024px) as colunas já espremeram o
     bastante para a malha de pontinhos, que tem largura fixa, invadir o
     formulário. Ela sai de cena a partir daqui. */
  .dots--contato { display: none; }
}

@media (max-width: 1000px) {
  .contato-hero { min-height: 0; padding-bottom: 72px; }
  .contato-hero__body {
  flex-direction: column;
  gap: 48px;
  padding-top: 72px;
}
  .contato-hero__copy { flex: none; width: 100%; }
  .form-embed { flex: none; width: 100%; padding-top: 0; }
}

/* ==========================================================================
   Lightbox de vídeo (usado pelas molduras .video-frame)
   ========================================================================== */
.lightbox {
  position: fixed;
  inset: 0;
  z-index: 100;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(16, 17, 11, .85);
}
.lightbox[hidden] { display: none; }
.lightbox:not([hidden]) { display: flex; }

.lightbox__backdrop { position: absolute; inset: 0; }

.lightbox__panel {
  position: relative;
  width: min(960px, 100%);
}

.lightbox__close {
  position: absolute;
  top: -52px;
  right: 0;
  width: 40px;
  height: 40px;
  display: grid;
  place-items: center;
  background: none;
  border: 1px solid rgba(255, 255, 255, .55);
  cursor: pointer;
  transition: background-color .2s ease;
}
.lightbox__close:hover { background: rgba(255, 255, 255, .14); }

.lightbox__close-sign { position: relative; width: 16px; height: 16px; }
.lightbox__close-sign::before,
.lightbox__close-sign::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 0;
  width: 100%;
  height: 1.5px;
  background: var(--white);
}
.lightbox__close-sign::before { transform: rotate(45deg); }
.lightbox__close-sign::after  { transform: rotate(-45deg); }

.lightbox__frame {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: var(--ink);
}
.lightbox__frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.lightbox__frame iframe[hidden] { display: none; }

.lightbox__note {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 40px;
  text-align: center;
  font-size: 16px;
  line-height: 1.5;
  color: var(--white);
}

@media (max-width: 760px) {
  .lightbox__close { top: -44px; width: 36px; height: 36px; }
}
