diff --git a/index.html b/index.html index 2e4826e..1cf4c41 100644 --- a/index.html +++ b/index.html @@ -227,6 +227,22 @@ body { direction: ltr; text-align: center; font-family: 'Inter', sans-serif; } +.audio-btn-sm { + width: 32px; height: 32px; border-radius: 8px; border: 1px solid var(--border); + background: var(--bg-card); cursor: pointer; display: inline-flex; align-items: center; + justify-content: center; font-size: 16px; transition: all 0.2s; +} +.audio-btn-sm:hover { background: var(--quran-gold); border-color: var(--quran-gold); color: #fff; transform: scale(1.1); } + +.learn-btn { + padding: 8px 16px; border-radius: 8px; border: 1px solid var(--border); + background: var(--bg-card); cursor: pointer; font-size: 12px; font-weight: 600; + color: var(--text-secondary); transition: all 0.2s; margin-left: auto; white-space: nowrap; +} +.learn-btn:hover { background: var(--quran-green); border-color: var(--quran-green); color: #fff; } + +.letter-card:hover .letter-big { color: var(--quran-gold); } + .ayat-example { background: var(--bg); border-radius: 16px; padding: 32px; border: 2px solid var(--quran-gold); margin: 24px 0; text-align: center; @@ -682,6 +698,10 @@ body {
ШАГ 1

Арабский алфавит

28 букв — основа чтения Корана

+
+ +

Нажмите на букву или 🔊 чтобы услышать произношение

+
@@ -1218,10 +1238,13 @@ function renderAlphabet() { const grid = document.getElementById('alphabetGrid'); const p = getProgress(); grid.innerHTML = alphabetData.map((l, i) => ` -
-
${l.letter}
+
+
${l.letter}
-
${l.name}
+
+
${l.name}
+ +
[${l.transcription}]
${l.description}
@@ -1230,10 +1253,65 @@ function renderAlphabet() {
${l.positions.final}конец
+
`).join(''); } +function speakLetter(idx) { + const letter = alphabetData[idx].letter; + if ('speechSynthesis' in window) { + window.speechSynthesis.cancel(); + const utterance = new SpeechSynthesisUtterance(letter); + utterance.lang = 'ar-SA'; + utterance.rate = 0.5; + utterance.pitch = 1; + window.speechSynthesis.speak(utterance); + } + showToast('Произношение: ' + alphabetData[idx].name, 'info'); +} + +function playAllLetters() { + if (!('speechSynthesis' in window)) { + showToast('Ваш браузер не поддерживает аудио', 'error'); + return; + } + + window.speechSynthesis.cancel(); + let index = 0; + + function speakNext() { + if (index < alphabetData.length) { + const utterance = new SpeechSynthesisUtterance(alphabetData[index].letter); + utterance.lang = 'ar-SA'; + utterance.rate = 0.5; + utterance.pitch = 1; + + // Highlight current letter + const cards = document.querySelectorAll('.letter-card'); + cards.forEach(c => c.style.borderColor = 'var(--border)'); + if (cards[index]) { + cards[index].style.borderColor = 'var(--quran-gold)'; + cards[index].scrollIntoView({ behavior: 'smooth', block: 'center' }); + } + + utterance.onend = () => { + index++; + setTimeout(speakNext, 300); + }; + + window.speechSynthesis.speak(utterance); + showToast('Буква ' + alphabetData[index].name + ' (' + (index + 1) + '/28)', 'info'); + } else { + showToast('Все буквы прослушаны!', 'success'); + const cards = document.querySelectorAll('.letter-card'); + cards.forEach(c => c.style.borderColor = 'var(--border)'); + } + } + + speakNext(); +} + function learnLetter(idx) { const p = getProgress(); const key = 'letter-' + idx; @@ -1245,8 +1323,10 @@ function learnLetter(idx) { saveProgress(p); showToast('Буква ' + alphabetData[idx].name + ' изучена!', 'success'); checkAchievements(); + } else { + showToast('Буква ' + alphabetData[idx].name + ' уже изучена', 'info'); } - speak(alphabetData[idx].letter); + speakLetter(idx); } function renderHarakaat() { @@ -1262,6 +1342,7 @@ function renderHarakaat() {
${h.description}
${h.example}
${h.exampleWord}
+
`).join(''); @@ -1273,10 +1354,22 @@ function renderHarakaat() {
${h.description}
${h.example}
${h.exampleWord}
+ `).join(''); } +function speakHaraka(text, name) { + if ('speechSynthesis' in window) { + window.speechSynthesis.cancel(); + const utterance = new SpeechSynthesisUtterance(text); + utterance.lang = 'ar-SA'; + utterance.rate = 0.5; + window.speechSynthesis.speak(utterance); + } + showToast('Произношение: ' + name, 'info'); +} + function learnHaraka(idx) { const p = getProgress(); const key = 'haraka-' + idx;