{
  "common": {
    "appName": "Nudentic",
    "loading": "Loading...",
    "loadingApp": "Loading app...",
    "loadingWorkspace": "Loading workspace...",
    "continue": "Continue",
    "back": "Back",
    "save": "Save",
    "cancel": "Cancel",
    "delete": "Delete",
    "edit": "Edit",
    "next": "Next",
    "dismiss": "Dismiss",
    "or": "Or",
    "and": "and",
    "close": "Close",
    "redirecting": "Redirecting…",
    "readOnlyAccess": "Read-only access for this organization.",
    "errorGeneric": "Something went wrong",
    "loadingEllipsis": "Loading...",
    "search": "Search",
    "action": "Action",
    "status": "Status",
    "name": "Name",
    "email": "Email",
    "date": "Date",
    "organization": "Organization",
    "backToApp": "← Back to app",
    "copied": "Copied",
    "copyLink": "Copy link",
    "none": "None",
    "preview": "Preview",
    "openMenu": "Open menu",
    "closeMenu": "Close menu"
  },
  "language": {
    "label": "Language",
    "selectLanguage": "Select language",
    "en": "English",
    "fa": "Persian",
    "nl": "Dutch"
  },
  "theme": {
    "switchToLight": "Switch to light mode",
    "switchToDark": "Switch to dark mode",
    "lightMode": "Light mode",
    "darkMode": "Dark mode"
  },
  "nav": {
    "dashboard": "Dashboard",
    "staff": "Staff",
    "patients": "Patients",
    "appointment": "Appointment",
    "treatment": "Treatment",
    "cases": "Cases",
    "tasks": "Tasks",
    "billing": "Billing",
    "reports": "Reports",
    "clinics": "Clinics",
    "labs": "Labs"
  },
  "auth": {
    "login": "Login",
    "signIn": "Sign in",
    "signOut": "Log out",
    "register": "Register",
    "startTrial": "Start Trial",
    "startTrialShort": "Try free",
    "startFreeTrial": "Start Free Trial",
    "dashboard": "Dashboard",
    "signInTitle": "Sign in to your account",
    "signInPrompt": "Or {link}",
    "startTrialLink": "start your free trial",
    "registerTitle": "Start your 30-day free trial",
    "registerPrompt": "Already have an account?",
    "signInLink": "Sign in",
    "email": "Email address",
    "password": "Password",
    "confirmPassword": "Confirm password",
    "fullName": "Full name",
    "rememberMe": "Remember me",
    "showPassword": "Show password",
    "hidePassword": "Hide password",
    "forgotPassword": "Forgot your password?",
    "invalidCredentials": "Invalid email or password",
    "loginFailed": "Login failed",
    "registrationFailed": "Registration failed. Please try again.",
    "startMyFreeTrial": "Start my free trial",
    "trialIncludes": "Your trial includes:",
    "trialTeamMembers": "Up to 5 team members",
    "trialFullAccess": "Full access to all features",
    "trialNoCard": "30 days free, no credit card required",
    "termsAgreement": "By signing up, you agree to our {terms} and {privacy}",
    "termsOfService": "Terms of Service",
    "privacyPolicy": "Privacy Policy",
    "signedIn": "Signed in",
    "switchOrganization": "Switch organization",
    "subscriptions": "Subscriptions",
    "account": "Account",
    "emailPlaceholder": "you@example.com",
    "passwordPlaceholder": "••••••••",
    "namePlaceholder": "John Doe",
    "termsIntro": "By signing up, you agree to our",
    "errorRegistrationFailed": "Registration failed",
    "errorLoginFailed": "Login failed",
    "errorCreateOrganization": "Failed to create organization",
    "acceptInviteTitle": "Accept invitation",
    "loadingInvitation": "Loading invitation...",
    "invalidInvitationLink": "Invalid invitation link",
    "invitationAlreadyAccepted": "This invitation is already accepted. You can log in now.",
    "errorLoadInvitation": "Could not load invitation",
    "organizationLabel": "Organization:",
    "emailLabel": "Email:",
    "nameRequired": "Name is required",
    "passwordMinLength8": "Password must be at least 8 characters",
    "passwordsDoNotMatch": "Passwords do not match",
    "labelName": "Name",
    "labelCreatePassword": "Create password",
    "labelConfirmPassword": "Confirm password",
    "activateAccount": "Activate account",
    "invitationAcceptedRedirect": "Invitation accepted. Opening your workspace...",
    "invitationAcceptedSignInFailed": "Account activated, but sign-in failed. Please log in with your password.",
    "errorAcceptInvitation": "Could not accept invitation",
    "alreadyHaveAccess": "Already have access?",
    "goToLogin": "Go to login",
    "acceptOrganizationTitle": "Accept organization invitation",
    "alreadyHaveAccount": "Already have an account?",
    "invitedBy": "Invited by:",
    "ownerEmail": "Owner email",
    "activateOrganization": "Activate organization",
    "organizationAcceptedRedirect": "Invitation accepted. Opening your workspace...",
    "stepAccount": "Account",
    "stepOrganization": "Organization",
    "organizationName": "Organization name",
    "organizationNamePlaceholder": "Sunshine Dental Clinic",
    "organizationEmail": "Organization email",
    "organizationEmailPlaceholder": "contact@sunshineclinic.com",
    "organizationType": "Organization type",
    "dentalClinic": "Dental Clinic",
    "dentalLab": "Dental Lab",
    "mobile": "Mobile number",
    "mobilePlaceholder": "0912 345 6789",
    "forgotPasswordTitle": "Reset your password",
    "forgotPasswordSubtitle": "Enter the mobile number on your account. We will send a verification code.",
    "codeSentHint": "Enter the verification code we sent to your mobile.",
    "sendCode": "Send verification code",
    "verificationCode": "Verification code",
    "verificationCodePlaceholder": "12345",
    "verifyAndContinue": "Verify and continue",
    "backToSignIn": "Back to sign in",
    "codeSendFailed": "Could not send verification code. Please try again.",
    "verifyFailed": "Invalid or expired verification code."
  },
  "landing": {
    "heroTitle": "Connect Dental Clinics & Labs",
    "heroHighlight": "Seamlessly",
    "heroSubtitle": "Streamline communication between dental professionals. Start with a 30-day free trial, no credit card required.",
    "featureClinicsTitle": "For Clinics",
    "featureClinicsDescription": "Manage patients, appointments, and send cases to labs instantly.",
    "featureLabsTitle": "For Labs",
    "featureLabsDescription": "Receive cases, track progress, and communicate with clinics.",
    "featureTeamTitle": "Team Management",
    "featureTeamDescription": "Add up to 5 team members during trial. Scale as you grow.",
    "featureTrialTitle": "30-Day Trial",
    "featureTrialDescription": "Full access to all features. No credit card required.",
    "featureRealtimeTitle": "Real-time Updates",
    "featureRealtimeDescription": "Get instant notifications on case status changes.",
    "featureSecurityTitle": "Secure & Compliant",
    "featureSecurityDescription": "HIPAA-compliant with enterprise-grade security.",
    "footerCopyright": "© 2026 Nudentic. All rights reserved.",
    "termsAndConditions": "Terms & Conditions"
  },
  "accountMenu": {
    "noActiveSubscription": "No active subscription — review Subscriptions",
    "trialEnded": "Trial ended — review Subscriptions",
    "trialEndingSoon": "Trial ending soon — review Subscriptions",
    "seatsLow": "Seats running low — review Subscriptions",
    "reviewSubscriptions": "Review Subscriptions"
  },
  "validation": {
    "emailInvalid": "Please enter a valid email address",
    "passwordRequired": "Password is required",
    "nameMinLength": "Name must be at least 2 characters",
    "passwordMinLength": "Password must be at least 8 characters",
    "passwordUppercase": "Password must contain at least one uppercase letter",
    "passwordNumber": "Password must contain at least one number",
    "organizationNameMinLength": "Organization name must be at least 2 characters",
    "organizationEmailInvalid": "Please enter a valid organization email",
    "organizationTypeRequired": "Please select organization type",
    "passwordsDoNotMatch": "Passwords don't match",
    "mobileRequired": "Mobile number is required",
    "mobileInvalid": "Please enter a valid Iranian mobile number",
    "codeRequired": "Verification code is required"
  },
  "today": {
    "welcomeBack": "Welcome back!!",
    "noSubscriptionNotice": "This organization does not have an active subscription yet.",
    "choosePlanLink": "Choose a plan",
    "noSubscriptionCta": "to start the purchase process.",
    "noWidgets": "No dashboard metrics are available for your current permissions.",
    "loadError": "Could not load dashboard metrics.",
    "seatsUnlimited": "Unlimited plan",
    "widgetAppointmentsToday": "Today's Appointments",
    "widgetPatientsToday": "Patients Today",
    "widgetTreatmentsToday": "Treatments Today",
    "widgetDraftTreatments": "Draft Treatments",
    "widgetLabCasesPendingSend": "Lab Cases Pending Send",
    "widgetCasesReceivedToday": "Cases Received Today",
    "widgetCasesInProgress": "Cases In Progress",
    "widgetTasksInProgress": "Tasks In Progress",
    "widgetImportantTasks": "Important Tasks",
    "widgetOverdueCases": "Overdue Cases",
    "widgetUnassignedTasks": "Unassigned Tasks",
    "widgetPendingConnections": "Pending Connections",
    "widgetProvidersWithoutWorkingHours": "Providers Without Working Hours",
    "widgetPendingStaffInvites": "Pending Staff Invites",
    "widgetSubscription": "Subscription",
    "subscriptionSeatsLabel": "Seats used",
    "subscriptionSeatsRemainingLabel": "Seats left",
    "subscriptionSeatsPercent": "{percent}%",
    "subscriptionSeatsUnlimitedShort": "Unlimited",
    "subscriptionPeriodLabel": "Plan period",
    "subscriptionPeriodRemainingLabel": "Days left",
    "subscriptionPeriodPercent": "{percent}%",
    "subscriptionPeriodDays": "{elapsed}/{total} days",
    "subscriptionNoPlan": "No active plan",
    "chartAppointmentsWeekAllTitle": "Appointments",
    "chartAppointmentsWeekAllSubtitle": "All providers — last 7 days",
    "chartAppointmentsWeekMineTitle": "My Appointments",
    "chartAppointmentsWeekMineSubtitle": "Your schedule — last 7 days",
    "chartLabTaskActivityTitle": "Lab Task Activity",
    "chartLabTaskActivitySubtitle": "Last 7 days",
    "chartLabTaskCompletedLegend": "Completed",
    "chartLabTaskReceivedLegend": "Received",
    "chartAppointmentsByProviderTitle": "Appointments by Provider",
    "chartAppointmentsByProviderSubtitle": "Today",
    "chartTreatmentMixTitle": "Treatment Mix",
    "chartTreatmentMixSubtitle": "Last 7 days",
    "chartCaseCompletionTitle": "Case Completion",
    "chartCaseCompletionSubtitle": "All active cases",
    "chartCaseCompletionPercent": "{percent}%",
    "chartCaseCompletionTasks": "Tasks completed",
    "chartTreatmentPlanCompletionTitle": "Treatment Plan Completion",
    "chartTreatmentPlanCompletionSubtitle": "All appointments",
    "chartTreatmentPlanCompletionRatio": "With treatment plan",
    "chartTasksByProsthesisTitle": "In-Progress Tasks by Prosthesis",
    "chartTasksByProsthesisSubtitle": "Current workload mix",
    "chartCasesDueWeekTitle": "Cases Due",
    "chartCasesDueWeekSubtitle": "Active cases with a due date in the next 7 days",
    "chartCasePartnersClinicTitle": "Cases by Lab",
    "chartCasePartnersLabTitle": "Cases by Clinic",
    "chartCasePartnersSubtitle": "Last 30 days",
    "chartCasePartnersSentLegend": "Sent",
    "chartCasePartnersOpenLegend": "In progress",
    "chartEfficiencyReportTitle": "Efficiency Report",
    "chartEfficiencyReportSubtitleClinic": "Treatments created by staff — last 30 days",
    "chartEfficiencyReportSubtitleLab": "Tasks completed by staff — last 30 days",
    "chartEmpty": "No data for this period yet.",
    "periodWeek": "Week",
    "periodMonth": "Month",
    "periodYear": "Year",
    "periodSelectAria": "Chart time period",
    "upcomingAppointmentsTitle": "Upcoming Today",
    "upcomingAppointmentsSubtitle": "Appointments not yet finished",
    "viewAllAppointments": "View schedule",
    "noUpcomingAppointments": "No upcoming appointments for the rest of today.",
    "retryLoad": "Try again",
    "sectionLoadError": "This section could not be displayed.",
    "lastUpdated": "Updated at {time}"
  },
  "staff": {
    "redirecting": "Redirecting…",
    "title": "Staff Management",
    "subtitle": "Invite teammates, set tab access, and stay within your plan seat limit.",
    "inviteMember": "Invite member",
    "seatsLabel": "Seats:",
    "unlimitedPlan": "(unlimited plan)",
    "seatLimitReached": "Plan seat limit reached for this organization.",
    "noActivePlan": "No active plan selected for this organization. Choose a subscription plan to invite members.",
    "invitedPending": "Invitation is pending until they open the link, set a password, and log in.",
    "invitedAccepted": "Invitation was accepted immediately.",
    "inviteLinkHeading": "Invite link",
    "shareLinkHint": "Share this link manually via SMS or email. A new link is generated if the previous one expired or was lost.",
    "loadingTeam": "Loading team…",
    "tableName": "Name",
    "tableEmail": "Email",
    "tableRole": "Role",
    "tableStatus": "Status",
    "tableAccess": "Access",
    "tableAction": "Action",
    "roleOwner": "Owner",
    "roleStaff": "Staff",
    "statusActive": "Active",
    "statusPending": "Pending",
    "statusDisabled": "Disabled",
    "statusExpired": "Expired",
    "allFeatures": "All features",
    "inviteModalTitle": "Invite team member",
    "stepOf": "Step {step} of 2",
    "permissionView": "View",
    "permissionEdit": "Edit",
    "labelEmail": "Email",
    "labelDisplayName": "Display name",
    "tabAccess": "Tab access",
    "sendInvite": "Send invite",
    "skipForNow": "Skip for now",
    "enableModalTitle": "Enable team member",
    "enableConfirm": "Enable {name} ({email})?",
    "enableBullet1": "They can sign in to this organization again with their existing account.",
    "enableBullet2": "No new invitation is sent and no data was removed while they were disabled.",
    "enableBullet3": "Enabling uses one seat on your plan.",
    "noSeatsAvailable": "No seats are available. Disable another member or upgrade your plan before enabling this person.",
    "enableMemberButton": "Enable member",
    "disableModalTitle": "Disable team member",
    "disableConfirm": "Disable {name} ({email})?",
    "disableBullet1": "They will not be able to sign in to this organization.",
    "disableBullet2": "No data will be removed.",
    "disableBullet3": "Disabling frees one seat on your plan so you can invite someone else.",
    "disableMemberButton": "Disable member",
    "editModalTitle": "Edit member",
    "loadingWorkingHours": "Loading working hours…",
    "errorLoadStaff": "Failed to load staff.",
    "errorCopyInvite": "Could not copy invitation link.",
    "errorSendInvite": "Failed to send invitation.",
    "errorLoadWorkingHours": "Failed to load working hours.",
    "successMemberUpdated": "Member updated.",
    "errorUpdateMember": "Failed to update member.",
    "errorDeleteNotImplemented": "Delete is not implemented yet.",
    "successMemberDisabled": "{name} was disabled. A seat is now available.",
    "errorDisableMember": "Failed to disable member.",
    "successMemberEnabled": "{name} was enabled and can sign in again.",
    "errorEnableMember": "Failed to enable member.",
    "successInvited": "{name} ({email}) was invited.",
    "copyInviteLink": "Copy invitation link",
    "copyInviteLinkTitle": "Copy invitation link (generates a new link if needed)",
    "enableMemberAria": "Enable member",
    "enableMemberTitle": "Enable member (uses a seat)",
    "disableMemberAria": "Disable member",
    "disableMemberTitle": "Disable member (frees a seat)",
    "editMemberAria": "Edit member",
    "deleteMemberAria": "Delete member",
    "deleteMemberTitle": "Delete member (not implemented)",
    "features": {
      "featureToday": "Today",
      "featureStaff": "Staff",
      "featureOrganizations": "Organizations",
      "featureClinics": "Clinics",
      "featureLabs": "Labs",
      "featurePatients": "Patients",
      "featureAppointment": "Appointment",
      "featureTreatment": "Treatment",
      "featureCases": "Cases",
      "featureTasks": "Tasks",
      "featureBilling": "Billing",
      "featureReports": "Reports",
      "noTabAccess": "No tab access",
      "readOnlySuffix": "(Read only)"
    },
    "workingHours": {
      "recommendedTitle": "Working hours recommended",
      "recommendedBody": "Staff with treatment edit access appear as provider columns in Appointments. Set their weekly hours so the schedule grid shows the right bookable times.",
      "intro": "Set weekly working hours for this provider. The appointments grid uses these hours to show bookable time slots.",
      "workingDay": "Working day",
      "start": "Start",
      "end": "End",
      "removeShift": "Remove shift",
      "addShift": "Add shift",
      "autoRepeatWeekly": "Repeat these hours at the start of each week (copy forward on Monday)",
      "weekdayMon": "Mon",
      "weekdayTue": "Tue",
      "weekdayWed": "Wed",
      "weekdayThu": "Thu",
      "weekdayFri": "Fri",
      "weekdaySat": "Sat",
      "weekdaySun": "Sun",
      "validationNeedsShift": "{day} needs at least one shift or should be marked off.",
      "validationEndAfterStart": "{day} shift end time must be after start time.",
      "validationOverlap": "{day} shifts cannot overlap."
    }
  },
  "patients": {
    "title": "Patients",
    "newPatient": "New Patient",
    "errorLoadPatients": "Failed to load patients.",
    "successPatientSaved": "Patient {firstName} {lastName} was saved successfully.",
    "errorSavePatient": "Failed to save patient.",
    "firstName": "First name",
    "lastName": "Last name",
    "mobile": "Mobile",
    "mobilePlaceholder": "09121234567",
    "mobileLabel": "Mobile:",
    "patientAlreadyExists": "A patient with this mobile already exists: {firstName} {lastName}. They were selected for you.",
    "savePatient": "Save Patient",
    "dialogTitle": "New patient",
    "searchPlaceholder": "Search patients by name, mobile, email",
    "loadingPatients": "Loading patients...",
    "noResults": "No patients found for this search.",
    "noContact": "No contact",
    "selectPatient": "Select a patient to view details.",
    "emailLabel": "Email:",
    "statusLabel": "Status:",
    "statusActive": "Active",
    "statusInactive": "Inactive",
    "emptyValue": "-",
    "requiredMark": "*",
    "requiredFieldsHint": "Fields marked with * are required. Email is optional.",
    "firstNameRequired": "First name is required.",
    "lastNameRequired": "Last name is required.",
    "emailOptional": "Email (optional)",
    "emailOptionalSummary": "Email (optional):",
    "appointmentHistoryTitle": "Appointment history",
    "appointmentHistorySubtitle": "Past and upcoming appointments for this patient at your clinic.",
    "appointmentHistoryLoading": "Loading appointment history…",
    "appointmentHistoryEmpty": "No appointments recorded for this patient yet.",
    "appointmentHistoryError": "Could not load appointment history.",
    "appointmentHistoryProvider": "Provider: {name}",
    "appointmentHistoryUnknownProvider": "Unknown provider"
  },
  "cases": {
    "title": "Cases",
    "subtitle": "Lab cases sent from linked clinics. Track progress and flag important tasks.",
    "searchPlaceholder": "Search by patient name or mobile…",
    "emptyList": "No cases received yet.",
    "selectCaseHint": "Select a case from the list to view tasks.",
    "fromClinic": "From {name}",
    "sentAt": "Sent {date}",
    "dueDateLabel": "Due {date}",
    "overdueBadge": "Overdue",
    "taskProgressLabel": "Tasks: {completed} of {total} completed",
    "taskProgressShort": "{progress} tasks",
    "treatmentDetails": "Treatment details",
    "teethLabel": "Teeth",
    "tasksByTooth": "Tasks",
    "toothGroupTitle": "Teeth {teeth} · {prosthesis}",
    "noTasks": "No tasks were generated for this case.",
    "statusInProgress": "In progress",
    "statusCompleted": "Completed",
    "importantLabel": "Important",
    "unreadCase": "Unread updates",
    "markCaseImportant": "Important Case",
    "markImportant": "Mark as important",
    "lastUpdatedBy": "Updated by {name}",
    "lastUpdatedUnknown": "Not started yet",
    "timelineTitle": "History",
    "timelineEntry": "{status} · {name} · {date}",
    "errorLoadList": "Failed to load cases.",
    "errorLoadDetail": "Failed to load case details.",
    "errorUpdateTask": "Failed to update task.",
    "errorAssignTask": "Failed to assign task.",
    "assigneeLabel": "Assigned to",
    "assigneeUnassigned": "Unassigned",
    "assignedTo": "Assigned to {name}",
    "filterClinic": "Clinic",
    "filterClinicAll": "All clinics",
    "filterProsthesisType": "Prosthesis type",
    "filterProsthesisTypeAll": "All types",
    "filterSentFrom": "Sent from",
    "filterSentTo": "Sent to",
    "clearFilters": "Clear filters",
    "patientMobile": "Mobile",
    "showComments": "Comments",
    "commentsCount": "Comments ({count})",
    "viewAttachments": "View all attachments",
    "attachmentsDialogTitle": "Case attachments",
    "attachmentsDialogSubtitle": "Preview and download files shared with this case.",
    "noAttachments": "No attachments were shared with this case.",
    "downloadAttachment": "Download",
    "downloadAllAttachments": "Download all",
    "attachmentPreviewUnavailable": "Preview unavailable",
    "prevPage": "Previous",
    "nextPage": "Next",
    "pageSummary": "Page {page} of {totalPages} ({total} cases)",
    "statusLabel": "Status",
    "viewShareQr": "View case QR code and share link",
    "shareQrDialogTitle": "Case share link",
    "shareQrDialogSubtitle": "Scan the QR code or copy the link to open this case’s tasks.",
    "copyShareLink": "Copy link",
    "shareLinkCopied": "Link copied to clipboard",
    "shareQrUnavailable": "QR preview unavailable",
    "downloadCaseSheet": "Download PDF",
    "caseSheetTitle": "Case Sheet",
    "caseSheetOrderNumber": "Order number",
    "caseSheetOrderDate": "Order date",
    "caseSheetDateDue": "Date due",
    "caseSheetSender": "Sender",
    "caseSheetRecipient": "Recipient",
    "caseSheetPatient": "Patient",
    "caseSheetPatientId": "Mobile",
    "caseSheetProsthesis": "Prosthesis",
    "caseSheetToothChart": "Tooth Chart",
    "caseSheetComments": "Comments",
    "caseSheetNoComments": "No comments.",
    "errorDownloadCaseSheet": "Could not download the case sheet PDF.",
    "externalCodePlaceholder": "external code e.g. exocad code",
    "errorUpdateExternalCode": "Could not save the external code.",
    "addCase": "Add case",
    "addCaseTitle": "New case",
    "addCaseSubtitle": "Enter the referring clinic or patient, then add prosthesis lines. Start when the case is ready.",
    "startCase": "Start",
    "draftBadge": "Draft",
    "receivedBadge": "Received",
    "generatedBadge": "Generated",
    "referringClinic": "Referring clinic",
    "referringDentist": "Dentist",
    "patientName": "Patient name",
    "partnerClinic": "Linked clinic",
    "partnerClinicNone": "None",
    "dueDateField": "Due date",
    "caseLinesTitle": "Work lines",
    "addLine": "Add line",
    "lineChip": "Line {n}",
    "removeLineAria": "Remove line {n}",
    "errorCreateCase": "Could not create the case.",
    "errorSaveCase": "Could not save the case.",
    "errorStartCase": "Could not start the case.",
    "confirmDeleteDraftCase": "Delete this draft case? This cannot be undone.",
    "errorDeleteCase": "Could not delete the case."
  },
  "labCaseAccess": {
    "pageTitle": "Case tasks",
    "loading": "Loading case…",
    "accessDeniedTitle": "Access denied",
    "accessDenied": "You do not have permission to view this case. Sign in with a lab or clinic account that has access, and make sure you are the treatment provider for clinic access.",
    "emptyTasks": "No tasks found for this case.",
    "caseSummary": "{clinic} · {patient}",
    "labName": "Lab: {name}"
  },
  "tasks": {
    "title": "Tasks",
    "subtitle": "All lab tasks from connected clinics. Filter, sort, and update the status of each step.",
    "subtitleOwner": "All lab tasks from connected clinics. Filter, sort, and update the status of each step.",
    "loading": "Loading tasks…",
    "emptyList": "No tasks match the current filters.",
    "emptyListOwner": "No tasks match the current filters.",
    "noPermissionTitle": "Tasks",
    "noPermissionBody": "You do not have permission to view tasks for this organization.",
    "fromClinic": "From {name}",
    "patientLabel": "Patient",
    "taskDate": "{date}",
    "teethLabel": "Teeth {teeth}",
    "importantBadge": "Important",
    "lastUpdatedBy": "Updated by {name}",
    "statusInProgress": "In progress",
    "statusCompleted": "Completed",
    "searchPlaceholder": "Search patient or clinic…",
    "filterClinic": "Clinic",
    "filterClinicAll": "All clinics",
    "filterOrigin": "Case source",
    "filterOriginAll": "All sources",
    "filterOriginReceived": "Received",
    "filterOriginGenerated": "Generated",
    "filterStatus": "Status",
    "filterStatusAll": "All statuses",
    "filterStepCompleted": "Step completed",
    "filterStepCompletedAll": "Any step",
    "showCompleted": "Show completed",
    "importantOnly": "Important first",
    "assignedToMe": "Assigned to me",
    "overdueOnly": "Overdue cases only",
    "unassignedOnly": "Unassigned only",
    "assignedToStaff": "Assigned to {name}",
    "resetView": "Reset filters & sort",
    "showInCase": "Show in case",
    "showInCaseNotFound": "This task is not in the default in-progress list.",
    "showInCaseError": "Could not locate this task in the list.",
    "locatingCase": "Finding case in list…",
    "taskCompletedToast": "Step completed — nice work!",
    "taskCompletedFlash": "Done",
    "filterSentFrom": "From",
    "filterSentTo": "To",
    "sortBy": "Sort by",
    "sortDate": "Date",
    "sortDueDate": "Case due date",
    "sortStatus": "Status",
    "sortClinic": "Clinic",
    "sortPatient": "Patient",
    "sortImportant": "Important",
    "sortProsthesis": "Prosthesis type",
    "sortTaskType": "Task type",
    "sortDirection": "Sort direction",
    "groupingOffClinic": "Sorted by clinic — case grouping is off.",
    "groupingOffPatient": "Sorted by patient — case grouping is off.",
    "groupingOffProsthesis": "Sorted by prosthesis type — case grouping is off.",
    "groupingOffTaskType": "Sorted by task type — case grouping is off.",
    "groupingOffStatus": "Sorted by status — case grouping is off.",
    "groupingOffDueDate": "Sorted by due date — case grouping is off.",
    "caseReceivedAt": "Received {date}",
    "caseDueDate": "Due {date}",
    "overdueBadge": "Overdue",
    "caseTaskProgress": "{completed}/{total} tasks on this page",
    "clearFilters": "Clear filters",
    "commentsButton": "Comments",
    "errorLoadList": "Failed to load tasks.",
    "errorUpdateTask": "Failed to update task.",
    "pageSummary": "Page {page} of {totalPages} ({total} tasks)"
  },
  "caseComments": {
    "title": "Comments",
    "placeholder": "Write a comment…",
    "reply": "Reply…",
    "post": "Post",
    "empty": "No comments yet.",
    "visibleToClinicToggle": "Visible to clinic",
    "clinicCanSee": "Clinic can see this",
    "hiddenFromClinic": "Hidden from clinic",
    "makeVisible": "Make visible to clinic",
    "makeHidden": "Hide from clinic",
    "labAuthor": "Lab",
    "clinicAuthor": "Clinic",
    "errorLoad": "Failed to load comments.",
    "errorPost": "Failed to post comment.",
    "errorToggle": "Failed to update comment visibility.",
    "send": "Send comment",
    "composerVisible": "Visible to clinic",
    "composerHidden": "Hidden from clinic"
  },
  "appointments": {
    "title": "Appointments",
    "subtitle": "Search a patient, pick a date, then click a time slot under a provider to book.",
    "loadingSchedule": "Loading schedule…",
    "infoPastViewOnly": "Past appointments are view-only.",
    "infoEditBlockedHasTreatment": "This appointment cannot be edited because a treatment is linked to it.",
    "infoSelectPatient": "Select a patient before booking.",
    "errorOutsideHours": "This appointment falls outside the provider's current working hours and cannot be edited.",
    "successUpdated": "Appointment updated.",
    "successSaved": "Appointment saved.",
    "errorUpdate": "Could not update appointment.",
    "errorSave": "Could not save appointment.",
    "confirmRemove": "Remove this appointment?",
    "successRemoved": "Appointment removed.",
    "errorDelete": "Could not delete appointment.",
    "deleteBlockedHint": "This appointment cannot be deleted because a treatment is linked to it.",
    "errorLoadSchedule": "Failed to load schedule.",
    "successPatientSaved": "Patient {firstName} {lastName} was saved.",
    "searchPlaceholder": "Search existing patients",
    "searching": "Searching…",
    "searchHint": "Type to search patients by name, phone, or email.",
    "noPermissionAdd": "You do not have permission to add patients.",
    "editTitle": "Edit appointment",
    "newTitle": "New appointment",
    "providerLabel": "Provider:",
    "patientLabel": "Patient",
    "startLabel": "Start",
    "endLabel": "End",
    "purposeLabel": "Purpose",
    "errorSelectPatient": "Select a patient first.",
    "patientSearchPlaceholder": "Search patients by name, phone, or email",
    "patientSearchEmpty": "No patients match this search.",
    "patientLockedHint": "Patient cannot be changed because a treatment is linked to this appointment.",
    "errorEndAfterStart": "End time must be after start time.",
    "errorPastSchedule": "Cannot schedule in the past.",
    "errorPastViewOnly": "Past appointments are view-only.",
    "errorMissingDetails": "Missing appointment details.",
    "noProviders": "No providers available. Add staff with treatment edit access to see columns here.",
    "noWorkingHours": "No working hours are configured for this day. Set provider working hours in Staff management.",
    "noHoursSet": "No hours set",
    "offToday": "Off today",
    "slotOffToday": "Provider is off today",
    "slotHoursNotConfigured": "Working hours not configured",
    "slotOutsideHours": "Outside working hours",
    "slotCannotCreate": "You cannot create appointments",
    "slotBookAt": "Book {time}",
    "outsideHoursBlocked": "Outside working hours — editing blocked",
    "overlappingChoose": "{count} overlapping — click to choose",
    "overlapping": "{count} overlapping",
    "legend": "Legend",
    "overlappingTitle": "Overlapping appointments ({count})",
    "purposeConsultation": "Consultation",
    "purposeFilling": "Filling",
    "purposeEndo": "Endo",
    "purposeVisit": "Visit",
    "purposeHygiene": "Hygiene"
  },
  "treatment": {
    "loading": "Loading…",
    "noPermissionTitle": "Treatment workspace",
    "noPermissionBody": "You do not have permission to view the Treatment tab for this organization.",
    "title": "Treatment",
    "subtitleEdit": "Document cases for your appointments, save drafts, and send work to linked organizations.",
    "subtitleReadOnly": "View-only access — you can review appointments and treatment history but cannot edit.",
    "pastDayNotice": "Past days are view-only. You can review appointments and history, but treatment cases cannot be added or changed.",
    "selectedPatient": "Selected patient",
    "purposeLabel": "Purpose:",
    "loadingAppointments": "Loading appointments…",
    "selectDayWithAppointment": "Search for a patient or select a visit from the day strip.",
    "noTreatmentFoundTitle": "No treatment found",
    "noTreatmentFoundBody": "There is no treatment or visit for {name} yet. You can add one with the {action} button in the rail.",
    "confirmDiscard": "You have unsaved changes. Discard them and continue?",
    "errorChooseOrg": "Choose at least one active organization to send this case.",
    "successCaseSent": "Case sent to selected organizations.",
    "successFilesUploaded": "{count} file(s) uploaded successfully.",
    "errorLoadAppointments": "Failed to load appointments.",
    "errorLoadOrgs": "Failed to load linked organizations.",
    "errorLoadHistory": "Failed to load treatment history.",
    "errorLoadDraft": "Failed to load treatment draft.",
    "errorUpload": "Failed to upload attachments.",
    "errorSaveDraft": "Failed to save treatment draft.",
    "errorSendCase": "Failed to send case.",
    "errorCaseMustSave": "Case must be saved before sending.",
    "treatmentPlanTitle": "Treatment · {patientName}",
    "hiddenMessage": "Appointments are hidden.",
    "showAppointments": "Show appointments",
    "appointmentsTitle": "My appointments",
    "hideAppointments": "Hide appointments",
    "emptyDay": "No appointments or unscheduled treatments assigned to you on this day.",
    "unscheduledHeading": "Without appointment",
    "noAppointment": "No appointment",
    "walkIn": "Walk-in",
    "newTreatment": "New treatment",
    "newTreatmentPatientPrompt": "Who is this visit for?",
    "newTreatmentUseCurrent": "Use {name}",
    "newTreatmentUseCurrentHint": "Start a new visit for the patient already open on this page.",
    "walkInPickerHint": "No named patient — always available, no search needed.",
    "errorCreateTreatment": "Could not create treatment.",
    "deleteEmptyTreatment": "Delete empty treatment",
    "confirmDeleteEmptyTreatment": "Delete this treatment? It has no details yet.",
    "errorDeleteTreatment": "Could not delete treatment.",
    "casesTitle": "Treatment cases",
    "casesSubtitle": "Each case has its own teeth, notes, attachments, and destinations for send.",
    "detailsTitle": "Treatment details",
    "addDetail": "Add detail",
    "confirmRemoveDetail": "Remove this treatment detail?",
    "confirmRemoveLastDetail": "This is the last detail. Removing it leaves the plan empty until you add another. Continue?",
    "removeDetailAria": "Remove detail {n}",
    "detailLabel": "Detail {n}",
    "detailSentBadge": "sent",
    "detailUnsentBadge": "unsent",
    "attachmentPreviewUnavailable": "Preview unavailable",
    "detailLockedInShipment": "This detail was sent to a lab and can no longer be edited.",
    "detailsSaveHint": "Lab dispatch is configured separately below.",
    "addCase": "Add case",
    "caseLabel": "Case {n}",
    "comments": "Notes",
    "commentsPlaceholder": "Write clinical notes for this detail…",
    "treatmentType": "Treatment type",
    "treatmentTypePlaceholder": "Select treatment type…",
    "treatmentTypeNotSelected": "Type not selected",
    "typeConsultation": "consultation",
    "typeFilling": "filling",
    "typeEndo": "endo",
    "typeVisit": "visit",
    "typeHygiene": "hygiene",
    "attachments": "Attachments",
    "attachFiles": "Attach files for this treatment case",
    "chooseFiles": "Choose files",
    "sendToOrgs": "Send this case to linked organizations",
    "searchOrgsPlaceholder": "Search active organizations...",
    "recent": "Recent:",
    "noOrgMatch": "No active organization matches your search.",
    "inviteLab": "Invite a lab",
    "noOrgInvitePermission": "You do not have permission to invite labs. Contact your organization owner.",
    "sendThisCase": "Send this case",
    "labDispatchTitle": "Lab dispatch",
    "labDispatchSubtitle": "Choose a lab, set prosthesis types, and send.",
    "labDispatchSendHint": "Shipment grouping is saved when you send to the lab.",
    "addLabShipment": "Add lab shipment",
    "labShipmentLabel": "Shipment {n}",
    "includeDetails": "Include treatment details",
    "labShipmentIncludedDetails": "Included in this shipment",
    "labShipmentNoIncludedDetails": "No details were included in this shipment.",
    "labShipmentNoDetailsAvailable": "All lab details are already in other shipments or have been sent.",
    "labDetailLine": "Detail {n} · {type} · {teeth}",
    "noLabDetails": "No prosthesis treatment details yet. Add prosthesis in treatment details above.",
    "labDispatchEmpty": "Add a lab shipment to group details and send them to a lab.",
    "prosthesisTypesTitle": "Prosthesis types",
    "prosthesisApplyAll": "Apply to all teeth",
    "prosthesisSelectPlaceholder": "Select prosthesis type…",
    "prosthesisColTooth": "Tooth",
    "prosthesisColDetail": "Detail",
    "prosthesisColType": "Prosthesis type",
    "prosthesisUnassigned": "Unassigned",
    "selectLab": "Destination lab",
    "selectLabPlaceholder": "Choose a linked lab…",
    "sendToLab": "Send to lab",
    "dueDateLabel": "Due date",
    "dueDateOptional": "optional",
    "dueDateLockedCompleted": "Due date cannot be changed after all tasks are completed.",
    "dueDateUpdateError": "Failed to update due date.",
    "saveLabShipments": "Save lab shipments",
    "labDispatchSaveHint": "Saves shipment grouping without sending.",
    "successLabShipmentsSaved": "Lab shipments saved.",
    "errorSaveLabShipments": "Failed to save lab shipments.",
    "errorLabCaseNeedsDetails": "Select at least one treatment detail for this shipment.",
    "unsavedChanges": "Unsaved changes",
    "saveStatusSaving": "Saving…",
    "saveStatusSaved": "All changes saved",
    "saveStatusError": "Could not save — check your connection",
    "sendSavesFirst": "Sending is per case and saves first automatically.",
    "historyTitle": "Previous treatments",
    "historyPatientScope": "Previous treatments for {patientName}",
    "historyCurrentAppointment": "This appointment",
    "historySubtitle": "Click a past plan to preview it, then load it into the workspace if needed.",
    "historyFilterNotShipped": "Not shipped to lab",
    "historyFilterDate": "Date",
    "historyClearFilters": "Remove filters",
    "historyFilterEmpty": "No treatments match these filters.",
    "labShipmentBlockedTitle": "Lab shipment not available yet",
    "labShipmentBlockedBody": "Select at least one tooth on this prosthesis detail before you can create a lab shipment.",
    "labCaseCommentsTitle": "Lab case comments",
    "labCaseCommentsHint": "Message the lab while this case is still in progress. Comments close when all lab tasks are completed.",
    "labShipmentsTitle": "Lab shipments",
    "labShipmentsSubtitle": "Sent cases for this patient — open one to follow progress and messages.",
    "labShipmentsPatientScope": "Sent cases for {patientName} — open one to follow progress and messages.",
    "labShipmentsUpdatesScope": "Cases with new lab activity — open one to review and clear the update.",
    "labShipmentsScopePatient": "This patient",
    "labShipmentsScopeUpdates": "All updates ({count})",
    "labShipmentsOtherPatientsUnread": "{count, plural, one {# update on another patient} other {# updates on other patients}}",
    "labShipmentsUpdatesEmpty": "No cases with new lab activity.",
    "labShipmentsEmpty": "No lab shipments for this patient yet.",
    "labShipmentTeethCount": "{count, plural, one {# tooth} other {# teeth}}",
    "historyShowFilters": "Show filters",
    "historyHideFilters": "Hide filters",
    "labTrackerExpand": "View activity",
    "labTrackerCollapse": "Hide activity",
    "activityFeedTitle": "Activity",
    "activityFeedEmpty": "No activity recorded yet.",
    "unreadLabCase": "Unread lab updates",
    "overdueBadge": "Overdue",
    "activityUnknownActor": "Someone",
    "activityUnknownStep": "Task",
    "activityCaseSent": "Case sent to lab · {date}",
    "activityClinicComment": "{actor}: “{preview}” · {date}",
    "activityLabComment": "{actor}: “{preview}” · {date}",
    "activityTaskCompleted": "{step} completed by {actor} · {date}",
    "activityTaskAssigned": "{step} assigned by {actor} · {date}",
    "activityCaseImportant": "Marked important by {actor} · {date}",
    "activityCaseAmended": "Case updated by {actor} · {date}",
    "activityGeneric": "Update · {date}",
    "loadingHistory": "Loading history…",
    "historyEmpty": "No other treatments recorded for this patient yet.",
    "historyDetailLabel": "Detail {n} · {type}",
    "previewCurrentDraft": "Current draft",
    "previewBrowsingTitle": "Previewing saved plan",
    "browseBanner": "Viewing {date} — this plan is not loaded in the editor yet.",
    "loadIntoWorkspace": "Load into workspace",
    "backToCurrentDraft": "Back to current draft",
    "labAttentionTitle": "Lab dispatch needed",
    "labAttentionSubtitle": "These lab-dependent details have not been sent to a lab yet.",
    "labAttentionCurrentDraft": "Current appointment",
    "labAttentionGoDispatch": "Go to dispatch",
    "labAttentionLoadDispatch": "Load & dispatch",
    "previewTitle": "Treatment preview",
    "openTreatment": "Open",
    "selectAppointment": "Select an appointment to preview its treatment.",
    "detailCount": "{n} detail(s)",
    "detailSummary": "Detail {n}: {type}",
    "detailAttachmentCount": "{n, plural, one {# file} other {# files}}",
    "detailNotSentToLab": "Not sent to lab",
    "detailPendingLabSend": "This lab detail has not been sent yet.",
    "teethLabel": "Teeth:",
    "teethNone": "None selected",
    "historicalReadonlyNotice": "You are viewing a past treatment (read-only).",
    "errorNoAppointmentForTreatment": "This treatment has no linked appointment and cannot be opened.",
    "errorNoTreatmentForPatient": "This patient has no treatment records yet.",
    "noCases": "No cases in this treatment.",
    "noDetails": "No treatment details yet.",
    "typeLabel": "Type:",
    "commentsLabel": "Comments:",
    "commentsEmpty": "Comments: —",
    "attachFilesShort": "Attach files",
    "sendCase": "Send this case",
    "sendToLinkedOrgs": "Send to linked organizations",
    "noActiveOrgs": "No active linked organizations.",
    "confirmSend": "Confirm send",
    "toothChartTitle": "FDI tooth chart",
    "entryWizardLabel": "Treatment entry steps",
    "entryStepTeeth": "Teeth",
    "entryStepContent": "Content",
    "entryStepLab": "Lab",
    "entryStepTreatment": "Treatment",
    "entryStepBack": "Back",
    "entryStepNext": "Next",
    "continueToLab": "Continue to lab",
    "backToTreatment": "Back to treatment",
    "selectTypeBeforeTeeth": "Choose a treatment type before selecting teeth.",
    "labDispatchNotSent": "Not sent",
    "labDispatchLastLab": "Last lab: {name}",
    "labCommentsMovedHint": "Progress and comments are in Lab shipments.",
    "entryStepLabUnavailable": "Lab dispatch is available after you save a lab-dependent detail with teeth selected.",
    "toothChartTitleCompact": "Tooth chart",
    "toothChartHint": "Tap teeth to select or deselect. When two neighbors are selected, an empty circle appears between them — tap it to connect (or tap a filled circle to disconnect). Shift-click a range to select all in between (not connected until you fill the circles).",
    "toothChartHelpAria": "How to select teeth",
    "toothConnectedHint": "Connected selection",
    "toothLinkHint": "Connect these teeth",
    "toothUnlinkHint": "Disconnect these teeth",
    "toothLinkAria": "Connect teeth {a} and {b}",
    "toothUnlinkAria": "Disconnect teeth {a} and {b}",
    "toothConnectedSuffix": " (connected)",
    "connectedBadge": "Connected",
    "prosthesisConnectedLabel": "Connected teeth prosthesis type",
    "toothChartWholePlan": "Full View",
    "labShipmentAttachments": "Files for the lab",
    "labShipmentAttachmentsHint": "All files are included. Uncheck any you do not want to send.",
    "selectedLabel": "Selected:",
    "selectedEmpty": "—",
    "upperArch": "Upper arch",
    "lowerArch": "Lower arch",
    "toothAria": "FDI tooth {fdi}",
    "toothSelectedSuffix": ", selected",
    "sentToAt": "Sent to {orgName} at {datetime}",
    "fallbackOrgName": "organization",
    "voiceStart": "Record treatment",
    "voiceStop": "Stop recording",
    "voiceCancel": "Cancel",
    "voiceProcessing": "Reading the recording…",
    "voiceReviewTitle": "Check what was understood",
    "voiceNothingExtracted": "Nothing usable was picked up from that recording.",
    "voiceProsthesisIncomplete": "No prosthesis type for {teeth} — the case cannot be sent until every tooth has one.",
    "voiceLabInexact": "The spoken name only partly matched this lab. Confirm before sending.",
    "voiceNotUnderstood": "Not understood",
    "voiceDiscard": "Discard",
    "voiceApply": "{count, plural, one {Apply # field} other {Apply # fields}}",
    "voiceUnresolved": {
      "not_permanent_tooth": "not a permanent tooth",
      "position_out_of_range": "not a valid tooth position",
      "tooth_missing_quadrant": "quadrant not said — e.g. “upper right two”",
      "malformed": "could not be read",
      "span_not_same_arch": "a bridge cannot span both jaws",
      "unknown_catalog_code": "not in this clinic’s list",
      "tooth_not_selected": "that tooth is not part of this detail",
      "invalid_date": "not a usable date"
    },
    "voiceFailed": "Voice entry failed. Please try again."
  },
  "organizations": {
    "loadingOrganization": "Loading organization...",
    "subtitle": "Search organizations, send connection requests to existing accounts, or invitation links when they are not on Nudentic yet.",
    "invitationHistory": "Invitation History",
    "searchPlaceholder": "Search {counterpart} by name, email, or phone...",
    "backToList": "Back to list",
    "tableOrganization": "Organization",
    "tableOwnerEmail": "Owner email",
    "tableDate": "Date",
    "tableStatus": "Status",
    "tableAction": "Action",
    "emptyConnections": "No connections yet. Search to send a connection request or an invitation link.",
    "statusInvitationPending": "Invitation pending",
    "statusConnectionPending": "Connection request pending",
    "statusConnected": "Connected",
    "statusDeclined": "Connection request declined",
    "statusFound": "Found",
    "statusToday": "Today",
    "acceptRequest": "Accept connection request",
    "declineRequest": "Decline connection request",
    "removeConnection": "Remove connection",
    "sendRequest": "Send connection request",
    "noDirectoryResults": "No organization found in directory search.",
    "hideInvitationFields": "Hide invitation fields",
    "sendInvitationLink": "Send invitation link",
    "counterpartNameLabel": "{counterpart} name",
    "ownerEmailLabel": "Owner email",
    "sendInvitation": "Send invitation",
    "successConnectionSent": "{counterpart} connection request sent.",
    "successInviteCreated": "Invitation link created for {email}",
    "successLinkCopied": "Invitation link copied to clipboard.",
    "successAccepted": "Connection request accepted.",
    "successDeclined": "Connection request declined.",
    "successRemoved": "Connection removed.",
    "historyTitle": "Invitation History",
    "loadingHistory": "Loading invitation history...",
    "historyEmpty": "No invitations yet.",
    "tableInvitationLink": "Invitation link",
    "statusPending": "Invitation pending",
    "statusAccepted": "Invitation accepted",
    "statusRejected": "Invitation rejected",
    "statusExpired": "Invitation expired",
    "copyInvitationLink": "Copy invitation link",
    "copyInvitationLinkTitle": "Copy invitation link (generates a new link if needed)",
    "selectorTitle": "Organizations",
    "selectorSubtitleWithCreate": "Select an organization to continue, or create a new one.",
    "selectorSubtitleSelectOnly": "Select an organization to continue.",
    "createOrganization": "Create Organization",
    "createAndContinue": "Create and Continue",
    "emptyCanCreate": "No organizations found. Create your first one to continue.",
    "emptyAskOwner": "No organizations found. Ask an organization owner to invite you.",
    "continueArrow": "Continue →",
    "planLabel": "Plan: {name} • {maxUsers} users",
    "counterpartClinic": "Clinic",
    "counterpartLab": "Lab",
    "viewCaseHistory": "View case history",
    "caseHistoryBackToConnections": "← Back to connections",
    "caseHistoryTitle": "Case history with {name}",
    "caseHistorySlimClinicBody": "Follow lab cases in Treatment for each patient.",
    "caseHistorySlimClinicHint": "Open Treatment, select the patient, and use Lab shipments in the left panel to track cases sent to {name}.",
    "caseHistorySlimClinicCta": "Open Treatment",
    "caseHistorySlimLabBody": "Production cases for this clinic live on the Cases tab.",
    "caseHistorySlimLabHint": "Use Cases to work cases received from {name}. Filter by this clinic if needed.",
    "caseHistorySlimLabCta": "Open Cases"
  },
  "settings": {
    "accountTitle": "Account",
    "accountSubtitle": "Profile and security settings for your login.",
    "participationSectionTitle": "Clinical participation",
    "participationSectionSubtitle": "Choose whether you personally take part in clinical or lab work for this organization.",
    "participateInTreatments": "I want to participate in treatments",
    "participateInTasks": "I want to participate in tasks",
    "participateWorkingHoursTitle": "Working hours",
    "participateWorkingHoursSubtitle": "Set your schedule so appointments can be booked for you.",
    "participateSaveHours": "Save and participate",
    "participateEnabledTreatments": "You are now participating in treatments.",
    "participateEnabledTasks": "You are now participating in tasks.",
    "participateDisabledTreatments": "You are no longer participating in treatments.",
    "participateDisabledTasks": "You are no longer participating in tasks.",
    "participateUpdateFailed": "Could not update participation settings. Please try again.",
    "participateConfirmRevokeTitle": "Stop participating?",
    "participateConfirmRevokeBodyTreatments": "You will lose treatment access and be removed from the appointments schedule. Your saved working hours will be kept.",
    "participateConfirmRevokeBodyTasks": "You will lose task edit access and be removed from the efficiency report.",
    "participateConfirmRevokeConfirm": "Stop participating",
    "changePasswordOption": "Change password",
    "changePasswordTitle": "Change password",
    "resetPasswordTitle": "Set a new password",
    "resetPasswordSubtitle": "Your mobile was verified. Choose a new password for your account.",
    "currentPassword": "Current password",
    "newPassword": "New password",
    "confirmNewPassword": "Confirm new password",
    "updatePassword": "Update password",
    "setNewPassword": "Save new password",
    "passwordChanged": "Password updated. Please sign in again.",
    "passwordChangeFailed": "Could not update password. Please try again.",
    "subscriptionsTitle": "Subscriptions",
    "subscriptionsSubtitle": "Your Nudentic workspace plan and seats for {orgName}. Clinic and lab income tracking stays under the sidebar Billing tab.",
    "noSubscriptionNotice": "This organization has no active subscription. Select a plan below to start the purchase process.",
    "currentPlan": "Current plan",
    "planPrice": "Plan price",
    "seatsUsed": "Seats used",
    "seatsRemaining": "Seats remaining",
    "daysRemaining": "Days remaining",
    "unlimited": "Unlimited",
    "unlimitedSeats": "Unlimited seats",
    "seatsCount": "{n} seats",
    "pricePerMonth": "${price} / month",
    "noActiveSubscription": "No active subscription for this organization.",
    "trialEnded": "Trial period has ended. Choose a plan when checkout is available.",
    "trialEndsIn": "Trial ends in {days} day(s).",
    "seatsLow": "Seat usage is high for this organization.",
    "choosePlanIntro": "Choose a plan to continue. Purchase integration is not active yet, so this currently prepares the selection step only.",
    "planSolo": "Solo",
    "planSmall": "Small",
    "planMedium": "Medium",
    "planLarge": "Large",
    "planEnterprise": "Enterprise",
    "startPurchase": "Start purchase process",
    "purchaseNotice": "Purchase flow will be enabled soon. {plan} is selected and ready for checkout setup."
  },
  "schedule": {
    "defaultLabel": "Schedule date",
    "previousDay": "Previous day",
    "nextDay": "Next day",
    "chooseDate": "Choose schedule date",
    "today": "Today",
    "year": "Year",
    "month": "Month",
    "day": "Day",
    "monthJanuary": "January",
    "monthFebruary": "February",
    "monthMarch": "March",
    "monthApril": "April",
    "monthMay": "May",
    "monthJune": "June",
    "monthJuly": "July",
    "monthAugust": "August",
    "monthSeptember": "September",
    "monthOctober": "October",
    "monthNovember": "November",
    "monthDecember": "December"
  },
  "notifications": {
    "bellAria": "Notifications",
    "unreadCount": "{count} unread notifications",
    "dropdownTitle": "Notifications",
    "viewAll": "View all",
    "pageTitle": "Notifications",
    "pageSubtitle": "Updates from cases, tasks, organizations, and staff.",
    "loading": "Loading notifications…",
    "empty": "No notifications yet.",
    "loadMore": "Load more",
    "markAllRead": "Mark all as read",
    "errorLoad": "Could not load notifications.",
    "errorMarkRead": "Could not update notification.",
    "typeCaseSent": "New lab case received",
    "typeClinicComment": "New clinic comment on a case",
    "typeLabComment": "New lab comment on a case",
    "typeLabCommentClinic": "New lab comment on your case",
    "typeCaseImportant": "Case marked as important",
    "typeTaskCompleted": "Lab task completed",
    "typeTaskAssigned": "A task was assigned to you",
    "typeConnectionRequest": "New organization connection request",
    "typeStaffInvite": "Staff invitation created",
    "typeUnknown": "Notification",
    "destCases": "Open Cases",
    "destTasks": "Open Tasks",
    "destTreatment": "Open Treatment",
    "destOrganizations": "Open Organizations",
    "destStaff": "Open Staff",
    "destOpen": "Open"
  },
  "errors": {
    "GENERIC": "Something went wrong. Please try again.",
    "NETWORK_ERROR": "Could not reach the server. Check your connection and try again.",
    "TIMEOUT": "The request took too long. Please try again.",
    "AUTH_INVALID_CREDENTIALS": "Incorrect email or password.",
    "AUTH_UNAUTHORIZED": "Your session has expired. Please sign in again.",
    "AUTH_REFRESH_TOKEN_NOT_FOUND": "Your session has expired. Please sign in again.",
    "AUTH_REFRESH_TOKEN_INVALID": "Your session has expired. Please sign in again.",
    "AUTH_SESSION_EXPIRED": "Your session has expired. Please sign in again.",
    "AUTH_USER_NOT_FOUND": "We could not find your account.",
    "AUTH_ORG_NOT_SELECTED": "Please select an organization to continue.",
    "AUTH_ORG_ACCESS_DENIED": "You do not have access to this organization.",
    "AUTH_INVITATION_PENDING": "Your invitation is still pending. Ask an administrator to activate your account.",
    "AUTH_REGISTRATION_EMAIL_EXISTS": "An account with this email already exists. Sign in to add a new organization from your account.",
    "AUTH_REGISTRATION_MOBILE_EXISTS": "This mobile number is already registered.",
    "AUTH_REGISTRATION_MOBILE_INVALID": "Please enter a valid mobile number.",
    "AUTH_REGISTRATION_FAILED": "Registration could not be completed. Please try again.",
    "AUTH_PASSWORD_INCORRECT": "Current password is incorrect.",
    "AUTH_PASSWORD_RESET_EXPIRED": "Password reset verification expired. Please verify your mobile number again.",
    "AUTH_VERIFICATION_CODE_INVALID": "Invalid or expired verification code.",
    "AUTH_VERIFICATION_RATE_LIMIT": "Please wait a moment before requesting another code.",
    "AUTH_SELECT_ORG_FIRST": "Select an organization before creating a new one.",
    "AUTH_CREATE_ORG_OWNER_ONLY": "Only owners of the current organization can create new organizations.",
    "AUTH_PASSWORD_CURRENT_REQUIRED": "Current password is required.",
    "PERMISSION_DENIED": "You do not have permission to perform this action.",
    "PERMISSION_ORG_MANAGE": "You do not have permission to manage organizations.",
    "PERMISSION_CLINIC_ONLY": "This action is only available for clinic organizations.",
    "PERMISSION_LAB_ONLY": "This action is only available for lab organizations.",
    "PERMISSION_NOT_MEMBER": "You are not a member of this organization.",
    "PERMISSION_OWNER_ONLY": "Only organization owners can perform this action.",
    "PERMISSION_PARTICIPATION_SUBSCRIPTION": "An active subscription is required to participate in treatments or tasks.",
    "PERMISSION_ENABLE_PARTICIPATION_FIRST": "Enable treatment participation before setting working hours.",
    "PERMISSION_CLINIC_WORKING_HOURS": "Working hours are only available for clinic organizations.",
    "PERMISSION_ACCESS_APPOINTMENTS": "You do not have access to appointments.",
    "PERMISSION_EDIT_APPOINTMENTS": "You cannot create or modify appointments.",
    "PERMISSION_ACCESS_TREATMENTS": "You do not have access to treatments.",
    "PERMISSION_EDIT_TREATMENTS": "You cannot edit treatments.",
    "PERMISSION_ACCESS_TASKS": "You do not have access to tasks.",
    "PERMISSION_EDIT_TASKS": "You cannot edit tasks.",
    "PERMISSION_ACCESS_CASES": "You do not have access to cases.",
    "LAB_CASE_ACCESS_DENIED": "You do not have permission to view this shared case.",
    "PERMISSION_ACCESS_STAFF": "You do not have access to staff management.",
    "PERMISSION_EDIT_STAFF": "You cannot manage staff working hours.",
    "PERMISSION_ORG_NOT_FOUND": "Organization not found.",
    "VALIDATION_FAILED": "Please check the form and try again.",
    "VALIDATION_EMAIL_INVALID": "Please enter a valid email address.",
    "VALIDATION_PASSWORD_TOO_SHORT": "Password is too short.",
    "VALIDATION_PASSWORD_REQUIRED": "Password is required.",
    "VALIDATION_MOBILE_INVALID": "Please enter a valid mobile number.",
    "VALIDATION_NAME_TOO_SHORT": "Name is too short.",
    "VALIDATION_ORGANIZATION_NAME_REQUIRED": "Organization name is required.",
    "VALIDATION_ORGANIZATION_TYPE_INVALID": "Please select a valid organization type.",
    "VALIDATION_TOKEN_REQUIRED": "This link is invalid or incomplete.",
    "VALIDATION_FIELD_REQUIRED": "Please fill in all required fields.",
    "VALIDATION_LANGUAGE_INVALID": "Please select a supported language.",
    "VALIDATION_INVALID_REQUEST": "The request contains invalid data.",
    "VALIDATION_TIMEZONE_INVALID": "Your timezone could not be determined. Refresh the page and try again.",
    "APPOINTMENT_INVALID_TIME": "The appointment start or end time is invalid.",
    "APPOINTMENT_END_BEFORE_START": "End time must be after start time.",
    "APPOINTMENT_TOO_LONG": "An appointment cannot last more than 24 hours.",
    "APPOINTMENT_IN_PAST": "You cannot book an appointment in the past.",
    "APPOINTMENT_INVALID_RANGE": "The date range is invalid.",
    "APPOINTMENT_INVALID_RANGE_ORDER": "The end of the range must be after the start.",
    "APPOINTMENT_INVALID_DATE": "The selected date is invalid.",
    "APPOINTMENT_PROVIDER_NOT_MEMBER": "This provider is not a member of the organization.",
    "APPOINTMENT_PROVIDER_INACTIVE": "This provider is not an active staff member.",
    "APPOINTMENT_PROVIDER_NO_TREATMENT_EDIT": "This provider cannot take treatment appointments.",
    "APPOINTMENT_PROVIDER_NO_WORKING_HOURS": "This provider has no working hours set.",
    "APPOINTMENT_PROVIDER_NOT_WORKING_DAY": "This provider does not work on the selected day.",
    "APPOINTMENT_OUTSIDE_WORKING_HOURS": "This time is outside the provider’s working hours.",
    "APPOINTMENT_NOT_FOUND": "Appointment not found.",
    "APPOINTMENT_NOT_PROVIDER": "You are not the provider for this appointment.",
    "PATIENT_NOT_FOUND": "Patient not found.",
    "WORKING_HOURS_INVALID": "Working hours are invalid. Check that shifts do not overlap.",
    "WORKING_HOURS_OWNER_NOT_ALLOWED": "Set owner working hours from account settings.",
    "WORKING_HOURS_CONFLICTS_WITH_APPOINTMENTS": "These hours conflict with upcoming appointments. Reschedule or remove those appointments first.",
    "STAFF_UNKNOWN_PERMISSIONS": "One or more selected permissions are not valid.",
    "STAFF_NO_SUBSCRIPTION": "Choose a plan before adding staff.",
    "STAFF_SEAT_LIMIT": "Your plan has no free seats. Disable a member or upgrade to add more.",
    "STAFF_INVITE_OWNER_EMAIL": "The organization owner is already a member.",
    "STAFF_ALREADY_MEMBER": "This person is already a member.",
    "STAFF_OWNER_NO_INVITE_LINK": "The owner does not use an invitation link.",
    "STAFF_ALREADY_ACCEPTED": "This member has already accepted their invitation.",
    "STAFF_INVITE_MISSING": "No invitation was found for this member.",
    "STAFF_INVITE_ALREADY_ACCEPTED": "This invitation has already been accepted.",
    "STAFF_INVITE_INVALID": "This invitation is no longer valid.",
    "STAFF_INVITE_REVOKED": "This invitation has been revoked.",
    "STAFF_INVITE_EXPIRED": "This invitation has expired.",
    "STAFF_ALREADY_ACTIVE": "This member is already active.",
    "STAFF_ALREADY_DISABLED": "This member is already disabled or pending.",
    "STAFF_CANNOT_DISABLE_SELF": "You cannot disable your own access.",
    "STAFF_MEMBER_NOT_FOUND": "Staff member not found.",
    "STAFF_CANNOT_EDIT_OWNER": "The owner’s membership cannot be edited here.",
    "STAFF_CANNOT_ENABLE_OWNER": "The organization owner cannot be enabled this way.",
    "STAFF_CANNOT_DISABLE_OWNER": "The organization owner cannot be disabled.",
    "STAFF_CANNOT_REMOVE_OWNER": "The organization owner cannot be removed.",
    "ORG_CANNOT_LINK_SELF": "You cannot link an organization to itself.",
    "ORG_LINK_WRONG_TYPE": "You can only link to the matching organization type (clinic or lab).",
    "ORG_TARGET_NO_SUBSCRIPTION": "The other organization does not have an active subscription.",
    "ORG_LINK_EXISTS": "These organizations are already linked.",
    "ORG_REQUEST_NOT_PENDING": "Only pending connection requests can be answered.",
    "ORG_CANNOT_RESPOND_OWN": "You cannot respond to your own connection request.",
    "ORG_INVITE_ALREADY_ACCEPTED": "This invitation has already been accepted.",
    "ORG_INVITE_INVALID": "This invitation is no longer valid.",
    "ORG_INVITE_REVOKED": "This invitation has been revoked.",
    "ORG_INVITE_EXPIRED": "This invitation has expired.",
    "ORG_INVITE_TYPE_MISMATCH": "Organization type does not match this invitation.",
    "ORG_INVITE_OWNER_HAS_ORG": "This owner already has an organization. Find it in search instead of sending an invitation.",
    "ORG_UNKNOWN_TYPE": "Unknown organization type.",
    "ORG_COUNTERPART_NOT_LAB": "The connected organization is not a lab.",
    "ORG_COUNTERPART_NOT_CLINIC": "The connected organization is not a clinic.",
    "ORG_CONNECTION_NOT_FOUND": "Connected organization not found.",
    "ORG_INVITE_NOT_FOUND": "Invitation not found.",
    "ORG_ONLY_CLINIC_COMMENT": "Only the clinic can comment on this case.",
    "CATALOG_UNKNOWN_TREATMENT_TYPE": "Unknown treatment type.",
    "CATALOG_UNKNOWN_PROSTHESIS_TYPE": "Unknown prosthesis type.",
    "CATALOG_TREATMENT_NOT_LAB_DEPENDENT": "This treatment type is completed in the clinic and cannot be sent to a lab.",
    "TREATMENT_SAVE_DETAILS_BEFORE_LAB": "Save treatment details before creating lab cases.",
    "TREATMENT_DETAIL_ONE_CASE": "Each treatment detail can belong to only one lab case.",
    "TREATMENT_DETAILS_NOT_FOUND": "One or more treatment details were not found.",
    "TREATMENT_DEST_NOT_LINKED": "That organization is not an active linked lab.",
    "TREATMENT_TEETH_REQUIRED_TO_SHIP": "Select teeth before sending this work to a lab.",
    "TREATMENT_TOOTH_UNKNOWN_DETAIL": "A tooth is linked to an unknown treatment detail.",
    "TREATMENT_TOOTH_NOT_ON_DETAIL": "A selected tooth is not on this treatment detail.",
    "TREATMENT_CASE_NO_DEST": "This lab case has no destination organization.",
    "TREATMENT_CASE_NEEDS_DETAIL": "A lab case must include a treatment detail.",
    "TREATMENT_CASE_ONE_DETAIL": "A lab case can include only one treatment detail.",
    "TREATMENT_ONLY_PROVIDER_SEND": "Only the treatment provider can send this lab case.",
    "TREATMENT_CASE_ALREADY_SENT": "This case was already sent to that lab.",
    "TREATMENT_DUE_DATE_LOCKED": "The due date cannot be changed after all tasks are completed.",
    "TREATMENT_INVALID_DUE_DATE": "The due date is invalid.",
    "TREATMENT_DETAIL_KEY_REQUIRED": "A treatment detail is required for this upload.",
    "TREATMENT_FILE_REQUIRED": "At least one file is required.",
    "TREATMENT_ATTACHMENT_NOT_FOUND": "Attachment not found.",
    "TREATMENT_FILE_UNAVAILABLE": "This file is no longer available.",
    "TREATMENT_CASE_INVALID_ATTACHMENTS": "One or more attachments are not valid for this lab case.",
    "TREATMENT_TOOTH_PROSTHESIS_INCOMPLETE": "Each tooth needs a prosthesis type before sending.",
    "LAB_CASE_NOT_FOUND": "Lab case not found.",
    "TASK_ASSIGNEE_INVALID": "The selected person cannot be assigned this task.",
    "TASK_ASSIGNED_TO_OTHER": "This task is assigned to another staff member.",
    "TASK_PAGE_DATE_SORT_ONLY": "Jumping to a task in the list is only available when sorted by date.",
    "INVALID_SENT_FROM": "The start date of the range is invalid.",
    "INVALID_SENT_TO": "The end date of the range is invalid.",
    "CASE_NOT_FOUND": "Case not found.",
    "CASE_ATTACHMENT_NOT_FOUND": "Attachment not found.",
    "CASE_ATTACHMENT_MISSING_FILE": "The attachment file is missing.",
    "CASE_TASK_NOT_FOUND": "Task not found.",
    "COMMENT_NOT_FOUND": "Comment not found.",
    "COMMENT_VISIBILITY_LAB_ONLY": "Only lab comments can change visibility.",
    "TODAY_INVALID_RANGE": "The date range is invalid.",
    "TODAY_INVALID_RANGE_ORDER": "The end of the range must be after the start.",
    "NOT_FOUND": "The requested item was not found.",
    "CONFLICT": "This action conflicts with existing data.",
    "CONFLICT_FUTURE_APPOINTMENTS": "You cannot stop participating in treatments while you have future appointments. Reassign or cancel them first.",
    "APPOINTMENT_PATIENT_LOCKED": "Cannot change the patient while a treatment is linked to this appointment.",
    "APPOINTMENT_HAS_TREATMENT": "This appointment cannot be deleted because a treatment is linked to it.",
    "TREATMENT_DETAIL_SENT": "This detail was sent to a lab and can no longer be changed.",
    "TREATMENT_NOT_FOUND": "Treatment not found.",
    "TREATMENT_PATIENT_OR_WALK_IN": "Choose a patient or create a walk-in treatment.",
    "TREATMENT_NOT_STANDALONE": "Only treatments without an appointment can be deleted this way.",
    "TREATMENT_HAS_DETAILS": "This treatment has details and cannot be deleted.",
    "LAB_CASE_NOT_EDITABLE": "This case can no longer be edited.",
    "LAB_CASE_ALREADY_STARTED": "This case has already been started.",
    "LAB_CASE_LINES_REQUIRED": "Add at least one work line with teeth and a prosthesis type.",
    "LAB_CASE_START_INCOMPLETE": "Complete teeth and prosthesis types before starting this case.",
    "LAB_CASE_CLIENT_REQUIRED": "Enter a clinic name or a patient name for this case.",
    "BAD_REQUEST": "The request could not be processed.",
    "INTERNAL_ERROR": "Something went wrong on our end. Please try again later.",
    "VOICE_MIC_DENIED": "Microphone access was blocked. Allow it in your browser settings and try again.",
    "VOICE_NOT_AVAILABLE": "Voice entry is not available for this language yet.",
    "VOICE_CLIP_TOO_LONG": "That recording is too long. Please keep it under two minutes.",
    "VOICE_ASR_FAILED": "Could not turn the recording into text. Please try again.",
    "VOICE_EXTRACT_FAILED": "Could not read the treatment details from the recording.",
    "VOICE_NOTHING_RECOGNIZED": "No speech was recognised. Check the microphone and try again.",
    "VOICE_RATE_LIMITED": "Too many recordings in a short time. Please wait a moment."
  }
}
