{{ 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('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) }} - {{ t('grade') }}

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

{{ unitContent.title }}

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

{{ 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) }}