{
  "disciplinary": {
    "eyebrow": "Disciplinary management",
    "title": "Penalty catalog",
    "subtitle": "Manage violation types, legal limits, and repeat-offense escalation.",
    "add": "Add violation type",
    "edit": "Edit violation type",
    "configuration": "Catalog configuration",
    "audit": "Audit history",
    "auditEmpty": "No audit history found.",
    "bylawUploaded": "Bylaw attachment uploaded.",
    "bylawRemoved": "Bylaw attachment removed.",
    "uploadBylaw": "Upload bylaw attachment",
    "removeBylaw": "Remove attachment",
    "config": {
      "bylaw": "Bylaw reference",
      "bylawEn": "English bylaw reference",
      "bylawAr": "Arabic bylaw reference",
      "approvalDate": "Approval date",
      "maxPercent": "Maximum percentage per violation",
      "attachment": "Bylaw attachment",
      "notConfigured": "Not configured"
    },
    "empty": "No violation types found.",
    "statusSaved": "Violation status updated.",
    "fallback": {
      "title": "Using default catalog settings",
      "body": "Company-specific bylaw settings have not been configured yet."
    },
    "validation": {
      "names": "English and Arabic names are required.",
      "penaltyValue": "A penalty value is required for this penalty kind."
    },
    "fields": {
      "name": "Name",
      "nameEn": "English name",
      "nameAr": "Arabic name",
      "code": "Violation code",
      "category": "Category",
      "penalty": "Penalty",
      "penaltyKind": "Penalty kind",
      "penaltyValue": "Penalty value",
      "sanction": "Recorded sanction",
      "bylaw": "Bylaw article",
      "descriptionEn": "English description",
      "descriptionAr": "Arabic description",
      "escalates": "Escalates on repeat"
    },
    "category": {
      "0": "Attendance",
      "1": "Conduct",
      "2": "Performance",
      "3": "Safety",
      "4": "Confidentiality",
      "5": "Property misuse",
      "6": "Miscellaneous"
    },
    "penaltyKind": {
      "0": "Written warning",
      "1": "Fixed amount",
      "2": "Days of basic pay",
      "3": "Percent of daily wage",
      "4": "Recorded sanction"
    },
    "sanction": {
      "0": "Postpone annual raise",
      "1": "Withhold annual raise",
      "2": "Withhold wage increment",
      "3": "Postpone promotion",
      "4": "Demotion",
      "5": "Dismissal with gratuity"
    }
  },
  "salaryAdvance": {
    "eyebrow": "Employee finance",
    "title": "Salary advance",
    "subtitle": "Request an advance, review installments, and track approval status.",
    "approvalsTitle": "Salary-advance approvals",
    "approvalsSubtitle": "Review requests, approve or reject them, and record disbursement.",
    "review": "Review",
    "approve": "Approve",
    "reject": "Reject",
    "disburse": "Record disbursement",
    "comment": "Comment",
    "disbursementReference": "Disbursement reference",
    "newRequest": "New advance request",
    "editRequest": "Edit advance request",
    "available": "Available amount",
    "salary": "Salary",
    "amount": "Advance amount",
    "installment": "Installment amount",
    "status": {
      "PendingApproval": "Pending approval",
      "Approved": "Approved",
      "Rejected": "Rejected",
      "Withdrawn": "Withdrawn",
      "Disbursed": "Disbursed"
    },
    "created": "Created",
    "reason": "Reason",
    "consent": "I confirm that the installment deduction and salary information are correct.",
    "installmentPreview": "Estimated installments: {count}",
    "amountInvalid": "The amount is outside your available salary-advance limit.",
    "salaryWarningTitle": "Salary data is unavailable",
    "salaryWarning": "Your salary data must be configured before an advance can be submitted.",
    "empty": "No salary-advance requests found.",
    "submitSuccess": "Salary-advance request submitted.",
    "withdrawSuccess": "Salary-advance request withdrawn."
  },
  "brand": {
    "mark": "أ",
    "name": "ATHR",
    "tagline": "ATHR · HR",
    "footer": "© 2026 ATHR HR"
  },
  "common": {
    "error": "Error",
    "loadError": "Failed to load data. Please try again.",
    "saveError": "Failed to save changes. Please try again.",
    "save": "Save",
    "saving": "Saving...",
    "done": "Done",
    "cancel": "Cancel",
    "close": "Close",
    "confirm": "Confirm",
    "delete": "Delete",
    "remove": "Remove",
    "edit": "Edit",
    "change": "Change",
    "add": "Add",
    "back": "Back",
    "next": "Next",
    "previous": "Previous",
    "submit": "Submit",
    "search": "Search",
    "export": "Export",
    "import": "Import",
    "download": "Download",
    "upload": "Upload",
    "uploadFile": "Upload file",
    "chooseFile": "Choose File",
    "preview": "Preview",
    "apply": "Apply",
    "generate": "Generate",
    "flag": "Flag",
    "archive": "Archive",
    "dismiss": "Dismiss",
    "approve": "Approve",
    "reject": "Reject",
    "saveChanges": "Save Changes",
    "noData": "No data available.",
    "noItems": "No items found.",
    "all": "All",
    "select": "Select",
    "or": "or",
    "dash": "—",
    "filter": "Filter",
    "clear": "Clear",
    "yes": "Yes",
    "no": "No",
    "selectEmployee": "Select an employee",
    "searchEmployee": "Search by name or employee code...",
    "loadingEmployees": "Loading...",
    "active": "Active",
    "inactive": "Inactive",
    "status": "Status",
    "actions": "Actions",
    "clearFilters": "Clear filters",
    "moreFilters": "More Filters",
    "applyFilters": "Apply Filters",
    "date": "Date",
    "from": "From",
    "to": "To",
    "lang": {
      "ar": "عربي",
      "en": "EN"
    },
    "relativeTime": {
      "justNow": "Just now",
      "minuteAgo": "{count} minute ago",
      "minutesAgo": "{count} minutes ago",
      "hourAgo": "{count} hour ago",
      "hoursAgo": "{count} hours ago",
      "yesterday": "Yesterday",
      "daysAgo": "{count} days ago",
      "weekAgo": "{count} week ago",
      "weeksAgo": "{count} weeks ago"
    },
    "allStatuses": "All Statuses",
    "required": "Required",
    "notRequired": "Not Required",
    "view": "View",
    "optional": "optional",
    "selectOption": "-- Select --",
    "processing": "Processing...",
    "loading": "Loading...",
    "months": {
      "1": "January",
      "2": "February",
      "3": "March",
      "4": "April",
      "5": "May",
      "6": "June",
      "7": "July",
      "8": "August",
      "9": "September",
      "10": "October",
      "11": "November",
      "12": "December"
    },
    "activate": "Activate",
    "deactivate": "Deactivate",
    "nameEn": "Name (English)",
    "nameAr": "Name (Arabic)",
    "saveSuccess": "Saved successfully.",
    "deleteSuccess": "Deleted successfully.",
    "deleteError": "Could not delete. Please try again.",
    "refresh": "Refresh",
    "success": "Succeeded",
    "failed": "Failed",
    "confirmAction": "Confirm"
  },
  "nav": {
    "main": "MAIN",
    "dashboard": "Dashboard",
    "employees": "Employees",
    "documents": "Documents",
    "contracts": "Contracts",
    "operations": "OPERATIONS",
    "govForms": "Government Forms",
    "reports": "Reports",
    "requests": "Requests",
    "system": "SYSTEM",
    "settings": "Settings",
    "audit": "Audit Log",
    "privacy": "Data Privacy",
    "roles": "Roles & Access",
    "configuration": "Lookups",
    "teams": "Teams",
    "coreHr": "CORE HR",
    "employment": "EMPLOYMENT",
    "documentsRequests": "DOCUMENTS & REQUESTS",
    "payrollCompliance": "PAYROLL & COMPLIANCE",
    "analytics": "ANALYTICS",
    "administration": "ADMINISTRATION",
    "departments": "Departments",
    "jobTitles": "Job Titles",
    "nationalities": "Nationalities",
    "employeeImport": "Employee Import",
    "movementReport": "Movement Report",
    "dataCorrections": "Data Corrections",
    "columnMapping": "Column Mapping",
    "salaryDistribution": "Salary Distribution",
    "complianceAudit": "Compliance Audit",
    "workforceAnalytics": "Workforce Analytics",
    "rolesHierarchy": "Roles & Hierarchy",
    "permissions": "Permissions",
    "fieldSecurity": "Field Security",
    "systemConfig": "System Config",
    "rbacAudit": "RBAC Audit",
    "notifications": "Notifications",
    "employeeApprovals": "Approvals",
    "selfService": "My Profile",
    "leaves": "LEAVES",
    "leaveManagement": "Leave Management",
    "attendance": "ATTENDANCE",
    "attendanceManagement": "Attendance Management",
    "leaveDashboard": "Leave Dashboard",
    "leaveRequests": "Leave Requests",
    "leaveApprovals": "Approvals",
    "leaveBalances": "Leave Balances",
    "teamCalendar": "Team Calendar",
    "leaveReports": "Leave Reports",
    "yearEnd": "Year-End Processing",
    "leaveTypes": "Leave Types",
    "publicHolidays": "Public Holidays",
    "balanceConfig": "Balance Configuration",
    "approvalHierarchy": "Approval Hierarchy",
    "checkInConfig": "Check-In Configuration",
    "policyHierarchy": "Policy Hierarchy",
    "geofence": "Site Geofence",
    "liveDashboard": "Live Dashboard",
    "overtimeReport": "Overtime Report",
    "attendanceReports": "Attendance Reports",
    "shifts": "Shifts",
    "shiftAssignments": "Shift Assignments",
    "rotationPatterns": "Rotation Patterns",
    "groupRotation": "Assign Rotation to Group",
    "shiftCalendar": "Shift Calendar",
    "shiftSwaps": "Shift Swaps",
    "bulkAssignment": "Bulk-Assign Shifts",
    "manualEntry": "Manual Attendance Entry",
    "flaggedDays": "Flagged Days",
    "corrections": "Corrections & Overrides",
    "devices": "Devices",
    "periodLock": "Period Lock",
    "attendanceSettings": "Attendance Settings",
    "leaveSettings": "Leave Settings",
    "userManagement": "User Management",
    "balanceEngine": "Balance Engine",
    "approvalRouting": "Approval Routing",
    "workflowAudit": "Workflow Audit",
    "insurance": "Medical Insurance"
  },
  "leaves": {
    "eyebrow": "Leave Management",
    "settingsEyebrow": "Leave Settings",
    "dashboard": {
      "figmaTitle": "Dashboard",
      "title": "Leave Dashboard",
      "subtitle": "Overview of leave activity across the organisation",
      "summary": "Leave dashboard summary",
      "employees": "Employees",
      "requests": "Requests",
      "requestsThisMonth": "Requests this month",
      "pendingApprovals": "Pending Approvals",
      "onLeaveToday": "On leave today",
      "avgBalance": "Avg. Balance",
      "utilization": "Utilisation",
      "days": "days",
      "daysPerEmployee": "days / employee",
      "notAvailable": "Not available",
      "needReview": "need your review",
      "submitted": "submitted",
      "returns": "Returns",
      "byType": "Leave by Type",
      "byDepartment": "Days by Department",
      "onLeaveTodayTitle": "On Leave Today",
      "upcomingTitle": "Upcoming Leave",
      "whosOnLeaveToday": "Who's On Leave Today",
      "upcomingWindow": "Upcoming Leave (Next {days} Days)",
      "viewAll": "View all",
      "viewCalendar": "View calendar",
      "viewInCalendar": "View in Team Calendar",
      "goToApprovals": "Go to Approvals",
      "viewRequests": "View Requests",
      "viewBalances": "View Leave Balances",
      "viewAllInCalendar": "View all {count} in Team Calendar",
      "requiresAction": "Requires Action",
      "pendingMyApproval": "Pending my approval",
      "awaitingEscalation": "Requests awaiting escalation",
      "negativeBalanceRequests": "Negative balance requests",
      "leaveTakenByType": "Leave Taken by Type",
      "leaveByDepartment": "Leave by Department",
      "viewReport": "View report",
      "configure": "Configure",
      "configTitle": "Dashboard widgets",
      "configSubtitle": "Choose which widgets appear and in what order.",
      "configReset": "Restore defaults",
      "configResetDone": "Dashboard widgets restored to defaults.",
      "moveUp": "Move up",
      "moveDown": "Move down",
      "widget": {
        "WhoIsOutToday": "Who is out today",
        "UpcomingLeave": "Upcoming leave",
        "BalanceAlerts": "Balance alerts",
        "UtilizationSummary": "Utilisation summary",
        "PendingApprovals": "Pending approvals",
        "RecentRequests": "Recent requests",
        "TeamCalendarMini": "Team calendar",
        "AbsencePatternAlert": "Absence pattern alerts",
        "MonthlyAccrualStatus": "Monthly accrual status"
      },
      "avgAnnualBalance": "Avg annual leave balance",
      "yourQueueOnly": "Your queue only — company total unavailable",
      "overdueMineOnly": "Your overdue queue (>3 days) — not company-wide escalation"
    },
    "requests": {
      "title": "Leave Requests",
      "subtitle": "Track and manage all leave requests",
      "new": "New Request",
      "search": "Search by employee or type",
      "col": {
        "employee": "Employee",
        "type": "Type",
        "dates": "Dates",
        "days": "Days",
        "stage": "Stage",
        "status": "Status",
        "ref": "Reference",
        "start": "Start Date",
        "end": "End Date",
        "submitted": "Submitted",
        "dept": "Department"
      },
      "reason": "Reason",
      "submitted": "Submitted",
      "timeline": "Approval Timeline",
      "emptyTitle": "No requests found",
      "emptyMsg": "There are no leave requests matching your filters.",
      "stat": {
        "total": "Total",
        "pending": "Pending",
        "approved": "Approved",
        "rejected": "Rejected"
      },
      "filter": {
        "allTypes": "All Types",
        "allStatuses": "All Statuses"
      },
      "export": "Export",
      "detailTitle": "Request Details",
      "myRequest": "My Request",
      "days": "days",
      "auditNote": "This record is read-only. Decisions made here — HR Override included — are recorded as an ordinary approval comment, not in a separate audit trail.",
      "hrOverride": "HR Override",
      "hrOverrideTitle": "HR Override",
      "overrideWarning": "This approves or rejects the request directly, skipping any remaining approval levels. This cannot be undone.",
      "decision": "Decision",
      "approve": "Approve",
      "reject": "Reject",
      "justification": "Justification",
      "justificationHint": "Provide a reason for this override (min. 20 characters)...",
      "confirmApproval": "Confirm Approval",
      "confirmRejection": "Confirm Rejection",
      "overrideApproved": "Request approved via HR Override.",
      "overrideRejected": "Request rejected via HR Override.",
      "trackProgress": "Request Progress",
      "trackStatus": "Track Status",
      "trackSubmitted": "Submitted",
      "cancelRequest": "Cancel Request",
      "cancelDialogTitle": "Cancel Leave Request",
      "cancelWarning": "Cancelling this request will withdraw it from the approval chain. This action cannot be undone.",
      "cancelReason": "Cancellation Reason",
      "cancelReasonHint": "Briefly explain why you are cancelling this request…",
      "confirmCancel": "Cancel Request",
      "cancelSuccess": "Leave request cancelled successfully.",
      "onBehalfOf": "on behalf of",
      "fullAudit": "Full audit"
    },
    "status": {
      "pending": "Pending",
      "approved": "Approved",
      "rejected": "Rejected",
      "returned": "Returned",
      "cancelled": "Cancelled"
    },
    "stepStatus": {
      "approved": "Approved",
      "pending": "Pending",
      "waiting": "Waiting",
      "rejected": "Rejected",
      "returned": "Returned",
      "skipped": "Skipped"
    },
    "approvals": {
      "title": "Approvals",
      "subtitle": "Review and action pending leave requests",
      "approve": "Approve",
      "reject": "Reject",
      "requestInfo": "Request Info",
      "approved": "Request approved",
      "rejected": "Request rejected",
      "infoRequested": "Additional information requested",
      "noteRequired": "Please enter a note.",
      "note": "Note",
      "notePlaceholder": "Add an optional note...",
      "emptyTitle": "All caught up",
      "emptyMsg": "There are no pending approvals right now.",
      "search": "Search employee or ID",
      "allTypes": "All types",
      "awaitingAction": "awaiting action",
      "results": "results",
      "reviewTitle": "Review Request",
      "requestDetails": "Request Details",
      "leaveType": "Leave Type",
      "workingDays": "Working Days",
      "startDate": "Start Date",
      "endDate": "End Date",
      "submitted": "Submitted",
      "statusLabel": "Status",
      "reasonNotes": "Reason / Notes",
      "noReason": "None provided",
      "attachment": "Attachment",
      "viewAttachment": "View attachment",
      "negativeWarning": "This request will exceed the available balance. Per the negative balance policy, deductions apply if approved.",
      "approvalChain": "Approval Chain",
      "auditNote": "Ordinary approval actions are recorded in the audit trail. HR Override is not — it's recorded only as an approval comment.",
      "selectHint": "Select a request to review its details.",
      "allStatuses": "All statuses",
      "allDepartments": "All departments",
      "return": "Return",
      "days": "days",
      "confirmApprove": "Confirm Approval",
      "commentOptional": "Comment (optional)",
      "commentPlaceholder": "Notes for the employee or next approver…",
      "willForwardTo": "Will forward to:",
      "finalStep": "Final step — request will be fully approved",
      "rejectTitle": "Reject Request",
      "confirmReject": "Confirm Rejection",
      "rejectFinalWarn": "This action is final. The employee will be notified of the rejection.",
      "rejectReason": "Rejection Reason",
      "rejectReasonRequired": "Please enter a rejection reason.",
      "rejectReasonPlaceholder": "Enter the reason for rejection clearly…",
      "returnTitle": "Return for Correction",
      "sendToEmployee": "Send to Employee",
      "correctionNote": "Correction Note",
      "correctionNoteRequired": "Please explain what needs to be corrected.",
      "correctionNotePlaceholder": "Explain to the employee what needs to be reviewed or corrected…",
      "returnInfo": "The request will return to the employee for resubmission.",
      "hrOverride": "HR Override",
      "hrOverrideDesc": "Approves or rejects directly, skipping the remaining approval levels. Justification required.",
      "hrOverrideAction": "Override…",
      "hrOverrideWarning": "This skips the remaining approval levels. It is not recorded in a dedicated audit trail — only as an ordinary approval comment. Use only in exceptional circumstances.",
      "hrOverrideDecision": "Decision",
      "hrOverrideSelectDecision": "Select a decision…",
      "hrOverrideApprove": "Approve (override chain)",
      "hrOverrideReject": "Reject (override chain)",
      "hrOverrideJustification": "Override Justification",
      "hrOverrideJustificationPlaceholder": "Explain why the normal chain is being bypassed…",
      "hrOverrideApplyBtn": "Apply Override",
      "hrOverrideJustMin": "Justification required (min 20 characters)",
      "charsMin": "chars min",
      "balanceTitle": "Leave Balance",
      "currentBalance": "Current Balance",
      "balanceAfterLabel": "Balance after approval",
      "balance": {
        "accrued": "Accrued",
        "used": "Used",
        "pending": "Pending",
        "carried": "Carried"
      },
      "col": {
        "employee": "Employee",
        "type": "Leave Type",
        "dates": "Dates",
        "days": "Days",
        "balanceAfter": "Balance After",
        "step": "Current Step",
        "submitted": "Submitted",
        "status": "Status"
      },
      "tag": {
        "pending": "Awaiting Action",
        "approved": "Approved",
        "rejected": "Rejected",
        "returned": "Returned",
        "cancelled": "Cancelled",
        "negative": "Negative"
      },
      "actAsDelegate": "Act as delegate…",
      "actingAsDelegate": "Acting as delegate for:",
      "endDelegation": "End delegation"
    },
    "balances": {
      "title": "Leave Balances",
      "subtitle": "Employee entitlements and remaining balances",
      "search": "Search employees",
      "annual": "Annual",
      "sick": "Sick",
      "casual": "Casual",
      "carried": "Carried Over",
      "usage": "Annual Usage",
      "recalc": "Recalculate",
      "recalcDone": "Balances recalculated",
      "adjust": "Adjust",
      "adjustFor": "Adjust this employee's balance",
      "adjustTitle": "Manual Balance Adjustment",
      "adjustAudit": "Manual adjustments change an employee's balance immediately and are recorded in the audit trail with your name, the reason and the timestamp.",
      "adjustDays": "Adjustment (days)",
      "adjustDaysHint": "Use a positive number to add days, a negative number to deduct them.",
      "adjustReason": "Reason",
      "adjustReasonPh": "Explain why this balance is being adjusted",
      "adjustApply": "Apply adjustment",
      "adjustDone": "Balance adjusted",
      "selectEmployee": "Select an employee",
      "selectLeaveType": "Select a leave type",
      "leaveYear": "Leave year",
      "recalcRun": "Run recalculation",
      "recalcWarn": "This reprocesses accruals, deductions and carry-over for every employee in the company for the current leave year. Manual adjustments already applied are preserved.",
      "recalcScope": "Scope: whole company, current leave year. To recalculate a single employee or leave type, use the Balance Engine screen.",
      "export": "Export CSV",
      "stat": {
        "employees": "Total Employees",
        "totalAccrued": "Total Annual",
        "totalUsed": "Total Used",
        "totalCarried": "Total Carried"
      },
      "activeEmployees": "active employees",
      "daysTotal": "days total",
      "daysSoFar": "days so far",
      "daysCarried": "days carried over",
      "filter": {
        "allTypes": "All Leave Types"
      },
      "col": {
        "remaining": "Annual Remaining",
        "entitled": "Entitled",
        "used": "Used"
      },
      "historyTitle": "Balance Details",
      "historyBalance": "Current Balances",
      "historyNote": "Full transaction log (accruals, deductions, restorations) will be available in a future update. Balances are updated automatically on approval and cancellation.",
      "transactionLog": "Transaction Log"
    },
    "calendar": {
      "title": "Team Calendar",
      "subtitle": "See who is on leave and what is coming up",
      "onLeaveNow": "On Leave Now",
      "upcoming": "Upcoming",
      "today": "Today",
      "allDepartments": "All Departments",
      "allTypes": "All Types",
      "leavesThisMonth": "leaves this month",
      "leavesThisWeek": "leaves this week",
      "viewWeek": "Week",
      "publicHoliday": "Public holiday",
      "scope": "Visibility scope",
      "scopeHint": "Choose whose approved leave appears on the calendar.",
      "scopeTeam": "My team",
      "scopeDepartment": "My department",
      "scopeCompany": "Whole company",
      "viewCalendar": "Calendar",
      "viewList": "List",
      "legend": "Legend",
      "more": "more",
      "noLeaves": "No leaves this month",
      "employeesOnLeave": "employees on leave",
      "onlyApprovedNote": "Only approved leaves are shown here. Pending requests appear in the Approvals screen."
    },
    "reports": {
      "title": "Reports",
      "subtitle": "Detailed reports on leave balances, history, and team attendance.",
      "openReport": "Open Report",
      "back": "Back to Reports",
      "exportExcel": "Export Excel",
      "exportPdf": "Export PDF",
      "exporting": "Preparing report for export...",
      "retry": "Retry",
      "rows": "rows",
      "requests": "requests",
      "total": "Total",
      "balance": {
        "title": "Leave Balance Report",
        "desc": "All employee balances with entitled, used, and remaining breakdown.",
        "empty": "No leave balances match the selected filters."
      },
      "history": {
        "title": "Leave History Report",
        "desc": "Full record of all leave requests with statuses and approval details.",
        "empty": "No leave requests match the selected filters.",
        "companyWide": "Showing leave requests for the whole company.",
        "callerOnly": "You don't have permission to view company-wide leave history — showing your own requests only."
      },
      "whosonleave": {
        "title": "Who's On Leave",
        "desc": "Select any date to see employees on leave, leave type, and return date.",
        "dateLabel": "Show who's on leave on",
        "currentlyShowing": "Report currently shows data for",
        "changeDate": "Use the date picker to view any other day.",
        "empty": "No employees are on leave on this day."
      },
      "utilisation": {
        "title": "Leave Utilisation by Department",
        "desc": "Leave utilisation rate per department comparing entitled vs. used days.",
        "chartTitle": "Entitled vs. Used Days",
        "empty": "No department utilisation data is available for this period."
      },
      "filters": {
        "department": "Department",
        "leaveType": "Leave Type",
        "allDepartments": "All Departments",
        "allLeaveTypes": "All Leave Types",
        "allEmployees": "All employees",
        "allStatuses": "All Statuses",
        "from": "From",
        "to": "To",
        "asOfDate": "As of",
        "employee": "Employee",
        "granularity": "Period",
        "daily": "Daily",
        "weekly": "Weekly",
        "monthly": "Monthly",
        "yearly": "Yearly"
      },
      "columns": {
        "reference": "Reference",
        "employee": "Employee",
        "department": "Department",
        "leaveType": "Leave Type",
        "entitled": "Entitled",
        "accrued": "Accrued",
        "used": "Used",
        "pending": "Pending",
        "carried": "Carried",
        "remaining": "Remaining",
        "dates": "Dates",
        "days": "Days",
        "status": "Status",
        "approvedBy": "Approved By",
        "submitted": "Submitted",
        "startDate": "Start Date",
        "endDate": "End Date",
        "returnDate": "Return Date",
        "totalEntitled": "Total Entitled",
        "totalUsed": "Total Used",
        "utilisation": "Utilisation %",
        "employees": "Employees",
        "averageDays": "Avg Days / Employee"
      },
      "status": {
        "approved": "Approved",
        "pending": "Pending",
        "rejected": "Rejected",
        "returned": "Returned",
        "cancelled": "Cancelled",
        "withdrawn": "Withdrawn"
      },
      "unavailable": {
        "history": "The current backend does not provide a company-wide leave history report. The required endpoint is documented in missing.md.",
        "export": "Export is unavailable until the backend provides this report."
      },
      "yearendliability": {
        "title": "Year-End Leave Liability Report",
        "desc": "Per-employee balance summary with monetary liability for finance.",
        "carryOver": "Carry Over",
        "forfeited": "Forfeited",
        "closingBalance": "Closing Balance",
        "monetaryLiability": "Monetary Liability",
        "empty": "No year-end data available for the selected filters."
      },
      "approvalsla": {
        "title": "Approval SLA & Time to Approve",
        "desc": "Average time to approve per approver and level, SLA breaches and escalations."
      },
      "sla": {
        "tabApprover": "By approver",
        "tabLevel": "By approval level",
        "tabBreaches": "SLA breaches",
        "allApprovers": "All approvers",
        "approver": "Approver",
        "level": "Approval level",
        "assigned": "Assigned",
        "actioned": "Actioned",
        "avgTime": "Avg. time to action",
        "breaches": "SLA breaches",
        "breachRate": "Breach rate",
        "escalations": "Escalations",
        "escalated": "Escalated",
        "compliance": "SLA compliance",
        "totalRequests": "Requests",
        "avgResolution": "Avg. time to resolution",
        "configuredTimeout": "Configured timeout",
        "fastest": "Fastest approver",
        "slowest": "Slowest approver",
        "stuckAt": "Stuck at level",
        "timeAtLevel": "Time at level",
        "overSla": "Over SLA",
        "noBreaches": "No SLA breaches in this period.",
        "rangeError": "The end date cannot be earlier than the start date.",
        "hoursSuffix": "h",
        "daysSuffix": "d"
      },
      "carryover": {
        "title": "Carry-over and forfeiture",
        "fromYear": "Closing year",
        "employee": "Employee",
        "years": "Years",
        "unused": "Unused",
        "carried": "Carried over",
        "forfeited": "Forfeited",
        "paidOut": "Paid out",
        "policy": "Policy",
        "expiry": "Expires",
        "desc": "What happened to unused days at year-end: carried over, forfeited or paid out."
      },
      "negativebalance": {
        "title": "Negative balance consequences",
        "empty": "No negative-balance events recorded.",
        "request": "Request",
        "event": "Event",
        "days": "Negative days",
        "deduction": "Deduction",
        "when": "When",
        "desc": "Employees who went into negative balance, and the consequence applied."
      },
      "absencepatterns": {
        "title": "Absence Patterns Report",
        "desc": "Spot trends such as frequent single-day absences, and compare rates across departments.",
        "infoNote": "Informational only — this report does not auto-trigger any action.",
        "allFlags": "All flags",
        "flagOptions": {
          "frequentSingleDay": "Frequent single-day",
          "adjacentToWeekend": "Adjacent to weekend",
          "adjacentToHoliday": "Adjacent to holiday",
          "mondayOrFriday": "Monday or Friday",
          "consistentDay": "Consistent day of week"
        },
        "flaggedEmployees": "Flagged employees",
        "frequentSingleDay": "Frequent single-day",
        "weekendAdjacency": "Weekend adjacency",
        "holidayAdjacency": "Holiday adjacency",
        "deptsAboveThreshold": "Depts above threshold",
        "companyRate": "Company absence rate",
        "tabEmployees": "By employee",
        "tabDepartments": "By department",
        "tabSettings": "Thresholds",
        "totalDays": "Total absence days",
        "singleDay": "Single-day count",
        "weekendAdj": "Weekend-adjacent",
        "holidayAdj": "Holiday-adjacent",
        "mostFrequentDay": "Most frequent day",
        "flags": "Flags",
        "nearbyHoliday": "Nearby holiday",
        "weekend": "Weekend",
        "headCount": "Head count",
        "workingDays": "Working days",
        "rate": "Absence rate",
        "configSaved": "Thresholds saved.",
        "config": {
          "frequentSingleDay": "Frequent single-day threshold (per year)",
          "adjacentWeekend": "Weekend-adjacent threshold (per year)",
          "adjacentHoliday": "Holiday-adjacent threshold (per year)",
          "consistentDay": "Consistent-day-of-week threshold (count)",
          "deptRatePercent": "Department absence rate alert (%)"
        }
      }
    },
    "yearEnd": {
      "title": "Year-End Processing",
      "subtitle": "Apply carry-over policies, open a new leave year, and flag payouts for payroll.",
      "currentYear": "Current Leave Year",
      "start": "Start",
      "end": "End",
      "remaining": "Remaining",
      "days": "days",
      "yearProgress": "Year Progress",
      "elapsed": "of the year elapsed",
      "futureDate": "this date is in the future",
      "preview": {
        "title": "Preview Before Processing",
        "noData": "No preview generated yet."
      },
      "warning": {
        "title": "Warning: This action cannot be undone",
        "desc": "Running year-end processing will apply carry-over policies, open a new leave year, and flag payouts for payroll. This action is recorded in the audit trail."
      },
      "runBtn": "Run Year-End Processing",
      "running": {
        "title": "Processing Year-End…",
        "desc": "Please wait. Do not close this window."
      },
      "done": {
        "title": "Processing Completed Successfully",
        "desc1": "Processed",
        "desc2": "employees.",
        "desc3": "days carried over,",
        "desc4": "days expired. Action recorded in the audit trail.",
        "export": "Export Report",
        "info": "Balances update automatically: accrual on the first of each month, deduction on approval, restoration on cancellation."
      },
      "confirm": {
        "title": "Confirm Year-End Processing",
        "msg1": "You are about to run year-end processing for",
        "msg2": "This will affect",
        "msg3": "employees. Are you sure?",
        "warning": "This action cannot be undone and will be recorded in the audit trail.",
        "run": "Run Processing"
      },
      "history": {
        "title": "Year-End Run History",
        "year": "Year",
        "runDate": "Run Date",
        "runBy": "Run By",
        "employees": "Employees",
        "totalDays": "Total Days Processed",
        "status": "Status",
        "empty": "No previous runs"
      },
      "report": {
        "title": "Processing Report",
        "employee": "Employee",
        "leaveType": "Leave Type",
        "closingBalance": "Year-End Balance",
        "carriedOver": "Carried Over",
        "forfeited": "Expired",
        "paidOut": "Paid Out",
        "newOpening": "New Opening Balance"
      }
    },
    "types": {
      "title": "Leave Types",
      "subtitle": "Configure the leave types available to employees",
      "add": "Add Leave Type",
      "edit": "Edit Leave Type",
      "name": "Name",
      "nameEn": "Name (English)",
      "nameAr": "Name (Arabic)",
      "maxDays": "Max Days / Year",
      "paid": "Paid",
      "requiresDoc": "Requires Document",
      "nameRequired": "Both English and Arabic names are required",
      "created": "Leave type created",
      "updated": "Leave type updated",
      "deleteTitle": "Delete Leave Type",
      "view": "View Leave Type",
      "code": "Code",
      "codePh": "e.g. ANNUAL",
      "entitlement": "Entitlement Days",
      "descEn": "Description (English)",
      "descAr": "Description (Arabic)",
      "descEnPh": "Short description...",
      "descArPh": "وصف مختصر...",
      "nameEnPh": "e.g. Annual Leave",
      "nameArPh": "مثال: إجازة سنوية",
      "payRate": "Pay Rate",
      "requiresApproval": "Requires Approval",
      "days": "days",
      "daysValue": "{{days}} days",
      "daysPerOccurrence": "{{days}} days / occurrence",
      "daysPerYear": "{{days}} days / year",
      "asRequired": "As required by actual exam days",
      "noFixedCap": "No fixed annual cap",
      "paidLabel": "Paid",
      "unpaidLabel": "Unpaid",
      "payPercentageValue": "{{percentage}}% pay",
      "tieredPay": "Tiered statutory pay",
      "legalReferenceArticle": "Egyptian Labour Law No. {{law}}, Article {{article}}",
      "legalReferenceArticles": "Egyptian Labour Law No. {{law}}, Articles {{article}}",
      "legalReferenceArticleOnly": "Egyptian Labour Law, Article {{article}}",
      "legalReferenceArticlesOnly": "Egyptian Labour Law, Articles {{article}}",
      "legalReferenceLaw": "Egyptian Labour Law No. {{law}}",
      "system": "System",
      "systemReadonly": "System-defined types cannot be edited. Contact your administrator to adjust entitlement rules.",
      "sectionSystem": "Egyptian Law Defaults",
      "sectionCustom": "Custom Types",
      "egyptianLaw": "Per Egyptian Labour Law",
      "noCustom": "No custom leave types yet. Click Add Leave Type to create one.",
      "allTypes": "All Types",
      "paidOnly": "Paid Only",
      "unpaidOnly": "Unpaid Only",
      "statTotal": "Total Types",
      "statSystem": "System Defaults",
      "statCustom": "Custom Types",
      "statActive": "Active",
      "genderRestriction": "Gender restriction",
      "genderAny": "All employees",
      "genderMale": "Male only",
      "genderFemale": "Female only"
    },
    "holidays": {
      "title": "Public Holidays",
      "subtitle": "Manage official public holidays for the year",
      "add": "Add Holiday",
      "edit": "Edit Holiday",
      "name": "Name",
      "nameEn": "Name (English)",
      "nameAr": "Name (Arabic)",
      "date": "Date",
      "days": "Days",
      "recurring": "Recurring",
      "required": "Name and date are required",
      "created": "Holiday created",
      "updated": "Holiday updated",
      "deleted": "Holiday deleted",
      "deleteTitle": "Delete Holiday",
      "deleteMsg": "Are you sure you want to delete this holiday?",
      "type": "Type",
      "typeNational": "National",
      "typeReligious": "Religious",
      "typeCompany": "Company",
      "active": "Active",
      "lunar": "Lunar",
      "confirmDate": "Confirm Date",
      "confirmDateTitle": "Confirm Lunar Holiday Date",
      "confirmedDate": "Confirmed Date",
      "dateConfirmed": "Holiday date confirmed",
      "duplicateDate": "A holiday already exists on that date.",
      "seed": "Seed year",
      "seedYear": "Year to seed",
      "seedConfirm": "Seed the Egyptian statutory holidays for this year? Existing holidays are left untouched.",
      "seedDone": "Seeded {count} holidays.",
      "seedAlready": "This year is already seeded — nothing was added.",
      "seedUnconfirmed": "{count} Islamic dates need confirming once announced.",
      "unconfirmedOnly": "Awaiting date confirmation only"
    },
    "balanceConfig": {
      "title": "Balance Configuration",
      "subtitle": "Set entitlement, accrual and carry-over rules per type",
      "tabAccrual": "Accrual",
      "tabEntitlement": "Annual Entitlement",
      "tabCarryOver": "Carry-Over",
      "tabNegative": "Negative Balance",
      "tabProRata": "Pro-Rata & Day Value",
      "leaveType": "Leave Type",
      "baseEntitlement": "Base Entitlement (days)",
      "editTiers": "Edit tiers",
      "accrual": "Accrual / Month",
      "accrualMethod": "Accrual Method",
      "accrualMonthly": "Monthly accrual (entitlement ÷ 12)",
      "accrualUpfront": "Full balance upfront",
      "accrualNote": "Upfront gives the full balance from day one of the leave year. Monthly adds balance on the first of each month.",
      "carryPolicy": "Carry-Over Policy",
      "carryCapDays": "Max Carry-Over Days",
      "carryNone": "No carry-over (expires)",
      "carryFull": "Full carry-over",
      "carryCapped": "Capped carry-over",
      "carryPaidOut": "Paid out",
      "carryNote": "Applied automatically during year-end processing.",
      "carryOverCap": "Carry-Over Cap",
      "negPolicy": "Negative Balance Policy",
      "negBlock": "Block if insufficient",
      "negFlag": "Allow but flag for approval",
      "negAuto": "Allow and auto-approve",
      "negNote": "Block prevents requests when balance is insufficient. Flag allows submission but marks it for HR attention.",
      "allowNegative": "Allow negative balance",
      "negConsequence": "Consequence",
      "negConsequenceNa": "Not applicable when requests are blocked",
      "consNone": "No consequence",
      "consSalary": "Salary deduction",
      "consNextYear": "Deduct from next year balance",
      "consNote": "Salary deduction uses the day value configured on the Pro-Rata & Day Value tab and is applied by payroll when that module is available.",
      "tierNote": "Applied automatically at the start of the next leave year when an employee crosses the threshold. Each tier starts at its 'From' year and runs until the next tier begins.",
      "tierFrom": "From (years of service)",
      "tierTo": "To (years of service)",
      "tierDays": "Annual days",
      "tierOnwards": "onwards",
      "tierAdd": "Add tier",
      "tierRemove": "Remove tier",
      "tierPreview": "Rule preview",
      "tierDuplicateError": "Two tiers cannot start at the same year of service. Fix the duplicates before saving.",
      "unitYears": "yrs",
      "unitDays": "days",
      "proRataNote": "Pro-rata entitlement is calculated from the employee start date to the end of the leave year. The day value is used for negative-balance salary deductions and the year-end liability report.",
      "proRataApply": "Pro-rata for new joiners",
      "proRataRounding": "Rounding rule",
      "roundUp": "Round up",
      "roundDown": "Round down",
      "roundHalf": "Nearest half day",
      "dayValueMethod": "Day value method",
      "dayValueWage": "From employee daily wage",
      "dayValueFixed": "Fixed amount",
      "dayValueAmount": "Fixed amount per day",
      "dayValueNote": "The day value feeds the negative-balance salary deduction and the year-end leave liability report. It connects to the payroll module when that becomes available.",
      "currency": "EGP",
      "saved": "Balance configuration saved",
      "accrualCustom": "Custom schedule",
      "scheduleTitle": "Monthly accrual schedule",
      "scheduleTotal": "Total",
      "scheduleReset": "Reset to even split",
      "scheduleSumError": "A custom schedule needs all 12 months above zero and totalling exactly 100%.",
      "daysShort": "d",
      "previewTitle": "Worked example",
      "previewSavedOnly": "Calculated from the saved policy — save your changes first to preview them.",
      "previewJoinDate": "Join date",
      "previewSalary": "Monthly salary",
      "previewWorkingDays": "Working days / month",
      "previewRun": "Calculate",
      "previewProRata": "Pro-rata entitlement",
      "previewFullYear": "Full-year entitlement",
      "previewRemaining": "Days remaining in leave year",
      "previewRaw": "Raw pro-rated days",
      "previewRounded": "Rounded entitlement",
      "previewDayValue": "Value of one leave day",
      "previewPerDay": "Per day",
      "seed": "Seed defaults",
      "seedConfirm": "Create default balance policies for any system leave type that has none? Existing policies are left untouched.",
      "seedDone": "Created {count} default policies.",
      "seedAlready": "Every system leave type already has a policy — nothing was created."
    },
    "approvalHierarchy": {
      "title": "Approval Hierarchy",
      "subtitle": "Define the leave approval chain and SLAs",
      "tabHierarchy": "Hierarchy Rules",
      "tabAssignments": "Leave Type Assignment",
      "tabDelegations": "Delegations",
      "assignmentsNote": "Each leave type follows one approval template. Requests submitted after a change use the newly assigned template; requests already in flight keep their original chain.",
      "assignedTemplate": "Approval template",
      "assignmentSaved": "Approval template assigned",
      "noTemplate": "Not assigned",
      "routingOverride": "Routing override",
      "hasOverride": "Custom routing",
      "newTemplate": "New template",
      "newTemplateHint": "The template starts with a single Direct Manager level. Add and edit levels on the Hierarchy Rules tab once it is created.",
      "renameTemplate": "Rename",
      "templateNameEn": "Template name (English)",
      "templateNameAr": "Template name (Arabic)",
      "templateDescription": "Description",
      "templateSaved": "Template saved",
      "templateInactive": "Inactive",
      "activateTemplate": "Activate",
      "deactivateTemplate": "Deactivate",
      "note": "Changes apply immediately to all new requests. Active requests continue with their current approval chain.",
      "templateLabel": "Template:",
      "sla": "SLA",
      "hours": "h",
      "days": "days",
      "moveUp": "Move up",
      "moveDown": "Move down",
      "removeStep": "Remove step",
      "escalateAfter": "Escalate after",
      "daysThen": "days →",
      "chainPreview": "Approval Chain Preview",
      "requestNode": "Request",
      "finalApproval": "Final Approval",
      "empty": "No approval steps configured yet.",
      "addLevel": "Add approval level",
      "untitledLevel": "Untitled level",
      "levelNameEn": "Level name (English)",
      "levelNameAr": "Level name (Arabic)",
      "approverType": "Approver",
      "approverManager": "Requester's direct manager",
      "approverRole": "A specific role",
      "approverUser": "A specific person",
      "approverRoleUnset": "Role not selected",
      "approverUserUnset": "Person not selected",
      "role": "Role",
      "selectRole": "Select a role",
      "searchUser": "Search employees by name",
      "escalateAfterDays": "Escalate after (days)",
      "escalationAction": "On escalation",
      "escNextLevel": "Escalate to next level",
      "escAutoApprove": "Auto-approve",
      "escAutoReject": "Auto-reject",
      "isOptional": "This level is optional and can be skipped",
      "optional": "Optional",
      "levelIncomplete": "This level is incomplete — give it a name in both languages and choose an approver.",
      "incompleteLevels": "Some levels are incomplete. Fix them before saving.",
      "saved": "Approval hierarchy saved",
      "tabNotifications": "Notifications"
    },
    "weekend": {
      "title": "Weekend Days",
      "subtitle": "Select the company's weekly rest days",
      "selected": "days selected",
      "effectiveFrom": "Takes effect",
      "saved": "Weekend configuration saved",
      "sun": "Sun",
      "mon": "Mon",
      "tue": "Tue",
      "wed": "Wed",
      "thu": "Thu",
      "fri": "Fri",
      "sat": "Sat",
      "history": "History",
      "defaultLabel": "Default"
    },
    "delegation": {
      "title": "Delegation",
      "subtitle": "Delegate approval authority to another user for a date range",
      "note": "During delegation, requests route to the delegate, who is labelled as acting delegate. Delegation ends automatically on the end date.",
      "add": "Add Delegation",
      "addTitle": "Add New Delegation",
      "delegator": "Delegating Approver",
      "delegate": "Delegate User",
      "delegatorLabel": "Delegator",
      "delegateLabel": "Delegate",
      "actingDelegate": "Acting delegate",
      "startDate": "Start Date",
      "endDate": "End Date",
      "reason": "Reason",
      "empty": "No active delegations.",
      "remove": "Remove delegation",
      "save": "Save Delegation",
      "created": "Delegation created",
      "revoked": "Delegation revoked",
      "required": "Delegator, delegate and both dates are required",
      "sameUser": "Delegator and delegate must be different users",
      "status": {
        "active": "Active",
        "expired": "Expired",
        "revoked": "Revoked"
      }
    },
    "balanceEngine": {
      "title": "Balance Engine",
      "subtitle": "Trigger accrual runs, adjust employee balances, and recalculate leave entitlements.",
      "tab": {
        "accrual": "Accrual Runs",
        "adjust": "Manual Adjustment",
        "recalculate": "Recalculate"
      },
      "accrual": {
        "runTitle": "Run Monthly Accrual",
        "runSubtitle": "Trigger the leave balance accrual process for a specific month.",
        "year": "Year",
        "month": "Month",
        "runBtn": "Run Accrual",
        "runHint": "This will process accruals for all active employees for the selected period.",
        "runSuccess": "Monthly accrual run completed successfully.",
        "historyTitle": "Accrual Run History",
        "historySubtitle": "Record of all previous accrual runs.",
        "noHistory": "No accrual runs recorded yet.",
        "colType": "Run Type",
        "colPeriod": "Period",
        "colRunAt": "Run At",
        "colEmployees": "Employees",
        "colDays": "Days Accrued",
        "colStatus": "Status",
        "colBy": "Triggered By"
      },
      "adjust": {
        "title": "Manual Balance Adjustment",
        "subtitle": "Directly add or deduct leave days for a specific employee.",
        "employeeId": "Employee ID",
        "employeeIdHint": "Enter employee ID...",
        "leaveType": "Leave Type",
        "year": "Year",
        "days": "Adjustment (days)",
        "credit": "days credit",
        "debit": "days deduction",
        "reason": "Reason",
        "reasonHint": "Reason for this adjustment...",
        "applyBtn": "Apply Adjustment",
        "success": "Balance adjustment applied successfully."
      },
      "recalc": {
        "title": "Recalculate Balances",
        "subtitle": "Re-run the balance calculation engine for a selected scope.",
        "scopeCompany": "Full Company",
        "scopeCompanySub": "Recalculate all employees for the selected year.",
        "scopeType": "By Leave Type",
        "scopeTypeSub": "Recalculate all employees for a specific leave type.",
        "scopeEmployee": "Single Employee",
        "scopeEmployeeSub": "Recalculate one employee balance.",
        "year": "Year",
        "employeeId": "Employee ID",
        "leaveType": "Leave Type",
        "warning": "Recalculation overwrites existing balance data. This action cannot be undone.",
        "runBtn": "Run Recalculation",
        "success": "Recalculation completed successfully.",
        "historyTitle": "Recent runs",
        "historyEmpty": "No recalculation runs recorded yet.",
        "when": "When",
        "scope": "Scope",
        "target": "Target",
        "balances": "Balances"
      }
    },
    "typeRules": {
      "title": "Leave Type Rules",
      "subtitle": "Company-specific eligibility and application rules for this leave type.",
      "advanceNotice": "Minimum Advance Notice (days)",
      "maxConsecutive": "Maximum Consecutive Days per Request",
      "maxPerYear": "Maximum Requests per Year",
      "allowHalfDay": "Allow half-day requests",
      "attachmentRequired": "Attachment required on every request",
      "noLimit": "No limit",
      "saveSuccess": "Leave type rules saved successfully.",
      "noLimitNote": "Leave a field blank to apply no limit. Rules are enforced when a leave request is submitted."
    },
    "routing": {
      "title": "Approval Routing",
      "subtitle": "Conditional rules that override the default approval hierarchy.",
      "tabRules": "Rules",
      "tabSimulate": "Simulate",
      "note": "Rules are evaluated from the lowest priority number upward. The first rule whose conditions match decides the approval hierarchy; if none match, the leave type’s default assignment is used.",
      "noTemplates": "Create an approval hierarchy template first — a routing rule must point at one.",
      "empty": "No routing rules yet. Every request follows its leave type’s default hierarchy.",
      "showInactive": "Show inactive rules",
      "newRule": "New rule",
      "editRule": "Edit rule",
      "deleteConfirm": "Delete this routing rule?",
      "routesTo": "Routes to",
      "priority": "Priority",
      "priorityHint": "Lower numbers are evaluated first.",
      "template": "Approval hierarchy",
      "logic": "Match",
      "logicAll": "All conditions",
      "logicAny": "Any condition",
      "conditions": "Conditions",
      "addCondition": "Add condition",
      "moveUp": "Raise priority",
      "moveDown": "Lower priority",
      "validationIssues": "Problems found in the rule set",
      "fieldLeaveDurationDays": "Leave duration (days)",
      "fieldLeaveTypeId": "Leave type",
      "fieldDepartmentId": "Department",
      "fieldEmployeeGrade": "Employee grade",
      "opGreaterThan": "is more than",
      "opGreaterThanOrEqual": "is at least",
      "opLessThan": "is less than",
      "opLessThanOrEqual": "is at most",
      "opEqualTo": "is",
      "opIn": "is one of",
      "simulateNote": "Dry-run the rule set against a hypothetical request to see which rule wins and why. Nothing is saved.",
      "simLeaveType": "Leave type",
      "simDepartment": "Department",
      "simDays": "Duration (days)",
      "runSimulation": "Run simulation",
      "matchedRule": "Matched rule",
      "usedDefault": "No rule matched — the leave type’s default hierarchy applies.",
      "match": "Match",
      "noMatch": "No match"
    },
    "notifications": {
      "title": "Workflow notifications",
      "subtitle": "Who gets told, and how, at each point in the approval workflow.",
      "reset": "Restore defaults",
      "resetDone": "Notification settings restored to defaults.",
      "event": "Event",
      "enabled": "On",
      "channel": "Channel",
      "requester": "Requester",
      "currentApprover": "Current approver",
      "nextApprover": "Next approver",
      "hrAdmin": "HR admin",
      "channelInApp": "In-app",
      "channelEmail": "Email",
      "channelBoth": "Both",
      "note": "Changes save as you toggle them. Disabling an event stops every recipient for that event.",
      "eventRequestSubmitted": "Request submitted",
      "eventApprovedAtLevel": "Approved at a level",
      "eventFullyApproved": "Fully approved",
      "eventRejected": "Rejected",
      "eventEscalated": "Escalated",
      "eventCancelled": "Cancelled",
      "eventReminderSent": "Reminder sent",
      "eventMoreInfoRequested": "More information requested",
      "eventMoreInfoProvided": "More information provided",
      "eventCancellationRequested": "Cancellation requested"
    },
    "audit": {
      "title": "Change log",
      "empty": "No changes recorded yet.",
      "when": "When",
      "action": "Action",
      "field": "Field",
      "from": "From",
      "to": "To",
      "by": "By"
    },
    "workflowAudit": {
      "title": "Workflow audit",
      "subtitle": "Every action taken on a leave request, company-wide.",
      "requestId": "Request ID",
      "allRequests": "All requests",
      "empty": "No audit entries in this period.",
      "rangeError": "The start date must be on or before the end date.",
      "truncated": "Showing the first 200 entries — narrow the date range or filter by request to see more.",
      "when": "When",
      "request": "Request",
      "level": "Level",
      "action": "Action",
      "actor": "By",
      "comment": "Comment",
      "system": "System"
    },
    "escalation": {
      "title": "Escalation defaults",
      "subtitle": "Applied where an approval level does not set its own.",
      "timeoutDays": "Timeout (days)",
      "maxReminders": "Reminders before escalating",
      "reminderHours": "Reminder interval (hours)",
      "autoApprove": "Auto-approve on timeout",
      "autoApproveWarn": "Requests will be approved automatically when the timeout expires, with no human review."
    }
  },
  "pageTitles": {
    "dashboard": "Dashboard",
    "employees": "Employees",
    "documents": "Documents",
    "contracts": "Contracts",
    "departments": "Departments",
    "jobTitles": "Job Titles",
    "nationalities": "Nationalities",
    "govForms": "Government Forms",
    "import": "Import",
    "reports": "Reports",
    "requests": "Requests",
    "audit": "Audit Log",
    "privacy": "Data Privacy",
    "roles": "Roles & Access",
    "notifications": "Notifications",
    "settings": "Settings",
    "configuration": "Lookups & Configuration",
    "employeeApprovals": "Employee Approvals",
    "newEmployee": "New Employee",
    "editEmployee": "Edit Employee",
    "corrections": "Correction Requests",
    "selfService": "My Profile",
    "checkIn": "Check-In Configuration",
    "insurance": "Medical Insurance"
  },
  "shell": {
    "notifications": "Notifications",
    "markAllRead": "Mark all read",
    "viewAllNotifications": "View all notifications",
    "signOut": "Sign out",
    "logoutSwitch": "Log out / Switch user",
    "toggleSidebar": "Toggle sidebar",
    "switchToEmployeePortal": "Employee Portal",
    "switchToAdminDashboard": "Admin Dashboard",
    "openNavigation": "Open navigation",
    "closeNavigation": "Close navigation",
    "languageSelector": "Language selector",
    "mainNavigation": "Main navigation",
    "notificationsDot": "Notifications",
    "noNotifications": "No unread notifications",
    "logoutConfirmTitle": "Log out?",
    "logoutConfirmMessage": "You will be signed out and returned to the login page.",
    "superAdminRole": "Super Admin"
  },
  "auth": {
    "title": "Sign in",
    "subtitle": "HR Information Management Platform",
    "emailLabel": "Email address",
    "emailPlaceholder": "name@company.com",
    "passwordLabel": "Password",
    "passwordPlaceholder": "Enter your password",
    "showPassword": "Show password",
    "hidePassword": "Hide password",
    "signIn": "Sign in",
    "signingIn": "Signing in...",
    "enterBothFields": "Please enter both email and password.",
    "invalidCredentials": "Invalid credentials. Please try again.",
    "welcomeBack": "Welcome back",
    "signInSuccess": "You have been signed in successfully.",
    "changePasswordTitle": "Change password",
    "changePasswordSubtitle": "For security, you must set a new password before continuing.",
    "currentPasswordLabel": "Current password",
    "currentPasswordPlaceholder": "Enter your current password",
    "newPasswordLabel": "New password",
    "newPasswordPlaceholder": "Enter a new password",
    "confirmPasswordLabel": "Confirm new password",
    "confirmPasswordPlaceholder": "Re-enter the new password",
    "changePassword": "Change password",
    "changingPassword": "Changing...",
    "passwordMismatch": "The new passwords do not match.",
    "newPasswordSameAsCurrent": "New password must be different from the current password.",
    "changePasswordSuccess": "Password changed successfully.",
    "signInAgain": "Please sign in again with your new password.",
    "demoAdmin": "Sarah Al-Ahmad",
    "demoAdminRole": "HR Manager — Admin view",
    "demoEmployee": "Ahmed Mahmoud",
    "demoEmployeeRole": "Employee — Self-service portal",
    "quickDemo": "or quick demo"
  },
  "dashboard": {
    "greetingMorning": "Good morning",
    "greetingAfternoon": "Good afternoon",
    "greetingEvening": "Good evening",
    "activePill": "{count} employees active today",
    "loadFailed": "Dashboard data could not be loaded.",
    "requiresAction": "REQUIRES ACTION",
    "workforceSummary": "Workforce summary",
    "workforceSnapshot": "WORKFORCE SNAPSHOT",
    "kpi": {
      "totalEmployees": "Total Employees",
      "thisMonth": "{count} this month",
      "thisMonthLabel": "This month",
      "headcountChangeVsPreviousSnapshot": "{count} vs previous snapshot",
      "headcountComparisonHelp": "Headcount change compares the latest snapshot with the previous snapshot; it is not a joiner count.",
      "activeEmployees": "Active Employees",
      "inactiveEmployees": "Inactive Employees",
      "egyptianEmployees": "Egyptian Employees",
      "percentOfTotal": "{percent}% of total",
      "allDepartments": "Across all departments",
      "periodScope": "{period} · {scope}",
      "vsPreviousMonth": "vs previous month",
      "probationDetail": "{percent}% of total · {count} reviews due",
      "comparisonUnavailable": "Monthly comparison unavailable",
      "onProbation": "On Probation",
      "dueThisMonth": "{count} due this month",
      "newJoiners": "New Joiners This Month",
      "vsLastMonth": "vs {count} last month",
      "loadFailed": "Probation and joiner metrics could not be loaded."
    },
    "alerts": {
      "documentsExpiring": "Documents Expiring Soon",
      "documentsExpiringDetail": "within the next 30 days",
      "documentsExpiringLink": "View documents",
      "contractsExpiring": "Contracts Expiring Soon",
      "contractsExpiringDetail": "within the next 60 days",
      "contractsExpiringLink": "View contracts",
      "probationReviews": "Probation Reviews Due",
      "probationReviewsDetail": "this month",
      "pendingCorrections": "Pending Correction Requests",
      "pendingCorrectionsDetail": "awaiting review",
      "pendingCorrectionsLink": "View requests"
    },
    "charts": {
      "headcountByDept": "Headcount by Department",
      "viewFullReport": "View full report",
      "genderDistribution": "Gender Distribution",
      "total": "total"
    },
    "activity": {
      "recentActivity": "Recent Activity",
      "viewAuditLog": "View full audit log",
      "edited": "edited",
      "created": "created",
      "exported": "exported",
      "deleted": "deleted",
      "loggedIn": "logged in",
      "updated": "updated",
      "empty": "No recent activity yet.",
      "loadFailed": "Recent activity could not be loaded.",
      "record": "Employee record",
      "employeeRecord": "Employee record",
      "employeeStatusChange": "Employee status change",
      "statusValue": "Status value",
      "systemConfig": "System configuration",
      "newContract": "New contract",
      "salaryReport": "Salary report",
      "expiredDocument": "Expired document",
      "system": "System"
    },
    "departments": {
      "technology": "Technology",
      "finance": "Finance",
      "sales": "Sales",
      "hr": "HR",
      "operations": "Operations",
      "marketing": "Marketing",
      "legal": "Legal"
    },
    "gender": {
      "male": "Male",
      "female": "Female"
    }
  },
  "employees": {
    "title": "Employees",
    "eyebrow": "People",
    "subtitle": "Manage workforce records, employment status, and employee lifecycle data.",
    "allEmployees": "All Employees",
    "drafts": "Drafts",
    "draftNote": "Drafts are incomplete employee records. Complete all required steps to activate them.",
    "searchPlaceholder": "Search by name or national ID",
    "divisionPlaceholder": "Division",
    "statusPlaceholder": "Status",
    "newEmployee": "New Employee",
    "addEmployee": "Add employee",
    "export": "Export",
    "exportFailed": "Audit records could not be exported.",
    "exportModal": {
      "eyebrow": "Employee data",
      "title": "Export Employees",
      "description": "Choose the fields to include. Current employee filters are applied automatically.",
      "preset": "Export preset",
      "allFields": "All fields",
      "allFieldsHint": "Complete employee export",
      "compensation": "Compensation & SI",
      "compensationHint": "Payroll and insurance fields",
      "custom": "Custom selection",
      "customHint": "Choose individual columns",
      "fields": "Included fields",
      "selectAll": "Select all",
      "clearAll": "Deselect all",
      "selectOne": "Select at least one export field.",
      "sensitiveField": "Sensitive field",
      "sensitiveNote": "Sensitive fields are automatically masked or excluded according to the current user's permissions.",
      "exporting": "Exporting...",
      "downloaded": "Employee export downloaded.",
      "failed": "Employee export could not be downloaded.",
      "groups": {
        "identity": "Identity",
        "employment": "Employment",
        "compensation": "Compensation",
        "socialInsurance": "Social Insurance",
        "tax": "Tax"
      },
      "columns": {
        "id": "Record ID",
        "firstNameEn": "First Name (English)",
        "lastNameEn": "Last Name (English)",
        "firstNameAr": "First Name (Arabic)",
        "lastNameAr": "Last Name (Arabic)",
        "nationalId": "National ID",
        "dateOfBirth": "Date of Birth",
        "gender": "Gender",
        "dateOfJoining": "Joining Date",
        "employmentType": "Employment Type",
        "contractType": "Contract Type",
        "jobGrade": "Job Grade",
        "status": "Status",
        "jobTitle": "Job Title",
        "department": "Department",
        "grossSalary": "Gross Monthly Salary",
        "hourlyWage": "Hourly Wage",
        "weeklyHours": "Agreed Weekly Hours",
        "agreedRate": "Agreed Rate",
        "arrangementNotes": "Arrangement Notes",
        "siNumber": "SI Number",
        "siOffice": "SI Office Code",
        "insuranceStart": "Insurance Start Date",
        "basicInsuranceSalary": "Basic Insurance Salary",
        "variableInsuranceSalary": "Variable Insurance Salary",
        "employeeContribution": "Employee Contribution",
        "employerContribution": "Employer Contribution",
        "insuranceType": "Insurance Type",
        "siNotApplicable": "SI Not Applicable",
        "taxNumber": "Tax Registration Number",
        "taxExpiry": "Tax Card Expiry",
        "taxExemption": "Tax Exemption",
        "taxDependants": "Tax Dependants",
        "taxBracket": "Tax Bracket Rate"
      }
    },
    "employeeIdFallback": "The backend does not provide an employee code; this is the record ID.",
    "reportsToUnavailable": "The employee search response does not include the direct manager.",
    "resumeUnavailableDetail": "Partial employee drafts and their saved wizard step are not supported by the backend.",
    "totalEmployees": "Total {count} employees",
    "totalDrafts": "Total {count} drafts",
    "recordSummary": "employees",
    "recordSummaryDetail": "Total records in system",
    "emptyTitle": "No employees found",
    "emptySubtitle": "Try adjusting your search or filters.",
    "columns": {
      "employee": "Employee",
      "requestId": "Request ID",
      "employeeId": "Employee ID",
      "fullName": "Full Name",
      "employeeCode": "Employee Code",
      "businessUnit": "Business Unit",
      "department": "Department",
      "position": "Position",
      "division": "Division",
      "jobTitle": "Job Title",
      "manager": "Manager",
      "reportsTo": "Reports To",
      "employmentType": "Employment Type",
      "status": "Status",
      "joinDate": "Join date",
      "joiningDate": "Joining Date",
      "action": "Action",
      "actions": "Actions",
      "photo": "Requested Photo"
    },
    "statuses": {
      "all": "All",
      "draft": "Draft",
      "active": "Active",
      "probation": "Probation",
      "offboarding": "Offboarding",
      "inactive": "Inactive",
      "terminated": "Terminated"
    },
    "employmentTypes": {
      "fullTime": "Full-time",
      "partTime": "Part-time",
      "freelance": "Freelance",
      "outsourced": "Outsourced"
    },
    "contractTypes": {
      "permanent": "Permanent",
      "fixedTerm": "Fixed-term",
      "temporary": "Temporary",
      "probation": "Probation",
      "partTime": "Part-time",
      "outsourced": "Outsourced"
    },
    "jobGrades": {
      "junior": "Junior",
      "midLevel": "Mid-level",
      "senior": "Senior",
      "lead": "Lead",
      "manager": "Manager",
      "director": "Director",
      "executive": "Executive"
    },
    "resume": "Resume",
    "draftSavedAt": "Draft saved at",
    "filterDrawer": {
      "gender": "Gender",
      "selectGender": "Select gender",
      "male": "Male",
      "female": "Female",
      "jobGrade": "Job Grade",
      "selectGrade": "Select grade",
      "employmentType": "Employment Type",
      "selectType": "Select type",
      "fullTime": "Full-time",
      "partTime": "Part-time",
      "temporaryContract": "Temporary Contract",
      "contractType": "Contract Type",
      "selectContractType": "Select contract type",
      "permanent": "Permanent",
      "fixedTerm": "Fixed-term",
      "freelance": "Freelance",
      "joiningDateRange": "Joining Date Range"
    }
  },
  "departments": {
    "title": "Departments",
    "eyebrow": "Organization",
    "subtitle": "Manage organizational departments and their structure.",
    "searchPlaceholder": "Search departments...",
    "emptyTitle": "No departments found",
    "emptySubtitle": "Start by adding your first department.",
    "addDepartment": "Add New",
    "activeCount": "{count} active",
    "inactiveCount": "{count} inactive",
    "infoNote": "These lists populate the dropdowns used throughout the system. Changes apply immediately.",
    "columns": {
      "nameAr": "Arabic Name",
      "nameEn": "English Name",
      "status": "Status",
      "actions": "Actions"
    },
    "modal": {
      "addTitle": "Add — Department",
      "editTitle": "Edit — Department",
      "nameAr": "Arabic Name",
      "nameEn": "English Name",
      "status": "Status",
      "nameArPlaceholder": "Enter department name in Arabic",
      "nameEnPlaceholder": "Enter department name in English",
      "cancel": "Cancel",
      "save": "Save"
    },
    "delete": {
      "title": "Confirm Delete",
      "message": "Are you sure you want to delete this department? It will no longer appear in dropdowns.",
      "confirm": "Delete",
      "cancel": "Cancel"
    },
    "success": {
      "created": "Department created successfully.",
      "updated": "Department updated successfully.",
      "deleted": "Department deleted successfully."
    },
    "validation": {
      "nameArRequired": "Arabic name is required.",
      "nameEnRequired": "English name is required.",
      "nameArMaxLength": "Arabic name cannot exceed 150 characters.",
      "nameEnMaxLength": "English name cannot exceed 150 characters."
    }
  },
  "jobTitles": {
    "title": "Job Titles",
    "eyebrow": "Organization",
    "subtitle": "Manage job titles and position definitions.",
    "searchPlaceholder": "Search job titles...",
    "emptyTitle": "No job titles found",
    "emptySubtitle": "Create job titles to organize your workforce.",
    "addJobTitle": "Add Job Title",
    "infoNote": "Job titles are reusable across employee records. Inactive titles remain visible on historical records.",
    "modal": {
      "addTitle": "Add — Job Title",
      "editTitle": "Edit — Job Title"
    },
    "delete": {
      "title": "Delete Job Title?",
      "message": "Are you sure you want to delete this job title?"
    },
    "success": {
      "created": "Job title created successfully.",
      "updated": "Job title updated successfully.",
      "deleted": "Job title deleted successfully."
    },
    "columns": {
      "code": "Code",
      "title": "Title",
      "department": "Department",
      "employees": "Employees",
      "status": "Status"
    }
  },
  "teams": {
    "title": "Teams",
    "eyebrow": "Organization",
    "subtitle": "Manage teams employees can be assigned to, independent of Department.",
    "searchPlaceholder": "Search teams...",
    "emptyTitle": "No teams found",
    "emptySubtitle": "Add teams to organize your workforce.",
    "addTeam": "Add Team",
    "infoNote": "Teams populate the Team dropdown on the employee creation form. Use the arrows to reorder them.",
    "moveUp": "Move up",
    "moveDown": "Move down",
    "modal": {
      "addTitle": "Add — Team",
      "editTitle": "Edit — Team"
    },
    "delete": {
      "title": "Delete Team?",
      "message": "Are you sure you want to delete this team?"
    },
    "success": {
      "created": "Team created successfully.",
      "updated": "Team updated successfully.",
      "deleted": "Team deleted successfully."
    },
    "columns": {
      "order": "Order"
    }
  },
  "nationalities": {
    "title": "Nationalities",
    "eyebrow": "Organization",
    "subtitle": "Manage nationalities used across employee records.",
    "searchPlaceholder": "Search nationalities...",
    "emptyTitle": "No nationalities found",
    "emptySubtitle": "Add nationalities to the system.",
    "addNationality": "Add Nationality",
    "infoNote": "Nationality codes and bilingual names are used across employee records and official forms.",
    "modal": {
      "addTitle": "Add — Nationality",
      "editTitle": "Edit — Nationality"
    },
    "delete": {
      "title": "Delete Nationality?",
      "message": "Are you sure you want to delete this nationality?"
    },
    "success": {
      "created": "Nationality created successfully.",
      "updated": "Nationality updated successfully.",
      "deleted": "Nationality deleted successfully."
    },
    "columns": {
      "code": "Code",
      "name": "Name",
      "status": "Status"
    }
  },
  "employeeImport": {
    "eyebrow": "Bulk Import",
    "title": "Employee Import",
    "subtitle": "Upload employee data, map spreadsheet columns, validate every row, and import.",
    "backToEmployees": "Back to Employees",
    "invalidFile": "Choose an Excel .xlsx or .xls file no larger than 10 MB.",
    "steps": {
      "ariaLabel": "Employee import steps",
      "upload": "Upload",
      "mapping": "Map Columns",
      "preview": "Preview",
      "complete": "Complete"
    },
    "upload": {
      "title": "Upload Data File",
      "dragDrop": "Drag & drop your file here",
      "browse": "or click to browse from device",
      "importHint": "Excel (.xlsx, .xls) · {size} MB max",
      "templateTitle": "Standard Import Template",
      "templateHint": "Download the standard template with all supported employee fields and the data dictionary.",
      "standardPath": "Use the standard template — fields are auto-mapped in the next step.",
      "customPath": "Upload any Excel workbook — define the column mapping manually in the next step."
    },
    "mapping": {
      "title": "Map File Columns to ATHR Fields",
      "loadProfile": "Load saved mapping:",
      "requiredMissing": "Required field not mapped: {field}",
      "fileColumn": "File Column",
      "normalisedHeader": "Normalized Header",
      "sampleUnavailable": "The backend detects headers but does not return sample row values.",
      "atharField": "ATHR Field",
      "ignoredOption": "— Will be ignored —",
      "ignored": "Ignored",
      "saveLabel": "Save this mapping:",
      "savePlaceholder": "e.g. Payroll System 2026",
      "saveHint": "Saved mappings can be reused by administrators with mapping-profile access.",
      "profileSaved": "Mapping profile saved.",
      "profileSaveFailed": "The mapping profile could not be saved.",
      "preview": "Preview & Validate",
      "validationFailed": "Resolve the blocking mapping issues before previewing the file.",
      "metadataFailed": "Mapping field metadata could not be loaded.",
      "detectFailed": "Spreadsheet columns could not be detected.",
      "unavailableTitle": "Column mapping is unavailable for your role",
      "unavailableHint": "The standard backend template will be validated with its fixed columns. Ask an administrator for ColumnMapping.View permission to import custom spreadsheets.",
      "types": {
        "text": "Text",
        "integer": "Integer",
        "decimal": "Decimal",
        "date": "Date",
        "boolean": "Yes / No",
        "enum": "List value"
      }
    },
    "preview": {
      "title": "Data Preview & Validation",
      "employee": "Employee Name",
      "status": "Status",
      "details": "Details",
      "note": "Passed and warning rows will be imported. Failed rows are skipped and can be downloaded in the error report.",
      "importRows": "Import {count} Valid Rows"
    },
    "complete": {
      "subtitle": "{imported} employees imported · {skipped} rows skipped",
      "runBy": "Run by",
      "runByUnavailable": "The import result does not return the current operator name.",
      "timestamp": "Timestamp",
      "auditNote": "This import has been logged in the backend audit trail.",
      "another": "Import another file",
      "goToEmployees": "Go to Employee List"
    },
    "downloadTemplate": "Download Template",
    "downloadTemplateHint": "Use the backend-generated template to avoid column and validation issues.",
    "uploadFile": "Upload Excel File",
    "uploadFileHint": "Preview validates every row before saving any employee records.",
    "executeImport": "Execute Import",
    "previewResult": "Preview Result",
    "importComplete": "Employee import completed successfully.",
    "validationSummary": "Validation Summary",
    "downloadErrorReport": "Download Error Report",
    "downloadingReport": "Downloading...",
    "summary": {
      "total": "Total",
      "passed": "Passed",
      "warnings": "Warnings",
      "failed": "Failed",
      "inserted": "Inserted",
      "updated": "Updated",
      "skipped": "Skipped"
    },
    "rowIssues": "Rows needing attention",
    "rowsNeedAttention": "rows need attention",
    "row": "Row",
    "status": {
      "passed": "Passed",
      "warning": "Warning",
      "failed": "Failed"
    },
    "noValidationIssues": "No validation issues were found.",
    "executionSummary": "Import Result",
    "partialComplete": "Import completed with skipped rows",
    "partialCompleteDetail": "{inserted} inserted, {updated} updated, {skipped} skipped.",
    "partialResultHint": "Skipped rows are included in the error report. The report was downloaded automatically and can be downloaded again.",
    "reportUnavailable": "The import completed with skipped rows, but the backend did not return an error report.",
    "reportDownloaded": "Error report downloaded.",
    "reportDownloadFailed": "The import completed, but the error report could not be downloaded."
  },
  "employeeCreate": {
    "subtitle": "Create an employee record and provision the linked user account.",
    "created": "Employee created successfully.",
    "steps": {
      "ariaLabel": "Employee creation steps",
      "identity": "Core Identity",
      "employment": "Employment",
      "compensation": "Compensation",
      "insurance": "Social Insurance",
      "tax": "Tax & Account",
      "military": "Military & Overrides",
      "documents": "Documents",
      "review": "Review & Save"
    },
    "saveDraft": "Save Draft",
    "draftHint": "Saves your progress on this device only, so you can pick up where you left off. Attached files are not included — you'll need to re-attach them.",
    "draftSaved": "Draft saved on this device.",
    "draftSaveFailed": "Couldn't save the draft — your browser's local storage may be full or disabled.",
    "draftFound": "You have an unfinished draft saved on this device",
    "resumeDraft": "Resume Draft",
    "discardDraft": "Discard",
    "createEmployee": "Create Employee",
    "documents": {
      "title": "Employee Documents",
      "subtitle": "Attach available employee files now. They will be uploaded after the employee record is saved.",
      "optional": "Optional",
      "fileHint": "PDF, JPG, PNG, or DOCX up to 20 MB",
      "noTypes": "No active document types are configured.",
      "invalidFile": "Choose a PDF, JPG, PNG, or DOCX file no larger than 20 MB.",
      "requiredDates": "Complete the required dates for each selected document.",
      "partialFailure": "The employee was saved, but these documents could not be uploaded: {files}",
      "noneSelected": "No documents selected. You can add them later from the employee profile."
    },
    "review": {
      "title": "Review employee details",
      "subtitle": "Check the information before creating the employee and linked user account."
    },
    "firstNameEn": "First name (English)",
    "lastNameEn": "Last name (English)",
    "firstNameAr": "First name (Arabic)",
    "lastNameAr": "Last name (Arabic)",
    "nationalId": "National ID",
    "employeeCode": "Employee Code",
    "employeeCodeHint": "Leave blank to auto-generate",
    "nationality": "Nationality",
    "dateOfBirth": "Date of Birth",
    "gender": "Gender",
    "nidExpiryDate": "NID Expiry Date",
    "dateOfJoining": "Date of Joining",
    "department": "Department",
    "jobTitle": "Job Title",
    "team": "Team",
    "businessUnit": "Business Unit",
    "directManager": "Direct Manager",
    "noManager": "No manager",
    "employmentType": "Employment Type",
    "contractType": "Contract Type",
    "jobGrade": "Job Grade",
    "status": "Status",
    "grossMonthlySalary": "Gross Monthly Salary",
    "hourlyWage": "Hourly Wage",
    "agreedWeeklyHours": "Agreed Weekly Hours",
    "agreedRate": "Agreed Rate",
    "arrangementNotes": "Arrangement Notes",
    "supplyingAgencyName": "Supplying Agency Name",
    "tradeRegisterNumber": "Trade Register Number",
    "siNotApplicable": "Social Insurance not applicable",
    "socialInsuranceNumber": "Social Insurance Number",
    "siOfficeCode": "SI Office Code",
    "insuranceOffice": "Insurance Office",
    "insuranceStartDate": "Insurance Start Date",
    "basicInsuranceSalary": "Basic Insurance Salary",
    "variableInsuranceSalary": "Variable Insurance Salary",
    "insuranceType": "Insurance Type",
    "email": "Email",
    "roleName": "Role Name",
    "taxRegistrationNumber": "Tax Registration Number",
    "taxCardExpiryDate": "Tax Card Expiry Date",
    "taxExemptionStatus": "Tax Exemption Status",
    "taxDependantsCount": "Tax Dependants Count",
    "militaryStatus": "Military Status",
    "militaryExemptionReason": "Military Exemption Reason",
    "militaryDeferralDate": "Deferral Expected Completion Date",
    "dischargeCertificateNumber": "Discharge Certificate Number",
    "dischargeCertificateDate": "Discharge Certificate Date",
    "overrideDateOfBirth": "Override NID-derived date of birth",
    "overrideGender": "Override NID-derived gender",
    "overrideGovernorate": "Override NID-derived governorate",
    "insuranceTypes": {
      "compulsory": "Compulsory",
      "voluntary": "Voluntary"
    },
    "militaryStatuses": {
      "completed": "Completed",
      "exempted": "Exempted",
      "deferred": "Deferred",
      "notYetDue": "Not yet due"
    },
    "exemptionReasons": {
      "medical": "Medical unfitness",
      "onlySon": "Only son of family",
      "breadwinner": "Breadwinner of family",
      "other": "Other"
    },
    "taxExemptions": {
      "notExempt": "Not exempt",
      "fullyExempt": "Fully exempt",
      "partiallyExempt": "Partially exempt"
    },
    "salaryChangeReasons": {
      "promotion": "Promotion",
      "annualIncrement": "Annual increment",
      "correction": "Correction",
      "marketAdjustment": "Market adjustment"
    },
    "salaryChangeReason": "Reason for Salary Change",
    "salaryChangeReasonRequired": "A salary change reason is required when salary fields change.",
    "updated": "Employee updated successfully.",
    "nidPendingApproval": "National ID change submitted and is pending approval.",
    "credentialsTitle": "Employee account created",
    "credentialsIntro": "The linked user account has been provisioned. Share these sign-in credentials with the employee.",
    "credentialsUsername": "Username",
    "temporaryPassword": "Temporary password",
    "copyPassword": "Copy password",
    "copied": "Copied",
    "credentialsWarning": "This password is shown only once and cannot be retrieved later. Copy it now and send it securely to the employee.",
    "goToProfile": "Go to profile"
  },
  "employeeApprovals": {
    "title": "Employee Approvals",
    "subtitle": "Review and approve National ID changes and photo change requests.",
    "tabs": {
      "nid": "National ID Changes",
      "photo": "Photo Changes"
    },
    "columns": {
      "employee": "Employee",
      "requestId": "Request ID",
      "employeeId": "Employee ID",
      "oldNid": "Old National ID",
      "newNid": "New National ID",
      "photo": "Requested Photo",
      "fileName": "File Name",
      "status": "Status",
      "requestedBy": "Requested By",
      "requestedAt": "Requested At",
      "actions": "Actions"
    },
    "statuses": {
      "pending": "Pending",
      "underReview": "Under Review",
      "approved": "Approved",
      "rejected": "Rejected",
      "cancelled": "Cancelled"
    },
    "filters": {
      "employeeId": "Employee ID",
      "employeeName": "Search employee by name"
    },
    "emptyNid": "No pending National ID changes",
    "emptyNidSubtitle": "All National ID change requests have been reviewed.",
    "emptyPhoto": "No pending photo changes",
    "emptyPhotoSubtitle": "All photo change requests have been reviewed.",
    "reviewApprove": "Approve Request",
    "reviewReject": "Reject Request",
    "reviewNotes": "Review Notes (optional)",
    "reviewNotesPlaceholder": "Add any notes about this decision...",
    "approved": "Request approved successfully.",
    "rejected": "Request rejected.",
    "actionFailed": "The action could not be completed."
  },
  "employeeForm": {
    "backToList": "Back to Employee List",
    "backToProfile": "Back to Employee Profile",
    "addNewEmployee": "Add New Employee",
    "editEmployee": "Edit Employee",
    "draftBanner": "You can save a draft at any point and finish later.",
    "draftSaved": "Draft saved successfully",
    "employeeUpdated": "Employee updated successfully",
    "employeeSaved": "Employee saved successfully",
    "requiredField": "This field is required",
    "changeEmpTypeTitle": "Change Employment Type",
    "changeEmpTypeMsg": "Changing employment type will re-evaluate Social Insurance, salary, and contract fields. Existing values that no longer apply will be cleared. Continue?",
    "nid14Digits": "National ID must be exactly 14 digits.",
    "nidInvalid": "Invalid National ID.",
    "emailInvalid": "Enter a valid email address.",
    "taxRegistrationInvalid": "Tax registration number must contain exactly 9 digits.",
    "minimumValue": "The value cannot be less than zero.",
    "invalidField": "Enter a valid value.",
    "nidExtraction": "Date of Birth, Gender, and Governorate will be auto-extracted from the National ID.",
    "nidExtracted": "Date of Birth, Gender, and Governorate are auto-extracted from the National ID.",
    "hrOverride": "HR Override: Edit manually",
    "restoreNid": "Restore NID values",
    "under18Warning": "This employee is {age} years old — under 18, the minimum working age under Egyptian Labour Law.",
    "conscriptionNote": "Military status is required for male employees of conscription age (18–30).",
    "steps": {
      "identity": "Core Identity",
      "employment": "Employment",
      "salary": "Salary & Compensation",
      "si": "Social Insurance",
      "arrangementDetails": "Arrangement Details",
      "tax": "Tax",
      "military": "Military Service",
      "documents": "Documents",
      "review": "Review & Save"
    },
    "sections": {
      "personalInfo": "Personal Information",
      "employmentDetails": "Employment",
      "salaryCompensation": "Salary & Compensation",
      "socialInsurance": "Social Insurance",
      "arrangementDetails": "Arrangement Details",
      "tax": "Tax",
      "militaryService": "Military Service",
      "documents": "Documents"
    },
    "fields": {
      "nameAr": "Name (Arabic)",
      "nameEn": "Name (English)",
      "nationalId": "National ID",
      "nidExpiry": "NID Expiry Date",
      "nationality": "Nationality",
      "governorate": "Governorate",
      "dateOfBirth": "Date of Birth",
      "gender": "Gender",
      "male": "Male",
      "female": "Female",
      "phone": "Phone Number",
      "email": "Email",
      "address": "Address",
      "joiningDate": "Joining Date",
      "department": "Department",
      "division": "Division",
      "jobTitle": "Job Title",
      "employmentType": "Employment Type",
      "contractType": "Contract Type",
      "grade": "Job Grade",
      "status": "Status",
      "basicSalary": "Gross Monthly Salary",
      "hourlyWage": "Hourly Wage",
      "weeklyHours": "Agreed Weekly Hours",
      "rateAmount": "Agreed Rate",
      "salaryChangeReason": "Reason for Salary Change",
      "insuranceNumber": "SI Number",
      "siOfficeCode": "SI Office Code",
      "subscriptionStartDate": "Subscription Start Date",
      "insuranceType": "Insurance Type",
      "insuranceBasicSalary": "Basic Insurance Salary",
      "insuranceVariableSalary": "Variable Insurance Salary",
      "arrangementNotes": "Arrangement Notes",
      "commercialReg": "Commercial Registration No.",
      "agencyName": "Supplying Agency Name",
      "taxNumber": "Tax Registration Number (TRN)",
      "taxCardExpiry": "Tax Card Expiry Date",
      "taxExemption": "Exemption Status",
      "taxDependants": "Number of Tax Dependants",
      "militaryStatus": "Military Status",
      "exemptionReason": "Exemption Reason",
      "expectedCompletionDate": "Expected Completion Date",
      "dischargeCertNumber": "Discharge Certificate No.",
      "issuanceDate": "Issuance Date"
    },
    "placeholders": {
      "selectGender": "Select gender",
      "selectNationality": "Select nationality",
      "selectDepartment": "Select department",
      "selectJobTitle": "Select job title",
      "selectEmpType": "Select employment type",
      "selectContractType": "Select contract type",
      "selectStatus": "Select status",
      "selectDate": "Select date",
      "selectDateOptional": "Select date (optional)",
      "selectSIType": "Select insurance type",
      "selectMilitaryStatus": "Select military status",
      "selectExemptionStatus": "Select exemption status",
      "selectReason": "Select a reason",
      "selectDivision": "Select division",
      "selectGrade": "Select grade",
      "nameArPlaceholder": "Enter name in Arabic",
      "nameEnPlaceholder": "Enter name in English",
      "nidPlaceholder": "29901012345678"
    },
    "info": {
      "empTypeNotSelected": "Select an employment type in the Employment step to see the relevant salary fields.",
      "siNotConfigured": "Select an employment type in the Employment step to see the relevant insurance fields.",
      "allowancesNote": "Allowances and deductions can be added after saving the employee record.",
      "salaryAuditNote": "Salary changes are recorded in the audit trail.",
      "siCapWarning": "Insurance salary exceeds the current monthly cap of 14,500 EGP set by the Social Insurance Authority.",
      "empContribLabel": "Employee contribution (11%):",
      "erContribLabel": "Employer contribution (18.75%):",
      "siTotalLabel": "Total:",
      "siDisclaimer": "Reference calculation only. This system does not process payroll.",
      "taxBracketLabel": "Estimated tax bracket:",
      "taxDisclaimer": "Reference only. This system does not process payroll or calculate net pay.",
      "trnUnique": "TRN must be unique per employee.",
      "taxCardReminder": "A reminder is sent 60 days before tax card expiry.",
      "militaryRequiredNote": "Military status is required for male employees of conscription age (18–30).",
      "salaryReasonRequired": "A reason is required"
    },
    "documents": {
      "header": "Documents",
      "info": "Required documents are set by your administrator in Settings. These files are saved to the employee's Documents record.",
      "columnDoc": "Document",
      "columnRequirement": "Requirement",
      "columnFile": "File",
      "validationError": "Please upload all required documents (marked *) before continuing.",
      "docRequired": "This document is required",
      "badgeRequired": "Required",
      "badgeOptional": "Optional",
      "uploadFile": "Upload file",
      "replace": "Replace",
      "fileTooLarge": "File exceeds 20MB limit"
    },
    "review": {
      "info": "Review all entered data across every step. You can edit any section before saving.",
      "identity": "Core Identity",
      "employment": "Employment",
      "salary": "Salary & Compensation",
      "socialInsurance": "Social Insurance",
      "arrangement": "Arrangement Details",
      "tax": "Tax",
      "military": "Military Service",
      "documents": "Documents",
      "editButton": "Edit",
      "genderMale": "Male",
      "genderFemale": "Female"
    },
    "footer": {
      "saveDraft": "Save Draft",
      "saveEmployee": "Save Employee"
    },
    "rateUnits": {
      "perMonth": "per month",
      "perDay": "per day",
      "perHour": "per hour",
      "perProject": "per project"
    },
    "weeklyHoursAddon": "hrs/week"
  },
  "employeeProfile": {
    "backToList": "Back to Employee List",
    "uploadPhoto": "Upload Photo",
    "changeStatus": "Change Status",
    "uploading": "Uploading...",
    "photoInvalid": "Choose a JPEG, PNG, or WebP image up to 5 MB.",
    "photoUploaded": "Employee photo updated successfully.",
    "photoChangeRequested": "Photo change submitted for approval. The current photo remains unchanged.",
    "photoUploadFailed": "Employee photo could not be uploaded.",
    "photoModal": {
      "title": "Update Employee Photo",
      "subtitle": "Upload an official profile photo for this employee.",
      "previewAlt": "Selected employee photo preview",
      "chooseTitle": "Profile photo",
      "requirements": "Use a clear portrait in JPEG, PNG, or WebP format, up to 5 MB. The backend crops it to a 3:4 ratio.",
      "chooseFile": "Choose Photo",
      "changeFile": "Choose Another",
      "save": "Save Photo",
      "history": "Photo History",
      "noHistory": "No previous employee photos were found."
    },
    "terminateTitle": "Terminate Employee",
    "terminateHint": "This ends the employee's active record and deactivates the linked user account.",
    "lastWorkingDay": "Last Working Day",
    "terminationReason": "Termination Reason",
    "terminationReasonRequired": "Enter a termination reason.",
    "confirmTermination": "Confirm Termination",
    "terminated": "Employee terminated successfully.",
    "reinstate": "Reinstate",
    "reinstateTitle": "Reinstate Employee",
    "reinstateConfirm": "Reinstate this employee and reactivate their linked account?",
    "reinstated": "Employee reinstated successfully.",
    "statusChangeFailed": "Employee status could not be changed.",
    "statusChanged": "Employee status updated successfully.",
    "statusOptionsFailed": "Status options could not be loaded.",
    "coreInformation": "Core Information",
    "employmentCompensation": "Employment & Compensation",
    "socialInsurance": "Social Insurance",
    "notFound": "Employee profile unavailable",
    "notFoundDetail": "The employee could not be found or you do not have access to this profile.",
    "duration": "{years} years, {months} months",
    "salaryTypes": {
      "grossMonthlySalary": "Gross monthly salary",
      "agreedRate": "Agreed rate",
      "hourlyWage": "Hourly wage"
    },
    "tabs": {
      "ariaLabel": "Employee profile sections",
      "documents": "Documents",
      "contract": "Contract",
      "changeHistory": "Change History",
      "statusHistory": "Status History",
      "offboarding": "Offboarding Tasks",
      "insurance": "Medical Insurance"
    },
    "statusModal": {
      "title": "Change Employee Status",
      "currentStatus": "Current Status:",
      "newStatus": "New Status",
      "selectStatus": "Select new status",
      "effectiveDate": "Effective Date",
      "reason": "Reason",
      "selectReason": "Select a reason",
      "notes": "Notes (optional)",
      "notesPlaceholder": "Add any additional details...",
      "terminalWarning": "This is a terminal status. It will trigger the offboarding checklist and deactivate the employee account.",
      "save": "Save Status Change",
      "auditNote": "All status changes are recorded in the audit trail."
    },
    "details": {
      "nameAr": "Name (Arabic)",
      "nameEn": "Name (English)",
      "nationalId": "National ID",
      "nationality": "Nationality",
      "dateOfBirth": "Date of Birth",
      "gender": "Gender",
      "joiningDate": "Joining Date",
      "department": "Department",
      "jobTitle": "Job Title",
      "team": "Team",
      "businessUnit": "Business Unit",
      "directManager": "Direct Manager",
      "employmentType": "Employment Type",
      "contractType": "Contract Type",
      "jobGrade": "Job Grade",
      "insuranceOffice": "Insurance Office",
      "status": "Status"
    },
    "contract": {
      "contractType": "Contract Type",
      "startDate": "Start Date",
      "endDate": "End Date",
      "duration": "Duration",
      "basicSalary": "Basic Salary",
      "contractStatus": "Contract Status",
      "indefinite": "Indefinite (Permanent)",
      "contractId": "Contract ID",
      "version": "Version",
      "configurableContractType": "Configured Contract Type",
      "previousContract": "Previous Contract",
      "document": "Linked Document",
      "renewalNotes": "Renewal Notes",
      "createdBy": "Created By",
      "createdAt": "Created At",
      "updatedBy": "Updated By",
      "updatedAt": "Updated At",
      "viewFull": "View Full Contract",
      "renew": "Renew Contract"
    },
    "offboardingEmpty": "No offboarding in progress. This section activates when the employee begins offboarding.",
    "completeTask": "Mark Complete",
    "offboardingTaskCompleted": "Offboarding task completed.",
    "offboardingTaskFailed": "The offboarding task could not be completed.",
    "noChangeHistory": "No employee changes have been recorded.",
    "noStatusHistory": "No status changes have been recorded.",
    "changeHistoryColumns": {
      "fieldChanged": "Field Changed",
      "oldValue": "Old Value",
      "newValue": "New Value",
      "changedBy": "Changed By",
      "dateTime": "Date & Time"
    },
    "statusHistoryColumns": {
      "status": "Status",
      "effectiveDate": "Effective Date",
      "reason": "Reason",
      "notes": "Notes",
      "changedBy": "Changed By"
    },
    "documentColumns": {
      "documentType": "Document Type",
      "fileName": "File Name",
      "uploadDate": "Upload Date",
      "expiryDate": "Expiry Date",
      "status": "Status"
    },
    "uploadDocument": "Upload Document",
    "documentsHint": "Files attached to this employee record.",
    "issueDate": "Issue Date",
    "selectDocument": "Document File",
    "documentHint": "PDF, JPG, PNG, or DOCX — maximum 20 MB.",
    "notes": "Notes (optional)",
    "documentRequired": "Choose a document to upload.",
    "documentInvalid": "The document must be an allowed file type and no larger than 20 MB.",
    "documentUploaded": "Document uploaded successfully.",
    "documentUploadFailed": "Document could not be uploaded.",
    "documentDownloadFailed": "Document could not be opened.",
    "documentsLoadFailed": "Employee documents could not be loaded.",
    "preview": "Preview",
    "download": "Download",
    "documentCategories": {
      "employmentContract": "Employment Contract",
      "nidCopy": "National ID Copy",
      "militaryCertificate": "Military Certificate",
      "educationalCertificates": "Educational Certificates",
      "siCard": "Social Insurance Card",
      "taxCard": "Tax Card",
      "medicalCertificate": "Medical Certificate",
      "passport": "Passport",
      "other": "Other"
    },
    "documentStatuses": {
      "noExpiry": "No Expiry",
      "valid": "Valid",
      "expiringSoon": "Expiring Soon",
      "critical": "Critical",
      "expired": "Expired"
    }
  },
  "employeeEdit": {
    "title": "Edit Employee",
    "subtitle": "Review the employee data loaded from the profile.",
    "contractNotice": "The current profile response does not include every value required for a safe update. Review mode is enabled; saving will remain unavailable until the backend returns the complete edit contract.",
    "saveChanges": "Save Changes",
    "saveUnavailable": "Saving is unavailable because the employee response does not include the complete update contract."
  },
  "documents": {
    "title": "Documents",
    "searchPlaceholder": "Search by employee name, department, or document...",
    "filters": {
      "expiryFrom": "Expiry from",
      "expiryTo": "Expiry to",
      "notExpired": "Not expired"
    },
    "tabs": {
      "all": "All Documents",
      "expiring": "Expiring Soon",
      "expired": "Expired"
    },
    "columns": {
      "document": "Document",
      "category": "Category",
      "uploadDate": "Upload Date",
      "expiryDate": "Expiry Date",
      "status": "Status",
      "actions": "Actions",
      "employee": "Employee",
      "department": "Department",
      "issueDate": "Issue Date",
      "expiryDateShort": "Expiry Date",
      "uploadedBy": "Uploaded By"
    },
    "uploadModal": {
      "title": "Upload Document",
      "documentType": "Document Type",
      "selectFile": "Choose File",
      "hint": "PDF, JPG, or PNG — max 10 MB",
      "issueDate": "Issue Date",
      "expiryDate": "Expiry Date",
      "endDate": "End Date",
      "requiredDates": "Complete all dates required by the selected document type.",
      "notes": "Notes (optional)",
      "cancel": "Cancel",
      "upload": "Upload"
    },
    "empty": "No documents found.",
    "buttonUpload": "Upload Document",
    "auditLog": "Audit Log",
    "noAuditLogs": "No audit log entries found.",
    "categories": {
      "identity": "Identity",
      "contract": "Contract",
      "certificate": "Certificate",
      "medical": "Medical",
      "workPermit": "Work Permit",
      "insurance": "Insurance"
    },
    "expiry": {
      "valid": "Valid",
      "expiringSoon": "Expiring Soon",
      "expired": "Expired"
    },
    "noExpiring": "No documents expiring in this period"
  },
  "contracts": {
    "title": "Contracts",
    "searchPlaceholder": "Search by employee name or contract notes...",
    "filters": {
      "endDateFrom": "End date from",
      "endDateTo": "End date to"
    },
    "tabs": {
      "all": "All Contracts",
      "expiring": "Expiring Soon"
    },
    "columns": {
      "employee": "Employee",
      "department": "Department",
      "type": "Type",
      "startDate": "Start Date",
      "endDate": "End Date",
      "status": "Status",
      "actions": "Actions"
    },
    "newContract": {
      "title": "New Contract",
      "employee": "Employee",
      "contractType": "Contract Type",
      "startDate": "Start Date",
      "endDate": "End Date",
      "notes": "Notes (optional)",
      "cancel": "Cancel",
      "create": "Create"
    },
    "filter": {
      "contractType": "Contract Type",
      "status": "Status",
      "all": "All"
    },
    "empty": "No contracts found.",
    "noExpiring": "No contracts expiring in this period",
    "types": {
      "fulltime": "Full-Time",
      "parttime": "Part-Time",
      "freelance": "Freelance"
    },
    "statuses": {
      "active": "Active",
      "expiring": "Expiring Soon",
      "expired": "Expired",
      "pendingRenewalDecision": "Pending Renewal Decision",
      "renewed": "Renewed",
      "terminated": "Terminated",
      "draft": "Draft"
    },
    "details": {
      "contractAndEmployee": "Contract & Employee",
      "termAndRenewal": "Term & Renewal",
      "contractId": "Contract ID",
      "employeeId": "Employee ID",
      "version": "Version",
      "createdBy": "Created by",
      "createdAt": "Created at",
      "notes": "Notes",
      "renewalNotes": "Renewal notes"
    },
    "viewContract": "View Contract",
    "renewContract": "Renew Contract",
    "terminateContract": "Terminate Contract",
    "actionRenew": "Renew",
    "actionTerminate": "Terminate",
    "initiateRenewal": "Initiate Renewal",
    "autoRenewal": "Auto renewal",
    "daysRemaining": "Days remaining",
    "withinDays": "Within days",
    "terminationDate": "Termination date",
    "terminationReason": "Termination reason",
    "saved": "Contract saved successfully.",
    "saveFailed": "Contract could not be saved."
  },
  "reports": {
    "title": "Reports",
    "selectPrompt": "Select a report to view and export",
    "types": {
      "headcount": "Headcount & Workforce Composition",
      "socialInsurance": "Monthly Social Insurance Payroll",
      "joinsLeaves": "New Joiners & Leavers",
      "salary": "Salary & Compensation Analysis"
    },
    "sidebar": {
      "reportType": "Report Type"
    },
    "headcount": {
      "totalEmployees": "Total Employees",
      "totalHeadcount": "Total Headcount",
      "activeEmployees": "Active Employees",
      "acrossDepartments": "across all departments",
      "egyptianForeign": "Egyptian / Foreign",
      "egyptian": "Egyptian",
      "maleFemale": "Male / Female",
      "femaleRatio": "female ratio",
      "comparePreviousMonth": "Compare with previous month",
      "previousMonth": "Prev month",
      "compareModeActive": "Compare mode active: showing {current} against {previous}. Numbers reflect net change.",
      "comparisonLoadFailed": "Historical headcount comparison could not be loaded.",
      "departmentManagerScope": "Department Managers see only their own department's data.",
      "byDivision": "By Division",
      "byDepartment": "By Department",
      "byEmploymentType": "By Employment Type",
      "byStatus": "By Status",
      "byContractType": "By Contract Type"
    },
    "si": {
      "totalInsured": "Total Insured",
      "totalContribution": "Total Contributions",
      "employeeContribution": "Employee (11%)",
      "employerContribution": "Employer (18.75%)",
      "period": "Period",
      "payPeriod": "Pay Period",
      "exportForm2": "Export PDF — Form 2",
      "employeeName": "Employee Name",
      "nationalId": "National ID",
      "siNumber": "SI Number",
      "basicSalary": "Basic SI Salary",
      "variableSalary": "Variable SI Salary",
      "total": "Total",
      "grandTotal": "Grand Total",
      "capWarning": "{count} employees exceed the configured SI salary cap (EGP {cap}). Contributions are calculated at the cap.",
      "lockNote": "This report locks after the pay period closes. Edits after closure require HR Manager approval."
    },
    "joinsLeaves": {
      "newJoins": "New Joins",
      "leaves": "Leaves",
      "netChange": "Net Change",
      "reasonForLeaving": "Reason for Leaving"
    },
    "salary": {
      "avgSalary": "Average Salary",
      "totalPayroll": "Total Payroll",
      "accessNote": "Accessible to HR Manager and above.",
      "genderPayGap": "Gender Pay Gap",
      "organisationWideAverage": "Organisation-wide (Average)",
      "maleAverage": "Male average",
      "femaleAverage": "Female average",
      "aggregateOnly": "Aggregate data only — anonymisation mode active.",
      "byDivision": "By Division",
      "average": "Average",
      "median": "Median",
      "minimum": "Minimum",
      "maximum": "Maximum",
      "employeeCount": "Employee Count",
      "totalEmployees": "Total Employees",
      "groupBy": "Group By",
      "byDepartment": "Salary by Department",
      "byJobGrade": "Salary by Job Grade",
      "byGender": "Salary by Gender",
      "jobGrade": "Job Grade",
      "gradeShort": "Grade",
      "gender": "Gender",
      "genderGap": "Gender Gap",
      "departmentShort": "Dept",
      "anonymizeConsultants": "Anonymise data (for consultants)",
      "privacyMode": "Privacy Mode",
      "anonymized": "Anonymized",
      "identified": "Identified",
      "segment": "Segment"
    },
    "filter": {
      "snapshotDate": "Snapshot Date",
      "dateRange": "Date Range",
      "division": "Division",
      "department": "Department",
      "all": "All",
      "generateReport": "Generate Report"
    },
    "columns": {
      "employee": "Employee",
      "division": "Division",
      "department": "Department",
      "status": "Status",
      "amount": "Amount"
    },
    "empty": "No data available.",
    "backToReports": "Back to reports",
    "openReport": "Open report",
    "anonymized": "Anonymized",
    "anonymizeData": "Anonymize data",
    "allDepartments": "All Departments",
    "snapshot": "Snapshot",
    "ofTotal": "of total",
    "exportExcel": "Export Excel",
    "exportPdf": "Export PDF",
    "loadFailed": "Report data could not be loaded.",
    "descriptions": {
      "headcount": "Total employees, breakdown by department, gender, nationality, and employment type.",
      "joinsLeaves": "Monthly employee movement: joiners, leavers, and net headcount change.",
      "salary": "Salary distribution, grade ranges, and cross-department benchmarking.",
      "socialInsurance": "Employee and employer SI contributions with monthly variance tracking."
    },
    "exportUnavailableTitle": "Export unavailable",
    "exportUnavailableDescription": "This report endpoint does not provide an export file."
  },
  "notifications": {
    "title": "Notifications",
    "emptyAll": "No notifications yet",
    "emptyUnread": "No unread notifications",
    "emptyDescription": "New notifications will appear here automatically.",
    "showing": "Showing {visible} of {total} notifications",
    "pagination": "Notification pages",
    "tabs": {
      "all": "All",
      "unread": "Unread",
      "flagged": "Flagged",
      "documents": "Documents",
      "corrections": "Corrections"
    },
    "markAllRead": "Mark all read",
    "clearAll": "Clear all",
    "columns": {
      "date": "Date",
      "employee": "Employee",
      "title": "Title",
      "status": "Status",
      "priority": "Priority",
      "source": "Source",
      "relatedRecord": "Related Record",
      "actions": "Actions"
    },
    "actions": {
      "viewDetails": "View Details",
      "flag": "Flag",
      "archive": "Archive",
      "dismiss": "Dismiss"
    }
  },
  "settings": {
    "title": "Settings",
    "eyebrow": "Settings",
    "saved": "Settings saved successfully.",
    "subtitle": "Manage system configuration, access control, and reference data.",
    "systemSettings": "System Settings",
    "generalSettings": "General Settings",
    "backToSettings": "← Back to Settings",
    "discardChanges": "Discard Changes",
    "saveSettings": "Save Settings",
    "company": {
      "title": "Company Profile",
      "description": "Manage the legal identity and contact details shown across the system.",
      "informationTitle": "Company Information",
      "logoLabel": "Company Logo",
      "legalDetails": "Legal & Contact Details",
      "address": "Address",
      "nameEn": "Official Name (English)",
      "nameAr": "Official Name (Arabic)",
      "displayName": "Display Name",
      "registrationNumber": "Registration Number",
      "taxNumber": "Tax Number",
      "email": "Primary Email",
      "phone": "Primary Phone",
      "website": "Website",
      "logoUrl": "Logo URL",
      "uploadLogo": "Upload Logo",
      "logoHint": "PNG, JPG, SVG, or WEBP · max 2 MB",
      "logoPlaceholder": "Company Logo",
      "logoUploaded": "Company logo uploaded.",
      "logoTooLarge": "Company logo must be 2 MB or smaller.",
      "addressLine1": "Address Line 1",
      "addressLine2": "Address Line 2",
      "city": "City",
      "state": "State / Province",
      "country": "Country",
      "postalCode": "Postal Code"
    },
    "locale": {
      "title": "Language & Date",
      "defaultLanguage": "Default Language",
      "dateFormat": "Date Format"
    },
    "notifications": {
      "title": "Notification Lead Times",
      "description": "Days before due date to send an automatic reminder notification.",
      "days": "days"
    },
    "cards": {
      "audit": {
        "title": "Audit Log",
        "desc": "View all recorded changes and operations in the system."
      },
      "privacy": {
        "title": "Data Privacy & Protection",
        "desc": "Manage privacy policies, consents, and data rights."
      },
      "roles": {
        "title": "Roles & Access",
        "desc": "Configure user permissions and access roles."
      },
      "configuration": {
        "title": "Lookups & Configuration",
        "desc": "Manage departments, job titles, grades, and other dropdown lists."
      },
      "employees": {
        "title": "Employee Management",
        "desc": "View and edit all employee records."
      },
      "notifications": {
        "title": "Notifications",
        "desc": "View and manage system notifications."
      },
      "users": {
        "title": "User Management",
        "desc": "Manage system users and their permissions"
      }
    }
  },
  "configuration": {
    "title": "Configuration",
    "description": "Manage reference data lists used across all system screens.",
    "sidebarTitle": "Lookup Lists",
    "categories": {
      "divisions": "Divisions",
      "departments": "Departments",
      "jobTitles": "Job Titles",
      "documentTypes": "Document Types",
      "nationalities": "Nationalities",
      "insurances": "Insurance Companies",
      "leaves": "Leave Types",
      "holidays": "Public Holidays",
      "jobGrades": "Job Grades",
      "contractTypes": "Contract Types",
      "statusReasons": "Status Reasons",
      "teams": "Teams",
      "businessUnits": "Business Units"
    },
    "columns": {
      "name": "Name",
      "nameAr": "Arabic Name",
      "nameEn": "English Name",
      "code": "Code",
      "status": "Status",
      "actions": "Actions"
    },
    "statuses": {
      "active": "Active",
      "inactive": "Inactive"
    },
    "modal": {
      "create": "Add New",
      "edit": "Edit",
      "nameAr": "Arabic Name",
      "nameEn": "English Name",
      "code": "Code",
      "requiresIssueDate": "Requires Issue Date",
      "requiresExpiryDate": "Requires Expiry Date",
      "requiresEndDate": "Requires End Date",
      "status": "Status",
      "cancel": "Cancel",
      "save": "Save",
      "required": "This field is required.",
      "confirmDelete": "Confirm Delete",
      "confirmDeleteMsg": "Are you sure you want to delete this item?"
    },
    "notes": {
      "departments": "Departments populate organizational dropdowns used throughout the system. Changes apply immediately.",
      "divisions": "Divisions organize teams within the company structure and populate organizational dropdowns.",
      "jobTitles": "Job titles populate employee and position dropdowns used throughout the system. Changes apply immediately.",
      "jobGrades": "Job grades define workforce levels used across employee and compensation records.",
      "nationalities": "Nationalities populate employee identity dropdowns used throughout the system. Changes apply immediately.",
      "insurances": "Insurance offices populate social-insurance and government-form dropdowns.",
      "contractTypes": "Contract types define the employment arrangements available on employee contracts.",
      "statusReasons": "Status reasons define the options available when changing an employee's status.",
      "documentTypes": "Document types and requirement settings control which documents appear on the employee creation form.",
      "teams": "Teams populate the Team dropdown on the employee creation form, independent of Department.",
      "businessUnits": "Business units populate the Business Unit dropdown on the employee creation form."
    },
    "messages": {
      "created": "Lookup item created successfully.",
      "updated": "Lookup item updated successfully.",
      "deleted": "Lookup item deleted successfully.",
      "loadFailed": "Unable to load lookup items.",
      "saveFailed": "Unable to save the lookup item.",
      "deleteFailed": "Unable to delete the lookup item.",
      "reorderFailed": "Unable to reorder lookup items."
    },
    "reorder": {
      "moveUp": "Move up",
      "moveDown": "Move down"
    },
    "empty": "No items yet."
  },
  "roles": {
    "title": "Roles & Access",
    "subtitle": "Manage system roles, permissions, and user assignments.",
    "summary": "{roles} roles · {users} users total",
    "hierarchyNote": "Role levels are fully configurable. Level 1 is the highest authority.",
    "level": "level",
    "moveUp": "Move up",
    "moveDown": "Move down",
    "detailsLoadFailed": "Some role details could not be loaded.",
    "scopes": {
      "own": "Own records only",
      "team": "His team",
      "dept": "Department",
      "all": "All"
    },
    "columns": {
      "role": "Role",
      "description": "Description",
      "users": "Users",
      "actions": "Actions"
    },
    "modal": {
      "createRole": "Create Role",
      "editRole": "Edit Role",
      "roleName": "Role Name",
      "description": "Description",
      "permissions": "Permissions",
      "cancel": "Cancel",
      "save": "Save"
    },
    "permissions": {
      "viewEmployees": "View Employees",
      "createEmployees": "Create Employees",
      "editEmployees": "Edit Employees",
      "deleteEmployees": "Delete Employees",
      "viewContracts": "View Contracts",
      "manageContracts": "Manage Contracts",
      "viewDocuments": "View Documents",
      "uploadDocuments": "Upload Documents",
      "viewReports": "View Reports",
      "exportReports": "Export Reports",
      "manageSettings": "Manage Settings"
    },
    "userDrawer": {
      "title": "Assign Users",
      "search": "Search users...",
      "assigned": "Assigned",
      "available": "Available",
      "add": "Add",
      "remove": "Remove",
      "cancel": "Cancel",
      "save": "Save"
    },
    "empty": "No roles defined.",
    "tabs": {
      "roles": "Roles",
      "users": "Users",
      "userAssignments": "User Assignments",
      "fieldAccess": "Field Access",
      "policyPreview": "Policy & Preview"
    },
    "policy": {
      "title": "Session & 2FA Policy",
      "desc": "Configure session timeout, two-factor enforcement, and data scope for the selected role.",
      "notConfigured": "This role has no saved policy yet — showing defaults. Save to create one.",
      "saved": "Role policy saved.",
      "sessionTimeout": "Session Timeout (minutes)",
      "slidingExpiration": "Sliding expiration (resets on activity)",
      "require2Fa": "Require two-factor authentication",
      "twoFactorMethod": "2FA Method",
      "methodEmail": "Email",
      "methodAuthenticator": "Authenticator App",
      "customScopeValues": "Custom Department IDs (comma-separated)"
    },
    "rolePreview": {
      "title": "Role Preview",
      "desc": "Simulate exactly what one or more roles (combined) can see and do, using the live permission engine.",
      "moduleFilterPlaceholder": "Filter to one module (optional)",
      "run": "Run Preview",
      "hidden": "Hidden",
      "canExport": "Can export",
      "empty": "Select at least one role and run the preview to see results."
    },
    "fieldAccess": {
      "role": "Role",
      "screen": "Screen",
      "section": "Section",
      "field": "Field",
      "accessLevel": "Access Level",
      "noAccess": "No Access",
      "view": "View",
      "edit": "Edit",
      "saved": "Field access updated.",
      "note": "Configure field-level access for the selected role.",
      "auditNote": "Permissions apply immediately. All changes are recorded in the audit trail."
    },
    "parentRole": "Parent Role",
    "hierarchyLevel": "Hierarchy Level",
    "scope": "Data Scope",
    "dataScopes": {
      "label": "Data scopes",
      "all": "All Departments",
      "department": "Own Department",
      "team": "Own Team Only",
      "custom": "Custom"
    },
    "users": {
      "search": "Search by name or employee code...",
      "allRoles": "All Roles",
      "allDepartments": "All Departments",
      "count": "{count} users",
      "user": "User",
      "employeeCode": "Employee Code",
      "currentRole": "Current Role",
      "lastActive": "Last Active",
      "empty": "No matching users.",
      "changeRole": "Change Role",
      "newRole": "New Role",
      "applyRole": "Apply New Role",
      "changeNote": "Role changes apply immediately and are recorded in the audit trail.",
      "revoke": "Revoke Access",
      "revokeTitle": "Revoke user access",
      "revokeMessage": "Remove all assigned roles from this user?"
    },
    "delete": {
      "title": "Delete Role",
      "message": "Delete this role? Roles with assigned users or child roles may require reassignment first.",
      "reassignTitle": "Reassign Users and Delete Role",
      "reassignMessage": "“{role}” has {count} assigned users. Select another role before deleting it.",
      "reassignTo": "Reassign users to",
      "reassignAndDelete": "Reassign & Delete"
    },
    "messages": {
      "created": "Role created successfully.",
      "updated": "Role updated successfully.",
      "deleted": "Role deleted successfully.",
      "userRoleChanged": "User role changed successfully.",
      "accessRevoked": "User access revoked successfully.",
      "saveFailed": "Unable to save the role.",
      "deleteFailed": "Unable to delete the role.",
      "moveFailed": "Unable to move the role.",
      "assignmentFailed": "Unable to update the user assignment.",
      "permissionAssigned": "Permission assigned to the role.",
      "permissionAssignFailed": "Unable to assign the permission.",
      "permissionRevoked": "Permission revoked from the role.",
      "permissionRevokeFailed": "Unable to revoke the permission."
    },
    "preview": {
      "title": "Role Preview",
      "banner": "Preview mode — showing the configured access for “{role}”."
    },
    "permissionEditor": {
      "selectPlaceholder": "Add a permission…",
      "add": "Add",
      "deny": "Deny",
      "revoke": "Revoke",
      "inheritedFrom": "inherited from {role}",
      "noneAvailable": "Every catalog permission is already assigned to this role."
    }
  },
  "audit": {
    "title": "Audit Trail",
    "immutabilityNotice": "This log is immutable. Entries cannot be edited or deleted by any user, including System Administrators.",
    "result": "{count} result",
    "results": "{count} results",
    "exportToExcel": "Export to Excel",
    "retentionNote": "Retention period: 5 years (configurable in System Settings).",
    "exportFailed": "Audit records could not be exported.",
    "searchPlaceholder": "Search by employee, user, or field name...",
    "filterPlaceholder": "Filter by action...",
    "empty": "No audit records found.",
    "noDetails": "No details",
    "actions": {
      "updated": "Updated",
      "created": "Created",
      "deleted": "Deleted",
      "exported": "Exported",
      "imported": "Imported",
      "approved": "Approved",
      "rejected": "Rejected",
      "masked": "Masked",
      "uploaded": "Uploaded",
      "printed": "Printed"
    },
    "columns": {
      "dateTime": "Date & Time",
      "timestamp": "Timestamp",
      "action": "Action",
      "details": "Details",
      "user": "User",
      "affectedRecord": "Affected Record",
      "fieldChanged": "Field Changed",
      "scope": "Scope",
      "employee": "Employee",
      "oldValue": "Value (Old)",
      "newValue": "Value (New)",
      "change": "Change"
    },
    "scopes": {
      "self": "Self",
      "hrManager": "HR Manager",
      "system": "System"
    },
    "filterOptions": {
      "all": "All Actions",
      "updated": "Updated",
      "created": "Created",
      "deleted": "Deleted",
      "exported": "Exported",
      "imported": "Imported",
      "approved": "Approved",
      "rejected": "Rejected"
    },
    "accessNote": {
      "admin": "HR Manager and Admin users see all employee records.",
      "standard": "Standard users can see their own history (Self scope) and public employee fields only."
    },
    "filters": {
      "dateRange": "Date Range",
      "fromDate": "From Date",
      "toDate": "To Date",
      "allUsers": "All Users",
      "actionType": "Action Type",
      "searchRecord": "Search affected record..."
    },
    "export": "Export",
    "exportFormats": {
      "excel": "Excel",
      "csv": "CSV",
      "pdf": "PDF"
    },
    "actionTypes": {
      "create": "Create",
      "edit": "Edit",
      "delete": "Delete",
      "export": "Export",
      "login": "Login",
      "logout": "Logout",
      "failedLogin": "Failed Login",
      "permissionChange": "Permission Change",
      "roleAssignment": "Role Assignment",
      "fileUpload": "File Upload",
      "fileDownload": "File Download",
      "approval": "Approval",
      "rejection": "Rejection",
      "configurationChange": "Configuration Change",
      "authorizationFailure": "Authorization Failure",
      "securitySensitiveAction": "Security Sensitive Action"
    },
    "detailsModal": {
      "title": "Audit Entry Details",
      "ipAddress": "IP Address",
      "userAgent": "User Agent",
      "requestPath": "Request Path",
      "httpMethod": "HTTP Method",
      "correlationId": "Correlation ID",
      "statusCode": "Status Code",
      "rowHash": "Row Hash"
    }
  },
  "privacy": {
    "title": "Data Privacy",
    "intro": {
      "title": "Personal Data Protection Law — Egypt Law No. 151 of 2020",
      "description": "This screen covers compliance tooling for Egypt's PDPL. Settings should be reviewed periodically and whenever there are changes to organisational structure or user roles."
    },
    "tabs": {
      "roles": "Roles & Access",
      "masking": "Data Masking",
      "consent": "Consent Records",
      "retention": "Retention & Purge",
      "dsar": "DSAR"
    },
    "roles": {
      "hrManager": {
        "name": "HR Manager",
        "desc": "Full access to all data"
      },
      "deptManager": {
        "name": "Department Manager",
        "desc": "Sees non-sensitive fields only"
      },
      "finance": {
        "name": "Finance",
        "desc": "Sees compensation and SI"
      },
      "employee": {
        "name": "Employee",
        "desc": "Own record only"
      }
    },
    "maskingFields": {
      "nationalId": "National ID",
      "socialInsurance": "Social Insurance Number",
      "taxNumber": "Tax Number",
      "bankAccount": "Bank Account",
      "salary": "Salary",
      "siSalary": "SI Salary",
      "dateOfBirth": "Date of Birth"
    },
    "consentColumns": {
      "employee": "Employee",
      "consentType": "Consent Type",
      "dateGiven": "Date Given",
      "status": "Status",
      "notes": "Notes"
    },
    "consentTypes": {
      "1": "Personal Data Processing",
      "2": "Document Storage",
      "3": "Communication",
      "4": "Biometric Photo"
    },
    "consentEvents": {
      "1": "Granted",
      "2": "Withdrawn"
    },
    "consent": {
      "title": "Employee Consent Records",
      "subtitle": "Explicit consent for personal data processing under Law 151/2020",
      "legalNote": "Article 4 of PDPL No. 151/2020 requires explicit consent before processing personal data.",
      "searchPlaceholder": "Search by employee name or department...",
      "allTypes": "All consent types",
      "allEvents": "All events",
      "from": "From date",
      "to": "To date",
      "recordedBy": "Recorded By",
      "recordNew": "Record Consent",
      "recordAction": "Record",
      "withdrawAction": "Withdraw",
      "recordTitle": "Record Consent",
      "withdrawTitle": "Withdraw Consent",
      "version": "Policy Version",
      "versionPlaceholder": "e.g. v2.1, Paper form 2026-08-16",
      "text": "Consent Text / Notes",
      "textPlaceholder": "What was presented to or signed by the employee",
      "recorded": "Consent event recorded.",
      "notRecorded": "Not Recorded"
    },
    "masking": {
      "example": "Masked display example",
      "info": "Sensitive fields are masked by default according to the configured permissions and masking policy.",
      "title": "Field Masking Settings",
      "subtitle": "Configured visibility controls for sensitive employee fields",
      "field": "Field",
      "maskedExample": "Masked Example",
      "currencyExample": "•••,••• EGP",
      "requiredAccess": "Required Access",
      "unmaskedAccess": "View full sensitive data",
      "restrictedAccess": "Restricted access",
      "matrixTitle": "Field Masking by Role",
      "matrixSubtitle": "Which roles can view each sensitive field unmasked, derived from their assigned permissions",
      "matrixNote": "Every field above uses the same permission today, so columns read the same across all fields per role — this will vary once masking policies are split into distinct permissions per field.",
      "matrixFull": "Full View",
      "matrixMasked": "Masked",
      "editTitle": "Edit Masking Policy",
      "visiblePrefix": "Visible Prefix Length",
      "visibleSuffix": "Visible Suffix Length",
      "saved": "Masking policy saved."
    },
    "retention": {
      "legalNote": "Retention periods are governed by Egypt's Personal Data Protection Law No. 151/2020 and its Executive Regulations, alongside Egyptian Labour Law and GOSI requirements.",
      "anonymizationTitle": "Anonymise Terminated Employee Records",
      "anonymizationDescription": "Configured after {days} days using replacement token {token}.",
      "documents": "Documents",
      "photos": "Photos",
      "legalHolds": "Legal holds",
      "title": "Data Retention Periods",
      "subtitle": "Configured retention policy for each data category",
      "categoryDescription": "Retention and purge policy for this category",
      "gracePeriod": "{days} grace days",
      "executeNow": "Run now",
      "executeConfirm": "Run the retention policy now? This purges or archives records past their retention period and cannot be undone.",
      "executeDone": "Retention policy applied. {count} record(s) affected.",
      "addPolicy": "Add Policy",
      "editTitle": "Edit Retention Policy",
      "addTitle": "Add Retention Policy",
      "category": "Data Category",
      "purgeStrategy": "Purge Strategy",
      "saved": "Retention policy saved.",
      "editAnonymizationTitle": "Edit Anonymization Policy",
      "triggerAfterDays": "Trigger After (days since termination)",
      "replacementToken": "Replacement Token",
      "anonymizationSaved": "Anonymization policy saved."
    },
    "retentionPeriod": {
      "years": "{count} years",
      "days": "{count} days"
    },
    "consentStatuses": {
      "granted": "Granted",
      "revoked": "Revoked"
    },
    "retentionOptions": {
      "threeYears": "3 Years",
      "fiveYears": "5 Years",
      "sevenYears": "7 Years",
      "permanent": "Permanent"
    },
    "maskingToggle": {
      "enabled": "Enabled",
      "disabled": "Disabled"
    },
    "footer": "All settings apply to the HR Manager, Department Manager, Finance, and Employee roles.",
    "exportData": "Export Data",
    "saveChanges": "Save Changes",
    "consentNote": "Consent is valid until revoked or until the defined retention period expires.",
    "pdplNote": "Configure privacy controls and data-subject workflows in line with PDPL requirements.",
    "allowPermission": "Permission Key",
    "maskingType": "Masking Type",
    "retentionDays": "Retention Days",
    "graceDays": "Grace Days",
    "anonymization": {
      "executeNow": "Run anonymization now",
      "executeConfirm": "Run anonymization now? This permanently masks personal data of terminated employees past their retention period and cannot be undone.",
      "executeDone": "Anonymization applied. {count} record(s) affected."
    },
    "daysAfterTermination": "days after termination",
    "dsar": {
      "generate": "Create DSAR",
      "requested": "DSAR request created",
      "description": "Generate and download the employee data package directly.",
      "includeAttachments": "Include attachments",
      "generateDownload": "Generate & Download",
      "downloaded": "DSAR package downloaded.",
      "legalNote": "Article 22 of PDPL Law 151/2020 grants every employee the right to request a complete copy of their processed personal data. Responses must be delivered within 30 days of request.",
      "reportTitle": "Generate Data Subject Access Report",
      "reportSubtitle": "Generates a complete personal data export for a selected individual",
      "selectEmployee": "Select Employee",
      "generateReport": "Generate DSAR Report",
      "reportIncludes": "Report includes",
      "auditNote": "Every DSAR request is recorded in the audit trail.",
      "includes": {
        "core": "Core Personal Data",
        "employment": "Employment & Contract Data",
        "financial": "Financial & SI Records",
        "documents": "Uploaded Documents",
        "activity": "Login & Activity Logs",
        "statusHistory": "Status Change History",
        "consent": "Consent Record",
        "corrections": "Previous Data Correction Requests"
      },
      "employeeSearchPlaceholder": "Search employee by name..."
    },
    "maskingTypes": {
      "1": "Partial",
      "2": "Full",
      "3": "Blank"
    },
    "retentionCategories": {
      "1": "Audit Logs",
      "2": "Employee Documents",
      "3": "Correction Requests",
      "4": "Consent Records",
      "5": "Terminated Employee Data",
      "6": "DSAR Exports"
    },
    "purgeStrategies": {
      "1": "Hard Delete",
      "2": "Anonymize",
      "3": "Archive then Delete"
    }
  },
  "govForms": {
    "title": "Government Forms",
    "generateFailed": "Government form could not be generated.",
    "employeeSearch": "Search employee by name",
    "batch": "Batch",
    "auditNote": "Generated forms reflect the latest official layouts. Each generation is recorded in the audit trail.",
    "formTypes": {
      "socialInsurance": "Social Insurance Certificate",
      "taxCard": "Tax Card",
      "laborCard": "Labor Card",
      "nidExtract": "National ID Extract",
      "criminalRecord": "Criminal Record",
      "medicalFit": "Medical Fitness Certificate"
    },
    "columns": {
      "form": "Form",
      "employee": "Employee",
      "issueDate": "Issue Date",
      "expiryDate": "Expiry Date",
      "status": "Status",
      "actions": "Actions"
    },
    "statuses": {
      "valid": "Valid",
      "expiring": "Expiring Soon",
      "expired": "Expired"
    },
    "batchModal": {
      "title": "Batch Generate Forms",
      "formType": "Form Type",
      "selectForm": "Select form type",
      "employees": "Employees",
      "selectEmployees": "Select employees",
      "generate": "Generate",
      "cancel": "Cancel"
    },
    "filter": {
      "formType": "Form Type",
      "status": "Status",
      "dateRange": "Date Range"
    },
    "empty": "No government forms found.",
    "batchGenerate": "Batch Generate",
    "authorizedSignatory": "Authorized Signatory",
    "generatePdf": "Generate PDF",
    "generatedAt": "Generated At",
    "generatedBy": "Generated By",
    "recordCount": "Record Count",
    "officialNote": "The generated PDF uses the official backend template.",
    "period": "Period",
    "month": "Month",
    "year": "Year",
    "logTitle": "Generation Log",
    "logDownloadUnavailableTitle": "Historical download unavailable",
    "logDownloadUnavailableDescription": "Generation log entries do not contain a file reference for re-downloading the PDF.",
    "cards": {
      "form1": {
        "title": "SI Form 1",
        "subtitle": "New Employee Enrollment",
        "description": "Registers a new employee with the Social Insurance Authority within 30 days of their hire date."
      },
      "form6": {
        "title": "SI Form 6",
        "subtitle": "Termination",
        "description": "Required when an employee leaves. Notifies the Social Insurance Authority of the termination of coverage."
      },
      "form2": {
        "title": "SI Form 2",
        "subtitle": "Monthly SI Declaration",
        "description": "Monthly wage and contribution declaration for all enrolled employees. Supports batch generation."
      },
      "tax": {
        "title": "Income Tax Monthly Declaration",
        "subtitle": "Monthly Tax Withholding",
        "description": "Monthly tax withholding declaration for all taxable employees, submitted to the Egyptian Tax Authority."
      }
    },
    "template": {
      "approveAction": "Approve Template",
      "approveNote": "Registers this version as the approved template for this form type. Generation is blocked until at least one version is approved.",
      "previewUnavailable": "No official visual template exists for this form — it has no preview to show.",
      "version": "Version",
      "versionPlaceholder": "e.g. v1.0",
      "notes": "Notes (optional)",
      "approve": "Approve",
      "approved": "Template version approved.",
      "approveFailed": "Failed to approve the template version."
    }
  },
  "import": {
    "title": "Employee Import",
    "fields": {
      "nameAr": "Name (Arabic)",
      "nameEn": "Name (English)",
      "nationalId": "National ID",
      "dateOfBirth": "Date of Birth",
      "gender": "Gender",
      "nationality": "Nationality",
      "department": "Department",
      "jobTitle": "Job Title",
      "contractType": "Contract Type",
      "joiningDate": "Joining Date",
      "status": "Employment Status",
      "socialInsuranceNumber": "Social Insurance Number"
    },
    "steps": {
      "upload": "Upload File",
      "mapping": "Map Columns",
      "review": "Review & Confirm"
    },
    "step1": {
      "title": "Upload Excel File",
      "hint": "Upload an .xlsx file with employee data",
      "chooseFile": "Choose File",
      "dragDrop": "or drag and drop here",
      "fileInfo": "File uploaded successfully",
      "fileSize": "size"
    },
    "step2": {
      "title": "Map Columns",
      "hint": "Match your Excel columns to ATHR HR fields",
      "autoMapped": "Auto-mapped",
      "manualRequired": "Select column...",
      "required": "Required",
      "optional": "Optional",
      "preview": "Preview"
    },
    "step3": {
      "title": "Review & Confirm",
      "totalRows": "Total rows",
      "valid": "Valid",
      "errors": "Errors",
      "warnings": "Warnings",
      "columns": {
        "row": "Row",
        "name": "Name",
        "status": "Status",
        "errors": "Errors"
      }
    },
    "validation": {
      "missingRequired": "Missing required field",
      "invalidDate": "Invalid date",
      "duplicateNationalId": "Duplicate National ID"
    },
    "importSuccess": "Import completed successfully!",
    "importError": "Import failed. Please check the errors."
  },
  "corrections": {
    "title": "Correction Requests",
    "columns": {
      "employee": "Employee",
      "field": "Field",
      "currentValue": "Current Value",
      "requestedValue": "Requested Value",
      "requestDate": "Request Date",
      "status": "Status",
      "actions": "Actions",
      "requestedBy": "Requested By"
    },
    "statuses": {
      "pending": "Pending",
      "underReview": "Under Review",
      "approved": "Approved",
      "rejected": "Rejected",
      "cancelled": "Cancelled"
    },
    "modal": {
      "title": "Correction Request",
      "employee": "Employee",
      "field": "Field to Correct",
      "currentValue": "Current Value",
      "newValue": "New Value",
      "reason": "Reason for Correction",
      "submit": "Submit",
      "cancel": "Cancel"
    },
    "approve": "Approve",
    "reject": "Reject",
    "empty": "No correction requests found.",
    "filters": {
      "employeeSearch": "Search employee by name",
      "allStatuses": "All Statuses"
    },
    "review": {
      "title": "Review Correction Request",
      "notes": "Review Notes",
      "notesPlaceholder": "Add notes (optional)",
      "markUnderReview": "Mark Under Review",
      "requestClarification": "Request Clarification",
      "actionFailed": "Action could not be completed.",
      "success": "Request updated successfully."
    },
    "requiresClarification": "Clarification Requested",
    "timeline": {
      "title": "Request Timeline"
    }
  },
  "changeStatus": {
    "title": "Change Status",
    "fields": {
      "employee": "Employee",
      "currentStatus": "Current Status",
      "newStatus": "New Status",
      "effectiveDate": "Effective Date",
      "reason": "Reason (required)"
    },
    "newStatuses": {
      "active": "Active",
      "probation": "Probation",
      "onLeave": "On Leave",
      "suspended": "Suspended",
      "terminated": "Terminated",
      "resigned": "Resigned"
    },
    "reasons": {
      "resignation": "Resignation",
      "contractEnd": "Contract end",
      "retirement": "Retirement",
      "termination": "Termination by employer",
      "mutual": "Mutual agreement",
      "noShow": "No show",
      "endOfProject": "End of project",
      "health": "Health reasons",
      "relocation": "Relocation"
    },
    "placeholders": {
      "newStatus": "Select new status",
      "reason": "Select a reason",
      "date": "Select date"
    },
    "validation": {
      "newStatus": "Please select a new status",
      "reason": "Please select a reason"
    },
    "terminalWarning": "Warning: Marking this employee as Terminated or Resigned will finalize their active record.",
    "cancel": "Cancel",
    "confirm": "Confirm"
  },
  "photoModal": {
    "title": "Employee Photo",
    "tabs": {
      "preview": "Preview",
      "history": "History"
    },
    "upload": {
      "label": "Upload Photo",
      "hint": "JPG or PNG, max 5 MB",
      "button": "Choose File"
    },
    "preview": {
      "alt": "Employee photo",
      "currentLabel": "Current Photo"
    },
    "history": {
      "empty": "No photo history available.",
      "uploadedOn": "Uploaded on",
      "photoLabel": "Photo"
    },
    "crop": {
      "title": "Crop Photo",
      "apply": "Apply",
      "cancel": "Cancel"
    },
    "close": "Close",
    "save": "Save"
  },
  "exportModal": {
    "title": "Export Employee Data",
    "selectColumns": "Select Columns to Export",
    "sensitivity": {
      "label": "Data Sensitivity",
      "high": "High — includes National ID and Social Insurance data",
      "medium": "Medium — includes contract and salary details",
      "low": "Low — basic employee information only"
    },
    "dateRange": {
      "label": "Date Range Filter"
    },
    "cancel": "Cancel",
    "export": "Export"
  },
  "selfService": {
    "sidebar": {
      "profile": "My Profile",
      "digitalId": "Digital ID",
      "idCard": "Digital ID Card",
      "documents": "My Documents",
      "corrections": "Correction Requests",
      "photo": "Photo",
      "payslips": "Payslips"
    },
    "digitalId": {
      "organization": "ATHR Employee Identification",
      "downloadPdf": "Download PDF",
      "addToWallet": "Add to Wallet",
      "unsupported": "QR verification, PDF generation, and wallet integration require backend support and are currently disabled."
    },
    "idCard": {
      "title": "Digital Employee ID",
      "name": "Name",
      "nationalId": "National ID",
      "jobTitle": "Job Title",
      "department": "Department",
      "joiningDate": "Joining Date",
      "status": "Status",
      "download": "Download ID",
      "logoMark": "A",
      "brand": "ATHR",
      "brandLatin": "ATHAR HR",
      "employeeBadge": "Employee Card",
      "employeeBadgeLatin": "EMPLOYEE ID",
      "valid": "Valid",
      "presentNote": "Present this physical badge for identification. The information shown is taken from your current employee record.",
      "qrHint": "Scan QR code to verify identity",
      "downloadPdf": "Download as PDF",
      "addToWallet": "Add to Wallet"
    },
    "profile": {
      "title": "My Profile",
      "personalInfo": "Personal Information",
      "contactInfo": "Contact Information",
      "employmentDetails": "Employment Details",
      "overview": "Employee Overview",
      "requestCorrection": "Request Correction",
      "employeeCode": "Employee Code",
      "dateOfBirth": "Date of Birth",
      "nationality": "Nationality",
      "directManager": "Direct Manager",
      "socialInsurance": "Social Insurance",
      "socialInsuranceNumber": "Social Insurance Number",
      "monthly": "per month",
      "salaryNote": "For salary details, contact Human Resources. Payslips are not currently processed by this system."
    },
    "documents": {
      "title": "My Documents",
      "upload": "Upload Document",
      "requested": "Requested Documents",
      "fromHr": "Documents from HR",
      "fromHrNote": "Documents held in your official employee record are available here for secure preview and download.",
      "uploaded": "Uploaded:",
      "expires": "Expires:",
      "employeeProvided": "My Documents (Employee-Provided)",
      "employeeProvidedNote": "Employee-provided documents appear here after they are received and reviewed by Human Resources.",
      "employeeProvidedEmpty": "No employee-provided documents are currently available in your record."
    },
    "corrections": {
      "title": "My Correction Requests",
      "newRequest": "New Request",
      "statuses": {
        "pending": "Pending",
        "approved": "Approved",
        "rejected": "Rejected"
      },
      "empty": "No correction requests found.",
      "cancel": "Cancel Request",
      "cancelConfirmTitle": "Cancel Request?",
      "cancelConfirmMessage": "Are you sure you want to cancel this correction request?",
      "submitSuccess": "Correction request submitted successfully.",
      "submitFailed": "Correction request could not be submitted.",
      "cancelSuccess": "Correction request cancelled.",
      "cancelFailed": "Correction request could not be cancelled.",
      "fieldNamePlaceholder": "e.g. Phone Number, Address",
      "fieldOptions": {
        "select": "Select field…",
        "nationalId": "National ID Number",
        "dateOfBirth": "Date of Birth",
        "address": "Current Address",
        "phone": "Phone Number",
        "email": "Email Address",
        "bankAccount": "Bank Account Number",
        "other": "Other"
      },
      "otherFieldPlaceholder": "Specify the field…",
      "formEyebrow": "Data Correction",
      "reviewNote": "Human Resources reviews this request before any change is made to your employee record.",
      "history": "Submitted Requests",
      "reviewResponse": "HR Response",
      "submittedOn": "Submitted:"
    },
    "photo": {
      "canSelfUpload": "You can upload a new photo directly.",
      "requiresApproval": "Your photo is HR-managed. Submit a change request for approval.",
      "pendingRequest": "You have a pending photo change request awaiting review.",
      "uploadSuccess": "Photo uploaded successfully.",
      "uploadFailed": "Photo could not be uploaded.",
      "requestSuccess": "Photo change request submitted.",
      "requestFailed": "Photo change request could not be submitted.",
      "tooLarge": "Photo exceeds the 5MB limit.",
      "title": "Profile Photo",
      "eyebrow": "Employee Photo",
      "fallbackInitial": "E",
      "chooseFile": "Choose Photo",
      "noFileSelected": "No file selected",
      "historyTitle": "Photo History"
    },
    "notFound": "Your employee profile could not be loaded.",
    "loadFailed": "Failed to load data.",
    "payslips": {
      "title": "Payslips",
      "period": "Period",
      "gross": "Gross Salary",
      "deductions": "Deductions",
      "net": "Net Pay",
      "download": "Download",
      "empty": "No payslips available.",
      "unsupported": "Payslips are not available because the backend does not currently expose a payslip endpoint."
    },
    "logout": "Logout",
    "editProfile": "Edit Profile"
  },
  "statuses": {
    "active": "Active",
    "inactive": "Inactive",
    "probation": "Probation",
    "terminated": "Terminated",
    "onLeave": "On Leave",
    "militaryService": "Military Service",
    "pending": "Pending",
    "suspended": "Suspended",
    "resigned": "Resigned",
    "hired": "Hired",
    "confirmed": "Confirmed"
  },
  "contractTypes": {
    "openEnded": "Open-Ended",
    "fixedTerm": "Fixed-Term",
    "probation": "Probation",
    "fulltime": "Full-Time",
    "parttime": "Part-Time",
    "freelance": "Freelance",
    "outsourced": "Outsourced",
    "internship": "Internship"
  },
  "employmentTypes": {
    "fulltime": "Full-Time",
    "parttime": "Part-Time",
    "freelance": "Freelance / Independent Contractor",
    "outsourced": "Outsourced (Third-Party)"
  },
  "insuranceTypes": {
    "insured": "Insured",
    "foreigner": "Foreigner",
    "employer": "Employer",
    "exempt": "Exempt"
  },
  "exemptionStatuses": {
    "none": "None",
    "partial": "Partial",
    "full": "Full"
  },
  "salaryReasons": {
    "annualReview": "Annual Review",
    "promotion": "Promotion",
    "correction": "Correction",
    "restructuring": "Restructuring"
  },
  "militaryStatuses": {
    "completed": "Completed",
    "exempt": "Exempted",
    "deferred": "Deferred",
    "notYetDue": "Not Yet Due"
  },
  "divisions": {
    "operations": "Operations",
    "hr": "Human Resources",
    "finance": "Finance",
    "it": "Information Technology",
    "marketing": "Marketing",
    "sales": "Sales",
    "legal": "Legal"
  },
  "shiftCalendar": {
    "eyebrow": "ATTENDANCE",
    "pageTitle": "Shift Calendar",
    "subtitle": "View an employee's scheduled shifts and apply single-day overrides.",
    "selectEmployee": "Search for an employee...",
    "prevMonth": "Previous month",
    "nextMonth": "Next month",
    "summary": {
      "scheduled": "Scheduled",
      "rest": "Rest",
      "overrides": "Overrides"
    },
    "weekdays": {
      "0": "Sun",
      "1": "Mon",
      "2": "Tue",
      "3": "Wed",
      "4": "Thu",
      "5": "Fri",
      "6": "Sat"
    },
    "searchEmployee": "Search by name or employee code...",
    "loadingEmployees": "Loading...",
    "dayDetail": "Day Detail",
    "originallyFromPattern": "Originally from pattern",
    "restDay": "rest day",
    "editType": "Edit type",
    "changeShift": "Change shift",
    "markAsRest": "Mark as rest",
    "newShift": "New shift",
    "selectShift": "Select a shift",
    "reason": "Reason",
    "applyOverride": "Apply Override",
    "clearOverride": "Clear Override",
    "confirmClear": "Clear this override?",
    "confirmClearMsg": "The day will be restored to its original pattern-generated or assigned shift.",
    "overrideHistory": "Override History",
    "messages": {
      "shiftRequired": "Select the new shift.",
      "overrideApplied": "Override applied.",
      "overrideFailed": "Failed to apply the override.",
      "overrideCleared": "Override cleared.",
      "clearFailed": "Failed to clear the override."
    }
  },
  "shiftSwaps": {
    "eyebrow": "ATTENDANCE",
    "pageTitle": "Shift Swaps",
    "subtitle": "Swap two employees' shifts on a given day, or reverse a swap that was already executed.",
    "newSwap": "New Swap",
    "executeSwap": "Execute Swap",
    "columns": {
      "date": "Date",
      "employeeA": "Employee A",
      "employeeB": "Employee B",
      "reason": "Reason"
    },
    "date": "Swap date",
    "employeeA": "Employee A",
    "employeeB": "Employee B",
    "reason": "Reason",
    "effectiveShiftHelper": "Each employee's currently effective shift on this date will be used unless they don't have one.",
    "noSwaps": "No shift swaps yet.",
    "reverse": "Reverse",
    "confirmReverse": "Reverse this swap?",
    "confirmReverseMsg": "Both employees will be restored to their original shift on the swap date.",
    "conflictTitle": "Existing override in the way",
    "conflictMessage": "One or both employees already have a manual override on this date. Clear it and proceed with the swap?",
    "conflictClearAndSwap": "Clear and Swap",
    "status": {
      "executed": "Executed",
      "reversed": "Reversed"
    },
    "messages": {
      "dateRequired": "Swap date is required.",
      "bothEmployeesRequired": "Select both employees.",
      "cannotSwapWithSelf": "An employee cannot swap shifts with themselves.",
      "executed": "Shift swap executed.",
      "executeFailed": "Failed to execute the shift swap.",
      "reversed": "Shift swap reversed.",
      "reverseFailed": "Failed to reverse the shift swap."
    }
  },
  "bulkAssignment": {
    "eyebrow": "ATTENDANCE",
    "pageTitle": "Bulk-Assign Shifts",
    "subtitle": "Assign one shift to many employees at once — pick specific employees, a whole department or team, or the entire company — and review the impact before confirming.",
    "targetType": "Assign to",
    "targetEmployees": "Specific employees",
    "targetAllCompany": "Entire company",
    "employees": "Employees",
    "employeesSelected": "employee(s) selected",
    "allCompanyWarning": "This will resolve every active employee in the company as a target.",
    "conflictResolution": "If an employee already has a shift on these dates",
    "conflictSkip": "Skip them",
    "conflictResolutionHelper": "This applies to every affected employee — the preview breaks down exactly how many fall into each case before you confirm.",
    "startOver": "Start Over",
    "preview": "Preview",
    "previewTitle": "Bulk Assignment Preview",
    "confirmAssign": "Confirm Assignment",
    "resultTitle": "Assignment Result",
    "columns": {
      "employee": "Employee",
      "department": "Department",
      "currentShift": "Current Shift",
      "impact": "Impact"
    },
    "stats": {
      "total": "Total",
      "willAssign": "Will assign",
      "succeeded": "Succeeded",
      "autoClosed": "Auto-closed",
      "replaced": "Replaced",
      "skipped": "Skipped",
      "alreadyOnShift": "Already on shift",
      "hasConflicts": "Has conflicts",
      "failed": "Failed"
    },
    "messages": {
      "employeesRequired": "Select at least one employee.",
      "departmentRequired": "Select a department.",
      "teamRequired": "Select a team.",
      "shiftRequired": "Select the shift to assign.",
      "effectiveFromRequired": "Effective-from date is required.",
      "effectiveToBeforeFrom": "Effective-to date must be on or after effective-from.",
      "previewFailed": "Failed to build the assignment preview.",
      "confirmed": "Bulk assignment confirmed.",
      "confirmFailed": "Failed to confirm the bulk assignment.",
      "reopenFailed": "Failed to reopen the saved preview."
    },
    "previewToken": "Saved preview token",
    "reopenPreview": "Reopen preview"
  },
  "manualEntry": {
    "eyebrow": "ATTENDANCE",
    "title": "Manual Attendance Entry",
    "subtitle": "Record a check-in/check-out for an employee by hand, or import a batch of entries from a file.",
    "tabs": {
      "singleEntry": "Single Entry",
      "bulkImport": "Bulk Import"
    },
    "single": {
      "formTitle": "New Entry",
      "employee": "Employee",
      "changeEmployee": "Change",
      "date": "Date",
      "checkInTime": "Check-In Time",
      "checkOutTime": "Check-Out Time",
      "timeHint": "Provide at least one of check-in or check-out.",
      "reason": "Reason",
      "reasonPlaceholder": "Why is this entry being recorded manually?",
      "reasonHint": "Required — at least 5 characters.",
      "notes": "Notes",
      "notesPlaceholder": "Optional additional context",
      "save": "Save Entry",
      "checkingExisting": "Checking for an existing entry on this day…",
      "existingEntryWarning": "This employee already has an active manual entry for this date",
      "openCorrections": "Open Corrections →",
      "duplicateFlag": "This punch was flagged as a duplicate of an existing record.",
      "helperNote": "Manual entries flow through the same processing engine as device and mobile punches.",
      "recentEntries": "Recent Entries",
      "source": "Source",
      "enteredBy": "Entered By",
      "noEntries": "No manual entries yet."
    },
    "source": {
      "0": "Manual Form",
      "1": "CSV Import",
      "2": "API Bulk"
    },
    "status": {
      "0": "Active",
      "1": "Corrected",
      "2": "Cancelled"
    },
    "bulk": {
      "title": "Bulk Import",
      "description": "Upload a CSV or JSON file of attendance entries. Every row is validated before anything is saved — fix or remove invalid rows, then confirm the import.",
      "downloadTemplate": "Download Template",
      "dropzoneTitle": "Drag & drop a file here, or click to browse",
      "dropzoneSub": "CSV or JSON, up to 5 MB",
      "uploadDifferent": "Upload a different file",
      "totalRows": "Total rows",
      "validRows": "Valid",
      "invalidRows": "Invalid",
      "rowValid": "Valid",
      "rowInvalid": "Invalid",
      "errors": "Errors",
      "batchReason": "Batch Reason",
      "batchReasonPlaceholder": "Why is this batch being imported?",
      "runImport": "Import Rows",
      "cannotProceed": "This file has no valid rows to import — fix the errors above and upload again.",
      "succeeded": "Succeeded",
      "failed": "Failed",
      "duplicate": "Flagged as duplicate"
    },
    "messages": {
      "employeeRequired": "Select an employee.",
      "dateRequired": "Date is required.",
      "timeRequired": "Provide a check-in time, a check-out time, or both.",
      "checkOutBeforeCheckIn": "Check-out time must be after check-in time.",
      "reasonRequired": "Reason is required (at least 5 characters).",
      "batchReasonRequired": "Batch reason is required (at least 5 characters).",
      "saved": "Entry saved.",
      "saveFailed": "Failed to save the entry.",
      "duplicateWarning": "Note: this punch was flagged as a duplicate of an existing record.",
      "validateFailed": "Failed to validate the file.",
      "importSuccess": "Import complete — {count} row(s) saved.",
      "importFailed": "Failed to run the import.",
      "templateDownloadFailed": "Failed to download the template."
    }
  },
  "attendanceFlags": {
    "eyebrow": "ATTENDANCE",
    "title": "Flagged Days",
    "subtitle": "Days with a missing or suspicious punch, automatically flagged for review. Dismiss a flag with a reason, or fix the day directly with a manual entry.",
    "summary": {
      "totalOpen": "Open Flags",
      "high": "High Severity",
      "medium": "Medium Severity",
      "low": "Low Severity",
      "resolved7d": "Resolved (7 days)",
      "dismissed7d": "Dismissed (7 days)",
      "topEmployees": "Most Flagged Employees"
    },
    "filters": {
      "department": "Department",
      "flagType": "Flag Type",
      "severity": "Severity",
      "status": "Status",
      "openOnly": "Open only"
    },
    "flagType": {
      "noPunchesOnScheduledDay": "No punches on scheduled day",
      "missingCheckIn": "Missing check-in",
      "missingCheckOut": "Missing check-out",
      "suspiciouslyShortSpan": "Suspiciously short span"
    },
    "severity": {
      "high": "High",
      "medium": "Medium",
      "low": "Low"
    },
    "status": {
      "open": "Open",
      "resolved": "Resolved",
      "dismissed": "Dismissed",
      "autoResolved": "Auto-Resolved"
    },
    "columns": {
      "employee": "Employee",
      "date": "Date",
      "flagType": "Flag",
      "severity": "Severity",
      "department": "Department"
    },
    "fixDirectly": "Fix directly →",
    "dismiss": "Dismiss",
    "dismissTitle": "Dismiss Flag",
    "bulkDismissButton": "Dismiss Selected",
    "bulkDismissTitle": "Dismiss Selected Flags",
    "dismissReason": "Reason",
    "dismissReasonPlaceholder": "Why is this flag being dismissed?",
    "dismissReasonHint": "Required — at least 5 characters.",
    "generateButton": "Run Flag Scan",
    "generateTitle": "Run Flag Scan",
    "generateDescription": "Scan a date range for missing or suspicious punches and raise new flags. Existing open flags are not duplicated.",
    "generateFrom": "From",
    "generateTo": "To",
    "runGenerate": "Run Scan",
    "noFlags": "No flagged days match these filters.",
    "messages": {
      "reasonRequired": "Reason is required (at least 5 characters).",
      "dismissed": "Flag dismissed.",
      "bulkDismissed": "{count} flag(s) dismissed.",
      "dismissFailed": "Failed to dismiss the flag.",
      "dateRangeRequired": "Select both a from and to date.",
      "generated": "Scan complete — {count} new flag(s) raised.",
      "generateFailed": "Failed to run the flag scan."
    }
  },
  "attendanceCorrections": {
    "eyebrow": "ATTENDANCE",
    "title": "Corrections & Overrides",
    "subtitle": "Review employee correction requests, apply a direct HR override, or browse the full audit trail of every change.",
    "tabs": {
      "requests": "Correction Requests",
      "flaggedPunches": "Flagged Mobile Punches",
      "override": "HR Override",
      "audit": "Audit Trail",
      "settings": "Settings"
    },
    "columns": {
      "employee": "Employee",
      "date": "Date",
      "type": "Type",
      "original": "Original",
      "requested": "Requested",
      "evidence": "Ev.",
      "reason": "Reason",
      "oldValue": "Old Value",
      "newValue": "New Value"
    },
    "type": {
      "addCheckIn": "Add check-in",
      "addCheckOut": "Add check-out",
      "correctBothTimes": "Correct both times",
      "fullDayAbsent": "Full day absent"
    },
    "status": {
      "pending": "Pending",
      "approved": "Approved",
      "rejected": "Rejected",
      "cancelled": "Cancelled"
    },
    "review": "Review",
    "reviewTitle": "Review Correction",
    "original": "Original",
    "requested": "Requested",
    "employeeReason": "Employee's reason",
    "evidenceAttached": "Evidence attached",
    "recomputeTitle": "If approved, this day recomputes:",
    "approve": "Approve",
    "reject": "Reject",
    "rejectReason": "Rejection reason",
    "rejectReasonPlaceholder": "Explain why this correction is rejected…",
    "confirmReject": "Confirm Rejection",
    "reviewerNotesOptional": "Reviewer notes (optional)",
    "bulkApprove": "Bulk Approve",
    "noRequests": "No correction requests match these filters.",
    "override": {
      "title": "Apply Direct Override",
      "warning": "Direct overrides skip employee approval and are always recorded in the audit trail.",
      "employee": "Employee",
      "date": "Date",
      "checkInTime": "Check-In Time",
      "checkOutTime": "Check-Out Time",
      "statusOverride": "Status Override",
      "statusOverridePlaceholder": "Leave unchanged",
      "reason": "Reason",
      "reasonPlaceholder": "Why is this direct override necessary?",
      "reasonHint": "Required — at least 10 characters.",
      "internalNote": "Internal Note",
      "save": "Save Override",
      "history": "Override History",
      "noOverrides": "No HR overrides recorded yet.",
      "overriddenBy": "Overridden By"
    },
    "hrOverrideStatus": {
      "present": "Present",
      "late": "Late",
      "earlyLeave": "Early Leave",
      "absent": "Absent",
      "halfDay": "Half Day",
      "absentUnexcused": "Absent (Unexcused)",
      "absentExcused": "Absent (Excused)",
      "manualOverride": "Manual Override"
    },
    "audit": {
      "totalEntries": "Total Entries",
      "withChange": "With a Change",
      "humanInitiated": "Human-Initiated",
      "systemInitiated": "System-Initiated",
      "entryType": "Entry Type",
      "field": "Field",
      "when": "When",
      "system": "System",
      "anyChangeOnly": "Changes only",
      "export": "Export CSV",
      "verifyIntegrity": "Verify Integrity",
      "integrityClean": "Audit trail is clean — no orphaned entries.",
      "integrityDirty": "{count} orphaned entries found.",
      "entriesChecked": "entries checked",
      "noEntries": "No audit entries match these filters."
    },
    "entryType": {
      "reprocessingRun": "Reprocessing Run",
      "statusOverrideApplied": "Status Override Applied",
      "statusOverrideCleared": "Status Override Cleared",
      "correctionRequestSubmitted": "Correction Submitted",
      "correctionRequestApproved": "Correction Approved",
      "correctionRequestRejected": "Correction Rejected",
      "correctionRequestCancelled": "Correction Cancelled",
      "hrDirectOverride": "HR Direct Override",
      "hrOverrideCleared": "HR Override Cleared"
    },
    "messages": {
      "approved": "Correction approved.",
      "rejected": "Correction rejected.",
      "rejectReasonRequired": "Rejection reason is required (at least 5 characters).",
      "reviewFailed": "Failed to save the review.",
      "bulkApproved": "{count} request(s) approved.",
      "overrideTargetRequired": "Select an employee and a date.",
      "overrideNothingToChange": "Provide a check-in time, check-out time, or status override.",
      "overrideReasonRequired": "Reason is required (at least 10 characters).",
      "overrideSaved": "Override applied and recorded in the audit trail.",
      "overrideFailed": "Failed to apply the override.",
      "exportRangeRequired": "Select both a from and to date to export.",
      "exportFailed": "Failed to export the audit trail.",
      "integrityCheckFailed": "Failed to run the integrity check.",
      "requestNotFound": "Couldn't find that correction request."
    },
    "config": {
      "title": "Correction Request Settings",
      "description": "Configure how employees may submit correction requests and what evidence is required.",
      "windowDays": "Correction Window (days)",
      "windowDaysHint": "Employees can only request corrections for days within this window.",
      "requireEvidence": "Require evidence on every request",
      "allowOptionalEvidence": "Allow optional evidence when not required",
      "maxEvidenceKb": "Max evidence file size (KB)",
      "maxEvidenceFiles": "Max evidence files per request",
      "maxOpenRequests": "Max open requests per employee",
      "allowAbsentDays": "Allow correcting full-day absences",
      "allowIncompletePunch": "Allow correcting incomplete punches",
      "messages": {
        "evidenceConflict": "\"Allow optional evidence\" must stay on when evidence is required.",
        "saved": "Correction request settings saved.",
        "saveFailed": "Failed to save the settings."
      }
    },
    "flaggedPunches": {
      "pendingReview": "Pending Review",
      "totalFlagged": "Total Flagged",
      "bulkReview": "Bulk Review",
      "bulkReviewed": "{count} punch(es) reviewed.",
      "punchTime": "Punch Time",
      "direction": "Direction",
      "distance": "Distance",
      "reason": "Reason",
      "location": "Location",
      "accuracy": "GPS Accuracy",
      "device": "Device",
      "deviceModel": "Model",
      "deviceOs": "OS",
      "selfie": "Selfie Captured",
      "photoComparison": "Identity photo comparison",
      "employeePhoto": "Employee profile photo",
      "capturedSelfie": "Captured check-in selfie",
      "photoUnavailable": "Photo unavailable",
      "photoComparisonHint": "Compare the two photos visually before deciding whether to approve or reject this punch.",
      "comparePhotos": "Compare photos",
      "employeeNote": "Employee's note",
      "viewOnMap": "View on Map",
      "reviewTitle": "Review Flagged Punch",
      "noPunches": "No flagged mobile punches match these filters.",
      "approved": "Punch approved.",
      "rejected": "Punch rejected.",
      "directions": {
        "checkIn": "Check-in",
        "checkOut": "Check-out",
        "other": "Other"
      },
      "reasons": {
        "outOfRange": "Outside geofence",
        "gpsRequiredButMissing": "GPS missing",
        "accuracyTooLow": "GPS accuracy too low",
        "noGeofencesConfigured": "No geofences configured",
        "other": "Other"
      }
    }
  },
  "attendanceDashboard": {
    "eyebrow": "ATTENDANCE",
    "title": "Live Dashboard",
    "subtitle": "Who's in right now, today's exceptions, and headcount coverage across departments and sites.",
    "live": "Live",
    "liveHint": "Updates as punches arrive",
    "whoIsIn": "Who's In Now",
    "noneIn": "No employees currently checked in.",
    "exceptions": "Today's Exceptions",
    "exceptionsLate": "Late",
    "exceptionsAbsent": "Absent",
    "exceptionsCaption": "Employees whose shift has not started yet are Not Yet Arrived, not Absent.",
    "exceptionsCheckedInAt": "checked in at",
    "exceptionsShiftStartedAt": "shift started at",
    "noLate": "No late arrivals today.",
    "noAbsent": "No absences today.",
    "headcount": "Headcount by Department & Site",
    "noHeadcount": "No headcount data for these filters.",
    "drawerTitle": "Day Detail",
    "filters": {
      "allDepartments": "All Departments",
      "allSites": "All Sites",
      "allShifts": "All Shifts"
    },
    "kpi": {
      "presentNow": "Present Now",
      "lateToday": "Late Today",
      "notYetArrived": "Not Yet Arrived",
      "absentToday": "Absent Today",
      "onLeave": "On Leave",
      "leaveNote": "from Leave module"
    },
    "drawer": {
      "shift": "Shift",
      "checkIn": "Check-in",
      "checkOut": "Check-out",
      "worked": "Worked so far",
      "punches": "Punches",
      "openCorrections": "Open correction requests",
      "submitCorrection": "Submit Correction",
      "hrOverride": "HR Override",
      "onLeaveNote": "This employee is on approved leave recorded in the Leave module."
    },
    "timeline": {
      "title": "Today's Timeline",
      "caption": "Punch activity today",
      "morningTick": "Morning 09:00",
      "lunchTick": "Lunch",
      "now": "Now",
      "noPunches": "No punches recorded yet today.",
      "punchType": {
        "in": "In",
        "out": "Out",
        "lunchOut": "Lunch out",
        "lunchIn": "Lunch in"
      }
    },
    "week": {
      "title": "This Week at a Glance",
      "noAccess": "You don't have permission to view this week's report data. Ask an administrator for the Attendance Reports access."
    },
    "weekLegend": {
      "present": "Present",
      "late": "Late",
      "absent": "Absent"
    },
    "weekday": {
      "0": "Sun",
      "1": "Mon",
      "2": "Tue",
      "3": "Wed",
      "4": "Thu",
      "5": "Fri",
      "6": "Sat"
    }
  },
  "attendanceOvertime": {
    "eyebrow": "ATTENDANCE",
    "title": "Overtime Report",
    "subtitle": "Overtime hours by employee or by day across a date range — AT-44's dedicated report.",
    "scopeNote": "AT-44 — Overtime Hours Report, gated on the same reporting permission as the other Attendance reports.",
    "banner": "Hours only. Pay calculation belongs to the Payroll module.",
    "viewMode": {
      "perEmployee": "Per Employee",
      "perDay": "Per Day"
    },
    "columns": {
      "employee": "Employee",
      "department": "Department",
      "totalOt": "Total OT Hours",
      "daysWithOt": "OT Records"
    },
    "noRecords": "No overtime recorded for these filters.",
    "messages": {
      "rangeRequired": "Select both a from and to date.",
      "rangeInvalid": "The to-date must be on or after the from-date."
    }
  },
  "attendanceReports": {
    "eyebrow": "ATTENDANCE",
    "title": "Attendance Reports",
    "subtitle": "Daily timesheet, lateness and early-leave, absence, and overtime — filterable by employee, department, site, shift, and date range.",
    "export": "Export",
    "tabs": {
      "daily": "Daily Timesheet",
      "lateEarly": "Late & Early Leave",
      "absence": "Absence",
      "overtime": "Overtime",
      "dailyStatus": "Daily Status",
      "recalculation": "Recalculation"
    },
    "columns": {
      "employee": "Employee",
      "department": "Department",
      "date": "Date",
      "shift": "Shift",
      "checkIn": "In",
      "checkOut": "Out",
      "worked": "Worked",
      "overtime": "OT",
      "lateMinutes": "Late",
      "earlyMinutes": "Early Leave",
      "lateDays": "Late Days",
      "earlyDays": "Early-Leave Days"
    },
    "noRecords": "No records match the current filters.",
    "excusedColumn": "Excused (Leave)",
    "unexcusedColumn": "Unexcused",
    "subtotal": "Subtotal",
    "absenceTruncated": "Showing the first {shown} of {total} absence records — narrow the date range or filters to see everything."
  },
  "attendancePeriodLock": {
    "eyebrow": "ATTENDANCE",
    "title": "Period Lock",
    "subtitle": "Lock a date range against further attendance edits; reopening requires an audit note.",
    "banner": "When a period is closed, lock it. Locked periods cannot be changed: correction requests for their days are automatically rejected, so reports and payroll built on them stay accurate. Reopening requires a reason and is recorded in the audit trail.",
    "lockNewPeriod": "Lock New Period",
    "lockPeriod": "Lock Period",
    "startDate": "Start Date",
    "endDate": "End Date",
    "reason": "Reason (optional)",
    "reasonPlaceholder": "Why is this period being locked/reopened? (at least 10 characters if provided)",
    "reopen": "Reopen",
    "reopenTitle": "Reopen Attendance Period",
    "reopenReason": "Reopen Reason",
    "noRecords": "No period locks yet.",
    "status": {
      "all": "All",
      "locked": "Locked",
      "reopened": "Reopened"
    },
    "columns": {
      "period": "Period",
      "lockedBy": "Locked By",
      "reason": "Reason",
      "reopenInfo": "Reopen Info"
    },
    "messages": {
      "locked": "Period locked successfully.",
      "reopened": "Period reopened successfully.",
      "rangeInvalid": "End date must be on or after the start date.",
      "reasonTooShort": "Reason must be at least 10 characters."
    }
  },
  "myCorrections": {
    "eyebrow": "MY ATTENDANCE",
    "title": "Attendance Corrections",
    "subtitle": "Request a correction for a day with a missing or wrong punch.",
    "requestButton": "Request Correction",
    "change": "Change",
    "noRequests": "No correction requests yet.",
    "submittedOn": "Submitted",
    "evidenceAttached": "Evidence attached",
    "rejectionLabel": "Rejection reason",
    "cancel": "Cancel Request",
    "modalTitle": "Request Correction",
    "fldDate": "Date",
    "fldType": "What needs fixing?",
    "fldIn": "Corrected in time",
    "fldOut": "Corrected out time",
    "fldReason": "Reason",
    "reasonPlaceholder": "Explain why you need this correction…",
    "reasonHint": "Required — at least 10 characters.",
    "fldEvidence": "Evidence (optional)",
    "evidenceHelper": "A photo, PDF, or screenshot supporting your request, if you have one.",
    "evidenceUpload": "Upload file",
    "evidenceRemove": "Remove",
    "cancelBtn": "Cancel",
    "submit": "Submit",
    "cancelModalTitle": "Cancel Correction Request",
    "cancelReason": "Reason",
    "confirmCancel": "Confirm Cancellation",
    "messages": {
      "dateRequired": "Date is required.",
      "reasonRequired": "Reason is required (at least 10 characters).",
      "submitted": "Correction request submitted. You'll be notified when it's reviewed.",
      "submitFailed": "Failed to submit the correction request.",
      "cancelReasonRequired": "A reason is required to cancel this request.",
      "cancelled": "Request cancelled.",
      "cancelFailed": "Failed to cancel the request."
    }
  },
  "devices": {
    "eyebrow": "ATTENDANCE",
    "pageTitle": "Devices",
    "subtitle": "Register the ID and biometric machines employees check in on.",
    "registerDevice": "Register Device",
    "editDevice": "Edit Device",
    "totalDevices": "Total Devices",
    "active": "Active",
    "inactive": "Inactive",
    "columns": {
      "name": "Device Name",
      "type": "Type",
      "connection": "Connection",
      "serial": "Serial No.",
      "site": "Site"
    },
    "activate": "Activate",
    "deactivate": "Deactivate",
    "testConnection": "Test Connection",
    "testConnectionNow": "Test the connection right after registering",
    "deviceType": "Device Type",
    "vendor": "Vendor",
    "connectionMethod": "Connection Method",
    "ipAddress": "IP Address",
    "port": "Port",
    "modelName": "Model",
    "serialNumber": "Serial Number",
    "siteNameEn": "Site (English)",
    "siteNameAr": "Site (Arabic)",
    "locationLabel": "Location Label",
    "nameEn": "Name (English)",
    "nameAr": "Name (Arabic)",
    "vendorNeutralHelper": "The interface is vendor-neutral — any of the listed vendors can be connected the same way.",
    "noDevices": "No devices connected",
    "noDevicesBody": "Employees currently check in by mobile or manual entry. You can connect ID and biometric machines at any time.",
    "confirmDelete": "Delete device?",
    "confirmDeleteMsg": "This device will be permanently removed. This cannot be undone.",
    "quarantinedPunches": "Quarantined Punches",
    "mapEmployees": "Map Employees",
    "tabMappings": "Mappings",
    "tabQuarantine": "Quarantine",
    "enrollmentId": "Enrollment ID",
    "addMapping": "Add",
    "mappingNote": "One employee can be mapped on multiple devices.",
    "noMappings": "No mappings yet.",
    "mapNow": "Map now",
    "confirm": "Confirm",
    "quarantineNote": "Quarantined punches are never discarded; once mapped, they flow into processing.",
    "noQuarantine": "No quarantined punches for this device.",
    "quarantineDrawerTitle": "Quarantined Punches — All Devices",
    "quarantineEmptyTitle": "No quarantined punches.",
    "quarantineEmptyBody": "Every punch is mapped to an employee.",
    "pullLogs": "Pull Logs",
    "pullLogsTitle": "Pull Logs",
    "dateRangeFrom": "From",
    "dateRangeTo": "To",
    "lastSync": "Last sync",
    "pullLogsNote": "Re-sync fills gaps without creating duplicates.",
    "pullResult": {
      "new": "new",
      "duplicate": "duplicate",
      "quarantined": "quarantined",
      "failed": "failed"
    },
    "viewAllDevices": "All Devices",
    "viewHealth": "Health",
    "onlineStatus": {
      "online": "Online",
      "offline": "Offline"
    },
    "activeAlerts": "Active Alerts",
    "activeAlertsTitle": "Active Device Alerts",
    "noActiveAlerts": "No active alerts.",
    "noSite": "No site",
    "acknowledge": "Acknowledge",
    "acknowledgeNote": "Note (optional)",
    "runHealthCheck": "Run Health Check",
    "alertSettings": "Alert Settings",
    "healthConfig": {
      "silenceThreshold": "Silence Threshold",
      "silenceThresholdHint": "How long a device can go quiet before it's flagged offline (5–1440 minutes).",
      "alertEnabled": "Alerts enabled",
      "repeatInterval": "Repeat Interval",
      "repeatIntervalHint": "Minimum time between repeat alerts for the same device (at least 30 minutes)."
    },
    "messages": {
      "namesRequired": "Both Arabic and English names are required (at least 2 characters).",
      "deviceTypeRequired": "Select the device type.",
      "vendorRequired": "Select the vendor.",
      "connectionMethodRequired": "Select the connection method.",
      "ipAddressRequired": "IP address is required for this connection method.",
      "registered": "Device registered.",
      "updated": "Device updated.",
      "saveFailed": "Failed to save the device.",
      "deleted": "Device deleted.",
      "deleteFailed": "Failed to delete the device.",
      "activated": "Device activated.",
      "deactivated": "Device deactivated.",
      "testPassed": "Connection test passed ({ms} ms).",
      "testFailed": "Connection test failed.",
      "mappingFieldsRequired": "Pick an employee and enter an enrollment ID.",
      "mappingAdded": "Mapping added.",
      "mappingAddFailed": "Failed to add the mapping.",
      "quarantineMapped": "Quarantined punch mapped to the employee.",
      "quarantineMapFailed": "Failed to map the quarantined punch.",
      "pullLogsFromRequired": "A start date is required.",
      "pullLogsRangeInvalid": "The end date must be on or after the start date.",
      "pullLogsCompleted": "{count} records retrieved.",
      "pullLogsFailed": "Failed to pull logs from the device.",
      "healthCheckRan": "Health check complete — {evaluated} devices evaluated, {newAlerts} new alert(s).",
      "healthCheckFailed": "Failed to run the health check.",
      "alertAcknowledged": "Alert acknowledged.",
      "alertAcknowledgeFailed": "Failed to acknowledge the alert.",
      "healthConfigThresholdInvalid": "Silence threshold must be between 5 and 1440 minutes.",
      "healthConfigRepeatInvalid": "Repeat interval must be at least 30 minutes.",
      "healthConfigSaved": "Alert settings saved.",
      "healthConfigSaveFailed": "Failed to save the alert settings."
    }
  },
  "geofence": {
    "eyebrow": "ATTENDANCE",
    "pageTitle": "Site Geofence",
    "subtitle": "Draw a boundary around each site and decide what happens when a mobile check-in falls outside it.",
    "enforcementTitle": "Enforcement Mode",
    "enforcementSub": "Controls how mobile check-ins are handled when an employee is outside their assigned site boundary.",
    "modes": {
      "0": {
        "title": "Record only",
        "desc": "Mobile check-ins are accepted anywhere, location is stored."
      },
      "1": {
        "title": "Flag if outside",
        "desc": "Check-ins outside the site geofence are accepted but marked out-of-boundary for review."
      },
      "2": {
        "title": "Block if outside",
        "desc": "Check-ins outside the geofence are rejected."
      }
    },
    "blockPreviewLabel": "Employee-facing message:",
    "blockPreviewMsg": "You are outside your site boundary. Please check in at your site.",
    "showAdvanced": "Show advanced settings",
    "hideAdvanced": "Hide advanced settings",
    "requireGps": "Require GPS on mobile check-in",
    "maxGpsAccuracy": "Max GPS accuracy (meters)",
    "graceRadius": "Grace radius beyond the boundary (meters)",
    "exemptOnLeave": "Exempt employees currently on leave",
    "sitesTitle": "Sites",
    "addSite": "Add Site",
    "editSite": "Edit Site",
    "noSites": "No sites configured yet.",
    "viewOnMap": "View on map",
    "footerNote": "Geofence changes take effect immediately and are recorded in the audit trail.",
    "nameEn": "Site name (English)",
    "nameAr": "Site name (Arabic)",
    "location": "Location",
    "locationHelp": "Search an address, click anywhere on the map, or drag the pin.",
    "searchPlaceholder": "Search an address…",
    "coordinates": "Coordinates",
    "noLocationSet": "No location set yet — click the map or use your current location.",
    "useMyLocation": "Use my current location",
    "radius": "Radius",
    "meters": "meters",
    "enforceRadius": "Enforce this radius",
    "confirmDeactivate": "Remove this site?",
    "confirmDeactivateMsg": "This action cannot be undone.",
    "messages": {
      "namesRequired": "Both Arabic and English names are required (at least 2 characters).",
      "coordinatesRequired": "Click the map (or use your current location) to set the site's location.",
      "latitudeOutOfRange": "Latitude must be between -90 and 90.",
      "longitudeOutOfRange": "Longitude must be between -180 and 180.",
      "radiusOutOfRange": "Radius must be between 10 and 50,000 meters.",
      "created": "Site created.",
      "updated": "Site updated.",
      "saveFailed": "Failed to save the site.",
      "deactivated": "Site removed.",
      "deactivateFailed": "Failed to remove the site.",
      "geolocationUnsupported": "Your browser doesn't support geolocation.",
      "geolocationFailed": "Couldn't get your current location.",
      "enforcementSaved": "Enforcement settings saved.",
      "enforcementSaveFailed": "Failed to save enforcement settings."
    }
  },
  "groupRotation": {
    "eyebrow": "ATTENDANCE",
    "pageTitle": "Assign Rotation to Group",
    "subtitle": "Assign a rotation pattern to every employee in a department or team at once.",
    "pattern": "Rotation pattern",
    "selectPattern": "Select a pattern",
    "groupType": "Group type",
    "assignToGroup": "Assign to Group",
    "summaryTitle": "Assignment summary",
    "employeesAffected": "Employees affected",
    "shiftsGenerated": "Shifts generated",
    "restDaysSkipped": "Rest days skipped",
    "failed": "Failed",
    "shifts": "shifts",
    "anchor": "anchor",
    "conflictMessage": "One or more group members already have a shift assigned that overlaps these dates. Auto-close the existing assignments the day before this one starts, or replace them entirely?",
    "messages": {
      "patternRequired": "Select a rotation pattern.",
      "targetRequired": "Select the department or team to assign this pattern to.",
      "effectiveFromRequired": "Effective-from date is required.",
      "effectiveToBeforeFrom": "Effective-to date must be on or after effective-from.",
      "assigned": "Rotation assigned to the group.",
      "assignFailed": "Failed to assign the rotation to the group."
    }
  },
  "rotationPatterns": {
    "eyebrow": "ATTENDANCE",
    "pageTitle": "Rotation Patterns",
    "subtitle": "Build a repeating cycle of shifts and rest days that can be assigned to a group.",
    "addPattern": "Add Pattern",
    "editPattern": "Edit Pattern",
    "columns": {
      "name": "Pattern Name",
      "cycle": "Cycle Length",
      "workRest": "Work / Rest",
      "assignments": "Active Assignments"
    },
    "work": "work",
    "rest": "rest",
    "days": "days",
    "noPatterns": "No rotation patterns yet.",
    "preview": "Preview cycle",
    "slots": "Cycle Slots",
    "selectShift": "Select a shift",
    "cycleLength": "Cycle length",
    "restDay": "Rest day",
    "moveUp": "Move up",
    "moveDown": "Move down",
    "addWorkDay": "Add work day",
    "addRestDay": "Add rest day",
    "applyToGroup": "Apply to Group",
    "confirmDelete": "Delete pattern?",
    "confirmDeleteMsg": "This rotation pattern will be permanently removed. This cannot be undone.",
    "messages": {
      "namesRequired": "Both Arabic and English names are required.",
      "minTwoSlots": "A pattern needs at least 2 slots.",
      "needWorkingSlot": "A pattern needs at least one working day — it can't be all rest days.",
      "slotMissingShift": "Every working slot needs a shift selected.",
      "created": "Pattern created.",
      "updated": "Pattern updated.",
      "saveFailed": "Failed to save the pattern.",
      "deleted": "Pattern deleted.",
      "deleteFailed": "Failed to delete the pattern.",
      "activated": "Pattern activated.",
      "deactivated": "Pattern deactivated."
    }
  },
  "shiftAssignments": {
    "eyebrow": "ATTENDANCE",
    "pageTitle": "Shift Assignments",
    "subtitle": "Assign shifts to employees, departments or teams with effective dates.",
    "assignShift": "Assign Shift",
    "filterShift": "Filter by shift",
    "filterDepartment": "Filter by department",
    "columns": {
      "shift": "Shift",
      "target": "Assigned To",
      "effectiveFrom": "Effective From",
      "effectiveTo": "Effective To"
    },
    "openEnded": "Open-ended",
    "noAssignments": "No shift assignments yet.",
    "shift": "Shift",
    "selectShift": "Select a shift",
    "selectEmployee": "Search by name or employee code...",
    "targetType": "Assign to",
    "targetEmployee": "Employee",
    "targetDepartment": "Department",
    "targetTeam": "Team",
    "department": "Department",
    "team": "Team",
    "effectiveFrom": "Effective from",
    "effectiveTo": "Effective to",
    "effectiveToHelper": "Leave effective-to blank for an open-ended assignment.",
    "notes": "Notes",
    "status": {
      "active": "Active",
      "upcoming": "Upcoming",
      "expired": "Expired",
      "inactive": "Inactive"
    },
    "confirmEnd": "End this assignment?",
    "confirmEndMsg": "The assignment will end as of today. This cannot be undone.",
    "endNow": "End assignment",
    "conflictTitle": "Overlapping assignment",
    "conflictMessage": "This employee already has a shift assigned that overlaps these dates. Auto-close the existing assignment the day before this one starts, or replace it entirely?",
    "conflictAutoClose": "Auto-close existing",
    "conflictReplace": "Replace existing",
    "messages": {
      "shiftRequired": "Select a shift.",
      "targetRequired": "Select who this shift is being assigned to.",
      "effectiveFromRequired": "Effective-from date is required.",
      "effectiveToBeforeFrom": "Effective-to date must be on or after effective-from.",
      "assigned": "Shift assigned.",
      "assignFailed": "Failed to assign the shift.",
      "ended": "Assignment ended.",
      "endFailed": "Failed to end the assignment."
    }
  },
  "attendanceShifts": {
    "eyebrow": "ATTENDANCE",
    "pageTitle": "Shifts",
    "subtitle": "Define work shifts with their hours so attendance can be measured against a schedule.",
    "addShift": "Add Shift",
    "editShift": "Edit Shift",
    "showInactive": "Show inactive shifts",
    "columns": {
      "name": "Shift Name",
      "times": "Times",
      "totalHours": "Total Hours",
      "break": "Break"
    },
    "noBreak": "No break",
    "breakMixed": "paid + unpaid",
    "breakUnpaid": "unpaid",
    "crossesMidnight": "crosses midnight",
    "crossesMidnightNote": "Crosses midnight — end time is on the next day",
    "totalHours": "Total hours",
    "nameAr": "Name (Arabic)",
    "nameEn": "Name (English)",
    "shiftType": "Shift type",
    "fixedType": "Fixed times",
    "flexibleType": "Flexible (total hours only)",
    "startTime": "Start time",
    "endTime": "End time",
    "requiredHoursPerDay": "Required hours per day",
    "flexibleHelper": "On time as long as total hours are met — no late or early logic.",
    "shortfallHalfDay": "Shortfall → half-day",
    "shortfallAbsent": "Shortfall → absent",
    "shortfallHelper": "A shortfall below the shortfall-absent threshold is treated as absent; below the half-day threshold (but above absent) as half-day.",
    "activeLabel": "Active",
    "toggleStatus": "Activate/Deactivate",
    "sections": {
      "grace": "Grace Periods",
      "breaks": "Break Rules",
      "rounding": "Punch Rounding",
      "thresholds": "Thresholds",
      "overtime": "Overtime"
    },
    "overtimeEligible": "Overtime eligible",
    "overtimeBuffer": "Minutes beyond shift end before overtime",
    "overtimeHelper": "Overtime is recorded as hours only — no pay rate is applied in this module.",
    "maxOvertimePerDay": "Max overtime / day",
    "maxOvertimePerWeek": "Max overtime / week",
    "maxOvertimePerPeriod": "Max overtime / period",
    "overtimeCapOrderNote": "Daily cap must not exceed the weekly cap, which must not exceed the period cap.",
    "overtimeCountsAsCompTime": "Overtime counts as comp time",
    "overtimePayNote": "The pre-approval requirement toggle is a company-wide setting — configure it per shift from Policy Hierarchy.",
    "companyDefault": "Company default",
    "thresholdsHelper": "Leave any field blank to fall through to the company default.",
    "thresholdOrderNote": "Lateness threshold must be less than half-day, which must be less than absent.",
    "latenessThreshold": "Minutes late → flagged late",
    "halfDayThreshold": "Minutes late → half-day",
    "absentThreshold": "Minutes late → absent",
    "maxLatenessOccurrences": "Max lateness occurrences / month",
    "earlyLeaveHalfDay": "Early leave → half-day",
    "earlyLeaveAbsent": "Early leave → absent",
    "requiredWorkingMinutes": "Required working minutes / day",
    "roundingDirection": "Rounding direction",
    "roundingInterval": "Rounding interval",
    "roundingAppliesTo": "Applies to",
    "roundingHelper": "Raw punches are always kept for audit — rounding only affects computed times.",
    "rounding": {
      "inherit": "Inherit — Company default",
      "none": "None",
      "nearest": "Nearest",
      "up": "Up",
      "down": "Down",
      "both": "Both",
      "checkIn": "Check-in only",
      "checkOut": "Check-out only"
    },
    "overtimeEligibility": {
      "eligible": "Eligible",
      "notEligible": "Not eligible"
    },
    "lateInGrace": "Late-in grace",
    "earlyOutGrace": "Early-out grace",
    "earlyDepartureGrace": "Early departure grace",
    "graceHelperInOut": "Arrivals or departures within this window still count as on time.",
    "graceHelperEarlyDeparture": "Leaving before the shift ends, within this window, isn't flagged as an early leave.",
    "breaksHelper": "Add one or more breaks for this shift. Leave empty for a shift with no break.",
    "breaksAfterCreateNote": "Save the shift first, then edit it again to add break rules.",
    "breakOffset": "Starts after",
    "breakDuration": "Duration",
    "breakPaid": "Paid",
    "breakRequiresPunchOut": "Requires punch-out",
    "noBreaksConfigured": "No breaks configured — this shift has no break.",
    "addBreak": "Add break",
    "noShifts": "No shifts yet.",
    "confirmDelete": "Delete shift?",
    "confirmDeleteMsg": "This shift will be permanently removed. This cannot be undone.",
    "deactivateTooltip": "Shift is assigned to employees and cannot be deleted. Deactivate instead.",
    "units": {
      "min": "min",
      "hr": "hr",
      "hrs": "hrs",
      "days": "days"
    },
    "messages": {
      "loadFailed": "Failed to load shifts.",
      "namesRequired": "Both Arabic and English names are required.",
      "timesRequired": "Start and end time are required.",
      "created": "Shift created.",
      "updated": "Shift updated.",
      "saveFailed": "Failed to save shift.",
      "deleted": "Shift deleted.",
      "deleteFailed": "Failed to delete shift.",
      "activated": "Shift activated.",
      "deactivated": "Shift deactivated.",
      "breakRulesSaveFailed": "Shift saved, but break rules failed to save.",
      "thresholdOrderInvalid": "Lateness must be less than half-day, which must be less than absent (and early-leave half-day must be less than early-leave absent).",
      "overtimeOrderInvalid": "Daily overtime cap must not exceed the weekly cap, which must not exceed the period cap.",
      "flexibleHoursRequired": "Required hours per day must be between 1 and 23 hours for a flexible shift.",
      "shortfallOrderInvalid": "The shortfall-absent threshold must be less than the shortfall-half-day threshold."
    }
  },
  "attendancePolicy": {
    "eyebrow": "ATTENDANCE",
    "pageTitle": "Policy Hierarchy",
    "subtitle": "Configure grace periods, breaks, rounding, thresholds and overtime at company, shift, department or employee level.",
    "previewTitle": "Effective Policy Preview",
    "previewEmpty": "Select an employee to preview their effective policy.",
    "selectEmployee": "Select employee",
    "editingLabel": "Editing",
    "setValue": "Set value",
    "clearInherit": "Clear (inherit)",
    "change": "Change",
    "on": "On",
    "off": "Off",
    "footer": "Changes at any level take effect immediately and are recorded in the audit trail.",
    "overrides": {
      "title": "Existing Overrides",
      "empty": "No shift, department, or employee overrides yet — everything is on the company default.",
      "level": "Level",
      "target": "Applies to",
      "updatedBy": "Updated by",
      "updatedAt": "Updated at"
    },
    "auditLog": {
      "title": "Audit Log",
      "hint": "Every change to the currently-selected scope, field by field.",
      "empty": "No changes recorded yet for this scope.",
      "field": "Field",
      "oldValue": "Old value",
      "newValue": "New value"
    },
    "scopes": {
      "company": "Company Default",
      "shift": "Shift",
      "department": "Department",
      "employee": "Employee"
    },
    "levels": {
      "company": "Company",
      "shift": "Shift",
      "department": "Department",
      "employee": "Employee"
    },
    "sections": {
      "grace": "Grace Periods",
      "break": "Break",
      "rounding": "Punch Rounding",
      "thresholds": "Thresholds",
      "overtime": "Overtime"
    },
    "fields": {
      "checkInGraceMinutes": "Late-in grace",
      "checkOutGraceMinutes": "Early-out grace",
      "earlyDepartureGraceMinutes": "Early departure grace",
      "maxBreakMinutesPerDay": "Max break per day",
      "breakDeductionThresholdMinutes": "Break deduction threshold",
      "breakIsPaid": "Break is paid",
      "roundingIntervalMinutes": "Rounding interval",
      "roundingDirection": "Rounding direction",
      "roundingAppliesTo": "Rounding applies to",
      "latenessThresholdMinutes": "Minutes late → lateness flagged",
      "halfDayLatenessThresholdMinutes": "Minutes late → half-day",
      "absenceThresholdMinutes": "Minutes late → absent",
      "maxLatenessOccurrencesPerMonth": "Max lateness occurrences / month",
      "earlyLeaveHalfDayThresholdMinutes": "Early leave → half-day",
      "earlyLeaveAbsenceThresholdMinutes": "Early leave → absent",
      "requiredWorkingMinutesPerDay": "Required working minutes / day",
      "shortfallHalfDayMinutes": "Shortfall → half-day",
      "shortfallAbsentMinutes": "Shortfall → absent",
      "overtimeEligible": "Overtime eligible",
      "overtimeStartsAfterMinutes": "Minutes beyond shift before overtime",
      "maxOvertimeMinutesPerDay": "Max overtime / day",
      "maxOvertimeMinutesPerWeek": "Max overtime / week",
      "maxOvertimeMinutesPerPeriod": "Max overtime / period",
      "overtimeCountsAsCompTime": "Overtime counts as comp time",
      "overtimeRequiresApproval": "Overtime requires pre-approval"
    },
    "rounding": {
      "none": "None",
      "min5": "5 min",
      "min10": "10 min",
      "min15": "15 min",
      "nearest": "Nearest",
      "up": "Up",
      "down": "Down",
      "both": "Both",
      "checkIn": "Check-in only",
      "checkOut": "Check-out only"
    },
    "units": {
      "min": "min",
      "occurrences": "times"
    },
    "preview": {
      "lateGrace": "Late grace",
      "earlyGrace": "Early grace",
      "brk": "Break",
      "rounding": "Rounding",
      "lateness": "Lateness thr.",
      "absentThr": "Absent thr.",
      "overtime": "Overtime thr."
    },
    "messages": {
      "loadFailed": "Failed to load attendance policy data.",
      "saved": "Policy saved.",
      "saveFailed": "Failed to save policy."
    }
  },
  "checkIn": {
    "eyebrow": "ATTENDANCE",
    "title": "Check-In Configuration",
    "subtitle": "Configure which check-in methods are allowed company-wide and manage per-employee or group overrides.",
    "tabs": {
      "companyConfig": "Company Settings",
      "overrides": "Overrides",
      "effectiveMethods": "Effective Methods",
      "auditLog": "Audit Log"
    },
    "companyConfig": {
      "allowedMethods": "Allowed Check-In Methods",
      "methodsDescription": "Select the check-in methods that are generally permitted across the company.",
      "methodDescriptions": {
        "biometric": "Fingerprint or biometric terminals at site entrances",
        "idDevice": "ID card readers at site entrances",
        "mobile": "Employee mobile app with GPS location verification",
        "manual": "HR-entered punches via the admin console"
      },
      "unauthorizedAction": "Unauthorized Punch Action",
      "unauthorizedDescription": "Choose what happens when an employee attempts a check-in using a method not allowed for them.",
      "lastUpdated": "Last updated"
    },
    "selfieConfig": {
      "title": "Mobile Selfie Capture",
      "description": "Control whether employees are asked for a selfie as part of a mobile check-in punch.",
      "mobileNotAllowedHint": "Mobile Check-in isn't one of the allowed methods above, so this has no effect yet.",
      "enabled": "Enable selfie capture",
      "enabledHint": "Employees are prompted to take a selfie during mobile check-in.",
      "required": "Require selfie",
      "requiredHint": "The punch is blocked until a selfie is captured (only available once enabled).",
      "requireOnCheckOutToo": "Require on check-out too",
      "requireOnCheckOutTooHint": "By default the selfie is only requested on check-in.",
      "allowWebp": "Allow WebP format",
      "allowWebpHint": "In addition to JPEG/PNG.",
      "maxFileSizeKb": "Max file size"
    },
    "overrides": {
      "addOverride": "Add Override",
      "editOverride": "Edit Override",
      "targetType": "Target Type",
      "targetName": "Target Name",
      "targetEmployee": "Employee",
      "targetDepartment": "Department",
      "targetJobGrade": "Job Grade",
      "targetTeam": "Team",
      "allowedMethods": "Allowed Methods",
      "notes": "Notes",
      "includeInactive": "Include inactive",
      "noOverrides": "No overrides configured",
      "noOverridesDesc": "Add overrides to restrict or expand allowed methods for specific employees or groups.",
      "confirmDelete": "Delete Override?",
      "confirmDeleteMsg": "This action cannot be undone. The override will be permanently removed.",
      "toggleStatus": "Toggle status",
      "searchEmployee": "Search Employee",
      "selectedEmployee": "Selected employee",
      "targetId": "Target ID"
    },
    "effectiveMethods": {
      "searchTitle": "Look Up Employee Effective Methods",
      "searchDescription": "Search for an employee to see their resolved check-in methods.",
      "searchPlaceholder": "Search by employee name...",
      "changeEmployee": "Change Employee",
      "employeeName": "Employee Name",
      "resolutionSource": "Resolution Source",
      "allowedMethods": "Allowed Methods",
      "unauthorizedAction": "Unauthorized Action",
      "overrideSource": "Override Source"
    },
    "auditLog": {
      "entityType": "Entity Type",
      "action": "Action",
      "field": "Field",
      "oldValue": "Old Value",
      "newValue": "New Value",
      "changedBy": "Changed By",
      "changedAt": "Changed At",
      "noEntries": "No audit log entries found."
    },
    "messages": {
      "loadFailed": "Failed to load check-in configuration.",
      "saveFailed": "Failed to save check-in configuration.",
      "configSaved": "Check-in configuration saved successfully.",
      "overrideSaved": "Override updated successfully.",
      "overrideCreated": "Override created successfully.",
      "overrideDeleted": "Override deleted successfully.",
      "overrideActivated": "Override activated successfully.",
      "overrideDeactivated": "Override deactivated successfully.",
      "deleteFailed": "Failed to delete override.",
      "atLeastOneMethod": "At least one check-in method must be selected.",
      "selectTarget": "Please select a target."
    }
  },
  "error": {
    "unexpected": "An unexpected error occurred.",
    "noConnection": "Unable to reach the server. Please check your connection.",
    "forbidden": "You do not have permission to perform this action.",
    "notFound": "The requested resource was not found.",
    "serverError": "A server error occurred. Please try again later.",
    "loadEmployees": "Failed to load employees.",
    "loadEmployee": "Failed to load employee.",
    "loadDepartments": "Failed to load departments.",
    "createDepartmentFailed": "Failed to create department.",
    "updateDepartmentFailed": "Failed to update department.",
    "deleteDepartmentFailed": "Failed to delete department.",
    "loadJobTitles": "Failed to load job titles.",
    "createJobTitleFailed": "Failed to create job title.",
    "updateJobTitleFailed": "Failed to update job title.",
    "deleteJobTitleFailed": "Failed to delete job title.",
    "loadTeams": "Failed to load teams.",
    "createTeamFailed": "Failed to create team.",
    "updateTeamFailed": "Failed to update team.",
    "deleteTeamFailed": "Failed to delete team.",
    "loadNationalities": "Failed to load nationalities.",
    "createNationalityFailed": "Failed to create nationality.",
    "updateNationalityFailed": "Failed to update nationality.",
    "deleteNationalityFailed": "Failed to delete nationality.",
    "loadLookups": "Failed to load lookup data.",
    "exportFailed": "Failed to export employees.",
    "importFailed": "Failed to import employees.",
    "createEmployeeFailed": "Failed to create employee.",
    "updateEmployeeFailed": "Failed to update employee."
  },
  "userMgmt": {
    "title": "User Management",
    "subtitle": "Manage system users, assign roles, and configure individual permissions",
    "statTotal": "Total Users",
    "statActive": "Active Users",
    "statAdmins": "Administrators",
    "statRoles": "Roles",
    "user": "User",
    "department": "Department",
    "roles": "Roles",
    "lastActive": "Last Active",
    "allRoles": "All Roles",
    "noRole": "No role assigned",
    "neverActive": "Never",
    "noUsers": "No users found",
    "managePerms": "Manage Permissions",
    "resetPassword": "Reset Password",
    "resetPasswordConfirm": "Are you sure you want to reset this user's password?",
    "passwordReset": "Password reset email sent",
    "tabRoles": "Roles",
    "tabPerms": "Permissions",
    "assignedRoles": "Assigned Roles",
    "addRole": "Add Role",
    "noRoles": "No roles available to assign",
    "assign": "Assign",
    "removeRole": "Remove role",
    "roleAssigned": "Role assigned successfully",
    "roleRemoved": "Role removed",
    "permsNote": "Individual permissions override role-based permissions. Use with caution.",
    "permGranted": "Permission granted",
    "permRevoked": "Permission revoked"
  },
  "employeePortal": {
    "home": "Home",
    "submitRequest": "Submit Request",
    "myRequests": "My Requests",
    "myBalance": "My Balance",
    "teamCalendar": "Team Calendar",
    "myCorrections": "Attendance Corrections",
    "calendarPrivacyNotice": "Only approved leave within your permitted team visibility is shown.",
    "today": "Today",
    "calendarEntries": "approved leaves",
    "leaveLegend": "Leave types",
    "calendarLoading": "Loading team calendar...",
    "calendarLoadError": "We couldn't load the team calendar.",
    "retry": "Try again",
    "noTeamLeaves": "No approved team leave is scheduled this month.",
    "more": "more",
    "requestLeave": "Request Leave",
    "flaggedDaysBanner": "You have {count} flagged attendance day(s) — tap to review your correction requests.",
    "annualBalance": "Annual Leave Balance",
    "atAGlance": "At a glance",
    "pendingRequests": "Pending requests",
    "awaitingReview": "awaiting review",
    "nextLeave": "Next approved leave",
    "teamOff": "Team off this week",
    "recentActivity": "My recent activity",
    "allRequests": "All requests",
    "requestCount": "requests",
    "daysOf": "of {total} days remaining",
    "used": "used",
    "remaining": "remaining",
    "lowBalance": "LOW",
    "noUpcomingLeave": "No upcoming leave",
    "noTeamOff": "No one on leave this week",
    "selectType": "Select leave type...",
    "accrued": "Accrued",
    "usedDays": "Used",
    "pendingDays": "Pending",
    "carriedOver": "Carried",
    "remainingDays": "Remaining",
    "workingDays": "working days",
    "exclWeekends": "(excl. weekends & public holidays)",
    "exceedsBalance": "Requested days exceed your available balance. The request will be flagged per the negative balance policy.",
    "reasonNotes": "Reason / Notes",
    "attachment": "Attachment (optional)",
    "submitBtn": "Submit Request",
    "submitSuccess": "Request submitted successfully. Track its status under My Requests.",
    "submitError": "Error submitting leave request.",
    "optional": "Optional",
    "attachmentUnavailable": "File attachments are not available for this request.",
    "attachmentHint": "PDF, JPG or PNG",
    "uploading": "Uploading…",
    "attachmentUploadError": "Couldn't upload the attachment. Try again.",
    "remove": "Remove",
    "balancesNote": "Balances are as of today and update automatically when requests are approved.",
    "noBalances": "No leave balance data is available yet.",
    "daysEntitlement": "days entitlement",
    "availableOnRequest": "Available on Request",
    "noEntitlement": "No entitlement",
    "cancelConfirmTitle": "Confirm Cancellation",
    "cancelConfirmMsg": "Cancel this leave request? Days will be restored to your balance.",
    "cancelBtn": "Confirm Cancel",
    "goBack": "Go Back",
    "withdrawConfirmTitle": "Confirm Withdrawal",
    "withdrawConfirmMsg": "Withdraw this leave request? Days will be restored to your balance.",
    "withdrawBtn": "Confirm Withdraw",
    "cancelSuccess": "Leave request cancelled successfully.",
    "cancelError": "The leave request could not be cancelled. Please try again.",
    "withdrawSuccess": "Leave request withdrawn successfully.",
    "withdrawError": "The leave request could not be withdrawn. Please try again.",
    "editRequest": "Edit request",
    "editSuccess": "Leave request updated successfully.",
    "editError": "The leave request could not be updated. Please try again.",
    "editDateError": "The end date cannot be earlier than the start date.",
    "editNote": "Editing resubmits the request to your approvers. The working days are recalculated from the new dates.",
    "halfDayPeriod": "Half-day period",
    "morning": "Morning",
    "afternoon": "Afternoon",
    "requestId": "ID",
    "dates": "Dates",
    "days": "Days",
    "approvalStep": "Step",
    "status": "Status",
    "returns": "Returns",
    "required": "Required",
    "upload": "Upload File",
    "noRequests": "No requests yet",
    "pagination": "Request pages",
    "previousPage": "Previous page",
    "nextPage": "Next page",
    "page": "Page",
    "of": "of",
    "balanceAsOf": "Balance",
    "leaveType": "Leave Type",
    "startEndDate": "Start & End Date",
    "monthPrev": "Previous month",
    "monthNext": "Next month",
    "approved": "Approved",
    "pendingStatus": "Pending",
    "rejected": "Rejected",
    "returned": "Needs Correction",
    "cancelled": "Cancelled",
    "draft": "Draft",
    "pendingCancellation": "Pending cancellation",
    "withdrawn": "Withdrawn",
    "available": "Available",
    "onLeave": "On leave",
    "back": "Back",
    "pending": "Pending",
    "all": "All",
    "cancel": "Cancel",
    "withdraw": "Withdraw",
    "startDate": "Start Date",
    "endDate": "End Date",
    "halfDay": "Half Day",
    "reason": "Reason",
    "carryOver": "Carry Over",
    "accrualTypes": "Accrual Leave Types",
    "onRequest": "On-Request Leave Types",
    "myLeaves": "My Leaves",
    "mySelfService": "My Info",
    "myProfile": "My Profile",
    "respond": "Respond",
    "respondTitle": "Provide the requested information",
    "respondLabel": "Your response",
    "respondSubmit": "Send response",
    "respondSuccess": "Your response was sent and the request is back with your approver.",
    "respondError": "Could not send your response. Please try again."
  },
  "mobileOps": {
    "tabs": {
      "mobilePunches": "Mobile Punches"
    },
    "geofence": {
      "allChanges": "All changes",
      "testTitle": "Test coordinate",
      "latitude": "Latitude",
      "longitude": "Longitude",
      "test": "Test",
      "noActiveSites": "There are no active sites to compare against.",
      "inside": "Inside a configured site",
      "outside": "Outside configured sites",
      "audit": "Audit log",
      "siteAudit": "Site audit log",
      "noAudit": "No audit entries.",
      "invalidCoordinates": "Enter a valid latitude and longitude.",
      "reactivate": "Reactivate",
      "confirmReactivate": "Reactivate site",
      "confirmReactivateMessage": "Are you sure you want to reactivate this site?",
      "reactivated": "Site reactivated.",
      "reactivateFailed": "Failed to reactivate the site."
    },
    "punches": {
      "employeeId": "Employee ID",
      "from": "From",
      "to": "To",
      "showPunches": "Show punches",
      "showSelfies": "Selfies",
      "employee": "Employee",
      "time": "Time",
      "direction": "Direction",
      "location": "GPS accuracy",
      "device": "Device",
      "viewOnMap": "View on map",
      "detail": "Mobile punch detail",
      "none": "No mobile punches match these filters.",
      "checkIn": "Check-in",
      "checkOut": "Check-out",
      "loadingSelfie": "Loading selfie…",
      "noSelfies": "No selfies match these filters.",
      "geofenceResult": "Site check",
      "distance": "Distance from site",
      "reviewStatus": "Review status",
      "notes": "Notes"
    }
  },
  "cc": {
    "appName": "Command Center",
    "placeholder": "This section is being built.",
    "shell": {
      "signedInAs": "Signed in as",
      "signOut": "Sign out",
      "signOutConfirmTitle": "Sign out of Command Center?",
      "signOutConfirmMessage": "You will need to sign in again to access the staff portal."
    },
    "login": {
      "subtitle": "Sign in with your staff account.",
      "email": "Email",
      "password": "Password",
      "twoFactorCode": "Verification code",
      "haveCode": "I have a verification code",
      "submit": "Sign in",
      "invalidEmail": "Enter a valid email address.",
      "passwordRequired": "Enter your password.",
      "invalidCredentials": "The email, password or verification code is incorrect.",
      "eyebrow": "Staff portal",
      "showPassword": "Show password",
      "hidePassword": "Hide password"
    },
    "noAccess": {
      "title": "No access",
      "message": "Your account does not have permission to open this screen.",
      "goBack": "Back to tenants"
    },
    "tenant": {
      "backToDirectory": "Tenant directory",
      "sections": "Tenant sections",
      "loadError": "The tenant details could not be loaded."
    },
    "nav": {
      "tenants": "Tenants",
      "alerts": "Alerts",
      "health": "Fleet health",
      "checkIns": "My check-ins",
      "renewals": "Renewals",
      "receivables": "Receivables",
      "announcements": "Announcements",
      "versions": "Releases",
      "demos": "Demo tenants",
      "onboardingTemplate": "Onboarding template"
    },
    "tabs": {
      "overview": "Overview",
      "lifecycle": "Lifecycle",
      "onboarding": "Onboarding",
      "modules": "Modules & seats",
      "health": "Health",
      "checkIns": "Check-ins",
      "support": "Support",
      "notes": "Notes",
      "release": "Version",
      "data": "Backup & data",
      "commercial": "Payments & documents"
    }
  },
  "ccTenants": {
    "common": {
      "loadError": "Failed to load data.",
      "save": "Save",
      "refresh": "Refresh",
      "previous": "Previous",
      "next": "Next",
      "notAvailable": "Not available",
      "confirm": "Confirm",
      "cancel": "Cancel"
    },
    "states": {
      "trial": "Trial",
      "active": "Active",
      "suspended": "Suspended",
      "churned": "Churned"
    },
    "deployment": {
      "cloud": "Cloud",
      "onPrem": "On-premises"
    },
    "directory": {
      "eyebrow": "COMMAND CENTER",
      "title": "Tenant directory",
      "template": "Onboarding template",
      "search": "Search tenants",
      "allStates": "All states",
      "allModules": "All modules",
      "renewalDays": "Renewal within days",
      "inOnboarding": "In onboarding",
      "apply": "Apply",
      "loadError": "Could not load tenants.",
      "empty": "No tenants match these filters.",
      "tenant": "Tenant",
      "state": "State",
      "deployment": "Deployment",
      "modules": "Modules",
      "seats": "Seats",
      "health": "Health",
      "renewal": "Renewal",
      "total": "Total",
      "kpiTotal": "Total tenants",
      "kpiPageModules": "Active modules on this page",
      "kpiPageTenants": "Tenants on this page"
    },
    "tenant": {
      "eyebrow": "TENANT",
      "created": "Created"
    },
    "overview": {
      "profile": "Profile",
      "summary": "Summary",
      "industry": "Industry",
      "language": "Language",
      "timezone": "Timezone",
      "plan": "Plan",
      "modules": "Active modules",
      "openAlerts": "Open alerts",
      "openIssues": "Open issues",
      "onboarding": "Onboarding progress",
      "seats": "Seat usage",
      "snapshot": "Snapshot",
      "health": "Health",
      "reachable": "Reachable",
      "unreachable": "Unreachable",
      "lastHeartbeat": "Last heartbeat",
      "alerts": "Recent alerts",
      "noAlerts": "No recent alerts.",
      "onPremTitle": "On-premises metadata",
      "siteUrl": "Site URL",
      "itContactName": "IT contact name",
      "itContactEmail": "IT contact email",
      "cloudCapabilities": "Cloud tenants use the Command Center managed capabilities."
    },
    "lifecycle": {
      "current": "Current lifecycle",
      "reason": "Reason (optional)",
      "churnReason": "Churn reason (10–1000 characters)",
      "activateTrial": "Convert trial to active",
      "activate": "Activate",
      "suspend": "Suspend",
      "churn": "Churn tenant",
      "history": "Transition history",
      "noHistory": "No lifecycle transitions recorded.",
      "retentionUntil": "Data retention until"
    },
    "onboarding": {
      "title": "Onboarding checklist",
      "notInitialized": "This tenant has no checklist yet.",
      "initialize": "Initialize checklist",
      "required": "Required",
      "optional": "Optional",
      "note": "Completion note (optional)",
      "complete": "Complete",
      "undo": "Undo",
      "completed": "Completed",
      "locked": "Locked",
      "goLive": "Confirm go-live",
      "goLiveConfirmed": "Go-live confirmed."
    },
    "template": {
      "title": "Master onboarding template",
      "nameEn": "Name (English)",
      "nameAr": "Name (Arabic)",
      "required": "Required",
      "empty": "No active onboarding template.",
      "sortOrder": "Order"
    },
    "messages": {
      "invalidOnPrem": "Enter a valid IT contact email.",
      "onPremSaved": "On-premises metadata saved.",
      "onPremSaveFailed": "Failed to save on-premises metadata.",
      "invalidReason": "The reason must be 10–1000 characters.",
      "invalidChurn": "Enter a future retention date and a 10–1000 character reason.",
      "confirmTransition": "Confirm this lifecycle transition and its consequence?",
      "confirmTitle": "Change tenant state",
      "goLiveTitle": "Confirm go-live",
      "confirm_trial": "Convert this trial into an active customer?",
      "confirm_activate": "Activate this tenant? Its modules become available to the client's users again.",
      "confirm_suspend": "Suspend this tenant? All of its modules are locked for the client's users immediately. Its data is kept and you can activate it again later.",
      "confirm_churn": "Churn this tenant permanently? The client loses access and its data is purged after the retention date. This cannot be undone.",
      "lifecycleUpdated": "Lifecycle updated.",
      "lifecycleFailed": "Lifecycle action failed.",
      "initialized": "Onboarding initialized.",
      "initializeFailed": "Failed to initialize onboarding.",
      "itemCompleted": "Checklist item completed.",
      "itemCompleteFailed": "Failed to complete item.",
      "undoConfirm": "Undo this checklist item?",
      "itemUndone": "Checklist item unchecked.",
      "undoFailed": "Failed to undo item.",
      "goLiveConfirm": "Confirm go-live? Required items will be locked.",
      "goLive": "Go-live confirmed.",
      "goLiveFailed": "Go-live failed.",
      "invalidTemplate": "Enter a unique non-negative sort order and English title for every item.",
      "templateSaved": "Onboarding template saved.",
      "templateSaveFailed": "Failed to save onboarding template."
    }
  },
  "dayRecord": {
    "tabs": {
      "status": "Status",
      "hours": "Hours",
      "history": "History"
    },
    "actions": {
      "recalculate": "Recalculate",
      "processDay": "Process day",
      "overrideStatus": "Override status",
      "clearOverride": "Clear override"
    },
    "messages": {
      "recalculateSuccess": "Worked hours recalculated.",
      "processSuccess": "Day processed successfully.",
      "overrideSuccess": "Status override applied.",
      "overrideFailed": "Failed to apply status override.",
      "clearOverrideSuccess": "Status override cleared.",
      "clearOverrideFailed": "Failed to clear status override.",
      "actionFailed": "Action failed. Please try again."
    },
    "status": {
      "loadError": "Could not load status explanation.",
      "manualOverride": "Manual override",
      "classificationSteps": "Classification steps",
      "stepPassed": "Passed",
      "stepFailed": "Failed",
      "emptyTitle": "No status explanation available.",
      "emptySubtitle": "Status details will appear once the day is processed."
    },
    "hours": {
      "loadError": "Could not load worked hours.",
      "breakdownTitle": "Worked hours breakdown",
      "previewTitle": "Worked hours preview",
      "shift": "Shift",
      "scheduled": "Scheduled",
      "originalCheckIn": "Original check-in",
      "originalCheckOut": "Original check-out",
      "roundedCheckIn": "Rounded check-in",
      "roundedCheckOut": "Rounded check-out",
      "grossMinutes": "Gross minutes",
      "netMinutes": "Net minutes",
      "requiredWorkingMinutes": "Required minutes",
      "shortfallMinutes": "Shortfall minutes",
      "breaks": "Break deductions",
      "minutesSuffix": "min",
      "calculatedAt": "Calculated at",
      "emptyTitle": "No worked hours data.",
      "emptySubtitle": "Hours will appear once punches are matched for this day."
    },
    "history": {
      "loadError": "Could not load history.",
      "recalculationTitle": "Recalculation history",
      "auditTitle": "Day audit trail",
      "noRecalculations": "No recalculations recorded for this day.",
      "noAuditEntries": "No audit entries for this day.",
      "changed": "Changed",
      "system": "system"
    },
    "override": {
      "title": "Override status",
      "statusLabel": "New status",
      "statusPlaceholder": "Select a status",
      "statusRequired": "Please select a status.",
      "reasonLabel": "Reason",
      "reasonPlaceholder": "Explain why you are overriding the status...",
      "reasonHint": "Required. Between 5 and 500 characters.",
      "reasonLength": "Reason must be between 5 and 500 characters.",
      "clearConfirmHeader": "Clear override",
      "clearConfirmMessage": "Remove the manual status override for this day?"
    },
    "statusLabels": {
      "present": "Present",
      "late": "Late",
      "halfDayLate": "Half-day late",
      "earlyLeave": "Early leave",
      "halfDayEarlyLeave": "Half-day early leave",
      "absent": "Absent",
      "absentEarlyLeave": "Absent + early leave",
      "noShow": "No show",
      "excused": "Excused",
      "shortfallMinor": "Minor shortfall",
      "shortfallHalfDay": "Half-day shortfall",
      "shortfallAbsent": "Shortfall absent",
      "presentLate": "Present late",
      "halfDay": "Half day",
      "absentUnexcused": "Absent unexcused",
      "absentExcused": "Absent excused",
      "manualOverride": "Manual override"
    }
  },
  "punchOps": {
    "viewTitle": "Punch Ops",
    "punchDetailTitle": "Punch Detail",
    "quarantineDetailTitle": "Quarantine Detail",
    "quarantineSingleTitle": "Quarantined Punch",
    "ingestionLogsTitle": "Ingestion Logs",
    "failedPunchesTitle": "Failed Punches",
    "void": "Void",
    "retry": "Retry",
    "rejectSelected": "Reject Selected",
    "selectAll": "Select all",
    "selectedCount": "{count} selected",
    "rejectSummary": "Reject {count} quarantined punch(es)",
    "voidDialogTitle": "Void Punch",
    "rejectDialogTitle": "Reject Quarantined Punches",
    "voidReason": "Reason for voiding",
    "rejectReason": "Reason for rejection",
    "voidReasonPlaceholder": "Enter reason…",
    "rejectReasonPlaceholder": "Enter reason…",
    "stats": {
      "totalPunches": "Total Punches",
      "processed": "Processed",
      "failed": "Failed",
      "deduplicated": "Deduplicated",
      "voided": "Voided",
      "quarantined": "Quarantined",
      "batches": "Batches"
    },
    "columns": {
      "employee": "Employee",
      "punchTime": "Punch Time",
      "direction": "Direction",
      "receivedAt": "Received",
      "total": "Total",
      "routed": "Routed",
      "quarantined": "Quarantined",
      "deduplicated": "Deduplicated",
      "failed": "Failed"
    },
    "fields": {
      "punchTime": "Punch time",
      "deviceTime": "Device time",
      "direction": "Direction",
      "method": "Method",
      "source": "Source",
      "enrollmentId": "Enrollment ID",
      "receivedAt": "Received at",
      "duplicateOf": "Duplicate of",
      "processingError": "Processing error",
      "rawPayload": "Raw payload",
      "unknownEnrollmentId": "Unknown enrollment ID",
      "resolvedEmployee": "Resolved employee",
      "resolutionNotes": "Resolution notes"
    },
    "messages": {
      "loadDetailFailed": "Failed to load punch details.",
      "voided": "Punch voided.",
      "voidFailed": "Failed to void the punch.",
      "voidReasonRequired": "A reason is required to void this punch.",
      "voidReasonTooLong": "Reason must be 500 characters or less.",
      "retried": "Punch retry triggered.",
      "retryFailed": "Failed to retry the punch.",
      "notFound": "Punch not found.",
      "statsFailed": "Failed to load ingestion stats.",
      "logsFailed": "Failed to load ingestion logs.",
      "noLogs": "No ingestion logs for this period.",
      "failedPunchesLoadFailed": "Failed to load failed punches.",
      "noFailedPunches": "No failed punches for this period.",
      "devicesLoadFailed": "Failed to load devices.",
      "rejectReasonRequired": "A reason is required to reject quarantined punches.",
      "rejectReasonTooLong": "Reason must be 500 characters or less.",
      "rejectTooManyIds": "You can reject up to {max} punches at once.",
      "rejected": "{count} punch(es) rejected.",
      "rejectPartial": "Rejected {rejected}, failed {failed}.",
      "rejectFailed": "Failed to reject quarantined punches.",
      "quarantineDetailFailed": "Failed to load quarantine details.",
      "noQuarantineItems": "No punches in this group."
    }
  },
  "deviceOps": {
    "companyHistory": "Company Sync History",
    "deviceHistory": "Device Sync History",
    "logDetails": "Sync Log Details",
    "from": "From",
    "to": "To",
    "applyFilters": "Apply filters",
    "device": "Device",
    "started": "Started",
    "completed": "Completed",
    "status": "Status",
    "records": "Records",
    "recordsNew": "New records",
    "recordsFailed": "Failed records",
    "trigger": "Trigger",
    "running": "Running",
    "completedStatus": "Completed",
    "failedStatus": "Failed",
    "partialSuccess": "Partial success",
    "manual": "Manual",
    "scheduled": "Scheduled",
    "onDemand": "On demand",
    "details": "Details",
    "noHistory": "No sync history found.",
    "employeeDevices": "Employee's Devices",
    "chooseEmployee": "Choose an employee",
    "includeInactive": "Include inactive enrollments",
    "noEmployeeDevices": "This employee has no device enrollments.",
    "bulkEnrollment": "Bulk Enrollment",
    "addEmployee": "Add an employee",
    "upsert": "Update existing enrollments",
    "autoResolve": "Auto-resolve quarantined punches",
    "createEnrollments": "Create enrollments",
    "created": "Created",
    "updated": "Updated",
    "skipped": "Skipped",
    "failed": "Failed",
    "messages": {
      "historyLoadFailed": "Failed to load sync history.",
      "employeeDevicesLoadFailed": "Failed to load the employee's devices.",
      "bulkFieldsRequired": "Add at least one employee and enter an enrollment ID of up to 100 characters for each.",
      "bulkIdsUnique": "Enrollment IDs must be unique.",
      "bulkCompleted": "Bulk enrollment completed.",
      "bulkFailed": "Bulk enrollment failed."
    }
  },
  "ccLicensing": {
    "eyebrow": "MODULE LICENSING",
    "title": "Modules, seats and renewals",
    "subtitle": "Manage tenant module access, licence terms, seat usage and renewal outreach.",
    "snapshot": "Take snapshot",
    "active": "Active",
    "inactive": "Inactive",
    "readOnly": "Read-only",
    "editable": "Editable",
    "seats": "Seats",
    "expiry": "Expiry",
    "notSet": "Not set",
    "overLimit": "Over the licensed seat limit",
    "activate": "Activate",
    "deactivate": "Deactivate",
    "makeEditable": "Make editable",
    "makeReadOnly": "Make read-only",
    "terms": "Terms",
    "renew": "Renew",
    "recordIntent": "Record intent",
    "seatUsage": "Seat usage",
    "noHistory": "No seat snapshots for this period.",
    "audit": "Module audit log",
    "noAudit": "No module changes recorded.",
    "termsFor": "Licence terms for",
    "licensedSeats": "Licensed seats",
    "startDate": "Start date",
    "endDate": "End date",
    "renewalDate": "Renewal date",
    "notes": "Notes",
    "commercialReference": "Commercial reference",
    "permissionSummary": "Permission summary",
    "affectedRoles": "Affected roles",
    "save": "Save",
    "reason": "Reason",
    "confirmAction": "Confirm",
    "cancel": "Cancel",
    "contactedPerson": "Contacted person",
    "contactDate": "Contact date",
    "intentStatus": "Intent status",
    "intent": {
      "WillRenew": "Will renew",
      "Undecided": "Undecided",
      "AtRisk": "At risk",
      "WillNotRenew": "Will not renew"
    },
    "confirm": {
      "activate": "Activating this module gives its users access immediately.",
      "deactivate": "Deactivating this module removes access for the client's users immediately.",
      "readOnly": "Switching this module to read-only affects the client's users immediately."
    },
    "actions": {
      "activate": "Activate module",
      "deactivate": "Deactivate module",
      "readonly": "Change module access"
    },
    "messages": {
      "success": "Action completed successfully.",
      "error": "The action could not be completed."
    },
    "empty": "No modules are configured for this tenant.",
    "renewals": {
      "eyebrow": "RENEWAL PIPELINE",
      "title": "Renewals",
      "subtitle": "Track upcoming renewals and coordinate commercial outreach.",
      "pipeline": "Pipeline",
      "myTasks": "My tasks",
      "saveList": "Save list",
      "accountOwner": "Account owner ID",
      "module": "Module",
      "allModules": "All modules",
      "apply": "Apply filters",
      "expiring": "expiring",
      "expired": "expired",
      "noItems": "No renewals in this bucket.",
      "noPipeline": "No renewal contracts match these filters.",
      "complete": "Complete outreach",
      "noTasks": "No outreach tasks are assigned to you.",
      "noSaveList": "The save list is empty.",
      "bucket": "Bucket",
      "tenant": "Tenant",
      "endDate": "End date",
      "access": "Access",
      "auditAction": "Action",
      "changedAt": "Changed at"
    },
    "module": "Module",
    "auditAction": "Action",
    "changedAt": "Changed at"
  },
  "ccHealth": {
    "eyebrow": "COMMAND CENTER HEALTH",
    "alertsEyebrow": "COMMAND CENTER ALERTS",
    "boardTitle": "Tenant health",
    "tenantHealth": "Tenant health trend",
    "alertsTitle": "Operational alerts",
    "myCheckInsTitle": "My pending check-ins",
    "checkInsTitle": "Scheduled check-ins",
    "filterPlaceholder": "Filter: critical, warning, healthy or unknown",
    "worstFirst": "Worst first",
    "refresh": "Refresh",
    "apply": "Apply",
    "save": "Save",
    "score": "Health score",
    "reachability": "Reachability",
    "reachable": "Reachable",
    "unreachable": "Unreachable",
    "lastHeartbeat": "Last heartbeat",
    "errorRate": "Error rate",
    "openAlerts": "Open alerts",
    "from": "From",
    "to": "To",
    "date": "Date",
    "tenant": "Tenant",
    "tenantId": "Tenant ID",
    "assigneeId": "Assignee ID",
    "assignedAgent": "Assigned agent",
    "nextDue": "Next due",
    "cadence": "Cadence",
    "history": "History",
    "dueDate": "Due date",
    "outcome": "Outcome",
    "alert": "Alert",
    "severity": "Severity",
    "status": "Status",
    "raised": "Raised",
    "actions": "Actions",
    "allStatuses": "All statuses",
    "allSeverities": "All severities",
    "allAlertTypes": "All alert types",
    "open": "Open",
    "acknowledged": "Acknowledged",
    "resolved": "Resolved",
    "low": "Low",
    "medium": "Medium",
    "high": "High",
    "critical": "Critical",
    "tenantUnreachable": "Tenant unreachable",
    "errorSpike": "Error spike",
    "backupFailed": "Backup failed",
    "missedCheckIn": "Missed check-in",
    "noActivityForDays": "No activity for days",
    "seatsAtWarning": "Seats at warning",
    "seatsAtLimit": "Seats at limit",
    "licenseExpiringIn90Days": "License expiring in 90 days",
    "licenseExpiringIn60Days": "License expiring in 60 days",
    "licenseExpiringIn30Days": "License expiring in 30 days",
    "licenseExpiredReadOnly": "License expired, read-only",
    "dunningInternalAlert": "Dunning internal alert",
    "trialEndingIn7Days": "Trial ending in 7 days",
    "uncheckedRenewalTask": "Unchecked renewal task",
    "monthly": "Monthly",
    "quarterly": "Quarterly",
    "retry": "Retry",
    "resolutionNoteHint": "Enter at least 5 characters.",
    "assigneeIdHint": "Enter a positive whole-number staff ID.",
    "contactNameHint": "Contact name is required.",
    "acknowledge": "Acknowledge",
    "resolve": "Resolve",
    "reassign": "Reassign",
    "resolutionNote": "Resolution note",
    "logOutcome": "Log outcome",
    "contactName": "Contact person name",
    "notes": "Notes",
    "followUp": "Flag for follow-up",
    "previous": "Previous",
    "next": "Next",
    "noHealthData": "No health data found.",
    "noAlerts": "No alerts found.",
    "noCheckIns": "No pending check-ins.",
    "loadFailed": "Could not load Command Center data.",
    "actionSucceeded": "Action completed.",
    "actionFailed": "The action could not be completed.",
    "semiAnnual": "Every 6 months",
    "off": "Off",
    "allGood": "All good",
    "concerns": "Concerns"
  },
  "ccSupport": {
    "common": {
      "loading": "Loading...",
      "all": "All"
    },
    "support": {
      "title": "Support access",
      "subtitle": "Manage secure tenant support sessions and administrator access.",
      "eyebrow": "Tenant support"
    },
    "notes": {
      "title": "Tenant notes and issues",
      "subtitle": "Record bugs, requests, complaints, commercial and general context.",
      "empty": "No notes found.",
      "issuesOnly": "Issues only",
      "unresolvedOnly": "Unresolved only",
      "issue": "Issue",
      "resolution": "Resolution",
      "markIssue": "Mark as issue",
      "editorTitle": "Tenant note",
      "eyebrow": "Tenant context"
    },
    "announcements": {
      "title": "Broadcast announcements",
      "subtitle": "Create, schedule and monitor tenant communications.",
      "empty": "No announcements found.",
      "draft": "Draft",
      "eyebrow": "Communication operations"
    },
    "sessions": {
      "mode": "Mode",
      "started": "Started",
      "status": "Status",
      "ticket": "Ticket",
      "active": "Active",
      "ended": "Ended",
      "minutesRemaining": "minutes remaining",
      "empty": "No support sessions found.",
      "consentRequired": "Customer consent must be recorded before this session can be used as admin."
    },
    "audit": {
      "empty": "No audit entries found."
    },
    "deliveries": {
      "empty": "No delivery records found.",
      "delivered": "Delivered",
      "failed": "Failed"
    },
    "actions": {
      "startSession": "Start session",
      "resetAdmin": "Reset client admin access",
      "end": "End",
      "extend": "Extend",
      "consent": "Record consent",
      "audit": "Audit log",
      "confirmReset": "Continue to reset",
      "addNote": "Add note",
      "edit": "Edit",
      "resolve": "Resolve",
      "reopen": "Reopen",
      "save": "Save",
      "cancel": "Cancel",
      "confirm": "Confirm",
      "createAnnouncement": "Create announcement",
      "sendNow": "Send now",
      "deliveries": "Deliveries"
    },
    "fields": {
      "mode": "Mode",
      "duration": "Duration (minutes)",
      "ticket": "Ticket reference",
      "reason": "Reason",
      "employeeId": "Target employee ID",
      "contactName": "Customer contact name",
      "resetType": "Reset type",
      "verifiedContactName": "Verified contact name",
      "verifiedContactRole": "Verified contact role",
      "newInviteEmail": "New invite email",
      "additionalMinutes": "Additional minutes",
      "category": "Category",
      "content": "Content",
      "resolutionNote": "Resolution note",
      "status": "Status",
      "type": "Type",
      "title": "Title",
      "scheduled": "Scheduled",
      "titleEn": "English title",
      "titleAr": "Arabic title",
      "bodyEn": "English body",
      "bodyAr": "Arabic body",
      "targeting": "Targeting",
      "targetTenants": "Tenant IDs (comma separated)",
      "schedule": "Schedule (optional)",
      "maintenanceStart": "Maintenance start",
      "maintenanceEnd": "Maintenance end"
    },
    "drawers": {
      "startTitle": "Start support session",
      "resetTitle": "Reset client admin access",
      "auditTitle": "Session audit log",
      "announcementTitle": "Create announcement",
      "deliveriesTitle": "Announcement deliveries"
    },
    "confirm": {
      "title": "Confirm action",
      "end": "This will terminate the support session immediately.",
      "reset": "The client admin will be locked out or invited again. Continue?",
      "send": "This broadcasts the announcement immediately and cannot be undone.",
      "cancelAnnouncement": "This cancels the scheduled announcement."
    },
    "modes": {
      "0": "View only",
      "1": "Act as admin",
      "2": "View as employee",
      "explanation": {
        "0": "Inspect tenant data without making changes.",
        "1": "Operate as the client administrator after consent is recorded.",
        "2": "Inspect the experience of a selected employee."
      }
    },
    "resetTypes": {
      "0": "Password reset invite",
      "1": "New admin invite",
      "2": "Deactivate orphaned admin"
    },
    "categories": {
      "0": "General",
      "1": "Bug",
      "2": "Request",
      "3": "Complaint",
      "4": "Commercial"
    },
    "announcementTypes": {
      "0": "General",
      "1": "Maintenance",
      "2": "Release",
      "3": "Security"
    },
    "targeting": {
      "0": "All tenants",
      "1": "Selected tenants"
    },
    "statuses": {
      "0": "Draft",
      "1": "Scheduled",
      "2": "Sent",
      "3": "Cancelled"
    },
    "validation": {
      "duration": "Duration must be between 5 and 480 minutes.",
      "ticket": "Ticket reference is required and must be at most 200 characters.",
      "reason": "Reason must contain 10 to 1000 characters.",
      "employee": "A target employee is required for View as employee.",
      "extension": "Additional minutes must be between 1 and 120.",
      "consent": "Contact name is required and must be at most 200 characters.",
      "verifiedContact": "Verified contact name is required and must be at most 200 characters.",
      "inviteEmail": "A valid invite email is required for a new admin invite.",
      "noteContent": "Note content must contain 5 to 5000 characters.",
      "resolution": "Resolution note must contain 5 to 2000 characters.",
      "announcementTitle": "English title is required and must be at most 300 characters.",
      "announcementBody": "English body is required.",
      "announcementTargets": "At least one tenant ID is required.",
      "announcementSchedule": "Scheduled send time must be in the future.",
      "maintenanceDates": "Maintenance end must be after maintenance start."
    },
    "notifications": {
      "loadError": "Could not load data.",
      "actionError": "The action could not be completed.",
      "started": "Support session started.",
      "ended": "Support session ended.",
      "extended": "Support session extended.",
      "consentRecorded": "Customer consent recorded.",
      "reset": "Client admin access reset request submitted.",
      "saved": "Note saved.",
      "created": "Announcement created.",
      "sent": "Announcement broadcast.",
      "cancelled": "Announcement cancelled."
    }
  },
  "ccReleases": {
    "eyebrow": "Release operations",
    "title": "Releases and rollout waves",
    "subtitle": "Register releases, control rollout waves, and identify tenants that need an update.",
    "register": "Register release",
    "registerTitle": "Register release",
    "tabs": {
      "releases": "Releases",
      "mismatches": "Version mismatches"
    },
    "fields": {
      "version": "Version",
      "type": "Release type",
      "releasedAt": "Released",
      "rollout": "Tenants on version",
      "status": "Status",
      "latestVersion": "Latest available version",
      "tenant": "Tenant",
      "installed": "Installed",
      "latest": "Latest",
      "notesEn": "Release notes (English)",
      "notesAr": "Release notes (Arabic)",
      "waveName": "Wave name",
      "order": "Order",
      "targetTenantIds": "Target tenant IDs"
    },
    "type": {
      "0": "Patch",
      "1": "Minor",
      "2": "Major",
      "3": "Security"
    },
    "status": {
      "0": "Pending",
      "1": "In progress",
      "2": "Completed",
      "3": "Paused"
    },
    "latest": "Latest",
    "archived": "Previous release",
    "allTenants": "All tenants",
    "targetTenants": "Target tenants",
    "waves": "Rollout waves",
    "addWave": "Add wave",
    "removeWave": "Remove wave",
    "save": "Register release",
    "saving": "Saving...",
    "approvalTitle": "Approve rollout wave",
    "approvalNote": "Approval note",
    "approvalWarning": "Approving this wave starts deployment to real client tenants. Confirm only when you are ready to deploy.",
    "actions": {
      "approve": "Approve",
      "pause": "Pause",
      "resume": "Resume"
    },
    "confirm": {
      "header": "Confirm action",
      "approve": "This will start deploying the release to real client tenants. Do you want to continue?",
      "reset": "Resetting this demo discards all changes made in it and restores the template baseline. Continue?"
    },
    "empty": {
      "releases": "No releases have been registered.",
      "mismatches": "All tenants are running the latest version."
    },
    "validation": {
      "invalid": "Complete the required fields and correct the wave settings before saving."
    },
    "success": {
      "registered": "Release registered.",
      "action": "Wave action completed.",
      "demoCreated": "Demo tenant created.",
      "demoReset": "Demo tenant reset to its template baseline.",
      "demoExtended": "Demo tenant expiry extended."
    },
    "errors": {
      "load": "Could not load Command Center data.",
      "save": "Could not save the changes.",
      "action": "The action could not be completed."
    },
    "tenant": {
      "eyebrow": "Tenant version",
      "title": "Installed release",
      "installed": "Installed version",
      "latest": "Latest available",
      "state": "Update state",
      "pending": "Update pending",
      "current": "Up to date",
      "lastReported": "Last reported",
      "deployed": "Deployed at"
    },
    "demos": {
      "eyebrow": "Demo tenants",
      "title": "Demo tenant management",
      "subtitle": "Create temporary tenants from pre-configured templates and keep their expiry under control.",
      "create": "Create demo tenant",
      "createTitle": "Create demo tenant",
      "includeExpired": "Include expired demos",
      "empty": "No demo tenants found.",
      "fields": {
        "template": "Template",
        "company": "Company",
        "companyEn": "Company name (English)",
        "companyAr": "Company name (Arabic)",
        "purpose": "Purpose",
        "expiry": "Expiry",
        "expiryDays": "Expiry days",
        "additionalDays": "Additional days",
        "state": "State"
      },
      "days": "days remaining",
      "expired": "Expired",
      "reset": "Reset",
      "modified": "Modified",
      "extend": "Extend",
      "resetAction": "Reset changes",
      "extendTitle": "Extend demo expiry"
    }
  },
  "ccDataOps": {
    "eyebrow": "Data operations",
    "title": "Backup, restore and data export",
    "subtitle": "Protect tenant data, control guarded restores and fulfil client takeout requests.",
    "navigation": {
      "backup": "Backup",
      "restore": "Restore",
      "export": "Data export"
    },
    "common": {
      "loading": "Loading...",
      "unknown": "Unknown",
      "all": "All",
      "actions": "Actions",
      "submit": "Submit",
      "confirm": "Please confirm",
      "error": "Data operations",
      "loadError": "Could not load the requested data.",
      "actionFailed": "The action failed.",
      "backupRequested": "Backup requested.",
      "restoreSubmitted": "Restore request submitted.",
      "restoreUpdated": "Restore request updated.",
      "exportRequested": "Data export requested.",
      "requestFailed": "The request failed."
    },
    "backup": {
      "title": "Backup health",
      "subtitle": "Review the latest backup and request an immediate backup.",
      "lastSuccessful": "Last successful backup",
      "size": "Backup size",
      "reference": "Backup reference",
      "retention": "Retention",
      "reason": "Reason (minimum 5 characters)",
      "trigger": "Backup now",
      "triggerConfirm": "Start an immediate backup for this tenant?",
      "empty": "No backup requests found.",
      "requestedAt": "Requested at",
      "status": "Status",
      "requestedBy": "Requested by"
    },
    "restore": {
      "title": "Guarded restore",
      "subtitle": "Every restore requires two separate approvals before execution.",
      "request": "Request restore",
      "statusFilter": "Status",
      "statusLabel": "Status",
      "scope": "Scope",
      "full": "Full tenant",
      "moduleScope": "Module",
      "module": "Module",
      "chooseModule": "Choose a module",
      "backupReference": "Backup reference",
      "reason": "Reason (10-2000 characters)",
      "ticket": "Ticket reference",
      "empty": "No restore requests found.",
      "approveFirst": "Approve first",
      "approveSecond": "Approve second",
      "execute": "Execute",
      "cancel": "Cancel",
      "requestConfirm": "Submit this restore request for dual approval?",
      "approvalConfirm": "Apply this approval to the restore request?",
      "executeConfirm": "Execute this restore. Live client data will be overwritten.",
      "invalidForm": "Enter the backup reference, a reason of at least 10 characters and a ticket reference (and a module when restoring a single module).",
      "cancelConfirm": "Cancel this restore request?",
      "status": {
        "pendingApproval": "Pending approval",
        "pendingSecondApproval": "Pending second approval",
        "approved": "Approved",
        "completed": "Completed",
        "failed": "Failed",
        "cancelled": "Cancelled"
      }
    },
    "export": {
      "title": "Client data export",
      "subtitle": "Create a GDPR takeout and provide a secure download link when it is ready.",
      "request": "Request export",
      "statusFilter": "Status",
      "statusLabel": "Status",
      "scope": "Scope",
      "allModules": "All modules",
      "moduleScope": "Module",
      "module": "Module",
      "chooseModule": "Choose a module",
      "clientReference": "Client request reference",
      "contactName": "Delivery contact name",
      "contactEmail": "Delivery contact email",
      "empty": "No export jobs found.",
      "reference": "Client reference",
      "download": "Download",
      "downloadLink": "Download export",
      "requestConfirm": "Submit this client data export request?",
      "status": {
        "queued": "Queued",
        "inProgress": "In progress",
        "completed": "Completed",
        "failed": "Failed"
      }
    }
  },
  "ccCommercial": {
    "common": {
      "actions": "Actions",
      "all": "All",
      "confirm": "Confirm",
      "error": "The request could not be completed.",
      "notAvailable": "Not available",
      "remove": "Remove",
      "save": "Save",
      "success": "Saved successfully.",
      "sections": "Commercial sections",
      "tenantRequired": "A tenant is required.",
      "alreadySaving": "Please wait for the current save to finish."
    },
    "payments": {
      "title": "Payments",
      "subtitle": "Payment agreements and installment ledger",
      "createSchedule": "Create payment schedule",
      "plan": "Plan",
      "agreed": "Agreed total",
      "paid": "Paid",
      "outstanding": "Outstanding",
      "installment": "Installment",
      "dueDate": "Due date",
      "amount": "Amount",
      "status": "Status",
      "dunningStage": "Dunning stage",
      "pay": "Pay",
      "waive": "Waive",
      "advance": "Advance",
      "empty": "No payment schedule exists.",
      "planNameEn": "Plan name (English)",
      "planNameAr": "Plan name (Arabic)",
      "moduleBundle": "Module bundle",
      "agreedPrice": "Agreed total price",
      "currency": "Currency",
      "frequency": "Frequency",
      "monthly": "Monthly",
      "quarterly": "Quarterly",
      "annual": "Annual",
      "custom": "Custom",
      "contractReference": "Contract reference",
      "installments": "Installments",
      "addInstallment": "Add installment",
      "notes": "Notes",
      "runningTotal": "Schedule total / agreed total",
      "totalMismatch": "The installment total differs from the agreed total.",
      "totalMismatchConfirm": "The installment total differs from the agreed total price. Save anyway?",
      "scheduleInvalid": "Complete the plan name, price, currency, and installment dates and amounts.",
      "installmentRequired": "Select an installment first.",
      "actionInvalid": "Complete the action fields with valid values.",
      "paidAmount": "Paid amount",
      "paymentMethod": "Payment method",
      "paymentReference": "Payment reference",
      "reason": "Reason",
      "dunningTarget": "Next stage",
      "lockWarning": "This stage locks the client's modules. Continue?",
      "methods": {
        "BankTransfer": "Bank transfer",
        "Cash": "Cash",
        "Card": "Card",
        "Cheque": "Cheque"
      }
    },
    "documents": {
      "title": "Documents",
      "subtitle": "Contracts and commercial documents",
      "upload": "Upload document",
      "type": "Document type",
      "activeOnly": "Active only",
      "label": "Label",
      "labelEn": "Label (English)",
      "labelAr": "Label (Arabic)",
      "date": "Document date",
      "file": "File",
      "download": "Download",
      "archive": "Archive",
      "archiveWarning": "This archives the document and removes it from the active list. Continue?",
      "fileRequired": "Choose a file before uploading.",
      "fileTooLarge": "The file must be 52 MB or smaller.",
      "labelRequired": "An English label is required.",
      "empty": "No documents found.",
      "contract": "Contract",
      "nda": "NDA",
      "other": "Other",
      "offer": "Offer",
      "amendment": "Amendment"
    },
    "receivables": {
      "eyebrow": "COMMERCIAL",
      "title": "Receivables",
      "subtitle": "Overdue installments and aging",
      "accountOwner": "Account owner ID",
      "pageSize": "Rows",
      "tenant": "Tenant",
      "amount": "Amount",
      "daysOverdue": "Days overdue",
      "openTenant": "Open commercial tab",
      "previous": "Previous",
      "next": "Next",
      "empty": "No overdue receivables found.",
      "internalAlert": "Internal alert",
      "clientReminder": "Client reminder",
      "graceNotice": "Grace notice",
      "moduleReadOnly": "Module read-only",
      "suspended": "Suspended"
    }
  },
  "configOps": {
    "updatedBy": "Updated by",
    "retry": "Retry",
    "messages": {
      "saved": "Saved successfully.",
      "deleted": "Deleted successfully.",
      "loadFailed": "Failed to load configuration.",
      "saveFailed": "Failed to save configuration.",
      "deleteFailed": "Failed to delete break rule."
    },
    "breakRules": {
      "title": "Break rules",
      "summary": "Summary",
      "rules": "rules",
      "minutes": "minutes",
      "hours": "hours",
      "offset": "minutes after shift start",
      "duration": "Duration",
      "nameEn": "Name (English)",
      "nameAr": "Name (Arabic)",
      "paid": "Paid break",
      "requiresPunchOut": "Requires punch out",
      "add": "Add break rule",
      "empty": "No break rules configured.",
      "toggle": "Toggle break rule",
      "deleteTitle": "Delete break rule?",
      "deleteMessage": "This action cannot be undone.",
      "validation": "Enter both names, a positive offset, and a duration from 5 to 240 minutes."
    },
    "thresholds": {
      "title": "Status thresholds",
      "halfDayLateness": "Half-day lateness threshold",
      "earlyLeaveHalfDay": "Early-leave half-day threshold",
      "earlyLeaveAbsence": "Early-leave absence threshold",
      "absence": "Absence threshold",
      "halfDayWorked": "Half-day worked minutes threshold",
      "flagIncompletePunch": "Flag incomplete punches separately",
      "validation": "Check threshold ranges and ensure the early-leave absence threshold exceeds the half-day threshold."
    },
    "notifications": {
      "title": "Notifications",
      "correctionSubmitted": "Correction submitted",
      "correctionApproved": "Correction approved",
      "correctionRejected": "Correction rejected",
      "correctionCancelled": "Correction cancelled"
    }
  },
  "rotationOps": {
    "assignmentsTitle": "Pattern Assignments",
    "assignPattern": "Assign pattern",
    "filterPattern": "Filter by pattern",
    "filterTarget": "Filter by target",
    "pattern": "Pattern",
    "target": "Target",
    "targetType": "Target type",
    "targetId": "Target ID",
    "targetEmployee": "Employee",
    "targetDepartment": "Department",
    "targetTeam": "Team",
    "anchorDate": "Anchor date",
    "openEnded": "Open-ended",
    "ended": "Ended",
    "cancelled": "Cancelled",
    "end": "End",
    "expand": "Expand",
    "expandImmediately": "Expand immediately",
    "assignmentDetail": "Assignment details",
    "notes": "Notes",
    "previewCycle": "Preview first 2 weeks",
    "assignMultipleGroups": "Assign multiple groups",
    "addGroup": "Add group",
    "groupStatus": "Group rotation status",
    "totalEmployees": "Total employees",
    "withAssignment": "With active assignment",
    "fullyExpanded": "Fully expanded",
    "createdRows": "shift rows created",
    "noAssignments": "No pattern assignments yet.",
    "confirmCancel": "Cancel assignment?",
    "confirmCancelMessage": "This assignment will be cancelled and cannot be restored.",
    "confirmExpand": "Expand assignment?",
    "confirmExpandMessage": "Generate the per-day shift rows for this assignment?",
    "messages": {
      "loadFailed": "Failed to load pattern assignments.",
      "required": "Pattern, target and effective-from date are required.",
      "multiRequired": "Add at least one valid group target.",
      "endBeforeStart": "The end date must be on or after the start date.",
      "assigned": "Pattern assigned.",
      "assignFailed": "Failed to assign the pattern.",
      "multiAssigned": "Pattern assigned to the groups.",
      "detailFailed": "Failed to load assignment details.",
      "ended": "Assignment ended.",
      "cancelled": "Assignment cancelled.",
      "expanded": "Assignment expanded.",
      "actionFailed": "The assignment action failed.",
      "statusFailed": "Failed to load group status.",
      "previewNeedsPattern": "Choose a pattern and a start date first.",
      "previewFailed": "Failed to preview the pattern."
    }
  },
  "assignmentOps": {
    "title": "Assignment operations",
    "calendarTitle": "Schedule calendar views",
    "assignmentId": "Assignment ID",
    "openDetail": "Open detail",
    "detail": "Assignment detail",
    "targetType": "Target type",
    "targetId": "Target ID",
    "employeeId": "Employee ID",
    "shiftId": "Shift ID",
    "selectEmployee": "Search employee...",
    "effectiveFrom": "Effective from",
    "from": "From",
    "to": "To",
    "employee": "Employee",
    "department": "Department",
    "team": "Team",
    "lookupTarget": "By target",
    "lookupEmployeeEffective": "Effective employee shift",
    "lookupTeamEffective": "Effective team shifts",
    "shift": "Shift",
    "target": "Target",
    "effectiveTo": "Effective to",
    "status": "Status",
    "active": "Active",
    "upcoming": "Upcoming",
    "expired": "Expired",
    "reason": "Reason",
    "state": "State",
    "unscheduled": "Unscheduled",
    "quickBulkAssign": "Quick bulk assign",
    "openEnded": "Open-ended",
    "notes": "Notes",
    "saveNotes": "Save notes",
    "date": "Date",
    "employeeCalendar": "Employee calendar",
    "groupCalendar": "Group calendar",
    "today": "Today",
    "day": "Day view",
    "overrideHistory": "Override history",
    "action": "Action",
    "changedAt": "Changed at",
    "days": "days",
    "employees": "employees",
    "results": "results",
    "scheduled": "scheduled",
    "rest": "rest",
    "confirmTitle": "Confirm quick bulk assignment",
    "confirmMessage": "Assign shift {shiftId} to the selected target from {date}?",
    "messages": {
      "notesSaved": "Assignment notes saved.",
      "bulkAssigned": "Quick bulk assignment completed.",
      "loadFailed": "Failed to load the requested schedule data.",
      "saveFailed": "The operation could not be completed.",
      "notAllowed": "You do not have permission to perform this action.",
      "employeeRequired": "Choose an employee first.",
      "detailRequired": "Open an assignment before saving notes.",
      "validId": "Enter a valid id.",
      "assignmentIdRequired": "Enter a valid assignment id.",
      "shiftIdRequired": "Enter a valid shift id.",
      "effectiveFromRequired": "Choose an effective-from date.",
      "notesTooLong": "Notes cannot exceed 500 characters.",
      "invalidDateRange": "The end date must be on or after the start date.",
      "dayRequiresSingleDate": "Choose the same date in both fields for the day view.",
      "employeeRangeTooLong": "The employee calendar range cannot exceed 366 days.",
      "groupRangeTooLong": "The group calendar range cannot exceed 31 days."
    }
  },
  "overtimeOps": {
    "configure": "Configure exceptions",
    "absenceWindow": "Absence confirmation window (minutes)",
    "latenessThreshold": "Company lateness threshold (minutes)",
    "earlyDeparture": "Early departure threshold (minutes)",
    "showNotYetArrived": "Show not-yet-arrived employees",
    "employeeId": "Employee ID",
    "employeeIds": "Employee IDs (comma separated)",
    "detail": "Load employee detail",
    "compute": "Compute weekly accrual",
    "recalculate": "Recalculate",
    "void": "Void overtime record",
    "reason": "Reason (5–500 characters)",
    "payroll": "Payroll total",
    "totalMinutes": "Total overtime minutes",
    "totalRecords": "Overtime records",
    "employees": "Employees with overtime",
    "totalEmployeeDays": "Employee days",
    "present": "Present",
    "absent": "Absent",
    "employee": "Employee",
    "date": "Date",
    "minutes": "Minutes",
    "checkIn": "Check in",
    "trigger": "Trigger",
    "changed": "Changed",
    "at": "At",
    "processed": "Employees processed",
    "noRecords": "No records found.",
    "from": "From",
    "to": "To",
    "retry": "Retry",
    "employeeIdsOptional": "Comma separated (empty = all employees)",
    "weekStart": "Week start (Monday)",
    "loadPayroll": "Load payroll totals",
    "accrualResult": "Weekly accrual",
    "newRecords": "New overtime records",
    "minutesRecorded": "Overtime minutes recorded",
    "lockedRecords": "Locked records",
    "voidedRecords": "Voided records",
    "statusPending": "Pending",
    "statusLocked": "Locked",
    "statusVoided": "Voided",
    "ranInBackground": "running in the background",
    "confirmBatchAll": "Recalculate worked hours from {from} to {to} for ALL employees with attendance in this range? This can take a while.",
    "confirmBatchSome": "Recalculate worked hours from {from} to {to} for {count} selected employee(s)?",
    "validation": {
      "employeeRequired": "Enter an employee ID first.",
      "idsInvalid": "Employee IDs must be positive numbers separated by commas.",
      "payrollNeedsEmployees": "Enter at least one employee ID to load payroll totals.",
      "tooManyEmployees": "You can select at most 500 employees.",
      "weekRequired": "Choose the week start date.",
      "weekMustBeMonday": "The week must start on a Monday.",
      "weekNotCompleted": "That week is not finished yet.",
      "reasonLength": "The reason must be between 5 and 500 characters.",
      "rangeRequired": "Choose both dates.",
      "rangeInvalid": "The end date is before the start date.",
      "rangeInFuture": "The end date cannot be in the future.",
      "rangeTooLong": "The date range can be at most 31 days.",
      "absenceWindowRange": "The absence confirmation window must be between 15 and 480 minutes.",
      "latenessRange": "The lateness threshold must be between 0 and 120 minutes (or empty).",
      "earlyDepartureRange": "The early departure threshold must be between 60 and 600 minutes."
    },
    "messages": {
      "saved": "Operation completed successfully.",
      "loadFailed": "Failed to load the configuration."
    }
  },
  "insurance": {
    "summary": {
      "eyebrow": "Benefits administration",
      "title": "Medical insurance",
      "subtitle": "Review employee coverage, dependent totals, and policy expiry across the organisation.",
      "filters": {
        "department": "Department",
        "coverage": "Coverage",
        "insured": "Insured employees",
        "uninsured": "Uninsured employees",
        "pageSize": "Page size"
      },
      "metrics": {
        "activeEmployees": "Active employees",
        "insuredEmployees": "Insured employees",
        "uninsuredEmployees": "Uninsured employees",
        "coverage": "Employee coverage",
        "activeDependents": "Active dependents",
        "insuredDependents": "Insured dependents",
        "insuredSpouses": "Insured spouses",
        "insuredSons": "Insured sons",
        "insuredDaughters": "Insured daughters",
        "insuredParents": "Insured parents"
      },
      "employeeListTitle": "Employee coverage",
      "employeeListSubtitle": "The current page of active employees ordered by first name.",
      "page": "Page",
      "columns": {
        "employee": "Employee",
        "department": "Department",
        "coverage": "Coverage",
        "policy": "Policy",
        "expiry": "Policy expiry",
        "maritalStatus": "Marital status",
        "dependents": "Insured / active dependents"
      },
      "empty": "No employees match these filters.",
      "emptySubtitle": "Try another department or coverage filter.",
      "loadFailed": "Medical insurance summary could not be loaded.",
      "departmentsLoadFailed": "Departments could not be loaded for the insurance filters."
    },
    "employee": {
      "title": "Employee insurance",
      "identity": "Employee",
      "status": "Coverage status"
    },
    "fields": {
      "insured": "Insured",
      "provider": "Insurance provider",
      "policyNumber": "Policy number",
      "planNameEn": "Plan name (English)",
      "planNameAr": "Plan name (Arabic)",
      "cardNumber": "Insurance card number",
      "policyStartDate": "Policy start date",
      "policyEndDate": "Policy end date",
      "annualLimit": "Annual coverage limit",
      "notes": "Notes",
      "maritalStatus": "Marital status",
      "fullNameEn": "Full name (English)",
      "fullNameAr": "Full name (Arabic)",
      "relationship": "Relationship",
      "dateOfBirth": "Date of birth",
      "nationalId": "National ID",
      "gender": "Gender",
      "deactivationReason": "Reason for deactivation"
    },
    "status": {
      "insured": "Insured",
      "uninsured": "Not insured"
    },
    "marital": {
      "title": "Marital status",
      "subtitle": "The status used when applying spouse eligibility rules."
    },
    "maritalStatuses": {
      "notSet": "Not set",
      "single": "Single",
      "married": "Married",
      "divorced": "Divorced",
      "widowed": "Widowed"
    },
    "relationships": {
      "spouse": "Spouse",
      "son": "Son",
      "daughter": "Daughter",
      "parent": "Parent",
      "other": "Other"
    },
    "genders": {
      "female": "Female",
      "male": "Male"
    },
    "dependents": {
      "title": "Dependents",
      "summary": "{active} active dependents · {insured} insured",
      "add": "Add dependent",
      "edit": "Edit dependent",
      "showInactive": "Show inactive",
      "hideInactive": "Hide inactive",
      "years": "years",
      "empty": "No dependents found.",
      "emptySubtitle": "Add an eligible spouse, child, parent, or other dependent.",
      "dialogTitle": "Dependent details",
      "dialogSubtitle": "Names and date of birth are required.",
      "deactivateTitle": "Deactivate dependent",
      "deactivateSubtitle": "Deactivate {name} without deleting the stored record.",
      "columns": {
        "name": "Name",
        "relationship": "Relationship",
        "dateOfBirth": "Date of birth",
        "insured": "Insurance",
        "policy": "Card number",
        "status": "Status"
      }
    },
    "errors": {
      "policyEndBeforeStart": "The policy end date cannot precede the start date.",
      "coverageLimitPositive": "The annual coverage limit must be greater than zero.",
      "profileNotFound": "The employee insurance profile was not found.",
      "dependentNameTooShort": "Dependent names are shorter than the configured minimum.",
      "dependentNameTooLong": "Dependent names exceed the configured maximum.",
      "dependentNameLength": "Enter both names using 2 to 150 characters.",
      "dependentNotFound": "The dependent was not found.",
      "dependentAlreadyInactive": "This dependent is already inactive.",
      "dependentPolicyEndBeforeStart": "The dependent policy end date cannot precede the start date.",
      "dependentDobFuture": "The dependent date of birth cannot be in the future.",
      "dependentDobRequired": "Date of birth is required.",
      "deactivationReasonRequired": "Enter a reason for deactivation.",
      "maritalStatusInvalid": "Select a valid marital status.",
      "spouseAlreadyExists": "Only one active spouse is allowed for this employee."
    },
    "confirmations": {
      "removeInsurance": "Turning insurance off removes the employee's active insurance state. Continue?",
      "deactivateDependent": "Deactivate this dependent?",
      "reactivateDependent": "Reactivate this dependent?"
    },
    "messages": {
      "insuranceSaved": "Employee insurance details saved.",
      "insuranceSaveFailed": "Employee insurance details could not be saved.",
      "maritalStatusSaved": "Marital status updated.",
      "maritalStatusSaveFailed": "Marital status could not be updated.",
      "dependentAdded": "Dependent added successfully.",
      "dependentUpdated": "Dependent updated successfully.",
      "dependentSaveFailed": "Dependent could not be saved.",
      "dependentDeactivated": "Dependent deactivated.",
      "dependentDeactivateFailed": "Dependent could not be deactivated.",
      "dependentReactivated": "Dependent reactivated.",
      "dependentReactivateFailed": "Dependent could not be reactivated.",
      "loadFailed": "Employee insurance details could not be loaded.",
      "dependentsLoadFailed": "Dependents could not be loaded.",
      "profileUnavailable": "Insurance profile unavailable",
      "profileUnavailableDetail": "The insurance profile could not be found or you do not have access to it."
    }
  }
}
