Oświadczenie o dostępności — Whispet
1. Informacje ogólne
CRE8EVE Sp. z o.o. zobowiązuje się do zapewnienia dostępności aplikacji mobilnej Whispet zgodnie z wymogami Europejskiego aktu o dostępności (European Accessibility Act, Dyrektywa (UE) 2019/882) oraz normy EN 301 549, opartej na wytycznych WCAG 2.1 na poziomie AA.
Niniejsze oświadczenie dotyczy aplikacji Whispet dostępnej na platformie iOS.
2. Status zgodności
Aplikacja Whispet jest częściowo zgodna z normą WCAG 2.1 na poziomie AA.
„Częściowo zgodna" oznacza, że niektóre elementy treści nie są w pełni zgodne ze standardem dostępności. Szczegółowe informacje o zaimplementowanych funkcjach i znanych ograniczeniach znajdują się w sekcjach 3 i 4 niniejszego dokumentu.
3. Funkcje dostępności zaimplementowane
Aplikacja Whispet zapewnia następujące funkcje dostępności:
3.1. Obsługa czytników ekranowych
- Wszystkie elementy interaktywne (przyciski, karty, filtry, selektory, nawigacja, formularze, pola daty/godziny) posiadają zlokalizowane etykiety dostępności (
.accessibilityLabel) czytelne przez VoiceOver - Awatary pupili posiadają zlokalizowane opisy alternatywne (np. „Awatar Luna" / „Avatar of Luna") we wszystkich obsługiwanych językach
- Zdjęcia pupili w galerii i na osi czasu posiadają opisy dostępności dla czytników ekranowych
- Pływające przyciski akcji (FAB) posiadają etykiety dostępności (
.accessibilityLabel) z opisem funkcji - Wiersze list z akcjami swipe (
.swipeActions) posiadają dodatkowe ikony toolbar / context menu umożliwiające wywołanie akcji (edycja, usunięcie, archiwizacja, udostępnianie) bez gestu przesunięcia — zapewniając alternatywę dostępną dla czytników ekranowych - Karty medyczne (szczepienia, leki, karma, alergeny, wizyty, dokumenty) używają
.accessibilityElement(children: .combine)grupujący zawartość karty dla czytników ekranowych, zachowując jednocześnie interaktywność elementów wewnętrznych (przyciski, pola wyboru) - Pola wyboru (Toggle) w trybie selekcji posiadają zlokalizowane etykiety dostępności identyfikujące pupila (np. „Wybierz Luna")
- Menu kontekstowe (long press) posiada wskazówkę dostępności (
.accessibilityHint) informującą o dostępności akcji oraz alternatywną akcję tap umożliwiającą aktywację przez czytnik ekranowy bez gestu długiego naciśnięcia - Zdjęcia grupowe (multi-pet) posiadają zlokalizowane etykiety dostępności informujące o liczbie pupili na zdjęciu
- Ikony statusu synchronizacji, dekoracyjne separatory (Divider), strzałki nawigacyjne w ustawieniach i dekoracyjne ikony kierunkowe są ukryte przed czytnikami ekranowymi (
.accessibilityHidden(true)), eliminując zbędny szum w nawigacji - Wszystkie elementy dekoracyjne — efekty gradientowe (bokeh, aurora), nakładki radialne — są ukryte przed czytnikami ekranowymi (
.accessibilityHidden(true)) we wszystkich wariantach motywów (5 trybów × 13 palet) - Suwaki (Slider) w formularzach filtrów posiadają etykiety dostępności opisujące kontrolowaną wartość
- Elementy interaktywne oparte na gestach (
.onTapGesture,.gesture) posiadają zlokalizowane etykiety dostępności: podgląd/dodawanie/usuwanie zdjęć w galerii i na osi czasu, link do strony karmy, podgląd zdjęć dokumentu, chipy akcji szczepień, ocena karmy, chipy wyboru daty/godziny/częstotliwości, skan kodów QR/kreskowych, nawigacja w dashboardzie (karuzela pupili, profil, oś czasu) - Ekrany nowych funkcji — Import historii zdjęć oraz Inteligentne wykrywanie zdjęć pupili (Smart Detection) — posiadają zlokalizowane etykiety dostępności na wszystkich elementach interaktywnych (przełączniki, filtry typu zwierzęcia, pasek postępu importu, przyciski akcji), zapewniając pełną obsługę przez czytniki ekranowe
3.2. Kontrasty i kolory
- Centralny system kolorów
AppColorsz wariantami perColorScheme(light/dark) i tryb High Contrast — weryfikowany pod kątem kontrastu zgodnie z WCAG - Kolory statusowe (zdrowie, waga, trend, płeć) posiadają warianty dostosowane do trybu jasnego i ciemnego (
AppColors.*For(colorScheme)) - Obsługa trybu jasnego i ciemnego (Light/Dark Mode) z 13 wariantami gradientów
- Tryb wysokiego kontrastu (High Contrast Mode) — szczegóły w sekcji 3.8
- Informacje nie są przekazywane wyłącznie za pomocą koloru — wszystkie statusy posiadają ikony i etykiety tekstowe (np. strzałki trendu wagi, ikony leków/szczepień, symbole płci)
- Elementy zastępcze ładowania (skeleton loaders) korzystają z kolorów motywu (
surfaceContainer) zamiast hardcoded wartości, zapewniając odpowiedni kontrast zarówno w trybie jasnym, jak i ciemnym - Kolory statusowe medyczne (leki, szczepienia, odrobaczanie, wizyty) posiadają dedykowane kolory tekstu/ikon (
foreground) gwarantujące kontrast na kolorowych tłach ikon w każdym trybie jasności - Przyciski akcji przesuwania (swipe actions) automatycznie dobierają kolor tekstu/ikony na podstawie luminancji tła (
contrastText), a akcja archiwizacji korzysta z kolorów motywu (outline) zamiast stałego szarego - Ikony stanów pustych (empty state) i błędów korzystają z kolorów motywu (
onSurfaceVariant) zamiast stałego szarego, zapewniając odpowiedni kontrast w trybie ciemnym - Tła placeholderów zdjęć w galerii korzystają z kolorów motywu (
surfaceContainerHighest) zamiast hardcoded wartości
3.3. Rozmiary elementów interaktywnych
- Wszystkie przyciski mają minimalny rozmiar dotykowy 44 × 44 pt (zgodnie z WCAG 2.5.8 Target Size oraz Apple Human Interface Guidelines)
- Pola formularzy mają wysokość zapewniającą wygodne dotknięcie (≥ 48 pt)
- Obsługa systemowych ustawień rozmiaru tekstu (Dynamic Type) — brak ograniczeń górnych
- Dodatkowe opcje skalowania czcionki w ustawieniach aplikacji: 4 poziomy (0,85× / 1,0× / 1,15× / 1,3×) realizowane przez
AppTypography
3.4. Struktura i nawigacja
- Główna nawigacja (TabView, NavigationStack z enum Route — 58 typowanych ścieżek) wykorzystuje natywne komponenty SwiftUI z wbudowaną dostępnością
- Etykiety dostępności (
.accessibilityLabel) na przyciskach ikon w toolbarze (wróć, zamknij, menu, wyczyść itp.), w nagłówkach bottom sheet, w panelach filtrów, w menu kontekstowych (Menu) oraz na ikonach pomocniczych pól tekstowych - Obsługa gestów systemowych iOS (swipe-back, edge gestures, dwa palce do back na VoiceOver)
- Pola formularzy używają
TextFieldz natywnymi etykietami widocznymi nad polem oraz placeholderem - Kolejność przechodzenia między polami formularzy realizowana jest przez domyślny mechanizm SwiftUI z natywnym wsparciem dla VoiceOver i klawiatury sprzętowej
3.5. Animacje i ruch
- Główne animacje (pulsujące logo, efekt bokeh, aurora, staggered entry, unosząca się ilustracja) respektują systemowe ustawienie Reduce Motion (
@Environment(\.accessibilityReduceMotion)) — są wyłączane lub natychmiast kończone (108 sprawdzeńreduceMotionw kodzie aplikacji) - Animacje elementów listy (staggered list) respektują ustawienie Reduce Motion — elementy pojawiają się natychmiast bez animacji
3.6. Wielojęzyczność etykiet dostępności
- Etykiety dostępności (
.accessibilityLabel) zlokalizowane w 6 językach: polski, angielski, niemiecki, hiszpański, francuski, włoski (308 etykiet w kodzie aplikacji) - Etykiety dostępności korzystają z systemu lokalizacji aplikacji (String Catalog
.xcstrings) i zmieniają się wraz z językiem interfejsu
3.7. Alternatywne formaty danych
- Wykres wagi posiada rozwijalną tabelę danych (data table) dostępną pod wykresem, prezentującą wszystkie rekordy wagowe w formie tekstowej (data i wartość w kg) — zgodnie z WCAG 1.1.1 (Treść nietekstowa)
- Chipy zakresu wykresu posiadają etykiety semantyczne z informacją o wybranym zakresie
3.8. Tryb wysokiego kontrastu (High Contrast Mode)
Aplikacja oferuje dedykowany tryb wysokiego kontrastu przeznaczony dla osób słabowidzących, wspierający zgodność z WCAG 2.1 kryterium 1.4.6 (Kontrast rozszerzony, poziom AAA) oraz 1.4.11 (Kontrast elementów nietekstowych).
Aktywacja: Ustawienia → Wygląd → przełącznik „Wysoki kontrast". Ustawienie jest zapamiętywane między sesjami.
Kompatybilność: Tryb wysokiego kontrastu działa z dowolnym trybem motywu (jasny, ciemny, systemowy) oraz może być łączony z trybem OLED.
Zmiany wprowadzane przez tryb wysokiego kontrastu:
- Tło ekranów — jednolite: czysto białe (tryb jasny) lub czysto czarne (tryb ciemny) zamiast gradientu kolorystycznego
- Efekty dekoracyjne — wyłączone: brak efektów bokeh i aurora, które mogą utrudniać czytanie osobom słabowidzącym
- Tekst — maksymalny kontrast: czysty czarny (#000000) na białym tle lub czysty biały (#FFFFFF) na czarnym tle
- Tekst drugorzędny — ciemny szary (#333333) na jasnym tle lub jasny szary (#CCCCCC) na ciemnym tle, zapewniając współczynnik kontrastu powyżej 7:1
- Bordery i obramowania — wyraziste, silniejsze niż w trybie standardowym (szary #555555 na jasnym tle, #AAAAAA na ciemnym) — zgodność z WCAG 1.4.11 (kontrast nietekstowy min. 3:1)
- Panele glass (glassmorphism) — prawie opaque (95% nieprzezroczystości) zamiast półprzezroczystych, zapewniając czytelność treści bez zakłóceń z tła
- Pola formularzy — opaque białe/ciemne tło z wyrazistą czarną/jasną ramką zamiast półprzezroczystych pól typu frosted glass
- Modale i dialogi — opaque tło, czysty czarny/biały tekst, wyraziste obramowania
- Chipy i tagi — opaque kolory tła zamiast gradientowych lerp, wyraziste bordery
- Selektory gradientów — wyłączone (wyszarzone z opacity 0.35) gdy tryb wysokiego kontrastu jest aktywny, z informacją tekstową o nadpisaniu
Lokalizacja: Etykiety trybu wysokiego kontrastu dostępne we wszystkich 6 obsługiwanych językach (polski, angielski, niemiecki, hiszpański, francuski, włoski).
4. Znane ograniczenia
Pomimo naszych starań, następujące elementy mogą nie być w pełni dostępne:
4.1. Nawigacja klawiaturą zewnętrzną
- Formularze opierają się głównie na domyślnej kolejności fokusa SwiftUI — jawne zarządzanie fokusem (
@FocusState) jest obecnie obecne tylko w wybranych polach tekstowych - Aplikacja nie definiuje własnych skrótów klawiszowych (
.keyboardShortcut); dostępne są systemowe gesty iOS oraz natywne wsparcie VoiceOver dla rotora i nawigacji jednym/dwoma palcami
4.2. Siatka zdjęć
- Siatka zdjęć w galerii (masonry layout) może być trudna w nawigacji za pomocą czytnika ekranowego ze względu na nieregularny układ
5. Plan naprawczy
Pracujemy nad systematycznym poprawianiem dostępności aplikacji. Planowane działania obejmują:
- Wprowadzenie jawnego zarządzania fokusem (
@FocusStatez typowanymi enumami) w głównych formularzach (dane pupila, klinika, alergen, wizyta weterynaryjna, karma) - Dodanie zlokalizowanych akcji niestandardowych (
.accessibilityAction) do wierszy list z akcjami swipe, aby umożliwić wywołanie edycji/usunięcia/archiwizacji bez gestu przesuwania - Poprawa dostępności siatki zdjęć w galerii (sekcja 4.2)
- Regularne testowanie z czytnikiem ekranowym VoiceOver i narzędziami audytu dostępności
- Monitorowanie zgodności z aktualizacjami standardu WCAG
6. Informacja zwrotna i kontakt
Jeśli napotkasz problem z dostępnością w aplikacji Whispet, prosimy o kontakt:
- E-mail: hello@whispet.app
- Adres: CRE8EVE Sp. z o.o., Tulipanowa 4, 72-003 Dobra, Polska
Staramy się odpowiadać na zgłoszenia dotyczące dostępności w terminie 14 dni roboczych.
7. Procedura egzekwowania
W przypadku niezadowalającej odpowiedzi na zgłoszenie dotyczące dostępności, Użytkownik ma prawo:
- Złożyć skargę do Prezesa Urzędu Ochrony Konkurencji i Konsumentów (UOKiK) — organ właściwy w sprawach dostępności produktów i usług w sektorze prywatnym na podstawie Dyrektywy (UE) 2019/882: https://uokik.gov.pl
- Skontaktować się z Rzecznikiem Praw Obywatelskich: https://bip.brpo.gov.pl
- Skontaktować się z miejskim lub powiatowym Rzecznikiem Konsumentów
8. Informacje techniczne
- Platforma: iOS 18+
- Framework: SwiftUI (natywne API dostępności iOS —
.accessibilityLabel,.accessibilityHint,.accessibilityElement,.accessibilityAction,.accessibilityHidden,@Environment(\.accessibilityReduceMotion), Dynamic Type,@FocusState) - Standard docelowy: WCAG 2.1 poziom AA
- Metoda oceny: Samoocena na podstawie wytycznych WCAG 2.1, audyt kodu źródłowego pod kątem etykiet dostępności, kontrastów i rozmiarów elementów interaktywnych
- Data ostatniego audytu: 3 czerwca 2026 r.
- Języki interfejsu: polski, angielski, niemiecki, hiszpański, francuski, włoski (6 języków)
9. Podstawy prawne
- Dyrektywa (UE) 2019/882 — Europejski akt o dostępności (European Accessibility Act)
- Ustawa z dnia 26 maja 2023 r. o zapewnianiu spełniania wymagań dostępności niektórych produktów i usług przez podmioty gospodarcze (Dz.U. 2023 poz. 1080) — transpozycja Dyrektywy 2019/882 do prawa polskiego
- Norma EN 301 549 — Wymagania dostępności produktów i usług ICT
- WCAG 2.1 (Web Content Accessibility Guidelines) poziom AA
Dokument zaktualizowany dla aplikacji Whispet v1.6 — 3 czerwca 2026 r.