- Use raw string comparison instead of CameraPosition enum
- Add debug logs to trace setting changes and sheet dismiss
- Add cameraPositionRaw accessor to SettingsViewModel
- Track lastCameraPosition to detect changes
- Use sheet onDismiss callback to check if position changed
- Force camera recreation only when position actually changes
- Works around @Observable tracking issues with nested cloudSync data
- Pass camera position from settings to CameraContainerView
- Add onChange handler to regenerate camera session when position changes
- Remove hardcoded .front camera position
- Camera now switches immediately when changed in settings
- Replace inline premium checks with PremiumGate.get/canSet
- Define premium values as static sets for timer options, colors, quality
- Cleaner, more consistent premium gating pattern
- Values preserved when user unsubscribes (restored on re-subscribe)