feat: add WCAG AA accessibility app-wide, fix CloudKit container config, remove debug logs

- Add VoiceOver labels, hints, and element grouping across all 60+ views
- Add Reduce Motion support (Theme.Animation.prefersReducedMotion) to all animations
- Replace fixed font sizes with semantic Dynamic Type styles
- Hide decorative elements from VoiceOver with .accessibilityHidden(true)
- Add .minimumHitTarget() modifier ensuring 44pt touch targets
- Add AccessibilityAnnouncer utility for VoiceOver announcements
- Improve color contrast values in Theme.swift for WCAG AA compliance
- Extract CloudKitContainerConfig for explicit container identity
- Remove PostHog debug console log from AnalyticsManager

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-02-11 09:27:23 -06:00
parent e9c15d70b1
commit d63d311cab
77 changed files with 982 additions and 263 deletions

View File

@@ -66,12 +66,36 @@ struct RegionMapSelector: View {
HStack(spacing: 0) {
Button { onToggle(.west) } label: { Color.clear }
.accessibilityIdentifier("wizard.regions.west")
.accessibilityLabel("West region")
.accessibilityValue(selectedRegions.contains(.west) ? "Selected" : "Not selected")
.accessibilityHint(
selectedRegions.contains(.west)
? "Double-tap to deselect this region"
: "Double-tap to select this region"
)
.accessibilityAddTraits(selectedRegions.contains(.west) ? .isSelected : [])
.frame(maxWidth: .infinity)
Button { onToggle(.central) } label: { Color.clear }
.accessibilityIdentifier("wizard.regions.central")
.accessibilityLabel("Central region")
.accessibilityValue(selectedRegions.contains(.central) ? "Selected" : "Not selected")
.accessibilityHint(
selectedRegions.contains(.central)
? "Double-tap to deselect this region"
: "Double-tap to select this region"
)
.accessibilityAddTraits(selectedRegions.contains(.central) ? .isSelected : [])
.frame(maxWidth: .infinity)
Button { onToggle(.east) } label: { Color.clear }
.accessibilityIdentifier("wizard.regions.east")
.accessibilityLabel("East region")
.accessibilityValue(selectedRegions.contains(.east) ? "Selected" : "Not selected")
.accessibilityHint(
selectedRegions.contains(.east)
? "Double-tap to deselect this region"
: "Double-tap to select this region"
)
.accessibilityAddTraits(selectedRegions.contains(.east) ? .isSelected : [])
.frame(maxWidth: .infinity)
}
}
@@ -166,6 +190,7 @@ struct RegionMapSelector: View {
Circle()
.stroke(Color.white.opacity(0.5), lineWidth: isSelected ? 2 : 0)
)
.accessibilityHidden(true)
VStack(alignment: .leading, spacing: 1) {
Text(region.shortName)