Extra Documentação Técnica com Markdown • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 11.1 — Correção de Hierarquia Semântica de Cabeçalhos

Contexto: Um autor novato estruturou um arquivo pulando níveis de cabeçalhos (# para ### e depois #####). Corrija a estrutura para atender às diretrizes de acessibilidade WCAG 2.1.

Requisitos de Execução:

  1. Garantir que exista apenas um # H1 no documento.
  2. Manter as seções principais em ## H2.
  3. Manter as subseções em ### H3 sem pular níveis.

Resultado Esperado

# Guia de Instalação do PostgreSQL

## Pré-requisitos de Sistema

### Requisitos de Memória e CPU
O servidor necessita de no mínimo 4 GB de RAM.

## Procedimento de Instalação no Linux

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_11_1_SeuNome.md
  2. Envie na tarefa: Atividade Cap 11 - Acessibilidade e Redação Técnica
🔑 Gabarito de Código & Solução Comentada
# Guia de Instalação do PostgreSQL

## Pré-requisitos de Sistema

### Requisitos de Memória e CPU
O servidor necessita de no mínimo 4 GB de RAM.

## Procedimento de Instalação no Linux

Comentário: A navegação por teclado em leitores de tela depende da progressão contígua de níveis (H1 -> H2 -> H3). Pular de H1 para H3 desorienta usuários cegos.


🎯 Nível 2: Prática

Problema 11.2 — Refatoração de Textos Alternativos (Alt Text)

Substitua três instâncias de alt text genéricos (![imagem 1](...), ![screenshot](...), ![diagrama](...)) por descrições funcionais e contextuais de alta qualidade.

🔑 Gabarito de Código & Solução Comentada
<!-- Antes: ![imagem 1](login.png) -->
![Tela de login do sistema com campos de e-mail corporativo, senha e botão verde Entrar](assets/login.png)

<!-- Antes: ![screenshot](dashboard.png) -->
![Painel de métricas exibindo gráfico de linha com tráfego HTTP diário atingindo 12.000 requisições](assets/dashboard.png)

<!-- Antes: ![diagrama](arquitetura.png) -->
![Diagrama de arquitetura conectando o cluster Kubernetes ao banco de dados relacional via VPC privada](assets/arquitetura.png)

🎯 Nível 3: Integração

Problema 11.3 — Eliminação do Antipattern “Clique Aqui”

Reescreva um conjunto de 3 instruções técnicas eliminando a expressão genérica “clique aqui”, transformando os próprios links em frases de ação autoexplicativas.

🔑 Gabarito de Código & Solução Comentada
<!-- Versão Inacessível:
Para baixar o certificado SSL clique aqui. Para ler a política de privacidade clique aqui. -->

<!-- Versão Acessível: -->
Faça o [download do certificado digital raiz ICP-Brasil em formato CRT](https://exemplo.org/cert.crt).

Para detalhes sobre governança de dados pessoais, consulte a nossa [Política de Privacidade e Conformidade com a LGPD](https://exemplo.org/privacidade).

🎯 Nível 4: Desafio

Problema 11.4 — Linter de Acessibilidade em Markdown com Python

Construa um script em Python que inspecione arquivos Markdown e emita advertências caso encontre:

  1. Imagens com alt text vazio (![]()) ou genérico (“imagem”, “foto”, “print”).
  2. Links cujo texto seja “clique aqui”, “aqui” ou “link”.
  3. Saltos ilegais de cabeçalho (ex: H1 para H3).
🔑 Gabarito de Código & Solução Comentada
# markdown_a11y_linter.py
import re

def auditar_acessibilidade_md(caminho_arquivo):
    problemas = []
    with open(caminho_arquivo, "r", encoding="utf-8") as f:
        linhas = f.readlines()
        
    nivel_anterior = 0
    for num, linha in enumerate(linhas, 1):
        # 1. Checar Cabeçalhos
        m_head = re.match(r"^(#{1,6})\s+", linha)
        if m_head:
            nivel = len(m_head.group(1))
            if nivel_anterior > 0 and nivel > nivel_anterior + 1:
                problemas.append(f"Linha {num}: Salto ilegal de cabeçalho de H{nivel_anterior} para H{nivel}!")
            nivel_anterior = nivel
            
        # 2. Checar Links Inacessíveis
        for m in re.finditer(r"\[(.*?)\]\((.*?)\)", linha):
            texto = m.group(1).strip().lower()
            if texto in ["aqui", "clique aqui", "saiba mais", "link"]:
                problemas.append(f"Linha {num}: Link inacessível encontrado: '{texto}'")
                
        # 3. Checar Alt Text de Imagens
        for m in re.finditer(r"!\[(.*?)\]\((.*?)\)", linha):
            alt = m.group(1).strip().lower()
            if not alt or alt in ["imagem", "foto", "screenshot", "print"]:
                problemas.append(f"Linha {num}: Alt text de imagem ausente ou genérico: '{alt}'")
                
    return problemas