/** English UI messages.
 *
 *  Source of truth — every key here must exist in every other locale
 *  file. ``i18n-parity.test.ts`` enforces this.
 */
export const en = {
  // Navigation / header
  "nav.catalog": "Catalog",
  "nav.dashboard": "Dashboard",
  "nav.studio": "Studio",
  "nav.admin": "Admin",
  "nav.signIn": "Sign in",
  "nav.signUp": "Sign up",
  "nav.profile": "Profile",
  "nav.signOut": "Sign out",
  "nav.search.placeholder": "Search courses…",
  "nav.notifications.aria": "Notifications",

  // Catalog
  "catalog.title": "Courses",
  "catalog.filters.subject": "Subject",
  "catalog.filters.difficulty": "Difficulty",
  "catalog.filters.tag": "Tag",
  "catalog.filters.all": "All",
  "catalog.empty": "No courses match those filters.",
  "catalog.featuredBadge": "Featured",
  "courseCard.modulesCount": "{n} modules",

  // Course detail
  "course.enroll": "Enroll",
  "course.continue": "Continue learning",
  "course.start": "Start learning",
  "course.syllabus": "Syllabus",
  "course.reviews": "Reviews",
  "course.modules": "Modules",
  "course.students": "Students",
  "course.rating": "Rating",
  "course.progress": "Progress",
  "course.signInToEnroll": "Sign in to enroll",
  "course.discussionForum": "Discussion forum",
  "course.whatYoullLearn": "What you'll learn",
  "course.lessonsCount": "{count} lessons",
  "course.lastUpdated": "last updated {date}",

  // Lesson player / progress
  "player.previous": "Previous",
  "player.next": "Next",
  "player.markComplete": "Mark complete & continue",
  "player.completed": "Completed",
  "player.freePreview": "free preview",

  // Auth — sanctum / inscription / lost-key / new-stylus
  "auth.login.title": "Sign in",
  "auth.login.cartouche": "Account",
  "auth.login.heading": "Welcome back",
  "auth.login.subtitle": "Sign in to continue learning.",
  "auth.login.email": "Email",
  "auth.login.password": "Password",
  "auth.login.submit": "Sign in",
  "auth.login.submitting": "Signing in…",
  "auth.login.welcomeToast": "Welcome back!",
  "auth.login.error": "Could not sign in",
  "auth.login.noAccount": "Don't have an account?",
  "auth.register.title": "Create account",
  "auth.register.cartouche": "Account",
  "auth.register.heading": "Create your account",
  "auth.register.subtitle": "It takes about 30 seconds.",
  "auth.register.fullName": "Full name",
  "auth.register.submit": "Create account",
  "auth.register.submitting": "Creating…",
  "auth.register.passwordHint": "At least 12 characters with a mix of letters, numbers, or symbols.",
  "auth.register.successToast": "Account created — check your inbox to verify your email",
  "auth.register.error": "Could not create account",
  "auth.register.haveAccount": "Already have an account?",
  "auth.forgotPassword": "Forgot password?",
  "auth.forgot.cartouche": "Password",
  "auth.forgot.heading": "Forgot password?",
  "auth.forgot.subtitle": "We'll email you a link to set a new one.",
  "auth.forgot.emailPlaceholder": "you@example.com",
  "auth.forgot.submit": "Send reset link",
  "auth.forgot.submitting": "Sending…",
  "auth.forgot.sent": "If an account exists for {email}, a reset link is on its way.",
  "auth.forgot.sendAgain": "Send again",
  "auth.forgot.resentToast": "Reset link sent again",
  "auth.forgot.backToLogin": "Back to sign in",
  "auth.forgot.error": "Could not send reset email",
  "auth.reset.cartouche": "Password",
  "auth.reset.heading": "Choose a new password",
  "auth.reset.subtitle": "Links expire 30 minutes after being requested.",
  "auth.reset.passwordPlaceholder": "New password — at least 12 characters",
  "auth.reset.submit": "Set new password",
  "auth.reset.submitting": "Updating…",
  "auth.reset.missingToken": "This page needs a reset token in the URL.",
  "auth.reset.requestNew": "Request a new one",
  "auth.reset.tokenError": "Missing reset token",
  "auth.reset.successToast": "Password updated — please sign in",
  "auth.reset.error": "Could not reset password",

  // Catalog page (public browse)
  "catalogPage.cartouche": "Catalogue",
  "catalogPage.h1_1": "Every subject,",
  "catalogPage.h1_2": "catalogued",
  "catalogPage.subline": "Browse what instructors across Lumen are teaching. Filter by subject, difficulty, or tag.",
  "catalogPage.searchPlaceholder": "Search the catalogue…",
  "catalogPage.searchAria": "Search courses",
  "catalogPage.anyDifficulty": "Any",
  "catalogPage.diff.beginner": "Beginner",
  "catalogPage.diff.intermediate": "Intermediate",
  "catalogPage.diff.advanced": "Advanced",
  "catalogPage.reset": "Reset",
  "catalogPage.allSubjects": "All",
  "catalogPage.tagFilterAria": "Tag filter",
  "catalogPage.clearTagAria": "Clear tag filter",
  "catalogPage.noMatch": "No courses match those filters.",
  "catalogPage.noMatchBody": "Try fewer constraints, or reset the search.",
  "catalogPage.resultCount": "{count} results",

  // Homepage — flagship marketing copy
  "home.cartouche": "Now open",
  "home.heroTitle1": "Take a path.",
  "home.heroTitle2": "Become it.",
  "home.heroSubline": "Modern courses for the skills you actually use. Hands-on projects, live cohorts, certificates that mean something.",
  "home.enterLibrary": "Explore courses",
  "home.inscribeYourself": "Get started — free",
  "home.pillarsCartouche": "Why Lumen",
  "home.pillarsH2_1": "A platform that respects your time.",
  "home.pillarsH2_2": "And the depth of the work.",
  "home.pillar1.number": "01",
  "home.pillar2.number": "02",
  "home.pillar3.number": "03",
  "home.pillar1.title": "Build real projects.",
  "home.pillar1.body": "Every course ends in something you can show — a deployed app, an analysed dataset, a finished portfolio piece. No quizzes pretending to be skills.",
  "home.pillar2.title": "Learn at your pace.",
  "home.pillar2.body": "Async lessons with per-step progress, an AI tutor that answers from the course itself, and a review queue that surfaces what to revisit next.",
  "home.pillar3.title": "Keep what you make.",
  "home.pillar3.body": "MIT-licensed, self-hostable. Your courses, your data, your certificates — yours to keep forever, with or without us.",
  "home.scrollCartouche": "Browse the catalogue",
  "home.scrollH2": "What's being learnt right now",
  "home.allScrolls": "All courses",
  "home.emptyTitle": "Catalogue is still being seeded.",
  "home.emptyBody": "Sign in as an instructor to publish the first course.",
  "home.ctaTitle": "Start your first course.",
  "home.ctaBody": "Free for learners, free to self-host. Pay if and when you want managed hosting.",
  "home.beginApprenticeship": "Start free",
  "home.browseFirst": "Browse first",

  // Header chrome aria-labels
  "header.themeToggle": "Toggle theme",
  "header.primaryNav": "Primary",
  "header.mobileMenu": "Mobile menu",
  "header.mobilePrimaryNav": "Mobile primary",
  "header.openMenu": "Open menu",
  "header.closeMenu": "Close menu",

  // Review editor — leave / update your own review
  "review.yours": "Your review",
  "review.leave": "Leave a review",
  "review.ratingAria": "Rating",
  "review.starAria": "{n} star",
  "review.starsAria": "{n} stars",
  "review.bodyPlaceholder": "Optional thoughts…",
  "review.update": "Update review",
  "review.post": "Post review",
  "review.updatedToast": "Review updated",
  "review.postedToast": "Review posted",
  "review.saveError": "Could not save review",
  "review.removedToast": "Review removed",
  "review.removeError": "Could not remove review",

  // Cohort card — instructor's student roster
  "cohort.title": "Students",
  "cohort.exportCsv": "Export CSV",
  "cohort.loadError": "Could not load cohort",
  "cohort.empty": "No enrolments yet.",
  "cohort.col.student": "Student",
  "cohort.col.enrolled": "Enrolled",
  "cohort.col.progress": "Progress",
  "cohort.col.status": "Status",
  "cohort.learnerFallback": "Learner",
  "cohort.status.completed": "completed",
  "cohort.status.inProgress": "in progress",
  "cohort.status.notStarted": "not started",

  // Image / file upload
  "upload.choose": "Choose file",
  "upload.uploading": "Uploading…",
  "upload.successToast": "Uploaded",
  "upload.tooLarge": "File is too large (max {n} MB)",
  "upload.exceedsLimit": "File exceeds the {n} MB limit for {kind} uploads",
  "upload.failedWithStatus": "Upload failed ({status})",
  "upload.failed": "Upload failed",
  "upload.none": "none",

  // Sessions card — active sign-ins
  "sessions.title": "Active sessions",
  "sessions.description": "{n} active · last 50 sign-ins listed below",
  "sessions.signOutAll": "Sign out everywhere",
  "sessions.empty": "No sessions on record.",
  "sessions.unknownDevice": "Unknown device",
  "sessions.signedIn": "signed in {when}",
  "sessions.revoked": "revoked {when}",
  "sessions.expires": "expires {when}",
  "sessions.revoke": "Revoke session",
  "sessions.revokedToast": "Session revoked",
  "sessions.revokeError": "Could not revoke session",
  "sessions.allRevokedToast": "Signed out of all sessions — sign in again to continue",
  "sessions.revokeAllError": "Could not revoke sessions",

  // Notifications dropdown
  "notif.title": "Notifications",
  "notif.ariaWithCount": "Notifications ({n} unread)",
  "notif.markAllRead": "Mark all read",
  "notif.marking": "Marking…",
  "notif.empty": "Nothing here yet.",

  // Preview lesson — non-enrolled visitors
  "preview.cartouche": "Preview",
  "preview.lessonFallback": "Lesson",
  "preview.forbidden": "This lesson is for enrolled students. Enroll in the course to read it.",
  "preview.notFound": "Lesson not found.",
  "preview.error": "Could not load this preview.",
  "preview.cta": "Enjoying it? Enroll to unlock the rest of the course.",

  // Single thread + replies
  "thread.notFound": "Thread not found.",
  "thread.allDiscussions": "All discussions",
  "thread.deleteThread": "Delete thread",
  "thread.deleteReply": "Delete reply",
  "thread.deletedToast": "Thread deleted",
  "thread.deleteError": "Could not delete",
  "thread.replyDeleteError": "Could not delete reply",
  "thread.replyCard": "Reply",
  "thread.replyPlaceholder": "Add to the conversation…",
  "thread.post": "Post reply",
  "thread.postError": "Could not post reply",
  "thread.replyCountOne": "{n} reply",
  "thread.replyCount": "{n} replies",

  // Discussions list — around the fire
  "discussions.cartouche": "Discussions",
  "discussions.title": "Discussions",
  "discussions.startCard": "Start a thread",
  "discussions.bodyPlaceholder": "Optional context — what have you tried?",
  "discussions.post": "Post thread",
  "discussions.posting": "Posting…",
  "discussions.postedToast": "Thread posted",
  "discussions.error": "Could not post",
  "discussions.threadCount": "{n} threads",
  "discussions.empty": "No threads yet. Start the conversation above.",
  "discussions.deletedUser": "Deleted user",

  // Error / Not-found pages
  "errorPage.cartouche": "Error",
  "errorPage.title": "Something went sideways",
  "errorPage.body": "We hit an unexpected error. The team has been notified.",
  "notFound.cartouche": "Not found",
  "notFound.code": "404",
  "notFound.title": "Page not found",
  "notFound.body": "The page you're looking for doesn't exist.",

  // Lesson editor — instructor's tool for writing a lesson
  "lessonEdit.titleEdit": "Edit lesson",
  "lessonEdit.titleNew": "New lesson",
  "lessonEdit.duration": "Duration (seconds)",
  "lessonEdit.freePreview": "Free preview (visible to non-enrolled visitors when the course is published)",
  "lessonEdit.body": "Body",
  "lessonEdit.bodyPlaceholder": "Write your lesson…",
  "lessonEdit.videoUrl": "Video URL",
  "lessonEdit.captionsUrl": "Captions URL (WebVTT, optional)",
  "lessonEdit.captionsHelp": "Add WebVTT captions so the lesson stays accessible to deaf / hard-of-hearing learners. Default: on.",
  "lessonEdit.captionsLabel": "Caption track label",
  "lessonEdit.captionsLabelPlaceholder": "English",
  "lessonEdit.captionsLang": "Language code (BCP-47)",
  "lessonEdit.assetKey": "Asset key",
  "lessonEdit.altText": "Alt text",
  "lessonEdit.filename": "Filename",
  "lessonEdit.save": "Save lesson",
  "lessonEdit.savedToast": "Lesson saved",
  "lessonEdit.saveError": "Could not save lesson",
  "lessonEdit.deletedToast": "Lesson deleted",
  "lessonEdit.deleteError": "Could not delete",
  "quizEdit.passScore": "Pass score (%)",
  "quizEdit.questionN": "Question {n}",
  "quizEdit.promptPlaceholder": "Prompt",
  "quizEdit.type": "Type",
  "quizEdit.kindSingle": "Single choice",
  "quizEdit.kindMulti": "Multiple choice",
  "quizEdit.kindShort": "Short answer",
  "quizEdit.shortAnswerPlaceholder": "Accepted answer (case-insensitive)",
  "quizEdit.choicePlaceholder": "Choice {letter}",
  "quizEdit.addChoice": "Add choice",
  "quizEdit.addQuestion": "Add question",

  // Lesson player — text/video/image/file/quiz
  "player.unsupported": "Unsupported lesson type: {type}",
  "player.download": "Download {name}",
  "quiz.pastAttempts": "Past attempts ({n})",
  "quiz.questionNumber": "Q{n}.",
  "quiz.correct": "correct",
  "quiz.incorrect": "incorrect",
  "quiz.kind.single": "single",
  "quiz.kind.multi": "multi",
  "quiz.kind.short": "short",
  "quiz.shortPlaceholder": "Your answer",
  "quiz.submit": "Submit quiz",
  "quiz.submitting": "Submitting…",
  "quiz.submitError": "Could not submit quiz",
  "quiz.scoreLine": "You scored {pct}% ({correct} of {total}).",
  "quiz.passLine": "Nice work — lesson marked complete!",
  "quiz.failLine": "Pass mark is {pct}%. Try again.",
  "quiz.retake": "Retake",

  // Site footer
  "footer.copyright": "© {year} Lumen · MIT licensed",
  "footer.docs": "Docs",

  // Admin / courses — curator's shelf
  "adminCourses.cartouche": "Catalogue",
  "adminCourses.title": "Courses",
  "adminCourses.subtitle": "Manage featured selection and oversee the catalog.",
  "adminCourses.searchPlaceholder": "Search title or overview…",
  "adminCourses.featuredOnly": "Featured only",
  "adminCourses.allCard": "All courses",
  "adminCourses.col.course": "Course",
  "adminCourses.col.owner": "Owner",
  "adminCourses.col.status": "Status",
  "adminCourses.col.featured": "Featured",
  "adminCourses.col.action": "Action",
  "adminCourses.feature": "Feature",
  "adminCourses.unfeature": "Unfeature",
  "adminCourses.empty": "No courses match.",
  "adminCourses.successToast": "Updated",
  "adminCourses.error": "Could not update",

  // Admin / users — names in the ledger
  "adminUsers.cartouche": "Users",
  "adminUsers.title": "Users",
  "adminUsers.subtitle": "Promote instructors, deactivate accounts.",
  "adminUsers.searchPlaceholder": "Search email or name…",
  "adminUsers.recentCard": "Recent",
  "adminUsers.col.user": "User",
  "adminUsers.col.role": "Role",
  "adminUsers.col.active": "Active",
  "adminUsers.col.lastLogin": "Last login",
  "adminUsers.col.actions": "Actions",
  "adminUsers.roleLabel": "Role",
  "adminUsers.role.student": "student",
  "adminUsers.role.instructor": "instructor",
  "adminUsers.role.admin": "admin",
  "adminUsers.status.active": "active",
  "adminUsers.status.disabled": "disabled",
  "adminUsers.disable": "Disable",
  "adminUsers.enable": "Enable",
  "adminUsers.empty": "No users.",
  "adminUsers.roleError": "Could not update role",
  "adminUsers.activeError": "Could not update",

  // Admin / audit
  "adminAudit.cartouche": "Audit",
  "adminAudit.title": "Audit log",
  "adminAudit.recentCard": "Recent events",
  "adminAudit.col.when": "When",
  "adminAudit.col.action": "Action",
  "adminAudit.col.actor": "Actor",
  "adminAudit.col.target": "Target",
  "adminAudit.col.data": "Data",
  "adminAudit.empty": "No events.",
  "adminAudit.loadOlder": "Load older events",

  // Admin / subjects — the disciplines
  "adminSubjects.cartouche": "Subjects",
  "adminSubjects.title": "Subjects",
  "adminSubjects.addCard": "Add subject",
  "adminSubjects.titlePlaceholder": "Title (e.g. Programming)",
  "adminSubjects.slugPlaceholder": "Slug (optional)",
  "adminSubjects.allCard": "All subjects",
  "adminSubjects.courseCount": "{n} courses",
  "adminSubjects.empty": "No subjects yet.",
  "adminSubjects.successToast": "Subject added",
  "adminSubjects.addError": "Could not add",
  "adminSubjects.deleteError": "Could not delete",

  // Admin / tags — the seals
  "adminTags.cartouche": "Tags",
  "adminTags.title": "Tags",
  "adminTags.addCard": "Add tag",
  "adminTags.namePlaceholder": "Name (e.g. Python)",
  "adminTags.add": "Add",
  "adminTags.allCard": "All tags",
  "adminTags.empty": "No tags yet.",
  "adminTags.error": "Could not add",

  // Admin root — hall of the high priest
  "admin.cartouche": "Admin",
  "admin.title": "Admin",
  "admin.subtitle": "Operate the platform.",
  "admin.stats.title": "Platform at a glance",
  "admin.stat.users": "Users",
  "admin.stat.active": "Active",
  "admin.stat.instructors": "Instructors",
  "admin.stat.courses": "Courses",
  "admin.stat.published": "Published",
  "admin.stat.drafts": "Drafts",
  "admin.stat.enrollments": "Enrollments",
  "admin.tile.subjects.title": "Subjects",
  "admin.tile.subjects.body": "Manage the taxonomy of the catalog.",
  "admin.tile.tags.title": "Tags",
  "admin.tile.tags.body": "Curate the public tag list.",
  "admin.tile.courses.title": "Courses",
  "admin.tile.courses.body": "Oversee the catalog, set featured.",
  "admin.tile.users.title": "Users",
  "admin.tile.users.body": "Promote instructors, manage activity.",
  "admin.tile.audit.title": "Audit log",
  "admin.tile.audit.body": "Track sensitive admin actions.",
  "admin.searchIndex.title": "Search index",
  "admin.searchIndex.body": "Rebuild the search index from published courses. Runs in the background.",
  "admin.searchIndex.submit": "Reindex catalog",
  "admin.searchIndex.submitting": "Queuing…",
  "admin.searchIndex.toast": "Reindex queued",
  "admin.searchIndex.error": "Could not queue reindex",

  // Studio / [id] / modules / [moduleId] — lesson editor
  "moduleEdit.cartouche": "Lesson editor",
  "moduleEdit.notFound": "Module not found.",
  "moduleEdit.backToCourse": "Back to course",
  "moduleEdit.lessons": "Lessons",
  "moduleEdit.addLesson": "Add lesson",
  "moduleEdit.empty": "Pick a lesson on the left, or add a new one to start editing.",
  "lessonType.text": "text",
  "lessonType.video": "video",
  "lessonType.image": "image",
  "lessonType.file": "file",
  "lessonType.quiz": "quiz",

  // Studio / [id] — course editor
  "studioEdit.cartouche": "Course editor",
  "studioEdit.subtitle": "Manage modules and lessons.",
  "studioEdit.previewAsStudent": "Preview as student",
  "studioEdit.publish": "Publish",
  "studioEdit.unpublish": "Unpublish",
  "studioEdit.statusToast": "Status updated",
  "studioEdit.statusError": "Could not update status",
  "studioEdit.publish.noLessons": "Add at least one lesson before publishing.",
  "studioEdit.publish.missingFields": "A title and overview are required to publish.",
  "studioEdit.publish.invalidTransition": "That status change isn't allowed from the current state.",
  "studioEdit.analytics": "Analytics",
  "studioEdit.stat.enrollments": "Enrollments",
  "studioEdit.stat.completions": "Completions",
  "studioEdit.stat.avgRating": "Avg rating",
  "studioEdit.stat.avgProgress": "Avg progress",
  "studioEdit.stat.new7d": "New (7d)",
  "studioEdit.stat.new30d": "New (30d)",
  "studioEdit.detailsCard": "Course details",
  "studioEdit.renameNotice": "Renaming regenerates the URL slug — old links to this course will redirect.",
  "studioEdit.coverUrl": "Cover URL",
  "studioEdit.detailsToast": "Details saved",
  "studioEdit.saveError": "Could not save",
  "studioEdit.modulesCard": "Modules",
  "studioEdit.newModulePlaceholder": "New module title",
  "studioEdit.addModule": "Add module",
  "studioEdit.lessonCount": "{n} lessons",
  "studioEdit.dragHandle": "Drag handle",
  "studioEdit.editLessons": "Edit lessons",
  "studioEdit.dragTip": "Tip: drag the handle to reorder modules. Click the gear to edit a module's lessons.",
  "studioEdit.outcomesHelp": "Up to 12 short phrases (each ≤240 chars). Shows above the syllabus on the course detail page as a checkmark grid.",
  "studioEdit.outcomePlaceholder": "Outcome #{n}",
  "studioEdit.remove": "Remove",
  "studioEdit.addOutcome": "Add outcome",
  "studioEdit.outcomesToast": "Outcomes saved",

  // Studio / new course
  "studioNew.cartouche": "New course",
  "studioNew.title": "New course",
  "studioNew.field.title": "Title",
  "studioNew.field.subject": "Subject",
  "studioNew.field.difficulty": "Difficulty",
  "studioNew.field.overview": "Overview",
  "studioNew.placeholder.overview": "What will students learn?",
  "studioNew.field.cover": "Cover image (optional)",
  "studioNew.diff.beginner": "Beginner",
  "studioNew.diff.intermediate": "Intermediate",
  "studioNew.diff.advanced": "Advanced",
  "studioNew.submit": "Create course",
  "studioNew.submitting": "Creating…",
  "studioNew.successToast": "Course created",
  "studioNew.error": "Could not create course",

  // Studio root — instructor studio
  "studio.cartouche": "Studio",
  "studio.filterAria": "Filter courses by status",
  "studio.title": "Instructor studio",
  "studio.subtitle": "Manage your courses and content.",
  "studio.newCourse": "New course",
  "studio.filter.all": "All",
  "studio.filter.draft": "Drafts",
  "studio.filter.published": "Published",
  "studio.filter.archived": "Archived",
  "studio.empty.none": "You haven't created any courses yet.",
  "studio.empty.filter": "No courses in this state.",
  "studio.moduleCount": "{n} modules",
  "studio.studentCount": "{n} students",

  // Studio — import-from-URL (Phase E3)
  "studio.import.button": "Import from URL",
  "studio.import.title": "Import course from URL",
  "studio.import.subtitle": "Paste a YouTube video, public Notion page, or public Google Doc.",
  "studio.import.urlPlaceholder": "https://…",
  "studio.import.urlLabel": "Source URL",
  "studio.import.detected": "Detected: {source}",
  "studio.import.source.youtube": "YouTube",
  "studio.import.source.notion": "Notion",
  "studio.import.source.google_docs": "Google Docs",
  "studio.import.source.unknown": "Unsupported source",
  "studio.import.preview": "Preview",
  "studio.import.previewing": "Extracting…",
  "studio.import.previewError": "Could not extract content from that URL.",
  "studio.import.previewEmpty": "Paste a URL above to see a draft preview.",
  "studio.import.modulesCount": "{n} modules · {l} lessons",
  "studio.import.lessonExcerpt": "Excerpt: {text}",
  "studio.import.commit": "Create draft course",
  "studio.import.committing": "Creating draft…",
  "studio.import.commitError": "Could not create the draft course.",
  "studio.import.success": "Draft course created — {modules} modules, {lessons} lessons.",
  "studio.import.cancel": "Cancel",
  "studio.import.editTitleAria": "Edit course title",
  "studio.import.editModuleAria": "Edit module title",
  "studio.import.editLessonAria": "Edit lesson title",

  // Learn — lesson player
  "learn.cartouche": "Learning",
  "learn.signInPrompt": "Sign in to open this course.",
  "learn.signInButton": "Sign in",
  "learn.enrollToast": "Enroll to start learning",
  "learn.markedToast": "Marked complete",
  "learn.saveError": "Could not save",
  "learn.noLessons": "No lessons in this course yet.",

  // Course detail page
  "courseDetail.cartouche": "Course",
  "courseDetail.notFound": "Course not found.",
  "courseDetail.instructor": "Instructor",
  "courseDetail.noModules": "No modules yet.",
  "courseDetail.module": "Module {n}",
  "courseDetail.beFirst": "Be the first to review this course.",
  "courseDetail.enrolling": "Enrolling…",
  "courseDetail.enrolled": "Enrolled!",
  "courseDetail.enrollError": "Could not enroll",
  "courseDetail.sample": "Sample",
  "courseDetail.minutes": "{n} min",
  "courseDetail.downloadCert": "Download certificate",
  "courseDetail.moreFromSubject": "More {name} courses",
  "courseDetail.moreFromDifficulty": "More {name} courses",
  "courseDetail.moreFromTag": "More {name} courses",

  // Verify email + confirm email change + cert verification
  "verifyEmail.cartouche": "Email",
  "verifyEmail.title": "Verify your email",
  "verifyEmail.checking": "Confirming…",
  "verifyEmail.success": "Your email is verified.",
  "verifyEmail.error.missingToken": "Missing token in the link.",
  "verifyEmail.error.generic": "Could not verify the link.",
  "verifyEmail.continue": "Continue to dashboard",
  "verifyEmail.goSignIn": "Go to sign in",

  "confirmEmail.cartouche": "Email change",
  "confirmEmail.title": "Confirm email change",
  "confirmEmail.success": "Your email is now {email}. Use that address next time you sign in.",
  "confirmEmail.successToast": "Email updated. Sign in with the new address.",
  "confirmEmail.invalid": "This confirmation link is invalid or has expired.",
  "confirmEmail.stale": "This link is stale — you rotated your password after requesting the change.",
  "confirmEmail.taken": "That email is now in use by another account.",
  "confirmEmail.generic": "Could not confirm",
  "confirmEmail.missingToken": "Missing token",
  "confirmEmail.backToProfile": "Back to profile",

  "verifyCert.cartouche": "Certificate",
  "verifyCert.title": "Certificate verification",
  "verifyCert.subtitle": "Look up a Lumen certificate by its ID.",
  "verifyCert.checking": "Checking…",
  "verifyCert.notFound": "No certificate with that ID.",
  "verifyCert.goHome": "Go home",
  "verifyCert.issuedTo": "Certificate issued to",
  "verifyCert.forCompleting": "for completing",
  "verifyCert.issuedOn": "Issued {date}",
  // Open Badges 3.0 / W3C VC — signature panel + credential link (Phase E5)
  "verifyCert.signatureValid": "Signature verified",
  "verifyCert.signatureInvalid": "Signature invalid",
  "verifyCert.openCredential": "Open credential JSON",
  "verifyCert.ob3Title": "Verifiable credential",
  "verifyCert.ob3Body": "This certificate is also available as a signed Open Badges 3.0 credential.",

  // Profile — your inscription
  "profile.cartouche": "Settings",
  "profile.badge.verified": "verified",
  "profile.badge.unverified": "unverified",
  "profile.banner.unverified": "Your email isn't verified yet — check your inbox or resend the link.",
  "profile.banner.resend": "Resend",
  "profile.section.profile": "Profile",
  "profile.section.profileDesc": "How others see you on Lumen.",
  "profile.field.bio": "Bio",
  "profile.field.avatar": "Avatar",
  "profile.save": "Save changes",
  "profile.section.password": "Change password",
  "profile.section.passwordDesc": "You'll be signed out of other sessions.",
  "profile.field.currentPassword": "Current password",
  "profile.field.newPasswordPlaceholder": "New password — at least 12 characters",
  "profile.password.submit": "Update password",
  "profile.password.submitting": "Updating…",
  "profile.section.email": "Change email",
  "profile.section.emailDesc": "We'll send a confirmation link to the new address. The change doesn't take effect until you click it, and all your other sessions will be signed out for security.",
  "profile.field.currentEmail": "Current email",
  "profile.field.newEmail": "New email",
  "profile.email.submit": "Send confirmation link",
  "profile.email.submitting": "Sending…",
  "profile.section.delete": "Delete account",
  "profile.section.deleteDesc": "This permanently deactivates your account.",
  "profile.delete.button": "Delete my account",
  "profile.delete.confirmPlaceholder": "Confirm with your password",
  "profile.delete.confirm": "Yes, delete my account",
  "profile.toast.saved": "Profile updated",
  "profile.toast.saveError": "Could not save",
  "profile.toast.passwordChanged": "Password changed. Sign in again to refresh sessions.",
  "profile.toast.passwordError": "Could not change password",
  "profile.toast.emailChangeSent": "We sent a confirmation link to {email}. Click it within an hour.",
  "profile.toast.emailError": "Could not start email change",
  "profile.toast.deleted": "Account deleted",
  "profile.toast.deleteError": "Could not delete account",
  "profile.toast.verifyResent": "Verification email sent",
  "profile.toast.verifyError": "Could not send verification email",

  // Notification preferences (Phase D4)
  "prefs.notifications.title": "Notifications",
  "prefs.notifications.description": "Choose how each kind of notification reaches you. Defaults to the bell only.",
  "prefs.notifications.save": "Save preferences",
  "prefs.notifications.saving": "Saving…",
  "prefs.notifications.savedToast": "Notification preferences updated",
  "prefs.notifications.errorToast": "Could not update preferences",
  "prefs.notifications.dispatch.off": "Off",
  "prefs.notifications.dispatch.in_app": "Bell only",
  "prefs.notifications.dispatch.email_immediate": "Email immediately",
  "prefs.notifications.dispatch.digest_daily": "Daily digest",
  "prefs.notifications.kind.enrolled": "Course enrollment",
  "prefs.notifications.kind.lesson_available": "New lesson available",
  "prefs.notifications.kind.certificate_ready": "Certificate ready",
  "prefs.notifications.kind.review_received": "Review on your course",
  "prefs.notifications.kind.chat_mention": "Chat mention",
  "prefs.notifications.kind.security": "Security alerts",
  "prefs.notifications.kind.discussion_reply": "Discussion reply",

  // Dashboard — your activity
  "dashboard.cartouche": "Your activity",
  "dashboard.welcome": "Welcome back, {name}",
  "dashboard.subtitle": "Pick up where you left your stylus.",
  "dashboard.inProgress": "In progress",
  "dashboard.completed": "Completed",
  "dashboard.empty.enrollments": "You haven't enrolled in a course yet.",
  "dashboard.empty.browse": "Browse the catalog",
  "dashboard.empty.completed": "No completions yet. Finish a course to see it here.",
  "dashboard.percentComplete": "{pct}% complete",
  "dashboard.continue": "Continue",
  "dashboard.certificate": "Certificate",
  "dashboard.openBadge": "Open Badge",

  // Onboarding — first-login tour (Phase D3)
  "onboarding.welcome": "Welcome to Lumen",
  "onboarding.step": "Step {n} of {total}",
  "onboarding.next": "Next",
  "onboarding.done": "Got it",
  "onboarding.skip": "Skip",
  "onboarding.dismiss": "Dismiss the tour",
  "onboarding.learner.s1.title": "Welcome to Lumen",
  "onboarding.learner.s1.body":
    "This is your learning dashboard. Anything you enroll in shows up here with progress tracking.",
  "onboarding.learner.s2.title": "Ask the tutor",
  "onboarding.learner.s2.body":
    "On every lesson page you can open the AI tutor — it answers from the course content itself, not the general web.",
  "onboarding.learner.s3.title": "Build a streak",
  "onboarding.learner.s3.body":
    "Complete one lesson a day to keep your streak alive. Spaced repetition surfaces what's worth revisiting.",
  "onboarding.instructor.s1.title": "Welcome to the studio",
  "onboarding.instructor.s1.body":
    "This is where you author courses. Drag to reorder modules and lessons; quizzes auto-grade on submission.",
  "onboarding.instructor.s2.title": "AI-assisted authoring",
  "onboarding.instructor.s2.body":
    "Paste a YouTube URL or a Notion page into a new lesson — Lumen extracts a transcript, chapters, and draft quiz items.",
  "onboarding.instructor.s3.title": "Publish when you're ready",
  "onboarding.instructor.s3.body":
    "Use 'Preview as student' to verify the flow, then hit Publish. The catalog updates immediately.",

  // Reviews queue — FSRS-6 spaced repetition (Phase E4)
  "nav.reviews": "Reviews",
  "reviews.cartouche": "Review",
  "reviews.title": "Spaced repetition",
  "reviews.subtitle":
    "Quizzes you've taken come back here on a schedule tuned to how well you remembered them.",
  "reviews.stats.due": "Due now",
  "reviews.stats.learning": "Learning",
  "reviews.stats.review": "In review",
  "reviews.stats.next7": "Next 7 days",
  "reviews.empty.title": "Nothing to review",
  "reviews.empty.body":
    "Take a quiz on any course and it'll come back here when it's time to refresh your memory.",
  "reviews.queueHeading": "Up next",
  "reviews.startReview": "Start review",
  "reviews.grade.heading": "How well did you remember?",
  "reviews.grade.again": "Again",
  "reviews.grade.hard": "Hard",
  "reviews.grade.good": "Good",
  "reviews.grade.easy": "Easy",
  "reviews.grade.allDone": "All caught up — come back tomorrow.",
  "reviews.lastReviewed": "last reviewed {when}",
  "reviews.neverReviewed": "never reviewed",
  "reviews.openCourse": "Open course",
  "reviews.seeMastery": "See full mastery",

  // Mastery dashboard (Phase E7 — weak spots + per-course rollup)
  "nav.mastery": "Mastery",
  "mastery.cartouche": "Mastery",
  "mastery.title": "What to revisit next",
  "mastery.subtitle":
    "Lessons we flagged from your quiz attempts, your review queue, and the questions you asked the tutor.",
  "mastery.weakSpots.heading": "Weak spots — start here",
  "mastery.weakSpots.empty.title": "Nothing to flag",
  "mastery.weakSpots.empty.body":
    "Take a quiz or ask the tutor a question and lessons that need a second look will appear here.",
  "mastery.courses.heading": "Mastery per course",
  "mastery.courses.completion": "Completion",
  "mastery.courses.mastery": "Mastery",
  "mastery.courses.empty": "You're not enrolled in anything yet.",
  "mastery.courses.browse": "Browse the catalog",
  "mastery.signal.quizFailed": "quiz: {score}% (failed)",
  "mastery.signal.quizLow": "quiz: {score}%",
  "mastery.signal.cardOverdue": "due {days} days",
  "mastery.signal.tutorRepeat": "asked {count} times",
  "mastery.reviewNow": "Review now",
  "mastery.openLesson": "Open lesson",

  // Tutor (Phase E1 — course-scoped RAG)
  "tutor.cartouche": "AI · Tutor",
  "tutor.heading": "Ask the tutor",
  "tutor.askButton": "Ask the tutor",
  "tutor.closeButton": "Close tutor",
  "tutor.new": "New",
  "tutor.newConversation": "Start a new conversation",
  "tutor.emptyPrompt":
    "Ask anything about this course — the tutor will answer using the lessons here and cite them.",
  "tutor.thinking": "Thinking…",
  "tutor.composerPlaceholder": "Type your question…",
  "tutor.send": "Send",
  "tutor.you": "You",
  "tutor.assistant": "Tutor",
  "tutor.startError": "Couldn't start the tutor. Try again.",
  "tutor.sendError": "Couldn't send that. Try again.",

  // Tutor agent-reasoning panel (Phase I2 — multi-agent tutor)
  "tutor.agentTrace.title": "Agent thinking",
  "tutor.agentTrace.show": "Show me how you got this",
  "tutor.agentTrace.hide": "Hide reasoning",
  "tutor.agentTrace.colTool": "Tool",
  "tutor.agentTrace.colWhy": "Why",
  "tutor.agentTrace.colResult": "Result",
  "tutor.agentTrace.noRationale": "(no rationale)",
  "tutor.agentTrace.confidenceLabel": "Confidence {n} out of 5",

  // AI-assisted authoring (Phase E2) — outline generator + per-lesson assist
  "studio.aiOutline.button": "Generate with AI",
  "ai.outline.title": "Generate course with AI",
  "ai.outline.subtitle": "Describe what you want to teach and we will propose a structure. Nothing is saved until you click Create.",
  "ai.outline.briefLabel": "Brief",
  "ai.outline.briefPlaceholder": "Describe what you want to teach in 1-2 paragraphs…",
  "ai.outline.modulesLabel": "Target modules",
  "ai.outline.generate": "Generate",
  "ai.outline.generating": "Generating…",
  "ai.outline.error": "Could not generate outline",
  "ai.outline.courseTitle": "Course title",
  "ai.outline.courseOverview": "Overview",
  "ai.outline.moduleHeader": "{modules} modules · {lessons} lessons",
  "ai.outline.emptyModules": "No modules left — start over to regenerate.",
  "ai.outline.emptyLessons": "No lessons in this module.",
  "ai.outline.moduleTitleAria": "Title of module {n}",
  "ai.outline.deleteModuleAria": "Delete module {n}",
  "ai.outline.deleteLessonAria": "Delete lesson",
  "ai.outline.startOver": "Start over",
  "ai.outline.create": "Create draft course",
  "ai.outline.creating": "Creating…",
  "ai.outline.createdToast": "Draft course created — refine the lessons next.",
  "ai.outline.createError": "Could not create course",
  "ai.outline.noSubject": "No subject available yet — add a subject in the catalog first.",
  "lessonEdit.ai.draftBody": "Draft with AI",
  "lessonEdit.ai.generateQuiz": "Generate quiz questions",
  "lessonEdit.ai.drafting": "Drafting…",
  "lessonEdit.ai.needTitle": "Give the lesson a title first so the AI knows what to write about.",
  "lessonEdit.ai.bodyDraftedToast": "Drafted — edit before saving.",
  "lessonEdit.ai.quizDraftedToast": "Quiz drafted — edit before saving.",
  "lessonEdit.ai.error": "Could not draft with AI",

  // Generic
  "common.loading": "Loading…",
  "common.save": "Save",
  "common.saving": "Saving…",
  "common.cancel": "Cancel",
  "common.delete": "Delete",
  "common.edit": "Edit",
  "common.notFound": "Not found",
  "common.tryAgain": "Try again",
  "common.language": "Language",
} as const;

export type MessageKey = keyof typeof en;
