/* ==========================================================================
   styles.css — sistema visual do portal

   Índice (as camadas abaixo seguem esta ordem, da menos para a mais específica):
     1. base        tokens, reset e elementos HTML
     2. layout      container, header, footer, casca das páginas
     3. components  peças reutilizáveis (botões, progresso)
     4. home        página inicial (hero e cards de sessão)
     5. session     página de sessão (mapa, aulas, navegação entre aulas)
     6. content     markdown renderizado (tabelas, código, diagramas, resumo)
     7. utilities   acessibilidade e preferências do usuário

   Por que camadas (@layer): uma camada posterior vence a anterior mesmo com
   seletor menos específico. Isso evita as "guerras de especificidade" que já
   causaram bugs aqui (regra duplicada sobrescrevendo outra). Dentro de uma
   camada valem as regras normais (especificidade e depois ordem no arquivo).
   Todo o CSS deve estar dentro de uma camada: regra fora de camada vence
   todas as camadas.

   Responsivo: um único ponto de quebra, max-width 760px, escrito junto do
   componente que ele ajusta (variáveis CSS não funcionam em media queries).
   ========================================================================== */

@layer base, layout, components, home, session, content, utilities;

/* ==========================================================================
   1. base
   ========================================================================== */
@layer base {
  :root {
    color-scheme: light;

    /* cores */
    --bg: #f5f7fb;
    --surface: #ffffff;
    --surface-alt: #eef4ff;
    --surface-tint: #f8fbff;
    --primary: #1d4ed8;
    --primary-strong: #123bb3;
    --primary-tint: #dbeafe;
    --primary-line: rgba(29, 78, 216, 0.35);
    --primary-line-strong: rgba(29, 78, 216, 0.42);
    --on-primary: #ffffff;
    --secondary: #0f172a;
    --text: #172033;
    --muted: #5c6b82;
    --border: #dfe7f5;
    --border-mid: #d9e4f4;
    --border-strong: #cfdcf1;
    --success: #0f9f6e;
    --on-success: #ffffff;
    --warning: #f59e0b;
    --danger: #b42318;
    --focus-ring: rgba(29, 78, 216, 0.75);
    --highlight: rgba(250, 204, 21, 0.2);
    --highlight-strong: rgba(250, 204, 21, 0.4);

    /* translúcidos e blocos de código */
    --header-bg: rgba(245, 247, 251, 0.9);
    --glass: rgba(255, 255, 255, 0.7);
    --glass-strong: rgba(255, 255, 255, 0.78);
    --gradient-end: #f4f8ff;
    --code-bg: #172033;
    --code-text: #e5edf9;
    --code-inline-bg: rgba(29, 78, 216, 0.08);

    /* sombras */
    --shadow: 0 18px 40px rgba(15, 23, 42, 0.08);
    --shadow-mid: 0 16px 30px rgba(15, 23, 42, 0.06);
    --shadow-soft: 0 12px 25px rgba(15, 23, 42, 0.04);

    /* raios de borda */
    --radius-panel: 22px;
    --radius-card: 18px;
    --radius-item: 14px;
    --radius-control: 10px;
  }

  /* Tema escuro: segue o sistema quando não há escolha e a página ainda não recebeu data-theme
     (sem JavaScript); com JavaScript, tema-init.js sempre define data-theme, e o botão o altera. */
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme]) {
      color-scheme: dark;

      --bg: #0b1220;
      --surface: #111a2e;
      --surface-alt: #16233f;
      --surface-tint: #0e1729;
      --primary: #6ea0ff;
      --primary-strong: #bcd2ff;
      --primary-tint: #1e3a6e;
      --primary-line: rgba(110, 160, 255, 0.4);
      --primary-line-strong: rgba(110, 160, 255, 0.5);
      --on-primary: #0b1a3a;
      --secondary: #dbe5f5;
      --text: #e6edf7;
      --muted: #9aa9c2;
      --border: #24324f;
      --border-mid: #2a3a5c;
      --border-strong: #2e3f63;
      --success: #34d399;
      --on-success: #04261b;
      --warning: #fbbf24;
      --danger: #f87171;
      --focus-ring: rgba(110, 160, 255, 0.7);
      --highlight: rgba(250, 204, 21, 0.22);
      --highlight-strong: rgba(250, 204, 21, 0.32);

      --header-bg: rgba(11, 18, 32, 0.88);
      --glass: rgba(17, 26, 46, 0.72);
      --glass-strong: rgba(17, 26, 46, 0.8);
      --gradient-end: #0f1a31;
      --code-bg: #070c17;
      --code-text: #e2e8f0;
      --code-inline-bg: rgba(110, 160, 255, 0.16);

      --shadow: 0 18px 40px rgba(0, 0, 0, 0.35);
      --shadow-mid: 0 16px 30px rgba(0, 0, 0, 0.3);
      --shadow-soft: 0 12px 25px rgba(0, 0, 0, 0.25);
    }
  }

  :root[data-theme="dark"] {
    color-scheme: dark;

    --bg: #0b1220;
    --surface: #111a2e;
    --surface-alt: #16233f;
    --surface-tint: #0e1729;
    --primary: #6ea0ff;
    --primary-strong: #bcd2ff;
    --primary-tint: #1e3a6e;
    --primary-line: rgba(110, 160, 255, 0.4);
    --primary-line-strong: rgba(110, 160, 255, 0.5);
    --on-primary: #0b1a3a;
    --secondary: #dbe5f5;
    --text: #e6edf7;
    --muted: #9aa9c2;
    --border: #24324f;
    --border-mid: #2a3a5c;
    --border-strong: #2e3f63;
    --success: #34d399;
    --on-success: #04261b;
    --warning: #fbbf24;
    --danger: #f87171;
    --focus-ring: rgba(110, 160, 255, 0.7);
    --highlight: rgba(250, 204, 21, 0.22);
    --highlight-strong: rgba(250, 204, 21, 0.32);

    --header-bg: rgba(11, 18, 32, 0.88);
    --glass: rgba(17, 26, 46, 0.72);
    --glass-strong: rgba(17, 26, 46, 0.8);
    --gradient-end: #0f1a31;
    --code-bg: #070c17;
    --code-text: #e2e8f0;
    --code-inline-bg: rgba(110, 160, 255, 0.16);

    --shadow: 0 18px 40px rgba(0, 0, 0, 0.35);
    --shadow-mid: 0 16px 30px rgba(0, 0, 0, 0.3);
    --shadow-soft: 0 12px 25px rgba(0, 0, 0, 0.25);
  }

  * {
    box-sizing: border-box;
  }

  html {
    scroll-behavior: smooth;
  }

  body {
    margin: 0;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    background: var(--bg);
    color: var(--text);
    line-height: 1.6;
  }

  a {
    color: inherit;
    text-decoration: none;
  }

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

  button {
    font: inherit;
  }

  :focus-visible {
    outline: 3px solid var(--focus-ring);
    outline-offset: 3px;
  }

  h1,
  h2,
  h3 {
    color: var(--secondary);
    line-height: 1.2;
    margin-top: 0;
  }

  h1 {
    font-size: clamp(2.3rem, 4vw, 4rem);
    font-weight: 800;
    margin-bottom: 1rem;
  }

  h2 {
    font-size: clamp(1.9rem, 3vw, 2.6rem);
    font-weight: 700;
    margin-bottom: 0.75rem;
  }

  h3 {
    font-size: 1.15rem;
    font-weight: 600;
    margin-bottom: 0.6rem;
  }

  .eyebrow {
    margin: 0 0 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    font-size: 0.76rem;
    color: var(--primary);
    font-weight: 700;
  }

  .lead {
    font-size: 1.06rem;
    color: var(--muted);
    max-width: 62ch;
  }
}

/* ==========================================================================
   2. layout
   ========================================================================== */
@layer layout {
  .container {
    width: min(1120px, calc(100% - 2rem));
    margin: 0 auto;
  }

  .site-header {
    position: sticky;
    top: 0;
    z-index: 50;
    background: var(--header-bg);
    backdrop-filter: blur(12px);
    border-bottom: 1px solid var(--border);
  }

  .skip-link {
    position: absolute;
    left: 1rem;
    top: -3.5rem;
    z-index: 100;
    padding: 0.7rem 1.1rem;
    border-radius: var(--radius-control);
    background: var(--primary);
    color: var(--on-primary);
    font-weight: 700;
    transition: top 0.2s ease;
  }

  .skip-link:focus {
    top: 0.75rem;
  }

  .nav-wrap {
    display: flex;
    align-items: center;
    justify-content: space-between;
    min-height: 70px;
  }

  .brand {
    display: inline-flex;
    align-items: center;
    gap: 0.55rem;
    font-weight: 800;
    letter-spacing: 0.04em;
    font-size: 1.1rem;
    color: var(--secondary);
  }

  .brand__mark {
    flex: 0 0 auto;
    width: 28px;
    height: 28px;
    border-radius: 8px;
  }

  .main-nav {
    display: flex;
    align-items: center;
    gap: 1.25rem;
    color: var(--muted);
    font-weight: 600;
  }

  /* Botão de tema: rótulo fixo ("Modo escuro") e estado em aria-pressed; o ícone mostra o tema
     para o qual ele leva. Sem data-theme (sem JavaScript) o botão não faz nada, então some. */
  .theme-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 2.25rem;
    height: 2.25rem;
    padding: 0;
    border: 1px solid var(--border);
    border-radius: var(--radius-control);
    background: var(--surface);
    color: var(--secondary);
    cursor: pointer;
    transition: border-color 0.2s ease, background 0.2s ease;
  }

  .theme-toggle:hover {
    border-color: var(--primary-line);
  }

  .theme-toggle svg {
    width: 1.15rem;
    height: 1.15rem;
  }

  .theme-toggle__sun,
  :root[data-theme="dark"] .theme-toggle__moon {
    display: none;
  }

  :root[data-theme="dark"] .theme-toggle__sun {
    display: block;
  }

  :root:not([data-theme]) .theme-toggle {
    display: none;
  }

  .section {
    padding: 1.5rem 0 4rem;
  }

  .section-heading {
    margin-bottom: 1.5rem;
  }

  .page-shell {
    padding: 3.5rem 0 4rem;
  }

  .site-footer {
    border-top: 1px solid var(--border);
    padding: 1.5rem 0 2.25rem;
    color: var(--muted);
  }

  .footer-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
  }

  .footer-title {
    font-weight: 700;
    color: var(--secondary);
  }

  .footer-meta {
    display: flex;
    align-items: center;
    gap: 0.65rem;
    flex-wrap: wrap;
    font-size: 0.88rem;
  }

  .footer-badge {
    padding: 0.3rem 0.7rem;
    border-radius: 999px;
    background: var(--surface-alt);
    color: var(--primary);
    font-weight: 700;
    font-size: 0.78rem;
  }

  .footer-divider {
    color: var(--border);
  }

  @media (max-width: 760px) {
    .main-nav {
      flex-wrap: wrap;
      justify-content: flex-end;
      gap: 0.4rem 0.5rem;
      font-size: 0.85rem;
    }

    .nav-wrap {
      gap: 0.5rem;
    }

    /* Alvo de toque com pelo menos 32px de altura (WCAG 2.5.8 pede 24px); só padding vertical,
       para não alargar o cabeçalho. */
    .main-nav a {
      padding-block: 0.5rem;
    }

    /* No celular o cabeçalho não comporta o nome ao lado do logo, dos links e do botão de tema: o
       nome sai do visual e continua no nome acessível do link. */
    .brand span {
      position: absolute;
      width: 1px;
      height: 1px;
      overflow: hidden;
      clip-path: inset(50%);
      white-space: nowrap;
    }
  }
}

/* ==========================================================================
   3. components — peças reutilizáveis
   ========================================================================== */
@layer components {
  .hero-actions,
  .card-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    align-items: center;
  }

  /* inline-flex é obrigatório: sem ele um <a class="button"> solto (fora de um
     container flex) cai em display:inline e o padding sobrepõe o conteúdo acima. */
  .button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: var(--radius-control);
    padding: 0.8rem 1.1rem;
    font-weight: 700;
    cursor: pointer;
    transition: transform 0.2s ease, box-shadow 0.2s ease;
  }

  .button:hover {
    transform: translateY(-1px);
  }

  .button.primary {
    background: var(--primary);
    color: var(--on-primary);
    box-shadow: var(--shadow);
  }

  .button.secondary,
  .button.tertiary {
    background: var(--surface);
    border: 1px solid var(--border);
    color: var(--secondary);
  }

  /* ---- mapa de conceitos: matriz conceito x sessão e painel de detalhes ---- */
  .concept-legend,
  .concept-sessions {
    color: var(--muted);
    font-size: 0.9rem;
  }

  .concept-sessions {
    margin: 0.75rem 0 0;
    font-size: 0.78rem;
  }

  .concept-key {
    display: inline-block;
    width: 0.9rem;
    height: 0.9rem;
    margin: 0 0.15rem 0 0.35rem;
    border: 1px solid var(--border);
    border-radius: 50%;
    vertical-align: -0.12em;
  }

  .concept-key[data-kind="introduz"],
  .concept-cell[data-kind="introduz"] span:first-child {
    background: var(--primary);
    border-color: var(--primary);
    color: var(--on-primary);
  }

  .concept-key[data-kind="aprofunda"],
  .concept-cell[data-kind="aprofunda"] span:first-child {
    background: var(--primary-tint);
    border-color: var(--primary-line);
    color: var(--primary-strong);
  }

  .concept-key[data-kind="aplica"],
  .concept-cell[data-kind="aplica"] span:first-child {
    background: var(--surface);
    border-color: var(--border);
    color: var(--muted);
  }

  /* position: relative faz do contêiner o bloco de referência dos .sr-only (position: absolute) das
     células; sem isso eles escapam do overflow e alargam a página no celular. */
  .concept-matrix-wrap {
    position: relative;
    overflow-x: auto;
    margin-top: 1rem;
    border: 1px solid var(--border);
    border-radius: var(--radius-card);
    background: var(--surface);
  }

  .concept-matrix {
    width: 100%;
    min-width: 36rem;
    border-collapse: separate;
    border-spacing: 0;
  }

  .concept-matrix th,
  .concept-matrix td {
    padding: 0.3rem 0.2rem;
    border-bottom: 1px solid var(--border);
    text-align: center;
  }

  .concept-matrix thead th {
    color: var(--muted);
    font-size: 0.78rem;
    cursor: help;
  }

  .concept-matrix tbody tr:last-child th,
  .concept-matrix tbody tr:last-child td {
    border-bottom: none;
  }

  .concept-matrix .concept-matrix__theme th {
    padding: 0.5rem 0.9rem;
    background: var(--surface-alt);
    color: var(--primary-strong);
    font-size: 0.75rem;
    letter-spacing: 0.05em;
    text-align: left;
    text-transform: uppercase;
  }

  /* primeira coluna fixa: no celular a matriz rola na horizontal e o nome do conceito fica à vista */
  .concept-matrix thead th:first-child,
  .concept-matrix tbody th[scope="row"] {
    position: sticky;
    left: 0;
    z-index: 1;
    min-width: 10.5rem;
    padding: 0;
    background: var(--surface);
    text-align: left;
  }

  .concept-matrix thead th:first-child {
    padding: 0.3rem 0.9rem;
  }

  .concept-name {
    width: 100%;
    padding: 0.5rem 0.9rem;
    border: 0;
    background: none;
    color: var(--text);
    font: inherit;
    font-weight: 600;
    text-align: left;
    cursor: pointer;
  }

  .concept-name:hover {
    color: var(--primary);
  }

  .concept-name:focus-visible {
    outline: 3px solid var(--focus-ring);
    outline-offset: -3px;
  }

  .concept-matrix tr.is-selected th,
  .concept-matrix tr.is-selected td {
    background: var(--surface-alt);
  }

  .concept-cell {
    cursor: pointer;
  }

  .concept-cell span:first-child {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.75rem;
    height: 1.75rem;
    border: 1px solid var(--border);
    border-radius: 50%;
    font-size: 0.78rem;
    font-weight: 700;
  }

  .concept-cell:hover span:first-child {
    box-shadow: 0 0 0 3px var(--primary-line);
  }

  @media (max-width: 760px) {
    .concept-matrix thead th:first-child,
    .concept-matrix tbody th[scope="row"] {
      min-width: 7.5rem;
    }

    .concept-name {
      padding: 0.5rem 0.6rem;
      font-size: 0.85rem;
    }
  }

  .concept-panel {
    margin: 1.25rem 0;
    padding: 0.5rem 1.25rem 0.25rem;
    border: 1px solid var(--primary-line);
    border-radius: var(--radius-card);
    background: var(--surface);
  }

  .concept-panel:focus {
    outline: none;
  }

  .concept-panel h3 {
    margin-top: 1rem;
  }

  .concept-panel__close {
    float: right;
    margin-top: 0.75rem;
    padding: 0.4rem 0.8rem;
    border: 1px solid var(--border);
    border-radius: var(--radius-control);
    background: var(--surface);
    color: var(--secondary);
    font: inherit;
    font-size: 0.85rem;
    font-weight: 700;
    cursor: pointer;
  }

  .concept-panel tr.is-focus td {
    background: var(--highlight);
  }

  /* ---- busca no conteúdo ---- */
  .search-form {
    margin-bottom: 0.75rem;
  }

  .search-input {
    width: 100%;
    padding: 0.85rem 1rem;
    border: 1px solid var(--border);
    border-radius: var(--radius-control);
    background: var(--surface);
    color: var(--text);
    font: inherit;
    font-size: 1.05rem;
  }

  .search-status {
    min-height: 1.5em;
    margin: 0 0 1rem;
    color: var(--muted);
    font-size: 0.9rem;
  }

  .search-results {
    display: grid;
    gap: 0.75rem;
    margin: 0;
    padding: 0;
    list-style: none;
  }

  .search-result {
    padding: 0.9rem 1.1rem;
    border: 1px solid var(--border);
    border-radius: var(--radius-item);
    background: var(--surface);
  }

  .search-result:hover {
    border-color: var(--primary-line);
  }

  .search-result__link {
    display: grid;
    gap: 0.15rem;
    color: inherit;
    text-decoration: none;
  }

  .search-result__where {
    color: var(--primary);
    font-size: 0.78rem;
    font-weight: 700;
    letter-spacing: 0.03em;
  }

  .search-result__heading {
    font-weight: 700;
    overflow-wrap: anywhere;
  }

  .search-result__snippet {
    margin: 0.4rem 0 0;
    color: var(--muted);
    font-size: 0.92rem;
    overflow-wrap: anywhere;
  }

  .search-result mark {
    padding: 0 0.15em;
    border-radius: 3px;
    background: var(--highlight-strong);
    color: inherit;
  }

  .progress-indicator {
    display: inline-flex;
    align-items: center;
    min-height: 42px;
    padding: 0.55rem 0.75rem;
    border: 1px solid var(--border);
    border-radius: var(--radius-control);
    color: var(--muted);
    background: var(--surface-alt);
    font-size: 0.82rem;
    font-weight: 700;
  }

  .progress-bar {
    height: 8px;
    border-radius: 999px;
    background: var(--surface-alt);
    overflow: hidden;
    margin-bottom: 0.9rem;
  }

  .progress-bar__fill {
    display: block;
    height: 100%;
    width: 0%;
    border-radius: 999px;
    background: var(--success);
    transition: width 0.3s ease;
  }
}

/* ==========================================================================
   4. home — hero e cards de sessão
   ========================================================================== */
@layer home {
  .hero {
    padding: 4rem 0 3rem;
  }

  .hero-content {
    display: grid;
    grid-template-columns: 1.5fr 0.9fr;
    gap: 2rem;
    align-items: center;
  }

  .hero-panel {
    background: linear-gradient(135deg, var(--surface), var(--surface-alt));
    border: 1px solid var(--border);
    border-radius: var(--radius-panel);
    padding: 1.4rem;
    box-shadow: var(--shadow);
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 1rem;
  }

  /* O número fica no topo de todos os cartões e o rótulo se centraliza no espaço que sobra, então um
     rótulo de duas linhas ("Aulas concluídas" no celular) não deixa os vizinhos com um vazio embaixo. */
  .stat {
    display: flex;
    flex-direction: column;
    background: var(--glass);
    border-radius: 16px;
    padding: 1rem 0.5rem;
    text-align: center;
    border: 1px solid var(--border);
  }

  .stat strong {
    display: block;
    font-size: clamp(1.4rem, 2vw, 2rem);
    color: var(--primary);
  }

  .stat span {
    display: flex;
    flex: 1;
    align-items: center;
    justify-content: center;
    color: var(--muted);
    font-size: 0.82rem;
    line-height: 1.3;
  }

  /* backup do progresso, abaixo dos cards */
  .progress-backup__text {
    max-width: 62ch;
    margin: 0 0 1.25rem;
    color: var(--muted);
  }

  .progress-backup__status {
    min-height: 1.5em;
    margin: 1rem 0 0;
    color: var(--muted);
    font-size: 0.9rem;
  }

  /* Trilhas: cada grupo de sessões tem título e um grid próprio. No máximo três colunas (a largura
     mínima é a maior entre 260px e um terço da linha), então todo card tem a mesma largura em todas as
     trilhas e uma trilha de duas sessões deixa o espaço sobrando à direita, sem esticar os cards. */
  .track + .track {
    margin-top: 2.5rem;
  }

  .track-heading {
    margin-bottom: 1rem;
  }

  .track-heading h3 {
    margin-bottom: 0.2rem;
    font-size: 1.35rem;
    font-weight: 700;
  }

  .track-heading p {
    margin: 0;
    color: var(--muted);
    font-size: 0.92rem;
  }

  .track-range {
    font-weight: 700;
  }

  .session-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(max(260px, calc((100% - 2.5rem) / 3)), 1fr));
    gap: 1.25rem;
  }

  .session-card {
    position: relative;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-card);
    padding: 1.25rem;
    box-shadow: var(--shadow);
    display: flex;
    flex-direction: column;
    transition: border-color 0.2s ease, box-shadow 0.2s ease;
  }

  .session-card h4 {
    margin: 0 0 0.65rem;
    color: var(--secondary);
    font-size: 1.15rem;
    font-weight: 600;
    line-height: 1.2;
  }

  .session-card p {
    color: var(--muted);
    flex: 1;
  }

  /* O título é o único link do card; o ::after estende a área clicável ao card
     inteiro. O "Abrir aula"/"Detalhes" é só um indicador visual (span
     aria-hidden), sem segunda parada de Tab. Não use transform no hover do
     card: deslocar o elemento sob o ponteiro causa tremulação na borda. */
  .card-link {
    color: inherit;
    text-decoration: none;
  }

  .card-link::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: var(--radius-card);
  }

  .card-link:focus-visible {
    outline: none;
  }

  .session-card:hover {
    border-color: var(--primary-line);
    box-shadow: 0 14px 28px rgba(29, 78, 216, 0.12);
  }

  .session-card:hover .card-link {
    color: var(--primary);
    text-decoration: underline;
  }

  /* "Abrir aula" é só uma dica de que o card é clicável: texto simples, sem caixa, para não repetir
     onze botões na página. */
  .session-card .button.tertiary {
    padding: 0;
    border: none;
    background: none;
    color: var(--primary);
  }

  .session-card .button.tertiary::after {
    content: "\203A";
    margin-left: 0.35em;
  }

  .session-card:hover .button.tertiary {
    text-decoration: underline;
  }

  .session-card .card-actions {
    justify-content: space-between;
  }

  .session-card:has(.card-link:focus-visible) {
    outline: 3px solid var(--focus-ring);
    outline-offset: 3px;
  }

  .session-meta {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 0.8rem;
    margin-bottom: 0.9rem;
  }

  .session-number {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border-radius: 12px;
    background: var(--surface-alt);
    color: var(--primary);
    font-weight: 800;
  }

  @media (max-width: 760px) {
    .hero-content {
      grid-template-columns: 1fr;
    }
  }
}

/* ==========================================================================
   5. session — página de sessão
   ========================================================================== */
@layer session {
  .page-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 2rem;
  }

  /* palavra longa do título (ex.: "Empreendedorismo") estourava a largura em telas de 320px */
  .page-header h1 {
    overflow-wrap: anywhere;
  }

  .page-header p {
    color: var(--muted);
  }

  .breadcrumb {
    color: var(--muted);
    font-size: 0.92rem;
    margin-bottom: 0.8rem;
  }

  .breadcrumb a {
    color: var(--primary);
    font-weight: 700;
  }

  .breadcrumb a:hover,
  .breadcrumb a:focus-visible {
    text-decoration: underline;
  }

  .study-objective {
    max-width: 780px;
    margin: 1.5rem 0 2.25rem;
    padding: 1.1rem 1.25rem;
    border-left: 4px solid var(--primary);
    background: var(--surface-alt);
    color: var(--text);
  }

  .study-objective .eyebrow {
    margin-bottom: 0.35rem;
  }

  .study-objective p:last-child {
    margin-bottom: 0;
  }

  /* ---- mapa da sessão ---- */
  .topic-nav {
    background: linear-gradient(135deg, var(--surface) 0%, var(--gradient-end) 100%);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-panel);
    padding: 1.5rem;
    margin: 0 0 2rem;
    box-shadow: var(--shadow-mid);
  }

  .topic-nav__header {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1.15rem;
  }

  .topic-nav__header .eyebrow {
    margin-bottom: 0.25rem;
  }

  .topic-nav__header .progress-indicator {
    min-height: auto;
    padding: 0.4rem 0.65rem;
    font-size: 0.78rem;
  }

  .topic-nav__list {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.7rem;
    margin: 0;
    padding: 0;
    list-style: none;
    counter-reset: lesson;
  }

  .topic-nav__list li {
    counter-increment: lesson;
    min-width: 0;
  }

  .topic-nav__list li.topic-nav__supplement {
    counter-increment: none;
  }

  .topic-nav a {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    min-height: 3.25rem;
    padding: 0.65rem 0.8rem;
    border: 1px solid var(--border-mid);
    border-radius: 13px;
    background: var(--glass-strong);
    color: var(--secondary);
    line-height: 1.3;
    font-weight: 700;
    transition: transform 0.2s ease, border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
  }

  .topic-nav a::before {
    content: counter(lesson, decimal-leading-zero);
    display: inline-flex;
    flex: 0 0 2rem;
    align-items: center;
    justify-content: center;
    width: 2rem;
    height: 2rem;
    border-radius: 9px;
    background: var(--surface-alt);
    color: var(--primary);
    font-size: 0.78rem;
    font-weight: 800;
  }

  .topic-nav__supplement a::before {
    content: "";
    width: 0.45rem;
    height: 0.45rem;
    flex-basis: 0.45rem;
    border-radius: 50%;
    background: var(--warning);
  }

  .topic-nav a:hover,
  .topic-nav a:focus-visible,
  .topic-nav a.active {
    background: var(--surface);
    border-color: var(--primary-line-strong);
    box-shadow: 0 7px 16px rgba(29, 78, 216, 0.1);
    transform: translateX(2px);
  }

  .topic-nav a.active {
    color: var(--primary-strong);
  }

  .topic-nav a.active::before {
    background: var(--primary);
    color: var(--on-primary);
  }

  .topic-nav a.is-complete {
    border-color: rgba(15, 159, 110, 0.35);
  }

  .topic-nav a.is-complete::before {
    content: "✓";
    background: var(--success);
    color: var(--on-success);
  }

  .topic-nav a.is-complete.active::before {
    background: var(--success);
  }

  /* ---- aula: painel, cabeçalho e controle de expandir ---- */
  .content-section {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-panel);
    padding: 1.5rem;
    margin-bottom: 1.4rem;
    box-shadow: var(--shadow-soft);
    scroll-margin-top: 92px;
  }

  /* .lesson-heading é o ancestral posicionado do ::after do botão do título
     (área clicável = linha inteira). Por isso .collapse-lesson NÃO pode
     receber position. */
  .lesson-heading {
    position: relative;
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1rem;
  }

  .lesson-heading .eyebrow {
    margin-bottom: 0.45rem;
  }

  /* Tempo estimado de leitura (app.js), dentro do eyebrow "Aula N": discreto e sem caixa alta. */
  .reading-time {
    color: var(--muted);
    font-weight: 600;
    letter-spacing: 0;
    text-transform: none;
  }

  .lesson-heading h2 {
    font-size: clamp(1.3rem, 1.6vw, 1.6rem);
    margin-bottom: 0;
  }

  /* Checkbox nativo com rótulo fixo: só o estado muda, nunca o texto. */
  .lesson-check {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    flex: 0 0 auto;
    padding: 0.5rem 0.8rem;
    border: 1px solid var(--border);
    border-radius: var(--radius-control);
    background: var(--surface);
    color: var(--muted);
    font-size: 0.88rem;
    font-weight: 700;
    cursor: pointer;
    transition: border-color 0.2s ease, background 0.2s ease;
  }

  .lesson-check:hover {
    border-color: var(--primary-line);
  }

  .lesson-check input {
    width: 1.15rem;
    height: 1.15rem;
    margin: 0;
    accent-color: var(--success);
    cursor: pointer;
  }

  .lesson-check:has(input:checked) {
    background: rgba(15, 159, 110, 0.08);
    border-color: rgba(15, 159, 110, 0.3);
    color: var(--success);
  }

  .lesson-check:has(input:focus-visible) {
    outline: 3px solid var(--focus-ring);
    outline-offset: 2px;
  }

  /* z-index: mantém o controle de conclusão clicável acima da área do título. */
  .lesson-actions {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex: 0 0 auto;
  }

  .collapse-lesson {
    display: inline-flex;
    align-items: flex-start;
    gap: 0.45rem;
    padding: 0;
    border: 0;
    background: none;
    color: inherit;
    font: inherit;
    letter-spacing: inherit;
    text-align: left;
    cursor: pointer;
  }

  .collapse-lesson::after {
    content: "";
    position: absolute;
    inset: 0;
  }

  /* Chevron à esquerda do título, sem caixa: aponta para a direita recolhido e para baixo
     expandido. É desenhado por CSS (o glifo de texto caía abaixo da linha do título); o texto
     do span fica fora do visual com font-size: 0. A altura acompanha a linha do título (1.3rem x 1,2). */
  .lesson-chevron {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 1rem;
    height: 1.56rem;
    margin-left: -0.2rem;
    color: var(--primary);
    font-size: 0;
    transition: color 0.2s ease;
  }

  .lesson-chevron::before {
    content: "";
    width: 0.5rem;
    height: 0.5rem;
    border-right: 2.5px solid currentColor;
    border-bottom: 2.5px solid currentColor;
    transform: translateX(-0.08rem) rotate(-45deg);
    transition: transform 0.2s ease;
  }

  .collapse-lesson[aria-expanded="true"] .lesson-chevron::before {
    transform: translateY(-0.12rem) rotate(45deg);
  }

  .lesson-heading:hover .lesson-title-text {
    color: var(--primary);
  }

  .lesson-heading:hover .lesson-chevron {
    color: var(--secondary);
  }

  .collapse-lesson:focus-visible {
    outline: none;
  }

  .lesson-heading:has(.collapse-lesson:focus-visible) {
    outline: 3px solid var(--focus-ring);
    outline-offset: 6px;
    border-radius: 12px;
  }

  /* ---- estado recolhido/expandido ---- */
  .lesson-content,
  .lesson-complete-bar,
  .lesson-footer-nav {
    display: none;
  }

  .content-section.is-expanded .lesson-content,
  .sources-section.is-expanded .lesson-content,
  .summarize.is-expanded .lesson-content {
    display: block;
  }

  .content-section.is-expanded .lesson-complete-bar {
    display: flex;
  }

  .content-section.is-expanded .lesson-footer-nav,
  .sources-section.is-expanded .lesson-footer-nav,
  .summarize.is-expanded .lesson-footer-nav {
    display: grid;
  }

  /* ---- concluir a aula e seguir (só nas aulas; Aprofundamento e Resumo não têm) ---- */
  /* Fica dentro do .lesson-footer-nav, no lugar da antiga "próxima": na mesma linha do "anterior" e do
     retorno ao mapa (no celular ele sobe para uma linha própria, veja o ponto de quebra abaixo). */
  .lesson-complete-bar {
    justify-content: flex-end;
  }

  /* Mesmo tamanho do "anterior" (.lesson-nav-link): mesma altura, fonte, borda e raio; a cor primária
     é o que o destaca. Sem a sombra do .button.primary, para os dois ficarem como pares na linha. */
  .lesson-complete-bar .button {
    gap: 0.4rem;
    padding: 0.6rem 0.9rem;
    border: 1px solid var(--primary);
    border-radius: 12px;
    font-size: 0.85rem;
    box-shadow: none;
  }

  @media (max-width: 760px) {
    .lesson-complete-bar .button {
      width: 100%;
      text-align: center;
    }
  }

  /* ---- navegação no rodapé da aula ---- */
  /* minmax(0, 1fr): colunas 1fr têm largura mínima igual ao conteúdo, e os
     rótulos nowrap dos links estouravam a largura no mobile. */
  .lesson-footer-nav {
    grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
    align-items: center;
    gap: 0.75rem;
    margin-top: 1.5rem;
  }

  /* Botão redondo "voltar ao mapa" (o próprio .lesson-return é o <a>). */
  .lesson-footer-nav .lesson-return {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    justify-self: center;
    width: 2.4rem;
    height: 2.4rem;
    margin: 0;
    border: 1px solid var(--border);
    border-radius: 50%;
    background: var(--surface-alt);
    color: var(--primary);
    font-size: 1.2rem;
    line-height: 1;
    transition: background 0.2s ease, border-color 0.2s ease;
  }

  .lesson-footer-nav .lesson-return:hover,
  .lesson-footer-nav .lesson-return:focus-visible {
    background: var(--primary-tint);
    border-color: var(--primary-line);
  }

  .lesson-nav-link {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    max-width: 100%;
    min-width: 0;
    padding: 0.6rem 0.9rem;
    border: 1px solid var(--border);
    border-radius: 12px;
    background: var(--surface-alt);
    color: var(--secondary);
    font-size: 0.85rem;
    font-weight: 700;
    text-decoration: none;
  }

  .lesson-nav-link span {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .lesson-nav-link:hover,
  .lesson-nav-link:focus-visible {
    border-color: var(--primary-line);
    background: var(--primary-tint);
  }

  .lesson-nav-link--prev {
    justify-self: start;
  }

  .lesson-nav-link--next {
    justify-self: end;
    text-align: right;
  }

  /* ---- Aprofundamento e Resumo (contêineres) ---- */
  .sources-section {
    margin: 2rem 0;
    padding: 1.5rem;
    border: 1px solid var(--border);
    border-radius: var(--radius-panel);
    background: var(--surface);
    scroll-margin-top: 92px;
  }

  .summarize {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-card);
    padding: 1.4rem 1.3rem;
    margin-top: 1.5rem;
    scroll-margin-top: 92px;
  }

  @media (max-width: 760px) {
    .page-header {
      grid-template-columns: 1fr;
      display: grid;
      margin-bottom: 1.25rem;
    }

    .lesson-heading {
      display: grid;
    }

    .lesson-actions {
      justify-self: start;
    }

    .topic-nav__header {
      display: block;
    }

    .topic-nav__list {
      grid-template-columns: 1fr;
    }

    .lesson-footer-nav {
      grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
      grid-template-areas:
        "return return"
        "prev next";
      row-gap: 0.6rem;
    }

    /* Rodapé de aula: o botão de concluir (rótulo longo) ocupa a linha de cima, e o "anterior" e o
       retorno ao mapa ficam juntos embaixo. */
    .lesson-footer-nav:has(.lesson-complete-bar) {
      grid-template-areas:
        "complete complete"
        "prev return";
    }

    .lesson-footer-nav:has(.lesson-complete-bar) .lesson-return {
      justify-self: end;
    }

    .lesson-complete-bar {
      grid-area: complete;
    }

    .lesson-footer-nav .lesson-return {
      grid-area: return;
    }

    .lesson-nav-link--prev {
      grid-area: prev;
    }

    .lesson-nav-link--next {
      grid-area: next;
    }

    /* Título longo some do visual (o link virava "Aula 2 · Auto…"), mas continua no nome acessível. */
    .lesson-nav-title {
      position: absolute;
      width: 1px;
      height: 1px;
      overflow: hidden;
      clip-path: inset(50%);
      white-space: nowrap;
    }
  }
}

/* ==========================================================================
   6. content — markdown renderizado (.markdown-content) e seus blocos
   O markdown só gera elementos HTML sem classes; o estilo vem destes
   seletores. Os títulos de subtópico são sempre h3 (nunca h2).
   ========================================================================== */
@layer content {
  .markdown-content > h3 {
    margin-top: 1.25rem;
  }

  .markdown-content > h3:first-child {
    margin-top: 0;
  }

  /* Subtópico com âncora (id dado pelo app.js): não fica escondido sob o cabeçalho fixo. */
  .markdown-content h3[id] {
    scroll-margin-top: 92px;
  }

  /* ---- sumário "Nesta aula" (gerado pelo app.js nas aulas com vários subtópicos) ----
     Mora dentro de .markdown-content, por isso os seletores levam o prefixo: precisam vencer
     as regras de lista e de link do markdown, que estão nesta mesma camada. */
  .lesson-toc {
    margin: 0 0 1.5rem;
    padding: 0.7rem 1rem;
    border: 1px solid var(--border);
    border-radius: var(--radius-item);
    background: var(--surface-tint);
  }

  .lesson-toc summary {
    color: var(--primary);
    font-size: 0.78rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    cursor: pointer;
  }

  .markdown-content .lesson-toc__list {
    margin: 0.6rem 0 0.15rem;
    padding-left: 1.4rem;
    columns: 2;
    column-gap: 2.5rem;
    font-size: 0.92rem;
  }

  .markdown-content .lesson-toc__list li {
    margin-bottom: 0.3rem;
    break-inside: avoid;
  }

  .markdown-content .lesson-toc a {
    color: var(--text);
    text-decoration: none;
  }

  .markdown-content .lesson-toc a:hover {
    color: var(--primary);
    text-decoration: underline;
  }

  @media (max-width: 760px) {
    .markdown-content .lesson-toc__list {
      columns: 1;
    }
  }

  .markdown-content blockquote {
    margin: 1rem 0;
    padding: 0.9rem 1rem;
    border-left: 4px solid var(--primary);
    background: var(--surface-tint);
    color: var(--muted);
  }

  .markdown-content pre {
    overflow-x: auto;
    margin: 1rem 0;
    padding: 1rem;
    border-radius: 12px;
    background: var(--code-bg);
    color: var(--code-text);
  }

  .markdown-content code {
    padding: 0.1rem 0.3rem;
    border-radius: 4px;
    background: var(--code-inline-bg);
    font-size: 0.9em;
  }

  .markdown-content pre code {
    padding: 0;
    background: transparent;
    color: inherit;
  }

  /* Identificadores longos em código inline (variáveis de ambiente, caminhos) não
     quebram sozinhos e estouravam a largura no mobile. Em blocos <pre> a rolagem
     horizontal já resolve, por isso só o código inline quebra. */
  .markdown-content :not(pre) > code {
    overflow-wrap: anywhere;
  }

  /* Código curto (até 20 caracteres, marcado pelo app.js) não quebra: `2026-07-28` não pode virar
     "2026-" e "07-28". Cabe folgado em 320px, então não reintroduz estouro no celular; o código
     longo continua quebrando em qualquer ponto pela regra acima. */
  .markdown-content code.code-short {
    white-space: nowrap;
  }

  .markdown-content ul,
  .markdown-content ol {
    margin: 1rem 0;
    padding-left: 1.4rem;
    display: block;
  }

  .markdown-content li {
    color: var(--muted);
    margin-bottom: 0.4rem;
  }

  .markdown-content li:last-child {
    margin-bottom: 0;
  }

  .markdown-content li strong {
    color: var(--text);
  }

  /* Links no texto das aulas: azuis e sublinhados, para se distinguirem do texto
     (o reset da camada base deixa <a> sem cor e sem sublinhado). */
  .markdown-content a {
    color: var(--primary);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 0.18em;
  }

  .markdown-content a:hover {
    text-decoration-thickness: 2px;
  }

  /* ---- tabelas ---- */
  .table-wrap {
    overflow-x: auto;
    margin: 1.25rem 0;
    border: 1px solid var(--border);
    border-radius: var(--radius-item);
  }

  .markdown-content table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.92rem;
  }

  .markdown-content th,
  .markdown-content td {
    padding: 0.7rem 0.9rem;
    border-bottom: 1px solid var(--border);
    text-align: left;
    vertical-align: top;
  }

  .markdown-content thead th {
    background: var(--surface-alt);
    color: var(--secondary);
    font-weight: 700;
  }

  .markdown-content tbody tr:last-child td {
    border-bottom: none;
  }

  /* ---- diagramas Mermaid ---- */
  .diagram {
    margin: 1.25rem 0;
    background: var(--surface-tint);
    border: 1px solid var(--border);
    border-radius: var(--radius-card);
    padding: 1rem;
  }

  .diagram svg {
    width: 100%;
    height: auto;
    border-radius: var(--radius-item);
  }

  .content-error {
    color: var(--danger);
    font-weight: 700;
  }

  /* ---- Resumo: competências como cartões e checklist de autoavaliação ---- */
  .summarize .markdown-content ul,
  .sources-section .markdown-content ul {
    list-style: none;
    padding: 0;
    display: grid;
    gap: 0.8rem;
  }

  .summarize .markdown-content li {
    position: relative;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-item);
    padding: 0.9rem 1rem 0.9rem 2.8rem;
  }

  .summarize .markdown-content li::before {
    content: "✓";
    position: absolute;
    left: 1rem;
    top: 0.9rem;
    color: var(--success);
    font-weight: 800;
  }

  /* Especificidade maior de propósito: precisa vencer .summarize .markdown-content li
     (acima) dentro da mesma camada. */
  .summarize .markdown-content .self-check-list li {
    padding: 0;
    border: none;
    background: transparent;
  }

  .summarize .markdown-content .self-check-list li::before {
    content: none;
  }

  .self-check-item {
    display: flex;
    align-items: flex-start;
    gap: 0.75rem;
    padding: 0.75rem 1rem;
    border: 1px solid var(--border);
    border-radius: var(--radius-item);
    background: var(--surface);
    cursor: pointer;
    transition: border-color 0.2s ease, background 0.2s ease;
  }

  .self-check-item:hover {
    border-color: var(--primary-line);
  }

  .self-check-item input[type="checkbox"] {
    flex-shrink: 0;
    width: 1.15rem;
    height: 1.15rem;
    margin-top: 0.15rem;
    accent-color: var(--success);
    cursor: pointer;
  }

  .self-check-item:has(input:checked) {
    background: rgba(15, 159, 110, 0.06);
    border-color: rgba(15, 159, 110, 0.3);
  }

  .self-check-item:has(input:checked) span {
    color: var(--muted);
    text-decoration: line-through;
    text-decoration-color: rgba(15, 159, 110, 0.6);
  }

  /* ---- Aprofundamento: lista de fontes ---- */
  .sources-section .markdown-content li {
    color: var(--muted);
  }

  .sources-section .markdown-content li a {
    color: var(--primary);
    font-weight: 700;
    text-decoration: none;
  }

  .sources-section .markdown-content li a:hover {
    text-decoration: underline;
  }

  @media (max-width: 760px) {
    .diagram {
      overflow-x: auto;
    }

    .diagram svg {
      width: auto;
      min-width: 480px;
      max-width: none;
    }

  }
}

/* ==========================================================================
   7. utilities — acessibilidade e preferências do usuário
   ========================================================================== */
@layer utilities {
  /* Texto acessível a leitores de tela e invisível na tela. Hoje sem uso nas
     páginas, mantido como ferramenta padrão de acessibilidade. */
  .sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
  }

  /* ---- impressão ----
     Imprimir uma sessão saía quase vazio (as aulas ficam recolhidas). No papel: tudo expandido, sem
     cabeçalho, navegação e controles, fundo branco e texto preto em qualquer tema (a paleta de
     impressão é um terceiro conjunto dos mesmos tokens), sem quebrar tabela, diagrama ou código no
     meio e com o endereço dos links externos visível. Uma página A4 tem menos de 760px de largura
     útil, então as regras do ponto de quebra móvel também valem aqui. */
  @media print {
    :root,
    :root[data-theme="dark"],
    :root:not([data-theme]) {
      color-scheme: light;

      --bg: #ffffff;
      --surface: #ffffff;
      --surface-alt: #f1f3f6;
      --surface-tint: #ffffff;
      --primary: #1d4ed8;
      --primary-strong: #123bb3;
      --primary-tint: #e8eefc;
      --primary-line: #9fb3e6;
      --primary-line-strong: #9fb3e6;
      --on-primary: #ffffff;
      --secondary: #000000;
      --text: #000000;
      --muted: #333333;
      --border: #c4c9d2;
      --border-mid: #c4c9d2;
      --border-strong: #c4c9d2;
      --success: #0b6e4d;
      --on-success: #ffffff;
      --header-bg: #ffffff;
      --glass: #ffffff;
      --glass-strong: #ffffff;
      --gradient-end: #ffffff;
      --code-bg: #f1f3f6;
      --code-text: #000000;
      --code-inline-bg: #f1f3f6;
      --shadow: none;
      --shadow-mid: none;
      --shadow-soft: none;
    }

    @page {
      margin: 16mm 14mm;
    }

    html {
      scroll-behavior: auto;
    }

    body {
      font-size: 11pt;
      line-height: 1.5;
    }

    .skip-link,
    .site-header,
    .breadcrumb,
    .topic-nav,
    .lesson-chevron,
    .lesson-actions,
    .lesson-toc,
    .lesson-complete-bar,
    .lesson-footer-nav,
    .self-check-item input,
    .hero-actions,
    .progress-bar,
    .card-actions,
    #progresso,
    .search-form,
    .concept-panel__close {
      display: none;
    }

    /* aulas, Aprofundamento e Resumo impressos por inteiro, mesmo recolhidos na tela */
    .lesson-content {
      display: block;
    }

    .container {
      width: auto;
    }

    .page-shell,
    .hero {
      padding: 0;
    }

    .content-section,
    .sources-section,
    .summarize {
      margin: 0 0 1.5rem;
      padding: 0;
      border: 0;
      border-radius: 0;
    }

    h1 {
      font-size: 20pt;
    }

    .lesson-heading h2 {
      font-size: 15pt;
    }

    .markdown-content h3 {
      font-size: 12pt;
    }

    h1,
    h2,
    h3,
    .lesson-heading {
      break-after: avoid;
    }

    pre,
    blockquote,
    .diagram,
    .table-wrap,
    tr,
    .session-card,
    .self-check-item {
      break-inside: avoid;
    }

    pre {
      white-space: pre-wrap;
      overflow-wrap: anywhere;
    }

    pre,
    .table-wrap,
    .diagram {
      overflow: visible;
    }

    .diagram svg {
      width: 100%;
      min-width: 0;
      max-width: 100%;
    }

    /* As cores do Mermaid ficam gravadas no SVG no tema da tela; no escuro, inverte para o papel. */
    :root[data-theme="dark"] .diagram svg {
      filter: invert(1) hue-rotate(180deg);
    }

    .markdown-content a[href^="http"]::after {
      content: " (" attr(href) ")";
      color: var(--muted);
      font-size: 0.85em;
      font-weight: 400;
      overflow-wrap: anywhere;
    }
  }

  @media (prefers-reduced-motion: reduce) {
    html {
      scroll-behavior: auto;
    }

    .skip-link,
    .button,
    .theme-toggle,
    .lesson-check,
    .progress-bar__fill,
    .session-card,
    .topic-nav a,
    .lesson-chevron,
    .lesson-chevron::before,
    .lesson-return,
    .self-check-item {
      transition: none;
    }
  }
}
