@andespindola/crow-skills 0.40.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD-PARTY-NOTICES.md +28 -2
- package/catalog.json +4 -2
- package/crow_skills/__init__.py +1 -1
- package/crow_skills/broadcast.py +5 -2
- package/crow_skills/cli.py +1 -1
- package/package.json +1 -1
- package/release.json +164 -14
- package/skills/crow-design/NOTICE.md +26 -0
- package/skills/crow-design/SKILL.md +38 -9
- package/skills/crow-design/licenses/Apache-2.0.txt +191 -0
- package/skills/crow-design/licenses/Impeccable-NOTICE.md +11 -0
- package/skills/crow-design/licenses/design-system-MIT.txt +26 -0
- package/skills/crow-design/licenses/platform-design-MIT.txt +21 -0
- package/skills/crow-design/licenses/taste-skill-MIT.txt +21 -0
- package/skills/crow-design/references/aceite-e-pre-voo.md +267 -0
- package/skills/crow-design/references/adaptacao.md +152 -0
- package/skills/crow-design/references/anti-padroes.md +187 -0
- package/skills/crow-design/references/componentes-e-estados.md +312 -0
- package/skills/crow-design/references/contrato.md +2 -1
- package/skills/crow-design/references/cor.md +151 -0
- package/skills/crow-design/references/dados-e-densidade.md +194 -0
- package/skills/crow-design/references/direcao-estetica.md +209 -0
- package/skills/crow-design/references/documento-do-sistema.md +175 -0
- package/skills/crow-design/references/layout-e-espaco.md +134 -0
- package/skills/crow-design/references/leitura-do-brief.md +158 -0
- package/skills/crow-design/references/movimento.md +144 -0
- package/skills/crow-design/references/redesign-e-sistemas-existentes.md +91 -0
- package/skills/crow-design/references/registro-premium.md +154 -0
- package/skills/crow-design/references/sistema-de-tokens.md +264 -0
- package/skills/crow-design/references/superficie-e-profundidade.md +153 -0
- package/skills/crow-design/references/texto-e-conteudo.md +149 -0
- package/skills/crow-design/references/tipografia.md +139 -0
- package/skills/crow-design/scripts/validar_tokens.py +654 -0
- package/skills/crow-design/templates/tokens.exemplo.json +197 -0
- package/skills/crow-mcp-maker/SKILL.md +6 -6
- package/skills/crow-mcp-maker/references/full-runtime.md +88 -0
- package/skills/crow-mcp-maker/references/security-and-cost.md +1 -1
- package/skills/crow-mcp-maker/scripts/engines.py +732 -0
- package/skills/crow-skill-maker/SKILL.md +6 -5
- package/skills/crow-skill-maker/references/full-runtime.md +108 -0
- package/skills/crow-skill-maker/references/security-and-cost.md +2 -2
- package/skills/crow-skill-maker/scripts/creator.py +839 -0
- package/skills/crow-skill-maker/scripts/engines.py +732 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
<!-- Derivado de Impeccable (Apache-2.0, Paul Bakaus), design-taste-frontend e high-end-visual-design (MIT, Leonxlnx), design-system (MIT, claudekit) e platform-design-skills (MIT, ehmo); reescrito e modificado pelo Crow em 2026-11-13. Ver ../NOTICE.md. -->
|
|
2
|
+
# Movimento
|
|
3
|
+
|
|
4
|
+
Leia quando o contrato for decidir se algo anima, quanto, com que duração e easing, com que runtime, o que acontece com movimento reduzido, ou quando o brief pede técnicas ambiciosas (scrollytelling, View Transitions, WebGL).
|
|
5
|
+
|
|
6
|
+
## Tese de movimento
|
|
7
|
+
|
|
8
|
+
Todo movimento serve hierarquia, narrativa, feedback ou transição de estado. "Ficou bonito" não é motivo; se o propósito não cabe numa frase, corte. Antes de especificar qualquer animação, o contrato escreve a tese da superfície:
|
|
9
|
+
|
|
10
|
+
- **Momento focal:** a única sequência ou interação que merece autoria, se houver. Ela vem do conceito do produto e da superfície; fade com subida genérico, hover que levanta, camada de parallax ou reveal por rolagem não são tese.
|
|
11
|
+
- **Continuidade:** as mudanças de estado, layout ou navegação que precisam ser explicadas (o item da lista que vira a página de detalhe).
|
|
12
|
+
- **Feedback:** os controles e resultados que precisam de confirmação.
|
|
13
|
+
- **Orçamento:** quais efeitos custam caro, onde rodam e com que frequência.
|
|
14
|
+
|
|
15
|
+
**Um momento autoral, não efeitos espalhados.** Uma ideia forte de material, levada pelo momento focal e por estados de apoio silenciosos, costuma bastar. Empilhar técnicas para impressionar dilui a ideia e o desempenho.
|
|
16
|
+
|
|
17
|
+
**Material pelo significado:**
|
|
18
|
+
|
|
19
|
+
- **Continuidade e relação:** elemento compartilhado entre estados, transformações no estilo FLIP, View Transitions, movimento espacial deliberado.
|
|
20
|
+
- **Foco e profundidade:** desfoque, luz e sombra **estáticos** que mudam por troca de estado, não animados quadro a quadro.
|
|
21
|
+
- **Revelação e composição:** máscara, `clip-path`, recorte, oclusão controlada (ver a exceção abaixo).
|
|
22
|
+
- **Material e energia:** cor, posição de gradiente (com `@property`), textura, distorção ou shader quando o mundo e o runtime sustentam.
|
|
23
|
+
- **Estado e feedback:** a menor mudança que torna causa e resultado inconfundíveis.
|
|
24
|
+
|
|
25
|
+
Vocabulário útil para nomear a escolha: cascata (stagger), varredura por máscara (clip wipe), escala com foco, morph entre estados, parallax.
|
|
26
|
+
|
|
27
|
+
**Stagger só em listas,** quando algo aparece como lista, e com **teto total**: a cascata inteira termina em poucas centenas de milissegundos, seja qual for o número de itens (por exemplo, 60ms por item até no máximo 6 a 8 itens; o resto entra junto). Toda seção rolada reinterpretada como lista em cascata é vício.
|
|
28
|
+
|
|
29
|
+
## Tokens de duração e easing
|
|
30
|
+
|
|
31
|
+
| Token | Operar | Demais modos | Uso |
|
|
32
|
+
|---|---|---|---|
|
|
33
|
+
| `duration.instant` | 100–150ms | 100–150ms | Feedback imediato: pressão, toggle, hover |
|
|
34
|
+
| `duration.state` | 150–250ms | 150–300ms | Mudança de estado rotineira |
|
|
35
|
+
| `duration.layout` | até 250ms | 300–500ms | Layout, overlay, transição de view |
|
|
36
|
+
| `duration.focal` | não existe (sem entrada focal) | 500–800ms | Entrada focal autoral, só em Persuadir e Experienciar |
|
|
37
|
+
|
|
38
|
+
| Token | Curva | Uso |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| `easing.enter` | `cubic-bezier(0.16, 1, 0.3, 1)`; em UI de produto, `cubic-bezier(0.2, 0, 0, 1)` | Chegadas: desacelera ao entrar |
|
|
41
|
+
| `easing.enter-premium` | `cubic-bezier(0.32, 0.72, 0, 1)` | Entrada longa do registro premium, quando adotado |
|
|
42
|
+
| `easing.exit` | ease-in, por exemplo `cubic-bezier(0.3, 0, 1, 1)` | Saídas, **mais curtas que a entrada** |
|
|
43
|
+
| `easing.linear` | `linear` (`ease: none` nas bibliotecas) | Scrub ligado à rolagem, progresso, indicadores contínuos |
|
|
44
|
+
| `easing.spring` | rigidez 100, amortecimento 20 como ponto de partida | Só onde há gesto, arraste ou interrupção |
|
|
45
|
+
|
|
46
|
+
Uma versão mais calma do `easing.enter` é a ease-out-quart (`cubic-bezier(0.25, 1, 0.5, 1)`). Mudanças simétricas de cor podem usar ease-in-out. Bounce e elástico não entram por reflexo. Banir `linear` ou `ease-in-out` em bloco é erro: scrub e progresso precisam de linear. Os nomes `duration.instant/state/layout/focal` e `easing.enter/exit` são **semânticos**: vivem na camada semântica com nomes por propósito e apontam para primitivos nomeados por valor (75, 100, 150, 200, 300, 500, 700 e 1000ms; curvas idem). O modo troca a referência do semântico, não o primitivo (ver [sistema de tokens](sistema-de-tokens.md)).
|
|
47
|
+
|
|
48
|
+
Duração expressa distância e consequência: feedback longo parece latência; entrada focal curta demais parece corte.
|
|
49
|
+
|
|
50
|
+
## O que pode e o que não pode animar
|
|
51
|
+
|
|
52
|
+
- **Anima `transform` e `opacity`.** São as propriedades que o navegador compõe sem refazer layout.
|
|
53
|
+
- **Não anima** `width`, `height`, `top`, `left` nem margens; use FLIP, transform ou técnicas de grid quando o tamanho precisa mudar.
|
|
54
|
+
- **Filtros são estáticos.** Desfoque, saturação e brilho mudam por troca de estado, não por animação; desfoque animado na entrada (o "blur-in") é caro em celular e não entra.
|
|
55
|
+
- **Exceção registrada para máscara e `clip-path`:** permitidos só no momento focal, em região isolada, com custo medido no dispositivo-alvo e registrados como exceção no contrato. No resto da superfície, só transform e opacity. Quando der, a revelação se faz movendo com transform a camada que oculta.
|
|
56
|
+
- **Nunca `transition: all`.** A transição lista as propriedades (`transform, opacity` e, quando preciso, `color, background-color, border-color`). `all` anima layout e cor sem controle.
|
|
57
|
+
- **`will-change` só durante** a animação conhecida, removido depois; permanente desperdiça memória.
|
|
58
|
+
- **Pressão (`:active`) desce, nunca sobe:** `translateY(1px)` ou `scale(0.98)`. Sem deslocamento com movimento reduzido.
|
|
59
|
+
- **Nada pisca mais de 3 vezes por segundo** (WCAG 2.3.1, nível A): flash, estroboscópio, alternância de cor saturada ou brilho que se repete acima disso só é aceitável abaixo dos limiares de flash geral e de vermelho, isto é, numa área pequena (somada, menor que cerca de 25% de 10 graus do campo visual, da ordem de 341 x 256px a uma distância típica de leitura). Na dúvida, não pisca. Vale em todo nível do botão MOVIMENTO, inclusive em WebGL, vídeo e canvas.
|
|
60
|
+
- **Movimento não causa salto de layout:** animações não podem empurrar conteúdo (CLS abaixo de 0.1) nem atrasar a resposta à interação (INP abaixo de 200ms).
|
|
61
|
+
|
|
62
|
+
## Runtime por necessidade
|
|
63
|
+
|
|
64
|
+
- **CSS** (transições e keyframes) para o que é declarativo e limitado.
|
|
65
|
+
- **Web Animations API ou a biblioteca que o projeto já tem** quando a animação precisa ser interrompida, encadeada ou receber valores dinâmicos.
|
|
66
|
+
- **View Transitions** quando a continuidade entre estados é a ideia (mesma página e entre documentos têm suporte diferente; confira o suporte na data da implementação e registre-o datado no contrato).
|
|
67
|
+
- **Scroll-driven** (`animation-timeline: scroll()` ou `view()`) só quando a relação com a rolagem carrega significado, sempre dentro de `@supports` e com estado estático bom como fallback.
|
|
68
|
+
- **IntersectionObserver** para disparar entradas. **Nunca listener de `scroll`** nem posição de rolagem guardada em estado de componente.
|
|
69
|
+
- **Bibliotecas, sem misturar na mesma árvore:** Motion (`motion/react`; `framer-motion` é o nome legado) para interface, estado, layout compartilhado e gestos; GSAP com ScrollTrigger para scrollytelling, fixação e scrub; Three.js (ou OGL e regl, mais leves) para canvas, 3D e shaders. Em React, valores contínuos (ponteiro, rolagem, física) vivem em motion values, não em estado; o que anima vira componente cliente isolado; efeitos limpam seus observadores e contextos ao desmontar; o que pesa e está abaixo da dobra carrega sob demanda.
|
|
70
|
+
- **Sem dependência nova sem decisão:** se o efeito exige uma biblioteca que o projeto não tem, isso vira proposta com custo, não instalação silenciosa.
|
|
71
|
+
|
|
72
|
+
## Valores por faixa do botão MOVIMENTO
|
|
73
|
+
|
|
74
|
+
O botão (1 a 10) é derivado do brief e declarado na leitura (ver [leitura do brief](leitura-do-brief.md)).
|
|
75
|
+
|
|
76
|
+
- **1–3:** nenhuma animação automática. Só feedback de hover, foco, pressão e transições de estado com `duration.instant` e `duration.state`.
|
|
77
|
+
- **4–7:** transições em propriedades explícitas, por exemplo `transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1), opacity 300ms cubic-bezier(0.16, 1, 0.3, 1)`; cascatas com `animation-delay: calc(var(--index) * 60ms)` dentro do teto total; entrada de reveal: de `opacity: 0` e deslocamento de 16 a 24px para o estado final, 600ms, `easing.enter`, disparada uma vez quando cerca de 30% do elemento entra na tela.
|
|
78
|
+
- **8–10:** reveals por rolagem, parallax, scroll-driven ou ScrollTrigger, momentos de física (botão magnético, só com motion values e em brief premium, lúdico ou de agência), micro-interações perpétuas (pulso, digitação, flutuação, brilho, carrossel) só acima de 5 e quando a seção ganha com isso.
|
|
79
|
+
|
|
80
|
+
Em todas as faixas: no máximo **um marquee** por página, e movimento reduzido sempre (abaixo).
|
|
81
|
+
|
|
82
|
+
**Movimento declarado é movimento entregue.** Se o contrato declara MOVIMENTO acima de 4, a superfície tem entrada no hero, revelação por rolagem com propósito e resposta física nos controles principais. Se não vai ter, o botão desce para 3 e o contrato diz isso: declarar movimento que não existe engana quem implementa e quem revisa.
|
|
83
|
+
|
|
84
|
+
## Técnicas avançadas
|
|
85
|
+
|
|
86
|
+
Escolhas legítimas quando o mundo as nomeia, cada uma construída de verdade (não imitada), com melhoria progressiva e caminho em movimento reduzido:
|
|
87
|
+
|
|
88
|
+
- **View Transitions:** elemento compartilhado entre estados (item que expande em detalhe, botão que vira diálogo).
|
|
89
|
+
- **`@starting-style`:** entrada a partir de `display: none` só com CSS.
|
|
90
|
+
- **Molas:** massa, tensão e amortecimento em vez de curva, onde há gesto ou interrupção.
|
|
91
|
+
- **Scroll-driven:** progresso, revelação e parallax ligados à rolagem, com fallback estático.
|
|
92
|
+
- **WebGL** (Three.js, OGL, regl) e **WebGPU** com fallback para WebGL2 e, por fim, para uma versão só CSS que ainda fica boa.
|
|
93
|
+
- **Canvas 2D e OffscreenCanvas** (em Worker, para tirar o render da thread principal); **WASM** e **Workers** para cálculo pesado.
|
|
94
|
+
- **Filtros SVG funcionais** (deslocamento, morfologia) para distorção que serve à ideia, com orçamento.
|
|
95
|
+
- **`@property`** para animar gradientes, cores e valores tipados que o CSS não interpola sozinho.
|
|
96
|
+
- **Dados vivos:** transição entre estados de gráfico em vez de substituição; rolagem virtual para listas enormes (ver [dados e densidade](dados-e-densidade.md)).
|
|
97
|
+
- **Web Audio** só depois de um gesto do usuário e com consentimento; **APIs de dispositivo** (orientação, luz) com parcimônia e permissão.
|
|
98
|
+
|
|
99
|
+
**Meta de 60fps;** abaixo de 50fps, simplifique. Inicialize contextos pesados (WebGL, WASM) só perto do viewport, pause o que está fora da tela, meça em aparelho intermediário real e date o suporte de navegador de cada técnica no contrato.
|
|
100
|
+
|
|
101
|
+
## Scrollytelling
|
|
102
|
+
|
|
103
|
+
Padrões úteis, com as correções que os tornam acessíveis:
|
|
104
|
+
|
|
105
|
+
- **Pilha fixa (sticky stack):** cada card ocupa a altura do viewport (`min-height: 100dvh`); ao chegar o seguinte, o anterior recua para `scale: 0.92` e `opacity: 0.55`, com scrub linear do topo do card seguinte entrando (`top bottom`) até ele encostar no topo (`top top`). **Um mecanismo de fixação só:** ou CSS `position: sticky` com scrub de transform, ou o pin da biblioteca (com o espaçamento de pin desligado e o fim no último card), nunca os dois no mesmo elemento, que gera salto ou espaço dobrado. O contexto da biblioteca é revertido ao desmontar. Com movimento reduzido, vira lista normal.
|
|
106
|
+
- **Pan horizontal:** o trilho translada no eixo x pela diferença entre a largura rolável e a da janela, fixado enquanto a rolagem vertical percorre essa distância, com scrub suave (da ordem de 1) e recálculo ao redimensionar. **Caminho sem animação obrigatório:** com movimento reduzido ou sem JavaScript, o trilho vira rolagem horizontal nativa (`overflow-x: auto` com `scroll-snap`) ou empilhamento vertical, e o teclado alcança todos os itens. Sair cedo da animação e deixar o trilho com `overflow: hidden` esconde os cards além do viewport justamente de quem pediu menos movimento.
|
|
107
|
+
- **Reveals:** conteúdo visível por padrão; a entrada é melhoria progressiva (próxima seção).
|
|
108
|
+
|
|
109
|
+
## Movimento reduzido, sempre
|
|
110
|
+
|
|
111
|
+
`prefers-reduced-motion: reduce` é respeitado **em todo nível do botão de movimento**, para todo movimento não essencial: transições de layout, hover com deslocamento e cascatas de nível baixo, não só os efeitos grandes.
|
|
112
|
+
|
|
113
|
+
- **Alternativa intencional,** não um "mata tudo" global com duração de 0.01ms: remova ou reduza o deslocamento espacial; mantenha opacidade, cor e feedback que confirmam uma ação; troque transições espaciais por fade curto ou corte; pare loops, parallax, rolagem sequestrada e física de ponteiro. O contrato diz o que cada efeito vira em `reduce`.
|
|
114
|
+
- **Conteúdo visível por padrão.** O estado inicial invisível (opacidade zero antes da entrada) só se aplica com `prefers-reduced-motion: no-preference` **e** JavaScript ativo. Sem JavaScript, com o script falhando ou com movimento reduzido, nada some.
|
|
115
|
+
- **Movimento automático que dura mais de 5 segundos no total e roda junto com outro conteúdo** (marquee, carrossel, fundo animado, pulso, digitação) tem controle de pausa, parada ou ocultação (WCAG 2.2.2, nível A); o que conta é a duração total, não o comprimento de um ciclo do loop. Além disso, para fora da tela e com movimento reduzido. Loop perpétuo nunca é baseline em todo card, avatar ou ponto de status.
|
|
116
|
+
- Som e vibração só com consentimento e respeitando as preferências do sistema.
|
|
117
|
+
|
|
118
|
+
## Produto e Operar
|
|
119
|
+
|
|
120
|
+
- Durações pela coluna Operar da tabela de tokens: `duration.instant` 100–150ms, `duration.state` 150–250ms, `duration.layout` (overlay, painel, transição de view) até 250ms; **sem entrada focal**.
|
|
121
|
+
- Propósitos permitidos: **estado e feedback** (abrir, fechar, selecionar, confirmar, resultado de ação).
|
|
122
|
+
- **Carregamento = skeleton com a forma do conteúdo,** sem coreografia: a tela não "se monta" em cascata toda vez que abre. Spinner só inline, na ação que está esperando, nunca no meio da página.
|
|
123
|
+
- **Revelação decorativa não entra:** sem reveal por rolagem, sem animação decorativa, sem hover que levanta cards de dados, sem acento animado em item inativo.
|
|
124
|
+
- Ler: quase nada; transições de navegação e disclosure.
|
|
125
|
+
|
|
126
|
+
## Momentos de deleite
|
|
127
|
+
|
|
128
|
+
Quando o contrato prevê deleite, ele é uma tese em uma frase e aparece onde há motivo: sucesso proporcional ao feito, espera verdadeira (não inventar progresso), primeiro uso, descoberta. Nunca atrasa a tarefa, nunca viola acessibilidade, nunca encena trabalho falso e nunca faz graça com perda, dinheiro ou privacidade.
|
|
129
|
+
|
|
130
|
+
## Nativo
|
|
131
|
+
|
|
132
|
+
- **iOS:** transições e molas do sistema; com Reduzir Movimento, crossfade no lugar de deslocamento e zoom.
|
|
133
|
+
- **Android:** padrões do Material (container transform, eixo compartilhado, fade-through), respeitando "Remover animações", que zera as durações do sistema.
|
|
134
|
+
- Detalhes de plataforma em [adaptação](adaptacao.md).
|
|
135
|
+
|
|
136
|
+
## Vícios
|
|
137
|
+
|
|
138
|
+
- A mesma entrada em toda seção.
|
|
139
|
+
- Fade com subida genérico apresentado como tese.
|
|
140
|
+
- Hover que levanta tudo, espalhado pela página.
|
|
141
|
+
- Bounce e elástico por reflexo.
|
|
142
|
+
- Desfoque animado na entrada.
|
|
143
|
+
- Elementos que "nunca aparecem estáticos": conteúdo escondido até a animação rodar.
|
|
144
|
+
- Movimento declarado e não entregue, ou entregue sem caminho reduzido.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
<!-- Derivado de Impeccable (Apache-2.0, Paul Bakaus), design-taste-frontend e high-end-visual-design (MIT, Leonxlnx), design-system (MIT, claudekit) e platform-design-skills (MIT, ehmo); reescrito e modificado pelo Crow em 2026-11-13. Ver ../NOTICE.md. -->
|
|
2
|
+
# Redesign e sistemas existentes
|
|
3
|
+
|
|
4
|
+
Leia quando já existe interface, marca ou código com identidade visual: redesign, nova superfície dentro de um produto, ou quando telas divergiram e é preciso decidir qual fonte vale. Se o pedido é **documentar** um sistema que existe só no código (produzir o DESIGN.md dele), isso é da `crow-interface`; aqui a leitura do código serve para decidir o redesign.
|
|
5
|
+
|
|
6
|
+
## O existente é autoridade até prova em contrário
|
|
7
|
+
|
|
8
|
+
A ausência de documento do sistema não torna um projeto greenfield. Custom properties, tema, componentes, páginas publicadas e assets de marca são evidência de uma identidade, e a precedência (dono, brief, marca e autoridade visual existente, contrato, defaults) põe essa identidade acima de qualquer default da skill. Duas consequências práticas:
|
|
9
|
+
|
|
10
|
+
- **Variação só contra defaults genéricos.** O teste anti-cluster e as listas de "evitar como default" servem para que uma decisão livre não caia no lugar-comum. Elas não se aplicam contra a marca nem contra o sistema existente: exigir aparência nova a cada entrega quebra a identidade que o produto construiu.
|
|
11
|
+
- **A marca existente vence as listas de "proibido".** Se a fonte oficial da marca está na lista de fontes de reflexo, ela continua; marca roxa continua roxa; uma marca que já é creme com serifa continua assim. A lista de defaults é zerada para os ativos da própria marca, e a exceção fica registrada no [documento do sistema](documento-do-sistema.md) para que a próxima sessão não a "corrija".
|
|
12
|
+
|
|
13
|
+
## Qual situação é esta
|
|
14
|
+
|
|
15
|
+
- **Preservar (evolução dirigida):** o mundo visual continua; melhora-se dentro dele.
|
|
16
|
+
- **Refazer (overhaul):** troca-se o mundo visual, preservando conteúdo, função e verdade do produto. O visual antigo é evidência do que o assunto é, não autoridade sobre o que ele vira.
|
|
17
|
+
- **Greenfield:** marca nova; o existente é só referência do que não repetir.
|
|
18
|
+
- **Mundo estabelecido com adição local:** nova seção, componente, feature ou estado dentro de uma superfície existente herda a superfície. Não é redesign.
|
|
19
|
+
|
|
20
|
+
Na dúvida entre preservar e refazer, faça uma pergunta só: "o redesign preserva a marca existente?". Não fique no meio-termo: um redesign que troca metade do mundo e mantém a outra metade sem regra produz duas identidades. Os botões de direção seguem a escolha: preservar mantém V/M/D iguais aos atuais (qualquer aumento é proposta explícita); refazer parte de +2/+2 com a densidade atual (ver [direção estética](direcao-estetica.md)).
|
|
21
|
+
|
|
22
|
+
## Auditoria primeiro
|
|
23
|
+
|
|
24
|
+
Antes de propor qualquer valor, inventarie o que existe. A auditoria é leitura; o contrato registra o que foi lido e onde.
|
|
25
|
+
|
|
26
|
+
1. **Tokens de marca:** cores, fontes (com licença), raios, sombras, espaçamento, movimento, onde cada um é definido.
|
|
27
|
+
2. **Arquitetura de informação:** rotas, navegação primária e seus rótulos, hierarquia de páginas.
|
|
28
|
+
3. **Blocos de conteúdo:** tipos de seção e de tela, componentes recorrentes, conteúdo real disponível (texto, fotografia própria, provas com origem).
|
|
29
|
+
4. **Padrões a preservar:** o que funciona e o que o público reconhece.
|
|
30
|
+
5. **Padrões a aposentar:** o que contradiz a marca, quebra acessibilidade ou é default genérico sem decisão.
|
|
31
|
+
6. **Leitura atual dos botões:** V/M/D que a interface pratica hoje, para que "preservar" tenha referência numérica.
|
|
32
|
+
7. **Linha de base de busca:** URLs, títulos, descrições, estrutura de títulos, dados estruturados e redirecionamentos. A migração de URL é o maior risco de um redesign; o detalhamento de busca segue com `crow-seo` quando disponível.
|
|
33
|
+
8. **Ganhos de acessibilidade já feitos:** foco visível, textos alternativos, operação por teclado, contraste, regiões live, preferências respeitadas. Redesign não regride nenhum deles; o estado anterior é o piso.
|
|
34
|
+
9. **Estados existentes:** carga, vazio, erro, sucesso, desabilitado, seleção. O que existe e funciona é mantido ou melhorado; o que falta entra na matriz de [componentes e estados](componentes-e-estados.md).
|
|
35
|
+
10. **Eventos de analytics** amarrados a elementos, para não quebrar medição.
|
|
36
|
+
|
|
37
|
+
### O que se preserva
|
|
38
|
+
|
|
39
|
+
Arquitetura de informação, slugs, âncoras e rótulos de navegação; as cores da marca extraídas antes de qualquer decisão de cor; a voz do texto; os ganhos de acessibilidade; os eventos de analytics. Refinamento preserva identidade, comportamento, texto e tudo que está fora do escopo pedido.
|
|
40
|
+
|
|
41
|
+
### O que nunca muda sem aprovação explícita
|
|
42
|
+
|
|
43
|
+
Estrutura de URL; rótulos da navegação primária; nomes e ordem de campos de formulário; logo e wordmark; textos legais, de consentimento e de cookies. Trocar texto factual ou acrescentar afirmação também exige perguntar antes.
|
|
44
|
+
|
|
45
|
+
### Alavancas, em ordem de risco crescente
|
|
46
|
+
|
|
47
|
+
1. Tipografia.
|
|
48
|
+
2. Espaçamento e ritmo.
|
|
49
|
+
3. Cor.
|
|
50
|
+
4. Camada de movimento.
|
|
51
|
+
5. Recomposição do hero e das seções-chave.
|
|
52
|
+
6. Troca total de blocos.
|
|
53
|
+
|
|
54
|
+
Árvore de decisão: se arquitetura, conteúdo e busca estão saudáveis, a evolução dirigida pelas quatro primeiras alavancas costuma entregar a maior parte do valor com bem menos risco que um redesign total (heurística, não medida: cede quando a dívida está justamente na composição); se há dívida estrutural (arquitetura confusa, componentes incoerentes), refaça preservando o conteúdo; se a marca é nova, é greenfield.
|
|
55
|
+
|
|
56
|
+
## Ler a identidade do código
|
|
57
|
+
|
|
58
|
+
Quando falta documento, a identidade é lida do código como autoridade visual, só para decidir o redesign; o resultado entra no contrato como evidência, não vira DESIGN.md por aqui (documentar a partir do código é da `crow-interface`, ver [documento do sistema](documento-do-sistema.md)). Procure nesta ordem de prioridade e registre nome, valor e arquivo de definição de cada achado:
|
|
59
|
+
|
|
60
|
+
1. **Custom properties CSS:** declarações com prefixos como `--color-`, `--font-`, `--spacing-`, `--radius-`, `--shadow-`, `--ease-`, `--duration-` (e o prefixo próprio do projeto), em folhas globais, de tema ou de app.
|
|
61
|
+
2. **Tema Tailwind:** na v3, o bloco `theme.extend` de `tailwind.config.{js,ts,cjs,mjs}` (cores, `fontFamily`, `spacing`, `borderRadius`, `boxShadow`); na v4, os blocos `@theme` no CSS. A versão vem do `package.json` e da sintaxe (`@tailwind base` é v3; `@import "tailwindcss"` com `@theme` é v4).
|
|
62
|
+
3. **Temas CSS-in-JS:** styled-components, emotion, vanilla-extract, stitches; arquivos como `theme.ts` ou `tokens.ts`.
|
|
63
|
+
4. **Arquivos de tokens:** `tokens.json`, `design-tokens.json`, saída de Style Dictionary, formato DTCG.
|
|
64
|
+
5. **Biblioteca de componentes:** botão, card, input, navegação, diálogo principais; APIs de variante e estilos default.
|
|
65
|
+
6. **CSS global:** a folha raiz costuma ter a tipografia e as cores base.
|
|
66
|
+
7. **Estilos computados da interface renderizada:** quando há ferramenta de navegador disponível no ambiente, amostre `body`, `h1`, `a`, `button` e cards; isso pega valores que os tokens não declaram. É evidência observada; diga de onde veio.
|
|
67
|
+
|
|
68
|
+
O que vira sistema é o que se repete com a mesma intenção (como regra de bolso, três ou mais usos). Um valor que aparece uma vez é one-off: fica de fora do sistema e, se estiver errado, vai para a lista de drift. Organize o extraído por papel, não por ordem de hex: cores em primária, secundária, terciária e neutras (com um acento só, primária e neutras; não invente secundária); tipografia pelos papéis do sistema (display, headline, title, body, label, caption, code; ver [sistema de tokens](sistema-de-tokens.md)) com famílias, pilhas de fallback e razão da escala; vocabulário de elevação (projeto plano com camadas tonais é resposta válida, declarada); por componente, forma, cor, hover e foco, padding interno; layout com grade, container, breakpoints, ritmo e densidade; formas com raio, borda e recorte recorrentes.
|
|
69
|
+
|
|
70
|
+
Mantenha o espaço de cor que o projeto trata como canônico (hex, `rgb()`, `oklch()`): não divida a fonte de verdade convertendo metade dos valores. Converter para OKLCH é decisão de sistema, com versão e changelog.
|
|
71
|
+
|
|
72
|
+
Depois de ler, passe os achados que o redesign vai manter para o formato de [sistema de tokens](sistema-de-tokens.md) e valide; contraste reprovado num valor existente é achado a relatar com a razão medida e a proposta, não algo a trocar em silêncio.
|
|
73
|
+
|
|
74
|
+
## Drift: quatro tipos
|
|
75
|
+
|
|
76
|
+
Quando telas divergem do sistema (ou umas das outras), classifique cada divergência, porque cada tipo pede uma ação diferente:
|
|
77
|
+
|
|
78
|
+
- **Token ausente:** o mesmo valor literal se repete em vários lugares sem token. Ação: criar o token no nível certo (normalmente semântico) e migrar os usos.
|
|
79
|
+
- **Implementação avulsa:** um componente do sistema foi reimplementado localmente (um botão próprio numa tela). Ação: migrar para o componente do sistema, ou, se a variante é legítima, acrescentá-la ao sistema.
|
|
80
|
+
- **Desencontro conceitual:** o mesmo conceito tem nomes ou tratamentos diferentes (sucesso verde numa tela e azul noutra; "Arquivar" e "Mover para arquivo" para a mesma ação), ou o mesmo nome significa coisas diferentes. Ação: decidir o conceito canônico com o dono, criar alias para o nome antigo com prazo de depreciação.
|
|
81
|
+
- **Defeito local:** um erro pontual numa tela, sem padrão. Ação: correção local.
|
|
82
|
+
|
|
83
|
+
Drift nunca é reparado como efeito colateral de outra tarefa: ele é relatado com local, evidência e ação proposta, e a correção acontece no escopo autorizado. O contrato registra a classificação; a execução da correção e a consolidação de componentes são de `crow-interface` e `crow-frontend`.
|
|
84
|
+
|
|
85
|
+
## Documento desatualizado
|
|
86
|
+
|
|
87
|
+
Quando há documento do sistema, mas o código andou, compare os dois e relate contradições concretas (o documento diz raio de 8px, os componentes usam 12px), não contagem de commits, que não prova divergência. O dono decide qual lado vale; o documento é atualizado por versão, com changelog. Antes de um redesign grande, vale capturar o estado atual num documento datado, como referência do que existia; essa captura a partir do código é da `crow-interface`.
|
|
88
|
+
|
|
89
|
+
## Redesign num sistema oficial
|
|
90
|
+
|
|
91
|
+
Se o produto usa um sistema oficial (Fluent, Material, Carbon, Polaris e outros listados em [direção estética](direcao-estetica.md)), o redesign acontece dentro dele: tokens do sistema, temas suportados, componentes oficiais. Sobrescrever a maior parte dos tokens de um sistema importado é sinal de que a direção pede outro caminho, e isso é decisão explícita, não deriva. Um sistema por projeto também vale durante a migração: a convivência temporária de dois é registrada com prazo e plano de remoção.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
<!-- Derivado de Impeccable (Apache-2.0, Paul Bakaus), design-taste-frontend e high-end-visual-design (MIT, Leonxlnx), design-system (MIT, claudekit) e platform-design-skills (MIT, ehmo); reescrito e modificado pelo Crow em 2026-11-13. Ver ../NOTICE.md. -->
|
|
2
|
+
# Registro premium: técnicas de alto acabamento com guarda-corpos
|
|
3
|
+
|
|
4
|
+
Leia quando o dono ou o brief pedir explicitamente aparência premium, de agência ou de alto acabamento, ou quando a direção comprometida em [direção estética](direcao-estetica.md) cair no registro ousado com essa intenção. Sem esse pedido, nada daqui entra por default.
|
|
5
|
+
|
|
6
|
+
## O que o registro premium é
|
|
7
|
+
|
|
8
|
+
É um parâmetro explícito do contrato, não um nível de qualidade. Um contrato no registro seguro bem executado não é "menos" que um premium; é outra escolha. O premium troca densidade e velocidade por espaço, profundidade e coreografia, e isso tem custo: página mais alta, mais peso de mídia, mais movimento para governar e mais fallbacks para especificar. Por isso ele é declarado na leitura, nunca presumido.
|
|
9
|
+
|
|
10
|
+
Não há persona, faixa de preço de estúdio nem raciocínio escondido: vibe, composição e técnicas aparecem nas decisões do contrato com motivo ligado ao brief ou à marca. Variação existe só contra defaults genéricos; um produto com marca e sistema segue a marca e o sistema, e a mesma composição se repete quando é a mesma função. Todas as regras das outras referências continuam valendo aqui dentro: contraste, foco, movimento reduzido, alvos, conteúdo real. Fallback não é "básico demais"; é parte do critério de pronto.
|
|
11
|
+
|
|
12
|
+
## Vibes de partida
|
|
13
|
+
|
|
14
|
+
Três pontos de partida, nunca obrigatórios. Cada um cede à marca e ao brief, e cada um encosta num cluster de interface gerada, por isso vem com a correção que o mantém longe dele (clusters em [direção estética](direcao-estetica.md) e [anti-padrões](anti-padroes.md)).
|
|
15
|
+
|
|
16
|
+
- **Vidro etéreo** (SaaS, IA, tecnologia). Origem: fundo quase preto (ordem de `#050505`), malha de gradientes radiais com orbs coloridas, cards muito escuros translúcidos com desfoque forte (ordem de 40px) e hairlines brancas a 10%, grotesca geométrica larga. Correção: o vidro fica em camada fixa (nav, overlay); cards de conteúdo usam superfície opaca tingida; orbs roxas são o default "de IA" e só entram quando a marca é roxa; quase preto com um acento brilhante é o cluster 2, então o acento e a malha saem da marca, não do gênero; hairline a 10% sobre quase preto dá cerca de 1.2:1 e só serve como decoração de superfície não interativa.
|
|
17
|
+
- **Luxo editorial** (lifestyle, imóveis, agência). Origem: cremes (ordem de `#FDFBF7`), verde-sálvia, marrom-espresso, serifa variável de alto contraste em títulos enormes, grão a 3%. Correção: creme com serifa e acento quente é o cluster 1; entra só quando o assunto é genuinamente editorial, de luxo ou de herança, ou quando a marca já usa, e a serifa segue o critério de [tipografia](tipografia.md). Fora disso, a paleta sai da marca.
|
|
18
|
+
- **Estruturalismo suave** (consumo, saúde, portfólio). Origem: fundo prata claro ou quase branco, grotesca em peso alto e tamanho grande, componentes flutuando com sombra ambiente muito difusa. Correção: a sombra é tingida pelo matiz da superfície, nunca preta pura, e o limite de controle interativo atinge 3:1 por borda, não só por sombra.
|
|
19
|
+
|
|
20
|
+
## Composições
|
|
21
|
+
|
|
22
|
+
- **Bento assimétrico.** Uma célula grande (8 colunas por 2 linhas numa grade de 12) ao lado de células de 4 colunas empilhadas. N itens geram N células, sem célula vazia; duas ou três células com fundo diferente (imagem, cor de marca, padrão, tint) dão ritmo e o resto fica neutro. Colapso móvel: uma coluna, todas as células com a mesma largura, intervalo de 24px.
|
|
23
|
+
- **Cascata em profundidade (Z-Axis Cascade).** Cards sobrepostos com rotação leve, de −2deg e 3deg. Abaixo do ponto de colapso (tipicamente perto de 768px), sem rotação e sem margem negativa: a sobreposição rouba área de toque e esconde conteúdo.
|
|
24
|
+
- **Divisão editorial (Editorial Split).** Tipografia ocupando metade da largura; do outro lado, mídia em pílulas horizontais ou cards escalonados. No celular, empilhado em largura total; rolagem horizontal só permanece com `scroll-snap`, acesso por teclado a todos os itens e fallback empilhado quando falta JavaScript.
|
|
25
|
+
|
|
26
|
+
- **Hero com imagem de fundo e fade.** Composição assimétrica sobre uma imagem real de fundo que se dissolve na cor de fundo da página (gradiente da imagem para o token `surface.canvas` do modo, refeito no claro e no escuro, para não cortar numa faixa de outra cor). O texto sobre a imagem passa 4.5:1 (3:1 se grande) **no ponto mais desfavorável da imagem**, em cada modo; quando não passa, entra scrim tingido ou o texto vai para a região já dissolvida. A imagem tem origem e licença registradas, e com transparência reduzida ou sem a imagem o texto continua legível sobre o fundo.
|
|
27
|
+
|
|
28
|
+
Em qualquer composição: altura cheia com `dvh` ou `svh` descontando o cromo persistente, nunca `100vh`; o colapso móvel é declarado por seção; a ordem do DOM acompanha a ordem visual.
|
|
29
|
+
|
|
30
|
+
## Técnicas
|
|
31
|
+
|
|
32
|
+
Cada técnica traz onde entra, onde não entra e o guarda-corpo.
|
|
33
|
+
|
|
34
|
+
### Moldura dupla (Double-Bezel)
|
|
35
|
+
|
|
36
|
+
Uma casca externa envolve um núcleo, como um objeto montado num suporte.
|
|
37
|
+
|
|
38
|
+
- **Casca:** fundo com alfa muito baixo (preto a 5% no claro, branco a 5% no escuro), contorno de 1px (preto a 5% no claro; branco a 10% no escuro), padding de 6px ou 8px, raio de 2rem.
|
|
39
|
+
- **Núcleo:** fundo próprio opaco, brilho interno `inset 0 1px 1px` em branco a 15%, raio concêntrico `calc(2rem - 0.375rem)` (raio externo menos o padding da casca; com 8px de padding, `calc(2rem - 0.5rem)`).
|
|
40
|
+
- **Onde entra:** mídia de destaque e hero. Técnica opcional.
|
|
41
|
+
- **Onde não entra:** **nunca em input** (duas bordas confundem o limite do campo; o campo tem uma borda única com 3:1) e nunca em todo card: card só existe quando a elevação comunica hierarquia.
|
|
42
|
+
- **Guarda-corpo:** o contorno da casca fica em torno de 1.1:1 e é decorativo; se o elemento é interativo, o limite real do controle precisa de 3:1. Em `forced-colors: active`, a casca vira borda real de 1px.
|
|
43
|
+
|
|
44
|
+
### Botão-ilha
|
|
45
|
+
|
|
46
|
+
Botão em pílula (raio pelo token `radius.full`, 9999px) com padding de 24px por 12px; o ícone final (seta diagonal ou equivalente) fica dentro de um círculo próprio de 32px, centrado, encostado no padding do lado final. Fundo do círculo: preto a 5% no claro, branco a 10% no escuro, ou o token opaco equivalente. O rótulo é texto com 4.5:1; o círculo precisa de 3:1 só quando é o único indicador de ação. Em idioma RTL, o ícone direcional espelha e o círculo vai para o outro lado (propriedades lógicas). O alvo total cumpre 44×44 em toque.
|
|
47
|
+
|
|
48
|
+
### Macro-espaço
|
|
49
|
+
|
|
50
|
+
Seções respiram mais que no registro seguro, mas o valor sai dos tokens de densidade, nunca de um mínimo fixo por seção: o premium usa a faixa arejada da tabela canônica (DENSIDADE 1–3, padding de seção de 128–192px, 8–12rem, no desktop, e menos no celular pelo token do breakpoint). Uma tabela, um formulário ou uma lista de preços dentro da página premium mantêm a densidade que a tarefa exige. Ver [sistema de tokens](sistema-de-tokens.md) e [layout e espaço](layout-e-espaco.md).
|
|
51
|
+
|
|
52
|
+
### Rótulo em pílula acima do título
|
|
53
|
+
|
|
54
|
+
Pílula pequena (raio cheio, padding de 4px por 12px) com texto em caixa alta espaçada antes de um título. É exceção, não ritual: a contagem é semântica (rótulo imediatamente acima de um título de seção), na ordem de um a cada três seções, o hero incluído; texto de pelo menos 12px, tracking positivo só em escrita latina, contraste AA.
|
|
55
|
+
|
|
56
|
+
### Easing e duração por propósito
|
|
57
|
+
|
|
58
|
+
Curvas customizadas, escolhidas pelo propósito: entrada com ease-out longo (`cubic-bezier(0.16, 1, 0.3, 1)` ou `cubic-bezier(0.32, 0.72, 0, 1)`), saída com ease-in e mais curta que a entrada, scrub ligado à rolagem com easing linear, mola só onde há gesto ou interrupção. Banir `linear` ou `ease-in-out` em bloco quebra scrub e indicadores contínuos. Entrada focal de 500–800ms só em Persuadir e Experienciar; estados de controle seguem 100–300ms. Toda transição lista as propriedades. Tokens em [movimento](movimento.md).
|
|
59
|
+
|
|
60
|
+
### Navegação em ilha flutuante e menu em overlay
|
|
61
|
+
|
|
62
|
+
O padrão de navegação sai da arquitetura de informação e do conteúdo, não da estética.
|
|
63
|
+
|
|
64
|
+
- **Ilha flutuante:** pílula de vidro (raio `radius.full`; vidro pela receita canônica em [superfície e profundidade](superficie-e-profundidade.md)) afastada do topo (ordem de 24px), centrada, com largura do conteúdo. Funciona com poucos itens curtos. Com muitos itens ou rótulos traduzidos longos (alemão e português crescem de 30 a 40%), ela estoura: preveja a largura com o rótulo mais longo de cada idioma e defina o ponto em que vira menu. A barra fixa de ponta a ponta continua sendo padrão válido e acessível.
|
|
65
|
+
- **Menu em overlay de tela cheia:** fundo com desfoque forte e superfície a 80% de opacidade (ou opaca sob transparência reduzida), links com revelação mascarada (de 3rem abaixo e opacidade zero para a posição final, atrasos escalonados de 100, 150 e 200ms) e o ícone de três linhas virando X por rotação de ±45deg; com movimento reduzido, o painel aparece por opacidade, sem deslocamento nem atraso. A especificação de acessibilidade (nome e estado do botão, foco, diálogo modal com fundo inerte, Esc, retorno de foco, rolagem travada) é a canônica de [componentes e estados](componentes-e-estados.md), na seção de menus, disclosure e navegação recolhida; nada aqui a substitui.
|
|
66
|
+
|
|
67
|
+
### Hover magnético e resposta física
|
|
68
|
+
|
|
69
|
+
Só com MOVIMENTO acima de 5 e brief premium, lúdico ou de agência. Referência de valores: pressão com `scale(0.98)`; ícone interno deslocando 4px na direção da ação e 1px para cima no hover, com escala de 1.05. O efeito é melhoria: o controle tem estado de foco equivalente ao hover (`:focus-visible` produz a mesma resposta visual, sem depender de ponteiro), funciona igual por toque, e fica estático com movimento reduzido ou em `pointer: coarse`. Pressão desce ou comprime, nunca sobe.
|
|
70
|
+
|
|
71
|
+
### Entrada por rolagem
|
|
72
|
+
|
|
73
|
+
Melhoria progressiva: o conteúdo é visível por padrão e o reveal só se aplica com JavaScript ativo e `prefers-reduced-motion: no-preference`. Anima só `transform` e `opacity`, com deslocamento curto (16–24px) e duração de entrada focal (500–800ms); desfoque, se existir, é estático. Disparo por Intersection Observer, scroll-driven animations dentro de `@supports` ou a biblioteca que o projeto já usa; nunca listener de scroll. Nem todo elemento entra animado: o reveal marca hierarquia (o que chega primeiro), não decora tudo.
|
|
74
|
+
|
|
75
|
+
### Vidro e desfoque
|
|
76
|
+
|
|
77
|
+
`backdrop-filter` só em elemento fixo ou sobreposto (nav, overlay, legenda sobre mídia), nunca em container que rola nem em área grande de conteúdo, onde o custo de composição pesa em celular. A receita de vidro e a de aproximação de Liquid Glass, com fallbacks por modo e `forced-colors`, são as canônicas de [superfície e profundidade](superficie-e-profundidade.md).
|
|
78
|
+
|
|
79
|
+
### Grão e ruído
|
|
80
|
+
|
|
81
|
+
Textura estática (imagem pequena repetida ou gerada uma vez) num pseudo-elemento `position: fixed; inset: 0; pointer-events: none`, na posição de grão da escala de camadas, com opacidade na ordem de 3%. Nunca em container que rola, nunca animada. Grão decorativo gerado por filtro de turbulência em tempo real não entra; distorção funcional por filtro só com orçamento de desempenho declarado.
|
|
82
|
+
|
|
83
|
+
### Camadas
|
|
84
|
+
|
|
85
|
+
Nada de z-index arbitrário (`50`, `9999`): a escala é token e cada técnica ocupa uma posição nomeada nela; a escala canônica está em [superfície e profundidade](superficie-e-profundidade.md).
|
|
86
|
+
|
|
87
|
+
### Ícones
|
|
88
|
+
|
|
89
|
+
Uma biblioteca e uma espessura de traço que acompanha o peso do texto ao lado. Traço ultrafino em tamanho pequeno perde leitura; ícone que carrega significado sozinho precisa de 3:1 e nome acessível.
|
|
90
|
+
|
|
91
|
+
## Regras de desempenho
|
|
92
|
+
|
|
93
|
+
- Anima só `transform` e `opacity`; filtros e desfoques ficam estáticos.
|
|
94
|
+
- `will-change` só durante a animação, retirado depois.
|
|
95
|
+
- `backdrop-filter` só em camada fixa ou sobreposta.
|
|
96
|
+
- Grão estático em pseudo-elemento fixo, nunca em container que rola.
|
|
97
|
+
- z-index só da escala tokenizada.
|
|
98
|
+
- Mídia e bibliotecas de movimento abaixo da dobra carregam sob demanda.
|
|
99
|
+
- Meta da experiência entregue: LCP abaixo de 2.5s, INP abaixo de 200ms, CLS abaixo de 0.1, medidos por quem implementa no dispositivo-alvo.
|
|
100
|
+
|
|
101
|
+
## Vocabulário de padrões
|
|
102
|
+
|
|
103
|
+
Nomes de referência para conversar sobre a direção. Nenhum é obrigatório; todos passam pelos guarda-corpos acima e por [movimento](movimento.md) e [componentes e estados](componentes-e-estados.md).
|
|
104
|
+
|
|
105
|
+
- **Hero:** divisão assimétrica, manifesto editorial, máscara de vídeo ou mídia, tipografia cinética, revelação em cortina, hero preso à rolagem.
|
|
106
|
+
- **Navegação:** ampliação tipo dock, botão magnético, menu gooey, ilha dinâmica, menu radial contextual, discagem rápida flutuante, mega menu.
|
|
107
|
+
- **Layout:** bento, masonry, grade cromática, tela dividida com rolagem, seções empilhadas fixas.
|
|
108
|
+
- **Cards:** inclinação com parallax, borda com holofote, painel de vidro, folha holográfica, pilha deslizável, modal que se transforma.
|
|
109
|
+
- **Rolagem:** pilha fixa, rolagem horizontal sequestrada, sequência quadro a quadro, zoom com parallax, caminho de progresso, transição líquida.
|
|
110
|
+
- **Galerias:** cúpula, coverflow, arrastar para mover, acordeão de imagens, rastro de imagem no hover, glitch.
|
|
111
|
+
- **Texto:** marquee cinético, revelação por máscara, embaralhamento, texto em caminho circular, contorno em gradiente, grade tipográfica cinética.
|
|
112
|
+
- **Micro:** botão com partículas, puxar para atualizar líquido, skeleton com brilho, botão sensível à direção do hover, ondulação no clique, desenho de linha em SVG, fundo em malha de gradiente, profundidade com desfoque de lente.
|
|
113
|
+
|
|
114
|
+
Guarda-corpos do vocabulário: no máximo um marquee por página; rolagem horizontal sequestrada tem fallback nativo (rolagem horizontal com `scroll-snap` ou empilhamento) com movimento reduzido ou sem JavaScript, e o teclado alcança todos os itens; pilha fixa usa um único mecanismo de fixação (CSS sticky ou o pin da biblioteca, nunca os dois no mesmo elemento); loop com mais de 5 segundos é pausável e para fora da tela e com movimento reduzido; interação de ponteiro (radial, rastro, magnético) tem equivalente por teclado e toque; cursor customizado é default recusável (ver [anti-padrões](anti-padroes.md)): só em Experienciar, com o cursor do sistema preservado sobre controles e texto e sem atraso de seguimento sob movimento reduzido.
|
|
115
|
+
|
|
116
|
+
## Critérios de aceite do registro premium
|
|
117
|
+
|
|
118
|
+
Cada item é observável no contrato ou na entrega, e entra além de [aceite e pré-voo](aceite-e-pre-voo.md):
|
|
119
|
+
|
|
120
|
+
1. **Nenhum default genérico sem decisão:** cada item do catálogo de [anti-padrões](anti-padroes.md) presente na direção tem exceção registrada com motivo.
|
|
121
|
+
2. **Vibe e composição nomeadas** na leitura ou no contrato de direção, com o motivo ligado ao brief ou à marca, e sem cair num cluster sem pedido.
|
|
122
|
+
3. **Moldura dupla só em mídia e hero:** nenhum input e nenhum card comum com casca dupla; raio interno = raio externo − padding.
|
|
123
|
+
4. **Botão-ilha conferido:** rótulo com 4.5:1, círculo com 3:1 quando é o único indicador, ícone espelhado em RTL, alvo de 44×44 em toque.
|
|
124
|
+
5. **Espaço de seção vem de token de densidade** declarado; nenhuma seção com padding fixo fora da escala.
|
|
125
|
+
6. **Easing e duração declarados por propósito** (entrada, saída, scrub, mola), nenhum `transition: all`.
|
|
126
|
+
7. **Conteúdo visível sem JavaScript e com movimento reduzido:** desligar JS e ativar `prefers-reduced-motion: reduce` não esconde nem corta nada; o reveal é melhoria.
|
|
127
|
+
8. **Colapso móvel declarado por seção**, sem rotação, sobreposição ou estouro horizontal abaixo do ponto de colapso.
|
|
128
|
+
9. **Só `transform` e `opacity` animados:** nenhum filtro, desfoque, `width`, `height`, `top` ou margem animados.
|
|
129
|
+
10. **Desfoque só em camada fixa ou sobreposta**, com fallback de transparência reduzida por modo e borda em `forced-colors`; contraste verificado nos quatro cenários.
|
|
130
|
+
11. **Acabamento verificável, não impressão:** contraste por modo e estado, foco visível, nav e menu com a especificação de acessibilidade de [componentes e estados](componentes-e-estados.md), mídia com origem e licença registradas e conteúdo real ou rotulado; "parece caro" não é critério.
|
|
131
|
+
|
|
132
|
+
## O que não herdamos da origem, e por quê
|
|
133
|
+
|
|
134
|
+
As técnicas acima vêm de um catálogo de estética de agência que tinha falhas. Corrigido aqui:
|
|
135
|
+
|
|
136
|
+
- **Sem movimento reduzido e "nada aparece estático":** reveal virou melhoria progressiva; movimento reduzido vale sempre.
|
|
137
|
+
- **Desfoque animado na entrada** contra a própria regra de animar só transform e opacity: desfoque estático ou nenhum.
|
|
138
|
+
- **Vidro em cards de conteúdo que rolam** contra a regra de desfoque só em camada fixa: cards opacos tingidos.
|
|
139
|
+
- **z-index fixo ao lado da proibição de z-index arbitrário:** escala tokenizada.
|
|
140
|
+
- **Presumir fontes comerciais disponíveis e reprovar Inter, Roboto, Arial, Open Sans e Helvetica:** fonte da marca primeiro, licença declarada, lista de fontes como "não escolha por reflexo".
|
|
141
|
+
- **Eyebrow antes de todo título, em 10px:** exceção rara, contagem semântica, ≥12px, AA.
|
|
142
|
+
- **Paletas de creme com espresso e de orbs roxas como vibe:** paleta da marca e do brief; esses clusters só com pedido.
|
|
143
|
+
- **Serifa enorme como default editorial:** serifa só pelo critério de tipografia.
|
|
144
|
+
- **"Nunca repetir layout":** variação só contra defaults genéricos; produto e sistema existentes mantêm consistência.
|
|
145
|
+
- **Moldura dupla obrigatória em todo card, input e grade:** técnica opcional para mídia e hero, nunca em input.
|
|
146
|
+
- **Hairlines de 1.1–1.2:1 como limite de componente:** limite interativo com 3:1.
|
|
147
|
+
- **Barra fixa de ponta a ponta proibida e ilha de largura fixa ao conteúdo:** navegação escolhida pela arquitetura de informação, com largura prevista por idioma.
|
|
148
|
+
- **`linear` e `ease-in-out` proibidos:** easing por propósito, scrub linear.
|
|
149
|
+
- **"Não inclua fallbacks genéricos":** fallbacks fazem parte do critério de pronto.
|
|
150
|
+
- **Menu overlay sem `aria-expanded`, foco, Esc nem rótulo:** especificação canônica em componentes e estados.
|
|
151
|
+
- **Nenhum modo escuro estruturado, i18n, estados, formulários ou conteúdo real:** o catálogo vive sob as regras do pacote inteiro.
|
|
152
|
+
- **Persona, preço de estúdio e "pensamento silencioso":** critérios observáveis e leitura declarada.
|
|
153
|
+
- **Ícones ultrafinos como regra:** espessura acompanha o peso do texto, 3:1.
|
|
154
|
+
- **Padding de seção mínimo fixo em toda seção:** tokens de densidade.
|