diff --git a/src/App.vue b/src/App.vue
index 6f3e9b8..7588385 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -2,6 +2,7 @@
import { onMounted } from 'vue'
import { usePrefeituraStore } from '@/stores/prefeituraStore'
import { applyTemplate, applySurface } from '@/config/theme.config'
+import AccessibilityWidget from '@/components/common/AccessibilityWidget.vue'
const prefeitura = usePrefeituraStore()
@@ -12,12 +13,9 @@ onMounted(() => {
-
-
- Pular para o conteúdo principal
-
+ Pular para o conteúdo principal
+
diff --git a/src/assets/layout/layout.scss b/src/assets/layout/layout.scss
index ab04dad..87771d4 100644
--- a/src/assets/layout/layout.scss
+++ b/src/assets/layout/layout.scss
@@ -25,21 +25,12 @@ body {
/* ── Acessibilidade global ─────────────────────────────────────────── */
-/*
- * Focus ring visível e de alto contraste.
- * Usa currentColor para se adaptar a qualquer tema de cor.
- * Nunca remover — usuários de teclado e leitores de tela dependem disso.
- */
:focus-visible {
outline: 3px solid currentColor;
outline-offset: 3px;
border-radius: 4px;
}
-/*
- * Skip link — oculto até receber foco via Tab.
- * Permite que usuários de teclado pulem a navegação e vão direto ao conteúdo.
- */
.skip-link {
position: fixed;
top: -100%;
@@ -60,47 +51,14 @@ body {
}
}
-/*
- * Respeitar a preferência de usuário por menos movimento (vestibular,
- * epilepsia, sensibilidade visual). Afeta autoplay do carousel e transições.
- */
@media (prefers-reduced-motion: reduce) {
- *,
- *::before,
- *::after {
- animation-duration: 0.01ms !important;
- animation-iteration-count: 1 !important;
- transition-duration: 0.01ms !important;
- scroll-behavior: auto !important;
- }
-
- /* Garante que transições de rota também param */
.page-enter-active,
.page-leave-active {
transition: none;
}
}
-/* ── Alvo de toque mínimo (WCAG 2.5.5) ────────────────────────────── */
-/*
- * Botões e links pequenos precisam de área clicável mínima de 44×44px
- * para usuários com dificuldade motora ou em telas touch.
- */
-button,
-[role='button'],
-a {
- min-height: 44px;
- display: inline-flex;
- align-items: center;
-}
-
-/*
- * Exceção para elementos inline de parágrafo onde forçar altura quebra
- * o layout (links dentro de texto corrido).
- */
-p a,
-li a,
-.inline-link {
- min-height: unset;
- display: inline;
-}
+/* ── Widget de acessibilidade — classes dinâmicas ───────────────────── */
+html.a11y-font-lg { font-size: 18px; }
+html.a11y-font-xl { font-size: 20px; }
+html.a11y-contrast { filter: contrast(1.45) saturate(0.85); }
diff --git a/src/components/common/AccessibilityWidget.vue b/src/components/common/AccessibilityWidget.vue
new file mode 100644
index 0000000..6bec1e8
--- /dev/null
+++ b/src/components/common/AccessibilityWidget.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Tamanho do texto
+
+
+
+
+
+
+
+
+
Alto contraste
+
Melhora a legibilidade
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/public/HomeView.vue b/src/views/public/HomeView.vue
index 76ccd05..5ab5b4b 100644
--- a/src/views/public/HomeView.vue
+++ b/src/views/public/HomeView.vue
@@ -285,24 +285,20 @@ function continuar() {
-
-
-
{{ aviso.titulo }}
-
{{ aviso.descricao }}
-
-
-
-
-
+
{{ aviso.titulo }}
+
{{ aviso.descricao }}
+
+
+