/* Material Symbols Outlined — self-hosted (fonte variável opsz/wght/FILL/GRAD).
 * Iconografia única do portal_spa (ADR-0019). Baixada do Google Fonts e servida
 * localmente — ZERO rede externa (CSP/offline). Licença Apache 2.0.
 * O woff2 é a instância variável (weight 100..700); os eixos são controlados
 * via font-variation-settings na classe .ms (ver assets/css/input.css).
 *
 * É um SUBSET: 227 ligaduras, não os 4267 ícones da família. Ícone fora do
 * subset não renderiza — o browser mostra o NOME por extenso ("storefront"),
 * sem erro no console. Regenerado em 2026-07-30 (SPEC-PLAN-014, +2 pedidos:
 * `report` e `inventory_2`; o `report_gmailerrorred` veio de brinde, porque
 * compartilha o prefixo de ligadura) — antes em 2026-07-30 (SPEC-PLAN-006, +9:
 * `rv_hookup`, `speed_1_5`, `sports_score`, `mark_chat_read`,
 * `assignment_turned_in`, `subdirectory_arrow_right`, `water_drop`, `toll`,
 * `hotel`) e em 2026-07-28 (+ `show_chart`, SPEC-PLAN-012).
 *
 * ⚠️ `inventory_2` (menu → Produtos) estava AUSENTE desde o commit que criou o
 * app: o item desenhava o NOME em 176px. Achado na validação em navegador da
 * SPEC-PLAN-013 e corrigido nesta regeneração.
 *
 * **A política é REGENERAR, não substituir** (decisão do usuário, 2026-07-30):
 * ícone novo que o desenho pede entra no subset; não se troca o ícone certo por
 * um "que já existe". O custo é ~0,7 KB por ícone.
 *
 * ⚠️ **O arquivo NÃO tem hash no nome** — depois de regenerar, o browser continua
 * servindo o woff2 em cache e os ícones novos aparecem como TEXTO. Isso já
 * confundiu a validação aqui: o arquivo estava correto (224 ligaduras conferidas
 * com fontTools) e a tela mostrava "rv_hookup" por extenso. Hard refresh
 * (Ctrl+Shift+R) resolve em dev; em produção, conferir a política de cache do
 * nginx para `/static/vendor/fonts/`. Para testar sem depender do cache, carregue
 * a fonte com cache-buster via FontFace API e meça a largura (ver a rule do DS).
 *
 * ⚠️ Ao INVENTARIAR as ligaduras do woff2 atual (passo 1), NORMALIZE o nome do
 * glifo: o fontTools grafa `_` como "underscore" e dígito por extenso
 * (`local_gas_station` sai `localunderscoregasunderscorestation`;
 * `inventory_2` sai `inventory_two`). Sem normalizar, a conferência acusa
 * FALSO NEGATIVO — parece que 8 ícones em uso sumiram do subset quando só 1
 * faltava de verdade.
 *
 * ── COMO REGENERAR (ao usar um ícone novo) ───────────────────────────────
 *  1. Inventariar os nomes já presentes + os novos (as ligaduras do woff2
 *     atual são a fonte da verdade do que existe hoje — extrair com fontTools
 *     e UNIR aos novos, senão a regeneração APAGA ícone em uso);
 *  2. baixar a fonte completa (URL no CSS de fonts.googleapis.com) e o mapa
 *     oficial nome→codepoint (`*.codepoints` do repo google/material-design-icons);
 *  3. pyftsubset completa.woff2 \
 *       --unicodes-file=<codepoints dos ícones + letras a-z e _> \
 *       --layout-features+=liga,dlig,rlig,calt \
 *       --no-layout-closure \
 *       --flavor=woff2 --output-file=material-symbols-outlined.woff2
 *
 *  `--no-layout-closure` é OBRIGATÓRIO: sem ele a closure de ligaduras vê as
 *  letras a-z no conjunto, conclui que QUALQUER ligadura pode se formar e
 *  devolve a família inteira (3,6 MB em vez de ~100 KB). */
@font-face {
    font-family: 'Material Symbols Outlined';
    font-style: normal;
    font-weight: 100 700;
    font-display: block;
    src: url("material-symbols-outlined.3dc0bfdf336c.woff2") format('woff2');
}
