Files
Evandro Fonseca Junior 08dd046887 feat: add animated components for enhanced UI/UX
- Introduced DrawLine component for drawing animations.
- Added LazyRevealImage component for lazy loading images with reveal animations.
- Implemented TextDiffuseReveal for animated text reveals with staggered effects.
- Created TopProgressBar for a dynamic loading indicator.
- Added PointCloud mock for testing animations.
- Developed useReducedMotion hook to handle user preferences for reduced motion.
- Centralized animation configurations in config.ts for easier management.
- Defined animation variants in variants.ts for consistent animation effects.
- Established AnimationProvider to supply global animation settings.
- Created tests for AnimationProvider and useReducedMotion hook.
- Added SVG assets for branding and UI elements.
- Documented frontend review plan and hero circuit board animation plan.
2026-03-15 21:06:43 -03:00

219 lines
13 KiB
Markdown

# Requirements Document
## Introduction
Este documento define os requisitos para adicionar animações premium ao portfolio evandro.dev.br, inspiradas no estilo suave e elegante do site on.energy. O objetivo é elevar a experiência visual mantendo a identidade atual (cores, tipografia Monument Extended, paleta --slash #ccff00) e adicionando transições fluidas, scroll-triggered animations, parallax sutil e animações de hover sofisticadas.
## Glossary
- **Animation_System**: Sistema responsável por gerenciar e executar todas as animações do portfolio
- **Hero_Component**: Componente principal da página inicial que exibe o nome e informações do desenvolvedor
- **Scroll_Trigger**: Mecanismo que detecta quando elementos entram no viewport para iniciar animações
- **Parallax_Effect**: Efeito visual onde elementos se movem em velocidades diferentes durante o scroll
- **Stagger_Animation**: Animação sequencial onde elementos aparecem um após o outro com delay
- **Reduced_Motion**: Preferência do usuário para reduzir ou desabilitar animações (acessibilidade)
- **Design_System**: Conjunto de componentes e estilos reutilizáveis (ds-card, ds-section, etc)
- **Viewport**: Área visível da página no navegador do usuário
- **Ease_Curve**: Função matemática que define a aceleração/desaceleração de uma animação
## Requirements
### Requirement 1: Remover Animação de Logo do Hero
**User Story:** Como usuário, quero ver apenas o texto "evandro.dev.br" no Hero sem alternância com logo, para ter uma experiência mais direta e focada.
#### Acceptance Criteria
1. THE Hero_Component SHALL exibir apenas o texto "evandro.dev.br" sem alternar com a logo
2. THE Hero_Component SHALL remover a fase "logo" do ciclo de animação
3. THE Hero_Component SHALL manter a animação de digitação (typing) do texto
4. THE Hero_Component SHALL manter todas as outras funcionalidades existentes (botões, links sociais, status)
5. WHEN a página carrega, THE Hero_Component SHALL iniciar diretamente com a animação de digitação
### Requirement 2: Implementar Scroll-Triggered Animations
**User Story:** Como usuário, quero ver elementos aparecerem suavemente conforme faço scroll, para ter uma experiência visual mais envolvente e premium.
#### Acceptance Criteria
1. WHEN um elemento entra no Viewport, THE Animation_System SHALL iniciar uma animação de fade in + slide up
2. THE Animation_System SHALL usar uma curva de ease-out suave (cubic-bezier(0.16, 1, 0.3, 1))
3. THE Animation_System SHALL aplicar scroll-triggered animations em seções (About, Skills, Experience, Projects, WorkModalities, Contact)
4. THE Animation_System SHALL aplicar scroll-triggered animations em cards dentro das seções
5. THE Animation_System SHALL detectar elementos quando 20% deles estiverem visíveis no Viewport
6. THE Animation_System SHALL executar cada animação apenas uma vez (once: true)
7. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL usar apenas fade simples sem movimento
### Requirement 3: Implementar Stagger Animations
**User Story:** Como usuário, quero ver elementos de uma lista aparecerem sequencialmente, para ter uma sensação de fluidez e ritmo visual.
#### Acceptance Criteria
1. WHEN múltiplos cards aparecem em uma seção, THE Animation_System SHALL aplicar stagger delays entre eles
2. THE Animation_System SHALL usar delay de 0.08s entre elementos consecutivos
3. THE Animation_System SHALL aplicar stagger em grids de cards (Projects, Skills, Experience)
4. THE Animation_System SHALL aplicar stagger em listas de tags e métricas
5. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL reduzir o delay para 0.03s
### Requirement 4: Implementar Parallax Sutil em Backgrounds
**User Story:** Como usuário, quero ver backgrounds com movimento parallax discreto durante o scroll, para adicionar profundidade visual sem distração.
#### Acceptance Criteria
1. WHEN o usuário faz scroll, THE Animation_System SHALL aplicar Parallax_Effect em backgrounds decorativos
2. THE Parallax_Effect SHALL mover elementos em velocidade 30% mais lenta que o scroll normal
3. THE Animation_System SHALL aplicar parallax no grid de fundo do Hero
4. THE Animation_System SHALL aplicar parallax no gradiente radial do Hero
5. THE Parallax_Effect SHALL ser sutil e não interferir na legibilidade do conteúdo
6. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL desabilitar completamente o Parallax_Effect
### Requirement 5: Implementar Animações de Hover Sofisticadas
**User Story:** Como usuário, quero ver animações suaves e elegantes ao passar o mouse sobre elementos interativos, para ter feedback visual premium.
#### Acceptance Criteria
1. WHEN o usuário passa o mouse sobre um card, THE Animation_System SHALL aplicar lift effect (translateY: -6px)
2. WHEN o usuário passa o mouse sobre um card, THE Animation_System SHALL aumentar a sombra suavemente
3. WHEN o usuário passa o mouse sobre botões, THE Animation_System SHALL aplicar scale de 1.03
4. WHEN o usuário passa o mouse sobre links sociais, THE Animation_System SHALL aplicar rotação sutil (-3deg a 3deg)
5. THE Animation_System SHALL usar spring physics para animações de hover (stiffness: 200, damping: 20)
6. THE Animation_System SHALL adicionar glow effect sutil em elementos com cor --slash ao hover
7. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL usar apenas mudanças de opacidade
### Requirement 6: Implementar Transições de Página Suaves
**User Story:** Como desenvolvedor, quero ter um sistema de transições entre páginas preparado, para futuras expansões do portfolio com múltiplas páginas.
#### Acceptance Criteria
1. THE Animation_System SHALL criar um componente PageTransition reutilizável
2. WHEN uma página carrega, THE PageTransition SHALL aplicar fade in de 0.4s
3. THE PageTransition SHALL usar ease-out curve para entrada
4. THE PageTransition SHALL ser compatível com Next.js App Router
5. IF Reduced_Motion está ativo, THEN THE PageTransition SHALL reduzir duração para 0.15s
### Requirement 7: Implementar Animações de Reveal em Imagens
**User Story:** Como usuário, quero ver imagens aparecerem com efeito de reveal elegante, para ter uma experiência visual mais sofisticada.
#### Acceptance Criteria
1. WHEN uma imagem entra no Viewport, THE Animation_System SHALL aplicar clip-path reveal animation
2. THE Animation_System SHALL usar clip-path: inset() para criar efeito de cortina
3. THE Animation_System SHALL combinar reveal com fade in e scale sutil (0.98 → 1)
4. THE Animation_System SHALL aplicar blur inicial (8px) que remove durante o reveal
5. THE Animation_System SHALL usar duração de 0.9s para o reveal completo
6. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL usar apenas fade simples
### Requirement 8: Implementar Animações de Reveal em Textos
**User Story:** Como usuário, quero ver títulos e textos aparecerem com efeito de reveal por caractere ou palavra, para ter uma experiência tipográfica premium.
#### Acceptance Criteria
1. WHEN um título de seção entra no Viewport, THE Animation_System SHALL aplicar reveal por palavra
2. THE Animation_System SHALL usar stagger de 0.04s entre palavras
3. THE Animation_System SHALL aplicar blur inicial (6px) e scale (0.95) em cada palavra
4. THE Animation_System SHALL usar clip-path: inset(0 100% 0 0) para efeito de slide horizontal
5. THE Animation_System SHALL aplicar reveal em títulos de seção (ds-section-title)
6. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL mostrar texto completo com fade simples
### Requirement 9: Otimizar Espaçamentos
**User Story:** Como usuário, quero ver uma página sem espaços vazios desnecessários, para ter uma experiência visual mais compacta e profissional.
#### Acceptance Criteria
1. THE Design_System SHALL reduzir padding vertical das seções de var(--sp-20) para var(--sp-16)
2. THE Design_System SHALL reduzir gap entre cards de var(--sp-6) para var(--sp-5)
3. THE Hero_Component SHALL reduzir min-height para otimizar espaço vertical
4. THE Design_System SHALL manter espaçamentos responsivos em mobile
5. THE Design_System SHALL garantir que mudanças não quebrem o layout existente
### Requirement 10: Garantir Performance e Acessibilidade
**User Story:** Como usuário com preferência de movimento reduzido, quero que o site respeite minhas configurações de acessibilidade, para ter uma experiência confortável.
#### Acceptance Criteria
1. THE Animation_System SHALL detectar prefers-reduced-motion do sistema operacional
2. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL desabilitar todas as animações complexas
3. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL manter apenas transições de opacidade simples
4. THE Animation_System SHALL usar will-change apenas durante animações ativas
5. THE Animation_System SHALL remover will-change após conclusão das animações
6. THE Animation_System SHALL usar transform e opacity para animações (GPU-accelerated)
7. THE Animation_System SHALL evitar animações de propriedades que causam reflow (width, height, margin)
8. THE Animation_System SHALL limitar animações simultâneas para manter 60fps
### Requirement 11: Implementar Smooth Scroll Global
**User Story:** Como usuário, quero ter scroll suave e fluido em toda a página, para ter uma experiência de navegação premium.
#### Acceptance Criteria
1. THE Animation_System SHALL integrar Lenis para smooth scroll global
2. THE Animation_System SHALL configurar Lenis com duração de 1.2s
3. THE Animation_System SHALL usar easing: [0.25, 0.0, 0.35, 1.0] para o scroll
4. THE Animation_System SHALL sincronizar Lenis com requestAnimationFrame
5. THE Animation_System SHALL aplicar smooth scroll em navegação por âncoras
6. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL desabilitar smooth scroll
### Requirement 12: Implementar Magnetic Effect em Botões
**User Story:** Como usuário, quero ver botões principais com efeito magnético sutil ao aproximar o cursor, para ter uma experiência interativa premium.
#### Acceptance Criteria
1. WHEN o cursor está próximo (raio de 80px) de um botão principal, THE Animation_System SHALL aplicar magnetic effect
2. THE Animation_System SHALL mover o botão em direção ao cursor proporcionalmente à distância
3. THE Animation_System SHALL limitar o movimento máximo a 12px em qualquer direção
4. THE Animation_System SHALL usar spring physics (stiffness: 150, damping: 15)
5. WHEN o cursor sai da área de influência, THE Animation_System SHALL retornar o botão à posição original
6. THE Animation_System SHALL aplicar magnetic effect apenas em botões CTA principais
7. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL desabilitar magnetic effect
### Requirement 13: Implementar Cursor Customizado
**User Story:** Como usuário, quero ver um cursor customizado que reage aos elementos da página, para ter uma experiência visual mais imersiva e premium.
#### Acceptance Criteria
1. THE Animation_System SHALL criar um cursor customizado circular de 40px
2. THE Animation_System SHALL seguir a posição do mouse com smooth delay de 0.1s
3. WHEN o cursor está sobre elementos interativos, THE Animation_System SHALL expandir o cursor para 60px
4. WHEN o cursor está sobre links, THE Animation_System SHALL mudar a cor do cursor para var(--slash)
5. THE Animation_System SHALL usar mix-blend-mode: difference para contraste automático
6. THE Animation_System SHALL ocultar o cursor padrão do sistema
7. THE Animation_System SHALL mostrar cursor padrão em dispositivos touch
8. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL desabilitar cursor customizado
### Requirement 14: Implementar Loading States Animados
**User Story:** Como usuário, quero ver estados de loading elegantes durante carregamento de dados, para ter feedback visual claro do progresso.
#### Acceptance Criteria
1. WHEN dados estão carregando, THE Animation_System SHALL exibir skeleton screens animados
2. THE Animation_System SHALL usar shimmer effect nos skeletons
3. THE Animation_System SHALL manter a estrutura visual da seção durante loading
4. THE Animation_System SHALL aplicar fade out suave ao remover skeleton (0.3s)
5. THE Animation_System SHALL aplicar fade in + slide up ao mostrar conteúdo real
6. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL usar pulse simples sem shimmer
### Requirement 15: Implementar Micro-interactions em Formulários
**User Story:** Como usuário, quero ver feedback visual imediato ao interagir com campos de formulário, para ter uma experiência de preenchimento mais agradável.
#### Acceptance Criteria
1. WHEN um campo recebe foco, THE Animation_System SHALL aplicar scale de 1.01 e glow effect
2. WHEN o usuário digita, THE Animation_System SHALL aplicar pulse sutil no label
3. WHEN validação ocorre, THE Animation_System SHALL aplicar shake animation em erros
4. WHEN validação é bem-sucedida, THE Animation_System SHALL aplicar checkmark animado
5. THE Animation_System SHALL usar spring physics para transições de estado
6. IF Reduced_Motion está ativo, THEN THE Animation_System SHALL usar apenas mudanças de cor