Skip to main content

Accessibility

Accessibility is a release requirement for luxy reward components, not post-release polish.

Shared expectations

  • Every interaction must have a non-gesture path.
  • Screen-reader users must be able to reveal or spin without physically scratching, dragging, or timing an animation.
  • Labels and hints must explain that the UI reveals or spins for a promotional reward.
  • Reduced motion must reduce visual intensity without disabling the reward flow or outcome callbacks.
  • Host apps should announce final results after onRevealComplete or onSpinComplete when that is appropriate for the experience.

Scratch card

The scratch card defaults to button-like reveal semantics:

  • Label: scratch-card reveal copy.
  • Hint: explains that the action reveals the promotional reward.
  • Action: tap/double-tap reveal when screenReaderRevealMode is press.
  • Reduced motion: static cover plus tap-to-reveal, with shimmer, dust particles, and large reveal motion disabled.
<ScratchCard
outcome={outcome}
accessibility={{
label: "Scratch card. Double tap to reveal your reward.",
hint: "Reveals the promotional coupon.",
screenReaderRevealMode: "press",
}}
renderReveal={renderReward}
/>

Slot machine

The slot machine defaults to spin semantics:

  • Label: slot-machine spin copy.
  • Hint: explains that the action starts the reward spin.
  • Reduced motion: either short-spin or instant, depending on app policy.
  • Final result: the host app decides whether and how to announce prize details.
<SlotMachine
outcome={knownOutcome}
symbols={slotSymbols}
accessibility={{ reducedMotionBehavior: "instant" }}
/>

Release checklist

Before v1 release, test each component with:

  • iOS VoiceOver in a release build.
  • Android TalkBack in a release build.
  • System reduced motion enabled.
  • Large text or dynamic type where host layouts support it.
  • Pending, success, loss, and resolver error states.