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(() => { 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 @@ + + + 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 }}

+ +