Recap do material — variáveis CSS, Flexbox/Grid, mobile-first, ESM, classes e closures.
Aplicar design system com tokens CSS, padrões responsivos e organização modular do JS no front.
Pausa para refeição.
Polir o front com tema consistente, layout responsivo e código JS modular.
Sair do "CSS funciona" para o "CSS profissional". Sair do "JS no onclick" para o "JS modular, com classes e storage".
.card, :root, [data-theme]).el.style.setProperty('--primary', '#22c55e').document.documentElement.dataset.theme.Quando o layout é linear: navbar, lista horizontal, formulários, alinhamento de ícones e textos.
auto-fit + minmax(240px, 1fr) = grid que se reorganiza sozinho conforme a largura.rem: tipografia (escala com a preferência do usuário)em: paddings de componentes (escala com a fonte local)%: largura responsivavw / vh: hero, telas cheiasclamp(min, ideal, max): valor fluido com limitesOs estilos base são para mobile. @media (min-width: ...) vai adicionando melhorias em telas maiores. Resultado: CSS mais simples, performance melhor no celular.
transform e opacity — não width nem heightAnimar width, height, top, left, margin dispara layout a cada frame. Em listas grandes, mata a performance.
transform e opacity rodam direto na GPU, sem reflow. Sempre prefira essas duas para qualquer animação.
Respeite prefers-reduced-motion — usuários com vestibular sensível precisam disso.
__).--)..card .card--featured com .card__title e .card__desc.window.type="module" não bloqueia o parse.public/js/
├── products/
│ ├── list.js
│ └── ProductCard.js
├── users/
│ └── login.js
└── utils/
└── debounce.js
?.: ao acessar dados externos que podem ser null??: substitua || quando 0 ou "" são valores legítimosClasses dão estrutura, closures dão estado privado sem expor variáveis. As duas técnicas substituem o padrão "variável global" que vaza no window.
| Recurso | Tamanho | Tempo de vida | Quando usar |
|---|---|---|---|
| localStorage | ~5MB | Persiste | Tema, preferências, rascunhos |
| sessionStorage | ~5MB | Aba aberta | Filtros temporários, wizard |
| cookies | ~4KB | Configurável | Sessão de auth (HttpOnly!) |
Bloqueia a thread. Para muitos dados, prefira IndexedDB (assíncrono).
Aplicar identidade visual e layout responsivo consistentes em todas as páginas do produto — visão Information/Computational materializada como código no front.
| USAB Usabilidade | ✅ Mobile-first + responsivo |
| ACES Acessibilidade | ✅ Contraste, foco, semântica |
| MANT Manutenibilidade | ✅ Tokens + BEM |
| DES Desempenho | → Transitions otimizadas |
| PORT Portabilidade | → ESM + temas trocáveis |
base.css com ≥ 6 variáveis (--primary, --surface, --text, --radius…). Aplique em todos os componentes via var()..card, .card__title, .card__price, .card--featured. Sem classes aninhadas arbitrárias.repeat(auto-fit, minmax(240px, 1fr)). Teste redimensionando a janela — sem media queries extras.transform: translateY(-3px) + box-shadow. Use apenas transform e opacity — não anime width ou height.ProductCard, TaskItem…) com constructor, render() e mount(parent). Exporte via export default.JSON.stringify para objetos. Restaure no DOMContentLoaded com JSON.parse + ?? para default.