PABX Design System
A fonte-da-verdade canônica do design system e das regras de Angular Material do DRCALL PABX
vive dentro desta skill, em:
references/angular-material.md
O documento viaja junto com a skill: ao (re)instalar a skill num projeto/branch, a pasta
references/ é copiada junto, então a referência está sempre disponível — sem depender de
nenhum arquivo externo (IDE, .cursor, etc.). Leia e edite direto em references/angular-material.md.
Três armadilhas desta base que já custaram retrabalho
- Classe do design system que colide com o Bootstrap global.
src/_bootstrap-utilities.scss é
importado por styles.scss e define .btn-secondary, .btn-danger, .btn, .close,
.dropdown-item, .nav-link e outras com :hover. Sobrescrever uma delas sem declarar o
:hover deixa o hover nas mãos do Bootstrap — o botão fica ilegível no tema claro. O gate
tails/complete-bootstrap-override reprova. Ver o bloco .btn-secondary na referência.
.btn-primary-green / .btn-secondary / .data-table NÃO são globais — cada componente
redeclara no próprio CSS. Sem isso o botão nasce preto e a tabela sem estilo.
--mat-sys-primary não existe neste app (resolve para vazio). Para link, usar a classe
global .link.
Convenções de UX obrigatórias no módulo de tickets
Aprendidas nas F05–F07 e válidas para toda feature nova do módulo (fonte canônica: a seção
"Convenções de UX obrigatórias" em docs/cadastro_ticket/prd_ticket_module.md):
- Card de ajuda (
help_outline na linha do título → diálogo "Como … funciona") em todo
componente com regra não óbvia. Explicar o que o usuário não tem como adivinhar.
- Resolver a tarefa no próprio componente: sugestões calculadas do contexto + busca local, em vez
de mandar o operador sair da tela e voltar com um identificador. Ação impossível aparece
desabilitada com o motivo no tooltip, não falha no clique.
- Consultar sem perder contexto: referência a outra entidade é âncora
routerLink (ganha
Ctrl+clique) e tem prévia em diálogo.
- Operação em lote reporta o que fez e o que preservou, com o motivo de cada item.
Quando usar
- Ao criar ou reformular qualquer componente/tela do
apps/frontend: leia
references/angular-material.md antes de escrever HTML/CSS e siga os padrões (page shell,
table-section, dash-card, diálogos compactos, tokens --mat-sys-*/--app-*, convenção de
botões .btn-primary-green/.btn-secondary, etc.).
- Ao revisar UI: confira o código contra a lista de anti-padrões do documento.
- Como base do gate
styles-frontend: o subconjunto determinístico dessas regras é verificado
automaticamente sobre os arquivos alterados —
uso de color=, API matButton, mat-paginator, .component.scss, !important em tokens,
aria-label em mat-icon-button, cor hardcoded (advisory), diálogo com mat-form-field cujo
styleUrls não declara --mat-form-field-container-height e página de listagem paginada sem
tails-filter-drawer. As regras subjetivas/visuais (densidade, hierarquia, estética) não são
gate — ficam como guia e são checadas via verificação visual (browser-MCP), conforme a seção
"Visual Verification" do documento.
Ao auditar uma tela existente (retrofit)
Não conclua conformidade por grep. As classes registram a intenção; só os valores computados
provam a aplicação — num retrofit real, todos os 6 diálogos de um módulo tinham a estrutura
correta e renderizavam campos de 48px em vez dos 38px da especificação, porque nenhum CSS declarava
o token. Leia as seções "Audit by value, not by class presence" e "Measurement recipes" antes
de auditar, e meça no browser cada regra numérica (alturas, fontes, paddings).
1---2name: pabx-design-system3description: Fonte-da-verdade do design system do DRCALL PABX (Angular Material M3, aesthetic compacto/profissional). Use ao criar ou revisar qualquer UI do frontend — páginas, tabelas, dashboards, formulários, diálogos — para seguir tipografia, espaçamento, tokens de cor, padrões de página/tabela/dashboard e os anti-padrões proibidos. É também a base do gate styles-frontend e da verificação visual.4---56# PABX Design System78A fonte-da-verdade canônica do design system e das regras de Angular Material do DRCALL PABX9vive **dentro desta skill**, em:1011**`references/angular-material.md`**1213O documento viaja junto com a skill: ao (re)instalar a skill num projeto/branch, a pasta14`references/` é copiada junto, então a referência está sempre disponível — sem depender de15nenhum arquivo externo (IDE, `.cursor`, etc.). **Leia e edite direto em `references/angular-material.md`.**1617## Três armadilhas desta base que já custaram retrabalho18191. **Classe do design system que colide com o Bootstrap global.** `src/_bootstrap-utilities.scss` é20 importado por `styles.scss` e define `.btn-secondary`, `.btn-danger`, `.btn`, `.close`,21 `.dropdown-item`, `.nav-link` e outras **com `:hover`**. Sobrescrever uma delas sem declarar o22 `:hover` deixa o hover nas mãos do Bootstrap — o botão fica **ilegível no tema claro**. O gate23 `tails/complete-bootstrap-override` reprova. Ver o bloco `.btn-secondary` na referência.242. **`.btn-primary-green` / `.btn-secondary` / `.data-table` NÃO são globais** — cada componente25 redeclara no próprio CSS. Sem isso o botão nasce preto e a tabela sem estilo.263. **`--mat-sys-primary` não existe neste app** (resolve para vazio). Para link, usar a classe27 global `.link`.2829## Convenções de UX obrigatórias no módulo de tickets3031Aprendidas nas F05–F07 e válidas para toda feature nova do módulo (fonte canônica: a seção32"Convenções de UX obrigatórias" em `docs/cadastro_ticket/prd_ticket_module.md`):3334- **Card de ajuda** (`help_outline` na linha do título → diálogo "Como … funciona") em todo35 componente com regra não óbvia. Explicar o que o usuário não tem como adivinhar.36- **Resolver a tarefa no próprio componente**: sugestões calculadas do contexto + busca local, em vez37 de mandar o operador sair da tela e voltar com um identificador. Ação impossível aparece38 **desabilitada com o motivo no tooltip**, não falha no clique.39- **Consultar sem perder contexto**: referência a outra entidade é âncora `routerLink` (ganha40 Ctrl+clique) e tem prévia em diálogo.41- **Operação em lote reporta** o que fez e o que preservou, com o motivo de cada item.4243## Quando usar4445- Ao **criar ou reformular qualquer componente/tela** do `apps/frontend`: leia46 `references/angular-material.md` antes de escrever HTML/CSS e siga os padrões (page shell,47 `table-section`, `dash-card`, diálogos compactos, tokens `--mat-sys-*`/`--app-*`, convenção de48 botões `.btn-primary-green`/`.btn-secondary`, etc.).49- Ao **revisar UI**: confira o código contra a lista de anti-padrões do documento.50- Como **base do gate `styles-frontend`**: o subconjunto determinístico dessas regras é verificado51 automaticamente sobre os arquivos alterados —52 uso de `color=`, API `matButton`, `mat-paginator`, `.component.scss`, `!important` em tokens,53 `aria-label` em `mat-icon-button`, cor hardcoded (advisory), **diálogo com `mat-form-field` cujo54 `styleUrls` não declara `--mat-form-field-container-height`** e **página de listagem paginada sem55 `tails-filter-drawer`**. As regras subjetivas/visuais (densidade, hierarquia, estética) **não** são56 gate — ficam como guia e são checadas via verificação visual (browser-MCP), conforme a seção57 "Visual Verification" do documento.5859## Ao auditar uma tela existente (retrofit)6061Não conclua conformidade por grep. As classes registram a **intenção**; só os valores computados62provam a **aplicação** — num retrofit real, todos os 6 diálogos de um módulo tinham a estrutura63correta e renderizavam campos de 48px em vez dos 38px da especificação, porque nenhum CSS declarava64o token. Leia as seções **"Audit by value, not by class presence"** e **"Measurement recipes"** antes65de auditar, e meça no browser cada regra numérica (alturas, fontes, paddings).