+ {/* Speech row - speak button with accent option */}
+ {isSpeechSupported && (
+
+ {/* Speak button */}
+
+
+ {/* With accent checkbox - inline with speak button */}
+ {hasAccentOption && (
+
+ )}
+
+ )}
+
+ {/* Auto options row - horizontal compact layout */}
+
+ Auto:
+
+ {/* Auto-hint checkbox */}
+
+
+ {/* Auto-speak checkbox */}
+ {isSpeechSupported && (
+
+ )}
+
+
)}
>
diff --git a/apps/web/src/arcade-games/know-your-world/hooks/useSpeakHint.ts b/apps/web/src/arcade-games/know-your-world/hooks/useSpeakHint.ts
new file mode 100644
index 00000000..1f5894cb
--- /dev/null
+++ b/apps/web/src/arcade-games/know-your-world/hooks/useSpeakHint.ts
@@ -0,0 +1,145 @@
+import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
+import { useLocale } from 'next-intl'
+import {
+ getLanguageForRegion,
+ speakText,
+ shouldShowAccentOption,
+} from '../utils/speechSynthesis'
+
+// Map app locales to BCP 47 language tags for speech synthesis
+const LOCALE_TO_LANG: Record