# Accessibility review Review date: 2026-08-02 ## Scope Player account management, administrator navigation, dashboard metrics and chart, user records, group management, event filtering, event details, forms, tables, and status notifications. ## Implemented checks and improvements - Added a keyboard-visible “Skip to main content” link and consistent high-visibility `:focus-visible` outlines. - Darkened the accent color so accent text reaches at least 4.5:1 contrast on both canvas and panel backgrounds. - Preserved reduced-motion behavior and disabled decorative cursor animation when requested. - Added labels or accessible names to search, Minecraft username, settings, group, and event-filter controls. - Added per-user group dropdowns with immediate-change instructions, keyboard submission fallback, and live success or error feedback. - Added `fieldset` and `legend` semantics to multi-select event-type filters. - Added table captions, column scopes, and row scopes to administrator data tables. - Added `role=status` with polite announcements for successful nickname changes and `role=alert` with assertive announcements for errors. - Added semantic `time` elements for audit and security activity timestamps. - Made event JSON keyboard-focusable so horizontally overflowing content can be reviewed without a pointer. - Added an accessible title, description, date labels, per-point labels, and textual values to the daily-active-user chart. - Added labelled, keyboard-linked world-map markers plus a complete semantic table equivalent for approximate user locations. - Collocated users share a visible count badge; hover and focus tooltips announce every nickname, while interactive grouped markers expose per-user popup links. - The semantic location table separates network company, connection type, Proxy/VPN status, and risk classification under explicit column headers. - Added keyboard-operable tabs for the server-rendered overview and opt-in interactive OpenStreetMap view. - Added explicit new-tab context to the external Discord invite link. - Kept destructive account and group actions behind native keyboard-operable `details` confirmation disclosures. - Allowed administrator navigation to wrap at narrow viewport widths instead of overflowing. ## Validation - ESLint with the Next.js ruleset passes. - Component rendering tests verify nickname status and error announcement roles and dismissal text. - The production build passes and reports database-backed player and administrator pages as dynamic server-rendered routes. - Color contrast was calculated for the canvas, panel, muted text, accent text, and signal combinations used by the interface. ## Follow-up Authenticated browser automation is still recommended in CI with axe-core and a test Keycloak realm. It should cover keyboard order, zoom to 200%, reflow at 320 CSS pixels, and screen-reader announcements against a running production build.