← Notas

Tudo o que uma nota pode conter

Esta nota é um inventário. Serve para verificar que todos os elementos de composição funcionam como esperado — tipograficamente, estruturalmente, semanticamente. Não é para publicar, é para ver.

Fica aqui como referência permanente. Quando se adiciona um novo elemento ao sistema, testa-se aqui primeiro.

Cabeçalhos

Os cabeçalhos estabelecem hierarquia. O h1 é o título da nota e não aparece no corpo. Aqui começa no h2.

Nível 3

Usado para subsecções dentro de uma secção principal.

Nível 4

A partir daqui, o estilo muda: caixa alta, espaçamento de letras, mesmo tamanho que o corpo. Sinal de aviso tipográfico.

Nível 5

Raramente justificável. Se chegares aqui, questiona a estrutura.

Nível 6

O fundo do poço hierárquico. Usa-o e questiona-te.

Texto e formatação inline

Parágrafo normal, com espaçamento vertical entre parágrafos sucessivos. O corpo de texto usa a escala fluida definida nos tokens — cresce ligeiramente entre viewport estreita e larga, sem saltos.

Segundo parágrafo, para verificar o espaçamento. Negrito para ênfase forte. Itálico para ênfase suave, títulos de obras, ou termos estrangeiros. Negrito e itálico em simultâneo, usado com parcimónia. código inline dentro de uma frase, para referir identificadores, comandos, ou valores.

Texto com riscado, para conteúdo revogado ou corrigido que convém manter visível.

Texto com destaque, equivalente ao marca-texto. Texto com eliminado e inserido para rastreabilidade de alterações. Referências com CSS onde a expansão acrescenta valor.

Expoentes: E = mc2. Índices: H2O. Combinados: CO2 a 400 ppm é já [citação necessária].

Atalhos de teclado: pressiona + K para abrir o palete de comandos. Ou Ctrl + Shift + P no Windows.

Listas

Lista não ordenada simples

  • Primeiro item
  • Segundo item
  • Terceiro item

Lista com vários níveis

  • Primeiro nível
    • Segundo nível
    • Outro item no segundo nível
      • Terceiro nível
        • Quarto nível — aqui o outline colapsa por defeito
        • Mais um no quarto
      • De volta ao terceiro
    • De volta ao segundo
  • De volta ao primeiro

Lista ordenada

  1. Abre o terminal
  2. Navega para o directório do projecto
  3. Corre npm run build
  4. Verifica o output em _site/
  5. Faz deploy se tudo estiver bem

Lista ordenada com sublista mista

  1. Escolhe uma abordagem
    • Abordagem A: rápida, frágil
    • Abordagem B: lenta, robusta
  2. Implementa com testes
  3. Documenta as decisões

Lista de definições (HTML em Markdown)

Design system
Um conjunto de decisões documentadas, componentes reutilizáveis, e princípios que tornam o design consistente à escala.
Token
Um valor nomeado que representa uma decisão de design — cor, espaçamento, tipografia — independente da sua implementação concreta.
Grelha
A estrutura invisível que torna a disposição de elementos previsível e audível.

Lista de tarefas

Citações

Uma citação simples:

O que não está documentado não existe. O que existe sem documentação é acidente.

Uma citação mais longa, com atribuição manual:

A tipografia tem uma função antes de ter uma forma. A legibilidade não é uma restrição — é o ponto de partida. Qualquer decisão que não serve o conteúdo serve apenas o designer.

— Emil Ruder, Typographie als Ausdruck, 1959

Citação aninhada:

Perguntaram-lhe o que era o design.

"É a intenção tornada visível", respondeu.

Ninguém ficou satisfeito com a resposta. Ele também não.

Código

Código inline

Usa const em vez de let quando o valor não muda. O selector .note-body aplica estilos de prosa. A propriedade --text-base é um token CSS.

Bloco de código — CSS

/* Escala tipográfica fluida */
:root {
  --text-sm:      clamp(0.875rem, 0.825rem + 0.25vw, 1rem);
  --text-base:    clamp(1rem,     0.95rem  + 0.25vw, 1.125rem);
  --text-lg:      clamp(1.25rem,  1.1rem   + 0.65vw, 1.625rem);
  --text-xl:      clamp(1.875rem, 1.5rem   + 1.5vw,  2.75rem);
  --text-display: clamp(3rem,     2.25rem  + 3vw,    5.5rem);
}

Bloco de código — JavaScript

// Wikilink resolver — transforma título em <a href="...">
function resolveWikilinks(content, pages) {
  const pageMap = new Map(
    pages
      .filter(p => p.data.title && p.page.url)
      .map(p => [p.data.title.toLowerCase(), p.page.url])
  );

  return content.replace(/\[\[([^\]]+)\]\]/g, (_, title) => {
    const url = pageMap.get(title.toLowerCase());
    return url ? `<a href="${url}">${title}</a>` : title;
  });
}

Bloco de código — HTML

<!DOCTYPE html>
<html lang="pt">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>tavar.es</title>
  </head>
  <body>
    <a href="#main" class="skip-link">Saltar para o conteúdo</a>
    <main id="main">
      <h1>Olá.</h1>
    </main>
  </body>
</html>

Bloco de código — Bash

# Build e verificação de acessibilidade
npm run build && npm run check:a11y

# Servir localmente com hot reload
npx @11ty/eleventy --serve --port=8080

Bloco de código — Python

def encode_email(email: str, key: int = 23) -> str:
    """XOR-encode an email address for obfuscation in HTML."""
    return "".join(
        format(ord(c) ^ key, "02x")
        for c in email
    )

Bloco de código — JSON

{
  "name": "tavar.es",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "build": "eleventy",
    "start": "eleventy --serve"
  }
}

Bloco de código sem linguagem

Texto pré-formatado sem highlighting.
Útil para output de terminal, logs, ou conteúdo ASCII.

    ┌─────────────────────────────┐
    │  nome          tipo         │
    │  ──────────    ────────     │
    │  --text-sm     clamp()      │
    │  --text-base   clamp()      │
    └─────────────────────────────┘

Tabelas

Tabela simples

Propriedade Valor
Tipografia Hanken Grotesk
Cor de fundo var(--color-bg)
Cor de texto var(--color-text)
Accent var(--color-accent)

Tabela com múltiplas colunas e alinhamento

Elemento Tag HTML Markdown Notas
Cabeçalho <h2><h6> ######## h1 reservado para o título
Parágrafo <p> linha em branco Não requer sintaxe especial
Negrito <strong> **texto** Ênfase semântica forte
Itálico <em> *texto* Ênfase semântica suave
Código <code> `texto` Inline; <pre> para blocos
Citação <blockquote> > texto Pode ser aninhado
Tabela <table> pipes | GFM; sem colspan/rowspan
Tarefa <input> - [ ] Via markdown-it-task-lists
Nota de rodapé <sup> [^ref] Via markdown-it-footnote

Tabela com alinhamento de colunas

Coluna esquerda Coluna centrada Coluna direita
texto texto texto
mais texto mais texto mais texto
longo conteúdo longo cont. longo conteúdo

Imagens

Imagem simples (sem legenda)

FLORA-E-commerce Product Photo-db3c832d

Imagem com legenda

Uma figura no deserto — fotografia de produto fora de contexto, o que a torna mais honesta.
Uma figura no deserto — fotografia de produto fora de contexto, o que a torna mais honesta.

Imagem com largura explícita

FLORA-E-commerce Product Photo-db3c832d

Ligações

Wikilink para outra nota

Esta nota relaciona-se com design como prática e com linguagem no design.

Ligação externa explícita

Eleventy — documentação oficial

URL exposta (linkificada automaticamente)

https://www.w3.org/WAI/WCAG22/Understanding/

Ligação de email (obfuscada automaticamente no build)

Podes contactar-me em .

Divisória horizontal

Uma regra horizontal dentro do corpo de uma nota tem estilo diferente da regra que separa secções de layout — é tracejada e mais fina.

Após a regra.

Notas de rodapé

O sistema de notas de rodapé[1] é gerido pelo plugin markdown-it-footnote.[2] As notas aparecem no fim da página, separadas do corpo por uma regra horizontal.[3]

Pode-se referenciar a mesma nota várias vezes.[1:1]

HTML em linha

Markdown permite HTML em linha quando nenhuma sintaxe Markdown cobre o caso.

Detalhes e sumário (disclosure widget)

Mostrar detalhes técnicos

Este conteúdo está escondido por defeito e expandido ao clicar. Útil para informação acessória que não deve sobrecarregar o fluxo principal.

Pode conter qualquer conteúdo HTML. Não é Markdown processado dentro de <details> por defeito no markdown-it — precisaria de configuração adicional.

Sup, sub, abbr, kbd, mark, del, ins

W3C define os padrões. O WCAG 2.2 é o nível mínimo de acessibilidade que este sítio cumpre.

Pressiona Tab para navegar entre elementos interactivos. Enter ou Espaço para activar. Escape para fechar diálogos.

O texto marcado a amarelo chama a atenção para partes específicas de uma citação ou listagem.

Versão 1.0 2.0 — a primeira foi removida, a segunda inserida.

E = mc2. A fórmula da água é H2O. Nota à margem*.

Tabela com células mais ricas

Comparação de abordagens de acessibilidade
Técnica Quando usar Evitar se
aria-label Elemento sem texto visível Há texto visível — usa aria-labelledby
aria-describedby Descrição adicional além do label A descrição é o label principal
role="alert" Mensagens urgentes e dinâmicas Conteúdo estático — usa semântica nativa

Conteúdo misto — tudo junto

Uma secção que mistura tipos de conteúdo como acontece numa nota real.

Ao rever o sistema de design, identifiquei três categorias de problemas[4]:

  1. Tokens sem uso — valores definidos mas nunca referenciados em componentes. Acumulam-se com o tempo.
  2. Componentes sem tokens — valores hardcoded em vez de variáveis. Difíceis de actualizar globalmente.
  3. Inconsistências de escala — espaçamentos que não pertencem a nenhuma escala definida.

A correcção passa por um processo iterativo:

  • Auditar o código existente (ver ferramentas que uso para a lista de ferramentas)
  • Mapear cada valor para o token mais próximo
  • Eliminar duplicados
  • Documentar excepções justificadas

A disciplina não é a ausência de exceções. É saber exactamente onde e porquê existem.

O estado actual do sistema:

Categoria Total Com token Sem token
Cores 24 24 0
Espaçamentos 18 15 3
Tipografia 12 12 0
Bordas 6 4 2

Os três espaçamentos e duas bordas sem token são excepções documentadas. Não são erros — são decisões.[4:1]


  1. Esta é uma nota de rodapé simples, referenciada múltiplas vezes no texto. ↩︎ ↩︎

  2. As notas de rodapé podem ter identificadores arbitrários — não precisam de ser números. O identificador não aparece no output; o que aparece é a sequência numérica gerada automaticamente.

    As notas de rodapé podem também ter vários parágrafos. Basta indentar o conteúdo adicional com quatro espaços ou um tab. Isto permite notas longas sem quebrar o fluxo do texto principal. ↩︎

  3. Esta é a terceira nota, mas o seu identificador é 3. A numeração no output é sempre sequencial, independentemente dos identificadores usados. ↩︎

  4. A auditoria foi feita manualmente com grep e uma folha de cálculo. Não é elegante mas funciona. Ferramentas sofisticadas introduzem complexidade; às vezes a complexidade certa é um terminal aberto. ↩︎ ↩︎