Accessibility

FableFrog's accessibility features including VoiceOver, Dynamic Type, Voice Control, WCAG AA contrast, color vision deficiency themes, system preferences, text sizing, and motor accessibility.


Overview

Accessibility in FableFrog is not an afterthought. The app is built with SwiftUI's native accessibility APIs, and every screen, control, and interaction is designed to work with assistive technologies. From dedicated color vision deficiency themes to large-target car mode, FableFrog aims to be usable by everyone.

VoiceOver

FableFrog provides comprehensive VoiceOver support across every screen in the app. Every button, control, slider, and interactive element has descriptive accessibility labels and hints. VoiceOver support was significantly expanded in v1.1 with sort priority ordering, accessibility headers for logical navigation, and custom actions on key elements.

VoiceOver users can navigate FableFrog using standard iOS gestures:

  • Swipe left/right to move between elements on any screen
  • Double-tap to activate buttons, play/pause, and select items
  • Swipe up/down on sliders (speed, volume boost, scrubber) to adjust values
  • Rotor actions are available on key elements for quick access to common actions
  • Accessibility headers mark logical sections on each screen, so the rotor's headings mode lets you jump between sections quickly

Key Interactions

  • Library browsing: book covers announce the title, author, and progress percentage. Filter chips, sort options, and the index bar are all labeled and navigable.
  • Player controls: play/pause, skip forward/backward, speed, volume boost, and chapter navigation are announced with current state (e.g., "Play, paused" or "Speed, 1.5 times"). The scrubber announces the current position and total duration.
  • Sleep timer: preset buttons announce their duration, and the active timer state is communicated.
  • Settings: all toggles, pickers, and navigation elements include descriptive labels that explain what each setting controls.
  • Charts and statistics: individual chart data points are exposed to VoiceOver, so you can swipe through bar chart segments and hear the value and label for each one.

Accessibility Themes

FableFrog includes three themes specifically designed for users with visual needs that standard themes don't address. These are first-class themes built with the same care as every other theme in the app.

High Contrast

Golden yellow on pure black. This theme provides maximum contrast for users with low vision or anyone who needs text and controls to stand out as sharply as possible. The pure black background also eliminates light bleed on OLED displays. Available for free to all users.

Key characteristics:

  • Pure black (#000000) background throughout
  • Golden yellow primary accent color for text, icons, and interactive elements
  • White secondary text for maximum readability
  • No subtle gradients or translucent elements that could reduce legibility

Blue-Orange (Deuteranopia)

Optimized for red-green color vision deficiency. Deuteranopia is the most common form of color blindness, affecting the ability to distinguish red from green. This theme replaces any red/green signaling with blue and orange, ensuring all color-coded information remains distinguishable. Available for free to all users.

Key characteristics:

  • Blue and orange as the primary differentiating colors
  • Progress indicators, status badges, and interactive elements avoid red/green encoding
  • Maintains a dark base for comfortable extended reading

Pink-Teal (Tritanopia)

Optimized for blue-yellow color vision deficiency. Tritanopia affects the ability to distinguish blue from yellow. This theme uses pink and teal as primary colors, avoiding the blue/yellow combinations that would be indistinguishable. Available with Premium.

Key characteristics:

  • Pink and teal as the primary differentiating colors
  • Avoids blue/yellow contrasts for status and navigation elements
  • Dark base theme for comfortable use

Dynamic Type

FableFrog supports Dynamic Type, Apple's system-wide text scaling technology. When you change the text size in iOS Settings > Display & Brightness > Text Size (or Accessibility > Display & Text Size > Larger Text), FableFrog's interface scales accordingly.

This goes beyond the app's built-in six text size levels. Dynamic Type ensures that if you've set a system-wide large text preference, FableFrog respects it automatically without any additional configuration. Icons and interactive elements also scale using @ScaledMetric, so controls like the car mode buttons, settings icons, and the alphabetical index bar grow proportionally with your text size.

Voice Control

FableFrog includes Voice Control identifiers on all interactive elements, enabling hands-free navigation and control. When Voice Control is active, you can say the name of any button, toggle, or control to activate it. This works across every screen in the app — library browsing, the player, settings, and more.

Differentiate Without Color

When Differentiate Without Color is enabled in iOS Accessibility settings, FableFrog ensures that no information is conveyed by color alone. Status indicators, progress states, and interactive elements use shapes, icons, or labels in addition to color to communicate their meaning.

WCAG AA Contrast

All 20 themes in FableFrog meet WCAG AA contrast requirements. In v1.1, all five light themes received contrast fixes to ensure text and interactive elements are clearly readable. The accessibility themes (High Contrast, Blue-Orange, Pink-Teal) exceed AA requirements by design.

System Preferences

FableFrog respects iOS system accessibility settings automatically. You don't need to configure anything in the app. It reads your system preferences and adapts.

Reduce Motion

When Reduce Motion is enabled in iOS Settings, FableFrog minimizes or removes animations throughout the app. Screen transitions use crossfades instead of slides, progress indicators avoid bouncing effects, and any decorative motion is suppressed. This benefits users who experience discomfort from screen animations. Release day banners and other animated transitions also respect this setting.

Reduce Transparency

When Reduce Transparency is enabled, FableFrog eliminates translucent backgrounds and blur effects, replacing them with solid colors. This improves readability for users who find translucent overlays difficult to read through, and also provides a slight performance improvement on older devices.

Text Sizing

FableFrog offers six text size levels to accommodate different visual needs and preferences.

Available Levels

  • XS: smallest text, maximizes content density
  • S: slightly smaller than default, a good balance of density and readability
  • M: the default size, designed for comfortable reading at arm's length
  • L: larger text for users who prefer more legibility
  • XL: significantly larger, reduces content per screen but greatly improves readability
  • XXL: the largest option, designed for users who need maximum text size

Impact on Layout

Text size changes affect all text in the app: navigation labels, book titles and metadata, descriptions, chapter lists, player controls, and settings. The layout system reflows content to accommodate larger text rather than truncating or overlapping, so increasing text size may show fewer items per screen but never hides information.

To adjust, go to Settings > Text Size, preview the effect, and apply.

Motor Accessibility

FableFrog includes several features that benefit users with motor impairments or limited fine motor control.

Car Mode Large Targets

While car mode is designed for driving, its oversized controls are equally valuable for users who need larger tap targets. The play/pause and skip buttons in car mode are significantly larger than in the standard player, reducing the precision needed to interact with them. These controls scale with Dynamic Type via @ScaledMetric so they grow even larger when you increase your system text size.

Scrubber Auto-Lock

The scrubber auto-lock feature prevents accidental seeking by locking the scrubber after a configurable delay. This is particularly helpful for users who may inadvertently touch the screen while holding their phone. The scrubber requires a deliberate tap to unlock before it accepts input.

Shake Gesture Alternatives

The shake-to-extend sleep timer feature may not be accessible to all users. If shaking the device is difficult, you can extend the sleep timer by opening the app and tapping the timer controls directly. The shake feature can be disabled entirely in Settings > Playback if it's not useful for your needs. All functionality available through shake gestures is also accessible through on-screen controls.