Skip to main content

Accessibility Compliance

D-Sports Engage supports all 9 Apple Accessibility Nutrition Label categories for iPhone and iPad. This document details the implementation status and technical approach for each feature.

Feature Support Matrix

Architecture

AccessibilityProvider

The central context (context/accessibility-context.tsx) manages all accessibility state:
Key behaviors:
  • textScale = Math.max(inAppToggle ? 1.25 : 1.0, systemFontScale)
  • reduceMotion = inAppToggle || isSystemReduceMotion
  • highContrast = inAppToggle || isSystemBoldText

AccessibleText Component

components/ui/AccessibleText.tsx wraps <Text> with:
  • Font size scaling via textScale from context
  • Font weight bumping when highContrast is active
  • maxFontSizeMultiplier={2} to prevent layout breakage
  • allowFontScaling={true} for native Dynamic Type

ReducedMotionConfig

Added to app/_layout.tsx at the root level:
This globally tells react-native-reanimated to skip animations when the iOS “Reduce Motion” setting is enabled.

High Contrast Colors

theme/colors.ts exports darkHighContrast and lightHighContrast variants with boosted alpha values: Use getColors(isDark, highContrast) to get theme-aware colors with optional contrast boost.

Files Modified

Phase 1: VoiceOver & Voice Control

  • app/(tabs)/_layout.tsx — Tab bar: accessibilityRole="tab", labels, hints, states
  • app/(tabs)/locker-room.tsx — Header buttons, tab navigation, notification bell, avatar
  • app/(tabs)/leaderboard.tsx — TeamCard, search, filters, modals, league pills
  • app/(tabs)/shop.tsx — Cart button, search, rarity filters, collectible cards, featured packs
  • app/(tabs)/wallet.tsx — Balance card, address copy, sub-tabs, filter chips, carousel cards, all modals
  • app/settings/index.tsx — SettingsRow, back button, logout, version link
  • components/wallet/TokenRow.tsx — Row button, favorite toggle
  • components/wallet/HoldingRow.tsx — Accessible group with descriptive label
  • components/shop/CollectibleCard.tsx — Card button, favorite toggle, add-to-cart

Phase 2: Larger Text

  • context/accessibility-context.tsx — System font scale detection, combined text scale
  • components/ui/AccessibleText.tsxmaxFontSizeMultiplier, capped scaling

Phase 3: Sufficient Contrast

  • theme/colors.tsdarkHighContrast, lightHighContrast variants, updated getColors()

Phase 4: Reduced Motion

  • app/_layout.tsxReducedMotionConfig with ReduceMotion.System
  • context/accessibility-context.tsx — System reduce motion detection

Phase 5: Differentiate Without Color

  • components/wallet/TokenRow.tsx — ▲/▼ arrows on price changes
  • components/wallet/HoldingRow.tsx — ▲/▼ arrows on price changes

Phase 6: Info Screens

  • app/settings/accessibility-info.tsx — In-app feature support matrix screen
  • constants/accessibility-features-data.ts — Feature data constant
  • d-sports-site/app/accessibility/page.tsx — Marketing site page
  • d-sports-site/components/footer.tsx — Footer link
  • docs/repositories/d-sports-engage-native/compliance/accessibility.mdx — This page

App Store Connect

After submitting the next app update:
  1. Go to App Store Connect → App → General → App Information
  2. Under Accessibility, check all supported features for iPhone and iPad
  3. Set Accessibility URL to https://d-sports.org/accessibility
  4. Submit with the update