Accessibility
Filum targets WCAG 2.1 Level AA conformance across all pages.
Conformance target
Filum targets Web Content Accessibility Guidelines (WCAG) 2.1 Level AA conformance. This means every page and every interactive element is built to meet the perceivable, operable, understandable, and robust criteria at that level. Where we fall short, we treat it as a bug — not an acceptable tradeoff.
Accessibility is enforced in our CI pipeline. axe-core runs against every page on every pull request. A violation blocks merge. No accessibility regression ships without deliberate decision and a remediation plan.
Keyboard navigation
Every action on Filum is reachable and operable with a keyboard. No mouse required.
| Key | Action |
|---|---|
| Tab | Move focus forward through interactive elements |
| Shift + Tab | Move focus backward |
| Enter / Space | Activate buttons, links, and controls |
| Escape | Close modals, dismiss toasts, exit command palette |
| ↑ / ↓ | Navigate items in select menus and command palette |
| ⌘K / Ctrl+K | Open command palette (search all tools from anywhere) |
Focus indicators are visible on all interactive elements. The focus ring uses the brand colour with sufficient contrast against both light and dark backgrounds. Focus is never suppressed for mouse users at the expense of keyboard users — all focus styles are applied via focus-visible, which shows the ring only when navigating by keyboard.
Screen reader support
Filum is tested with VoiceOver on macOS and Safari, and with NVDA on Windows and Chrome. Every interactive component uses semantic HTML or, where custom components are required, the correct ARIA role, state, and property attributes.
- The file dropzone is announced as a button with a descriptive label. Drag-and-drop state changes are announced via a live region.
- Conversion progress updates are announced via an
aria-live="polite"region. Step-by-step log entries are added to a separate live region so users hear them as the conversion proceeds without interrupting other announcements. - The quality score is announced as a percentage with a text label describing what it means — not just the number.
- Toast notifications are announced immediately via
aria-live="assertive"for errors andaria-live="polite"for confirmations. - Modal dialogs trap focus when open and return focus to the triggering element on close.
- The command palette is a combobox with
role="combobox"and a listbox for results, following the ARIA 1.2 combobox pattern.
Colour and contrast
All text meets WCAG 2.1 AA contrast requirements: 4.5:1 for body text, 3:1 for large text and UI components. Colour is never the sole means of conveying information — status indicators, error states, and quality scores all use text labels alongside colour.
The interface does not force a colour scheme. It respects the operating system preference via prefers-color-scheme. Both light and dark modes meet contrast requirements independently.
Motion and animation
Filum respects prefers-reduced-motion. When this preference is set, all animations are replaced with instant transitions. No content is gated behind animation. No motion conveys information that is not also conveyed by text or structure.
Known limitations
The comparison viewer (before/after file preview) is a visual interface by nature. The underlying pages are accessible as individual images with alt text describing page number and file type, but the slider interaction is limited to mouse and touch. A keyboard-accessible mode with individual page switching is on the roadmap.
PDF preview rendering in the comparison viewer uses a canvas element. Canvas content is not exposed to the accessibility tree. Each canvas panel has a text alternative stating the page number and source file.
Report an accessibility issue
If you encounter a barrier that prevents you from using any part of Filum, we want to know. Email hello@filum.se with a description of the barrier, the page or feature where you encountered it, and the assistive technology you are using. We will respond within 72 hours.
If a feature is genuinely unusable and you need the output, include that in your message and we will complete the task manually while the fix is in progress. We do not consider "the workaround works" to be an acceptable resolution. The product should work.