/* ==========================================================================
   Curso de Fundamentos do Design — estilos da página
   Depende de styles.css (tokens, .cta, .eyebrow, .faq, motion, cursor).
   Tudo aqui é prefixado com .fd- para não interferir na landing do Festival.
   ========================================================================== */

:root {
  --fd-ink: #0b0b0b;
  --fd-surface: #f5f4f2;
  --fd-line: #d9d6d1;
  --fd-header-h: calc(64 * var(--fd-u));
  --fd-tags-h: calc(40 * var(--fd-u));   /* faixa preta do documento: 45px em 1920 */
  --fd-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;

  /*
   * Unidade de escala da página — o único botão de ajuste do tamanho.
   * Todas as seções são full width e escalam com a viewport a partir daqui.
   *
   * A escala é amortecida: cresce com a largura, mas bem menos que 1:1, para
   * não ficar gigante em monitor grande.
   *
   * A reta está calibrada para dar **exatamente 1** em 1440 — a largura da
   * prancheta. Antes dava 0,8896 ali, ou seja, a página inteira saía 11 %
   * menor que o desenho, em todas as seções ao mesmo tempo.
   *   1024 → 0,896 · 1280 → 0,96 · 1440 → 1,000 · 1600 → 1,04 · 1920+ → 1,12
   *
   * Para deixar tudo maior ou menor de uma vez, mexa só nesta linha.
   */
  --fd-u: clamp(0.86px, calc(0.64px + 0.025vw), 1.12px);

  /*
   * Largura travada das seções que no Figma têm um frame de conteúdo
   * centrado: 1216 px em "Como funciona" e na FAQ, 1344 px no rodapé.
   * Hero, faixa de temas, tese, método e aula gratuita continuam sangrando.
   */
  --fd-max: 1216px;
  --fd-max-wide: 1344px;
}

:root:has(body.fd-page) {
  scroll-padding-top: calc(var(--fd-header-h) + 16px);
}

.fd-page {
  background: var(--white);
}

.fd-wrap {
  width: 100%;
  padding-inline: max(calc(48 * var(--fd-u)), calc((100% - var(--fd-max)) / 2));
}

.fd-skip {
  position: absolute;
  top: -60px;
  left: 16px;
  z-index: 60;
  padding: 12px 18px;
  color: var(--white);
  background: var(--blue);
  font-size: 14px;
  font-weight: 500;
  text-transform: uppercase;
}

.fd-skip:focus {
  top: 12px;
}

/* --- Estados comerciais: data-cart="open" | "closed" --------------------- */
html[data-cart="open"] .fd-when-closed,
html[data-cart="closed"] .fd-when-open {
  display: none !important;
}

/* --- Blocos de texto compartilhados ------------------------------------- */
.fd-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin: 0 0 20px;
  color: var(--gray-600);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.16em;
  line-height: 1;
  text-transform: uppercase;
}

.fd-eyebrow__dot {
  width: 10px;
  height: 10px;
  flex: 0 0 10px;
  background: var(--blue);
  border-radius: 50%;
}

.fd-eyebrow--light {
  color: rgba(255, 255, 255, 0.66);
}

.fd-eyebrow--light .fd-eyebrow__dot {
  background: var(--yellow);
}

.fd-sechead {
  max-width: 760px;
  margin-bottom: 56px;
}

.fd-sechead h2 {
  font-size: clamp(44px, 6vw, 84px);
  line-height: 0.86;
  letter-spacing: 0.01em;
}

.fd-sechead__sub {
  max-width: 560px;
  margin-top: 20px;
  color: var(--gray-600);
  font-size: 17px;
  line-height: 1.55;
}

.fd-sechead--row {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 32px;
  max-width: none;
}

.fd-sechead--center {
  max-width: 1080px;
  margin-inline: auto;
  text-align: center;
}

.fd-sechead--center .fd-eyebrow {
  justify-content: center;
}

.fd-lead {
  color: var(--gray-700);
  font-size: 20px;
  line-height: 1.55;
}

.fd-pullquote {
  margin: 32px 0 0;
  padding: 6px 0 6px 26px;
  border-left: 3px solid var(--blue);
  color: var(--ink);
  font-size: clamp(18px, 2vw, 21px);
  font-style: italic;
  line-height: 1.45;
}

.fd-textlink {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-top: 28px;
  padding-bottom: 4px;
  border-bottom: 2px solid currentColor;
  font-size: 16px;
  font-weight: 500;
  text-transform: uppercase;
  transition: gap 160ms ease;
}

.fd-textlink img {
  width: 18px;
  height: 18px;
  filter: brightness(0) invert(1);
}

.fd-textlink:hover {
  gap: 16px;
}

.fd-checklist {
  display: grid;
  gap: 22px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.fd-checklist li {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  font-size: 18px;
  line-height: 1.5;
}

.fd-checklist img {
  width: 24px;
  height: 24px;
  flex: 0 0 24px;
  margin-top: 3px;
}

.fd-checklist--tight {
  gap: 14px;
}

.fd-checklist--tight li {
  font-size: 16px;
}

.cta-ghost {
  color: var(--white);
  background: transparent;
  box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.4);
}

.cta-ghost .cta-icon {
  filter: brightness(0) invert(1);
}

.cta-ghost:hover {
  background: rgba(255, 255, 255, 0.08);
  filter: none;
}

/* --- Botões e rótulos do frame [DESKTOP]Curso Fundamentos ----------------
   Todas as medidas abaixo vêm da prancheta de 1440 px do Figma e são
   escritas em `var(--fd-u)`, então a seção inteira escala com a viewport.
   ------------------------------------------------------------------------ */
.fd-btn {
  display: inline-flex;
  align-items: center;
  gap: calc(12 * var(--fd-u));
  padding: calc(12 * var(--fd-u)) calc(12 * var(--fd-u)) calc(12 * var(--fd-u)) calc(20 * var(--fd-u));
  font-size: calc(14 * var(--fd-u));
  font-weight: 500;
  line-height: 1;
  text-transform: uppercase;
  transition: transform 160ms ease, filter 160ms ease;
}

.fd-btn img {
  width: calc(20 * var(--fd-u));
  height: calc(20 * var(--fd-u));
  flex: 0 0 auto;
}

/*
 * ESTADOS DE HOVER
 * --------------------------------------------------------------------------
 * `.motion-enabled .motion-reveal.is-visible` fixa `transform` e `filter` no
 * elemento com especificidade maior que `:hover`, então o estado não pode
 * depender dessas duas propriedades no botão. Ele é feito com cor de fundo e
 * cor de texto; o movimento fica por conta da seta, que não é `.motion-reveal`.
 *
 * A escolha da cor depende da **superfície**, não do botão: inverter para
 * preto só funciona sobre fundo claro. Sobre fundo escuro o botão sumiria.
 */
.fd-btn,
.fd-page .cta {
  transition: background-color 200ms ease, color 200ms ease;
}

.fd-btn img,
.fd-page .cta-icon {
  transition: transform 200ms ease;
}

/* A seta anda no eixo dela: ↗ sobe à direita, ↘ desce à direita. */
.fd-btn:hover img[src$="icon-arrow.svg"],
.fd-btn:hover img[src$="icon-arrow-upright.svg"],
.fd-page .cta:hover img[src$="icon-arrow-upright.svg"] {
  transform: translate(2px, -2px);
}

.fd-btn:hover img[src$="icon-arrow-downright.svg"],
.fd-btn:hover img[src$="icon-arrow-downright-white.svg"],
.fd-page .cta:hover img[src$="icon-arrow-downright.svg"] {
  transform: translate(2px, 2px);
}

/* O ícone de play não tem direção: cresce um pouco em vez de deslizar. */
.fd-btn:hover img[src$="icon-arrow-black.svg"] {
  transform: scale(1.08);
}

/*
 * A seta tem a cor do texto, também no hover. Os ícones são SVGs de cor fixa
 * numa <img>, que não herda `color`: no verde que vira preto a seta preta
 * sumia, e no azul que vira preto a branca destoava do texto azul-claro.
 *
 * O próprio SVG vira máscara: a caixa pinta `currentColor` no formato do ícone
 * e a imagem original sai do quadro pelo `object-position`. A cor segue a
 * transição do texto. O `filter: none` desfaz a inversão para branco que o
 * `.cta-blue` aplica na seta.
 */
.fd-btn img[src*="icon-arrow"],
.fd-page .cta-icon[src*="icon-arrow"] {
  object-position: -9999px 0;
  background-color: currentColor;
  filter: none;
  -webkit-mask-position: center;
  mask-position: center;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
}

.fd-btn img[src$="/icon-arrow.svg"] {
  -webkit-mask-image: url("./assets/icon-arrow.svg");
  mask-image: url("./assets/icon-arrow.svg");
}

.fd-btn img[src$="/icon-arrow-upright.svg"],
.fd-page .cta-icon[src$="/icon-arrow-upright.svg"] {
  -webkit-mask-image: url("./assets/icon-arrow-upright.svg");
  mask-image: url("./assets/icon-arrow-upright.svg");
}

.fd-btn img[src$="/icon-arrow-downright.svg"],
.fd-page .cta-icon[src$="/icon-arrow-downright.svg"] {
  -webkit-mask-image: url("./assets/icon-arrow-downright.svg");
  mask-image: url("./assets/icon-arrow-downright.svg");
}

.fd-btn img[src$="/icon-arrow-downright-white.svg"] {
  -webkit-mask-image: url("./assets/icon-arrow-downright-white.svg");
  mask-image: url("./assets/icon-arrow-downright-white.svg");
}

.fd-btn img[src$="/icon-arrow-black.svg"] {
  -webkit-mask-image: url("./assets/icon-arrow-black.svg");
  mask-image: url("./assets/icon-arrow-black.svg");
}

/* --- Sobre fundo claro: inverte para preto, texto na cor da peça --- */
.fd-hero__waitlist .fd-btn--green:hover,
.fd-page .faq .fd-btn--green:hover {
  color: var(--green);
  background-color: var(--black);
}

/*
 * Azul base em preto fica em 2,2:1. Na inversão o texto usa o azul claro,
 * que passa de 5:1.
 */
.fd-page .cta-blue:hover {
  color: var(--blue-light);
  background-color: var(--black);
}

/* --- Sobre fundo escuro: o preto some, então o caminho é o oposto --- */

/* Botão verde sobre #222 → branco com texto preto. */
.fd-page .fd-pricecard__cta:hover {
  color: var(--black);
  background-color: var(--white);
}

/* Botão branco sobre escuro → verde, a cor de CTA da marca. */
.fd-free .fd-btn--white:hover,
.fd-page .fd-guests__cta:hover,
.fd-page .fd-scholarship__cta:hover {
  color: var(--black);
  background-color: var(--green);
}

.fd-page .cta-pink:hover {
  color: var(--pink);
  background-color: var(--black);
}

.fd-btn:focus-visible {
  outline: 3px solid var(--blue);
  outline-offset: 4px;
}

.fd-btn--green { color: var(--black); background: var(--green); }
.fd-btn--white { color: var(--black); background: var(--white); }

.fd-btn--black {
  color: var(--white);
  background: var(--black);
  font-size: calc(16 * var(--fd-u));
  padding: calc(18 * var(--fd-u)) calc(18 * var(--fd-u)) calc(18 * var(--fd-u)) calc(26 * var(--fd-u));
}

/*
 * Preto sobre fundo branco não pode inverter para preto. Vai para o azul da
 * marca: mantém o texto e a seta brancos — a seta é um SVG branco fixo, e no
 * verde ela sumiria.
 */
.fd-plans .fd-btn--black:hover {
  background-color: var(--blue);
}

.fd-btn--block {
  width: 100%;
  justify-content: space-between;
  padding: calc(14 * var(--fd-u)) calc(14 * var(--fd-u)) calc(14 * var(--fd-u)) calc(22 * var(--fd-u));
}

/* ==========================================================================
   Hover dos cartões — uma convenção, não efeitos avulsos

   São 15 seções: cinco gestos diferentes viram ruído. Então há só dois, e a
   escolha entre eles é a mesma pergunta em todo lugar: o cartão tem foto?

   · Sem foto  → sobe 4. O desenho é chapado, sem sombra, então a translação
                 é o único jeito honesto de dar profundidade.
   · Com foto  → a foto cresce 4 % dentro da própria máscara, e o cartão fica
                 parado. É o gesto natural de quem já tem uma imagem.

   Mesma duração e mesma curva do numeral dos planos, para a página inteira
   responder no mesmo tempo.
   ========================================================================== */
/*
 * Cartão chapado: o filete verde engrossa para dentro. É `box-shadow: inset`
 * e não `border-width` porque borda mexe no layout — o cartão inteiro cresceria
 * e empurraria a grade.
 *
 * A lista de `transition-property` repete as três propriedades da entrada
 * porque estes cartões carregam `motion-reveal`, e a regra dela — mais
 * específica que um seletor de classe simples — dita a `transition`. Sem
 * repetir, o hover herdaria os 600ms **e o atraso do escalonamento**: o quarto
 * cartão reagiria 240ms depois do primeiro. A curva não precisa ser repetida:
 * `--motion-ease-out` já é a mesma que o numeral usa.
 */
.motion-enabled .fd-method__cards li,
.motion-enabled .fd-module {
  transition-property: opacity, transform, filter, box-shadow;
  transition-duration: 600ms, 600ms, 600ms, 240ms;
  transition-delay: var(--motion-delay, 0ms), var(--motion-delay, 0ms), var(--motion-delay, 0ms), 0ms;
}

.fd-method__cards li:hover,
.fd-module:hover {
  box-shadow: inset 0 calc(-5 * var(--fd-u)) 0 var(--green);
}

/* Cartão com foto: quem reage é a imagem, dentro da máscara que já existe. */
.fd-work__media img,
.fd-guests__list img,
.fd-bonuscard__media img {
  transition: transform 240ms cubic-bezier(0.22, 1, 0.36, 1);
}

.fd-work:hover .fd-work__media img,
.fd-guests__list li:hover img,
.fd-bonuscard:hover .fd-bonuscard__media img {
  transform: scale(1.04);
}

.fd-tag {
  display: inline-flex;
  align-items: center;
  white-space: nowrap;
  gap: calc(6 * var(--fd-u));
  padding: calc(10 * var(--fd-u)) calc(16 * var(--fd-u));
  color: var(--white);
  background: var(--black);
  font-size: calc(12 * var(--fd-u));
  font-weight: 500;
  line-height: 1;
  text-transform: uppercase;
  transition: background 160ms ease;
}

/*
 * Chip claro do canto do menu. Os botões do canto são NEUTROS em todas as
 * páginas (os mesmos cinzas do menu do site.css): nunca a cor do curso. O
 * hover é o amarelo da marca, igual ao das outras páginas.
 */
.fd-tag--gray {
  color: var(--black);
  background: var(--gray-200);
}

/*
 * Botão quadrado da área do aluno: só o ícone, e o rótulo abre no hover.
 *
 * O texto mora sempre no DOM — antes havia só um `aria-label`, sem nada
 * visível, e duas versões do mesmo rótulo para manter em dia. A animação é de
 * `max-width` e não de `width` porque `auto` não é interpolável.
 */
.fd-tag--square {
  gap: 0;
  padding: calc(8 * var(--fd-u));
  background: var(--gray-700);
  transition:
    background 160ms ease,
    color 160ms ease,
    gap 260ms cubic-bezier(0.22, 1, 0.36, 1);
}

.fd-tag--square span {
  display: block;
  max-width: 0;
  overflow: hidden;
  transition: max-width 260ms cubic-bezier(0.22, 1, 0.36, 1);
}

.fd-tag img {
  width: calc(16 * var(--fd-u));
  height: calc(16 * var(--fd-u));
}

.fd-tag:hover {
  background: var(--gray-700);
}

.fd-tag--gray:hover {
  color: var(--black);
  background: var(--yellow);
}

/*
 * Precisa vir depois de `.fd-tag:hover`: as duas regras têm a mesma
 * especificidade, então quem ganha é a última. Enquanto o bloco do quadrado
 * ficava antes, o hover dele nunca valeu.
 *
 * No amarelo o texto é preto — por isso o `invert` no ícone, que é um
 * traço branco e sumiria.
 */
.fd-tag--square:hover {
  gap: calc(8 * var(--fd-u));
  color: var(--black);
  background: var(--yellow);
}

.fd-tag--square:hover span {
  /* "Área do aluno" mede 93u; 106u mantém a folga de ~14 % sem sobra grande —
     com teto muito acima da largura real a transição termina antes do fim. */
  max-width: calc(106 * var(--fd-u));
}

.fd-tag--square:hover img {
  filter: invert(1);
}

/* Rótulo em chip: quadrado colorido + texto (tese e aula gratuita) */
/*
 * `width: fit-content` em vez de `align-self: flex-start`: o chip não estica
 * nos blocos alinhados à esquerda (tese, aula gratuita) e ainda obedece ao
 * `align-items: center` do cabeçalho do conteúdo do curso.
 */
.fd-label {
  --fd-label-u: var(--fd-u);
  display: inline-flex;
  align-items: center;
  width: fit-content;
  max-width: 100%;
  margin: 0;
  background: var(--gray-100);
}

.fd-label img {
  width: calc(32 * var(--fd-label-u));
  height: calc(32 * var(--fd-label-u));
  flex: 0 0 auto;
}

.fd-label span {
  padding: 0 calc(12 * var(--fd-label-u));
  color: var(--black);
  font-size: calc(14 * var(--fd-label-u));
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  white-space: nowrap;
}

/* Tamanho único acima de 981: a aula gratuita é seção livre, com unidade até 1,12. */
@media (min-width: 981px) {
  .fd-label { --fd-label-u: 1px; }
}

/* ==========================================================================
   Seções de largura travada
   --------------------------------------------------------------------------
   Estas seções param de crescer em 1216 (ou 1344 no rodapé). Dentro delas
   1 unidade = 1 px, sem escala.

   O motivo: `--fd-u` cresce até 1,12 acima de 1440, mas o contêiner destas
   seções é fixo em px. A tipografia crescia 12 % dentro de uma caixa que não
   crescia — e as quebras de linha saíam do desenho. O caso visível era a
   frase da Tese, que passava a quebrar "FAZER COM / ELA.".

   As seções que sangram (hero, faixa de temas, método e aula gratuita)
   continuam escalando, porque nelas a caixa acompanha a tela.
   ========================================================================== */
@media (min-width: 981px) {
  .fd-thesis,
  .fd-plans,
  .fd-syllabus,
  .fd-works,
  .fd-bonus,
  .fd-price,
  .fd-warranty,
  .fd-testimonials,
  .fd-scholarship,
  .fd-teacher,
  .fd-guests,
  .fd-page .faq,
  .fd-footer {
    --fd-u: 1px;
  }
}

/* --- Header (594:34213) -------------------------------------------------- */
.fd-topbar {
  position: sticky;
  top: 0;
  z-index: 50;
  min-height: calc(64 * var(--fd-u));
  display: flex;
  align-items: stretch;
  background: var(--white);
}

.fd-topbar__by {
  display: grid;
  place-items: center;
  padding: calc(16 * var(--fd-u)) calc(28 * var(--fd-u));
  background: var(--red);
}

.fd-topbar__by img {
  width: calc(121 * var(--fd-u));
  height: calc(20 * var(--fd-u));
}

.fd-topbar__mark-tall,
.fd-footer__wordmark--tall {
  display: none;
}

.fd-topbar__course {
  display: flex;
  align-items: center;
  width: calc(210 * var(--fd-u));
  padding: 0 calc(12 * var(--fd-u));
  border-bottom: calc(3 * var(--fd-u)) solid var(--green);
}

.fd-topbar__course img {
  width: calc(144.015 * var(--fd-u));
  height: calc(40 * var(--fd-u));
}

/* O vão do menu leva a trama de pontos; os botões ficam por cima. */
.fd-topbar__actions {
  position: relative;
  display: flex;
  flex: 1;
  align-items: center;
  justify-content: flex-end;
  gap: calc(8 * var(--fd-u));
  padding: calc(16 * var(--fd-u)) calc(20 * var(--fd-u));
  overflow: hidden;
}

/*
 * Malha de pontos do documento: passo de 7 e ponto de 1,9 numa faixa de 67 de
 * altura. O nosso cabeçalho tem 72, daí o passo de 8 — em `u`, para acompanhar
 * a altura, que também sai de `--fd-u`.
 *
 * O ponto é preto no próprio arquivo, sem `filter` nem `opacity`: a tinta
 * medida no documento é 5,1 % da área, e um ponto sólido de 2,04 num tile de
 * 8,03 dá 5,07 %. Antes era uma cruz branca invertida a 14 %.
 */
.fd-topbar__actions::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: url("./assets/texture-pontos-menu.svg");
  background-size: calc(7.17 * var(--fd-u)) calc(7.17 * var(--fd-u));
}

.fd-topbar__actions > * {
  position: relative;
}

/*
 * Bloco preto atrás dos botões, como no documento. As margens negativas
 * cancelam o padding do vão para a faixa encostar no topo, no rodapé e na
 * borda direita; os 217 de recuo à esquerda são a folga preta que o documento
 * deixa antes do botão cinza (228 no recorte de 1800).
 *
 * Só a partir de 981: abaixo disso o botão cinza some e sobra o quadrado, que
 * numa faixa preta ficaria solto.
 */
.fd-topbar__cta {
  display: flex;
  align-items: center;
  gap: calc(8 * var(--fd-u));
}

@media (min-width: 981px) {
  .fd-topbar__cta {
    align-self: stretch;
    margin: calc(-16 * var(--fd-u)) calc(-20 * var(--fd-u)) calc(-16 * var(--fd-u)) 0;
    padding: 0 calc(20 * var(--fd-u)) 0 calc(217 * var(--fd-u));
    background: var(--black);
  }
}

/* --- Hero (594:34212) ---------------------------------------------------- */
/*
 * Cabeçalho + hero + faixa de temas preenchem a primeira dobra. O `max()`
 * garante que numa tela baixa a seção cresça em vez de espremer o conteúdo,
 * e o `padding-top` reserva uma faixa mínima de foto para o bloco branco não
 * sufocar a imagem quando a tela é pequena e o texto quebra em mais linhas.
 */
.fd-hero {
  position: relative;
  isolation: isolate;
  min-height: calc(725 * var(--fd-u));
  min-height: calc(100dvh - var(--fd-header-h) - var(--fd-tags-h));
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding-top: clamp(120px, 26vh, 320px);
  overflow: hidden;
}

.fd-hero__bg {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: -1;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /*
   * Só vale sem JavaScript e no primeiro quadro: no desktop quem enquadra a
   * foto é o `enquadrarFotoDoHero` do curso-fundamentos.js, pelas variáveis do
   * bloco abaixo. 70 % é o valor fixo mais próximo do resultado dele nas telas
   * comuns. Abaixo de 981 a foto vira faixa no topo, com posição própria.
   */
  object-position: 50% 70%;
}

/*
 * A frase do rasgo da caixa ("DESIGN PEDE BASE, DESIGNER TAMBÉM.") tem que
 * aparecer inteira acima do painel branco em qualquer desktop. Nenhum
 * `object-position` fixo resolve: a altura do painel muda com a largura e com
 * a quebra do texto, e a sobra de foto para cortar muda com a altura da tela.
 * Medido em nove telas, de 1100x800 a 2560x1300, cada uma pedia um valor — e
 * nas estreitas nenhum servia, porque em `cover` a foto não sobe o bastante.
 *
 * Por isso o JS mede o painel e publica tamanho e posição da foto: o mais
 * baixo possível com a frase livre (sobra topo para a marca "Fd" da tampa),
 * ampliando além do `cover` só quando nem subindo tudo a frase aparece.
 */
@media (min-width: 981px) {
  .fd-hero__bg {
    top: var(--fd-foto-topo, auto);
    left: var(--fd-foto-esquerda, 0);
    width: var(--fd-foto-largura, 100%);
    height: var(--fd-foto-altura, 100%);
  }
}

.fd-hero__row {
  display: flex;
  align-items: flex-end;
  width: 100%;
}

.fd-hero__panel {
  display: flex;
  flex-direction: column;
  gap: calc(40 * var(--fd-u));
  width: 60%;
  padding: calc(48 * var(--fd-u));
  background: var(--white);
}

.fd-hero h1 {
  margin: 0;
  font-size: calc(68 * var(--fd-u));
  line-height: 1;
  letter-spacing: 0;
}

.fd-hero__cols {
  display: flex;
  gap: calc(16 * var(--fd-u));
  margin-top: calc(-16 * var(--fd-u));
}

/*
 * Corpo e entrelinha vêm do documento: 14,97 de corpo e 19,9 de passo em 1920,
 * ou seja 13,4u e 1,33. Com os 14u e 1,5 que estavam aqui o segundo parágrafo
 * quebrava em quatro linhas em vez de três, e o bloco ficava 18 % mais alto.
 */
.fd-hero__cols p {
  flex: 1;
  color: var(--gray-600);
  font-size: calc(13.4 * var(--fd-u));
  line-height: 1.33;
}

.fd-proof {
  display: flex;
  flex-wrap: wrap;
  gap: calc(32 * var(--fd-u));
  margin: 0;
  padding: 0;
  list-style: none;
}

.fd-proof li {
  display: flex;
  align-items: center;
  gap: calc(8 * var(--fd-u));
}

.fd-proof img {
  width: calc(24 * var(--fd-u));
  height: calc(24 * var(--fd-u));
  flex: 0 0 auto;
}

.fd-proof span {
  color: var(--gray-700);
  font-size: calc(12 * var(--fd-u));
  font-weight: 500;
  line-height: 1.2;
}

/*
 * --- Painel do hero, arranjo do documento da cliente -----------------------
 * Só em tela grande, a pedido: abaixo de 981 o empilhamento atual continua.
 *
 * O painel vira grade: o título ocupa a linha inteira e, embaixo, os dois
 * parágrafos empilhados à esquerda e os quatro selos em 2x2 à direita.
 * Antes os parágrafos ficavam lado a lado e os selos numa fileira só.
 *
 * Medidas tiradas do documento (1920 de largura, onde 1u = 1,12px):
 *   coluna de texto 537px -> 480u
 *   vão até os selos 114px -> 102u
 *   passo dos selos 173px na horizontal e 87px na vertical
 * O passo vira `gap` porque a largura das colunas é ditada pelo conteúdo:
 * 173 - 147 do item mais largo = 26px -> 24u.
 */
@media (min-width: 981px) {
  .fd-hero__panel {
    display: grid;
    grid-template-columns: calc(480 * var(--fd-u)) auto;
    justify-content: start;
    column-gap: calc(102 * var(--fd-u));
    row-gap: calc(40 * var(--fd-u));
  }

  .fd-hero__panel > h1 {
    grid-column: 1 / -1;
  }

  .fd-hero__cols {
    flex-direction: column;
    gap: calc(24 * var(--fd-u));
    margin-top: 0;
  }

  .fd-hero__cols p {
    flex: none;
  }

  .fd-proof {
    display: grid;
    grid-template-columns: repeat(2, auto);
    align-content: start;
    column-gap: calc(24 * var(--fd-u));
    row-gap: calc(48 * var(--fd-u));
  }

  /*
   * O card nunca fica mais estreito que o arranjo de duas colunas pede: 480u
   * de texto + 102u de vão + ~253u de selos + 96u de padding. Com 60 % fixos
   * isso só cabia a partir de ~1660px e, abaixo, os selos passavam da borda
   * branca. Em 1920 continuam valendo os 60 % do documento (1146 > 1053).
   */
  .fd-hero__panel {
    width: max(60%, calc(940 * var(--fd-u)));
    container-type: inline-size;
  }

  /*
   * O título nunca passa da largura útil do card: a linha mais longa mede
   * 11,28 vezes o corpo, e 8,6cqi deixa ~3 % de respiro. Em 1920 o limite nem
   * age (daria 89px contra os 76 do documento); entre 981 e ~1450 o título
   * vazava até 174px para fora do branco.
   */
  .fd-hero h1 {
    font-size: min(calc(68 * var(--fd-u)), 8.6cqi);
  }
}

/*
 * --- Painel do hero entre 981 e 1279 ----------------------------------------
 * Aqui as duas colunas não cabem ao lado do bloco da lista de espera (a linha
 * pede ~1271u). O card vira uma coluna: título, os dois parágrafos lado a lado
 * e os quatro selos numa fileira embaixo deles. Lado a lado os parágrafos ficam
 * com ~50 caracteres por linha e o card sai mais baixo do que empilhados — e
 * card mais baixo é menos zoom na foto (ver `enquadrarFotoDoHero`).
 */
@media (min-width: 981px) and (max-width: 1279px) {
  .fd-hero__panel {
    grid-template-columns: minmax(0, 1fr);
    width: 68%;
  }

  .fd-hero__cols {
    flex-direction: row;
    gap: calc(32 * var(--fd-u));
  }

  .fd-hero__cols p {
    flex: 1;
  }

  .fd-proof {
    grid-template-columns: repeat(4, auto);
    justify-content: start;
    column-gap: calc(32 * var(--fd-u));
  }
}

/* O bloco encosta na direita; o conteúdo dentro dele continua alinhado à esquerda. */
.fd-hero__aside {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  justify-content: flex-end;
  padding: calc(48 * var(--fd-u));
}

/* Oculta durante as vendas (atributo `hidden` no HTML); o `display: flex` abaixo o anularia. */
.fd-hero__waitlist[hidden] {
  display: none;
}

.fd-hero__waitlist {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: calc(18 * var(--fd-u));
  width: calc(244 * var(--fd-u));
}

.fd-hero__seal {
  width: calc(79 * var(--fd-u));
  height: calc(78 * var(--fd-u));
  animation: fd-spin 14s linear infinite;
}

.fd-hero__aside p {
  color: var(--black);
  font-size: calc(14 * var(--fd-u));
  line-height: 1.5;
}

/*
 * O `from` explícito é obrigatório. Sem ele o valor de partida vem de
 * `.motion-reveal.is-visible` (`translateY(0) scale(1)`), as listas de funções
 * não batem, o navegador cai para interpolação de matriz — e a matriz de
 * `rotate(360deg)` é a identidade. Resultado: o selo ficava parado.
 */
/*
 * Anti-horário. O texto do selo é assentado no sentido horário, então girar
 * para o mesmo lado faz as palavras fugirem da leitura; ao contrário, cada
 * palavra sobe para o topo na ordem em que se lê. Usado só pelo selo do hero.
 */
@keyframes fd-spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(-360deg); }
}

/* --- Faixa de temas (594:34264) ------------------------------------------ */
/*
 * Fundo de listras diagonais finas. O passo é fixo em px de propósito: a 2,8px
 * de período, escalar com --fd-u faria a trama entrar em moiré.
 */
/*
 * Entrada da foto do hero: só `transform`. A opacidade fica intocada de
 * propósito — a foto é o maior elemento pintado da página, e começar em
 * `opacity: 0` adiaria a marca de LCP. Escalar não adia: ela já pinta no
 * primeiro quadro, só um pouco maior. O `overflow: hidden` da seção corta a
 * sobra.
 */
.motion-enabled .fd-hero__bg {
  transform: scale(1.05);
  transition: transform 1400ms var(--motion-ease-scale);
}

.motion-enabled.motion-loaded .fd-hero__bg {
  transform: scale(1);
}

.fd-tags {
  height: var(--fd-tags-h);
  display: flex;
  align-items: center;
  overflow: hidden;
  background-color: var(--black);
}

/*
 * `flex: 0 0 auto` é obrigatório: a faixa virou container flex quando ganhou
 * altura própria, e como item flex a fita encolhia por padrão — os chips se
 * espremiam e o texto vazava para fora do fundo cinza.
 */
.fd-tags__track {
  flex: 0 0 auto;
  display: flex;
  width: max-content;
  animation: fd-marquee 60s linear infinite;
}

.fd-tags:hover .fd-tags__track {
  animation-play-state: paused;
}

.fd-tags__list {
  flex: 0 0 auto;
  display: flex;
  margin: 0;
  padding: 0;
  list-style: none;
}

.fd-tags__list li {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  /* o vão entre os itens: em `margin`, para o -50% do marquee fechar */
  margin-right: calc(18 * var(--fd-u));
  gap: calc(6 * var(--fd-u));
  color: var(--white);
  font-size: calc(12 * var(--fd-u));
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  white-space: nowrap;
}

/* O "+" é caractere, não ícone: no documento a faixa é só texto sobre preto. */
.fd-tags__list li::before {
  content: "+";
}

/*
 * Marquee infinito. A fita tem duas listas idênticas e anda exatamente -50%,
 * ou seja, o comprimento de uma lista: no fim do ciclo a segunda está onde a
 * primeira estava e a emenda não aparece.
 *
 * Para -50% ser exato, o espaçamento tem que estar em `margin-right` de cada
 * item — nunca em `gap` da fita ou da lista. Com `gap: G` entre as duas listas
 * a fita mede 2L+G e -50% dá L+G/2, meio vão a mais a cada volta: a fita
 * pulava G/2 px por ciclo. E um `padding-right` na lista somava ao `gap`,
 * deixando a emenda com o dobro do vão dos outros cards.
 */
@keyframes fd-marquee {
  from { transform: translate3d(0, 0, 0); }
  to { transform: translate3d(-50%, 0, 0); }
}

/* --- Tese (616:37588) ---------------------------------------------------- */
.fd-thesis {
  display: flex;
  justify-content: center;
  padding-block: calc(140 * var(--fd-u));
  padding-inline: max(calc(112 * var(--fd-u)), calc((100% - var(--fd-max)) / 2));
  background: var(--ink);
}

/*
 * Grid em vez de flex: com `flex: 1` e `box-sizing: border-box`, o padding do
 * painel entra na base e as duas colunas saem desiguais (651 x 509). Com
 * `1fr 1fr` elas ficam exatamente iguais, como no Figma (588 cada).
 */
.fd-thesis__inner {
  display: grid;
  grid-template-columns: 1fr 1fr;
  /*
   * A linha tem os 506 do frame `616:37589`. A frase da direita tem 522 de
   * texto e transborda 16 por baixo — é assim na prancheta, e sem travar a
   * altura a seção inteira crescia esses 16.
   */
  grid-template-rows: calc(506 * var(--fd-u));
  align-items: stretch;
  gap: calc(40 * var(--fd-u));
  width: 100%;
}

.fd-thesis__panel {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: calc(32 * var(--fd-u));
  min-width: 0;
  /* 80 em cima, embaixo e à esquerda; zero à direita (nó 616:37590). */
  padding: calc(80 * var(--fd-u)) 0 calc(80 * var(--fd-u)) calc(80 * var(--fd-u));
  background-color: var(--black);
  /*
   * Medido no nó 616:37590: listras "/" com passo de 9 px na horizontal,
   * 2 px de espessura e tom ~#1b1b1b sobre preto. Em gradiente o passo e a
   * espessura são perpendiculares à faixa, daí o fator sen(45°).
   */
  background-image: repeating-linear-gradient(
    -45deg,
    rgba(255, 255, 255, 0.106) 0 calc(1.41 * var(--fd-u)),
    transparent calc(1.41 * var(--fd-u)) calc(6.36 * var(--fd-u))
  );
}

.fd-thesis__copy {
  display: flex;
  flex-direction: column;
  gap: calc(18 * var(--fd-u));
  width: calc(391 * var(--fd-u));
  color: var(--white);
}

.fd-thesis h2 {
  font-size: calc(48 * var(--fd-u));
  line-height: 1;
}

.fd-thesis__copy p {
  font-size: calc(14 * var(--fd-u));
  line-height: 1.5;
}

.fd-thesis__statement {
  min-width: 0;
  margin: 0;
  color: var(--gray-700);
  font-family: var(--display);
  font-size: calc(98.8 * var(--fd-u));
  line-height: 0.88;
  text-transform: uppercase;
}

.fd-thesis__statement em {
  color: var(--gray-400);
  font-style: normal;
}

/*
 * Desktop estreito (981 a 1279). A Tese está na lista de largura travada
 * (`--fd-u: 1px`), então a frase fica com os 98,8px da prancheta enquanto a
 * coluna encolhe para 353px em 981. Palavra não quebra: "FERRAMENTA." mede 496px
 * e passava 143px da coluna — até ~1030 isso virava rolagem horizontal da
 * página (30px em 981). Com a frase em oito a dez linhas, ela ainda descia até
 * 243px abaixo da seção, e o texto de 391px do painel passava 118px da borda
 * preta. A partir de 1280 tudo cabe e nada aqui vale.
 *
 * · A frase acompanha a coluna: a palavra mais longa mede 5,02 vezes o corpo, e
 *   a coluna é metade da grade menos metade do vão — 50cqi − 20px. O divisor
 *   5,1 deixa ~1,5 % de folga. Em 1279 o resultado já encosta nos 98,8.
 * · O texto do painel fica no máximo da largura do painel.
 * · A linha trava em 506 como mínimo, não como altura: aqui o conteúdo precisa
 *   de mais, e crescer é melhor que vazar por cima da seção seguinte.
 */
@media (min-width: 981px) and (max-width: 1279px) {
  .fd-thesis__inner {
    container-type: inline-size;
    grid-template-rows: minmax(calc(506 * var(--fd-u)), auto);
  }

  .fd-thesis__copy {
    width: min(calc(391 * var(--fd-u)), 100%);
  }

  .fd-thesis__statement {
    font-size: min(calc(98.8 * var(--fd-u)), calc((50cqi - 20px) / 5.1));
  }
}

/* --- Para quem é esse curso (documento da cliente) -----------------------
   Geometria medida no documento (1920 → 1u = 1,12px): seção 697, título de
   corpo fixo 208,6 começando no topo, parágrafo a 61 % da largura, faixa de
   cartões com 271 de altura e faixa de losangos com 148 — ambas no rodapé.
   ------------------------------------------------------------------------ */
.fd-method {
  position: relative;
  height: calc(697 * var(--fd-u));
  overflow: hidden;
  color: var(--white);
  background: var(--blue);
}

.fd-method__band {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  height: calc(148 * var(--fd-u));
  background:
    /* Fio em cor sólida: com preto translúcido o cruzamento dos fios somava e ficava mais escuro. */
    repeating-linear-gradient(45deg, transparent 0 calc(22 * var(--fd-u)), #000714 calc(22 * var(--fd-u)) calc(26 * var(--fd-u))),
    repeating-linear-gradient(-45deg, transparent 0 calc(22 * var(--fd-u)), #000714 calc(22 * var(--fd-u)) calc(26 * var(--fd-u))),
    var(--blue);
}

/*
 * Colunas em porcentagem, não em px: a 2ª linha do título ocupa sempre a mesma
 * fração da seção (59,2 %), então travar a coluna do parágrafo em 61,8 % —
 * x=1172 no documento de 1920 — mantém a folga em qualquer largura. Em px ela
 * invadiria o título quando `--fd-u` bate no piso.
 */
.fd-method__head {
  position: relative;
  display: grid;
  grid-template-columns: 61.8% minmax(0, 1fr);
  align-items: start;
  padding-top: calc(2 * var(--fd-u));
  padding-inline: calc(48 * var(--fd-u));
}

/*
 * Corpo fixo, não mais ajustado por medição: no documento o título para em
 * 59,2 % da largura, não sangra até a borda. `margin-left` só cancela o
 * padding do bloco, de modo que a caixa do texto comece em x=0 — a folga de
 * ~7px que aparece no documento é o próprio lateral bearing do "P".
 *
 * O teto em vw guarda a faixa de 981 a 1920: abaixo de 1920 o corpo em `u`
 * ficaria proporcionalmente mais largo que no documento e a segunda linha
 * alcançaria a coluna do parágrafo. Com `min()` ela para sempre em 59,2 %.
 */
.fd-method h2 {
  grid-column: 1 / -1;
  grid-row: 1;
  /*
   * Em `em` de propósito: sobe a caixa até o topo da maiúscula encostar no
   * topo da seção (y=9 no documento). Como o valor acompanha o corpo, o
   * encaixe se mantém quando o teto em vw entra em cena.
   */
  margin-top: -0.129em;
  margin-left: calc(-48 * var(--fd-u));
  color: var(--white);
  font-size: min(calc(208.6 * var(--fd-u)), 12.25vw);
  line-height: 0.886;
}

.fd-method h2 span {
  display: block;
  width: max-content;
}

/*
 * O parágrafo mora no vão aberto pela segunda linha do título. Como o título
 * é ajustado para cobrir a largura, a linha 2 termina sempre na mesma fração
 * da tela — então a coluna do grid (x = 860, y = 173 no Figma) já garante o
 * encaixe, sem depender de medição.
 */
.fd-method__lead {
  grid-column: 2;
  grid-row: 1;
  justify-self: start;
  align-self: start;
  width: 100%;
  max-width: calc(472 * var(--fd-u));
  /*
   * Deslocamento fixo agora que o título tem corpo previsível: no documento a
   * primeira linha do parágrafo tem o topo em y=234 da seção.
   */
  margin-top: calc(203 * var(--fd-u));
  font-size: calc(18 * var(--fd-u));
  line-height: 1.5;
}

/* Ancorada no rodapé: 740 − 271 = 469, exatamente o y da prancheta. */
.fd-method__cards {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  height: calc(271 * var(--fd-u));
  display: flex;
  align-items: center;
  gap: calc(16 * var(--fd-u));
  width: min(100%, 1440px);
  margin: 0 auto;
  padding: calc(48 * var(--fd-u));
  list-style: none;
}

.fd-method__cards li {
  flex: 1;
  height: calc(175 * var(--fd-u));
  display: flex;
  flex-direction: column;
  gap: calc(24 * var(--fd-u));
  padding: calc(24 * var(--fd-u));
  background: var(--white);
  border-bottom: calc(5 * var(--fd-u)) solid var(--green);
}

.fd-method__cards img {
  width: calc(32 * var(--fd-u));
  height: calc(32 * var(--fd-u));
}

.fd-method__cards p {
  color: var(--black);
  font-size: calc(16 * var(--fd-u));
  line-height: 1.4;
}

/* --- Como o conteúdo é organizado (616:37475) ---------------------------- */
.fd-plans {
  position: relative;
  overflow: hidden;
  background: var(--white);
}

.fd-plans__inner {
  position: relative;
  padding-block: calc(120 * var(--fd-u));
  padding-inline: max(calc(112 * var(--fd-u)), calc((100% - var(--fd-max)) / 2));
}

.fd-plans h2 {
  max-width: calc(493 * var(--fd-u));
  font-size: calc(48 * var(--fd-u));
  line-height: 1;
}

.fd-plans__grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: calc(18 * var(--fd-u));
  margin-top: calc(60 * var(--fd-u));
}

.fd-plan {
  display: flex;
  flex-direction: column;
  gap: calc(10 * var(--fd-u));
  min-height: calc(420 * var(--fd-u));
  /* Corta a parte de cima do numeral, que sobe além da borda do cartão. */
  overflow: hidden;
}

.fd-plan--green { background: var(--green); }
.fd-plan--gray { background: var(--gray-400); }
.fd-plan--blue { background: var(--blue); }

.fd-plan__top {
  flex: 1;
  display: flex;
  align-items: flex-start;
  justify-content: flex-end;
  /* Alinhado com a borda direita do cartão branco de baixo. */
  padding-right: calc(12 * var(--fd-u));
}

/*
 * Numeral do documento: entra pelo topo do cartão e é cortado ali. No
 * documento a maiúscula do dígito sobe 24,4 % da própria altura acima da
 * borda — como tudo aqui está em `em`, o encaixe segue o corpo.
 */
.fd-plan__num {
  margin-top: -0.328em;
  color: var(--white);
  font-family: var(--sans);
  font-size: calc(202 * var(--fd-u));
  font-weight: 400;
  line-height: 1;
}

/*
 * Os algarismos são proporcionais, não tabulares: o "1" tem lateral bearing
 * maior que o "2" e o "3". Sem esta correção o "01" pararia 14 px antes dos
 * outros dois, e no documento as três tintas terminam na mesma vertical.
 */
.fd-plan--green .fd-plan__num { margin-right: -0.069em; }
.fd-plan--gray .fd-plan__num { margin-right: -0.031em; }
.fd-plan--blue .fd-plan__num { margin-right: -0.040em; }

/*
 * Hover: o numeral cresce um pouco e tomba no sentido horário. A origem fica
 * na direita, não no centro: assim a tinta continua alinhada com a borda do
 * cartão branco de baixo — com a origem no centro ela avançaria 12 e encostaria
 * na borda do cartão — e o crescimento vai para o cinza vazio, à esquerda.
 *
 * O cartão já tem `overflow: hidden`, então o que sobe além do topo é cortado,
 * do mesmo jeito que no estado parado.
 */
.fd-plan__num {
  transform-origin: 100% 50%;
  transition: transform 240ms cubic-bezier(0.22, 1, 0.36, 1);
}

.fd-plan:hover .fd-plan__num {
  transform: rotate(4deg) scale(1.1);
}

.fd-plan__card {
  margin: calc(12 * var(--fd-u));
  display: flex;
  flex-direction: column;
  gap: calc(16 * var(--fd-u));
  padding: calc(16 * var(--fd-u));
  background: var(--white);
}

.fd-plan h3 {
  color: var(--ink);
  font-family: var(--sans);
  font-size: calc(26 * var(--fd-u));
  font-weight: 500;
  line-height: 1.3;
  text-transform: none;
}

.fd-plan ul {
  display: grid;
  gap: calc(6 * var(--fd-u));
  margin: 0;
  padding: 0;
  list-style: none;
}

.fd-plan li {
  display: flex;
  align-items: center;
  gap: calc(12 * var(--fd-u));
  color: var(--ink);
  font-size: calc(14 * var(--fd-u));
  line-height: 1.5;
}

.fd-plan li img {
  width: calc(13 * var(--fd-u));
  height: calc(12 * var(--fd-u));
  flex: 0 0 auto;
}

.fd-plans__foot {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: calc(18 * var(--fd-u));
  margin-top: calc(60 * var(--fd-u));
}

.fd-plans__foot .fd-btn {
  justify-content: space-between;
}

/*
 * Faixa de chevrons na terceira coluna do rodapé (743:454), usada aqui e no
 * rodapé do bônus — as duas colunas têm os mesmos 393 x 56. Largura em 100 %
 * da coluna e altura automática: acima de 981 a coluna mede exatamente os 393
 * do desenho, e abaixo disso a faixa acompanha a coluna sem distorcer.
 */
.fd-plans__chevrons,
.fd-bonus__texture {
  grid-column: 3;
  align-self: center;
  width: 100%;
  max-width: calc(393 * var(--fd-u));
  height: auto;
}

/* --- Aula gratuita (595:35113) ------------------------------------------- */
.fd-free {
  position: relative;
  isolation: isolate;
  min-height: calc(670 * var(--fd-u));
  display: flex;
  padding: calc(48 * var(--fd-u));
  overflow: hidden;
  background: var(--gray-100);
}

/*
 * Fundo em vídeo (1920x1080, sem áudio, em loop). Duas coisas do quadro mandam
 * no enquadramento, medidas com o Vision do macOS em 45 quadros (vídeo trocado
 * em 16/09/2026):
 * · o rosto da professora vai de 37 % a 63 % da largura e de 15 % a 59 % da
 *   altura — e tem que ficar sempre à vista;
 * · a legenda está gravada na imagem, de 87 % a 96 % da altura, e não pode
 *   aparecer.
 *
 * Por isso o vídeo ancora no topo e, no desktop, a caixa dele é 18 % mais alta
 * que a seção: a legenda começa em 0,869 x 1,18 = 102 % e fica sempre abaixo do
 * corte do `overflow: hidden`, mesmo quando o vídeo é dimensionado pela altura
 * (entre 981 e ~1400). Com o texto à esquerda e o botão à direita, o rosto cai
 * no vão do meio. Abaixo de 981 a regra é outra: ver o bloco empilhado.
 *
 * Passar da base também tapa o filete claro do rodapé, que antes pedia
 * `height: calc(100% + 1px)`.
 */
.fd-free__bg {
  position: absolute;
  top: 0;
  left: 0;
  z-index: -2;
  width: 100%;
  height: 118%;
  object-fit: cover;
  object-position: 50% 0%;
}

.fd-free::before {
  content: "";
  position: absolute;
  inset: 0 0 -1px;
  z-index: -1;
  background: rgba(0, 0, 0, 0.6);
}

/* Seção cinza: o chip vai a branco — cinza sobre cinza sumia. */
.fd-free .fd-label {
  background: var(--white);
}

.fd-free__inner {
  display: flex;
  flex: 1;
  flex-direction: column;
  justify-content: space-between;
  gap: calc(48 * var(--fd-u));
}

.fd-free__row {
  display: flex;
  align-items: flex-end;
  gap: calc(60 * var(--fd-u));
}

.fd-free__row > div {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: calc(16 * var(--fd-u));
}

.fd-free h2 {
  color: var(--white);
  font-size: calc(48 * var(--fd-u));
  line-height: 1;
}

.fd-free__row p {
  max-width: calc(464 * var(--fd-u));
  color: var(--gray-100);
  font-size: calc(18 * var(--fd-u));
  line-height: 1.5;
}

/* --- Conteúdo do curso (595:35467) --------------------------------------- */
.fd-syllabus {
  padding-block: calc(120 * var(--fd-u));
  padding-inline: max(calc(112 * var(--fd-u)), calc((100% - var(--fd-max)) / 2));
  color: var(--white);
  background: var(--black);
}

.fd-syllabus__head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(18 * var(--fd-u));
  max-width: calc(800 * var(--fd-u));
  margin-inline: auto;
  text-align: center;
}

.fd-label--dark {
  background: var(--ink);
}

.fd-label--dark span {
  color: var(--gray-100);
}

.fd-syllabus h2 {
  font-size: calc(48 * var(--fd-u));
  line-height: 1;
}

.fd-syllabus__sub {
  max-width: calc(590 * var(--fd-u));
  color: var(--gray-400);
  font-size: calc(16 * var(--fd-u));
  line-height: 1.5;
}

.fd-syllabus__grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: calc(18 * var(--fd-u));
  margin: calc(60 * var(--fd-u)) 0 0;
  padding: 0;
  list-style: none;
}

/*
 * Cartão do documento da cliente: sem foto, cinza de ponta a ponta, etiqueta
 * no topo e o texto ancorado embaixo, sobre um filete verde. Os valores saem
 * das proporções medidas no documento (cartão de 407 x 514) aplicadas ao
 * cartão daqui, que tem 393 de largura — a seção é de largura travada, então
 * `--fd-u` vale 1 acima de 981 e os números são px na prática.
 */
.fd-module {
  display: flex;
  flex-direction: column;
  min-height: calc(497 * var(--fd-u));
  background: #e2e2e2;
  border-bottom: calc(5 * var(--fd-u)) solid var(--green);
}

/* Módulo 10 ocupa a linha inteira; o resto do cartão é igual aos outros. */
.fd-module--wide {
  grid-column: 1 / -1;
}

/*
 * Só aqui o título fica em uma linha: "Masterclasses" é uma palavra e o cartão
 * tem a largura toda, então a caixa de 6,3em dos outros não faz sentido.
 */
.fd-module--wide .fd-module__body h3 {
  max-width: none;
}

.fd-module__badge {
  position: relative;
  align-self: flex-start;
  display: inline-flex;
  align-items: stretch;
  height: calc(43 * var(--fd-u));
  margin: calc(24 * var(--fd-u)) 0 0 calc(15 * var(--fd-u));
  background: var(--white);
  font-size: calc(18 * var(--fd-u));
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}

.fd-module__badge span {
  display: flex;
  align-items: center;
  padding: 0 calc(19 * var(--fd-u));
  color: var(--black);
}

.fd-module__badge b {
  width: calc(43 * var(--fd-u));
  display: grid;
  place-items: center;
  color: var(--white);
  background: var(--blue);
  font-weight: 500;
}

/* `margin-top: auto` encosta o bloco de texto no rodapé do cartão. */
.fd-module__body {
  display: flex;
  flex-direction: column;
  gap: calc(11 * var(--fd-u));
  margin-top: auto;
  padding: 0 calc(33 * var(--fd-u)) calc(38 * var(--fd-u));
}

/*
 * `max-width` em `em`, não em px: assim o ponto de quebra acompanha o corpo do
 * título e não a largura do cartão. É o que mantém os nove títulos em duas
 * linhas em qualquer largura — 6,3em é a caixa do documento (341 para um corpo
 * de 54). Sem isso, em telas menores o cartão fica proporcionalmente mais
 * largo que o texto e títulos como "O que é design" voltam para uma linha só.
 */
.fd-module__body h3 {
  max-width: 6.3em;
  color: var(--black);
  font-family: var(--sans);
  font-size: calc(52 * var(--fd-u));
  font-weight: 400;
  line-height: 0.96;
  text-transform: none;
}

.fd-module__body p {
  color: var(--black);
  font-size: calc(20 * var(--fd-u));
  line-height: 1.21;
}

/* --- Carrosséis ---------------------------------------------------------- */
.fd-carousel {
  display: flex;
  gap: 24px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  padding-bottom: 20px;
  scrollbar-width: none;
}

.fd-carousel::-webkit-scrollbar {
  display: none;
}

.fd-carousel:focus-visible {
  outline: 3px solid var(--blue);
  outline-offset: 6px;
}

.fd-carousel > * {
  scroll-snap-align: start;
}

.fd-carousel__nav {
  display: flex;
  gap: 8px;
  flex: 0 0 auto;
}

.fd-carousel__nav button {
  position: relative;
  width: 46px;
  height: 46px;
  padding: 0;
  background: var(--white);
  border: 1px solid var(--black);
  cursor: pointer;
  transition: background 160ms ease, color 160ms ease;
}

.fd-carousel__nav button::before {
  content: "";
  position: absolute;
  inset: 0;
  margin: auto;
  width: 10px;
  height: 10px;
  border-top: 2px solid currentColor;
  border-right: 2px solid currentColor;
}

.fd-carousel__nav button[data-dir="prev"]::before {
  transform: translateX(2px) rotate(-135deg);
}

.fd-carousel__nav button[data-dir="next"]::before {
  transform: translateX(-2px) rotate(45deg);
}

.fd-carousel__nav button:hover {
  color: var(--white);
  background: var(--black);
}

.fd-carousel__nav button[disabled] {
  opacity: 0.3;
  cursor: default;
}

.fd-carousel__nav button[disabled]:hover {
  color: inherit;
  background: var(--white);
}

/* --- Trabalhos dos Leiauteiros (595:36444) ------------------------------- */
.fd-works {
  padding-block: calc(120 * var(--fd-u));
  background: var(--white);
}

.fd-works__head {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: calc(18 * var(--fd-u));
  align-items: start;
  padding-inline: max(calc(112 * var(--fd-u)), calc((100% - var(--fd-max)) / 2));
}

.fd-works__head > div:first-child {
  grid-column: 1 / span 2;
  display: flex;
  flex-direction: column;
  gap: calc(6 * var(--fd-u));
}

.fd-works h2 {
  font-size: calc(48 * var(--fd-u));
  line-height: 1;
}

.fd-works__head p {
  color: var(--ink);
  font-size: calc(16 * var(--fd-u));
  line-height: 1.5;
}

.fd-works__nav {
  grid-column: 3;
  display: flex;
  justify-content: flex-end;
  gap: calc(6 * var(--fd-u));
}

.fd-works__nav button {
  width: calc(32 * var(--fd-u));
  height: calc(32 * var(--fd-u));
  padding: 0;
  background: none;
  border: 0;
  cursor: pointer;
  transition: transform 160ms ease, opacity 160ms ease;
}

.fd-works__nav img {
  width: 100%;
  height: 100%;
}

.fd-works__nav button:hover {
  transform: translateY(-2px);
}

.fd-works__nav button[disabled] {
  opacity: 0.3;
  cursor: default;
  transform: none;
}

.fd-works__nav button:focus-visible {
  outline: 3px solid var(--blue);
  outline-offset: 3px;
}

.fd-works__track {
  margin-top: calc(48 * var(--fd-u));
}

.fd-works .fd-carousel {
  gap: calc(16 * var(--fd-u));
  padding-inline: max(calc(112 * var(--fd-u)), calc((100% - var(--fd-max)) / 2));
  /* sem isso o scroll-snap encosta o 1º cartão na borda e come o padding */
  scroll-padding-inline: max(calc(112 * var(--fd-u)), calc((100% - var(--fd-max)) / 2));
  padding-bottom: 0;
}

.fd-work {
  flex: 0 0 calc(292 * var(--fd-u));
  display: flex;
  flex-direction: column;
  background: var(--gray-100);
}

.fd-work__media {
  height: calc(320 * var(--fd-u));
  overflow: hidden;
}

.fd-work__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.fd-work__body {
  display: flex;
  align-items: center;
  gap: calc(12 * var(--fd-u));
  padding: calc(16 * var(--fd-u));
}

.fd-work__avatar {
  width: calc(34 * var(--fd-u));
  height: calc(34 * var(--fd-u));
  flex: 0 0 auto;
  object-fit: cover;
  background: var(--gray-200);
}

.fd-work__name {
  color: var(--ink);
  font-size: calc(16 * var(--fd-u));
  font-weight: 500;
  line-height: 1;
}

.fd-work__handle {
  color: var(--ink);
  font-size: calc(12 * var(--fd-u));
  line-height: 1.5;
}

/* --- Professores convidados ---------------------------------------------- */
.fd-guests {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(60 * var(--fd-u));
  overflow: hidden;
  padding-top: calc(80 * var(--fd-u));
  color: var(--white);
  background: var(--blue);
}

.fd-guests__head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(18 * var(--fd-u));
  width: min(100%, calc(800 * var(--fd-u)));
  padding-inline: calc(24 * var(--fd-u));
}

.fd-guests h2 {
  width: min(100%, calc(532 * var(--fd-u)));
  margin: 0;
  color: var(--white);
  font-family: var(--display);
  font-size: calc(48 * var(--fd-u));
  font-weight: 400;
  line-height: 1;
  text-align: center;
  text-transform: uppercase;
}

/* Fita corrida: os cartões sangram os dois lados da tela, como na prancheta. */
.fd-guests__track {
  width: 100%;
  overflow: hidden;
}

.fd-guests__rail {
  display: flex;
  width: max-content;
  animation: fd-marquee 52s linear infinite;
}

.fd-guests__track:hover .fd-guests__rail {
  animation-play-state: paused;
}

.fd-guests__list {
  display: flex;
  margin: 0;
  padding: 0;
  list-style: none;
}

.fd-guests__list li {
  position: relative;
  flex: 0 0 auto;
  width: calc(208 * var(--fd-u));
  height: calc(260 * var(--fd-u));
  margin-right: calc(16 * var(--fd-u));
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  overflow: hidden;
}

.fd-guests__list img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: calc(100% + 1px);
  object-fit: cover;
}

.fd-guests__list div {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: calc(2 * var(--fd-u));
  padding: calc(17.7 * var(--fd-u));
  background: linear-gradient(to top, rgba(0, 0, 0, 0.9), rgba(0, 0, 0, 0));
}

.fd-guests__list h3 {
  margin: 0;
  color: var(--white);
  font-family: var(--display);
  font-size: calc(22 * var(--fd-u));
  font-weight: 400;
  line-height: 1;
  text-transform: uppercase;
}

.fd-guests__list p {
  margin: 0;
  color: var(--gray-400);
  font-size: calc(12 * var(--fd-u));
  font-weight: 500;
  line-height: 1;
}

.fd-guests__cta {
  min-height: calc(52 * var(--fd-u));
  gap: calc(20 * var(--fd-u));
  width: calc(258 * var(--fd-u));
  padding: calc(18 * var(--fd-u)) calc(18 * var(--fd-u)) calc(18 * var(--fd-u)) calc(26 * var(--fd-u));
  font-size: calc(16 * var(--fd-u));
  white-space: nowrap;
}

.fd-guests__cta .cta-icon {
  width: calc(20 * var(--fd-u));
  height: calc(20 * var(--fd-u));
  flex: 0 0 calc(20 * var(--fd-u));
}

/* Trama de losangos que fecha a seção. */
.fd-guests__band {
  width: 100%;
  height: calc(62 * var(--fd-u));
  background-color: var(--blue);
  background-image:
    repeating-linear-gradient(45deg, var(--black) 0 calc(4 * var(--fd-u)), transparent calc(4 * var(--fd-u)) calc(21 * var(--fd-u))),
    repeating-linear-gradient(-45deg, var(--black) 0 calc(4 * var(--fd-u)), transparent calc(4 * var(--fd-u)) calc(21 * var(--fd-u)));
}

/* --- Bônus (616:38335) --------------------------------------------------- */
.fd-bonus {
  padding-block: calc(120 * var(--fd-u));
  padding-inline: max(calc(112 * var(--fd-u)), calc((100% - var(--fd-max)) / 2));
  background: var(--gray-100);
}

.fd-bonus__inner {
  display: flex;
  flex-direction: column;
  gap: calc(60 * var(--fd-u));
}

.fd-bonus__head {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: calc(18 * var(--fd-u));
  align-items: start;
}

.fd-bonus h2 {
  grid-column: 1 / 3;
  max-width: calc(533 * var(--fd-u));
  margin: 0;
  color: var(--black);
  font-family: var(--display);
  font-size: calc(48 * var(--fd-u));
  font-weight: 400;
  line-height: 1;
  text-transform: uppercase;
}

.fd-bonus h2 em {
  color: var(--blue);
  font-style: normal;
}

.fd-bonus__lead {
  grid-column: 3;
  max-width: calc(391 * var(--fd-u));
  margin: 0;
  color: var(--gray-600);
  font-size: calc(16 * var(--fd-u));
  line-height: 1.5;
}

.fd-bonus__grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: calc(18 * var(--fd-u));
}

.fd-bonuscard {
  display: flex;
  flex-direction: column;
  min-width: 0;
  background: var(--ink);
}

.fd-bonuscard__media {
  position: relative;
  height: calc(320 * var(--fd-u));
  /*
   * Arredonda para pixel inteiro. Com a altura fracionária, quando o cartão
   * vira camada composta (a animação de entrada aplica transform), o
   * compositor reamostra a borda e vaza uma linha clara na emenda com o corpo.
   */
  height: round(calc(320 * var(--fd-u)), 1px);
  display: flex;
  align-items: flex-end;
  overflow: hidden;
}

.fd-bonuscard__media img {
  position: absolute;
  inset: 0;
  width: 100%;
  /* 1px a mais: a última linha reamostrada da foto fica fora do overflow. */
  height: calc(100% + 1px);
  object-fit: cover;
  /*
   * As fotos são verticais (4:5) e o cartão é deitado, então sobra altura para
   * cortar. Sem isto o corte sai do centro, e em várias fotos o assunto não
   * está no centro: a pilha de livros fica embaixo, o notebook da cadeira fica
   * em cima. Cada cartão diz onde ancorar pelo `--fd-bonus-foco`, no HTML, com
   * o enquadramento da referência que a cliente mandou. 0% = topo da foto,
   * 100% = base.
   */
  object-position: center var(--fd-bonus-foco, 50%);
}

/*
 * Aba com o canto chanfrado. É UMA forma só: a caixa reserva 32 à direita para
 * o chanfro e o `clip-path` corta a diagonal. Fazer com retângulo + triângulo
 * separados abre um filete claro na emenda quando as duas caixas caem em
 * pixels fracionários diferentes.
 */
.fd-bonuscard__tab {
  position: relative;
  margin: 0;
  padding: calc(10 * var(--fd-u)) calc(48 * var(--fd-u)) calc(10 * var(--fd-u)) calc(16 * var(--fd-u));
  color: var(--gray-200);
  font-family: var(--fd-mono);
  font-size: calc(12 * var(--fd-u));
  line-height: 1;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  white-space: nowrap;
  background: var(--ink);
  clip-path: polygon(0 0, calc(100% - 32 * var(--fd-u)) 0, 100% 100%, 0 100%);
}

/*
 * O corpo sobe 1 px sobre a foto. Em zoom fracionado do navegador as duas
 * caixas podem cair em pixels diferentes e abrir um filete claro na emenda;
 * a sobreposição elimina isso sem mudar o desenho.
 */
.fd-bonuscard__body {
  position: relative;
  /*
   * Sobreposição de 2px. Em zoom fracionado (90 %, 110 %) ou DPR 1,25 um pixel
   * CSS não é um pixel do dispositivo, e 1px de folga ainda deixava passar a
   * borda reamostrada da foto.
   */
  margin-top: -2px;
  display: flex;
  flex: 1;
  flex-direction: column;
  justify-content: space-between;
  gap: calc(16 * var(--fd-u));
  min-height: calc(180 * var(--fd-u));
  padding: calc(16 * var(--fd-u));
  /* Fundo próprio: sem ele a margem negativa não cobre nada. */
  background: var(--ink);
}

.fd-bonuscard__copy {
  display: flex;
  flex-direction: column;
  gap: calc(8 * var(--fd-u));
}

.fd-bonuscard h3 {
  margin: 0;
  color: var(--white);
  font-family: var(--sans);
  font-size: calc(26 * var(--fd-u));
  font-weight: 500;
  line-height: 1.3;
  letter-spacing: 0;
  text-transform: none;
}

.fd-bonuscard__copy p {
  margin: 0;
  color: var(--gray-200);
  font-size: calc(14 * var(--fd-u));
  line-height: 1.5;
}

.fd-chips {
  display: flex;
  flex-wrap: wrap;
  gap: calc(8 * var(--fd-u));
  margin: 0;
  padding: 0;
  list-style: none;
}

.fd-chips li {
  padding: calc(6 * var(--fd-u)) calc(8 * var(--fd-u));
  color: var(--gray-400);
  font-family: var(--fd-mono);
  font-size: calc(10 * var(--fd-u));
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  white-space: nowrap;
  border: 1px solid var(--gray-400);
  border-radius: 600px;
}

.fd-bonus__foot {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: calc(18 * var(--fd-u));
  align-items: stretch;
}

.fd-bonus__cta {
  grid-column: 1;
  min-height: calc(56 * var(--fd-u));
  gap: calc(20 * var(--fd-u));
  min-width: 0;
  padding: calc(18 * var(--fd-u)) calc(18 * var(--fd-u)) calc(18 * var(--fd-u)) calc(26 * var(--fd-u));
  font-size: calc(16 * var(--fd-u));
  white-space: nowrap;
}

.fd-bonus__cta .cta-icon {
  width: calc(20 * var(--fd-u));
  height: calc(20 * var(--fd-u));
  flex: 0 0 calc(20 * var(--fd-u));
}

/*
 * Mesma peça da seção "Como o conteúdo é organizado" — a regra está lá, com as
 * duas seções agrupadas. A coluna do rodapé do bônus tem os mesmos 393 x 56.
 */

/* --- Preço (619:39377) --------------------------------------------------- */
.fd-price {
  position: relative;
  overflow: hidden;
  padding-bottom: 0;
  color: var(--white);
  background: var(--blue);
}

/*
 * Display sangrado: o JS mede a linha e ajusta o corpo para preencher a tela.
 *
 * No frame 619:39377 a palavra tem 1454px de largura numa seção de 1440 — ela
 * sangra 7px de cada lado — e a caixa de texto tem 139px de altura. A tinta da
 * ABC Gravity nesse corpo mede 144,5px, ou seja, sobra mais do que a caixa: o
 * Figma corta ~2,5px no TOPO (a borda da seção) e deixa a base das letras
 * inteira, passando ~3px por baixo da caixa.
 *
 * Por isso as medidas aqui estão em `em` e não em `--fd-u`: o corpo do título
 * acompanha a largura da tela, então altura e deslocamento precisam acompanhar
 * junto. Travados em pixel, o corte cresce com a tela — era o que cortava a
 * base das letras em telas largas.
 *
 * As constantes vêm da métrica da ABC Gravity Extra Condensed com line-height 1:
 *   tinta ......................... 0.7247em
 *   topo da tinta na caixa de linha  0.2212em
 *   caixa do Figma (139/199,34) ... 0.6973em
 *   sangria no topo (2,5/199,34) .. 0.0125em
 * Daí: margem = -(0.0125 + 0.2212) = -0.2337em.
 */
.fd-price__display {
  height: 0.6973em;
  margin: 0;
  /*
   * `flow-root` no lugar do antigo `overflow: hidden`. O que subia o título
   * era a margem negativa do span, e ela só funciona se o h2 for um contexto
   * de formatação próprio — senão a margem colapsa para fora e arrasta o h2
   * inteiro em vez de mover o texto dentro dele. `overflow: hidden` criava
   * esse contexto de brinde, mas junto vinha o corte na base das letras.
   */
  display: flow-root;
  overflow: visible;
  color: rgba(255, 255, 255, 0.2);
  font-family: var(--display);
  font-size: var(--fd-price-title-size, 13.6vw);
  font-weight: 400;
  line-height: 1;
  text-transform: uppercase;
}

/*
 * O display virou fita infinita.
 *
 * Quem recorta é a seção, que já tem `overflow: hidden` — o h2 precisa seguir
 * com `overflow: visible`, porque `overflow-x: hidden` com `overflow-y:
 * visible` não existe em CSS: assim que um eixo deixa de ser `visible`, o
 * outro vira `auto`, e a base das letras voltaria a ser cortada.
 *
 * A margem negativa que segura a altura mudou de lugar: agora mora na fita, que
 * é quem ocupa a caixa do h2.
 *
 * Regra de fita que já valia nas outras três da página: o espaçamento vive no
 * `margin-right` de cada item, nunca em `gap` da fita ou da fila. Em `gap`, a
 * emenda entre as duas filas fica com o dobro do vão e o laço passa do ponto.
 */
.fd-price__fita {
  display: flex;
  width: max-content;
  margin-top: -0.2337em;
  animation: fd-marquee 45s linear infinite;
}

.fd-price__fita:hover {
  animation-play-state: paused;
}

.fd-price__fila {
  display: flex;
}

.fd-price__fila i {
  margin-right: 0.28em;
  font-style: normal;
  white-space: nowrap;
}

.fd-price__inner {
  display: grid;
  grid-template-columns: 321.375fr 440fr 321.375fr;
  gap: calc(53 * var(--fd-u));
  align-items: center;
  width: min(100%, calc(1188.75 * var(--fd-u)));
  margin: 0 auto;
  padding-top: calc(40 * var(--fd-u));
}

/* Depoimento alinhado à direita, encostando no cartão. */
.fd-price__quote {
  display: flex;
  flex-direction: column;
  gap: calc(60 * var(--fd-u));
  min-width: 0;
  margin: 0;
  text-align: right;
}

.fd-price__quote blockquote {
  margin: 0;
  color: var(--white);
  font-size: calc(16 * var(--fd-u));
  line-height: 1.5;
}

.fd-price__quote figcaption {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: calc(12 * var(--fd-u));
}

.fd-price__who {
  display: flex;
  flex-direction: column;
  gap: calc(2 * var(--fd-u));
}

.fd-price__who strong {
  font-size: calc(16 * var(--fd-u));
  font-weight: 500;
  line-height: 1.125;
}

.fd-price__who small {
  color: var(--gray-200);
  font-size: calc(12 * var(--fd-u));
  line-height: 1.5;
}

.fd-price__quote img {
  width: calc(38 * var(--fd-u));
  height: calc(38 * var(--fd-u));
  flex: 0 0 auto;
  object-fit: cover;
}

/* --- Cartão de preço ----------------------------------------------------- */
.fd-pricecard {
  display: flex;
  flex-direction: column;
  min-width: 0;
  background: var(--ink);
}

.fd-pricecard__top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: calc(16 * var(--fd-u));
  padding: calc(16 * var(--fd-u));
  background: var(--gray-100);
}

.fd-pricecard__logo {
  width: calc(158.414 * var(--fd-u));
  height: calc(44 * var(--fd-u));
}

.fd-pricecard__badge {
  display: inline-flex;
  align-items: stretch;
  margin: 0;
  color: var(--white);
  text-transform: uppercase;
  background: var(--gray-700);
}

.fd-pricecard__badge span:first-child {
  display: grid;
  place-items: center;
  width: calc(32 * var(--fd-u));
  height: calc(32 * var(--fd-u));
  font-size: calc(14 * var(--fd-u));
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0.02em;
  background: var(--blue);
}

.fd-pricecard__badge span:last-child {
  display: grid;
  place-items: center;
  padding-inline: calc(12 * var(--fd-u));
  font-size: calc(12 * var(--fd-u));
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0.02em;
}

.fd-pricecard__body {
  display: flex;
  flex: 1;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: calc(60 * var(--fd-u));
  padding: calc(60 * var(--fd-u)) calc(32 * var(--fd-u)) calc(32 * var(--fd-u));
}

.fd-pricecard__amount {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(8 * var(--fd-u));
  text-align: center;
}

.fd-pricecard__label {
  margin: 0;
  font-size: calc(18 * var(--fd-u));
  font-weight: 500;
  line-height: 1.5;
  letter-spacing: 0.03em;
}

.fd-pricecard__value {
  margin: 0;
  font-family: var(--display);
  font-size: calc(88 * var(--fd-u));
  font-weight: 400;
  line-height: 1;
  text-transform: uppercase;
}

.fd-pricecard__cash {
  margin: 0;
  font-size: calc(16 * var(--fd-u));
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0.03em;
}

.fd-pricecard__action {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(16 * var(--fd-u));
  width: min(100%, calc(358 * var(--fd-u)));
}

.fd-pricecard__cta {
  min-height: calc(58 * var(--fd-u));
  gap: calc(20 * var(--fd-u));
  width: 100%;
  padding: calc(20 * var(--fd-u)) calc(20 * var(--fd-u)) calc(20 * var(--fd-u)) calc(28 * var(--fd-u));
  font-size: calc(18 * var(--fd-u));
  white-space: nowrap;
}

.fd-pricecard__cta .cta-icon {
  width: calc(20 * var(--fd-u));
  height: calc(20 * var(--fd-u));
  flex: 0 0 calc(20 * var(--fd-u));
}

.fd-pricecard__flags {
  width: calc(197.995 * var(--fd-u));
  height: calc(18 * var(--fd-u));
}

/* Faixa final com a trama de cruzes atrás do selo de pagamento. */
.fd-pricecard__safe {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0;
  padding: calc(24 * var(--fd-u));
  background-color: var(--ink);
}

/*
 * Malha larga do rodapé do cartão de preço, medida no frame 619:39387 num
 * export 4x: passo de 25,24, cruz de 8 com traço de 1, branco a 20%.
 *
 * `background-position: center` é o que faz a malha "encaixar". Ancorada no
 * canto (o padrão, 0% 0%), a primeira cruz nasce a 12,7px da borda esquerda e
 * a última sobra irregular do outro lado. Centrada, a grade fica simétrica na
 * caixa: em 440px de largura dá 17 colunas com 18,2px de margem dos dois
 * lados, e nos 84px de altura dá 3 linhas com 16,8px em cima e embaixo —
 * exatamente as posições do Figma. Como a tag também é centrada, as bordas do
 * fundo dela caem sempre no mesmo ponto entre duas colunas.
 */
.fd-pricecard__safe::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: url("./assets/texture-plus-wide.svg");
  background-position: center;
  background-size: calc(25.24 * var(--fd-u)) calc(25.24 * var(--fd-u));
  opacity: 0.2;
}

.fd-pricecard__safe span {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: calc(10 * var(--fd-u));
  padding: calc(8 * var(--fd-u));
  color: var(--white);
  font-size: calc(14 * var(--fd-u));
  line-height: 1;
  letter-spacing: 0.03em;
  background: var(--ink);
}

.fd-pricecard__safe img {
  width: calc(20 * var(--fd-u));
  height: calc(20 * var(--fd-u));
  flex: 0 0 auto;
}

/* --- Lista do plano ------------------------------------------------------ */
.fd-price__list {
  display: flex;
  flex-direction: column;
  gap: calc(8 * var(--fd-u));
  min-width: 0;
  margin: 0;
  padding: 0;
  list-style: none;
}

.fd-price__list li {
  display: flex;
  align-items: center;
  gap: calc(14 * var(--fd-u));
  min-height: calc(25.6 * var(--fd-u));
  color: var(--gray-200);
  font-size: calc(14 * var(--fd-u));
  line-height: 1.2;
  letter-spacing: 0.03em;
}

.fd-price__list img {
  width: calc(22 * var(--fd-u));
  height: calc(22 * var(--fd-u));
  flex: 0 0 auto;
}

/* --- Garantia (619:39516) ------------------------------------------------ */
.fd-warranty {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(32 * var(--fd-u));
  padding-bottom: calc(120 * var(--fd-u));
  color: var(--white);
  background: var(--blue);
}

.fd-warranty__seal {
  width: calc(222 * var(--fd-u));
  height: calc(363 * var(--fd-u));
}

/*
 * Selo da garantia: uma peça só no arquivo, três animações diferentes.
 *
 * O SVG está embutido na marcação justamente por isso — como `<img>` a fita e o
 * disco só podiam se mover juntos, e girar a fita não tem nada de natural.
 *
 * · fita  — desenrola de cima para baixo, como se descesse por trás do cartão.
 *           Sem rotação nenhuma.
 * · disco — entra depois que a fita termina.
 * · texto — gira sozinho, no sentido anti-horário, para o rótulo ser lido na
 *           ordem em que passa pelo topo.
 *
 * `transform-box: fill-box` faz a origem ser o centro da própria peça, sem
 * precisar de coordenada mágica do viewBox.
 */
.motion-enabled .fd-warranty__fita {
  clip-path: inset(0 0 100% 0);
  transition: clip-path 900ms var(--motion-ease-scale);
}

.motion-enabled .fd-warranty__seal.is-visible .fd-warranty__fita {
  clip-path: inset(0);
}

.motion-enabled .fd-warranty__disco {
  opacity: 0;
  scale: 0.94;
  transform-box: fill-box;
  transform-origin: center;
  transition:
    opacity 620ms var(--motion-ease-out) 560ms,
    scale 620ms var(--motion-ease-scale) 560ms;
}

.motion-enabled .fd-warranty__seal.is-visible .fd-warranty__disco {
  opacity: 1;
  scale: 1;
}

@keyframes fd-selo-giro {
  to { rotate: -360deg; }
}

.motion-enabled .fd-warranty__giro {
  transform-box: fill-box;
  transform-origin: center;
  animation: fd-selo-giro 20s linear infinite;
}

.fd-warranty__text {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(18 * var(--fd-u));
  padding-inline: calc(24 * var(--fd-u));
  text-align: center;
}

.fd-warranty h2 {
  margin: 0;
  color: var(--white);
  font-family: var(--display);
  font-size: calc(48 * var(--fd-u));
  font-weight: 400;
  line-height: 1;
  text-transform: uppercase;
}

.fd-warranty__text p {
  width: min(100%, calc(590 * var(--fd-u)));
  margin: 0;
  color: var(--gray-200);
  font-size: calc(16 * var(--fd-u));
  line-height: 1.5;
}

/* --- Depoimentos em vídeo (568:2866) ------------------------------------- */
/*
 * Modo escuro, na disposição da referência de "cases": rótulo e título à
 * esquerda, setas no canto direito na altura da última linha do título, e o
 * carrossel começando na margem do conteúdo e correndo até a borda da tela. No
 * celular as setas descem para baixo do carrossel.
 *
 * A seção é uma grade de quatro colunas — margem, cabeçalho, setas, margem — em
 * vez de padding nos filhos: `%` no padding de um item de grade mediria a área
 * dele, não a seção, e a margem sairia errada.
 * Os cartões são os do wireframe `568:2866`, no mesmo formato, em versão escura.
 *
 * O fundo é um cinza entre `--ink` e o preto — #111, misturado dos dois tokens —,
 * não preto puro, porque os cartões são pretos. O brilho no alto é branco a 7 %.
 * Nenhuma cor nova.
 */
.fd-testimonials {
  --fd-depo-margem: max(calc(112 * var(--fd-u)), calc((100% - var(--fd-max)) / 2));
  --fd-depo-card: calc(800 * var(--fd-u));
  display: grid;
  grid-template-columns: var(--fd-depo-margem) minmax(0, 1fr) auto var(--fd-depo-margem);
  grid-template-areas:
    ".     head  nav   ."
    "track track track track";
  row-gap: calc(56 * var(--fd-u));
  padding-block: calc(120 * var(--fd-u));
  overflow: hidden;
  color: var(--white);
  background:
    radial-gradient(ellipse 55% 80% at 28% 0%, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0) 70%),
    var(--ink);
  /* sem `color-mix` o navegador fica na linha de cima, com o `--ink` */
  background:
    radial-gradient(ellipse 55% 80% at 28% 0%, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0) 70%),
    color-mix(in srgb, var(--ink) 50%, var(--black));
}

.fd-testimonials__head {
  grid-area: head;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: calc(24 * var(--fd-u));
  padding-right: calc(32 * var(--fd-u));
}

/* O chip escuro é `--ink`, quase a cor do fundo daqui: em preto ele se destaca. */
.fd-testimonials .fd-label--dark {
  background: var(--black);
}

.fd-testimonials h2 {
  max-width: calc(640 * var(--fd-u));
  color: var(--white);
  font-size: calc(48 * var(--fd-u));
  line-height: 1;
  text-align: left;
  text-transform: uppercase;
}

/* No alto à direita, com a base na linha da base do título. */
.fd-testimonials__nav {
  grid-area: nav;
  align-self: end;
}

/* Setas do carrossel genérico, invertidas para o escuro. */
.fd-testimonials .fd-carousel__nav {
  gap: calc(8 * var(--fd-u));
}

.fd-testimonials .fd-carousel__nav button {
  width: calc(48 * var(--fd-u));
  height: calc(48 * var(--fd-u));
  color: var(--white);
  background: transparent;
  border-color: rgba(255, 255, 255, 0.4);
}

.fd-testimonials .fd-carousel__nav button:hover {
  color: var(--black);
  background: var(--white);
  border-color: var(--white);
}

.fd-testimonials .fd-carousel__nav button[disabled],
.fd-testimonials .fd-carousel__nav button[disabled]:hover {
  color: var(--white);
  background: transparent;
  border-color: rgba(255, 255, 255, 0.4);
}

/*
 * As larguras abaixo de 981 saem em `cqw`, a largura da faixa: `%` num
 * `flex-basis` mede a caixa de conteúdo do carrossel, que já desconta o padding.
 */
.fd-testimonials__track {
  grid-area: track;
  container-type: inline-size;
}

.fd-testimonials .fd-carousel {
  gap: calc(24 * var(--fd-u));
  padding-inline: var(--fd-depo-margem);
  /* sem isso o scroll-snap encosta o 1º cartão na borda e come a margem */
  scroll-padding-inline: var(--fd-depo-margem);
  padding-bottom: 0;
}

/*
 * Cartão de 800u: texto de 390u, vão de 48u e miniatura de 280x373u (3:4), com
 * 41u e 49u de respiro. Escuro: preto sobre o cinza da seção.
 */
.fd-testimonial {
  flex: 0 0 var(--fd-depo-card);
  display: grid;
  grid-template-columns: minmax(0, 1fr) calc(280 * var(--fd-u));
  column-gap: calc(48 * var(--fd-u));
  padding: calc(49 * var(--fd-u)) calc(41 * var(--fd-u));
  background: var(--black);
}

.fd-testimonial__text {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: calc(32 * var(--fd-u));
  margin: 0;
  padding-top: calc(12 * var(--fd-u));
}

.fd-testimonial__quote {
  margin: 0;
}

.fd-testimonial__quote p {
  color: var(--white);
  font-size: calc(20 * var(--fd-u));
  font-weight: 500;
  line-height: 1.5;
}

.fd-testimonial__person {
  display: flex;
  align-items: center;
  gap: calc(16 * var(--fd-u));
}

.fd-testimonial__avatar {
  width: calc(48 * var(--fd-u));
  height: calc(48 * var(--fd-u));
  flex: 0 0 auto;
  object-fit: cover;
}

.fd-testimonial__name,
.fd-testimonial__role {
  display: block;
  line-height: 1.5;
}

.fd-testimonial__name {
  color: var(--white);
  font-size: calc(16 * var(--fd-u));
  font-weight: 700;
}

.fd-testimonial__role {
  color: var(--gray-400);
  font-size: calc(14 * var(--fd-u));
}

/*
 * A miniatura inteira é o link. Sem JS ele leva ao YouTube; com JS o vídeo abre
 * aqui mesmo, no `<dialog>` (seção 4.3 do JS). O quadrado do play fica metade
 * sobre a foto e metade sobre o texto, na costura dos dois — por isso a máscara
 * do `overflow: hidden` mora na miniatura, e não no link.
 */
.fd-testimonial__media {
  position: relative;
  display: block;
  height: calc(373 * var(--fd-u));
  color: var(--white);
}

.fd-testimonial__thumb {
  display: block;
  width: 100%;
  height: 100%;
  overflow: hidden;
  background: var(--gray-700);
}

.fd-testimonial__thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 240ms cubic-bezier(0.22, 1, 0.36, 1);
}

.fd-testimonial__play {
  position: absolute;
  top: 50%;
  left: calc(-32 * var(--fd-u));
  display: grid;
  place-items: center;
  width: calc(64 * var(--fd-u));
  height: calc(64 * var(--fd-u));
  /* branco: o quadrado preto do wireframe sumiria no cartão escuro */
  color: var(--black);
  background: var(--white);
  /*
   * Exceção pedida à regra de cantos retos (diretrizes, seção 9): o play é
   * redondo porque é o formato que o usuário reconhece como "tocar vídeo".
   */
  border-radius: 50%;
  translate: 0 -50%;
  transition: background-color 160ms ease, color 160ms ease;
}

.fd-testimonial__play svg {
  width: calc(24 * var(--fd-u));
  height: calc(24 * var(--fd-u));
  /* o triângulo pesa à esquerda: 2u para a direita é o centro óptico */
  translate: calc(2 * var(--fd-u)) 0;
}

/* Mesmo gesto dos outros cartões com foto: a imagem cresce dentro da máscara. */
.fd-testimonial__media:hover .fd-testimonial__thumb img,
.fd-testimonial__media:focus-visible .fd-testimonial__thumb img {
  transform: scale(1.04);
}

.fd-testimonial__media:hover .fd-testimonial__play,
.fd-testimonial__media:focus-visible .fd-testimonial__play {
  color: var(--black);
  background: var(--green);
}

.fd-testimonial__media:focus-visible {
  outline: 3px solid var(--green);
  outline-offset: 4px;
}

/*
 * Tablet (700 a 980): o cartão continua deitado, em px e com a miniatura de
 * 240x320. A largura desconta a margem dos dois lados e deixa o próximo cartão
 * aparecer na borda direita.
 */
@media (max-width: 980px) {
  .fd-testimonials {
    --fd-depo-margem: 48px;
    --fd-depo-card: min(680px, calc(100cqw - 96px));
    row-gap: 40px;
    padding-block: 80px;
  }

  .fd-testimonials h2 {
    /* Sem teto: com 520 a frase ia a três linhas tendo a coluna inteira livre. */
    max-width: none;
    font-size: clamp(30px, 8vw, 48px);
  }

  .fd-testimonials .fd-carousel {
    gap: 16px;
  }

  .fd-testimonials .fd-carousel__nav button {
    width: 44px;
    height: 44px;
  }

  .fd-testimonial {
    grid-template-columns: minmax(0, 1fr) 240px;
    column-gap: 40px;
    padding: 32px;
  }

  .fd-testimonial__text {
    gap: 24px;
    padding-top: 0;
  }

  .fd-testimonial__quote p {
    font-size: 18px;
  }

  .fd-testimonial__avatar {
    width: 48px;
    height: 48px;
  }

  .fd-testimonial__name {
    font-size: 16px;
  }

  .fd-testimonial__role {
    font-size: 14px;
  }

  .fd-testimonial__media {
    height: 320px;
  }

  .fd-testimonial__play {
    left: -32px;
    width: 64px;
    height: 64px;
  }

  .fd-testimonial__play svg {
    width: 24px;
    height: 24px;
    translate: 2px 0;
  }
}

/*
 * Celular (até 699): o cartão empilha — miniatura quadrada no alto e o play
 * dentro dela, no canto de baixo à esquerda, para não gastar altura: sem o play
 * pendurado na costura, o vão entre foto e texto cai de 40 para 20px. O
 * quadrado corta a miniatura de 3:4 com `30%` no eixo y:
 * mostra de 7,5 % a 82,5 % da altura, e o rosto das quatro alunas cabe inteiro.
 * As setas descem para baixo do carrossel, no canto esquerdo, na margem do
 * conteúdo.
 */
@media (max-width: 699px) {
  .fd-testimonials {
    --fd-depo-card: min(480px, calc(100cqw - 72px));
  }

  .fd-testimonials {
    grid-template-columns: var(--fd-depo-margem) minmax(0, 1fr) var(--fd-depo-margem);
    grid-template-areas:
      ".     head  ."
      "track track track"
      ".     nav   .";
  }

  .fd-testimonials__head {
    padding-right: 0;
  }

  .fd-testimonials__nav {
    justify-self: start;
  }

  .fd-testimonial {
    grid-template-columns: minmax(0, 1fr);
    row-gap: 20px;
    padding: 16px;
  }

  .fd-testimonial__media {
    order: -1;
    height: auto;
    aspect-ratio: 1 / 1;
  }

  .fd-testimonial__thumb img {
    object-position: 50% 30%;
  }

  /* A sombra separa o círculo branco de fundos claros, como o moletom da Éve. */
  .fd-testimonial__play {
    top: auto;
    bottom: 16px;
    left: 16px;
    translate: none;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35);
  }

  .fd-testimonial__quote p {
    font-size: 17px;
  }
}

@media (max-width: 620px) {
  .fd-testimonials {
    --fd-depo-margem: 16px;
    --fd-depo-card: min(480px, calc(100cqw - 48px));
    row-gap: 32px;
    padding-block: 60px;
  }

  .fd-testimonials .fd-carousel {
    gap: 12px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .fd-testimonial__thumb img {
    transition: none;
  }

  .fd-testimonial__media:hover .fd-testimonial__thumb img,
  .fd-testimonial__media:focus-visible .fd-testimonial__thumb img {
    transform: none;
  }
}

/* --- Player do depoimento (`<dialog>`) ------------------------------------ */
/*
 * O vídeo ocupa o que couber sem passar da tela: 1120px no máximo, a largura
 * menos 32px, ou a altura menos 128px convertida para 16:9 — o que for menor.
 * O X fica acima do vídeo, fora dele, para não cobrir os controles do YouTube.
 */
.fd-video-modal {
  width: min(calc(100vw - 32px), 1120px, calc((100dvh - 128px) * 16 / 9));
  max-width: none;
  max-height: none;
  margin: auto;
  padding: 0;
  overflow: visible;
  border: 0;
  background: transparent;
}

.fd-video-modal::backdrop {
  background: rgba(0, 0, 0, 0.88);
}

.fd-video-modal__frame {
  aspect-ratio: 16 / 9;
  background: var(--black);
}

.fd-video-modal__frame iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}

.fd-video-modal__close {
  position: absolute;
  right: 0;
  bottom: calc(100% + 12px);
  width: 44px;
  height: 44px;
  padding: 0;
  border: 0;
  background: var(--white);
  transition: background-color 160ms ease;
}

.fd-video-modal__close span::before,
.fd-video-modal__close span::after {
  content: "";
  position: absolute;
  top: 21px;
  left: 13px;
  width: 18px;
  height: 2px;
  background: var(--black);
  transition: background-color 160ms ease;
}

.fd-video-modal__close span::before { transform: rotate(45deg); }
.fd-video-modal__close span::after { transform: rotate(-45deg); }

/* No hover o X vai para o vermelho da marca, com o traço em branco. */
.fd-video-modal__close:hover { background: var(--red); }

.fd-video-modal__close:hover span::before,
.fd-video-modal__close:hover span::after {
  background: var(--white);
}

.fd-video-modal__close:focus-visible {
  outline: 2px solid var(--red);
  outline-offset: 3px;
}

/*
 * O `<dialog>` aberto vai para a camada do topo, acima de qualquer `z-index` —
 * inclusive do cursor da marca. Como a página esconde o cursor do sistema, sem
 * esta regra não haveria cursor nenhum dentro do player.
 */
html.brand-cursor-active .fd-video-modal,
html.brand-cursor-active .fd-video-modal * {
  cursor: auto !important;
}

html.brand-cursor-active .fd-video-modal__close {
  cursor: pointer !important;
}

/* Com o player aberto a página de trás não rola. */
html.fd-video-aberto {
  overflow: hidden;
}

/* --- Bolsas (622:39751) -------------------------------------------------- */
/*
 * Bolsas, redesenhada pelo documento da cliente. A seção sangra de ponta a
 * ponta e é de largura travada (`--fd-u: 1px` acima de 981), então os valores
 * abaixo são a medição do documento de 1920 direto em px.
 */
.fd-scholarship {
  position: relative;
  height: calc(674 * var(--fd-u));
  overflow: hidden;
  background: var(--black);
}

/*
 * Bloco vermelho no topo esquerdo, com a marca deitada.
 *
 * A largura é fração da seção, não pixel fixo: a seção sangra de ponta a ponta
 * e em px o bloco encolhia proporcionalmente em telas maiores que 1920 — em
 * 2029 já saía 7 % menor que no documento. Em 1800 do recorte ele mede 91, ou
 * 5,06 % da largura. O teto de 109 é a mesma amortização que `--fd-u` usa no
 * resto da página: para de crescer no valor de 1920 vezes 1,12.
 */
.fd-scholarship__brand {
  position: absolute;
  top: 0;
  left: 0;
  width: min(5.06%, calc(109 * var(--fd-u)));
  aspect-ratio: 91 / 274;
  display: grid;
  place-items: center;
  background: #f22444;
}

/*
 * A marca é a mesma peça horizontal, girada. O vermelho dela é o mesmo do
 * bloco, então a caixa menor do SVG desaparece dentro dele.
 *
 * `max-width: none` é obrigatório: o `img { max-width: 100% }` do base.css
 * espremia os 235 na largura do bloco (96) e, como o SVG vem com
 * `preserveAspectRatio="none"`, o desenho achatava junto em vez de encolher.
 */
.fd-scholarship__brand img {
  width: 243.3%;
  max-width: none;
  height: auto;
  transform: rotate(-90deg);
}

.fd-scholarship__photo {
  position: absolute;
  top: 0;
  right: 0;
  width: 50%;
  height: 100%;
  overflow: hidden;
}

.fd-scholarship__photo img {
  width: 100%;
  height: calc(100% + 1px);
  object-fit: cover;
}

/* Quadradinho azul encostado na borda da foto, na altura do título. */
.fd-scholarship__chip {
  position: absolute;
  top: calc(143 * var(--fd-u));
  right: calc(50% + 1 * var(--fd-u));
  width: calc(32 * var(--fd-u));
  height: calc(69 * var(--fd-u));
  background: var(--blue);
}

/*
 * Coluna alinhada à direita, parando 62 antes da foto. O intervalo entre o
 * título e o primeiro parágrafo é muito maior que os outros (158 contra 17),
 * daí a margem própria no h2.
 */
.fd-scholarship__panel {
  position: absolute;
  top: calc(126 * var(--fd-u));
  right: calc(50% + 62 * var(--fd-u));
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: calc(17 * var(--fd-u));
  width: calc(410 * var(--fd-u));
  color: var(--white);
  text-align: right;
}

.fd-scholarship h2 {
  margin: 0 0 calc(141 * var(--fd-u));
  color: var(--white);
  font-family: var(--display);
  font-size: calc(55 * var(--fd-u));
  font-weight: 400;
  line-height: 1.03;
  text-transform: uppercase;
}

/*
 * Os parágrafos têm caixa própria, mais estreita que a do título: no documento
 * o título ocupa 401 e nenhuma linha de texto passa de 318.
 */
.fd-scholarship__panel p {
  max-width: calc(340 * var(--fd-u));
  margin: 0;
  font-size: calc(15 * var(--fd-u));
  line-height: 1.21;
}

.fd-scholarship__cta {
  align-self: flex-end;
  min-height: calc(49 * var(--fd-u));
  gap: calc(12 * var(--fd-u));
  padding: calc(16 * var(--fd-u)) calc(17 * var(--fd-u)) calc(16 * var(--fd-u)) calc(22 * var(--fd-u));
  color: var(--black);
  font-size: calc(15 * var(--fd-u));
  white-space: nowrap;
}

.fd-scholarship__cta .cta-icon {
  width: calc(20 * var(--fd-u));
  height: calc(20 * var(--fd-u));
  flex: 0 0 calc(20 * var(--fd-u));
}

/*
 * Marca do curso em pontos e treliça, cortada pela borda esquerda (568:6355).
 * Mesma lógica do bloco vermelho: 240 de 1800 no recorte, ou 13,33 % da seção,
 * com teto no valor de 1920 vezes 1,12. A medição anterior usava só os pixels
 * azuis e perdia as áreas brancas do desenho — daí os 250 em vez de 256.
 */
.fd-scholarship__fd {
  position: absolute;
  bottom: 0;
  left: 0;
  width: min(13.33%, calc(287 * var(--fd-u)));
  max-width: none;
  height: auto;
  aspect-ratio: 240 / 165;
}

/* Filete verde no rodapé, do terço direito até a borda. */
.fd-scholarship__rule {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 66.25%;
  height: calc(13 * var(--fd-u));
  background: var(--green);
}

/* --- Sobre Itamara (622:40966) ------------------------------------------- */
.fd-teacher {
  position: relative;
  overflow: hidden;
  padding-block: calc(120 * var(--fd-u));
  background: var(--gray-100);
}

/*
 * Painel de listras diagonais colado na borda esquerda. A largura não é fixa:
 * no documento a borda direita do painel cai 294 dentro da foto, e a foto
 * começa depois da margem do contêiner mais os 24 de padding. Daí a conta —
 * com largura fixa o painel parava na borda da foto em telas largas e sumia.
 */
.fd-teacher__stripes {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: calc((100% - min(100%, var(--fd-max))) / 2 + 318 * var(--fd-u));
  /*
   * No documento são fios pretos de 1 px na horizontal, a cada 10. O gradiente
   * conta na perpendicular, daí o fator sen(45°): 0,71 de fio e 7,07 de passo.
   * Antes eram 4 px de fio a cada 12 — quatro vezes mais grossos.
   */
  background-image: repeating-linear-gradient(
    -45deg,
    var(--black) 0 calc(0.71 * var(--fd-u)),
    transparent calc(0.71 * var(--fd-u)) calc(7.07 * var(--fd-u))
  );
}

.fd-teacher__inner {
  position: relative;
  display: grid;
  grid-template-columns: calc(590 * var(--fd-u)) minmax(0, 1fr);
  gap: calc(59 * var(--fd-u));
  align-items: stretch;
  width: min(100%, var(--fd-max));
  margin: 0 auto;
  padding-inline: calc(24 * var(--fd-u));
}

/*
 * O bloco de bolinhas passa da borda esquerda da foto, então quem recorta a
 * imagem é `.fd-teacher__frame` e não mais a `<figure>`.
 */
.fd-teacher__photo {
  position: relative;
  height: calc(700 * var(--fd-u));
  display: flex;
  align-items: flex-end;
  justify-content: flex-end;
  margin: 0;
  padding: calc(24 * var(--fd-u));
}

.fd-teacher__frame {
  position: absolute;
  inset: 0;
  overflow: hidden;
  background: #575757;
}

.fd-teacher__frame img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: calc(100% + 1px);
  object-fit: cover;
}

.fd-teacher__photo figcaption {
  position: relative;
  color: var(--white);
  font-family: var(--display);
  font-size: calc(81 * var(--fd-u));
  font-weight: 400;
  line-height: 0.87;
  text-align: right;
  text-transform: uppercase;
}

/*
 * Bolinhas pretas sobre azul, no canto inferior esquerdo: 88 por cima da foto
 * e 59 para fora dela. A malha é escalonada — no documento o passo é 63 e o
 * diâmetro 37, e o tile leva o círculo do centro mais os quatro dos cantos
 * para fechar sem emenda.
 */
.fd-teacher__dots {
  position: absolute;
  bottom: calc(41 * var(--fd-u));
  left: calc(-59 * var(--fd-u));
  width: calc(149 * var(--fd-u));
  height: calc(294 * var(--fd-u));
  background-image: url("./assets/pontos-azul.svg");
  background-size: calc(59.3 * var(--fd-u)) calc(59.3 * var(--fd-u));
}

/*
 * Os quatro intervalos verticais do documento são todos diferentes (48 até o
 * título, 64 até o texto, 48 até a citação, 91 até os selos), então cada bloco
 * carrega o seu — `space-between` distribuía a sobra por igual e nenhum caía
 * onde devia.
 */
.fd-teacher__col {
  display: flex;
  flex-direction: column;
  min-height: calc(700 * var(--fd-u));
  min-width: 0;
  padding-top: calc(48 * var(--fd-u));
}

.fd-teacher__copy {
  display: flex;
  flex-direction: column;
  gap: calc(64 * var(--fd-u));
}

/*
 * Preto, não azul, e com a caixa travada em 310: sem isso a coluna de 519
 * cabe "QUEM TE GUIA NESSA" numa linha só e a quebra sai diferente do
 * documento, que separa "QUEM TE GUIA" de "NESSA JORNADA".
 */
.fd-teacher h2 {
  max-width: calc(310 * var(--fd-u));
  margin: 0;
  color: var(--black);
  font-family: var(--display);
  font-size: calc(48 * var(--fd-u));
  font-weight: 400;
  line-height: 1;
  text-transform: uppercase;
}

.fd-teacher__text {
  display: flex;
  flex-direction: column;
  gap: calc(24 * var(--fd-u));
}

/* No documento a coluna de texto é mais estreita que a fila de selos. */
.fd-teacher__text {
  max-width: calc(394 * var(--fd-u));
  gap: calc(17 * var(--fd-u));
}

.fd-teacher__text p {
  margin: 0;
  color: var(--ink);
  font-size: calc(13 * var(--fd-u));
  line-height: 1.36;
}

.fd-teacher__quote {
  display: flex;
  align-items: center;
  max-width: calc(394 * var(--fd-u));
  margin: calc(48 * var(--fd-u)) 0 0;
  padding-inline: calc(16 * var(--fd-u));
  color: var(--black);
  font-size: calc(18 * var(--fd-u));
  font-weight: 500;
  /* Entrelinha do documento: 21 de passo para um corpo de 17,6. */
  line-height: 1.13;
  border-left: calc(5 * var(--fd-u)) solid var(--green);
}

.fd-teacher__stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: calc(26 * var(--fd-u));
  margin: calc(91 * var(--fd-u)) 0 0;
  padding: 0;
  list-style: none;
}

.fd-teacher__stats li {
  min-height: calc(97 * var(--fd-u));
  display: flex;
  flex-direction: column;
  gap: calc(6 * var(--fd-u));
  padding: calc(14 * var(--fd-u)) calc(12 * var(--fd-u));
  background: var(--white);
}

.fd-teacher__stats strong {
  color: var(--blue);
  font-size: calc(33 * var(--fd-u));
  font-weight: 700;
  line-height: 1;
}

.fd-teacher__stats span {
  color: var(--ink);
  font-size: calc(15 * var(--fd-u));
  line-height: 1.25;
}

/* --- FAQ (568:8215) ------------------------------------------------------ */
.fd-page .faq {
  width: 100%;
  min-height: 0;
  padding-block: calc(120 * var(--fd-u));
  padding-inline: max(calc(96 * var(--fd-u)), calc((100% - var(--fd-max)) / 2));
  background: var(--white);
}

.fd-page .faq > .content-wide {
  width: 100%;
  max-width: none;
}

.fd-page .faq-heading {
  height: calc(64 * var(--fd-u));
  padding-bottom: 0;
  box-shadow: inset 0 -1px var(--gray-400);
}

.fd-page .faq-heading h2 {
  font-size: calc(40 * var(--fd-u));
}

.fd-page .faq-heading > span {
  width: calc(44 * var(--fd-u));
  height: calc(44 * var(--fd-u));
}

/*
 * O ícone é 20x20 dentro da caixa preta de 44 (frame 568:8219). O SVG tem
 * viewBox de 24 com o desenho ocupando 20, então renderizar a 24 devolve os
 * 20px de desenho e os 12px de respiro de cada lado. Igualar a imagem à caixa
 * estica o ícone até as bordas.
 */
.fd-page .faq-heading > span img {
  width: calc(24 * var(--fd-u));
  height: calc(24 * var(--fd-u));
}

.fd-page .faq-layout {
  grid-template-columns: minmax(0, 1fr) calc(368 * var(--fd-u));
  gap: calc(48 * var(--fd-u));
  margin-top: calc(71 * var(--fd-u));
}

.fd-page .questions summary {
  height: auto;
  min-height: calc(70 * var(--fd-u));
  gap: calc(24 * var(--fd-u));
  padding: calc(20 * var(--fd-u)) 0;
  font-size: calc(20 * var(--fd-u));
}

.fd-page .questions summary::after {
  width: calc(20 * var(--fd-u));
  height: calc(20 * var(--fd-u));
  flex-basis: auto;
  background-image: url("./assets/icon-chevron.svg");
  background-size: contain;
}

.fd-page .questions details > p {
  max-width: none;
  padding: 0 calc(40 * var(--fd-u)) calc(20 * var(--fd-u)) 0;
  font-size: calc(14 * var(--fd-u));
  line-height: 1.6;
}

.fd-page .support-card {
  min-height: calc(482 * var(--fd-u));
  justify-content: space-between;
  gap: calc(32 * var(--fd-u));
  padding: calc(32 * var(--fd-u));
}

.fd-page .support-icon,
.fd-page .support-icon img {
  width: calc(44 * var(--fd-u));
  height: calc(44 * var(--fd-u));
  background: none;
}

.fd-page .support-body {
  gap: calc(32 * var(--fd-u));
}

.fd-page .support-copy {
  gap: calc(12 * var(--fd-u));
}

.fd-page .support-card h3 {
  font-size: calc(26 * var(--fd-u));
  font-weight: 500;
  line-height: 1.3;
}

.fd-page .support-card p {
  color: var(--gray-600);
  font-size: calc(16 * var(--fd-u));
}

/* --- Footer (568:8252) --------------------------------------------------- */
.fd-footer {
  padding: calc(60 * var(--fd-u)) calc(48 * var(--fd-u)) calc(32 * var(--fd-u));
  background: var(--black);
}

.fd-footer__inner {
  display: flex;
  flex-direction: column;
  gap: calc(38 * var(--fd-u));
  width: 100%;
  max-width: var(--fd-max-wide);
  margin-inline: auto;
}

/* Bloco institucional: marca + tagline à esquerda, quatro colunas à direita. */
.fd-footer__top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: calc(28 * var(--fd-u));
  padding-bottom: calc(24 * var(--fd-u));
  border-bottom: 1px solid var(--gray-700);
}

.fd-footer__brand {
  width: calc(497 * var(--fd-u));
}

.fd-footer__logo {
  width: calc(140.644 * var(--fd-u));
  height: calc(25.971 * var(--fd-u));
}

.fd-footer__brand p {
  width: min(100%, calc(300 * var(--fd-u)));
  margin: calc(25 * var(--fd-u)) 0 0;
  color: var(--gray-200);
  font-size: calc(14 * var(--fd-u));
  line-height: 1.6;
}

.fd-footer__nav {
  display: flex;
  gap: calc(28 * var(--fd-u));
}

/*
 * Colunas de links do rodapé, ocultas em 16/09/2026 a pedido: todos os nove
 * links ainda apontam para `#`, porque as páginas não existem. A regra é
 * necessária porque o `display: flex` acima venceria o `hidden` do HTML.
 * Para trazer de volta: tirar o `hidden` do `<nav>` nas páginas.
 */
.fd-footer__nav[hidden] {
  display: none;
}

.fd-footer__col {
  width: calc(156.5 * var(--fd-u));
}

.fd-footer__col h2 {
  margin: 0;
  color: var(--gray-100);
  font-family: var(--sans);
  font-size: calc(14 * var(--fd-u));
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0;
  text-transform: uppercase;
}

.fd-footer__col ul {
  margin: calc(21 * var(--fd-u)) 0 0;
  padding: 0;
  list-style: none;
}

.fd-footer__col li + li {
  margin-top: calc(10 * var(--fd-u));
}

.fd-footer__col a {
  color: var(--gray-200);
  font-size: calc(14 * var(--fd-u));
  line-height: 1.6;
  text-decoration: none;
  transition: color 160ms ease;
}

.fd-footer__col a:hover {
  color: var(--white);
}

.fd-footer__wordmark {
  width: 100%;
  height: auto;
}

.fd-footer__row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: calc(32 * var(--fd-u));
  padding-top: calc(24 * var(--fd-u));
  border-top: 1px solid var(--gray-700);
}

.fd-footer__row p {
  color: var(--white);
  font-size: calc(14 * var(--fd-u));
  line-height: 1.5;
}

/*
 * No meio da linha de baixo ficava a frase "Escola de Design e Designer:
 * fundamentos…". Em 16/09/2026 ela deu lugar aos dois links de privacidade,
 * que antes vinham espremidos embaixo do © à esquerda.
 */
.fd-footer__policies {
  width: calc(367 * var(--fd-u));
  text-align: center;
}

.fd-footer__policies a,
.fd-footer__policies .lt-consent-open {
  color: var(--white);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.fd-footer__social {
  display: flex;
  justify-content: flex-end;
  gap: calc(8 * var(--fd-u));
  width: calc(180 * var(--fd-u));
}

.fd-footer__social a,
.fd-footer__social img {
  width: calc(40 * var(--fd-u));
  height: calc(40 * var(--fd-u));
  display: block;
}

.fd-footer__social a {
  transition: transform 160ms ease, filter 160ms ease;
}

.fd-footer__social a:hover {
  filter: brightness(1.6);
  transform: translateY(-2px);
}

/* ==========================================================================
   Responsivo

   Acima de 980 px a página é uma escala contínua: `--fd-u` traduz cada pixel
   da prancheta de 1440 do Figma. Abaixo disso o layout empilha e a unidade
   volta a 1 px, com tamanhos de display definidos em vw.
   ========================================================================== */

@media (max-width: 1199px) {

  .fd-pricecard {
    grid-column: 1 / -1;
  }
}

@media (max-width: 980px) {
  :root {
    --fd-u: 0.92px;
  }

  .fd-works {
    padding-block: 80px;
  }

  .fd-works__head {
    grid-template-columns: minmax(0, 1fr);
    padding-inline: 48px;
  }

  .fd-works__head > div:first-child {
    grid-column: 1;
  }

  .fd-works__nav {
    grid-column: 1;
    justify-content: flex-start;
  }

  .fd-works .fd-carousel {
    padding-inline: 48px;
    scroll-padding-inline: 48px;
  }

  .fd-work {
    flex-basis: 292px;
  }

  /*
   * No empilhado a leitura é: foto -> título -> texto -> provas -> lista de
   * espera. O bloco da lista vem depois do título, não antes dele, e sai de
   * cima da foto para um fundo sólido.
   */
  /*
   * Empilhado, a foto é uma faixa no topo. A altura passa a ser medida em
   * `dvh`: em vw ela virava um filete num celular alto, e o bloco branco
   * engolia a imagem. O `clamp` segura o mínimo e o máximo.
   */
  .fd-hero {
    --fd-hero-band: clamp(200px, 40dvh, 460px);
    min-height: 0;
    padding-top: var(--fd-hero-band);
  }

  /* Empilhado, a foto ocupa só a faixa do topo — não o hero inteiro. */
  /* No mobile a foto vira faixa no topo (o desktop ancora ela embaixo). */
  .fd-hero__bg {
    top: 0;
    bottom: auto;
    height: var(--fd-hero-band);
    object-position: 50% 62%;
  }

  .fd-hero__row {
    flex-direction: column;
    align-items: stretch;
  }

  .fd-hero__panel {
    order: 1;
    width: 100%;
    gap: 28px;
    padding: 32px 48px;
  }

  /* 8.1vw = corpo em que a linha mais longa ainda cabe sem quebrar em 393 px. */
  .fd-hero h1 {
    font-size: clamp(27px, 7.95vw, 62px);
  }

  /* Empilhado o bloco vira linha: selo, texto e botão lado a lado. */
  .fd-hero__aside {
    order: 2;
    align-items: stretch;
    padding: 28px 48px 32px;
    background: var(--gray-100);
  }

  .fd-hero__waitlist {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: 16px;
    width: 100%;
  }

  .fd-hero__waitlist > * {
    max-width: none;
  }

  .fd-hero__seal {
    width: 64px;
    height: 64px;
  }

  .fd-hero__waitlist p {
    flex: 1;
    min-width: 190px;
    font-size: 15px;
  }

  .fd-hero__aside .fd-btn {
    flex: 1 0 100%;
    justify-content: space-between;
  }

  .fd-hero__cols {
    flex-direction: column;
    gap: 18px;
    margin-top: 0;
  }

  .fd-hero__cols p {
    font-size: 15px;
  }

  /* Sem o chip, as provas ficam soltas demais empilhadas: viram 2 por linha. */
  .fd-proof {
    gap: 18px 24px;
  }

  .fd-proof li {
    flex: 0 0 calc(50% - 12px);
    min-height: 0;
  }

  .fd-proof span {
    font-size: 13px;
  }

  .fd-tags__list li {
    font-size: 12px;
  }

  .fd-thesis {
    padding-block: 80px;
    padding-inline: 48px;
  }

  .fd-thesis__inner {
    grid-template-columns: minmax(0, 1fr);
    gap: 32px;
  }

  .fd-thesis__panel {
    padding: 40px;
  }

  .fd-thesis__copy {
    width: 100%;
    max-width: none;
  }

  .fd-thesis h2 {
    font-size: clamp(30px, 8.5vw, 48px);
  }

  .fd-thesis__copy p {
    font-size: 15px;
  }

  .fd-thesis__statement {
    font-size: 11vw;
  }

  /* Empilhado: a seção volta a ter altura de conteúdo e o parágrafo ao fluxo. */
  .fd-method {
    height: auto;
    padding-bottom: 16px;
  }

  .fd-method h2 {
    margin-left: 0;
    font-size: 12vw;
  }

  .fd-method__head {
    grid-template-columns: minmax(0, 1fr);
    padding-top: 64px;
  }

  /* Empilhado, o parágrafo desce para a linha de baixo do título. */
  .fd-method__lead {
    grid-column: 1;
    grid-row: 2;
    width: auto;
    max-width: none;
    margin-top: 24px;
  }

  .fd-method__cards {
    position: static;
    height: auto;
    flex-wrap: wrap;
    padding: 48px;
  }

  .fd-method__cards li {
    flex: 1 1 calc(50% - 8px);
    height: auto;
    min-height: 0;
  }

  .fd-plans__inner {
    padding-block: 80px;
    padding-inline: 48px;
  }

  .fd-plans h2,
  .fd-free h2 {
    max-width: none;
    font-size: clamp(30px, 8vw, 48px);
  }

  .fd-plan {
    min-height: 0;
  }

  .fd-plan__top {
    min-height: 150px;
  }

  .fd-plans__grid,
  .fd-plans__foot {
    grid-template-columns: minmax(0, 1fr);
  }

  /*
   * Em uma coluna, `grid-column: 3` criaria duas colunas implícitas e espremeria
   * o botão. A faixa desce para a linha de baixo, na largura toda.
   */
  .fd-plans__chevrons {
    grid-column: auto;
    max-width: none;
  }

  /*
   * Empilhado, o texto cobre a metade de baixo do vídeo. A altura vem do JS
   * (`--fd-free-altura`, em "4.2 VÍDEO DA AULA GRATUITA"): com ela o vídeo é
   * dimensionado pela altura e o queixo da professora termina acima do título.
   * Sem JS vale a altura do conteúdo, como antes.
   */
  .fd-free {
    min-height: var(--fd-free-altura, 0px);
    padding: 64px 48px;
  }

  /*
   * Aqui a caixa do vídeo não cresce os 18 % do desktop: isso aumentaria o
   * rosto e o empurraria para trás do título. A legenda gravada (87 % a 96 % da
   * altura) fica sob o texto, e quem a apaga é o véu: começa a escurecer em 62 %
   * da altura, logo abaixo do queixo — que no vídeo novo desce até 59 % —, e
   * chega ao preto em 85 %, antes do topo da legenda. O texto ganha contraste.
   *
   * `40%` no eixo x: entre 621 e 980 o rótulo fica na altura da testa, à
   * esquerda, e com o rosto centralizado os dois se encostavam.
   */
  .fd-free__bg {
    height: calc(100% + 1px);
    object-position: 40% 0%;
  }

  .fd-free::before {
    background: linear-gradient(to bottom, rgba(0, 0, 0, 0.6) 62%, rgba(0, 0, 0, 0.92) 78%, #000 85%);
  }

  .fd-free__row {
    flex-direction: column;
    align-items: flex-start;
    gap: 32px;
  }

  /* Bolsas deixa de ser composição absoluta e vira pilha. */
  .fd-scholarship {
    --fd-bolsas-foto: 360px;
    /* As duas marcas dividem a altura: assim elas não têm como divergir. */
    --fd-bolsas-marca: 68px;
    height: auto;
    display: flex;
    flex-direction: column;
  }

  .fd-scholarship__photo,
  .fd-scholarship__panel,
  .fd-scholarship__rule {
    position: relative;
    top: auto;
    right: auto;
    bottom: auto;
    left: auto;
    width: 100%;
  }

  /*
   * As duas marcas encostam nos cantos de baixo da foto: a do Leiautar à
   * esquerda, a do curso à direita.
   *
   * Continuam absolutas, ancoradas no fim da foto — `translate: 0 -100%` sobe
   * cada uma pela própria altura, então nenhuma medida precisa ser repetida
   * aqui. A altura da foto mora em `--fd-bolsas-foto` para os dois pontos de
   * quebra terem um número só.
   *
   * O `z-index` é necessário porque a marca vermelha vem antes da foto na
   * marcação, e sem ele a foto, que também é posicionada, pintaria por cima.
   */
  .fd-scholarship__brand,
  .fd-scholarship__fd {
    position: absolute;
    z-index: 1;
    top: var(--fd-bolsas-foto);
    bottom: auto;
    translate: 0 -100%;
  }

  .fd-scholarship__brand {
    right: auto;
    left: 0;
    width: 168px;
    aspect-ratio: auto;
    height: var(--fd-bolsas-marca);
  }

  .fd-scholarship__brand img {
    width: 148px;
    height: 59px;
    transform: none;
  }

  /* Altura travada na da marca vermelha; a largura sai da proporção do desenho. */
  .fd-scholarship__fd {
    right: 0;
    left: auto;
    width: auto;
    height: var(--fd-bolsas-marca);
    aspect-ratio: 240 / 165;
    margin-left: 0;
  }

  .fd-scholarship__photo {
    height: var(--fd-bolsas-foto);
  }

  /* O quadradinho azul é encaixe de borda: sem as duas colunas, não há onde. */
  .fd-scholarship__chip {
    display: none;
  }

  .fd-scholarship__panel {
    align-items: flex-start;
    gap: 20px;
    padding: 40px 48px;
    text-align: left;
  }

  .fd-scholarship h2 {
    margin-bottom: 0;
    font-size: 40px;
  }

  .fd-scholarship__rule {
    height: 10px;
  }

  .fd-teacher__inner {
    grid-template-columns: minmax(0, 1fr);
    gap: 40px;
    padding-inline: 48px;
  }

  .fd-teacher__stripes {
    width: 120px;
  }

  .fd-teacher__photo {
    height: 520px;
  }

  /*
   * Os intervalos do desktop são de propósito diferentes entre si (48 até o
   * título, 64 até o texto, 48 até a citação, 91 até os selos) — ali eles
   * desenham a coluna. Empilhado não desenham nada: viram buraco. Aqui vale um
   * intervalo só, do `gap`, e as margens próprias de cada bloco somem.
   */
  .fd-teacher__col {
    min-height: 0;
    gap: 28px;
    padding-top: 0;
  }

  .fd-teacher__copy {
    gap: 20px;
  }

  .fd-teacher__quote,
  .fd-teacher__stats {
    margin-top: 0;
  }

  /* Preço empilhado: cartão primeiro, depois a lista e o depoimento. */
  .fd-price__inner {
    grid-template-columns: minmax(0, 1fr);
    gap: 40px;
    padding-inline: 48px;
  }

  .fd-pricecard {
    order: 1;
  }

  .fd-price__list {
    order: 2;
  }

  .fd-price__quote {
    order: 3;
    text-align: left;
  }

  .fd-price__quote figcaption {
    justify-content: flex-start;
  }

  .fd-price__display {
    height: auto;
    overflow: visible;
  }

  /*
   * Com `height: auto` a caixa acompanha a fita, então a margem negativa que
   * segurava a altura não tem mais o que corrigir.
   */
  .fd-price__fita {
    margin-top: 0;
  }

  .fd-bonus {
    padding-inline: 48px;
  }

  .fd-bonus__head,
  .fd-bonus__foot {
    grid-template-columns: minmax(0, 1fr);
    gap: 24px;
  }

  .fd-bonus h2,
  .fd-bonus__lead,
  .fd-bonus__cta,
  .fd-bonus__texture {
    grid-column: 1;
    max-width: none;
  }

  .fd-bonus__cta {
    width: fit-content;
  }

  .fd-syllabus__grid,
  .fd-bonus__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .fd-syllabus {
    padding-block: 80px;
    padding-inline: 48px;
  }

  .fd-sechead--row {
    flex-direction: column;
    align-items: flex-start;
    gap: 24px;
  }

  .fd-page .faq {
    padding-block: 80px;
    padding-inline: 48px;
  }

  .fd-page .faq-layout {
    grid-template-columns: minmax(0, 1fr);
    margin-top: 48px;
  }

  .fd-page .support-card {
    min-height: 0;
  }

  .fd-footer__row {
    flex-wrap: wrap;
  }

  .fd-footer__policies {
    order: 3;
    width: 100%;
    text-align: left;
  }

  .fd-footer__top {
    flex-direction: column;
    gap: 40px;
  }

  .fd-footer__brand,
  .fd-footer__col {
    width: 100%;
  }

  .fd-footer__nav {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 32px 24px;
  }
}

@media (max-width: 620px) {
  /* Header numa linha só: o rótulo "Aluno" vira ícone. */
  .fd-topbar {
    min-height: 56px;
  }

  .fd-topbar__by {
    padding: 0 13px;
  }

  .fd-topbar__by img {
    width: 72px;
    height: 12px;
  }

  .fd-topbar__course {
    flex: 0 0 auto;
    width: auto;
    padding: 0 12px;
  }

  .fd-topbar__course img {
    width: 104px;
    height: 29px;
  }

  .fd-topbar__actions {
    flex: 1;
    gap: 6px;
    padding: 0 12px;
  }

  .fd-tag {
    padding: 9px 11px;
    font-size: 11px;
  }

  .fd-tag--square {
    padding: 9px;
  }

  .fd-hero,
  /* Em telas bem estreitas a faixa da foto ganha um pouco mais de altura. */
  .fd-hero {
    --fd-hero-band: clamp(220px, 44dvh, 460px);
  }

  .fd-hero__panel {
    padding: 28px 16px;
  }

  .fd-hero__aside {
    padding: 24px 16px 28px;
  }

  .fd-thesis {
    padding-block: 60px;
    padding-inline: 16px;
  }

  .fd-thesis__panel {
    gap: 24px;
    padding: 28px 20px;
  }

  .fd-method__head {
    padding: 48px 16px 40px;
  }

  .fd-method h2 {
    font-size: 13.6vw;
  }

  .fd-method__cards {
    padding: 24px 16px;
  }

  .fd-method__cards li {
    flex: 1 1 100%;
  }

  .fd-plans__inner {
    padding-block: 64px;
    padding-inline: 16px;
  }

  .fd-plans__grid,
  .fd-plans__foot {
    margin-top: 36px;
  }

  .fd-free {
    padding: 48px 16px;
  }

  .fd-free__inner {
    gap: 60px;
  }

  .fd-btn {
    width: 100%;
    justify-content: space-between;
  }

  .fd-wrap {
    padding-inline: 16px;
  }

  .fd-guests {
    padding: 64px 0;
  }

  .fd-sechead {
    margin-bottom: 36px;
  }

  /*
   * Só a seção recebe o respiro — no frame 656:42366 o conteúdo começa a 60px
   * do topo e a 16px das laterais. `.fd-syllabus__grid` e `.fd-bonus__grid`
   * estavam presos nesta lista por engano e herdavam o mesmo padding: a lista
   * de módulos ganhava 16px de cada lado dentro de uma seção que já tinha os
   * seus, e os cards saíam com 311px em vez dos 343 da prancheta.
   */
  .fd-syllabus {
    padding-block: 60px;
    padding-inline: 16px;
  }

  .fd-works {
    padding-block: 60px;
  }

  .fd-works__head,
  .fd-works .fd-carousel {
    padding-inline: 16px;
  }

  .fd-works .fd-carousel {
    scroll-padding-inline: 16px;
  }

  .fd-work {
    flex-basis: 76vw;
  }

  .fd-teacher__stats {
    gap: 28px;
  }

  .fd-page .faq {
    padding-block: 60px;
    padding-inline: 16px;
  }

  .fd-page .faq-heading h2 {
    font-size: 30px;
  }

  .fd-footer {
    padding: 32px 16px;
  }

  .fd-footer__row {
    flex-direction: column;
    align-items: flex-start;
    gap: 20px;
  }

  .fd-footer__social {
    width: auto;
  }
}

@media (max-width: 620px) {
  .fd-bonus {
    padding-inline: 24px;
  }

  .fd-bonus__grid {
    grid-template-columns: minmax(0, 1fr);
  }

  .fd-scholarship__panel,
  .fd-teacher__inner,
  .fd-price__inner {
    padding-inline: 24px;
  }

  .fd-scholarship__panel {
    padding-block: 32px;
  }

  .fd-teacher__stats {
    gap: 12px;
  }

  .fd-footer__nav {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ==========================================================================
   Seção 1 no mobile — prancheta [MOBILE] 649:41997, 375 de largura
   ========================================================================== */
@media (max-width: 620px) {
  /* Cabeçalho: marca empilhada, sem o chip da lista de espera, botão de 28. */
  .fd-topbar {
    min-height: 52px;
  }

  .fd-topbar__by {
    padding: 8px 21px;
  }

  .fd-topbar__by .fd-topbar__mark-wide {
    display: none;
  }

  .fd-topbar__by .fd-topbar__mark-tall {
    display: block;
    width: 30.5px;
    height: 24px;
  }

  .fd-topbar__course {
    padding: 0 12px;
  }

  .fd-topbar__course img {
    width: 100.8px;
    height: 28px;
  }

  .fd-topbar__actions {
    padding: 12px;
  }

  .fd-tag--gray {
    display: none;
  }

  .fd-tag--square {
    width: 28px;
    height: 28px;
    padding: 8px;
  }

  .fd-tag--square img {
    width: 12px;
    height: 12px;
  }

  /* Faixa de temas: 36 de altura, no corpo do mobile. */
  .fd-tags {
    height: 36px;
  }

  .fd-tags__list li {
    /* vão em `margin` pelo mesmo motivo do desktop: ver o keyframe fd-marquee */
    margin-right: 12px;
    gap: 4px;
    font-size: 8px;
  }

  /* Faixa da foto na proporção da prancheta: 248 numa tela de 852. */
  .fd-hero {
    --fd-hero-band: clamp(190px, 29dvh, 340px);
  }

  .fd-hero__panel {
    gap: 24px;
    padding: 16px;
  }

  /* No mobile o título é uma frase corrida; a quebra fixa do desktop sai. */
  .fd-hero h1 {
    font-size: 36px;
  }

  .fd-hero h1 br {
    display: none;
  }

  .fd-hero__cols {
    flex-direction: column;
    gap: 8px;
    margin-top: calc(14px - 24px);
  }

  .fd-hero__cols p {
    font-size: 12px;
  }

  /* As provas viram quatro cartões: ícone em cima, rótulo embaixo. */
  .fd-proof {
    flex-wrap: nowrap;
    gap: 6px;
  }

  .fd-proof li {
    flex: 1 1 0;
    min-width: 0;
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
    padding: 8px;
    background: var(--gray-100);
  }

  .fd-proof img {
    width: 20px;
    height: 20px;
  }

  .fd-proof span {
    font-size: 10px;
    line-height: 1.2;
  }

  /* Lista de espera: sem selo, texto centralizado, botão de largura cheia. */
  .fd-hero__aside {
    padding: 16px;
  }

  .fd-hero__waitlist {
    flex-direction: column;
    gap: 18px;
  }

  .fd-hero__seal {
    display: none;
  }

  .fd-hero__waitlist p {
    flex: none;
    min-width: 0;
    width: 100%;
    color: var(--gray-600);
    font-size: 10px;
    text-align: center;
  }

  .fd-hero__waitlist .fd-btn {
    width: 100%;
    justify-content: space-between;
    padding: 12px 12px 12px 20px;
    font-size: 14px;
  }
}

/* ==========================================================================
   Seções 2 e 3 no mobile — prancheta [MOBILE] 649:42206 e 649:42222
   ========================================================================== */
@media (max-width: 620px) {
  /* --- 2. Tese: painel e frase empilhados, cada um sangrando a tela --- */
  .fd-thesis {
    display: block;
    padding: 0;
  }

  .fd-thesis__inner {
    grid-template-columns: minmax(0, 1fr);
    gap: 0;
  }

  .fd-thesis__panel {
    gap: 32px;
    padding: 60px 16px;
  }

  .fd-thesis__copy {
    gap: 18px;
  }

  .fd-thesis h2 {
    font-size: 32px;
  }

  .fd-thesis__copy p {
    font-size: 14px;
  }

  /*
   * 17,3vw = os 65px da prancheta em 375. Abaixo disso o corpo acompanha a
   * tela: em 320, “FUNDAMENTO” a 65px passava da borda e criava rolagem.
   */
  .fd-thesis__statement {
    padding-left: 1px;
    font-size: min(65px, 17.3vw);
    line-height: 0.88;
  }

  /* Todos os chips na medida da prancheta mobile: ícone 24 e rótulo 10. */
  .fd-label img {
    width: 24px;
    height: 24px;
  }

  .fd-label span {
    padding: 0 10px;
    font-size: 10px;
  }

  /* --- 3. Troque insegurança: título em três linhas, cartões empilhados --- */
  .fd-method {
    height: auto;
  }

  .fd-method__head {
    grid-template-columns: minmax(0, 1fr);
    padding: 60px 16px 0;
  }

  .fd-method h2 {
    grid-column: 1;
    grid-row: 1;
    margin-left: 0;
    font-size: 65px;
    line-height: 0.9;
  }

  .fd-method h2 span {
    display: inline;
    width: auto;
  }

  .fd-method__lead {
    grid-column: 1;
    grid-row: 2;
    max-width: 337px;
    margin-top: 14px;
    font-size: 14px;
  }

  /*
   * Os cartões entram no fluxo mas seguem `relative`: a faixa de losangos
   * continua absoluta no rodapé da seção e, sendo posicionada, pintaria por
   * cima de conteúdo estático. Na prancheta ela fica atrás dos cartões.
   */
  .fd-method__cards {
    position: relative;
    z-index: 1;
    height: auto;
    flex-direction: column;
    gap: 8px;
    width: 100%;
    padding: 40px 16px 16px;
  }

  .fd-method__cards li {
    flex: 0 0 auto;
    flex-direction: row;
    align-items: center;
    height: auto;
    gap: 12px;
    padding: 12px;
    border-bottom-width: 5px;
  }

  .fd-method__cards li p {
    font-size: 14px;
    line-height: 1.4;
  }

  .fd-method__cards img {
    width: 32px;
    height: 32px;
  }

  .fd-method__band {
    height: 148px;
  }
}

/* ==========================================================================
   Seções 5 a 8 no mobile — prancheta [MOBILE] 656:42350 · 656:42366 ·
   657:42543 · 657:42601
   ========================================================================== */
@media (max-width: 620px) {
  /* --- 5. Aula gratuita: mais respiro, chip em cima e bloco embaixo --- */
  /* O JS só passa dos 540 quando o texto não cabe abaixo do queixo. */
  .fd-free {
    min-height: max(540px, var(--fd-free-altura, 0px));
    padding: 24px 16px;
  }

  /*
   * Com 24px de margem o rótulo fica acima da testa, e o rosto volta ao centro.
   * No vídeo novo o rosto está praticamente no meio do quadro (de 37 % a 63 %,
   * centro em 50,3 %), então aqui ele fica centralizado mesmo. Em 320 o rosto
   * ocupa a largura toda, e centralizar divide a sobra entre os dois lados em
   * vez de comer só de um.
   */
  .fd-free__bg {
    object-position: 50% 0%;
  }

  .fd-free__inner {
    gap: 40px;
  }

  /*
   * --- 6. Conteúdo do curso ------------------------------------------------
   * Medidas do frame mobile 656:42366, prancheta de 375. Aqui os valores são
   * px direto: a prancheta mobile tem tipografia própria, não é a de 1440
   * reduzida pelo `--fd-u`, que vale 0,92 neste breakpoint.
   *
   * Cabeçalho (343 x 124): rótulo de 24 de altura, 18 até o título, título de
   * 32, 8 até o subtítulo, subtítulo em 289 quebrando em duas linhas de 21.
   * Depois 40 até a lista, cards de 343 com 20 de intervalo, e 40 até o botão.
   */
  .fd-syllabus__grid {
    grid-template-columns: minmax(0, 1fr);
    gap: 20px;
    margin-top: 40px;
  }

  /* Os dois espaços do cabeçalho são diferentes (18 e 8), então saem do `gap`
     uniforme do flex e viram margem de cada bloco. */
  .fd-syllabus__head {
    gap: 0;
  }

  .fd-syllabus h2 {
    margin-top: 18px;
    font-size: 32px;
  }

  .fd-syllabus__sub {
    margin-top: 8px;
    max-width: 289px;
    font-size: 14px;
  }

  /*
   * O cartão novo não tem prancheta mobile própria. Como tudo nele está em `u`
   * e a proporção do documento é a mesma (título = 13 % da largura do cartão),
   * ele escala sozinho: em 375 dá título de 48 e etiqueta de 39 num cartão de
   * 343. Os corpos fixos que estavam aqui eram do cartão antigo, com foto.
   */

  /*
   * Corpos e recuos do cartão no telefone. A proporção do desktop (título =
   * 13 % da largura do cartão) daria 45 num cartão de 343, grande demais aqui;
   * e o recuo de 33/38 comia 60 dos 343, deixando pouca linha para o texto.
   *
   * Com o título em 34 a caixa de 6,3em passa a valer 214, então os nove
   * títulos continuam em duas linhas e "Masterclasses", que é uma palavra só
   * e não quebra, cabe inteiro até em 320 — sem isso o `overflow-wrap` do
   * bloco de 479 partia a palavra ao meio.
   */
  /*
   * No telefone o cartão fica mais baixo. No desktop a proporção do documento
   * (1,26) faz sentido — três por linha, o olho compara. Empilhados, dez
   * cartões altos e quase idênticos viram uma rolagem monótona.
   *
   * `aspect-ratio` em vez de altura fixa: a largura do cartão muda com a tela
   * (288 em 320, 398 em 430) e uma altura em pixel deixaria a proporção
   * passeando de 1,32 a 0,95 entre um aparelho e outro.
   *
   * O `min-height` da regra base precisa ser zerado, senão ele ganha da
   * proporção — e o conteúdo ainda faz o cartão crescer se precisar.
   */
  .fd-module {
    min-height: 0;
    aspect-ratio: 100 / 112;
  }

  .fd-module__body {
    padding: 0 20px 20px;
  }

  .fd-module__body h3 {
    font-size: 34px;
  }

  .fd-module__body p {
    font-size: 16px;
  }

  /* A etiqueta acompanha: 43 de altura ficava mais alta que o próprio título. */
  .fd-module__badge {
    height: 32px;
    margin: 16px 0 0 16px;
    font-size: 13px;
  }

  .fd-module__badge span {
    padding: 0 14px;
  }

  .fd-module__badge b {
    width: 32px;
  }

  /*
   * --- 7. Trabalhos: cabeçalho centralizado e navegação abaixo do carrossel.
   * `display: contents` dissolve o <header> para que o texto, a fita e os
   * botões virem irmãos e possam ser reordenados — sem mexer no HTML nem no
   * desktop.
   */
  .fd-works {
    display: flex;
    flex-direction: column;
  }

  .fd-works__head {
    display: contents;
  }

  .fd-works__head > div:first-child {
    order: 1;
    padding-inline: 16px;
    text-align: center;
  }

  .fd-works__track {
    order: 2;
    margin-top: 32px;
  }

  .fd-works__nav {
    order: 3;
    justify-content: center;
    margin-top: 32px;
  }

  /* --- 8. Professores convidados --- */
  .fd-guests {
    gap: 40px;
    padding: 60px 0 0;
  }

  .fd-guests__head {
    gap: 18px;
    width: 100%;
    padding-inline: 16px;
  }

  .fd-guests h2 {
    width: 100%;
    font-size: 32px;
  }

  .fd-guests__list li {
    width: 208px;
    height: 260px;
  }

  .fd-guests__cta {
    width: calc(100% - 32px);
    min-height: 56px;
    margin-inline: 16px;
    padding: 18px 18px 18px 26px;
    font-size: 16px;
  }

  .fd-guests__band {
    height: 62px;
  }
}

/* ==========================================================================
   Seções 9 e 10 no mobile — prancheta [MOBILE] 657:43011 e 659:43498
   ========================================================================== */
@media (max-width: 620px) {
  /* --- 9. Bônus: respiro de 16, cabeçalho empilhado, seis cartões --- */
  .fd-bonus {
    padding-block: 60px;
    padding-inline: 16px;
  }

  .fd-bonus__inner {
    gap: 40px;
  }

  .fd-bonus__head {
    gap: 8px;
  }

  .fd-bonus h2 {
    font-size: 32px;
  }

  .fd-bonus__lead {
    font-size: 14px;
  }

  .fd-bonus__grid {
    gap: 20px;
  }

  .fd-bonus__foot {
    gap: 16px;
  }

  .fd-bonus__cta {
    width: 100%;
    min-height: 56px;
    padding: 18px 18px 18px 26px;
    font-size: 16px;
  }

  /*
   * --- 10. Preço: a lista sobe para cima do cartão e o depoimento sai.
   * A prancheta mobile não traz o bloco da Itamara nesta seção.
   */
  .fd-price {
    padding-inline: 16px;
  }

  /*
   * `text-align: center` e a regra de `span` saíram junto com o título fixo:
   * com a fita, `width: 100%` batia nela e na fila, espremia as seis
   * repetições dentro da tela e as letras se sobrepunham. A fita precisa
   * continuar em `max-content`.
   */
  .fd-price__display {
    width: 100vw;
    margin-inline: -16px;
    font-size: 91px;
    line-height: 0.78;
  }

  .fd-price__inner {
    gap: 40px;
    padding-inline: 0;
  }

  /*
   * A lista sobe para cima do cartão e ganha, à direita, a faixa de cruzes do
   * nó 694:544 — 35 de largura pela altura toda da lista. No bloco de 343 a
   * lista ocupa 268 e a faixa os 35 finais, com 40 de folga entre as duas.
   *
   * As medidas saem em px porque a prancheta mobile tem as suas: item de 25,6
   * com 8 de intervalo dá o passo de 33,6 e os 328 de altura do bloco.
   */
  .fd-price__list {
    order: 1;
    position: relative;
    gap: 8px;
    padding-right: 75px;
  }

  .fd-price__list::after {
    content: "";
    position: absolute;
    top: 0;
    right: 0;
    width: 35px;
    height: 100%;
    background-image: url("./assets/texture-plus-preco.svg");
    background-position: center;
    background-size: 13.375px 13.375px;
  }

  .fd-price__list li {
    gap: 14px;
    min-height: 25.6px;
    font-size: 14px;
  }

  .fd-price__list img {
    width: 22px;
    height: 22px;
  }

  .fd-pricecard {
    order: 2;
  }

  .fd-price__quote {
    display: none;
  }

  .fd-pricecard__top {
    padding: 12px;
  }

  .fd-pricecard__logo {
    width: 115.2px;
    height: 32px;
  }

  .fd-pricecard__badge span:first-child {
    width: 24px;
    height: 24px;
    font-size: 10px;
  }

  .fd-pricecard__badge span:last-child {
    padding-inline: 10px;
    font-size: 10px;
  }

  .fd-pricecard__body {
    gap: 48px;
    padding: 48px 16px 24px;
  }

  .fd-pricecard__label {
    font-size: 16px;
  }

  .fd-pricecard__value {
    font-size: 64px;
  }

  .fd-pricecard__cash {
    font-size: 14px;
  }

  .fd-pricecard__action {
    width: 100%;
    gap: 16px;
  }

  .fd-pricecard__cta {
    min-height: 56px;
    padding: 18px 18px 18px 24px;
    font-size: 16px;
  }

  .fd-pricecard__flags {
    width: 154px;
    height: 14px;
  }

  .fd-pricecard__safe {
    padding: 24px;
  }
}

/* ==========================================================================
   Seções 11 a 13, FAQ e rodapé no mobile — prancheta [MOBILE]
   659:43591 · 659:43646 · 659:43766 · 649:41845
   ========================================================================== */
@media (max-width: 620px) {
  /* --- 11. Garantia --- */
  .fd-warranty {
    gap: 24px;
    padding-bottom: 60px;
  }

  .fd-warranty__seal {
    width: 200px;
    height: 328px;
  }

  .fd-warranty h2 {
    font-size: 32px;
  }

  .fd-warranty__text p {
    font-size: 14px;
  }

  /* --- 12. Bolsas: a pilha do desktop, com os corpos do mobile ----------- */
  .fd-scholarship__brand {
    width: 134px;
    height: 54px;
    aspect-ratio: auto;
  }

  .fd-scholarship__brand img {
    width: 118px;
    height: 47px;
  }

  .fd-scholarship {
    --fd-bolsas-foto: 300px;
    --fd-bolsas-marca: 54px;
  }

  .fd-scholarship__panel {
    gap: 16px;
    padding: 32px 16px;
  }

  .fd-scholarship h2 {
    font-size: 32px;
  }

  .fd-scholarship__panel p {
    font-size: 14px;
    line-height: 1.4;
  }

  .fd-scholarship__cta {
    width: 100%;
    min-height: 52px;
    padding: 16px 16px 16px 24px;
    font-size: 14px;
  }

  .fd-scholarship__cta .cta-icon {
    width: 20px;
    height: 20px;
    flex-basis: 20px;
  }

  /* --- 13. Sobre Itamara: listras só numa faixa no topo --- */
  .fd-teacher {
    padding: 16px 16px 60px;
    background: var(--gray-100);
  }

  .fd-teacher__stripes {
    width: 100%;
    height: 220px;
    bottom: auto;
  }

  .fd-teacher__inner {
    grid-template-columns: minmax(0, 1fr);
    gap: 40px;
    margin: 0;
    padding: 0;
  }

  .fd-teacher__photo {
    height: 400px;
    padding: 16px;
  }

  .fd-teacher__photo figcaption {
    font-size: 52px;
  }

  .fd-teacher__dots {
    bottom: 24px;
    left: -24px;
    width: 96px;
    height: 190px;
    background-size: 38px 38px;
  }

  .fd-teacher__col {
    min-height: 0;
    gap: 24px;
    padding-top: 0;
  }

  .fd-teacher__copy {
    gap: 16px;
  }

  .fd-teacher h2 {
    font-size: 32px;
  }

  .fd-teacher__text {
    gap: 12px;
  }

  .fd-teacher__text p {
    font-size: 14px;
  }

  .fd-teacher__quote {
    padding-inline: 12px;
    font-size: 14px;
  }

  .fd-teacher__stats {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 8px;
  }

  .fd-teacher__stats li {
    min-height: 0;
    padding: 12px 8px;
  }

  .fd-teacher__stats strong {
    font-size: 22px;
  }

  .fd-teacher__stats span {
    font-size: 13px;
  }

  /* --- Rodapé: só o wordmark, o aviso legal e as redes --- */
  .fd-footer {
    display: flex;
    align-items: flex-end;
    height: 480px;
    padding: 16px;
  }

  .fd-footer__inner {
    gap: 38px;
  }

  .fd-footer__top,
  .fd-footer__wordmark--wide {
    display: none;
  }

  .fd-footer__wordmark--tall {
    display: block;
    width: 100%;
    height: auto;
  }

  /*
   * Aqui a frase do meio era escondida, e os links de privacidade moravam
   * embaixo do ©. Desde 16/09/2026 eles são o bloco do meio, e no celular
   * ganham uma linha própria abaixo: escondê-los tiraria do telefone o acesso
   * à política e às preferências de cookies. Por isso a linha volta a quebrar
   * e a altura deixa de ser fixa.
   */
  .fd-footer__row {
    position: relative;
    flex-direction: row;
    align-items: center;
    flex-wrap: wrap;
    row-gap: 16px;
    padding-top: 24px;
    border-top: 0;
  }

  .fd-footer__policies {
    order: 3;
    width: 100%;
    text-align: left;
  }

  .fd-footer__row::before {
    content: "";
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    height: 1px;
    background: var(--gray-700);
  }

  .fd-footer__row p {
    font-size: 14px;
    line-height: 1.5;
  }

  .fd-footer__legal {
    flex: 0 0 180px;
    width: 180px;
  }

  .fd-footer__social {
    flex: 0 0 80px;
    width: 80px;
    gap: 8px;
  }

  .fd-footer__social a,
  .fd-footer__social picture,
  .fd-footer__social img {
    width: 36px;
    height: 36px;
    display: block;
  }
}

/* Telas bem estreitas: o menu ainda precisa caber numa linha só. */
@media (max-width: 400px) {
  /* O rótulo do botão é longo: sem isso ele não cabe em 320. */
  .fd-bonus__cta {
    gap: 8px;
    padding-inline: 16px;
    font-size: 12px;
  }

  /* Em duas colunas os títulos dos módulos não cabem em 120px. */
  .fd-syllabus__grid {
    grid-template-columns: minmax(0, 1fr);
  }

  .fd-module h3 {
    overflow-wrap: break-word;
  }
}

@media (prefers-reduced-motion: reduce) {
  .fd-tags__track,
  .fd-guests__rail,
  .fd-hero__seal {
    animation: none;
  }

  .fd-plan__num,
  .fd-work__media img,
  .fd-guests__list img,
  .fd-bonuscard__media img {
    transition: none;
  }

  .motion-enabled .fd-method__cards li,
  .motion-enabled .fd-module {
    transition-duration: 0s;
  }

  .fd-plan:hover .fd-plan__num,
  .fd-work:hover .fd-work__media img,
  .fd-guests__list li:hover img,
  .fd-bonuscard:hover .fd-bonuscard__media img {
    transform: none;
  }

  .fd-method__cards li:hover,
  .fd-module:hover {
    box-shadow: none;
  }

  /*
   * A seta do `.cta` já é suprimida no styles.css; a do `.fd-btn` faltava.
   * O `[src]` iguala a especificidade das regras de hover, que usam
   * `[src$="..."]` — sem ele a supressão perdia a disputa.
   */
  .fd-btn:hover img[src] {
    transform: none;
  }

  .fd-carousel {
    scroll-behavior: auto;
  }
}

/* ==========================================================================
   Modal — lista de espera
   ========================================================================== */

body.waitlist-modal-open {
  overflow: hidden;
}

.fd-waitlist-modal {
  --drawer-duration: 420ms;
  --drawer-gutter: clamp(24px, 2.5vw, 48px);
  position: fixed;
  inset: 0;
  z-index: 10000;
  display: flex;
  justify-content: flex-end;
  overflow: hidden;
  visibility: hidden;
  pointer-events: none;
  transition: visibility 0s linear var(--drawer-duration);
}

.fd-waitlist-modal.is-open {
  visibility: visible;
  pointer-events: auto;
  transition-delay: 0s;
}

.fd-waitlist-modal__backdrop {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: rgb(0 0 0 / 42%);
  opacity: 0;
  transition: opacity var(--drawer-duration) ease;
}

.fd-waitlist-modal.is-open .fd-waitlist-modal__backdrop {
  opacity: 1;
}

.fd-waitlist-modal__dialog {
  position: relative;
  width: 34%;
  max-width: 640px;
  height: 100dvh;
  min-width: 0;
  overflow: hidden;
  border: 0;
  border-radius: 0;
  color: var(--black);
  background: var(--gray-100);
  transform: translate3d(100%, 0, 0);
  transition: transform var(--drawer-duration) cubic-bezier(0.22, 1, 0.36, 1);
}

.fd-waitlist-modal.is-open .fd-waitlist-modal__dialog {
  transform: translate3d(0, 0, 0);
}

/* O fechamento permanece visível enquanto só o conteúdo interno rola. */
.fd-waitlist-modal__scroll {
  height: 100%;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 96px var(--drawer-gutter) max(32px, env(safe-area-inset-bottom));
  scroll-padding-block: 72px 24px;
}

.fd-waitlist-modal__scroll::-webkit-scrollbar {
  width: 4px;
}

.fd-waitlist-modal__scroll::-webkit-scrollbar-track {
  background: var(--gray-100);
}

.fd-waitlist-modal__scroll::-webkit-scrollbar-thumb {
  border-radius: 0;
  background: var(--gray-600);
}

.fd-waitlist-modal__close {
  position: absolute;
  top: 16px;
  right: 16px;
  z-index: 2;
  width: 44px;
  height: 44px;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: var(--black);
  transition: background-color 180ms ease;
}

.fd-waitlist-modal__close span::before,
.fd-waitlist-modal__close span::after {
  content: "";
  position: absolute;
  top: 21px;
  left: 13px;
  width: 18px;
  height: 2px;
  background: var(--red);
}

.fd-waitlist-modal__close span::before { transform: rotate(45deg); }
.fd-waitlist-modal__close span::after { transform: rotate(-45deg); }
.fd-waitlist-modal__close:hover { background: var(--gray-700); }

.fd-waitlist-modal__close:focus-visible,
.fd-waitlist-modal__privacy a:focus-visible {
  outline: 2px solid var(--red);
  outline-offset: 3px;
}

.fd-waitlist-modal__intro {
  display: grid;
  gap: 18px;
  margin-bottom: 32px;
}

.fd-waitlist-modal__eyebrow {
  color: var(--gray-600);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.12em;
  line-height: 1.4;
  text-transform: uppercase;
}

.fd-waitlist-modal__intro h2,
.fd-waitlist-modal__success h2 {
  margin: 0;
  font-family: var(--display);
  font-size: clamp(40px, 3.7vw, 60px);
  font-weight: 400;
  line-height: 0.94;
  text-transform: uppercase;
  text-wrap: balance;
}

.fd-waitlist-modal__intro p,
.fd-waitlist-modal__success p {
  margin: 0;
  max-width: 38ch;
  color: var(--gray-600);
  font-size: 14px;
  line-height: 1.5;
}

.fd-waitlist-modal__content,
.fd-waitlist-modal__field {
  min-width: 0;
}

.fd-waitlist-modal__form,
.fd-waitlist-modal__field-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 20px;
}

.fd-waitlist-modal__field {
  display: grid;
  gap: 8px;
}

.fd-waitlist-modal__field label {
  color: var(--gray-700);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.08em;
  line-height: 1.4;
  text-transform: uppercase;
}

.fd-waitlist-modal__field-control {
  position: relative;
  min-width: 0;
  border: 0;
  border-radius: 0;
  background: var(--gray-200);
  transition: background-color 180ms ease;
}

.fd-waitlist-modal__field input {
  display: block;
  width: 100%;
  min-width: 0;
  height: 56px;
  padding: 0 16px 0 52px;
  border: 0;
  border-radius: 0;
  outline: none;
  box-shadow: none;
  color: var(--black);
  background: transparent;
  font-family: var(--sans);
  font-size: 16px;
}

.fd-waitlist-modal__field input::placeholder {
  color: var(--gray-600);
  opacity: 1;
}

.fd-waitlist-modal__field-control:hover { background: color-mix(in srgb, var(--gray-200), var(--gray-400)); }
.fd-waitlist-modal__field-control:focus-within { background: var(--gray-400); }

.fd-waitlist-modal__field-icon {
  position: absolute;
  inset: 0 auto 0 16px;
  display: grid;
  width: 20px;
  place-items: center;
  color: var(--gray-700);
  pointer-events: none;
}

.fd-waitlist-modal__field-icon svg,
.fd-waitlist-modal__privacy-icon svg {
  width: 20px;
  height: 20px;
  stroke: currentColor;
  stroke-width: 1.6;
  stroke-linecap: square;
  stroke-linejoin: miter;
}

.fd-waitlist-modal__field-control:focus-within .fd-waitlist-modal__field-icon {
  color: var(--black);
}

.fd-waitlist-modal__honeypot {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(100%);
}

/* Fora do grid: o reCAPTCHA invisível não deve criar um intervalo extra. */
.fd-waitlist-modal__recaptcha {
  position: absolute;
  width: 0;
  height: 0;
  overflow: hidden;
}

.fd-waitlist-modal__recaptcha .grecaptcha-badge { visibility: hidden !important; }

.fd-waitlist-modal__error {
  margin: 0;
  padding: 12px 14px;
  border: 0;
  color: var(--red);
  background: var(--gray-200);
  font-size: 12px;
  line-height: 1.5;
}
.fd-waitlist-modal__error:empty { display: none; }

.fd-waitlist-modal__submit,
.fd-waitlist-modal__success-close {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  min-height: 56px;
  gap: 16px;
  padding: 18px 20px;
  border: 0;
  border-radius: 0;
  outline: none;
  color: var(--white);
  background: var(--gray-700);
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 700;
  line-height: 1.4;
  text-align: left;
  text-transform: uppercase;
  transition: background-color 180ms ease, color 180ms ease;
}

.fd-waitlist-modal__submit {
  color: var(--black);
  background: var(--green);
}

.fd-waitlist-modal__submit img {
  width: 18px;
  height: 18px;
  flex: 0 0 18px;
  filter: none;
  transition: transform 180ms ease;
}

.fd-waitlist-modal__submit:hover:not(:disabled),
.fd-waitlist-modal__submit:focus-visible,
.fd-waitlist-modal__success-close:hover,
.fd-waitlist-modal__success-close:focus-visible {
  color: var(--white);
  background: var(--black);
}

.fd-waitlist-modal__submit:hover:not(:disabled) img,
.fd-waitlist-modal__submit:focus-visible img {
  filter: invert(1);
}

.fd-waitlist-modal__submit:focus-visible,
.fd-waitlist-modal__success-close:focus-visible {
  text-decoration: underline;
  text-underline-offset: 4px;
}

.fd-waitlist-modal__submit:hover:not(:disabled) img {
  transform: translate(2px, -2px);
}

.fd-waitlist-modal__submit:disabled { cursor: wait; opacity: 0.6; }
.fd-waitlist-modal__meta { display: grid; gap: 16px; padding-top: 4px; }
.fd-waitlist-modal__privacy { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 10px; }
.fd-waitlist-modal__privacy-icon { color: var(--gray-600); }
.fd-waitlist-modal__privacy-icon svg { width: 18px; height: 18px; }
.fd-waitlist-modal__privacy p { margin: 0; color: var(--gray-600); font-size: 11px; line-height: 1.5; }
.fd-waitlist-modal__privacy strong { color: var(--gray-700); font-weight: 500; }
.fd-waitlist-modal__privacy a { color: inherit; text-underline-offset: 2px; }

.fd-waitlist-modal__success { text-align: left; }
.fd-waitlist-modal__success-mark { display: block; margin-bottom: 24px; color: var(--black); font-size: 32px; }
.fd-waitlist-modal__success h2 { margin-bottom: 16px; outline: 0; }
.fd-waitlist-modal__success p { margin-bottom: 28px; }
.fd-waitlist-modal__success-close { justify-content: center; }

.fd-waitlist-modal__result {
  position: fixed;
  width: 1px;
  height: 1px;
  border: 0;
  opacity: 0;
  pointer-events: none;
}

/* Tablets usam a gaveta para que os campos continuem confortáveis. */
@media (max-width: 980px) {
  .fd-waitlist-modal {
    --drawer-gutter: 24px;
    align-items: flex-end;
  }

  .fd-waitlist-modal__dialog {
    width: 100%;
    max-width: none;
    height: clamp(70dvh, 700px, 90dvh);
    transform: translate3d(0, 100%, 0);
  }

  .fd-waitlist-modal__scroll {
    padding-top: 72px;
    padding-bottom: max(24px, env(safe-area-inset-bottom));
  }

  .fd-waitlist-modal__intro,
  .fd-waitlist-modal__content {
    width: 100%;
    max-width: 520px;
    margin-inline: auto;
  }

  .fd-waitlist-modal__intro { gap: 12px; margin-bottom: 24px; }
  .fd-waitlist-modal__intro h2 { font-size: 42px; }
  .fd-waitlist-modal__intro p { font-size: 13px; }
  .fd-waitlist-modal__form,
  .fd-waitlist-modal__field-row { gap: 16px; }
  .fd-waitlist-modal__field { gap: 6px; }
  .fd-waitlist-modal__field input { height: 52px; }
  .fd-waitlist-modal__submit { min-height: 52px; padding-block: 16px; }
}

@media (max-width: 360px) {
  .fd-waitlist-modal { --drawer-gutter: 20px; }
  .fd-waitlist-modal__intro h2 { font-size: 36px; }
}

@media (prefers-reduced-motion: reduce) {
  .fd-waitlist-modal { --drawer-duration: 0ms; }
  .fd-waitlist-modal__field-control,
  .fd-waitlist-modal__submit,
  .fd-waitlist-modal__submit img,
  .fd-waitlist-modal__success-close,
  .fd-waitlist-modal__close { transition: none; }
  .fd-waitlist-modal__submit:hover:not(:disabled) img { transform: none; }
}

/* Link da política de privacidade no rodapé. */
.fd-footer__legal a {
  color: var(--gray-400);
  text-decoration: underline;
  text-underline-offset: 3px;
  transition: color 160ms ease;
}

.fd-footer__legal a:hover {
  color: var(--green);
}

/* Títulos com quebra equilibrada entre as linhas. */
main :is(h1, h2) {
  text-wrap: balance;
}
