{{ authMode === 'login' ? t('signIn') : t('register') }}

{{ authError }}

{{ t('welcome') }}, {{ displayName }}! 👋

{{ t('unitsCompleted') }}: {{ progress.units_completed }} · {{ t('quizAttempts') }}: {{ progress.quiz_attempts }} · {{ t('lessonsViewed') }}: {{ progress.lessons_viewed }}

{{ t('pickGrade') || 'Grade' }}

{{ t('loadFailed') }}

{{ subjectName(sub) }}

{{ sub.name_en }} · {{ sub.name_si }} · {{ sub.name_ta }}

🏆 {{ t('leaderboard') }}

🧑‍🎓 {{ t('topStudents') }}

{{ t('noHistory') }}

{{ i + 1 }} {{ t('hiddenUser') }} {{ e.name }}
{{ e.school }} · {{ e.district }}
{{ e.xp }} XP

🏫 {{ t('topSchools') }}

{{ t('noHistory') }}

{{ i + 1 }} {{ e.school || '—' }}
{{ e.district }} · {{ e.students }} {{ t('studentsCount') }}
{{ e.xp }} XP

{{ subjectName(selectedSubject) }} · {{ gradeLabelFor(selectedSubject) }}

{{ n }}
{{ t('unit') }} {{ n }}
{{ unitTitles[n] }}
{{ t('continueLabel') }} · {{ readingPct(n) }}%

📝 {{ t('termExams') }}

{{ examInfo.question_count }} {{ t('qCount') }} · ⏱ {{ Math.round(examInfo.time_limit_seconds / 60) }} min · {{ examInfo.pass_mark_pct }}%

{{ t('anyOrder') }}

📊 {{ t('examHistory') }}

  • {{ t('term') }} {{ e.term }} · {{ fmtDate(e.created_at) }} {{ e.percentage }}% {{ e.passed ? '✅' : '❌' }}

{{ unitContent.title }}

{{ t('page') }} {{ pageIdx + 1 }} / {{ lessonPages.length }} · {{ pageTitle(pageIdx) }}

📝 {{ t('term') }} {{ examPaper.term }} ⏱ {{ fmtClock(Math.max(examTimeLeft, 0)) }}

{{ examPaper.questions.length }} {{ t('qCount') }} · {{ t('anyOrder') }}

{{ idx + 1 }}. U{{ q.unit_id }}

{{ t('examScore') }}: {{ examResult.score }} / {{ examResult.total }} ({{ examResult.percentage }}%)

{{ examResult.passed ? t('passed') : t('failed') }} ⏰ late

⏱ {{ Math.round(examResult.duration_ms / 1000) }}s

{{ t('unit') }} {{ b.unit_id }}: {{ b.score }}/{{ b.total }}

{{ examResult.feedback }}

{{ ri + 1 }}.

✔ {{ r.correct }} · {{ t('youPicked') }}: {{ r.selected }}

{{ r.explanation }}

{{ t('history') }}

{{ progress ? progress.current_xp : 0 }}

✨ XP

{{ history.quiz_attempts.length }}

{{ t('quizAttempts') }}

{{ progress ? progress.units_completed : 0 }}

{{ t('unitsCompleted') }}

{{ user.district }} · {{ user.school }}

{{ t('quizAttempts') }}

{{ t('noHistory') }}

{{ t('date') }} {{ t('unit') }} Lang {{ t('yourScore') }} XP
{{ fmtDate(a.created_at) }} {{ t('unit') }} {{ a.unit_id }} {{ a.lang }} {{ a.score }}/{{ a.total }} ({{ a.percentage }}%)
+{{ a.xp_earned }}

{{ t('lessonsViewed') }}

{{ t('noHistory') }}

  • {{ t('unit') }} {{ v.unit_id }} {{ v.lang }} {{ fmtDate(v.viewed_at) }}