Round 19: Professional Notebooks, Digital Rewards, GDPR, Role-Based Dashboard, Deep Styling Polish

- Fixed attendance API 403: added TEACHER school membership check
- Fixed competitions API 403: cross-school access, null schoolId, public fallback
- Fixed GDPR export API 500: 16 Prisma field name mismatches
- Enhanced notebooks: page templates (Cornell, Mind Map, Venn, T-Chart, Weekly Planner),
  sticky notes, search, page duplication, sections/chapters, highlighter tool
- Added scratch pad with DrawingCanvas in assessments for hand-written solutions
- Role-based dashboard: TEACHER (competence radar, upcoming lessons),
  STUDENT (grades trend, competitions), PARENT (children grades, calendar),
  SCHOOL_ADMIN (system health, audit log, user management)
- Digital reward system: 16 demo rewards, points earning/redemption,
  categories (streaming, shopping, experiences, merchandise, privileges)
- GDPR compliance: consent management, data retention, cookie consent
- Deep styling polish: glassmorphism, gradient headers, animated sidebar,
  card hover effects, progress bar animations, timeline dots, FAB button
- 160+ new i18n keys (DE/EN)
This commit is contained in:
Mustafa Cetin committed 2026-07-29 16:23:18 +00:00
1 parent 86e4b504e4
commit 6d9b42ac37
43 files changed
+4569 -140

No files matched your search

+494
View File
@@ -999,6 +999,17 @@ const de: TranslationDict = {
'assessments.range': 'Spanne',
'assessments.no_scores': 'Keine Punktezahlen',
// ─── Scratch pad (assessments) ──────────────────────────────────────
'assessments.scratch_pad': 'Notizblock',
'assessments.scratch_pad_title': 'Notizblock — {title}',
'assessments.scratch_pad_description': 'Hier können Sie Ihre Lösung handschriftlich erarbeiten.',
'assessments.scratch_pad_save': 'Zeichnung speichern',
'assessments.scratch_pad_saved': 'Zeichnung gespeichert',
'assessments.scratch_pad_saving': 'Wird gespeichert…',
'assessments.scratch_pad_open': 'Notizblock öffnen',
'assessments.scratch_pad_close': 'Notizblock schließen',
'assessments.scratch_pad_resize': 'Größe anpassen',
// ─── Student journey timeline ──────────────────────────────────────
'student.journey': 'Lernreise',
'student.journey_milestone': 'Meilenstein',
@@ -2136,6 +2147,54 @@ const de: TranslationDict = {
'notebooks.type_dotted': 'Punktiert',
'notebooks.type_music': 'Notenlinien',
// ─── Page Templates ──────────────────────────────────────────────
'notebooks.page_template': 'Seitenvorlage',
'notebooks.page_template_cornell': 'Cornell-Notizen',
'notebooks.page_template_cornell_desc': 'Cornell-Notizsystem mit Zusammenfassung',
'notebooks.page_template_mindmap': 'Mind Map',
'notebooks.page_template_mindmap_desc': 'Zentrale Idee mit Verzweigungen',
'notebooks.page_template_venn': 'Venn-Diagramm',
'notebooks.page_template_venn_desc': 'Zwei Mengen vergleichen',
'notebooks.page_template_tchart': 'T-Diagramm',
'notebooks.page_template_tchart_desc': 'Zwei Seiten vergleichen',
'notebooks.page_template_weekly': 'Wochenplaner',
'notebooks.page_template_weekly_desc': 'Wochenuebersicht mit Aufgaben',
'notebooks.page_template_blank': 'Leere Seite',
'notebooks.page_template_choose': 'Seitenvorlage waehlen',
// ─── Sticky Notes ────────────────────────────────────────────────
'notebooks.sticky_note': 'Klebezettel',
'notebooks.sticky_note_add': 'Klebezettel hinzufuegen',
'notebooks.sticky_note_delete': 'Klebezettel entfernen',
'notebooks.sticky_note_color': 'Farbe',
'notebooks.sticky_note_edit': 'Klebezettel bearbeiten',
// ─── Search Within Notebook ──────────────────────────────────────
'notebooks.search_pages': 'Seiten durchsuchen',
'notebooks.search_pages_placeholder': 'Text auf allen Seiten suchen…',
'notebooks.search_no_results': 'Keine Ergebnisse gefunden',
'notebooks.search_results': 'Ergebnisse',
'notebooks.search_on_page': 'auf Seite',
// ─── Page Duplication ────────────────────────────────────────────
'notebooks.duplicate_page': 'Seite duplizieren',
'notebooks.duplicate_page_success': 'Seite dupliziert',
'notebooks.duplicate_page_error': 'Fehler beim Duplizieren der Seite',
// ─── Sections / Chapters ─────────────────────────────────────────
'notebooks.sections': 'Abschnitte',
'notebooks.section_add': 'Abschnitt hinzufuegen',
'notebooks.section_name': 'Abschnittsname',
'notebooks.section_name_placeholder': 'Abschnittsname eingeben',
'notebooks.section_delete': 'Abschnitt entfernen',
'notebooks.section_divider': 'Trennblatt',
'notebooks.table_of_contents': 'Inhaltsverzeichnis',
'notebooks.no_sections': 'Keine Abschnitte vorhanden',
// ─── Highlighter Tool ────────────────────────────────────────────
'drawing.tool_highlighter': 'Textmarker',
'drawing.tool_highlighter_desc': 'Halbtransparenter Textmarker zum Hervorheben',
// ─── Enhanced Notifications ──────────────────────────────────────
'notifications.today': 'Heute',
'notifications.yesterday': 'Gestern',
@@ -3499,6 +3558,194 @@ const de: TranslationDict = {
'dsgvo.right_objection_desc': 'Sie haben das Recht, aus Gründen der besonderen Situation Widerspruch gegen die Verarbeitung einzulegen.',
'dsgvo.dpa_download': 'AVV-Vorlage herunterladen',
'dsgvo.data_register_download': 'Verzeichnis herunterladen',
'dsgvo.consent_management': 'Einwilligungsverwaltung',
'dsgvo.consent_management_desc': 'Verwalten Sie Ihre Einwilligungen zur Datenverarbeitung.',
'dsgvo.consent_data_processing': 'Datenverarbeitung',
'dsgvo.consent_data_processing_desc': 'Einwilligung zur Verarbeitung Ihrer Daten für den Betrieb der Plattform.',
'dsgvo.consent_communication': 'Kommunikation',
'dsgvo.consent_communication_desc': 'Einwilligung zum Empfang von Benachrichtigungen und E-Mails.',
'dsgvo.consent_analytics': 'Anonyme Analyse',
'dsgvo.consent_analytics_desc': 'Einwilligung zur anonymen Nutzungsanalyse zur Verbesserung der Plattform.',
'dsgvo.consent_third_party': 'Datenweitergabe',
'dsgvo.consent_third_party_desc': 'Einwilligung zur Weitergabe von Daten an Dritte (z.B. Wettbewerbspartner).',
'dsgvo.consent_granted': 'Erteilt',
'dsgvo.consent_revoked': 'Widerrufen',
'dsgvo.consent_revoke': 'Widerrufen',
'dsgvo.consent_grant': 'Erteilen',
'dsgvo.retention_settings': 'Aufbewahrungseinstellungen',
'dsgvo.retention_settings_desc': 'Konfigurieren Sie die Speicherdauer Ihrer Daten.',
'dsgvo.retention_grades': 'Noten aufbewahren für',
'dsgvo.retention_attendance': 'Anwesenheitsdaten aufbewahren für',
'dsgvo.retention_behavior': 'Verhaltensdaten aufbewahren für',
'dsgvo.retention_years': 'Jahre',
// ─── Digital Reward Catalog ─────────────────────────────────────────
'rewards.title': 'Belohnungen',
'rewards.catalog': 'Belohnungskatalog',
'rewards.catalog_desc': 'Lösen Sie Ihre Punkte für tolle Belohnungen ein.',
'rewards.category.streaming': 'Streaming',
'rewards.category.shopping': 'Einkaufen',
'rewards.category.experience': 'Erlebnisse',
'rewards.category.merchandise': 'Schul-Merchandise',
'rewards.category.privilege': 'Sonderrechte',
'rewards.category.all': 'Alle Kategorien',
'rewards.points_balance': 'Punktestand',
'rewards.points_earned': 'Punkte verdient',
'rewards.points_spent': 'Punkte ausgegeben',
'rewards.redeem': 'Einlösen',
'rewards.redeem_confirm': 'Belohnung einlösen?',
'rewards.redeem_confirm_desc': 'Möchten Sie {points} Punkte für {reward} einlösen?',
'rewards.redeem_success': 'Belohnung erfolgreich eingelöst!',
'rewards.redeem_error': 'Fehler beim Einlösen der Belohnung.',
'rewards.insufficient_points': 'Nicht genügend Punkte.',
'rewards.out_of_stock': 'Nicht mehr verfügbar.',
'rewards.stock_remaining': 'Noch {count} verfügbar',
'rewards.unlimited': 'Unbegrenzt',
'rewards.points_cost': 'Kosten',
'rewards.my_redemptions': 'Meine Einlösungen',
'rewards.redemption_status': 'Status',
'rewards.redemption.pending': 'Ausstehend',
'rewards.redemption.approved': 'Genehmigt',
'rewards.redemption.rejected': 'Abgelehnt',
'rewards.redemption.fulfilled': 'Erfüllt',
'rewards.points_history': 'Punkteverlauf',
'rewards.points_source.competition': 'Wettbewerb',
'rewards.points_source.grade': 'Gute Noten',
'rewards.points_source.attendance': 'Anwesenheit',
'rewards.points_source.homework': 'Hausaufgaben',
'rewards.points_source.bonus': 'Bonus',
'rewards.create_reward': 'Belohnung erstellen',
'rewards.edit_reward': 'Belohnung bearbeiten',
'rewards.delete_reward': 'Belohnung löschen',
'rewards.no_rewards': 'Keine Belohnungen vorhanden',
'rewards.streaming.netflix': 'Netflix-Gutschein',
'rewards.streaming.spotify': 'Spotify-Premium',
'rewards.streaming.disney': 'Disney+-Gutschein',
'rewards.shopping.amazon': 'Amazon-Gutschein',
'rewards.shopping.thalia': 'Thalia-Gutschein',
'rewards.shopping.mediamarkt': 'MediaMarkt-Gutschein',
'rewards.experience.cinema': 'Kino-Ticket',
'rewards.experience.theater': 'Theater-Ticket',
'rewards.experience.concert': 'Konzert-Ticket',
'rewards.experience.museum': 'Museumseintritt',
'rewards.merchandise.tshirt': 'Schul-T-Shirt',
'rewards.merchandise.stickers': 'Aufkleber-Set',
'rewards.merchandise.notebook': 'Schulheft',
'rewards.privilege.homework_pass': 'Hausaufgaben-Frei',
'rewards.privilege.extra_break': 'Extra Pause',
'rewards.privilege.choose_seat': 'Sitzplatz wählen',
'rewards.earn_points': 'Punkte verdienen',
'rewards.earn_points_desc': 'Verdienen Sie Punkte durch aktive Teilnahme am Schulleben.',
'rewards.earn_competition': 'Wettbewerbe: Teilnahme + Gewinn',
'rewards.earn_grades': 'Gute Noten: Je besser, desto mehr Punkte',
'rewards.earn_attendance': 'Anwesenheitssträhne: Regelmäßig dabei sein',
'rewards.earn_homework': 'Hausaufgaben: Pünktlich abgeben',
'rewards.earn_bonus': 'Bonuspunkte: Besondere Leistungen',
// ─── Teacher Dashboard ──────────────────────────────────────────────
'teacher.dashboard_title': 'Lehrer-Dashboard',
'teacher.welcome_back': 'Willkommen zurück',
'teacher.my_classes': 'Meine Klassen',
'teacher.my_classes_desc': 'Übersicht Ihrer Klassen mit Schüleranzahl',
'teacher.recent_assessments': 'Letzte Bewertungen',
'teacher.graded': 'Benotet',
'teacher.pending': 'Ausstehend',
'teacher.upcoming_lessons': 'Kommende Stunden',
'teacher.competence_progress': 'Kompetenzfortschritt',
'teacher.competence_progress_desc': 'Radar-Übersicht der Kompetenzbereiche',
'teacher.recent_progress_entries': 'Neueste Fortschrittseinträge',
'teacher.quick_actions': 'Schnellaktionen',
'teacher.create_assessment': 'Bewertung erstellen',
'teacher.take_attendance': 'Anwesenheit erfassen',
'teacher.log_progress': 'Fortschritt loggen',
'teacher.message_parents': 'Eltern kontaktieren',
'teacher.student_count': 'Schüler',
'teacher.no_classes': 'Keine Klassen vorhanden',
'teacher.no_assessments': 'Keine Bewertungen vorhanden',
'teacher.no_lessons': 'Keine Stunden geplant',
'teacher.avg_mastery': 'Durchschnittsniveau',
'teacher.assessment_count': 'Anzahl Bewertungen',
'teacher.class_overview': 'Klassenübersicht',
// ─── Student Dashboard (enhanced) ───────────────────────────────────
'student.my_grades_overview': 'Meine Notenübersicht',
'student.my_grades_trend': 'Notenverlauf',
'student.grade_trend_up': 'Steigend',
'student.grade_trend_down': 'Fallend',
'student.grade_trend_stable': 'Stabil',
'student.my_competence_flower': 'Meine Kompetenzblume',
'student.competence_flower_desc': 'Visuelle Übersicht deiner Kompetenzentwicklung',
'student.upcoming_homework': 'Anstehende Hausaufgaben',
'student.no_homework': 'Keine anstehenden Hausaufgaben',
'student.competition_standings': 'Wettbewerbsstände',
'student.my_rank': 'Mein Rang',
'student.points': 'Punkte',
'student.no_competitions': 'Keine aktiven Wettbewerbe',
'student.school_announcements': 'Schulankündigungen',
// ─── Parent Dashboard (enhanced) ────────────────────────────────────
'parent.children_grades': 'Noten der Kinder',
'parent.children_grades_desc': 'Aktuelle Noten Ihrer Kinder',
'parent.child_grade': 'Note',
'parent.child_subject': 'Fach',
'parent.children_attendance_summary': 'Anwesenheitsübersicht der Kinder',
'parent.present_rate': 'Anwesenheitsrate',
'parent.absent_count': 'Fehltage',
'parent.late_count': 'Verspätungen',
'parent.teacher_messages': 'Lehrernachrichten',
'parent.no_teacher_messages': 'Keine Nachrichten von Lehrern',
'parent.school_announcements': 'Schulankündigungen',
'parent.calendar_events': 'Termine',
'parent.upcoming_events': 'Anstehende Termine',
'parent.no_events': 'Keine anstehenden Termine',
'parent.competition_results': 'Wettbewerbsergebnisse',
'parent.no_competition_results': 'Keine Wettbewerbsgebnisse verfügbar',
'parent.child_recent_grade': 'Letzte Note',
// ─── School Admin Dashboard ─────────────────────────────────────────
'admin.dashboard_title': 'Admin-Dashboard',
'admin.welcome_back': 'Willkommen zurück',
'admin.school_overview': 'Schulübersicht',
'admin.total_students': 'Schüler insgesamt',
'admin.total_classes': 'Klassen insgesamt',
'admin.total_teachers': 'Lehrkräfte insgesamt',
'admin.total_parents': 'Eltern insgesamt',
'admin.system_health': 'Systemstatus',
'admin.system_healthy': 'System läuft einwandfrei',
'admin.system_degraded': 'Eingeschränkter Betrieb',
'admin.uptime': 'Betriebszeit',
'admin.active_users': 'Aktive Nutzer',
'admin.storage_used': 'Speicherbelegung',
'admin.api_requests': 'API-Anfragen heute',
'admin.audit_log': 'Aktivitätsprotokoll',
'admin.audit_log_desc': 'Letzte Systemaktivitäten',
'admin.no_audit_entries': 'Keine Aktivitäten protokolliert',
'admin.user_management': 'Benutzerverwaltung',
'admin.manage_teachers': 'Lehrkräfte verwalten',
'admin.manage_students': 'Schüler verwalten',
'admin.manage_parents': 'Eltern verwalten',
'admin.school_statistics': 'Schulstatistiken',
'admin.enrollment_trend': 'Einschreibungsentwicklung',
'admin.grade_distribution': 'Notenverteilung',
'admin.attendance_rate': 'Anwesenheitsrate',
'admin.competency_overview': 'Kompetenzübersicht',
'admin.announcements_management': 'Ankündigungen verwalten',
'admin.create_announcement': 'Ankündigung erstellen',
'admin.recent_activity': 'Letzte Aktivitäten',
'admin.action_type': 'Aktionstyp',
'admin.user': 'Benutzer',
'admin.timestamp': 'Zeitstempel',
'admin.details': 'Details',
'admin.quick_actions': 'Schnellaktionen',
'admin.add_teacher': 'Lehrkraft hinzufügen',
'admin.add_student': 'Schüler hinzufügen',
'admin.add_class': 'Klasse hinzufügen',
'admin.school_settings': 'Schuleinstellungen',
'admin.export_data': 'Daten exportieren',
'admin.health_excellent': 'Ausgezeichnet',
'admin.health_good': 'Gut',
'admin.health_warning': 'Warnung',
'admin.health_critical': 'Kritisch',
};
const en: TranslationDict = {
@@ -4497,6 +4744,17 @@ const en: TranslationDict = {
'assessments.range': 'Range',
'assessments.no_scores': 'No scores available',
// ─── Scratch pad (assessments) ──────────────────────────────────────
'assessments.scratch_pad': 'Scratch Pad',
'assessments.scratch_pad_title': 'Scratch Pad — {title}',
'assessments.scratch_pad_description': 'Work out your solution by hand here.',
'assessments.scratch_pad_save': 'Save Drawing',
'assessments.scratch_pad_saved': 'Drawing saved',
'assessments.scratch_pad_saving': 'Saving…',
'assessments.scratch_pad_open': 'Open Scratch Pad',
'assessments.scratch_pad_close': 'Close Scratch Pad',
'assessments.scratch_pad_resize': 'Resize',
// ─── Student journey timeline ──────────────────────────────────────
'student.journey': 'Learning Journey',
'student.journey_milestone': 'Milestone',
@@ -5634,6 +5892,54 @@ const en: TranslationDict = {
'notebooks.type_dotted': 'Dotted',
'notebooks.type_music': 'Music Lines',
// ─── Page Templates ──────────────────────────────────────────────
'notebooks.page_template': 'Page Template',
'notebooks.page_template_cornell': 'Cornell Notes',
'notebooks.page_template_cornell_desc': 'Cornell note-taking system with summary',
'notebooks.page_template_mindmap': 'Mind Map',
'notebooks.page_template_mindmap_desc': 'Central idea with branches',
'notebooks.page_template_venn': 'Venn Diagram',
'notebooks.page_template_venn_desc': 'Compare two sets',
'notebooks.page_template_tchart': 'T-Chart',
'notebooks.page_template_tchart_desc': 'Compare two sides',
'notebooks.page_template_weekly': 'Weekly Planner',
'notebooks.page_template_weekly_desc': 'Weekly overview with tasks',
'notebooks.page_template_blank': 'Blank Page',
'notebooks.page_template_choose': 'Choose page template',
// ─── Sticky Notes ────────────────────────────────────────────────
'notebooks.sticky_note': 'Sticky Note',
'notebooks.sticky_note_add': 'Add Sticky Note',
'notebooks.sticky_note_delete': 'Remove Sticky Note',
'notebooks.sticky_note_color': 'Color',
'notebooks.sticky_note_edit': 'Edit Sticky Note',
// ─── Search Within Notebook ──────────────────────────────────────
'notebooks.search_pages': 'Search Pages',
'notebooks.search_pages_placeholder': 'Search text across all pages…',
'notebooks.search_no_results': 'No results found',
'notebooks.search_results': 'Results',
'notebooks.search_on_page': 'on page',
// ─── Page Duplication ────────────────────────────────────────────
'notebooks.duplicate_page': 'Duplicate Page',
'notebooks.duplicate_page_success': 'Page duplicated',
'notebooks.duplicate_page_error': 'Error duplicating page',
// ─── Sections / Chapters ─────────────────────────────────────────
'notebooks.sections': 'Sections',
'notebooks.section_add': 'Add Section',
'notebooks.section_name': 'Section Name',
'notebooks.section_name_placeholder': 'Enter section name',
'notebooks.section_delete': 'Remove Section',
'notebooks.section_divider': 'Divider',
'notebooks.table_of_contents': 'Table of Contents',
'notebooks.no_sections': 'No sections yet',
// ─── Highlighter Tool ────────────────────────────────────────────
'drawing.tool_highlighter': 'Highlighter',
'drawing.tool_highlighter_desc': 'Semi-transparent highlighter for emphasizing',
// ─── Enhanced Notifications ──────────────────────────────────────
'notifications.today': 'Today',
'notifications.yesterday': 'Yesterday',
@@ -6997,6 +7303,194 @@ const en: TranslationDict = {
'dsgvo.right_objection_desc': 'You have the right to object to processing on grounds relating to your particular situation.',
'dsgvo.dpa_download': 'Download DPA template',
'dsgvo.data_register_download': 'Download register',
'dsgvo.consent_management': 'Consent Management',
'dsgvo.consent_management_desc': 'Manage your data processing consents.',
'dsgvo.consent_data_processing': 'Data Processing',
'dsgvo.consent_data_processing_desc': 'Consent to process your data for platform operation.',
'dsgvo.consent_communication': 'Communication',
'dsgvo.consent_communication_desc': 'Consent to receive notifications and emails.',
'dsgvo.consent_analytics': 'Anonymous Analytics',
'dsgvo.consent_analytics_desc': 'Consent to anonymous usage analytics for platform improvement.',
'dsgvo.consent_third_party': 'Third-Party Sharing',
'dsgvo.consent_third_party_desc': 'Consent to share data with third parties (e.g., competition partners).',
'dsgvo.consent_granted': 'Granted',
'dsgvo.consent_revoked': 'Revoked',
'dsgvo.consent_revoke': 'Revoke',
'dsgvo.consent_grant': 'Grant',
'dsgvo.retention_settings': 'Retention Settings',
'dsgvo.retention_settings_desc': 'Configure how long your data is retained.',
'dsgvo.retention_grades': 'Retain grades for',
'dsgvo.retention_attendance': 'Retain attendance data for',
'dsgvo.retention_behavior': 'Retain behavior data for',
'dsgvo.retention_years': 'years',
// ─── Digital Reward Catalog ─────────────────────────────────────────
'rewards.title': 'Rewards',
'rewards.catalog': 'Reward Catalog',
'rewards.catalog_desc': 'Redeem your points for great rewards.',
'rewards.category.streaming': 'Streaming',
'rewards.category.shopping': 'Shopping',
'rewards.category.experience': 'Experiences',
'rewards.category.merchandise': 'School Merchandise',
'rewards.category.privilege': 'Special Privileges',
'rewards.category.all': 'All Categories',
'rewards.points_balance': 'Points Balance',
'rewards.points_earned': 'Points Earned',
'rewards.points_spent': 'Points Spent',
'rewards.redeem': 'Redeem',
'rewards.redeem_confirm': 'Redeem Reward?',
'rewards.redeem_confirm_desc': 'Do you want to spend {points} points for {reward}?',
'rewards.redeem_success': 'Reward redeemed successfully!',
'rewards.redeem_error': 'Error redeeming reward.',
'rewards.insufficient_points': 'Insufficient points.',
'rewards.out_of_stock': 'Out of stock.',
'rewards.stock_remaining': '{count} remaining',
'rewards.unlimited': 'Unlimited',
'rewards.points_cost': 'Cost',
'rewards.my_redemptions': 'My Redemptions',
'rewards.redemption_status': 'Status',
'rewards.redemption.pending': 'Pending',
'rewards.redemption.approved': 'Approved',
'rewards.redemption.rejected': 'Rejected',
'rewards.redemption.fulfilled': 'Fulfilled',
'rewards.points_history': 'Points History',
'rewards.points_source.competition': 'Competition',
'rewards.points_source.grade': 'Good Grades',
'rewards.points_source.attendance': 'Attendance',
'rewards.points_source.homework': 'Homework',
'rewards.points_source.bonus': 'Bonus',
'rewards.create_reward': 'Create Reward',
'rewards.edit_reward': 'Edit Reward',
'rewards.delete_reward': 'Delete Reward',
'rewards.no_rewards': 'No rewards available',
'rewards.streaming.netflix': 'Netflix Voucher',
'rewards.streaming.spotify': 'Spotify Premium',
'rewards.streaming.disney': 'Disney+ Voucher',
'rewards.shopping.amazon': 'Amazon Voucher',
'rewards.shopping.thalia': 'Thalia Voucher',
'rewards.shopping.mediamarkt': 'MediaMarkt Voucher',
'rewards.experience.cinema': 'Cinema Ticket',
'rewards.experience.theater': 'Theater Ticket',
'rewards.experience.concert': 'Concert Ticket',
'rewards.experience.museum': 'Museum Entry',
'rewards.merchandise.tshirt': 'School T-Shirt',
'rewards.merchandise.stickers': 'Sticker Set',
'rewards.merchandise.notebook': 'School Notebook',
'rewards.privilege.homework_pass': 'Homework Pass',
'rewards.privilege.extra_break': 'Extra Break Time',
'rewards.privilege.choose_seat': 'Choose Your Seat',
'rewards.earn_points': 'Earn Points',
'rewards.earn_points_desc': 'Earn points through active participation in school life.',
'rewards.earn_competition': 'Competitions: Participation + Wins',
'rewards.earn_grades': 'Good Grades: Better grades earn more points',
'rewards.earn_attendance': 'Attendance Streak: Be there regularly',
'rewards.earn_homework': 'Homework: Submit on time',
'rewards.earn_bonus': 'Bonus Points: Special achievements',
// ─── Teacher Dashboard ──────────────────────────────────────────────
'teacher.dashboard_title': 'Teacher Dashboard',
'teacher.welcome_back': 'Welcome back',
'teacher.my_classes': 'My Classes',
'teacher.my_classes_desc': 'Overview of your classes with student count',
'teacher.recent_assessments': 'Recent Assessments',
'teacher.graded': 'Graded',
'teacher.pending': 'Pending',
'teacher.upcoming_lessons': 'Upcoming Lessons',
'teacher.competence_progress': 'Competence Progress',
'teacher.competence_progress_desc': 'Radar overview of competence areas',
'teacher.recent_progress_entries': 'Recent Progress Entries',
'teacher.quick_actions': 'Quick Actions',
'teacher.create_assessment': 'Create Assessment',
'teacher.take_attendance': 'Take Attendance',
'teacher.log_progress': 'Log Progress',
'teacher.message_parents': 'Message Parents',
'teacher.student_count': 'Students',
'teacher.no_classes': 'No classes available',
'teacher.no_assessments': 'No assessments available',
'teacher.no_lessons': 'No lessons scheduled',
'teacher.avg_mastery': 'Average Mastery',
'teacher.assessment_count': 'Assessment Count',
'teacher.class_overview': 'Class Overview',
// ─── Student Dashboard (enhanced) ───────────────────────────────────
'student.my_grades_overview': 'My Grades Overview',
'student.my_grades_trend': 'Grade Trend',
'student.grade_trend_up': 'Improving',
'student.grade_trend_down': 'Declining',
'student.grade_trend_stable': 'Stable',
'student.my_competence_flower': 'My Competence Flower',
'student.competence_flower_desc': 'Visual overview of your competence development',
'student.upcoming_homework': 'Upcoming Homework',
'student.no_homework': 'No upcoming homework',
'student.competition_standings': 'Competition Standings',
'student.my_rank': 'My Rank',
'student.points': 'Points',
'student.no_competitions': 'No active competitions',
'student.school_announcements': 'School Announcements',
// ─── Parent Dashboard (enhanced) ────────────────────────────────────
'parent.children_grades': "Children's Grades",
'parent.children_grades_desc': "Current grades of your children",
'parent.child_grade': 'Grade',
'parent.child_subject': 'Subject',
'parent.children_attendance_summary': "Children's Attendance Summary",
'parent.present_rate': 'Attendance Rate',
'parent.absent_count': 'Absences',
'parent.late_count': 'Late Arrivals',
'parent.teacher_messages': 'Teacher Messages',
'parent.no_teacher_messages': 'No messages from teachers',
'parent.school_announcements': 'School Announcements',
'parent.calendar_events': 'Calendar Events',
'parent.upcoming_events': 'Upcoming Events',
'parent.no_events': 'No upcoming events',
'parent.competition_results': 'Competition Results',
'parent.no_competition_results': 'No competition results available',
'parent.child_recent_grade': 'Recent Grade',
// ─── School Admin Dashboard ─────────────────────────────────────────
'admin.dashboard_title': 'Admin Dashboard',
'admin.welcome_back': 'Welcome back',
'admin.school_overview': 'School Overview',
'admin.total_students': 'Total Students',
'admin.total_classes': 'Total Classes',
'admin.total_teachers': 'Total Teachers',
'admin.total_parents': 'Total Parents',
'admin.system_health': 'System Health',
'admin.system_healthy': 'System running smoothly',
'admin.system_degraded': 'Degraded performance',
'admin.uptime': 'Uptime',
'admin.active_users': 'Active Users',
'admin.storage_used': 'Storage Used',
'admin.api_requests': 'API Requests Today',
'admin.audit_log': 'Audit Log',
'admin.audit_log_desc': 'Recent system activities',
'admin.no_audit_entries': 'No activities logged',
'admin.user_management': 'User Management',
'admin.manage_teachers': 'Manage Teachers',
'admin.manage_students': 'Manage Students',
'admin.manage_parents': 'Manage Parents',
'admin.school_statistics': 'School Statistics',
'admin.enrollment_trend': 'Enrollment Trend',
'admin.grade_distribution': 'Grade Distribution',
'admin.attendance_rate': 'Attendance Rate',
'admin.competency_overview': 'Competency Overview',
'admin.announcements_management': 'Announcements Management',
'admin.create_announcement': 'Create Announcement',
'admin.recent_activity': 'Recent Activity',
'admin.action_type': 'Action Type',
'admin.user': 'User',
'admin.timestamp': 'Timestamp',
'admin.details': 'Details',
'admin.quick_actions': 'Quick Actions',
'admin.add_teacher': 'Add Teacher',
'admin.add_student': 'Add Student',
'admin.add_class': 'Add Class',
'admin.school_settings': 'School Settings',
'admin.export_data': 'Export Data',
'admin.health_excellent': 'Excellent',
'admin.health_good': 'Good',
'admin.health_warning': 'Warning',
'admin.health_critical': 'Critical',
};
const translations: Record<string, TranslationDict> = { de, en };