4 Commits

Author SHA1 Message Date
caf25236b5 feat: dark mode completo via widget de acessibilidade
- main.css: @variant dark com seletor .app-dark (alinhado com PrimeVue darkModeSelector)
- AccessibilityWidget: novo toggle "Modo escuro" no painel; preferências persistidas no localStorage (fonte, contraste, escuro)
- PublicLayout/PortalLayout: dark:bg-slate-950/900, dark:border, dark:text em todos os elementos
- AppHeader/AppFooter: dark variants em bg, border, textos e links
- ServiceCard: usa cores primary em vez de blue hardcoded; dark variants completos
- HomeView: dark nos avisos do carrossel (bg coloridos suavizados), card de login, seção de serviços autenticados e CTA
- LoginView: dark no card, campo documento, label senha, links e botão voltar

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 00:42:35 -03:00
4658d60ad0 feat: widget de acessibilidade flutuante + fix carrossel mobile
- AccessibilityWidget: botão fixo bottom-right com painel de tamanho de texto (A/A+/A++) e toggle alto contraste, aplicados via classes no <html>
- layout.scss: remove override global de min-height em botões/links; mantém apenas focus-visible, skip-link, reduced-motion e classes do widget a11y
- HomeView: carrossel — botão de ação movido para abaixo do texto (não mais ao lado) para evitar compressão do texto no mobile

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 00:35:01 -03:00
6b6d47ba8a feat(a11y): implementa acessibilidade WCAG 2.1 AA em todo o portal público
- layout.scss: focus-visible ring, skip link, prefers-reduced-motion, touch targets ≥44px, font-size base 16px
- App.vue: skip link + aplica tema dinâmico no onMounted (após PrimeVue inicializado)
- composables/useMotion.js: detecta prefers-reduced-motion com listener reativo
- HomeView: aria-label em seções, carrossel respeita reduced-motion, contraste de texto melhorado
- LoginView: h1 correto, label+for+aria-describedby no campo senha, role=alert no erro, touch targets nos botões
- DocumentoInput: aria-label, aria-required, autocomplete=username
- AppHeader: aria-label no logo e nav, aria-current na rota ativa, aria-hidden nos ícones decorativos
- AppFooter: role=contentinfo, nav com aria-label, contraste text-slate-400→500, ícone decorativo aria-hidden
- PortalLayout: role=banner, aria-label no nav, aria-current nas rotas, aria-live no nome do usuário
- PublicLayout: tabindex=-1 no main para receber foco via skip link

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 00:28:40 -03:00
5a7f4ba07a feat: scaffold inicial do portal público de autoatendimento fiscal
- Vue 3.5 + Vite 8 + PrimeVue 4 (Aura) + TailwindCSS 4 + DM Sans
- Sistema de tenant multi-prefeitura: bootstrap, prefeituraStore, getTenant
- Tema dinâmico por município via applyTemplate (9 paletas)
- Logo e foto de fundo resolvidos a partir do VITE_API_URL + path relativo
- HomeView: hero split com foto/gradiente, carousel de avisos, cards de serviços
- LoginView: fluxo 2 etapas (documento na home → senha em /login)
- Roteamento completo: público (/), serviços (/servicos/*), portal autenticado (/portal/*)
- authStore + authService estruturados para Keycloak PKCE (integração pendente)
- Placeholders para todas as telas da área logada

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 00:20:07 -03:00