# Checklist — Alinhamento de controles e perímetro

Referência vertical: `references/guia-alinhamento-vertical.pdf`. Evidência de perímetro: `reports/edge-alignment-reference-v1.5.md`.

## Estrutura

- [ ] Ícone e label são elementos separados
- [ ] Container usa `inline-flex` e `align-items: center`
- [ ] Gap usa token
- [ ] Altura e padding vertical pertencem ao container

## Ícone

- [ ] Não usa `translateY`, `top` ou margem vertical para compensação
- [ ] Possui caixa previsível
- [ ] Asset não contém espaço transparente indevido
- [ ] Ícone decorativo usa `aria-hidden="true"`

## Label

- [ ] Usa `display: block`
- [ ] Usa `line-height: 1` como fallback apropriado
- [ ] Usa `white-space: nowrap` quando o controle é de uma linha
- [ ] Usa `overflow: visible`
- [ ] Não possui padding ou borda vertical
- [ ] Recebe `text-box` somente dentro de `@supports`

## Insets verticais e margens

- [ ] Todo componente declara eixo inline e eixo block; não documente apenas a horizontal
- [ ] Inset interno pode ser simétrico nas arestas relevantes; margem externa pertence ao layout pai
- [ ] Não force margem superior/inferior igual à lateral: leitura, stack e proximidade podem exigir ritmos diferentes
- [ ] Em controles centralizados, derive o inset vertical de altura, borda e caixa do conteúdo
- [ ] Apresente a medição vertical ao lado da horizontal no specimen de anatomia

## Perímetro de superfícies aninhadas

- [ ] Identifique o último elemento visual antes de cada canto da superfície
- [ ] Compare os insets nas duas ou três arestas adjacentes
- [ ] Mantenha delta geométrico zero; aceite até 0,1px CSS somente por serialização subpixel
- [ ] Resolva por padding, gap, tamanho e layout do container
- [ ] Não use `transform`, offsets posicionais ou margens negativas no elemento nem em sua cadeia até o frame
- [ ] Preserve a forma e o inset em hover, focus, active, selected e disabled
- [ ] No menu lateral persistente, o frame começa a 0px do inline-start; gutter do conteúdo principal não pode deslocá-lo
- [ ] O conteúdo principal preserva gutters lógicos simétricos: divisor→conteúdo = conteúdo→viewport, com delta ≤0,5px
- [ ] Padding start 7px e end 6px + divisor 1px devem produzir superfície a 7/7px do frame
- [ ] Hover, foco e ativo mantêm Squircle/fallback 16px na navegação; estado não altera curva ou radius
- [ ] O rail de 49px mantém superfície quadrada de 36px/44px, glyph central e eixo horizontal invariável em 24px sem compensação
- [ ] Não force concentricidade quando o elemento não for adjacente ao canto
- [ ] No Composer, a linha de ações mantém 9px nas laterais e na base; a borda reforçada não altera o box model
- [ ] Em menus, compare o slot do primeiro ícone com as bordas superior e esquerda do frame
- [ ] Em menus, a primeira e a última superfície mantêm 7px até topo, laterais e base; o glyph 20px fica em 15/15px após a normalização de altura 36px e padding inline 8px
- [ ] A referência legada produz glyph 16/15px por usar padding de bloco 9px e inline-start 8px. O Baluarte governa a normalização de bloco 9→8 para eliminar o delta sem offsets
- [ ] O radius legado do item de Menu 10px converge para o próximo raio oficial `--b-radius-3xl` 24px, após ensaio com os 16px da navegação lateral; esta é migração de shape, não divergência de inset
- [ ] Item de Menu usa fonte 14px/400, ícone 20px e gap 8px como o menu lateral; label mantém linha compacta de 20px e padding inline 8px para preservar glyph 15/15 e perímetro
- [ ] No Picker, compare as laterais do upload com a borda externa, incluindo a borda de 1px
- [ ] No Media Card, o footer em bloco deve terminar com insets iguais à esquerda, direita e base

### Fórmula

Para um descendente adjacente ao canto inferior direito:

```text
abs(inset-inline-end - inset-block-end) <= 0.1px
```

Quando três arestas são relevantes, como em uma toolbar ou tile centralizado:

```text
max(insets relevantes) - min(insets relevantes) <= 0.1px
```

## Teste

- [ ] Fonte final carregada antes da captura
- [ ] Displays 28–64px usam peso 500; títulos 18–24px usam 550; não há síntese de peso
- [ ] PT-BR longo e ar/he/ja/ko/zh não cortam glyphs, não criam overflow e preservam leading/tracking normativos
- [ ] Strings com acentos e descendentes testadas
- [ ] Zoom 100%, 125% e 200% testado
- [ ] Chrome, Safari e Firefox considerados
- [ ] Hit area e coordenada do ícone permaneceram estáveis
- [ ] Sem corte de acentos ou descendentes
- [ ] Paridade validada em 320px, mobile, desktop, altura curta, browser page scale 200%, claro/escuro e conteúdo longo
- [ ] Elemento permanece contido e alvo interativo mantém ao menos 32px no modo compacto
- [ ] Medição registrada por `scripts/audit_edge_alignment.py`
