Skip to main content

Accessibility Guide

Portal Ciudadano Manta is built with accessibility as a core principle, following WCAG 2.1 Level AA standards to ensure all citizens can participate in civic engagement regardless of ability.
This platform complies with:
  • WCAG 2.1 AA (Web Content Accessibility Guidelines)
  • ISO 9241-11 (Usability standards)
  • ISO 9241-210 (Human-centered design)

Overview of Accessibility Features

Keyboard Navigation

Complete keyboard control with visible focus indicators and logical tab order

Screen Reader Support

Semantic HTML, ARIA labels, and live regions for dynamic content

Text-to-Speech

Built-in page reader with adjustable speed and volume controls

Visual Accessibility

High contrast, readable fonts, and zoom support up to 200%

Keyboard Navigation

Skip to Main Content

Every page includes a “Skip to main content” link for keyboard users.
1

Activate Skip Link

Press Tab immediately when page loadsA blue button appears in top-left: “Saltar al contenido principal”
2

Jump to Content

Press Enter to skip navigation and go directly to main contentImplemented in Dashboard.vue:4-9:
<a href="#main-content"
   class="sr-only focus:not-sr-only"
   role="navigation">
  Saltar al contenido principal
</a>

Global Keyboard Shortcuts

The platform implements comprehensive keyboard shortcuts via useKeyboardShortcuts.ts.
Viewing Shortcuts: Press ? or F1 at any time to see the keyboard shortcuts panel with all available commands for your current page.

Form Navigation

All forms support keyboard-only interaction:
Tab Order (ReportarProblema.vue):
  1. Section 1 - Problem Info:
    • Título input
    • Categoría dropdown
    • Descripción textarea
    • Prioridad dropdown
    • Imagen file input
  2. Section 2 - Contact: (auto-filled, read-only)
    • Navigate through with Tab (informational)
  3. Section 3 - Location:
    • Interactive map (keyboard accessible)
    • Dirección input
    • Referencias input
  4. Actions:
    • Limpiar button
    • Enviar Reporte button (primary action)
Keyboard Usage:
  • Tab: Move forward through fields
  • Shift + Tab: Move backward
  • Enter: Submit form (when on submit button)
  • Space: Toggle checkboxes/buttons
  • ↑↓: Navigate dropdown options
Multiple Choice (Dashboard.vue:640-670):
  • Tab through options
  • Space or Enter to select radio button
  • Visual highlight on focus
Rating Scale (Dashboard.vue:674-721):
  • Tab to each rating number (1-5)
  • Space or Enter to select
  • Large 64x64px touch targets
  • Screen reader announces rating level
Open Response:
  • Standard textarea with Tab focus
  • No special keyboard handling needed

Text-to-Speech Feature

Built-in page reader powered by Web Speech API (TextToSpeech.vue).

Activating Text-to-Speech

1

Locate TTS Button

Find floating button in bottom-right corner:
  • 🔊 Blue gradient circle when inactive
  • 🛑 Animated cyan pulse when reading
2

Start Reading

Click button or press Ctrl + Shift + SSystem reads main content aloud, excluding:
  • Navigation menus
  • Footer content
  • Buttons and form controls
  • Hidden elements (aria-hidden="true")
3

Control Playback

Hover over button to reveal control panel with:
  • Progress indicator
  • Speed slider (0.5x - 2.0x)
  • Volume control (0% - 100%)
  • Pause/Resume button
  • Stop button

Text-to-Speech Controls

Adjust Reading Speed:
  • Range: 0.5x (slow) to 2.0x (fast)
  • Default: 1.0x (normal)
  • Recommended:
    • 0.7x - 0.9x for complex content
    • 1.0x - 1.2x for standard reading
    • 1.5x - 2.0x for scanning
From TextToSpeech.vue:92-108:
<input v-model.number="rate"
       type="range"
       min="0.5" max="2" step="0.1"
       @change="updateRate" />

Text-to-Speech Browser Support

Supported Browsers:
  • ✅ Chrome 90+ (best support)
  • ✅ Firefox 88+ (good support)
  • ✅ Safari 14+ (iOS/macOS)
  • ✅ Edge 90+
  • ❌ Opera (limited voice selection)
Warning message appears on unsupported browsers.

Screen Reader Support

Semantic HTML Structure

All pages use proper HTML5 semantic elements:
<!-- From Dashboard.vue and other views -->
<header role="banner">
  <!-- Site header content -->
</header>

<nav role="navigation" aria-label="Main navigation">
  <!-- Navigation links -->
</nav>

<main id="main-content" role="main">
  <!-- Primary page content -->
</main>

<footer role="contentinfo">
  <!-- Footer content -->
</footer>

ARIA Labels and Roles

Buttons with Clear Labels:
<!-- Report submission button -->
<button type="submit"
        :aria-label="$t('reportes.enviar_reporte')"
        :disabled="loading">
  <span v-if="loading" role="status" aria-live="polite">
    {{ $t('common.enviando') }}
  </span>
  <span v-else>{{ $t('reportes.enviar_reporte') }}</span>
</button>
All interactive elements have:
  • Clear text labels or aria-label
  • Disabled state announced
  • Loading states with aria-live

Screen Reader Testing

Platform tested with:

NVDA

Windows screen reader (free, open-source)

JAWS

Job Access With Speech (Windows commercial)

VoiceOver

macOS and iOS built-in screen reader

Visual Accessibility

Color and Contrast

All text meets WCAG 2.1 AA requirements:
Element TypeMinimum RatioImplementation
Normal text (<18px)4.5:1text-gray-900 on bg-white
Large text (≥18px)3:1text-gray-800 on bg-gray-50
UI Components3:1Border colors, icons
Active states3:1Focus indicators, selections
Primary Color Palette:
  • Text: #111827 (gray-900) on #FFFFFF (white) = 17.8:1
  • Links: #2563EB (blue-600) on white = 8.1:1
  • Buttons: White text on #2563EB = 8.1:1
Information not conveyed by color alone:Report Status:
  • Color: Green/Yellow/Red
    • Icon: ✓ / ⏱ / ✗
    • Text label: “Resuelto” / “Pendiente” / “Rechazado”
Survey Types:
  • Color: Blue/Green/Purple badges
    • Icon: 📊 / ⭐ / 📝
    • Text: “Opción Múltiple” / “Calificación” / “Abierta”
Form Validation:
  • Color: Red border on error
    • Icon: ⚠️ warning symbol
    • Error message text

Focus Indicators

All interactive elements have visible focus states:
/* Tailwind focus utilities used throughout */
.focus\:ring-2 {
  --tw-ring-offset-shadow: 0 0 0 2px #fff;
  --tw-ring-shadow: 0 0 0 4px rgba(59, 130, 246, 0.5);
}

.focus\:outline-none:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
}
Focus indicators:
  • Buttons: 2px blue ring (.focus:ring-2 .focus:ring-blue-500)
  • Links: Underline + outline
  • Form inputs: 2px colored border matching input type
  • Cards/clickable areas: Shadow + scale transform

Text Sizing and Zoom

Base font sizes:
BreakpointBase SizeBody Text
Mobile (<640px)14pxtext-sm (0.875rem)
Tablet (≥640px)16pxtext-base (1rem)
Desktop (≥1024px)16pxtext-base (1rem)
Relative units:
  • All text uses rem units (scalable)
  • No fixed px values for text
  • Respects user browser font size settings

Iconography

Icons with text labels:
<button>
  <svg class="w-5 h-5" aria-hidden="true">
    <!-- Icon graphic -->
  </svg>
  <span>Guardar</span> <!-- Visible text -->
</button>
Decorative icons:
  • Marked with aria-hidden="true"
  • Not announced by screen readers
  • Adjacent text provides meaning
Informative icons:
<svg role="img" aria-label="Advertencia">
  <title>Advertencia</title>
  <!-- Icon graphic -->
</svg>
Icon-only buttons:
<button aria-label="Cerrar modal">
  <svg aria-hidden="true">
    <path d="M6 18L18 6M6 6l12 12" />
  </svg>
</button>

Mobile Accessibility

Touch Target Sizes

All interactive elements meet minimum 44x44px touch target size (WCAG 2.5.5):
Standard buttons:
<button class="px-6 py-3">
  <!-- Minimum 48px height -->
</button>
Icon buttons:
<button class="w-12 h-12 rounded-full">
  <!-- 48x48px touch area -->
</button>

Mobile Screen Reader Support

iOS VoiceOver

  • Swipe gestures for navigation
  • Double-tap to activate
  • Rotor for landmarks
  • Tested on iOS 14+

Android TalkBack

  • Swipe navigation
  • Double-tap activation
  • Local context menu
  • Tested on Android 10+

Responsive Adaptations

Text-to-Speech:
  • Simplified control panel on mobile
  • Touch-outside-to-close gesture
  • Text length limited to 500 chars
Forms:
  • Single column layout
  • Larger input fields
  • Sticky submit buttons
  • Native date/time pickers
Maps:
  • Simplified controls
  • GPS location button
  • Touch-friendly markers
  • Pinch-to-zoom support

Accessibility Testing

Automated Testing

Platform validated with:

axe DevTools

  • WCAG 2.1 AA compliance
  • 0 critical issues
  • Color contrast verification

Lighthouse

  • Accessibility score: 95+
  • Best practices: 100
  • SEO optimization

Manual Testing Checklist

Verify:
  • All interactive elements reachable via Tab
  • Focus order is logical and intuitive
  • Focus indicators clearly visible
  • No keyboard traps
  • Skip link works on all pages
  • Form submission works with Enter key
  • Modals trap focus and can be closed with Esc
Verify:
  • All images have alt text or aria-label
  • Form fields have associated labels
  • Page landmarks announced correctly
  • Dynamic content changes announced
  • Button purposes clear from label
  • Table structures make sense
  • Lists properly structured
Verify:
  • Text readable at 200% zoom
  • No loss of functionality when zoomed
  • Color contrast meets WCAG AA
  • Information not conveyed by color alone
  • Focus indicators visible
  • Text over images readable
Verify:
  • All touch targets ≥44x44px
  • Pinch-to-zoom works
  • Orientation changes handled
  • Mobile screen reader works
  • Forms usable on small screens
  • No horizontal scrolling

Assistive Technology Support

Supported Technologies

Desktop:
  • ✅ NVDA (Windows) - Latest version
  • ✅ JAWS (Windows) - Version 2020+
  • ✅ VoiceOver (macOS) - macOS 11+
  • ✅ Narrator (Windows) - Windows 10+
Mobile:
  • ✅ VoiceOver (iOS) - iOS 14+
  • ✅ TalkBack (Android) - Android 10+

Common Accessibility Issues & Solutions

Solution:
  • Ensure JavaScript is enabled
  • Try refreshing page
  • Use Tab key (not arrow keys) to navigate form fields
  • Check browser console for errors
All forms are progressively enhanced and work without JavaScript.
Check:
  • Latest screen reader version installed
  • Browser compatibility (Chrome/Firefox recommended)
  • Screen reader mode enabled
  • ARIA live regions may take 1-2 seconds to announce
Try refreshing page to reinitialize ARIA attributes.
Common causes:
  • Browser doesn’t support Web Speech API
  • No voices installed (Windows may need language packs)
  • Page permissions denied
  • Microphone permission confused with TTS
Solutions:
  • Use Chrome, Firefox, or Edge (best support)
  • Install Windows language packs
  • Check site permissions in browser settings
  • Try different browser if issue persists
Solutions:
  • Disable browser extensions that modify CSS
  • Check browser zoom level (reset to 100%)
  • Try high contrast mode (Windows: Alt+Shift+PrintScr)
  • Report to support if persistent
Focus indicators tested across all major browsers.

Accessibility Settings

Browser Accessibility Features

Enable Features:
  1. Settings → Accessibility
  2. Available options:
    • Image descriptions via AI
    • Live Caption for media
    • Focus highlighting
    • Tab navigation
Extensions:
  • Screen Reader (built-in ChromeVox)
  • High Contrast
  • Zoom

Operating System Accessibility

Enable Built-in Features:
  • Settings → Ease of Access
Key Features:
  • Narrator: Screen reader (Win+Ctrl+Enter)
  • Magnifier: Screen zoom (Win+Plus)
  • High Contrast: Enhanced visibility (Alt+Shift+PrintScr)
  • Sticky Keys: Sequential key presses (Shift x5)
  • Filter Keys: Ignore repeated keystrokes
Enable Built-in Features:
  • System Settings → Accessibility
Key Features:
  • VoiceOver: Screen reader (Cmd+F5)
  • Zoom: Screen magnification (Cmd+Opt+8)
  • Display: High contrast, reduce motion
  • Voice Control: Dictation and commands
  • Switch Control: Alternative input

Reporting Accessibility Issues

Accessibility Feedback

If you encounter accessibility barriers while using Portal Ciudadano Manta:Contact Information:
  • 📧 Email: [email protected]
  • ☎️ Phone: (05) 2622-300
  • 📍 In-person: Municipal offices, Mon-Fri 08:00-17:00
Please provide:
  • Description of the issue
  • Browser and assistive technology used
  • Page/feature where issue occurred
  • Steps to reproduce
  • Screenshots/recordings if possible
Commitment to Accessibility:Portal Ciudadano Manta is committed to ensuring digital accessibility for all citizens. We continuously work to improve the user experience and apply relevant accessibility standards.Accessibility is an ongoing effort, and we welcome feedback to make the platform more inclusive.

Additional Resources

WCAG 2.1 Guidelines

Official W3C accessibility guidelines

WebAIM

Web accessibility in mind - training and resources

A11y Project

Community-driven accessibility checklist

MDN Accessibility

Developer guides and best practices

Standards Compliance:Portal Ciudadano Manta conforms to:
  • WCAG 2.1 Level AA - Web Content Accessibility Guidelines
  • Section 508 (US) - Federal accessibility requirements
  • EN 301 549 (EU) - European accessibility standard
  • ISO 9241-11 - Usability standards
  • ISO 9241-210 - Human-centered design
Platform version: 1.0.0 | Last accessibility audit: October 2025

Build docs developers (and LLMs) love