Accessibility Statement — Whispet
1. General information
CRE8EVE Sp. z o.o. is committed to ensuring the accessibility of the Whispet mobile application in accordance with the requirements of the European Accessibility Act (Directive (EU) 2019/882) and the EN 301 549 standard, based on the WCAG 2.1 guidelines at Level AA.
This statement applies to the Whispet application available on the iOS platform.
2. Compliance status
The Whispet application is partially compliant with WCAG 2.1 at Level AA.
"Partially compliant" means that some content elements are not fully compliant with the accessibility standard. Detailed information about implemented features and known limitations can be found in sections 3 and 4 of this document.
3. Accessibility features implemented
The Whispet application provides the following accessibility features:
3.1. Screen reader support
- All interactive elements (buttons, cards, filters, selectors, navigation, forms, date/time fields) have localised accessibility labels (
.accessibilityLabel) readable by VoiceOver - Pet avatars have localised alternative descriptions (e.g. "Avatar of Luna") in all supported languages
- Pet photos in the gallery and timeline have accessibility descriptions for screen readers
- Floating action buttons (FAB) have accessibility labels (
.accessibilityLabel) describing their function - List rows with swipe actions (
.swipeActions) include additional toolbar / context menu icons enabling actions (edit, delete, archive, share) without the swipe gesture — providing an accessible alternative for screen reader users - Medical cards (vaccinations, medications, food, allergens, visits, documents) use
.accessibilityElement(children: .combine)grouping card content for screen readers while maintaining the interactivity of inner elements (buttons, toggles) - Toggles in selection mode have localised accessibility labels identifying the pet (e.g. "Select Luna")
- The context menu (long press) has an accessibility hint (
.accessibilityHint) indicating the availability of actions and an alternative tap action enabling activation by screen readers without the long-press gesture - Group photos (multi-pet) have localised accessibility labels indicating the number of pets in the photo
- Sync status icons, decorative dividers, settings navigation arrows, and decorative directional icons are hidden from screen readers (
.accessibilityHidden(true)), eliminating unnecessary noise in navigation - All decorative elements — gradient effects (bokeh, aurora), radial overlays — are hidden from screen readers (
.accessibilityHidden(true)) across all theme variants (5 modes × 13 palettes) - Sliders in filter forms have accessibility labels describing the controlled value
- Gesture-based interactive elements (
.onTapGesture,.gesture) have localised accessibility labels: photo preview/add/remove in gallery and timeline, food website link, document photo preview, vaccination action chips, food rating, date/time/frequency selection chips, QR/barcode scanning, dashboard navigation (pet carousel, profile, timeline) - New feature screens — Photo History Import and Smart Pet Photo Detection — have localised accessibility labels on all interactive elements (toggles, animal type filters, import progress bar, action buttons), ensuring full screen reader support
3.2. Contrast and colours
- A centralised
AppColorssystem with variants perColorScheme(light/dark) and a High Contrast mode — verified for WCAG-compliant contrast - Status colours (health, weight, trend, sex) have variants adapted to light and dark mode (
AppColors.*For(colorScheme)) - Support for Light and Dark Mode with 13 gradient variants
- High Contrast Mode — details in section 3.8
- Information is not conveyed solely through colour — all statuses include icons and text labels (e.g. weight trend arrows, medication/vaccination icons, sex symbols)
- Loading placeholder elements (skeleton loaders) use theme colours (
surfaceContainer) instead of hardcoded values, ensuring adequate contrast in both light and dark modes - Medical status colours (medications, vaccinations, deworming, visits) have dedicated text/icon colours (
foreground) guaranteeing contrast on coloured icon backgrounds in every brightness mode - Swipe action buttons automatically select text/icon colour based on background luminance (
contrastText), and the archive action uses theme colours (outline) instead of a fixed grey - Empty state and error icons use theme colours (
onSurfaceVariant) instead of a fixed grey, ensuring adequate contrast in dark mode - Photo placeholder backgrounds in the gallery use theme colours (
surfaceContainerHighest) instead of hardcoded values
3.3. Interactive element sizes
- All buttons have a minimum tap target size of 44 × 44 pt (compliant with WCAG 2.5.8 Target Size and Apple Human Interface Guidelines)
- Form fields have a tap-friendly height (≥ 48 pt)
- Support for system text size settings (Dynamic Type) — no upper limits
- Additional font scaling options in App settings: 4 levels (0.85× / 1.0× / 1.15× / 1.3×) implemented via
AppTypography
3.4. Structure and navigation
- Main navigation (TabView, NavigationStack with an
enum Routeof 58 typed routes) uses native SwiftUI components with built-in accessibility - Accessibility labels (
.accessibilityLabel) on icon buttons in the toolbar (back, close, menu, clear, etc.), in bottom sheet headers, in filter panels, in context menus (Menu), and on text field auxiliary icons - Support for native iOS system gestures (swipe-back, edge gestures, two-finger back on VoiceOver)
- Form fields use
TextFieldwith native labels visible above the field and a placeholder - Field-to-field tab order in forms is handled by SwiftUI's default focus mechanism with native support for VoiceOver and hardware keyboards
3.5. Animations and motion
- Main animations (pulsing logo, bokeh effect, aurora, staggered entry, floating illustration) respect the system Reduce Motion setting (
@Environment(\.accessibilityReduceMotion)) — they are disabled or immediately completed (108reduceMotionchecks in the app code) - List item animations (staggered list) respect Reduce Motion — items appear immediately without animation
3.6. Multilingual accessibility labels
- Accessibility labels (
.accessibilityLabel) localised in 6 languages: Polish, English, German, Spanish, French, Italian (308 labels in the app code) - Accessibility labels use the App's localisation system (String Catalog
.xcstrings) and change with the interface language
3.7. Alternative data formats
- The weight chart has an expandable data table below the chart, presenting all weight records in text form (date and value in kg) — in accordance with WCAG 1.1.1 (Non-text Content)
- Chart range chips have semantic labels with information about the selected range
3.8. High Contrast Mode
The App offers a dedicated High Contrast Mode designed for users with low vision, supporting compliance with WCAG 2.1 criterion 1.4.6 (Contrast Enhanced, Level AAA) and 1.4.11 (Non-text Contrast).
Activation: Settings > Appearance > "High contrast" toggle. The setting is remembered between sessions.
Compatibility: High Contrast Mode works with any theme mode (light, dark, system) and can be combined with OLED mode.
Changes introduced by High Contrast Mode:
- Screen backgrounds — solid: pure white (light mode) or pure black (dark mode) instead of colour gradients
- Decorative effects — disabled: no bokeh and aurora effects, which may hinder readability for users with low vision
- Text — maximum contrast: pure black (#000000) on white or pure white (#FFFFFF) on black
- Secondary text — dark grey (#333333) on light background or light grey (#CCCCCC) on dark background, ensuring a contrast ratio above 7:1
- Borders and outlines — prominent, stronger than in standard mode (grey #555555 on light, #AAAAAA on dark) — compliant with WCAG 1.4.11 (non-text contrast min. 3:1)
- Glass panels (glassmorphism) — nearly opaque (95% opacity) instead of semi-transparent, ensuring content readability without background interference
- Form fields — opaque white/dark background with a prominent black/light border instead of frosted glass semi-transparent fields
- Modals and dialogs — opaque background, pure black/white text, prominent borders
- Chips and tags — opaque background colours instead of gradient lerp, prominent borders
- Gradient selectors — disabled (greyed out at 0.35 opacity) when High Contrast Mode is active, with explanatory text about the override
Localisation: High Contrast Mode labels are available in all 6 supported languages (Polish, English, German, Spanish, French, Italian).
4. Known limitations
Despite our efforts, the following elements may not be fully accessible:
4.1. Keyboard navigation
- Forms primarily rely on SwiftUI's default focus order — explicit focus management (
@FocusState) is currently used only in selected text fields - The application does not define custom keyboard shortcuts (
.keyboardShortcut); native iOS system gestures and VoiceOver rotor / one-and-two-finger navigation remain available
4.2. Photo grid
- The photo grid in the gallery (masonry layout) may be difficult to navigate using a screen reader due to its irregular layout
5. Remediation plan
We are working on systematically improving the accessibility of the App. Planned actions include:
- Introducing explicit focus management (
@FocusStatewith typed enums) in main forms (pet data, clinic, allergen, vet visit, food) - Adding localised custom actions (
.accessibilityAction) to list rows with swipe actions, enabling edit/delete/archive without the swipe gesture - Improving photo grid accessibility in the gallery (section 4.2)
- Regular testing with the VoiceOver screen reader and accessibility audit tools
- Monitoring compliance with WCAG standard updates
6. Feedback and contact
If you encounter an accessibility issue in the Whispet application, please contact us:
- E-mail: hello@whispet.app
- Address: CRE8EVE Sp. z o.o., Tulipanowa 4, 72-003 Dobra, Poland
We aim to respond to accessibility reports within 14 working days.
7. Enforcement procedure
In the event of an unsatisfactory response to an accessibility report, the User has the right to:
- File a complaint with the President of the Office of Competition and Consumer Protection (UOKiK) — the authority responsible for product and service accessibility in the private sector under Directive (EU) 2019/882: https://uokik.gov.pl
- Contact the Commissioner for Human Rights (Ombudsman): https://bip.brpo.gov.pl
- Contact the municipal or district Consumer Ombudsman
8. Technical information
- Platform: iOS 18+
- Framework: SwiftUI (native iOS accessibility APIs —
.accessibilityLabel,.accessibilityHint,.accessibilityElement,.accessibilityAction,.accessibilityHidden,@Environment(\.accessibilityReduceMotion), Dynamic Type,@FocusState) - Target standard: WCAG 2.1 Level AA
- Assessment method: Self-assessment based on WCAG 2.1 guidelines, source code audit for accessibility labels, contrast, and interactive element sizes
- Date of last audit: June 3, 2026
- Interface languages: Polish, English, German, Spanish, French, Italian (6 languages)
9. Legal bases
- Directive (EU) 2019/882 — European Accessibility Act
- Act of 26 May 2023 on ensuring the fulfilment of accessibility requirements for certain products and services by economic operators (Journal of Laws 2023, item 1080) — transposition of Directive 2019/882 into Polish law
- EN 301 549 — Accessibility requirements for ICT products and services
- WCAG 2.1 (Web Content Accessibility Guidelines) Level AA
Document updated for Whispet app v1.6 — June 3, 2026