# Tipografia

Passo é a família principal (manual pp.17–18); Inter é a secundária digital (pp.19–20). Títulos e destaques institucionais usam Passo; menus, tabelas, formulários e operações usam Inter.

```css
--font-passo: "Passo", "Inter", system-ui, Arial, sans-serif;
--font-inter: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
```

A escala semântica (`--tp-type-display-lg` até `--tp-type-caption`) mapeia essas duas famílias em `src/css/style.css` e é exportada em `design-system/tokens.json`. Nenhum componente declara família diretamente: todos consomem `--tp-type-<nível>-family`.

## Passo: disponibilidade real

**A família Passo acompanha o pacote e é servida localmente.** Os arquivos vieram do pacote oficial `2024-07-01 Passo TrocaPontos.zip`, fornecido pela Troca Pontos, e foram convertidos de TTF desktop para WOFF sem alteração de contornos, tabelas `name` ou métricas.

| Arquivo em `src/fonts/passo/` | Origem | `usWeightClass` | Papel |
| --- | --- | ---: | --- |
| `Passo-Variable.woff` | `Desktop/Variable/PassoVariable.ttf` | eixo `wght` 100–800, eixo `ital` 0–1 | Fonte principal servida a navegadores com `font-variation-settings` |
| `Passo-Regular.woff` | `Desktop/TTF/Passo-Regular.ttf` | 400 | Fallback estático |
| `Passo-Medium.woff` | `Desktop/TTF/Passo-Medium.ttf` | 500 | Fallback estático |
| `Passo-SemiBold.woff` | `Desktop/TTF/Passo-SemiBold.ttf` | 600 | Fallback estático |
| `Passo-Bold.woff` | `Desktop/TTF/Passo-Bold.ttf` | 700 | Fallback estático |

Os `@font-face` ficam no bloco `TP:FONTS` de `src/css/style.css` — fonte única. O export reescreve as URLs e grava `design-system/fonts.css`, já embutido em `design-system/troca-pontos.css`; os binários são copiados para `design-system/assets/fonts/passo/`.

Os estáticos são declarados **antes** do variável. Um `@supports (font-variation-settings: normal)` redeclara a família apontando para o arquivo variável, que então prevalece: navegadores atuais baixam apenas 86 KB e cobrem toda a escala; os demais caem nos quatro estáticos.

### Limites conhecidos

- **Não há WOFF2.** A compressão Brotli exigida pelo formato não estava disponível no ambiente de build (`brotli` e `ttf2woff2` bloqueados pela política de egress). WOFF usa zlib e é suportado por todos os navegadores atuais; gerar WOFF2 reduziria cerca de 30–40% do tráfego e continua sendo a melhoria recomendada quando houver ambiente com Brotli.
- **Não há itálico declarado.** O eixo `ital` existe no arquivo variável, mas nenhum nível da escala usa itálico. Se for necessário, declare o itálico explicitamente em vez de deixar o navegador sintetizar.
- **"Black" é o nome que o manual dá ao arquivo ExtraBold — não há peso faltando.** Isto deixou de ser lacuna em 22/09/2026, quando as pp.17–18 chegaram em vetor: as linhas **rotuladas** "Passo Black" e "Passo Black Italic" estão **compostas** em `Passo-ExtraBold` e `Passo-ExtraBoldItalic`, lido do atributo `font-family` do próprio SVG. A arte do manual usa ExtraBold onde o texto escreve Black. `--font-weight-black: 800` está exatamente certo, e não por concessão: 900 não existe no manual nem no pacote.
- **Thin (250) e ExtraLight (270)** existem no pacote mas não foram distribuídos: nenhum nível da escala os usa, e o intervalo `100 800` do arquivo variável já os cobre se vierem a ser necessários.

### Licença

**Confirmada em 22/09/2026 por Guilherme Sydow (resposta M1): a licença adquirida cobre o uso web com hospedagem própria e o uso embarcado em aplicativo.** A conversão para WOFF e a hospedagem própria estão cobertas, e a distribuição deixa de ser de uso interno restrito. O pacote inclui os PDFs de EULA (`Passo/EULA/`) como registro da origem. Nada é carregado de Google Fonts ou de qualquer outra origem externa. A pendência correspondente em `pendencias.md` está encerrada.

## Inter: estado atual

Inter **não** acompanha o pacote. O manual a referencia via `fonts.google.com`, e a licença (SIL OFL) permite hospedagem própria, mas os binários não puderam ser obtidos no ambiente de build, sem acesso de rede a `fonts.gstatic.com`.

Até que sejam adicionados, a stack cai em `system-ui` — Segoe UI no Windows, SF Pro no macOS/iOS, Roboto no Android — famílias de métrica próxima, o que mantém o layout estável. Para hospedar Inter:

1. coloque os arquivos em `src/fonts/inter/`;
2. acrescente os `@font-face` correspondentes ao bloco `TP:FONTS` de `src/css/style.css`, no mesmo padrão da Passo;
3. **decida o eixo `opsz` antes de escrever os `@font-face`** — ver abaixo;
4. rode `npm run tokens` — o export e o núcleo portátil passam a incluí-los automaticamente.

Nenhuma referência a arquivo inexistente foi deixada no CSS: não há requisição quebrada enquanto Inter não estiver presente.

### Tamanho óptico: um requisito registrado, não uma mudança feita

As pp.19–20 em vetor não especificam "Inter": especificam **três subfamílias por tamanho óptico** — **Inter 18 pt, Inter 24 pt e Inter 28 pt** —, cada uma em seis pesos (Thin, Light, Regular, Medium, Bold, Black) com os itálicos correspondentes. Os espécimes estão compostos nessas subfamílias, não numa família única.

O projeto trata Inter como família única, e a stack `"Inter", system-ui, …` não pede tamanho óptico. **Isso não foi alterado agora, e por um motivo concreto: sem binário local não há subfamília a selecionar** — trocar a stack só produziria um nome que nenhum arquivo atende, e o `system-ui` de fallback não tem eixo `opsz`. Mudar a `font-family` hoje seria escrever uma norma que a página não cumpre.

O que fica é o requisito, preso ao passo em que ele se torna acionável: quando a Inter for hospedada, os `@font-face` precisam trazer o eixo `opsz` (ou as três subfamílias estáticas), e a escala semântica precisa dizer qual degrau usa qual — a escolha natural é `opsz` variável com `font-optical-sizing: auto`, que é o que a Inter moderna publica num único arquivo.

## Verificação executada

Com o portal servido em navegador real (Chromium), `document.fonts.check('700 16px Passo')` retornou verdadeiro e as cinco `@font-face` foram registradas, em tema claro e escuro, nas larguras 360, 768 e 1440 px, sem erro de console e sem requisição falha. A renderização da Passo foi confirmada visualmente nas capturas de `evidencias/`. Páginas que não usam a família não a baixam — comportamento esperado de `font-display: swap` com carregamento sob demanda, não falha.

## A família `Igual` da p.09 — pendência, não adoção

Uma terceira família aparece no guia em vetor: **`Igual`**. A p.09 ("Cuidados na veiculação") é a **única** prancha cujo título de display e cujo corpo estão compostos em `Igual-Medium` / `Igual-Regular`; todos os outros divisores — pp.03, 15, 16, 21 — usam `Passo-Medium` no mesmo slot de 48 px.

**Não foi adotada.** Uma família que aparece uma vez, num divisor de capítulo, contra quatro divisores irmãos que usam a família oficial, tem muito mais cara de resíduo do arquivo de origem do que de terceira família institucional — e adotá-la por conta própria seria inventar norma a partir de um provável acidente. Mas ela está no vetor entregue, então também não pode simplesmente ser ignorada: fica registrada como **pendência M8**, a confirmar com a marca, para que ninguém a trate como canônica antes disso nem a apague sem perguntar.

## Fora da web

Google Docs/Slides: Arial como substituição operacional. Microsoft 365: Aptos ou Arial. Os templates de e-mail usam Arial por previsibilidade entre clientes — webfont não é confiável em e-mail. Essas alternativas não alteram a identidade oficial e não criam famílias novas.
