{
  "sttLanguage": {
    "label": "Language",
    "ar": "Arabic",
    "en": "English",
    "hint": "Arabic covers every dialect and mixed speech. Pick English only for speech that is all English.",
    "arabicNative": "العربية",
    "help": {
      "ar": "Every Arabic dialect, and Fusha.",
      "en": "Only when everything said is in English."
    }
  },
  "common": {
    "errorTitle": "Error",
    "unknownError": "Unknown error",
    "connectionError": "Unable to connect to the server. Please check your internet connection.",
    "genericError": "Something went wrong. Please try again or contact support.",
    "tashkeel": {
      "label": "Tashkeel",
      "tip": "Adds the vowel marks, so every word is read as you mean it",
      "tipDisabled": "For Arabic text",
      "failed": "Could not add the marks. Please try again.",
      "nothing": "No words here need diacritics, so the text stays as written."
    },
    "contentFilter": {
      "inappropriate": "Sorry, the text contains inappropriate language. Please edit the text and try again."
    },
    "back": "Back",
    "cancel": "Cancel",
    "close": "Close",
    "delete": "Delete",
    "edit": "Edit",
    "loading": "Loading…",
    "rename": "Rename",
    "save": "Save"
  },
  "planDisplay": {
    "custom": "Custom for your workspace",
    "trialPrice": "Free",
    "trialPeriod": "no time limit",
    "trialNote": "No card needed to start",
    "startTrial": "Start free trial",
    "creditsEveryMonth": "{{credits}} credits every month",
    "trialCredits": "{{credits}} credits to start",
    "unlimitedCredits": "Unlimited credits"
  },
  "landing": {
    "header": {
      "brandHomeAria": "EchoNova home",
      "backToDashboardAria": "Back to Dashboard",
      "back": "Back",
      "signOutAria": "Sign Out",
      "signOut": "Sign Out",
      "logInAria": "Log In",
      "logIn": "Log In",
      "startFreeTrialAria": "Try For Free",
      "startFreeTrial": "Try For Free",
      "goToDashboardAria": "Go to Dashboard",
      "goToDashboard": "Go to Dashboard",
      "toggleNavigationAria": "Toggle navigation",
      "menuAlt": "Menu",
      "closeAlt": "Close",
      "brandAlt": "EchoNova"
    },
    "footer": {
      "logoAlt": "logo",
      "socialAlt": "social",
      "copyright": "© {{year}} EchoNova AI L.L.C-FZ. All rights reserved.",
      "address": "Meydan Grandstand, 6th floor, Meydan Road, Nad Al Sheba, Dubai, U.A.E.",
      "ownership": "All content, trademarks and software on this site are the property of EchoNova AI L.L.C-FZ.",
      "products": "Products",
      "medicalData": "Medical Data",
      "audioIntelligence": "Audio Intelligence",
      "streetLevelInsight": "Street-Level Insight",
      "company": "Company",
      "about": "About",
      "termsOfUse": "Terms of Use",
      "privacyPolicy": "Privacy Policy",
      "contact": "Contact",
      "other": "Other",
      "apiDocumentation": "API Documentation",
      "pricing": "Pricing"
    },
    "howItWorks": {
      "eyebrow": "HOW IT WORKS",
      "heading": "From Raw To Ready In Minutes. See EchoNova In Action",
      "uploadOrConnect": "Upload Or Connect",
      "uploadOrConnectDescription": "Bring Your Own Data Or Sync Directly From Cloud Storage Or APIs.",
      "letTheAiWork": "Let The AI Work",
      "letTheAiWorkDescription": "Our Models Automatically Detect, Classify, And Structure Your Data.",
      "reviewAndRefine": "Review & Refine",
      "reviewAndRefineDescription": "Use Our Intuitive Tools To Validate, Adjust, Or Enrich The Output As Needed."
    },
    "faqs": {
      "heading": "FAQS",
      "trialBannerAriaLabel": "Trial banner",
      "startTrialNow": "Start Your Free Trial Now!",
      "ctaHeadline": "Streamline Your Annotation Pipeline Instantly",
      "startFreeTrial": "Start Free Trial",
      "medicalDataTitle": "Medical Data",
      "medicalDataSummary": "From radiology to clinical conversations, we power HIPAA-compliant annotation workflows with domain-specific accuracy.",
      "audioIntelligenceTitle": "Audio Intelligence",
      "audioIntelligenceSummary": "Transcribe, diarize, and label complex audio with model-assisted workflows designed for scale.",
      "streetLevelInsightTitle": "Street-Level Insight",
      "streetLevelInsightSummary": "High-precision annotations for geospatial and vision datasets across varied environments."
    },
    "joinAnnotator": {
      "eyebrow": "Join As Annotator",
      "heading": "Want To Work With EchoNova?",
      "ctaButton": "Join As Annotator",
      "ctaAriaLabel": "Join as an annotator",
      "workGloballyTitle": "Work Globally",
      "workGloballySubtitle": "Join Annotators From Over 50 Countries Worldwide",
      "competitivePayTitle": "Competitive Pay",
      "competitivePaySubtitle": "Earn Based On Your Expertise And Performance",
      "flexibleScheduleTitle": "Flexible Schedule",
      "flexibleScheduleSubtitle": "Work When You Want, As Much As You Want",
      "iconAltSuffix": "icon"
    },
    "models": {
      "eyebrow": "Models",
      "heading": "Built For Real-World Complexity. Optimized For Scale.",
      "playAlt": "Play",
      "freeTrialPrompt": "Start Your Free Trial Now!",
      "startFreeTrial": "Start Free Trial",
      "previousAlt": "Previous",
      "nextAlt": "Next",
      "medicalTitle": "Medical Data",
      "medicalDescription": "From Radiology To Clinical Conversations, We Power HIPAA-Compliant Annotation Workflows With Domain-Specific Accuracy.",
      "audioTitle": "Audio Intelligence",
      "audioDescription": "Turn Speech Into Structured Data Across Dialects, Environments, And Formats, From Call Centers To Podcasts.",
      "streetTitle": "Street-Level Insight",
      "streetDescription": "Label Multilingual Street Signs, Urban Footage, And Sensor-Rich Video To Train Next-Gen Mobility And Smart City Systems."
    },
    "solutions": {
      "walkthroughEyebrow": "Walkthrough",
      "walkthroughHeading": "Streamline Your Annotation Pipeline Instantly",
      "playButtonAlt": "Play",
      "freeTrialPrompt": "Start Your Free Trial Now!",
      "freeTrialButton": "Start Free Trial",
      "eyebrow": "Our Solutions",
      "heading": "Built For Real-World Complexity. Optimized For Scale.",
      "annotationTitle": "Echonova For Annotation",
      "annotationDescription": "Bring your own data or sync directly from cloud storage or APIs.",
      "annotationImageAlt": "Annotation tool image",
      "aiAudioTitle": "Echonova AI Audio",
      "aiAudioDescription": "Models automatically detect, classify, and structure your data.",
      "aiAudioImageAlt": "AI audio tool image",
      "learnMore": "Learn More"
    },
    "audioPlayer": {
      "playAlt": "Play",
      "pauseAlt": "Pause"
    },
    "audioRecorder": {
      "stopAlt": "Stop",
      "playAlt": "Play",
      "returnToSamples": "Return to Demo Samples",
      "transcribing": "Transcribing...",
      "transcribe": "Transcribe",
      "record": "Record",
      "errorFileSize": "Recording size exceeds maximum limit of {{maxSize}}MB. Please record a shorter audio.",
      "errorMicrophoneAccess": "Failed to access microphone. Please check permissions and try again.",
      "errorNoAudioToPlay": "No recorded audio to play.",
      "errorPlayback": "Error playing recorded audio. Please try again.",
      "errorNoAudioToTranscribe": "No recorded audio to transcribe.",
      "errorMaxDuration": "Recording automatically stopped. Maximum duration is {{maxDuration}} seconds."
    },
    "stt": {
      "transcribing": "Transcribing...",
      "transcribingSubtext": "Please wait while we transcribe your audio",
      "cancel": "Cancel",
      "audioContext": "Audio Context",
      "uploadAudioFile": "Upload Audio File",
      "microphoneAlt": "microphone",
      "record": "Record",
      "startingTranscription": "Starting transcription...",
      "transcriptionCompleted": "Transcription completed!",
      "transcriptionFailed": "Transcription failed",
      "transcriptionFailedRetry": "Transcription failed. Please try again."
    },
    "tts": {
      "generating": "Generating...",
      "generatingSubtext": "Please wait while we generate your audio",
      "cancel": "Cancel",
      "sampleTextLabel": "Sample Text",
      "infoIconAlt": "Info",
      "textareaPlaceholder": "Enter your text here...",
      "dialectAriaLabel": "Dialect",
      "playIconAlt": "play",
      "stopIconAlt": "stop",
      "downloading": "Downloading...",
      "download": "Download"
    },
    "ttsSttTutorial": {
      "headingLine1": "All-In-One Annotation: Audio,",
      "headingLine2": "Images, And Speech",
      "subheading": "Seamlessly annotate images, transcribe audio, and bring text to life with integrated speech features.",
      "textToSpeech": "Text to Speech",
      "speechToText": "Speech to Text"
    },
    "voiceSelector": {
      "heading": "Make The Perfect Speech For Any Moment",
      "playAlt": "Play",
      "pauseAlt": "Pause",
      "languageFushaArabic": "Fusha Arabic",
      "languageMasriArabic": "Masri Arabic",
      "languageSaudiArabic": "Saudi Arabic",
      "echonovaSounds": "Echonova Sounds",
      "pauseVoice": "Pause",
      "playVoice": "Play"
    },
    "taskInstructions": {
      "title": "Task Instruction",
      "subtitle": "Please follow these instructions before starting",
      "startTaskButton": "Start The Task",
      "startTaskAriaLabel": "Start the annotation task",
      "errors": {
        "mustShareEntireScreen": "You must share Entire Screen to start the exam.",
        "multipleScreens": "You Cannot use multible screen",
        "captureCancelled": "Screen capture was cancelled or denied.",
        "noScreenSource": "No screen source available.",
        "captureBlocked": "Capture is blocked by another app or system policy.",
        "permissionDenied": "Permission denied."
      },
      "cameraMicPrompt": "Please turn on your camera and microphone before starting."
    },
    "cameraPreview": {
      "regionLabel": "Camera preview section",
      "title": "Camera Preview",
      "feedPlaceholderLabel": "Camera feed placeholder",
      "placeholderIconAlt": "Camera placeholder icon",
      "retry": "Retry",
      "permissionHint": "Camera preview will appear here after you grant permission.",
      "micMeterLabel": "Microphone level meter",
      "micTest": "Microphone Test",
      "micWorking": "Working",
      "micSpeakToTest": "Speak to test...",
      "errorTitle": "Error",
      "errorHint": "Please check permissions and try again.",
      "cameraSoundOff": "Camera/Sound Off",
      "cameraOff": "Camera Off",
      "soundOff": "Sound Off",
      "cameraSoundOn": "Camera/Sound On",
      "turnOnHint": "You should turn on the camera and microphone to start the task.",
      "activeHint": "Camera and microphone are active.",
      "toggleMic": "Toggle microphone",
      "toggleCamera": "Toggle camera",
      "errorPermissionDenied": "Permission denied. Please allow camera/microphone access.",
      "errorNotFound": "No {{device}} found.",
      "errorInUse": "{{device}} is in use by another application.",
      "errorUnableToStart": "Unable to start {{device}}.",
      "deviceCamera": "camera",
      "deviceMicrophone": "microphone"
    },
    "leftInstructions": {
      "regionLabel": "Task instructions",
      "cameraIconAlt": "Camera icon",
      "cameraTitle": "Your camera must remain ON and your face must be visible during the task.",
      "screenIconAlt": "Screen restriction icon",
      "screenTitle": "You cannot open or switch to other tabs while the task is running.",
      "recordingIconAlt": "Recording icon",
      "recordingTitle": "This session will be recorded for analysis and quality improvement."
    },
    "nav": {
      "models": "Models",
      "howItWorks": "How It Works",
      "walkthrough": "Walkthrough",
      "docs": "Docs",
      "joinAnnotator": "Join as Annotator"
    }
  },
  "exam": {
    "page": {
      "joinAsAnnotator": "Join as Annotator",
      "joinGlobalTeam": "Join Our Global Team Of Expert Annotators",
      "step": "Step",
      "personalInformation": "Personal Information",
      "simpleTask": "Simple Task",
      "reviewPeriod": "Review Period",
      "selectExam": "Select Exam",
      "chooseAnExam": "Choose an exam",
      "submitting": "Submitting...",
      "submit": "Submit",
      "startTheTest": "Start the test"
    },
    "rules": {
      "title": "Important Assessment Rules",
      "closeModal": "Close modal",
      "intro": "Please read these rules carefully before starting the assessment. You must follow all rules during the test.",
      "stayOnTabLabel": "Stay on this tab:",
      "stayOnTabText": "Do not switch to other tabs or windows during the assessment. Switching tabs will pause your assessment.",
      "screenSharingLabel": "Screen sharing required:",
      "screenSharingText": "You must share your entire screen. Using only one monitor is required.",
      "noNavigationLabel": "No navigation:",
      "noNavigationText": "Do not use browser back/forward buttons or navigate away from this page.",
      "oneSessionLabel": "Complete in one session:",
      "oneSessionText": "Once started, you must complete the assessment without closing or refreshing the page.",
      "stableInternetLabel": "Stable internet connection:",
      "stableInternetText": "Ensure you have a reliable internet connection throughout the assessment.",
      "quietEnvironmentLabel": "Quiet environment:",
      "quietEnvironmentText": "Find a quiet place with minimal distractions to focus on the assessment.",
      "cancel": "Cancel",
      "accept": "I Accept These Rules"
    },
    "audioTour": {
      "showTutorial": "Show tutorial"
    },
    "joinAudio": {
      "submitAssessment": "Submit Assessment",
      "submitting": "Submitting...",
      "incompleteTitle": "Incomplete Assessment",
      "incompleteMessage": "{{count}} of {{total}} question(s) are unanswered. You can go back and complete them, or submit as is.",
      "confirmSubmitMessage": "Are you sure you want to submit? This action cannot be undone and you will not be able to change your answers."
    },
    "joinImage": {
      "incompleteAssessmentTitle": "Incomplete Assessment",
      "submitAssessmentTitle": "Submit Assessment",
      "submitAssessmentMessage": "Are you sure you want to submit? This action cannot be undone and you will not be able to change your answers."
    },
    "leaveConfirm": {
      "title": "Leave site?",
      "message": "Changes you made may not be saved.",
      "leave": "Leave",
      "cancel": "Cancel"
    },
    "reviewPeriod": {
      "headingLine1": "Your Application Has Been",
      "headingLine2": "Successfully Submitted",
      "reviewMessage": "Great job! Our team will now carefully review your work to ensure quality and accuracy",
      "evaluationMessage": "You'll receive your final evaluation and next steps within 48 hours."
    },
    "tabSwitch": {
      "title": "Return to the assessment tab to continue",
      "subtitle": "You must stay on this tab during the assessment",
      "description": "Your progress has been paused. Switch back to this tab to resume."
    }
  },
  "auth": {
    "signUp": {
      "requestTitle": "Request Access",
      "requestSubtitle": "EchoNova is in private beta. Fill in your details and we'll review your request.",
      "requestButton": "Request access",
      "title": "Create Your Account",
      "subtitle": "Get started with EchoNova",
      "googleSigningIn": "Signing in with Google…",
      "googleButton": "Continue with Google",
      "microsoftSigningIn": "Signing in with Microsoft…",
      "microsoftButton": "Continue with Microsoft",
      "or": "OR",
      "usernameLabel": "Username",
      "usernamePlaceholder": "Choose a username",
      "usernameRequired": "Username is required.",
      "usernameMinLength": "Username must be at least 3 characters.",
      "nameLabel": "Full Name",
      "namePlaceholder": "Your full name",
      "nameRequired": "Full name is required.",
      "nameMinLength": "Full name must be at least 2 characters.",
      "emailLabel": "Email",
      "emailPlaceholder": "Enter your email",
      "emailRequired": "Email is required.",
      "emailInvalid": "Please enter a valid email address.",
      "passwordLabel": "Password",
      "passwordPlaceholder": "Enter your password",
      "hidePassword": "Hide password",
      "showPassword": "Show password",
      "ruleMinLength": "At least 8 characters",
      "ruleUppercase": "One uppercase letter",
      "ruleLowercase": "One lowercase letter",
      "ruleNumber": "At least one number",
      "ruleSpecialCharacter": "At least one special character",
      "submitButton": "Create Account",
      "agreementPrefix": "By creating an account, you agree to our",
      "agreementJoin": "and ",
      "termsOfService": "Terms of Service",
      "haveAccount": "Already have an account?",
      "signInLink": "Sign in",
      "googleErrorTitle": "Couldn't sign up with Google",
      "microsoftErrorTitle": "Couldn't sign up with Microsoft",
      "tryAgain": "Please try again.",
      "registrationSuccess": "Registration successful! Please check your email for verification code.",
      "signUpError": "An error occurred during sign up.",
      "logoAlt": "EchoNova",
      "oauthAgreementPrefix": "By continuing with Google or Microsoft, you agree to our"
    },
    "promo": {
      "decorativeAnimationAlt": "Decorative animation",
      "audioIntelligenceTitle": "Audio Intelligence",
      "audioIntelligenceDescription": "Turn speech into structured data across dialects, environments, and formats, from call centers to podcasts.",
      "medicalDataTitle": "Medical Data",
      "medicalDataDescription": "From radiology to clinical conversations, we power HIPAA-compliant annotation workflows with domain-specific accuracy.",
      "streetLevelInsightTitle": "Street-Level Insight",
      "streetLevelInsightDescription": "Label multilingual street signs, urban footage, and sensor-rich video to train next-gen mobility and smart city systems."
    },
    "forgotPassword": {
      "resetRequired": "Your account requires a password reset before you can sign in. Enter your email or username below to receive a reset link.",
      "sendFailed": "Failed to send reset link.",
      "genericSent": "If an account exists, we sent a reset link. Check your inbox.",
      "logoAlt": "EchoNova",
      "title": "Forgot your password?",
      "subtitle": "Enter your email or username and we'll email you a link to choose a new password.",
      "identifierLabel": "Email or Username",
      "identifierPlaceholder": "you@example.com",
      "identifierRequired": "Email or username is required.",
      "sending": "Sending…",
      "submit": "Send reset link",
      "rememberedPrompt": "Remembered it?",
      "signIn": "Sign In"
    },
    "resetPassword": {
      "logoAlt": "EchoNova",
      "invalidLinkTitle": "Invalid reset link",
      "invalidLinkDescription": "This password reset link is invalid or has expired. Please request a new one.",
      "requestNewLink": "Request New Reset Link",
      "linkExpiredTitle": "This link expired or was already used",
      "linkExpiredDescription": "For your security, each reset link works once and for a short time. Send a new link to continue.",
      "sendNewLink": "Send a new link",
      "title": "Reset Your Password",
      "subtitle": "Enter your new password below to complete the reset process.",
      "newPasswordLabel": "New Password",
      "newPasswordPlaceholder": "Enter your new password",
      "showPassword": "Show password",
      "hidePassword": "Hide password",
      "ruleMinLength": "At least 8 characters",
      "ruleUppercase": "One uppercase letter",
      "ruleLowercase": "One lowercase letter",
      "ruleNumber": "One number",
      "ruleSpecialCharacter": "One special character",
      "confirmPasswordLabel": "Confirm New Password",
      "confirmPasswordPlaceholder": "Confirm your new password",
      "confirmRequired": "Please confirm your password.",
      "passwordsMismatch": "Passwords do not match.",
      "submitting": "Resetting Password...",
      "submit": "Reset Password",
      "successTitle": "Password Reset!",
      "successDescription": "Your password has been updated successfully. You can now sign in with your new password.",
      "goToSignIn": "Go to Sign In",
      "genericError": "An error occurred during password reset.",
      "signInSuccessMessage": "Your password has been reset successfully! You can now sign in with your new password."
    },
    "verifyEmail": {
      "logoAlt": "EchoNova",
      "verifying": "Verifying your email...",
      "checkEmailTitle": "Check your email",
      "checkEmailSubtitle": "We sent a verification code to your inbox. Enter it below to activate your account.",
      "verifyEmailTitle": "Verify your email",
      "verifyEmailSubtitle": "Enter the code we emailed you to confirm your account.",
      "usernameLabel": "Email or Username",
      "usernameRequired": "Email or username is required.",
      "codeLabel": "Verification Code",
      "codePlaceholder": "6-digit code",
      "codeRequired": "Verification code is required.",
      "verifyingButton": "Verifying...",
      "verifyButton": "Verify Email",
      "resendingButton": "Resending...",
      "resendButton": "Resend Confirmation Email",
      "successTitle": "Email Verified!",
      "successSubtitle": "Your account has been confirmed successfully. You can now sign in and access your dashboard.",
      "goToSignIn": "Go to Sign In",
      "failedTitle": "Verification Failed",
      "backToSignIn": "Back to Sign In",
      "resendSuccess": "A new verification code has been sent to your email.",
      "resendError": "Failed to resend verification code.",
      "verifyError": "Email verification failed.",
      "signInPrompt": "Your account has been verified. You can now sign in.",
      "confirmTitle": "Confirm Your Email",
      "confirmBody": "We've sent a verification code to {{email}}. If you don't see it within 5 minutes, please check your spam or click resend.",
      "confirmBodyGeneric": "Enter the verification code we emailed you. If you don't see it within 5 minutes, please check your spam or click resend.",
      "otpLabel": "OTP",
      "stillNoOtp": "Still didn't receive the OTP?",
      "resendShort": "Resend",
      "resendIn": "Resend ({{seconds}})",
      "haveAccount": "Already have an account?",
      "signInLink": "Sign In"
    },
    "checkEmail": {
      "title": "Create An Account",
      "subtitle": "OTP sent to your email",
      "body": "We've sent a verification code to {{email}}. If you don't see it within 5 minutes, please check your spam or click resend.",
      "resend": "Resend",
      "resendIn": "Resend ({{seconds}})",
      "resending": "Resending...",
      "resent": "A new code has been sent to your email.",
      "resendError": "We couldn't resend the code. Please try again.",
      "footerPrompt": "Already have an account?",
      "footerLink": "Sign In"
    },
    "requestSent": {
      "title": "Request Sent",
      "subtitle": "Thanks for your interest in EchoNova",
      "body": "We'll review your request and email you as soon as it's approved. Then sign in with the email and password you just chose.",
      "footerPrompt": "Already approved?",
      "footerLink": "Sign In"
    },
    "accountClosed": {
      "title": "Your account is closed",
      "body": "We emailed you a link to export your data. It works until {{date}}. After that we delete your data, and it cannot be restored.",
      "bodyNoDate": "We emailed you a link to export your data. It works for 30 days. After that we delete your data, and it cannot be restored.",
      "mistake": "Closed it by mistake? Write to privacy@echonova.ai before then, and we can reopen it.",
      "home": "Go to echonova.ai"
    },
    "oauthCallback": {
      "logoAlt": "EchoNova",
      "completing": "Completing sign in...",
      "noCode": "No authorization code was received.",
      "cancelledOrFailed": "Sign in was cancelled or failed.",
      "sessionExpired": "Your sign-in session expired. Please try again.",
      "authFailed": "Authentication failed. Please try again.",
      "signInErrorTitle": "Couldn't complete sign in"
    },
    "onboarding": {
      "back": "Back",
      "next": "Next",
      "start": "Start",
      "saving": "Saving...",
      "saveError": "Failed to save your preferences.",
      "stepOf": "Step {{step}} of {{total}}",
      "pickOne": "Pick one",
      "heardAboutUsQuestion": "How did you hear about EchoNova?",
      "heardFriendsSchool": "Friends or school",
      "heardNews": "In the news",
      "heardNewsletterBlog": "Newsletter or blog",
      "heardWork": "From work",
      "heardPodcast": "Podcast",
      "heardGoogle": "Google",
      "heardFacebook": "Facebook",
      "heardYoutube": "YouTube",
      "heardX": "X",
      "heardTiktok": "TikTok",
      "heardLinkedin": "LinkedIn",
      "heardInstagram": "Instagram",
      "heardDontRemember": "Don’t remember",
      "heardOther": "Other",
      "personaQuestion": "Which one describes you best?",
      "personaPersonalUse": "Personal use",
      "personaCreator": "Creator",
      "personaContentBusiness": "Content business",
      "personaVoiceActor": "Voice actor",
      "personaEngineer": "Engineer",
      "personaMarketer": "Marketer",
      "personaEducation": "Education",
      "personaOther": "Other",
      "intendedUseQuestion": "What would you like to do with EchoNova?",
      "intendedUseSubtitle": "Select all that apply",
      "intendedSpeechToText": "Speech to Text",
      "intendedSpeechToTextNote": "Turn calls and recordings into text",
      "intendedTextToSpeech": "Text to Speech",
      "intendedTextToSpeechNote": "Give any text a natural Arabic voice",
      "intendedSoundCleaning": "Sound Cleaning",
      "intendedSoundCleaningNote": "Remove noise and polish recordings",
      "intendedVoiceCloning": "Voice Cloning",
      "intendedVoiceCloningNote": "Create a voice from your own recording",
      "intendedEchoReader": "EchoReader",
      "intendedEchoReaderNote": "Listen to your documents read aloud",
      "intendedAiAgents": "AI Agents",
      "intendedAiAgentsNote": "Build voice agents for calls and chat"
    },
    "social": {
      "soon": "Soon"
    },
    "errors": {
      "oauthSignInFailed": "Sign-in failed.",
      "oauthStateMismatch": "OAuth state mismatch.",
      "invalidCode": "That code is not correct. Check it and try again.",
      "codeExpired": "That code has expired. Request a new one.",
      "tooManyAttempts": "Too many attempts. Wait a little, then try again.",
      "wait": "Please wait a moment before trying again.",
      "hourlyLimit": "You reached the hourly limit for codes. Try again later.",
      "tooManySignIns": "Too many sign-in attempts. Try again later.",
      "invalidCredentials": "The email, username or password is not correct.",
      "awaitingApproval": "Your account is awaiting approval. We will email you when it is ready.",
      "accountClosed": "This account is closed. To reopen it within 30 days of closing, write to privacy@echonova.ai.",
      "verificationRequired": "Verify your email first. Enter the code we sent you.",
      "suspended": "This account is suspended. Contact support for help.",
      "alreadyConfirmed": "This email is already verified. You can sign in.",
      "duplicateEmail": "An account with this email already exists.",
      "useOriginalMethod": "This email is registered with a different sign-in method. Use the one you first signed up with.",
      "duplicateUsername": "This username is already taken.",
      "network": "We could not reach the server. Check your connection and try again.",
      "generic": "Something went wrong. Please try again.",
      "weakPassword": "Password must be at least 8 characters and include an uppercase letter, a lowercase letter, a number and a special character."
    },
    "signIn": {
      "awaitingApproval": "Your access request is waiting for approval. We'll email you as soon as it's approved.",
      "heading": "Welcome Back",
      "subheading": "Sign in to your EchoNova account",
      "googleLoading": "Signing in with Google…",
      "googleButton": "Continue with Google",
      "microsoftLoading": "Signing in with Microsoft…",
      "microsoftButton": "Continue with Microsoft",
      "or": "OR",
      "identifierLabel": "Email or Username",
      "identifierPlaceholder": "Enter your email or username",
      "identifierRequired": "Email or username is required.",
      "passwordLabel": "Password",
      "passwordPlaceholder": "Enter your password",
      "passwordRequired": "Password is required.",
      "passwordMinLength": "Password must be at least 8 characters.",
      "submit": "Sign in",
      "forgotPassword": "Forgot Your Password?",
      "forgotPasswordAria": "Forgot your password?",
      "noAccount": "Don’t have an account?",
      "createAccount": "Create account",
      "hidePassword": "Hide password",
      "showPassword": "Show password",
      "googleSignInErrorTitle": "Couldn't sign in with Google",
      "microsoftSignInErrorTitle": "Couldn't sign in with Microsoft",
      "tryAgain": "Please try again.",
      "genericError": "An error occurred during sign in.",
      "accountReady": "Your account is ready. Sign in to continue.",
      "oauthAgreementPrefix": "If you are new, continuing with Google or Microsoft creates your account, and you agree to our"
    },
    "mfaVerify": {
      "heading": "Two-factor authentication",
      "subheading": "Enter the code from your authenticator app.",
      "codeLabel": "Authentication code",
      "codeHint": "Enter the code from your app, or use a recovery code.",
      "submit": "Verify",
      "invalidCode": "Invalid authentication code.",
      "backToSignIn": "Back to sign in",
      "recoveryLabel": "Recovery code",
      "useRecoveryCode": "Lost your device? Use a recovery code",
      "useAppCode": "Use your authenticator app instead",
      "recoverySubheading": "Enter your recovery code."
    },
    "mfaReenroll": {
      "heading": "Set up two-factor authentication",
      "subheading": "Your account requires an authenticator app. Scan the QR code below to continue.",
      "settingUp": "Setting up two-factor authentication…",
      "scanInstruction": "Scan this QR code with your authenticator app, then enter the 6-digit code it shows.",
      "cantScan": "Can't scan? Enter this setup key manually",
      "copy": "Copy",
      "copied": "Copied",
      "qrCodeAlt": "Two-factor authentication QR code",
      "codeLabel": "Authentication code",
      "confirm": "Confirm",
      "invalidCode": "Invalid authentication code.",
      "setupError": "Couldn't start setup. Please try again.",
      "recoveryCodesTitle": "Save your recovery codes",
      "recoveryCodesDesc": "Store these codes somewhere safe. They are shown only once. Each code works one time if you lose access to your authenticator app. Anyone with a code can pass two-factor, so keep them private.",
      "copyAll": "Copy all",
      "copyFailed": "Could not copy. Select the codes and copy them by hand.",
      "recoverySaved": "I saved these codes somewhere safe",
      "download": "Download",
      "done": "Done"
    }
  },
  "dash": {
    "echoReader": {
      "kicker": "EchoReader · library",
      "heroTitle": "Any document, read aloud",
      "lead": "Bring a file, a link or your own text. Review what was read from it, choose a voice from here, and listen. The passage being read stays marked on the page, and your place is kept.",
      "import": {
        "tabsAria": "Add to the library",
        "pasteText": "Paste text",
        "uploadFile": "Upload a file",
        "webLink": "Web link",
        "textPlaceholder": "الصق النص هنا…",
        "textAria": "Text to read",
        "titlePlaceholder": "Title (optional)",
        "titleAria": "Title",
        "count": "{{n}} / 200,000 characters",
        "tooLong": "That is more than 200,000 characters. Split it into two documents.",
        "tryArabic": "Try an Arabic passage",
        "add": "Add to library",
        "tryText": "الإمارات أرضٌ تعلّمت أن تصغي: إلى البحر حين يهدأ، وإلى الصحراء حين تتكلم الريح، وإلى أهلها حين يروون حكاياتهم في المساء.\n\nهذه فقرة قصيرة لتجربة القراءة. راجعها، ثم اختر صوتاً، واستمع.",
        "tryTitle": "فقرة للتجربة",
        "drop": "Drop a file, or click to browse",
        "uploadAria": "Upload a file",
        "limits1": "Up to 25 MB and 200,000 characters · PDFs up to 300 pages",
        "limits2": "Scanned or Arabic PDF pages are read as images, up to 20 pages per file",
        "limits3": "EPUB: text books only, no DRM, no fixed layout",
        "urlAria": "Link to a public web page",
        "linkNote": "Public pages only. Some sites do not allow automated reading. If that happens, paste the text or upload the file instead.",
        "foot": "Adding a document reads its text only. No audio is made until you press Start listening.",
        "fileType": "This file type is not supported. Use TXT, Markdown, PDF, DOCX, EPUB, PNG, JPG or WEBP.",
        "fileSize": "This file is larger than 25 MB.",
        "badLink": "Enter a full public link that starts with https://",
        "imported": "Imported. Preparing the text.",
        "noCredits": "You do not have enough credits to add a document. Top up to continue.",
        "full": "Your library is full. Delete a document to add another.",
        "busy": "EchoReader is busy. Try again in a moment.",
        "failed": "This could not be added. Try again."
      },
      "cont": {
        "kicker": "Continue listening",
        "meta": "{{format}} · passage {{seq}} of {{n}} · saved {{at}}",
        "resume": "▶  Resume listening"
      },
      "how": {
        "kicker": "How it works",
        "s1b": "Review the text.",
        "s1": " See the sections and every passage before any audio is made.",
        "s2b": "Choose a voice.",
        "s2": " Any dialect in the library, Emirati first.",
        "s3b": "Listen.",
        "s3": " Audio is made a few passages ahead as you go, and your place is saved."
      },
      "lib": {
        "kicker": "Your library",
        "search": "Search your library",
        "filterAria": "Filter",
        "all": "All",
        "listen": "Listening",
        "review": "Ready to review",
        "prep": "Preparing",
        "bad": "Could not read",
        "readingPage": "Reading the page",
        "readingFile": "Reading the file",
        "pasteInstead": "Paste or upload instead",
        "passageOf": "Passage {{seq}} of {{n}}",
        "noAudio": "No audio yet",
        "noVoice": "No voice yet",
        "more": "More for {{title}}",
        "emptyTitle": "Your library is empty.",
        "emptyBody": "Paste text, upload a file or add a link above.",
        "noMatchTitle": "Nothing matches.",
        "noMatchBody": "Try another filter or search.",
        "loadFailed": "Your library could not be loaded. Try again."
      },
      "menu": {
        "review": "Review content",
        "listen": "Resume listening",
        "voice": "Choose a voice",
        "paste": "Paste the text instead",
        "del": "Delete"
      },
      "status": {
        "processing": "Preparing text",
        "readyText": "Ready to review",
        "generatingAudio": "Preparing audio",
        "readyPartial": "Listening",
        "ready": "Ready to listen",
        "failed": "Could not read"
      },
      "doc": {
        "back": "← Library",
        "delete": "Delete",
        "stepsAria": "Steps",
        "stepReview": "Review content",
        "stepVoice": "Choose a voice",
        "stepListen": "Listen",
        "sections": "Sections",
        "outlineNote": "Taken from the document's headings. A section is not always a chapter.",
        "untitled": "Untitled section",
        "nPassages": "{{n}} passages",
        "nBlocks": "{{n}} blocks",
        "reviewKicker": "Review the text before you listen",
        "textShownAria": "Text shown",
        "original": "Original text",
        "speech": "Prepared speech text",
        "notReadAloud": "Not read aloud · {{reason}}",
        "contentNotes": "Content notes",
        "startHere": "Start listening here",
        "playHere": "Play from here"
      },
      "facts": {
        "title": "This document",
        "source": "Source",
        "format": "Format",
        "pages": "Pages",
        "reflowable": "Reflowable",
        "author": "Author",
        "sections": "Sections",
        "words": "Words",
        "passages": "Passages",
        "readAloud": "Read aloud",
        "readAloudVal": "{{a}} of {{b}} blocks",
        "notePage": "These counts describe what was recovered from the page. Greyed blocks stay on screen but are not read aloud.",
        "noteFile": "These counts describe what was recovered from the file. Greyed blocks stay on screen but are not read aloud.",
        "toVoice": "Choose a voice  →",
        "free": "No audio is made yet. Reviewing is free."
      },
      "voice": {
        "kicker": "Voice",
        "all": "All voices",
        "dialectAria": "Dialect",
        "startFrom": "Start from",
        "beginning": "From the beginning",
        "fromPassage": "From passage {{n}}",
        "settings": "Voice settings",
        "hide": "Hide",
        "summary": "Speed {{s}} · guidance {{g}} · quality {{q}}",
        "speed": "Speaking speed",
        "speedHint": "How fast the voice is made to speak. Changing it makes new audio. For a quick change while listening, use the speed on the player instead.",
        "guidance": "Guidance",
        "guidanceHint": "How closely the voice follows the text. Leave at 2 unless you are tuning.",
        "quality": "Quality",
        "qualityHint": "Steps. More steps, slower, cleaner.",
        "tashkeelHint": "Adds the vowel marks before reading. Best for Fusha.",
        "readyTitle": "Ready when you are",
        "voice": "Voice",
        "start": "Start",
        "startVal": "Passage {{a}} of {{b}}",
        "firstAudio": "First audio",
        "firstAudioVal": "2 passages",
        "about": "About",
        "credits": "{{n}} credits",
        "note": "Browsing voices costs nothing. Audio is made when you press Start listening, a few passages at a time as you listen, never the whole document at once.",
        "startListening": "▶  Start listening",
        "newVoice": "A new voice makes new audio. Audio already made with {{name}} is kept.",
        "backToText": "← Back to the text",
        "pickTitle": "Choose a voice to read",
        "changeTitle": "Change the reading voice",
        "startFailed": "Listening could not start. Try again."
      },
      "listen": {
        "resumeB": "Pick up where you left off.",
        "resumeRest": " Passage {{seq}} of {{n}}, {{at}} in, with {{voice}}. Saved {{saved}}.",
        "resume": "▶  Resume listening",
        "fromStart": "Start from the beginning",
        "playerAria": "Player",
        "now": "Now listening",
        "change": "Change voice",
        "passage": "Passage",
        "of": "of",
        "allReady": "all ready",
        "nReady": "{{n}} ready",
        "saved": "Saved {{at}}",
        "savedAsYouGo": "Your place is saved as you listen",
        "savedPos": "Saved · passage {{n}} · {{t}}",
        "lineAria": "Position in this passage",
        "preparingPassage": "Preparing passage {{n}}",
        "prev": "Previous passage",
        "next": "Next passage",
        "play": "Play",
        "pause": "Pause",
        "speedAria": "Player speed",
        "speedTip": "Player speed. No new audio.",
        "nowReading": "Now reading",
        "preparingNext": "Preparing the next passage",
        "finished": "Finished. That was the last passage.",
        "outOfCreditsB": "You are out of credits.",
        "outOfCredits": " Listening stopped. Top up to keep listening.",
        "topUp": "Top up",
        "audioFailed": "This passage could not be played. Try the next one."
      },
      "state": {
        "preparing": "Preparing the text",
        "prepPage": "EchoReader reads the page, finds its sections and prepares the text for speech. No audio is made yet. You can leave this page. The document stays in your library.",
        "prepFile": "EchoReader reads the file, finds its sections and prepares the text for speech. No audio is made yet. You can leave this page. The document stays in your library.",
        "received": "Received",
        "readingPage": "Reading the page",
        "readingFile": "Reading the file",
        "structure": "Finding sections and headings",
        "speech": "Preparing the speech text",
        "couldNot": "Could not read",
        "pasteText": "Paste the text",
        "uploadFile": "Upload the file",
        "requestId": "If you contact support, send this request ID: {{id}}. Do not send the document itself.",
        "notFound": "Not found",
        "notFoundTitle": "This document is not in your library",
        "notFoundBody": "It may have been deleted.",
        "backToLibrary": "Back to the library",
        "ready": "The text is ready to review."
      },
      "del": {
        "title": "Delete this document",
        "body": "{{title}} and every voice made for it leave your library now. Listening stops. This cannot be undone.",
        "cancel": "Cancel",
        "confirm": "Delete",
        "done": "Deleted.",
        "failed": "This could not be deleted. Try again."
      },
      "reason": {
        "marginPageNumber": "Page number in the margin",
        "pageEdgeNumber": "Page number at the page edge",
        "pageFurniture": "Page header or footer",
        "repeatedMarginText": "Repeated text at the page edge",
        "footnote": "Footnote",
        "tableOfContents": "Table of contents",
        "noText": "No text to read",
        "bareNumber": "A number on its own",
        "other": "Not part of the text"
      },
      "warning": {
        "epubImages": "Images in the book have no text. They are shown, not read aloud.",
        "epubNonLinear": "Part of the book is outside the reading order and is not included.",
        "epubScripts": "Scripts in the book are ignored.",
        "epubEmpty": "Empty pages in the book are skipped.",
        "epubExternal": "Links to content outside the book are not followed.",
        "unreadable": "Some text could not be read reliably.",
        "complexTable": "A complex table is read as the text it holds.",
        "footnote": "A footnote could not be placed in the text.",
        "acronym": "Acronyms are read letter by letter.",
        "code": "Codes are read character by character.",
        "email": "Email addresses are read aloud.",
        "url": "Web addresses are read by their site name.",
        "dateOrder": "Dates are read as day, then month.",
        "invalidDate": "A date that could not be understood is read as written.",
        "invalidTime": "A time that could not be understood is read as written.",
        "identifier": "Technical identifiers are read as written."
      },
      "error": {
        "botProtected": {
          "title": "This site does not allow automated reading.",
          "body": "The page blocks readers like ours. EchoReader does not get around that. Paste the text or upload the file instead."
        },
        "robots": {
          "title": "This site asks not to be read automatically.",
          "body": "Paste the text or upload the file instead."
        },
        "unreachable": {
          "title": "We could not reach this page.",
          "body": "Check the link, or paste the text or upload the file instead."
        },
        "emptyPage": {
          "title": "This page has no text to read.",
          "body": "Paste the text or upload the file instead."
        },
        "pdfPages": {
          "title": "This PDF has more than 300 pages.",
          "body": "Split it into smaller files and add them one by one."
        },
        "vlmPages": {
          "title": "This file has more than 20 scanned or Arabic pages.",
          "body": "Split it into smaller files, or paste the text instead."
        },
        "encrypted": {
          "title": "This file is protected.",
          "body": "Remove the password or DRM, or paste the text instead."
        },
        "fixedLayout": {
          "title": "This EPUB has a fixed layout.",
          "body": "EchoReader reads text books only. Paste the text instead."
        },
        "tooLong": {
          "title": "This file has more than 200,000 characters.",
          "body": "Split it into smaller files and add them one by one."
        },
        "noText": {
          "title": "We found no text to read in this file.",
          "body": "Try another file, or paste the text instead."
        },
        "utf8": {
          "title": "This text file is not UTF-8.",
          "body": "Save it as UTF-8, or paste the text instead."
        },
        "tooLarge": {
          "title": "This file is larger than 25 MB.",
          "body": "Split it into smaller files and add them one by one."
        },
        "damaged": {
          "title": "This file could not be opened.",
          "body": "It may be damaged. Try another copy, or paste the text instead."
        },
        "generic": {
          "title": "We could not read this.",
          "body": "Try again, or paste the text instead."
        }
      }
    },
    "home": {
      "home": {
        "workspaceLabel": "Workspace",
        "greetingSeparator": ",",
        "goodMorning": "Good morning",
        "goodAfternoon": "Good afternoon",
        "goodEvening": "Good evening",
        "fallbackName": "there",
        "subtitle": "Write something and hear it in a voice from here. Drop a recording and read it back, or clean it."
      },
      "studio": {
        "errors": {
          "insufficientBalance": "You're out of credits. Add credits or change your plan to keep going.",
          "spendingLimit": "You've reached this month's spending limit. It resets next month.",
          "offline": "Can't reach the server. Check your connection and try again.",
          "addCredits": "Add credits"
        },
        "sectionLabel": "Live studio",
        "tabTts": "Text to Speech",
        "tabStt": "Speech to Text",
        "tabCleaning": "Sound Cleaning",
        "tabCloning": "Voice Cloning",
        "ttsLimit": "up to 5,000 characters",
        "previewHint": "Click a voice to hear it",
        "tagsLabel": "Tags",
        "tagsHintAdd": "click to add at the cursor",
        "tagsHintRemove": "− removes",
        "dialectLabel": "Dialect",
        "allVoices": "All voices",
        "chooseVoice": "Choose a voice",
        "generate": "Generate",
        "generating": "Generating…",
        "stop": "Stop",
        "pause": "Pause",
        "resume": "Resume",
        "characters": "characters",
        "creditsBefore": "about",
        "creditsAfter": "credits",
        "ttsError": "Something went wrong generating that audio.",
        "voicesError": "We couldn't load these voices.",
        "voicesRetry": "Try again",
        "sttHint": "Emirati, Gulf, Egyptian, Fusha, English",
        "sttDrop": "Drop an audio file, or click to browse",
        "or": "or",
        "record": "Record",
        "stopAndUse": "Stop & use",
        "requestingMic": "Requesting mic…",
        "preparingRecording": "Preparing…",
        "sttMeta": "One transcript back, in the dialect it was spoken",
        "noTranscript": "No speech was detected in this recording.",
        "transcribe": "Transcribe",
        "transcribing": "Transcribing…",
        "sttError": "Something went wrong transcribing that file.",
        "invalidFile": "That file isn't supported.",
        "cleaningHint": "voice stays, room goes",
        "cloningBar": "Voice Cloning · your voice, kept yours",
        "cloningDrop": "Drop a clean recording",
        "cloningHint": "10 to 30 seconds, one speaker",
        "cleaningFormatsHint": "MP3, WAV, FLAC, OGG/Opus, up to 1 hour",
        "cleaningDrop": "Drop a recording, or click to browse",
        "cleaningLimit": "Up to 200 MB",
        "preset": "Preset",
        "presets": {
          "studio": "Studio",
          "wind": "Wind",
          "radio": "Radio",
          "deep": "Deep"
        },
        "cleaningMetaTimeline": "Before and after on one timeline, then download",
        "cleaningMetaApi": "portal only today, API later",
        "cleaned": "Cleaned",
        "cleanAudio": "Clean audio",
        "uploading": "Uploading…",
        "cleaning": "Cleaning…",
        "cleaningError": "Something went wrong cleaning that file."
      },
      "recents": {
        "kicker": "Recents",
        "heading": "What you made",
        "openAssets": "Open Assets",
        "colText": "Text or file",
        "colVoice": "Voice",
        "colDialect": "dialect",
        "colWhen": "When",
        "colLength": "Length",
        "untitled": "Untitled",
        "emptyTitle": "Nothing here yet.",
        "emptyLead": "The first thing you generate lands here, with its voice, its date and a download. Recents keep the last thirty; Assets keeps everything.",
        "error": "We couldn't load your recents.",
        "justNow": "just now",
        "minutesAgo": "{{value}} min ago",
        "hoursAgo": "{{value}} hr ago",
        "yesterday": "Yesterday",
        "daysAgo": "{{value}} days ago"
      },
      "voicesPanel": {
        "kicker": "Voices",
        "heading": "Every voice is from somewhere",
        "lead": "Each voice was recorded by a native speaker of the dialect and tuned to its natural rhythm. Click a planet to listen.",
        "viewAll": "Open the Voice Library",
        "error": "We couldn't load voices.",
        "playAria": "Play a preview of {{name}}",
        "playSample": "▶ Play sample",
        "comingSoon": "Coming Soon"
      },
      "arrivingSoon": {
        "sectionLabel": "On the way",
        "kicker": "Coming soon",
        "title": "On the way.",
        "lead": "Five more tools, in this order.",
        "features": {
          "echoReader": "EchoReader",
          "dubbing": "Dubbing",
          "soundEffects": "Sound Effects",
          "audiobooks": "Audiobooks",
          "arabVoices": "Arab Voices"
        }
      },
      "voiceCloningCard": {
        "kicker": "Voice Cloning · live",
        "title": "Add your own voice.",
        "lead": "Record in your dialect, or upload a clean file of 10 to 30 seconds. The voice is yours, private to your workspace.",
        "cta": "Add a voice"
      }
    },
    "voices": {
      "addSheet": {
        "kicker": "Add a voice",
        "title": "Three ways in",
        "clone": {
          "title": "Clone from a recording",
          "text": "Record or upload 10 to 30 seconds of your voice. Private to this workspace.",
          "meta": "Live · a few seconds"
        },
        "design": {
          "title": "Design from a description",
          "text": "Describe a voice in words and hear it. Dialect, age, tone."
        },
        "remix": {
          "title": "Remix a library voice",
          "text": "Start from a library voice and shift the tone or the pace."
        },
        "soon": "Coming soon",
        "footer": "Every voice you add is private to your workspace."
      },
      "portal": {
        "library": "Library",
        "voices": "voices",
        "waysOfSpeaking": "ways of speaking",
        "hero": "Every voice has a hometown",
        "lead": "Each voice was recorded by someone from the place its dialect belongs to. Choose a voice, listen to it and use it in Text to Speech.",
        "addVoice": "Add a voice",
        "myVoices": "My voices",
        "earnings": "Earnings",
        "search": "Search a name, a tone or a use",
        "filters": "Filters",
        "sort": "Sort",
        "soon": "soon",
        "trending": "Popular",
        "mostUsed": "Most used",
        "theLibrary": "The library",
        "libraryTitle": "Every voice, by where it comes from",
        "libraryLead": "Names and one-line descriptions come directly from the current voice catalogue.",
        "picked": "Picked for the job",
        "useTitle": "Voices for what you build",
        "useLead": "The same voices, listed by what they were recorded for. Click a row to filter the library.",
        "defaultStyle": "Warm · Measured",
        "searchMine": "Search my voices",
        "mineNote": "Voices you added from the library. Only you see this list.",
        "mineEmptyTitle": "Nothing here yet.",
        "mineEmpty": "Voices you keep from the library land here.",
        "addedFromLibrary": "Added from the library",
        "comingSoon": "coming soon",
        "noMatch": "No voice matches.",
        "clearFilters": "Clear the filters",
        "clearAll": "Clear all",
        "loadError": "We couldn't load the voices.",
        "retry": "Try again",
        "voicesArrow": "{{count}} voices →",
        "sortBy": "Sort by",
        "sortNewest": "Newest",
        "sortName": "Name",
        "sortMostUsed": "Most used",
        "playSample": "Play a sample",
        "pauseSample": "Pause the sample",
        "play": "Play",
        "pause": "Pause",
        "stop": "Stop",
        "download": "Download the preview",
        "seek": "Playback position",
        "addToMine": "Add to My voices",
        "inMine": "In My voices",
        "removeFromMine": "Remove from My voices",
        "useInTts": "Use in Text to Speech",
        "addToAgent": "Add to an agent",
        "copyId": "Copy id",
        "idCopied": "Voice id copied",
        "similar": "Similar voices",
        "more": "More",
        "close": "Close",
        "usedBy": "Used by",
        "people": "{{count}} people",
        "voiceId": "Voice id",
        "filterGroups": {
          "gender": "Gender",
          "age": "Age",
          "tone": "Tone",
          "pace": "Pace"
        },
        "filterValues": {
          "female": "Female",
          "male": "Male",
          "young": "Young",
          "middle": "Middle",
          "elder": "Elder",
          "warm": "Warm",
          "calm": "Calm",
          "bright": "Bright",
          "serious": "Serious",
          "energetic": "Energetic",
          "measured": "Measured",
          "steady": "Steady",
          "fast": "Fast"
        },
        "uses": {
          "contactCentre": "Contact centre",
          "ivr": "IVR and announcements",
          "narration": "Narration and audiobooks",
          "news": "News and broadcast",
          "advertising": "Advertising",
          "social": "Social media",
          "education": "Education and explainers",
          "podcast": "Podcast and radio",
          "documentary": "Documentary",
          "children": "Stories for children",
          "calm": "Calm and meditation",
          "characters": "Characters and games"
        },
        "recordedByYou": "Recorded by you"
      },
      "voiceDetails": {
        "defaultSection": "Voices",
        "searchPlaceholder": "Type to search...",
        "loading": "Loading voice...",
        "notFound": "Voice not found."
      },
      "voicesPage": {
        "eyebrow": "EchoNova voice library",
        "title": "Voices, made for every story.",
        "subtitle": "Explore expressive Arabic and multilingual voices, preview every character, and choose the right sound for what you are building.",
        "libraryEyebrow": "Voice directory",
        "librarySubtitle": "Search the full catalogue, refine by language and character, then preview or use any voice.",
        "resultCount": "{{count}} voices",
        "voiceColumn": "Voice",
        "profileColumn": "Voice profile",
        "actionsColumn": "Actions",
        "allLanguages": "All Languages",
        "arabic": "Arabic",
        "allDialects": "All Dialects",
        "allGenders": "All Genders",
        "female": "Female",
        "male": "Male",
        "allVoicesAria": "All voices",
        "allVoices": "All Voices",
        "emptyTitle": "No voices match your filters",
        "emptyHint": "Try clearing the search or switching tabs."
      },
      "trendingVoices": {
        "sectionAria": "Trending voices",
        "title": "Trending Voices",
        "cardAria": "{{name}} trending voice",
        "avatarAlt": "{{name}} avatar",
        "flagAlt": "{{language}} flag",
        "removeFavorite": "Remove from favorites",
        "addFavorite": "Add to favorites",
        "pausePreview": "Pause voice preview",
        "playPreview": "Play voice preview",
        "playAlt": "Play"
      },
      "voicePlayerBar": {
        "avatarAlt": "{{name}} avatar",
        "back5s": "Back 5s",
        "closePlayer": "Close player",
        "downloadAudio": "Download audio",
        "forward5s": "Forward 5s",
        "pause": "Pause",
        "play": "Play",
        "playerLabel": "Voice preview player",
        "removeFromSaved": "Remove from saved",
        "saveVoice": "Save voice",
        "seek": "Seek voice preview",
        "volume": "Volume"
      },
      "voiceRow": {
        "avatarAlt": "{{name}} avatar",
        "removeFromSaved": "Remove from saved",
        "saveVoice": "Save voice",
        "useVoiceTooltip": "Use this voice",
        "useVoiceAria": "Use this voice in Text to Speech",
        "copied": "Copied!",
        "copyVoiceId": "Copy voice ID",
        "copiedAria": "Voice id copied",
        "copyVoiceIdAria": "Copy voice id",
        "usedByUsers": "Used by our customers",
        "moreActions": "More voice actions",
        "addToAgent": "Add to Agent",
        "tryVoice": "Try Voice",
        "shareVoice": "Share Voice"
      },
      "voiceFilters": {
        "searchPlaceholder": "Search voices, languages, dialects…",
        "clearSearch": "Clear search",
        "selectLanguage": "Select Language",
        "selectDialect": "Select Dialect",
        "selectGender": "Select Gender",
        "language": "Language",
        "dialect": "Dialect",
        "gender": "Gender",
        "noResults": "No results"
      },
      "languageCollections": {
        "sectionAria": "Curated language collections",
        "title": "Curated language collections",
        "previous": "Previous",
        "next": "Next",
        "cardAria": "{{title}} language collection",
        "flagAlt": "{{title}} flag"
      },
      "voiceDetailPanel": {
        "back5s": "Back 5s",
        "forward5s": "Forward 5s",
        "pausePreview": "Pause preview",
        "playPreview": "Play preview",
        "voiceIdLabel": "voice_id",
        "copied": "Copied",
        "copy": "Copy",
        "removeFavourite": "Remove from favourites",
        "addFavourite": "Add to favourites",
        "useInTts": "Use in TTS",
        "pickVoiceTitle": "Pick a voice",
        "pickVoiceHint": "Select any voice on the left to preview it and copy its ID."
      },
      "voiceTabs": {
        "allVoices": "All voices",
        "favourites": "Favourites",
        "explore": "Explore",
        "saved": "My Saved Voices"
      },
      "library": {
        "exploreTitle": "Explore Echonova",
        "voicesAccent": "Voices",
        "savedAccent": "My Saved",
        "searchLabel": "Search voices",
        "search": "Search for voice...",
        "savedSearch": "Search in your saved voices...",
        "type": "Type",
        "allTypes": "All types",
        "clear": "Clear filters",
        "spotlight": "Voices Spotlight - Mythological Storytelling",
        "viewAll": "View All",
        "exploreDialect": "Explore voices by dialect",
        "noMatches": "No voices match your filters",
        "noMatchesHint": "Try another search or clear the selected filters.",
        "noSaved": "No Saved Voices",
        "noSavedDialect": "No Saved Voices In This Dialect",
        "noSavedHint": "Save voices you like and they will appear here.",
        "exploreVoices": "Explore Voices",
        "backExplore": "Back to Explore",
        "voiceFiltersAria": "Voice filters",
        "voices": "Voices",
        "dialectSearch": "Search {{dialect}} voices...",
        "noDialectMatches": "No {{dialect}} voices match your search.",
        "comingSoon": "Coming Soon",
        "previous": "Previous",
        "next": "Next",
        "loadError": "Unable to load voices right now."
      },
      "needsCategories": {
        "sectionAria": "Voices categorized by needs",
        "title": "Carefully tailored to your needs",
        "previous": "Previous",
        "next": "Next",
        "cardAria": "{{title}} category",
        "iconAlt": "{{title}} icon",
        "podcast": {
          "title": "Podcast",
          "desc": "Professional voices for your podcast episodes"
        },
        "engagingCharacters": {
          "title": "Engaging Characters",
          "desc": "Bring your characters to life with expressive voices"
        },
        "epicVoices": {
          "title": "Epic Voices",
          "desc": "Powerful and dramatic voices for storytelling"
        },
        "kidsVoices": {
          "title": "Kids Voices",
          "desc": "Friendly and engaging voices for children"
        }
      },
      "addToAgent": {
        "title": "Add voice to agent",
        "subtitle": "Select an agent to add this voice to.",
        "searchAgents": "Search agents",
        "selected": "✓ Selected",
        "addError": "This voice was not added. Try again.",
        "loadError": "Your agents did not load. Try again.",
        "noAgents": "No agents found.",
        "voiceAgent": "Voice agent",
        "adding": "Adding…",
        "addVoice": "Add voice",
        "addedTitle": "Voice added",
        "addedMessage": "The voice was added to {{name}}."
      }
    },
    "stt": {
      "audioPlayer": {
        "download": "Download",
        "play": "Play",
        "pause": "Pause",
        "volume": "Volume",
        "downloadText": "Download Text",
        "back5": "Back 5 seconds",
        "forward5": "Forward 5 seconds"
      },
      "bottomActions": {
        "uploadPrompt": "Upload files to transcribe",
        "uploadButton": "Upload Audio File",
        "recordButton": "Record Audio"
      },
      "fileInfoPanel": {
        "fileInfoTab": "File Info",
        "fileType": "File Type",
        "duration": "Duration",
        "cost": "Cost",
        "showSpeakers": "Show Speakers",
        "downloadTranscribe": "Download Transcribe",
        "historyTab": "History",
        "historyView": "History view (same data as right panel)"
      },
      "historyPanel": {
        "title": "History",
        "emptyTitle": "No transcriptions yet",
        "emptySubtitle": "Your transcribed files will appear here",
        "transcribing": "Transcribing",
        "failed": "Failed",
        "downloadAria": "Download",
        "playAria": "Play",
        "loadMore": "Load more",
        "today": "Today",
        "yesterday": "Yesterday"
      },
      "recordingDialog": {
        "recording": "Recording",
        "autoStops": "Auto-stops in {{seconds}}s",
        "hint": "Speak clearly. Tap Stop when finished.",
        "cancel": "Cancel",
        "stopAndUse": "Stop & Use"
      },
      "transcribeDialog": {
        "title": "Transcribe File",
        "overLimit": "Audio must be ≤ {{max}}s. This file is longer.",
        "cancel": "Cancel",
        "confirm": "Transcribe"
      },
      "transcribingDialog": {
        "label": "Transcribing",
        "title": "Turning your audio into text",
        "subtitle": "This usually takes a few seconds."
      },
      "uploadDialog": {
        "title": "Transcribe File",
        "clickToUpload": "Click to Upload Audio File",
        "maxInfo": "Max {{duration}}, up to {{size}}",
        "maxDurationLabel": "1 hour",
        "fileTooLarge": "File is too large ({{size}} MB). Maximum allowed is {{max}}."
      },
      "workspace": {
        "transcribing": "Transcribing",
        "transcribingDescription": "We are working on transcribing the attached audio",
        "emptyState": "Upload files to transcribe",
        "duration": "Duration",
        "copied": "Copied",
        "copySegment": "Copy this segment",
        "copy": "Copy",
        "copiedToClipboard": "Segment copied to clipboard",
        "shareTitle": "EchoNova Transcript",
        "shareText": "Transcript",
        "shareFailed": "Share failed",
        "nothingToShare": "Nothing to share.",
        "couldNotCopy": "Could not copy.",
        "transcript": "Transcript",
        "speaker": "Speaker 1",
        "uploadedAudios": "Uploaded audios",
        "uploadNewAudio": "Upload new audio",
        "speak": "Speak",
        "transcriptFallback": "Your transcription will appear here."
      },
      "uploadSurface": {
        "ariaLabel": "Upload audio",
        "dropAudio": "Drop audio file here or click to browse",
        "maxLimits": "Up to {{duration}} or {{size}} per file",
        "or": "OR",
        "recordAudio": "Record audio",
        "fileTooLarge": "This file is larger than {{max}}.",
        "invalidFormat": "Please upload one of:"
      },
      "status": {
        "audioTooLong": "Audio must be {{max}} or shorter.",
        "fileProblem": "There is a problem with the uploaded file. Please try again.",
        "tryAgain": "Try again",
        "uploadingTitle": "Uploading your audio file",
        "uploading": "Uploading…",
        "processingHint": "Usually takes about 20 seconds",
        "listening": "Listening…"
      },
      "page": {
        "eyebrow": "Arabic speech intelligence",
        "title": "Speech to Text",
        "subtitle": "Turn speech into clean, accurate text while preserving the rhythm and nuance of every dialect.",
        "workspace": "Transcription studio",
        "inputHint": "Up to 1 hour, 150 MB",
        "readyLabel": "Ready to listen",
        "processingLabel": "Signal received",
        "emptyDescription": "Upload a recording or capture one now. EchoNova will return an editable transcript in moments.",
        "recordingNotSupported": "Recording not supported",
        "browserNoRecording": "Your browser does not support audio recording.",
        "mediaRecorderUnavailable": "MediaRecorder is not available in this browser.",
        "recordingFailed": "Recording failed",
        "couldNotProcess": "Could not process the recorded audio.",
        "microphonePermission": "Microphone permission is required.",
        "couldNotStartRecording": "Could not start recording.",
        "transcribeTitle": "Transcribe speech to text"
      }
    },
    "soundCleaning": {
      "page": {
        "title": "Sound Cleaning",
        "cleanTitle": "Clean your audio",
        "resultTitle": "Hear the difference"
      },
      "uploadSurface": {
        "ariaLabel": "Upload audio to clean",
        "dropAudio": "Drop a recording, or click to browse",
        "maxLimits": "Up to {{duration}} and {{size}} per file",
        "invalidFormat": "That file type is not supported. Use MP3, WAV, FLAC or OGG/Opus.",
        "fileTooLarge": "That file is over 150 MB. Trim it or export a smaller version."
      },
      "status": {
        "uploadingTitle": "Uploading your audio",
        "uploading": "Sending the file",
        "processingTitle": "Removing the noise",
        "processingHint": "Keeping the voice, dropping everything else. A minute of audio takes a few seconds.",
        "fileProblem": "We could not read that file",
        "audioTooLong": "That clip is longer than 1 hour. Split it and try again.",
        "couldNotClean": "Cleaning stopped before it finished. Try again.",
        "microphoneProblem": "Microphone access was not available.",
        "failedBody": "Check the file and try again. If it keeps failing, export it as MP3 or WAV.",
        "tryAgain": "Try again"
      },
      "compare": {
        "original": "Original",
        "cleaned": "Cleaned",
        "quietDetail": "Emphasize quiet detail",
        "detailHint": "Shared non-linear display scale · quiet sounds enlarged equally · audio unchanged",
        "zoom": "Time zoom",
        "region": "Visible region",
        "scaleHint": "Shared linear amplitude scale · zoom into pauses to inspect noise",
        "comparison": "HEAR THE DIFFERENCE",
        "switchHint": "Two versions. One timeline. Switch at any moment to compare.",
        "selectedTrack": "Selected for playback",
        "preparing": "Reading audio waveform…",
        "loadingOriginal": "Cleaned waveform read. Preparing the original waveform…",
        "loadingCleaned": "Preparing the cleaned waveform… Long files may take a moment.",
        "unavailable": "Waveform unavailable · audio controls remain available",
        "fileDetails": "Audio details",
        "seekOriginal": "Play the original from here",
        "seekCleaned": "Play the cleaned audio from here",
        "listenTo": "Listen to",
        "play": "Play",
        "pause": "Pause",
        "loadingPlayback": "Loading audio for playback…",
        "playbackError": "Audio could not be played. Try again.",
        "volume": "Volume",
        "back5": "Back 5 seconds",
        "forward5": "Forward 5 seconds",
        "duration": "Duration",
        "before": "Before",
        "after": "After",
        "downloadCleaned": "Download cleaned",
        "cleanAnother": "Clean another file",
        "loudness": "Loudness",
        "peak": "Peak",
        "sampleRate": "Sample rate",
        "preset": "Preset"
      },
      "rail": {
        "uploadedAudio": "Uploaded audio",
        "recent": "Recent cleanups",
        "today": "Today, {{time}}",
        "yesterday": "Yesterday, {{time}}",
        "download": "Download",
        "openAria": "Open {{name}} in the player",
        "downloadAria": "Download cleaned {{name}}",
        "emptyTitle": "Cleaned files land here",
        "emptyBody": "Every cleanup you run shows up here to replay or download.",
        "title": "Cleaned files",
        "search": "Search cleaned files"
      },
      "settings": {
        "ariaLabel": "Cleaning settings",
        "title": "Preset",
        "reset": "Reset to defaults",
        "behind": "Advanced · the parameters behind",
        "backToPreset": "Back to the preset",
        "advanced": "Advanced",
        "presets": {
          "studio": {
            "name": "Studio Master",
            "hint": "Podcasts, videos, calls and general voice"
          },
          "wind": {
            "name": "Heavy AC & Wind",
            "hint": "Outdoor, phone audio, loud air conditioning"
          },
          "radio": {
            "name": "Radio voice",
            "hint": "High-energy voiceovers and audiobooks"
          },
          "deep": {
            "name": "Deep Voice",
            "hint": "Keeps low baritone frequencies warm"
          },
          "custom": {
            "name": "Custom",
            "hint": "Your own values under Advanced"
          }
        },
        "controls": {
          "cutoffFreq": {
            "name": "Rumble & hum cutoff",
            "hint": "Raise for wind or AC rumble. Lower for deep voices."
          },
          "qFactor": {
            "name": "Filter smoothness",
            "hint": "How gradual the low cut is. Rarely needs a change."
          },
          "targetLufs": {
            "name": "Target volume",
            "hint": "-16 for podcasts and video, -14 for music platforms, -18 for background speech."
          },
          "truePeakDbfs": {
            "name": "Maximum peak level",
            "hint": "Stops crackling and clipping. Keep at -1."
          },
          "compThreshDb": {
            "name": "Loud spikes trigger",
            "hint": "Lower for wild volume swings. Raise for dynamic speech."
          },
          "compRatio": {
            "name": "Volume smoothing",
            "hint": "2 gentle, 4 broadcast, 6 aggressive radio voice."
          },
          "compAttackMs": {
            "name": "Reaction speed",
            "hint": "How fast loud syllables are tamed. Keep at 5 ms."
          },
          "compReleaseMs": {
            "name": "Recovery speed",
            "hint": "How fast volume returns to normal. Keep at 50 ms."
          }
        },
        "advancedTitle": "Advanced cleaning",
        "advancedLead": "Changes apply to the next file you clean. Values in red differ from the preset.",
        "done": "Done",
        "groups": {
          "lowCut": "Low cut",
          "loudness": "Loudness",
          "dynamics": "Dynamics"
        }
      }
    },
    "tts": {
      "audioPlayer": {
        "pause": "Pause",
        "play": "Play",
        "unmute": "Unmute",
        "mute": "Mute",
        "rewind": "Rewind 10 seconds",
        "forward": "Forward 10 seconds",
        "download": "Download",
        "preparing": "Preparing audio…",
        "tapToPlay": "Automatic playback was blocked. Tap Play to listen.",
        "couldNotPlay": "This audio could not be played in your browser.",
        "back5": "Back 5 seconds",
        "forward5": "Forward 5 seconds",
        "speed": "Playback speed",
        "speedAt": "Playback speed {{rate}}×",
        "seek": "Seek"
      },
      "historyPanel": {
        "settingsTab": "Settings",
        "historyTab": "History",
        "emptyTitle": "No history yet",
        "emptySubtitle": "Your generated speeches will appear here",
        "processing": "Processing",
        "failed": "Failed",
        "download": "Download",
        "pause": "Pause",
        "play": "Play",
        "loadMore": "Load more",
        "ariaLabel": "Text to Speech history",
        "panelAria": "Text to Speech panel",
        "delete": "Delete",
        "keep": "Keep",
        "deleteConfirm": "Delete for good?",
        "deleteError": "This was not deleted. Try again.",
        "deleteProcessing": "Still processing. Delete it once it finishes.",
        "deleteForbidden": "Only the person who made this, or a workspace admin, can delete it.",
        "deleted": "Deleted",
        "today": "Today",
        "yesterday": "Yesterday"
      },
      "settingsPanel": {
        "settingsTab": "Settings",
        "historyTab": "History",
        "voice": "Voice",
        "changeVoiceCurrent": "Change voice (current: {{name}})",
        "chooseVoice": "Choose a voice",
        "changeVoice": "Change voice",
        "speed": "speed",
        "speedHelpAria": "What does Speed do?",
        "speedTooltip": "Sets the reading pace. Faster for energy, slower for clarity.",
        "slower": "Slower",
        "faster": "Faster",
        "creativity": "Creativity",
        "creativityHelpAria": "What does Creativity do?",
        "creativityTooltip": "Controls how freely the voice interprets emphasis. Predictable for docs, expressive for storytelling.",
        "morePredictable": "More predictable",
        "moreCreative": "More creative",
        "exaggeration": "Exaggeration",
        "exaggerationHelpAria": "What does Exaggeration do?",
        "exaggerationTooltip": "Emotional weight per phrase. Best paired with Arabic or character voices that need extra expressiveness.",
        "none": "None",
        "exaggerated": "Exaggerated",
        "stability": "Stability",
        "stabilityHelpAria": "What does Stability do?",
        "stabilityTooltip": "How tightly the voice holds its tone. Raise it for long, consistent reads.",
        "lessStable": "Less stable",
        "moreStable": "More stable",
        "resetValues": "Reset values",
        "ariaLabel": "Voice settings",
        "selectedVoice": "Selected voice",
        "voiceSettings": "Voice Settings",
        "reset": "Reset",
        "normal": "Normal",
        "styleExaggeration": "Style exaggeration",
        "expressive": {
          "laugh": "laugh",
          "cough": "cough",
          "clearThroat": "clear throat",
          "groan": "groan",
          "sigh": "sigh",
          "gasp": "gasp",
          "shush": "shush",
          "chuckle": "chuckle"
        },
        "similarity": "Similarity",
        "high": "High",
        "regenerateAudio": "Regenerate audio",
        "credits": "Credits",
        "cfg": "cfg",
        "numSteps": "num_steps",
        "comingSoon": "Coming soon",
        "looser": "Looser",
        "balanced": "Balanced",
        "stricter": "Stricter",
        "cleaner": "Cleaner",
        "tashkeel": "Tashkeel",
        "expressivenessTags": "Tags",
        "enabled": "Enabled",
        "disabled": "Disabled",
        "on": "ON",
        "off": "OFF"
      },
      "textEditor": {
        "placeholder": "Start typing here or paste any text you want to turn into lifelike speech...",
        "maxCharsHint": "Up to {{count}} characters per generation.",
        "getStarted": "Get started with:",
        "generateForCredits": "Generate for {{credits}} Credits",
        "charCount": "{{count}} Characters (max {{max}})",
        "generating": "Generating...",
        "generateSpeech": "Generate Speech",
        "starterPrompts": "Starter prompts",
        "maxCharacters": "Max characters {{count}}"
      },
      "page": {
        "eyebrow": "Expressive voice studio",
        "title": "Text to Speech",
        "subtitle": "Shape written words into natural speech with voices tuned for Arabic dialects and expressive delivery.",
        "script": "Your script",
        "inputHint": "Arabic, English and 28+ languages",
        "editorAria": "Text to Speech editor",
        "convertTitle": "Convert your text to speech with your chosen voice"
      },
      "promptSuggestions": {
        "narrate": "Narrate a story",
        "sillyJoke": "Tell a silly joke",
        "advertisement": "Record an advertisement",
        "movieScene": "Direct a dramatic movie scene",
        "languages": "Speak in different languages",
        "videoGameCharacter": "Hear from a video game character"
      }
    },
    "agents": {
      "widget": {
        "page": {
          "sections": {
            "install": "Install",
            "access": "Access",
            "texts": "Texts"
          },
          "unsaved": "Unsaved changes",
          "discard": "Discard",
          "save": "Save changes",
          "saved": "Saved",
          "loadError": "Could not load the widget settings.",
          "retry": "Try again",
          "dismiss": "Dismiss",
          "leaveTitle": "Leave with unsaved changes?",
          "saveFirst": "Save or discard your changes first",
          "leaveBody": "Your edits to the widget will be lost. Save first if you want to keep them.",
          "stay": "Stay",
          "discardAndLeave": "Discard and leave"
        },
        "install": {
          "lead": "Paste this line before the closing body tag on every page of your allowed websites.",
          "copy": "Copy",
          "copied": "Copied",
          "step1": "Add the line with your ticket address",
          "step1Body": "The widget asks this address on your own server for a ticket each time a visitor starts.",
          "step2": "Mint a ticket on your server",
          "step2Body": "Your server swaps its API key for a one-time ticket. Each ticket works once and expires after 5 minutes.",
          "response": "Response",
          "keyWarnTitle": "Keep the API key on your server",
          "keyWarnBody": "Never put it in your page or app. The key needs the Agents scope.",
          "step3": "Or give tickets from JavaScript",
          "guide": "Private widget guide",
          "copyFailed": "Could not copy",
          "saveToUpdate": "Save to update the install steps for this mode.",
          "saveFirst": "Save to get your snippet.",
          "widgetId": "Widget ID",
          "copyId": "Copy widget ID",
          "showGuide": "Show the full guide",
          "hideGuide": "Hide the full guide",
          "pub1": "Paste the line above",
          "pub1Body": "One line on every page of your websites. A public widget needs nothing else.",
          "pub2": "Open your website and try it",
          "pub2Body": "The launcher shows in the corner you picked in Settings.",
          "pub3": "Open it from your own button",
          "pub3Body": "Optional. Pick None as the launcher in Settings, then call this from your button."
        },
        "access": {
          "desc": "Who can use the widget, and where it may load.",
          "whoCan": "Who can start a conversation",
          "public": "Public",
          "private": "Private",
          "publicDesc": "Anyone on your websites. Protected by the site list, a bot check and limits.",
          "privateDesc": "Only visitors your server vouches for, with a one-time ticket. For logged-in customers.",
          "modeNote": "A switch takes effect on the next conversation.",
          "allowed": "Allowed websites",
          "allowedHint": "The widget only loads on these websites.",
          "countOf": "{{n}} of 20",
          "addSite": "Add",
          "addSiteLabel": "Website address",
          "remove": "Remove {{site}}",
          "examples": "Allowed forms",
          "hints": {
            "https": "Start with https://. Only localhost can use http://.",
            "path": "Remove the path. Use the site address only, like https://shop.com.",
            "star": "A bare * is not allowed. Use one level, like https://*.shop.com.",
            "deep": "Only one wildcard level, at the start, like https://*.shop.com.",
            "dup": "This website is already on the list.",
            "max": "You can add up to 20 websites.",
            "port": "Add the port, like http://localhost:4200.",
            "bad": "This is not a website address."
          },
          "offOnSave": "Saving now turns the widget off. It needs at least one website.",
          "share": "Share link",
          "shareDesc": "A page of its own where anyone with the link can talk to {{name}}.",
          "shareOnlyPublic": "Share links work in Public mode only.",
          "shareSaveToTurnOn": "Save to turn on the share link."
        },
        "risky": {
          "title": "Strangers can ask {{name}} to use these tools",
          "body": "Anyone on your websites can start a conversation, so anyone can try these. Check what each tool can reach, or switch to Private.",
          "toolsNoteTitle": "Tools this agent can use",
          "toolsNoteBody": "Only visitors your server vouches for can reach them.",
          "review": "Review tools",
          "labels": {
            "workspace_tools": "Custom API tools",
            "db_tools": "Database queries",
            "send_sms": "Send SMS"
          }
        },
        "look": {
          "launcher": "Launcher",
          "launcherDesc": "The button visitors click to open the widget.",
          "launcherOrb": "Orb",
          "launcherPill": "Pill",
          "launcherNone": "None",
          "launcherNoneHint": "Open it from your own button with EchoNovaWidget.open().",
          "position": "Side",
          "positionEnd": "Right",
          "positionStart": "Left",
          "positionHint": "Arabic pages mirror it.",
          "sizeHint": "Large suits pages with more room.",
          "colourCard": "Colour and logo",
          "colourCardDesc": "Match the widget to your brand.",
          "colour": "Colour",
          "brandColour": "Brand colour",
          "brandHex": "Brand colour hex",
          "contrast": "Text on this colour: {{who}}, {{ratio}}:1.",
          "white": "white",
          "dark": "dark",
          "aaPass": "Passes AA",
          "aaFail": "Below AA. Pick a darker colour.",
          "hexBad": "Use a 6 digit hex, like #1F5F5B.",
          "adjusted": "Buttons use a deeper shade of this colour so their text stays readable.",
          "useBrand": "Use this colour",
          "sampleLogo": "Try a sample",
          "removeLogo": "Remove",
          "logo": "Logo",
          "logoHint": "An https image shown instead of the orb.",
          "theme": "Theme",
          "themeLight": "Light",
          "themeDark": "Dark",
          "themeAuto": "Auto",
          "autoHint": "Auto follows the visitor’s device.",
          "size": "Size",
          "sizeCompact": "Compact",
          "sizeLarge": "Large",
          "agentOwn": "Agent's own",
          "custom": "Custom",
          "families": {
            "mercury": "Mercury",
            "venus": "Venus",
            "earth": "Earth",
            "moon": "Moon",
            "mars": "Mars",
            "jupiter": "Jupiter",
            "saturn": "Saturn",
            "uranus": "Uranus",
            "neptune": "Neptune",
            "sun": "Sun"
          },
          "noneSample": "Ask our assistant",
          "logoBad": "Use an https link."
        },
        "texts": {
          "lead": "Leave a field empty to use our built-in text.",
          "title": "Title",
          "launcher": "Launcher label",
          "launcherHint": "Shown on the pill launcher.",
          "launcherOnlyPill": "Only the pill launcher shows this. Pick Pill in the Launcher card to use it.",
          "languageCard": "Language",
          "languageCardDesc": "Which language the widget speaks to visitors in.",
          "canSwitchDesc": "Shows an English and Arabic switch in the widget.",
          "welcome": "Welcome",
          "end": "End message",
          "consent": "Consent notice",
          "consentHint": "Shown before every conversation. Keep the AI and saving lines.",
          "widgetLanguage": "Widget language",
          "langAuto": "Auto, page language then browser",
          "canSwitch": "Visitors can switch language",
          "langNote": "This changes the widget’s texts only. Noor speaks as set in Voice.",
          "defaults": {
            "en": {
              "title": "Ask us anything",
              "launcher": "Talk to us",
              "welcome": "Hi. Talk or chat with our assistant, any time.",
              "end": "Thanks for talking with us.",
              "consent": "You are talking to an AI assistant.\nThe conversation is saved as text for {{biz}}.\nYour IP address is kept for security records."
            },
            "ar": {
              "title": "اسألنا عن أي شيء",
              "launcher": "تحدث معنا",
              "welcome": "أهلًا. تحدّث أو راسل مساعدنا في أي وقت.",
              "end": "شكرًا لتواصلك معنا.",
              "consent": "أنت تتحدث مع مساعد ذكاء اصطناعي.\nتُحفظ المحادثة نصًا لدى {{biz}}.\nيُحفظ عنوان IP الخاص بك ضمن السجلات الأمنية."
            }
          }
        },
        "behaviour": {
          "conversationCard": "Conversation",
          "conversationCardDesc": "What visitors can do once the widget is open.",
          "launcherCardDesc": "When the widget shows itself.",
          "visitorsCan": "Visitors can",
          "both": "Talk and chat",
          "voiceOnly": "Talk only",
          "chatOnly": "Chat only",
          "autoOpen": "Open on its own",
          "autoOpenDesc": "Shows the welcome bubble after a delay. Desktop only.",
          "after": "After",
          "seconds": "seconds",
          "secondsRange": "3 to 60 seconds",
          "hideMobile": "Hide on phones",
          "hideMobileDesc": "No launcher on screens under 640 px.",
          "rating": "Ask for a rating",
          "ratingDesc": "1 to 5 stars and an optional comment after each conversation.",
          "consentScreen": "Consent screen",
          "consentDesc": "Tells visitors they are talking to an AI and what is saved.",
          "consentAck": "My website already shows this notice",
          "consentAckErr": "Tick this to turn the consent screen off.",
          "privacyUrl": "Privacy policy link",
          "privacyHint": "Shown on the consent screen. https only.",
          "privacyBad": "Use an https link."
        },
        "turnOff": {
          "confirmTitle": "Turn off the widget?",
          "cancel": "Keep it on",
          "lead": "The launcher disappears from your websites at once. Calls already running finish. Your settings stay.",
          "off": "Turn off widget",
          "on": "Turn on widget"
        },
        "preview": {
          "note": "Preview only. Calls cannot start here.",
          "placeholder": "Save once to see the live preview",
          "frameTitle": "Widget preview"
        },
        "details": {
          "tabs": {
            "overview": "Overview",
            "settings": "Settings",
            "conversations": "Conversations"
          },
          "pause": "Pause",
          "statusActive": "Active",
          "statusPaused": "Paused",
          "factMode": "Mode",
          "factWebsites": "Websites",
          "factWidgetId": "Widget ID",
          "limitsTitle": "Limits",
          "limitsDesc": "Chat and call limits are set in the agent's Settings and apply to every channel.",
          "openSettings": "Open Settings",
          "readOnlyHint": "You can view this widget but not change it."
        },
        "channelsRow": {
          "title": "Website widget",
          "desc": "Talk and chat on your own website",
          "mode": "Mode",
          "public": "Public",
          "private": "Private",
          "websites": "Websites",
          "nSites": "{{n}} websites",
          "oneSite": "1 website",
          "on": "On",
          "off": "Off",
          "switch": "Website widget on",
          "channels": "Channels",
          "openSettings": "Open settings"
        },
        "conversations": {
          "title": "Conversations",
          "search": "Search conversations",
          "channel": "Channel",
          "type": "Type",
          "status": "Status",
          "website": "Website",
          "voice": "Voice",
          "chat": "Chat",
          "notRated": "Not rated",
          "rated": "Rated {{n}} of 5",
          "resolved": "Resolved",
          "ended": "Ended",
          "visitor": "Visitor {{id}}",
          "rowActions": "Conversation actions",
          "channelLabel": "Channel",
          "dateLabel": "Started",
          "ratingLabel": "Rating",
          "statusLabel": "Status"
        },
        "errors": {
          "invalidOrigin": "One of the websites is not a valid address. Check the allowed forms below.",
          "agentArchived": "This agent is archived. Restore it to change the widget.",
          "notFound": "The widget does not exist yet. Save your settings first.",
          "generic": "Something went wrong. Try again.",
          "originsRequired": "Add at least one website before turning the widget on."
        },
        "setup": {
          "title": "Add Website widget",
          "subtitle": "Put {{name}} on your website",
          "howTo": {
            "introTitle": "Before you start",
            "introBody": "You need to be able to edit the pages of your website, or ask the person who does.",
            "sitesTitle": "Add your website",
            "sitesBody": "Enter each site where {{name}} may appear, like https://shop.com. Other sites are refused.",
            "createTitle": "Click Add widget",
            "createBody": "EchoNova creates the widget and shows its one-line install code.",
            "pasteTitle": "Paste the code on your site",
            "pasteBody": "Add it to every page where {{name}} should appear, just before the closing body tag.",
            "customizeTitle": "Open it to customize",
            "customizeBody": "Back in Channels, open Website widget to change its colour, launcher, texts and behaviour with a live preview.",
            "tryTitle": "Try it",
            "tryBody": "Open your site and talk or chat with {{name}}."
          },
          "create": "Add widget",
          "toast": "Website widget added",
          "added": "Added",
          "readyTitle": "Your widget is ready",
          "readyBody": "Paste this code on every page where the assistant should appear.",
          "done": "Done",
          "openSettings": "Open settings"
        }
      },
      "knowledge": {
        "library": "Library",
        "breadcrumb": "Breadcrumb",
        "add": "Add",
        "newFolder": "New folder",
        "newFolderSub": "Folders group sources in the workspace library.",
        "tabFile": "Upload File",
        "tabWeb": "Add Link",
        "tabText": "Paste Text",
        "searchSources": "Search sources…",
        "searchPlaceholder": "Search...",
        "filterAll": "All",
        "filterFiles": "Files",
        "filterLinks": "Links",
        "filterType": "Type",
        "filterStatus": "Status",
        "filterCreator": "Creator",
        "searchCreator": "Search creators…",
        "typeFile": "File",
        "typeLink": "Link",
        "filterText": "Text",
        "anyStatus": "Any status",
        "indexingOrFailed": "Indexing / failed",
        "folderName": "Folder name",
        "create": "Create",
        "retry": "Retry",
        "errorBody": "Couldn’t load the library. Check your connection and try again.",
        "emptyTitle": "Your library is empty",
        "emptyMsg": "Upload a file, add a link, or paste text. Everything here is reusable across agents.",
        "emptyFolderTitle": "This folder is empty",
        "emptyFolderMsg": "Add sources to this folder, or move existing ones in.",
        "noResultsTitle": "No matching sources",
        "noResultsMsg": "Nothing matches your search or filters.",
        "clearFilters": "Clear filters",
        "colName": "Name",
        "colStatus": "Status",
        "colUsedBy": "Used by",
        "colChunks": "Chunks",
        "rowActions": "Actions",
        "sources": "sources",
        "folder": "Folder",
        "statusReady": "Ready",
        "statusFailed": "Failed",
        "statusUploading": "Uploading",
        "statusCrawling": "Crawling",
        "statusProcessing": "Indexing",
        "statusPending": "Pending",
        "move": "Move",
        "moveTitle": "Move “{{name}}”",
        "moveHere": "Move here",
        "download": "Download",
        "refresh": "Refresh",
        "deleteFolderTitle": "Delete “{{name}}”?",
        "deleteSourceTitle": "Delete “{{name}}”?",
        "deleteFolderBody": "This permanently deletes the folder and its {{count}} source(s), and removes it from any agents using it. This can’t be undone.",
        "deleteSourceBody": "This removes the source and frees its storage. This can’t be undone.",
        "addSourceTitle": "Add a source",
        "addSourceSub": "Indexed and reusable across every agent.",
        "dropFile": "Drop a file here or click to browse",
        "maxSize": "Up to {{size}} per file",
        "allowed": "Allowed",
        "singlePage": "Single Page",
        "crawlSite": "Crawl site",
        "depth": "Depth",
        "maxPages": "Max pages",
        "urlPattern": "URL pattern",
        "url": "URL",
        "badUrl": "Use a public URL that starts with https://. Private or localhost addresses are rejected.",
        "name": "Name",
        "content": "Content",
        "location": "Location",
        "libraryRoot": "Library root",
        "upload": "Upload",
        "addLink": "Add link",
        "save": "Save",
        "usesItems": "This agent uses {{count}} item(s) from the library.",
        "openLibrary": "Open library",
        "editSelection": "Edit selection",
        "addKnowledge": "Add Knowledge",
        "createFolderTitle": "Create New Folder",
        "selectFolder": "Add to folder",
        "optional": "(Optional)",
        "searchFolders": "Search by folder name",
        "createdShortly": "Created Shortly",
        "recentFolders": "Recent folders",
        "noFoldersFound": "No matching folders",
        "pickKnowledge": "Pick knowledge",
        "filesTextLinks": "Files, Text and Links",
        "addSelection": "Add ({{count}})",
        "assignSources": "Add files to folder",
        "searchFiles": "Search by folder name",
        "filesWithNoFolder": "Files with no folders",
        "noUnassignedSources": "No unassigned sources",
        "addedKnowledge": "Added Knowledge",
        "addedKnowledgeSub": "Sources and folders linked to this agent.",
        "newFolderAction": "New Folder",
        "retrievalSettings": "Retrieval Settings",
        "addNew": "Add New",
        "libraryTitle": "Knowledge Library",
        "librarySubtitle": "Create and manage knowledge sources available to your agents.",
        "defaultRetrievalSettings": "Default Retrieval Settings",
        "sourcesView": "Sources",
        "foldersView": "Folders",
        "sourcesCount": "{{count}} sources",
        "failed": "Failed",
        "chooseFromLibrary": "Choose From Library",
        "ragOnTitle": "Retrieval is on",
        "ragOnDesc": "The agent pulls relevant passages from its selected knowledge each turn.",
        "ragOffTitle": "Retrieval is off",
        "ragOffDesc": "This agent ignores all selected knowledge, so nothing below is used.",
        "emptyAgentTitle": "No knowledge selected",
        "emptyAgentMsg": "Attach folders or sources from the workspace library, or add something new. It’s saved to the library and used here right away.",
        "foldersHeading": "Folders",
        "sourcesHeading": "Individual sources",
        "liveFolder": "Live folder: always reflects its current contents.",
        "allReady": "All ready",
        "indexingCount": "{{count}} indexing",
        "removeFolder": "Remove folder",
        "removeSource": "Remove source",
        "deleteFromLibrary": "Delete from library",
        "kindLabelFolder": "folder",
        "kindLabelSource": "knowledge source",
        "removeFolderConfirmTitle": "Remove “{{name}}” from this agent?",
        "removeSourceConfirmTitle": "Remove “{{name}}” from this agent?",
        "removeFolderConfirmBody": "This folder will no longer be available to this agent. The folder and its sources will remain in the workspace library.",
        "removeSourceConfirmBody": "This source will no longer be available to this agent. It will remain in the workspace library.",
        "filesLabel": "{{count}} files",
        "colCreatedBy": "Created by",
        "colUpdated": "Last updated",
        "pickerTitle": "Select knowledge",
        "pickerSub": "Pick whole folders and individual loose sources from the library.",
        "searchLibrary": "Search the library…",
        "foldersGroup": "Folders",
        "looseGroup": "Loose sources",
        "saveSelection": "Save selection ({{count}})",
        "addSelected": "Add ({{count}})",
        "configureRag": "Configure RAG",
        "retrievalTitle": "Retrieval",
        "statusOn": "Always on",
        "statusOff": "Off",
        "retrievalDesc": "The agent searches the documents below. Tune how much it considers and how strict the match must be.",
        "enableRetrieval": "Enable retrieval",
        "topDocuments": "Top documents",
        "relevanceThreshold": "Relevance threshold",
        "thresholdHint": "Higher means stricter matches.",
        "saveRetrieval": "Save",
        "libraryAllAdded": "Everything in your library is already in this agent.",
        "overStorageQuota": "This file is larger than your plan's remaining storage. Delete files or upgrade your plan.",
        "close": "Close",
        "fileSizeMb": "{{size}} MB",
        "unsupportedType": "Unsupported type .{{extension}}. Allowed: {{allowed}}.",
        "fileTooLarge": "File is larger than {{max}}.",
        "libraryErrorTitle": "Failed to load the library.",
        "loadErrorTitle": "Failed to load knowledge.",
        "toast": {
          "couldNotAddSource": "Could not add source",
          "uploadingIndexing": "Uploading “{{name}}”, indexing now.",
          "uploadFailed": "Upload failed.",
          "crawlStarted": "Crawl started, indexing now.",
          "linkAdded": "Link added, indexing now.",
          "couldNotAddLink": "Could not add the link.",
          "textSaved": "“{{name}}” saved, indexing now.",
          "couldNotSaveText": "Could not save the text.",
          "folderCreated": "Folder “{{name}}” created",
          "couldNotCreateFolder": "Could not create folder",
          "couldNotRename": "Could not rename",
          "couldNotRenameFolder": "Could not rename folder",
          "moved": "Moved “{{name}}”",
          "couldNotMove": "Could not move",
          "refreshingTitle": "Refreshing",
          "reindexing": "Re-indexing “{{name}}”.",
          "couldNotRefresh": "Could not refresh",
          "couldNotDownload": "Could not get download link",
          "deleted": "Deleted “{{name}}”",
          "couldNotDeleteFolder": "Could not delete folder",
          "couldNotDelete": "Could not delete",
          "couldNotAddToKnowledge": "Could not add to knowledge",
          "addedToKnowledge": "Added to knowledge",
          "couldNotUpdateRetrieval": "Could not update retrieval",
          "couldNotUpdateKnowledge": "Could not update knowledge"
        },
        "apiError": {
          "loadSources": "Failed to load sources",
          "startUpload": "Failed to start upload",
          "finalizeUpload": "Failed to finalize upload",
          "addText": "Failed to add text source",
          "addWeb": "Failed to add web source",
          "renameSource": "Failed to rename source",
          "moveSource": "Failed to move source",
          "downloadUrl": "Failed to get download URL",
          "loadFolders": "Failed to load folders",
          "createFolder": "Failed to create folder",
          "renameFolder": "Failed to rename folder",
          "loadSelection": "Failed to load knowledge selection",
          "addToSelection": "Failed to add to knowledge",
          "updateKnowledge": "Failed to update knowledge",
          "updateRetrieval": "Failed to update retrieval"
        }
      },
      "statusPill": {
        "active": "Active",
        "archived": "Archived"
      },
      "keyValueCard": {
        "on": "On",
        "off": "Off"
      },
      "voiceCard": {
        "playPreview": "Play preview of {{name}}",
        "pausePreview": "Pause preview of {{name}}",
        "inactive": "Inactive"
      },
      "voicePicker": {
        "searchPlaceholder": "Search voice by name, dialect, or language",
        "selectLanguage": "Select Language",
        "selectDialect": "Select Dialect",
        "selectGender": "Select Gender",
        "allLanguages": "All Languages",
        "allDialects": "All Dialects",
        "allGenders": "All Genders",
        "retry": "Retry",
        "noVoicesAvailable": "No voices available in this workspace yet.",
        "noVoicesMatch": "No voices match these filters.",
        "clearFilters": "Clear filters",
        "noActiveVoices": "No active voices to show.",
        "chooseVoice": "Choose a voice",
        "playPreview": "Play preview of {{name}}",
        "pausePreview": "Pause preview of {{name}}",
        "avatarAlt": "{{name}} avatar",
        "selected": "Selected",
        "select": "Select",
        "loadError": "Couldn't load voices."
      },
      "createFlow": {
        "newAgent": "New agent",
        "close": "Close",
        "stepProgress": "Step {{current}} of {{total}}",
        "kindTitle": "What kind of agent?",
        "kindSubtitle": "Pick a starting point. You can change everything later.",
        "personalLabel": "Personal",
        "personalDesc": "A warm, casual assistant for your own day-to-day.",
        "businessLabel": "Business",
        "businessDesc": "Customer-facing, tuned to your industry and business.",
        "blankLabel": "Blank agent: start from scratch",
        "industryTitle": "Your industry",
        "industrySubtitle": "What field is your business in? It shapes how the agent speaks.",
        "nameYourIndustry": "Name your industry",
        "customIndustryPlaceholder": "e.g. logistics, veterinary, events",
        "usecaseTitle": "What will it do?",
        "usecaseSubtitle": "Pick the agent's job. We'll draft a persona to match.",
        "describeUseCase": "Describe the use case",
        "customLabelPlaceholder": "e.g. pet grooming, tutoring, dispatch",
        "nameTitle": "What should we call it?",
        "nameSubtitle": "A short, memorable name.",
        "nameLabel": "Name",
        "namePlaceholder": "Sara",
        "voiceTitle": "Pick its voice",
        "voiceSubtitle": "Tap a row to preview, then select.",
        "change": "Change",
        "back": "Back",
        "creating": "Creating…",
        "createNamed": "Create {{name}}",
        "agentFallback": "agent",
        "continue": "Continue",
        "discardTitle": "Discard this agent?",
        "discardBody": "Your answers won't be saved.",
        "discard": "Discard",
        "keepEditing": "Keep editing",
        "stepKind": "Type",
        "stepIndustry": "Industry",
        "stepUseCase": "Use case",
        "stepName": "Name",
        "stepVoice": "Voice",
        "fieldIndustry": "Industry",
        "fieldUseCase": "Use case",
        "fieldName": "Name",
        "fieldVoice": "Voice",
        "errorRequired": "{{label}} is required.",
        "errorMaxLength": "{{label}} must be {{max}} characters or fewer."
      },
      "agentsList": {
        "needsAttention": "Needs attention",
        "overAgentsLimitPrefix": "Your workspace is over the agents limit for the current plan. Archive some agents or",
        "overAgentsLimitSuffix": "to create new ones.",
        "upgradePlanLink": "upgrade your plan",
        "overStorageLimitPrefix": "Your workspace is over the storage limit for the current plan. Delete some documents or",
        "overStorageLimitSuffix": "to upload more.",
        "searchAgentsLabel": "Search agents",
        "searchArchivedPlaceholder": "Search archived by name…",
        "searchActivePlaceholder": "Search agents by name…",
        "clearSearch": "Clear search",
        "viewingArchived": "Viewing archived",
        "showArchived": "Show archived",
        "newAgent": "New agent",
        "pageEyebrow": "Agents",
        "pageTitle": "Manage Your Agents",
        "pageSubtitle": "Manage your agents or create a new one.",
        "buildNewAgent": "Build New Agent",
        "tutorial": "How To Build An Agent With EchoNova",
        "searchPlaceholder": "Search agents",
        "voiceLabel": "Voice:",
        "lastUpdated": "Last updated:",
        "retry": "Retry",
        "noArchivedTitle": "No archived agents",
        "noArchivedBody": "When you archive an agent, it'll land here. Restore from the detail page when you want it back in rotation.",
        "backToActive": "Back to active agents",
        "noAgentsTitle": "No agents yet",
        "noAgentsBody": "Agents are reusable AI voice configurations. Create one to get started.",
        "noAgentsViewerBody": "Ask a workspace admin to create one.",
        "createFirst": "Create your first agent",
        "noArchivedMatchQueryPrefix": "No archived agents match",
        "noArchivedMatchFilters": "No archived agents match these filters.",
        "noAgentsMatchQueryPrefix": "No agents match",
        "noAgentsMatchFilters": "No agents match these filters.",
        "noMatchQuerySuffix": ".",
        "clearFilters": "Clear filters",
        "archivedHeading": "Archived",
        "activeHeading": "Active agents",
        "noGreeting": "No greeting set.",
        "sessionsCount": "{{count}} sessions",
        "previous": "Previous",
        "pageOf": "Page {{page}} of {{total}}",
        "next": "Next",
        "planLimitTitle": "Plan limit reached",
        "planLimitBody": "Your plan allows {{limit}} agents. Archive an existing agent or upgrade your plan to create another.",
        "upgradePlanAction": "Upgrade plan",
        "agentCreatedTitle": "Agent created",
        "agentCreatedBody": "{{name}} is ready.",
        "fieldsNeedAttention": "Some fields need attention.",
        "createError": "Couldn't create agent. Try again.",
        "loadError": "Couldn't load agents.",
        "colName": "Name",
        "colStatus": "Status",
        "colVoice": "Voice",
        "colSessions": "Sessions",
        "colUpdated": "Last updated",
        "openEdit": "Open & edit",
        "test": "Test",
        "moreActions": "More actions",
        "archive": "Archive",
        "restoreToActive": "Restore to active",
        "testTooltip": "Test (live session)",
        "archivedTestTooltip": "Archived. Restore to test",
        "errorTitle": "Couldn't load your agents",
        "archiveSuccessTitle": "Agent archived",
        "archiveSuccessBody": "{{name}} moved to archived.",
        "restoreSuccessTitle": "Agent restored",
        "restoreSuccessBody": "{{name}} is active again.",
        "archiveError": "Couldn't archive the agent. Try again.",
        "restoreError": "Couldn't restore the agent. Try again.",
        "connectedChannels": "Connected Channels",
        "build": {
          "badge": "Building",
          "starting": "Getting started",
          "waiting": "Reading your sources ({{done}} of {{total}})",
          "designing": "Designing your agent",
          "applying": "Almost there",
          "failed": "Build failed",
          "dismiss": "Dismiss",
          "dismissError": "Could not dismiss this build. Please try again.",
          "readyTitle": "Agent ready",
          "readyBody": "{{name}} is built and ready to use."
        },
        "viewsAria": "Agents views",
        "overviewTab": "General Overview",
        "myAgentsTab": "My Agents List"
      },
      "tools": {
        "addMenu": {
          "actionAdd": "Add",
          "actionTestConnect": "Test And Connect",
          "addNew": "Add New",
          "catDatabase": "Database",
          "catLibrary": "Choose From Library",
          "chooseIntegration": "Choose Integration",
          "connAuthenticated": "Authenticated",
          "connNone": "No connection",
          "dataType": "Data type",
          "dropFile": "Drop a file here or click to browse",
          "errDbConnect": "Could not connect the database.",
          "errFileTooLarge": "The OpenAPI file must be 5 MB or smaller.",
          "errIntegrationTools": "Could not load the integration tools.",
          "errNotOpenapi": "The selected file is not a valid OpenAPI object.",
          "errPickJson": "Choose a JSON OpenAPI document.",
          "filterConnection": "Filter tools by connection",
          "filterStatus": "Filter tools by status",
          "filterType": "Filter tools by type",
          "listAria": "Available workspace tools",
          "loadingIntegrationTools": "Loading integration tools...",
          "maxFileSize": "Up to 5 MB per file",
          "noAuthentication": "No authentication",
          "noIntegrationTools": "No tools are available for this integration.",
          "noMatches": "No matching workspace tools.",
          "optConnection": "Connection",
          "optStatus": "Status",
          "optional": "(Optional)",
          "pickTool": "Pick Tool",
          "selectIntegration": "Select an integration",
          "timeoutMs": "Timeout [ms]",
          "title": "Add Tool",
          "trigger": "Add Tool",
          "typeBoolean": "Boolean",
          "typeNav": "Tool type",
          "typeNumber": "Number",
          "typeString": "String",
          "uploadJson": "Upload Json",
          "urlExamplePh": "Example: https://Echonova/Help",
          "urlHttpsOnly": "The URL must start with https://.",
          "valueAiGenerated": "AI-generated.",
          "valueConstant": "Constant",
          "errCreateTool": "Could not create the tool.",
          "errImportOpenapi": "Could not import the OpenAPI document.",
          "errInvalidJson": "The selected file is not valid JSON.",
          "jsonLabel": "Json"
        },
        "addTool": "Add tool",
        "addTools": "Add tools",
        "authLinked": "Auth connection",
        "authNone": "None",
        "bench": {
          "alwaysHint": "This information is included in the prompt every time, so it is not retrieved and receives no score.",
          "alwaysLabel": "Always available",
          "cardTitle": "Retrieval Test",
          "dialogCrumb": "Test Tool/",
          "empty": "There is no match above the specified minimum threshold. The agent will ask a clarifying question instead of calling an endpoint.",
          "emptyHint": "Run a test to see whether the agent reaches this tool.",
          "failed": "Could not run the bench.",
          "hint": "Type what a caller might say. This runs the same semantic search the agent runs each time, so you can detect an incorrect match before launch.",
          "matched": "✓ Matched",
          "notMatched": "× No match",
          "preset1": "when is the next flight",
          "preset2": "cancel my booking",
          "preset3": "what is my baggage allowance",
          "preset4": "change my seat",
          "queryLabel": "Query",
          "queryPh": "e.g. when is the next flight?",
          "resultsLabel": "Results",
          "run": "Run",
          "running": "Testing…",
          "scopedHint": "Ask what a caller might say. A match means the agent would reach this tool for that utterance.",
          "scoreLabel": "Top score",
          "title": "Test tools"
        },
        "builder": {
          "createTitle": "New tool",
          "editTitle": "Edit tool",
          "subtitle": "A server tool lets the agent call an external API mid-conversation.",
          "basics": "Basics",
          "name": "Name",
          "namePh": "e.g. lookup_order",
          "description": "Description",
          "descriptionPh": "What does this tool do? The agent uses this to decide when to call it.",
          "enabled": "Enabled",
          "request": "Request",
          "method": "Method",
          "url": "URL",
          "urlPh": "https://api.example.com/orders/{orderId}",
          "urlHint": "A public https URL. Wrap path parameters in curly braces.",
          "inUrl": "In the URL:",
          "timeout": "Timeout (ms)",
          "parameters": "Parameters",
          "addParameter": "Add parameter",
          "paramName": "Name",
          "paramNamePh": "orderId",
          "type": "Type",
          "location": "Location",
          "remove": "Remove",
          "bindHint": "Name it to bind the placeholder",
          "inUrlBadge": "In the URL",
          "addToUrl": "Add to URL",
          "value": "Value",
          "fromModel": "From the model",
          "constant": "Constant value",
          "constantValue": "Constant value",
          "paramDescription": "Description",
          "paramDescriptionPh": "What this value represents (the model reads this).",
          "required": "Required",
          "noParams": "No parameters. The agent will call the endpoint as-is.",
          "unmatchedHint": "Add {{tokens}} to the URL. Path parameters must appear as placeholders or they won't be sent.",
          "authentication": "Authentication",
          "cancel": "Cancel",
          "save": "Save tool",
          "authConnection": "Auth connection",
          "authConnectionHint": "Reuse a saved Auth Connection, or create one.",
          "back": "Back",
          "next": "Next",
          "constantRequired": "Enter a value",
          "secret": "Secret",
          "secretRequired": "Choose a secret",
          "secretValue": "Secret",
          "stepBasics": "Basics",
          "stepRequest": "Request",
          "stepParams": "Parameters",
          "stepAuth": "Auth",
          "bodyMethodError": "Body parameters require POST, PUT, or PATCH.",
          "duplicateParam": "Duplicate parameter.",
          "fixParamsHint": "Resolve the issues in the Parameters step.",
          "requiredField": "This field is required",
          "urlInvalid": "Enter a valid public https:// URL",
          "headersTitle": "Headers",
          "headersDesc": "Fixed or secret values sent as HTTP headers",
          "addHeader": "Add header",
          "pathTitle": "Path parameters",
          "pathDesc": "Values bound to {placeholders} in the URL path",
          "addPath": "Add path param",
          "queryTitle": "Query parameters",
          "queryDesc": "Key–value pairs appended to the URL as ?key=value",
          "addQuery": "Add query param",
          "bodyTitle": "Body parameters",
          "bodyDesc": "Fields sent in the JSON request body (POST/PUT/PATCH only)",
          "addBody": "Add body param",
          "bodyMethodHint": "Switch to POST, PUT, or PATCH to add body parameters"
        },
        "builtInLabel": "Built-in tools",
        "clearFilters": "Clear filters",
        "colAuth": "Auth",
        "colEnabled": "Enabled",
        "colEndpoint": "Endpoint",
        "colTool": "Tool",
        "colUpdated": "Updated",
        "config": {
          "disableInterruption": "Don’t allow interruptions when ending",
          "disableInterruptionHelp": "When on, the agent finishes its closing line before ending the call."
        },
        "customEmptyBody": "Connect the agent to your APIs: look up orders, book slots, or hit any endpoint you expose.",
        "customEmptyTitle": "No custom tools yet",
        "customLabel": "Custom tools",
        "db": {
          "menuTitle": "Connect a database",
          "menuDesc": "Answer live calls from your Postgres, MySQL or MariaDB.",
          "sectionLabel": "Databases",
          "switchTitle": "Use databases in calls",
          "switchDesc": "The agent retrieves approved questions and answers callers from your data.",
          "switchHint": "Connect a database and approve a question to switch this on.",
          "manage": "Manage databases",
          "connect": "Connect a database",
          "toastOn": "Databases enabled for this agent.",
          "toastOff": "Databases disabled for this agent.",
          "title": "Databases",
          "subtitle": "Connect a database, review the questions Echonova drafts, and approve the ones your agent can answer.",
          "flow1": "Connect",
          "flow2": "Echonova reads the schema and drafts questions",
          "flow3": "You approve.",
          "flow4": "The agent answers live calls",
          "connectionsLabel": "Connected databases",
          "connectionsHint": "Read-only. Echonova never writes, edits, or deletes.",
          "noConnections": "No databases yet. Connect one below to get started.",
          "status": {
            "ready": "Ready",
            "pending": "Reading schema…",
            "failed": "Couldn't connect"
          },
          "questionsChip": "questions",
          "tlsChip": "TLS",
          "readOnlyAdvisory": "read-only: advisory",
          "readOnlyAdvisoryHint": "The role can create temporary tables. Sessions are forced to be read-only in all cases. This information is advisory only.",
          "resync": "Resync",
          "delete": "Delete",
          "reviewLabel": "Review & approve",
          "reviewHeading": "{{count}} questions Echonova drafted from {{db}}",
          "approvedCount": "{{n}} of {{total}} approved",
          "paramsLabel": "Params",
          "heardAsLabel": "Heard as",
          "piiBadge": "Personal data",
          "compoundNote": "Needs two matching details before it answers ({{params}}) — so one leaked id can't reveal a stranger's data.",
          "approveAria": "Approve {{name}}",
          "approved": "Approved",
          "off": "Off",
          "benchHint": "Type what a caller might say. This runs the same search the agent runs each turn, so you can catch a template nobody will ever reach.",
          "benchQueryPh": "e.g. where is my order ORD-1042?",
          "benchRun": "Run",
          "benchRunning": "Testing…",
          "benchCrumb": "Test retrieval/",
          "benchFailed": "Could not run the search.",
          "benchNotApproved": "Not approved",
          "benchFallback": "This connection has nothing indexed, so the search widened to the whole workspace. Re-sync the connection.",
          "benchBelowThreshold": "No match above the threshold. The closest template scored {{score}} — the wording callers use is missing from its description and sample utterances.",
          "benchNothingIndexed": "Nothing is indexed for this connection, so the agent can never reach a template. Re-sync it.",
          "noTemplates": "No questions drafted yet.",
          "registerLabel": "Connect a database",
          "registerHint": "Cloud Postgres, MySQL or MariaDB — over TLS.",
          "nameLabel": "Name",
          "namePh": "e.g. Orders database",
          "nameHint": "Shown in the tools table and everywhere else, instead of the host and database name.",
          "engineLabel": "Engine",
          "enginePostgres": "PostgreSQL",
          "engineMysql": "MySQL",
          "engineMariadb": "MariaDB",
          "dsnLabel": "Connection string",
          "dsnPh": "postgresql+asyncpg://readonly:••••@db.example.com:5432/shop?sslmode=require",
          "dsnHint": "Use a read-only role. TLS is required — sslmode=require for Postgres, ssl=true for MySQL. We store this encrypted and never show it again.",
          "businessLabel": "What is this business? (steers the questions we draft)",
          "businessPh": "An online shop selling furniture. Customers ask about their orders, delivery, and stock.",
          "businessHint": "Required - a sentence or two makes the drafted questions much better.",
          "samplingLabel": "Sample values sent to the AI while drafting",
          "samplingMasked": "Masked (fake values)",
          "samplingRaw": "Raw (real rows)",
          "samplingHint": "Data masking is the default. The AI sees only the structure of your data, never its actual contents.",
          "securityNoteTitle": "Nothing leaves read-only.",
          "securityNoteBody": "We test the connection, block private/internal hosts, and force read-only sessions on every query. The exact SQL is generated on our side and never shown here or to the caller.",
          "cancel": "Cancel",
          "testConnect": "Test & connect",
          "connecting": "Testing…",
          "toastRegistered": "Connecting “{{name}}”. Questions will be ready shortly.",
          "toastDeleted": "Removed “{{name}}”.",
          "toastResynced": "Resyncing. New questions will be ready shortly.",
          "kind": "database"
        },
        "deleteBody": "This deletes the tool and its associated secret data, and deselects it from every agent that uses it. This action cannot be undone.",
        "deleteFromLibrary": "Delete from library",
        "deleteTitle": "Delete “{{name}}”?",
        "details": {
          "connected": "Connected",
          "connection": "Connection",
          "created": "Created",
          "crumb": "Tools/",
          "error": "Error",
          "failed": "× Failed",
          "lastTestResult": "Last Test Result",
          "lastUpdated": "Last updated",
          "noConnection": "No connection",
          "notTested": "Not tested yet",
          "notTestedHint": "Run the tool to see its latest result.",
          "passed": "✓ Passed",
          "responseTime": "Response time",
          "status": "Status",
          "testAgain": "Test Again",
          "testTool": "Test Tool",
          "testedAt": "Tested at",
          "timeout": "Timeout",
          "usedBy": "Used by",
          "authenticated": "Authenticated"
        },
        "dialectDesc": "Adapt to the caller's dialect automatically.",
        "dialectLabel": "Dialect detection",
        "emptyMsg": "Create a webhook tool to let your agents call external APIs mid-conversation.",
        "emptyTitle": "No tools yet",
        "errorBody": "Something went wrong loading your tools.",
        "filterMethod": "Method",
        "integrationDialog": {
          "title": "Add integration tools",
          "integrationLabel": "Integration",
          "integrationPh": "Choose an integration",
          "toolsLabel": "Available tools",
          "loading": "Loading tools...",
          "noTools": "This integration offers no tools.",
          "added": "Added",
          "add": "Add",
          "toastAdded": "Added {{count}} tool(s)."
        },
        "integrationKind": "Integration",
        "integrationToolDesc": "Add ready-made actions from a connected integration.",
        "kindLabel": "tool",
        "libraryLabel": "Tools library",
        "libraryPageSubtitle": "Create and manage reusable tools for your workspace.",
        "libraryPageTitle": "Tool Library",
        "newIntegrationTool": "Integration tools",
        "newTool": "New tool",
        "newWebhookTool": "Webhook tool",
        "noBuiltIn": "No built-in tools available.",
        "noDescription": "No description",
        "noResultsMsg": "Try a different search or clear the filters.",
        "noResultsTitle": "No tools match",
        "openDetails": "Open details",
        "openapi": {
          "menuTitle": "OpenAPI Tool",
          "menuDesc": "Import a Swagger/OpenAPI spec as agent endpoints.",
          "kind": "OpenAPI",
          "viewTitle": "View details",
          "endpointCount": "{{count}} endpoints",
          "status": {
            "importing": "Importing",
            "ready": "Ready",
            "failed": "Failed"
          },
          "dialog": {
            "title": "Import OpenAPI spec",
            "stepSource": "Source",
            "stepEndpoints": "Endpoints",
            "nameLabel": "Name",
            "namePh": "Orders API",
            "sourceLabel": "Spec source",
            "sourceFile": "Upload .json",
            "sourceUrl": "From URL",
            "filePick": "Choose an OpenAPI .json file",
            "fileReplace": "Choose a different file",
            "fileInvalid": "Not valid JSON. Pick an OpenAPI .json document.",
            "urlPh": "https://api.example.com/openapi.json",
            "baseUrlLabel": "Base URL",
            "baseUrlPh": "https://api.example.com",
            "baseUrlRequired": "Base URL is required — the portal calls the API with it.",
            "baseUrlInvalid": "Enter a full https URL, for example https://api.example.com",
            "authLabel": "Auth connection",
            "authGlobalHint": "Applies to all endpoints. Each endpoint can override it individually.",
            "preview": "Preview",
            "previewing": "Parsing spec…",
            "previewFailed": "Could not parse the spec. Check the source and try again.",
            "back": "Back",
            "importBtn": "Import {{count}} of {{total}} endpoints",
            "toastCreated": "Importing “{{name}}”. Endpoints will be ready shortly."
          },
          "detail": {
            "failedTitle": "Import failed"
          },
          "console": {
            "backToList": "Back to endpoints",
            "bench": {
              "hint": "Type what a caller might say. This runs the same semantic search the agent uses to pick an endpoint, so you can catch bad matches before they ship.",
              "queryPh": "e.g. Where is my order 4512?",
              "run": "Run",
              "preset1": "cancel my order",
              "preset2": "update shipping address",
              "preset3": "what's in stock",
              "preset4": "refund damaged item",
              "resultsLabel": "Results",
              "idle": "Run an utterance to see which endpoints the agent would retrieve.",
              "loading": "Retrieving endpoints…",
              "empty": "No match above threshold. The agent would ask a clarifying question instead of calling an endpoint.",
              "noContract": "Full contract unavailable for this endpoint."
            },
            "detail": {
              "mutating": "mutating",
              "auth": "auth: {{label}}",
              "authOverride": "auth override: {{label}}",
              "noAuth": "no auth",
              "paramsTitle": "Parameters",
              "colName": "Name",
              "colIn": "In",
              "colType": "Type",
              "colRequired": "Required",
              "colDescription": "Description",
              "colValue": "Value",
              "required": "Required",
              "noParams": "No parameters",
              "bodyTitle": "Body ({{contentType}})",
              "noFields": "No documented fields",
              "secretChip": "Secret",
              "summary": "Summary",
              "yes": "Yes",
              "no": "No"
            },
            "edit": {
              "vtLlm": "LLM (agent fills)",
              "vtFixed": "Fixed value",
              "vtSecret": "Secret",
              "constantPh": "Value…",
              "fixedChip": "Fixed",
              "valuesHint": "Fixed and secret values are hidden from the model and injected when the endpoint is called. Secrets come from the vault and apply to header parameters only.",
              "authTitle": "Auth",
              "authInherit": "Inherit global auth",
              "authNone": "No auth",
              "authEffNone": "This endpoint calls the API without auth.",
              "authEffConnection": "Uses {{name}} for this endpoint only.",
              "authEffInherit": "Uses the global connection: {{label}}.",
              "authEffInheritNone": "No global connection picked. Calls run without auth."
            },
            "pickEndpoint": "Select an endpoint from the list on the left to view its parameters and request body details.",
            "rail": {
              "filterPh": "Filter endpoints…",
              "statIncluded": "included",
              "statExcluded": "excluded",
              "statMutating": "mutating",
              "groupOther": "Other",
              "mutatingTitle": "Mutating operation",
              "includeToggle": "Include {{name}}",
              "editedTitle": "Edited before import",
              "noMatches": "No endpoints match your filter.",
              "noOperations": "Endpoint details aren't stored for this tool.",
              "accessTitle": "Endpoints ({{count}})",
              "accessTally": "{{enabled}} Enabled, {{disabled}} Disabled",
              "accessFilterPh": "Search endpoints"
            }
          }
        },
        "picker": {
          "title": "Add tools",
          "subtitle": "Pick tools from your workspace library to give this agent.",
          "searchPh": "Search tools…",
          "allAdded": "Every tool is already added.",
          "noResults": "No tools match your search.",
          "cancel": "Cancel",
          "add": "Add {{count}}",
          "createNew": "Create new"
        },
        "removeFromAgent": "Remove from agent",
        "retry": "Retry",
        "rowActions": "Tool actions",
        "searchTools": "Search tools…",
        "selectedEmptyBody": "Give this agent actions: pick webhook tools from your library or create a new one.",
        "selectedEmptyTitle": "No tools added yet",
        "settings": {
          "title": "Tool settings",
          "openFor": "Settings for {{name}}",
          "subtitle": "Tune how this built-in tool behaves for this agent.",
          "description": "Description",
          "descriptionPh": "What this tool does and when the agent should use it.",
          "descriptionHint": "The agent reads this to decide when to use the tool.",
          "options": "Options",
          "cancel": "Cancel",
          "save": "Save"
        },
        "showMore": "Show more",
        "systemTools": {
          "descriptionPh": "Describe when the agent should use this tool",
          "dialectDesc": "Detect the caller’s Arabic dialect and adapt the conversation automatically.",
          "dialogIntro": "Enable this tool and describe how the agent should use it.",
          "disabled": "Disabled",
          "enableAria": "Enable {{name}}",
          "enabled": "Enabled",
          "endCallDesc": "Control when and how this agent ends a conversation.",
          "endCallLabel": "End conversation",
          "resetDefault": "Reset to default",
          "webSearchDesc": "Allow the agent to search the web for up-to-date information."
        },
        "tab": {
          "subtitle": "Give this agent tools to perform actions and access external systems during conversations.",
          "title": "Tools"
        },
        "table": {
          "colActions": "Actions",
          "colConnection": "Connection",
          "colLastTested": "Last Tested",
          "colMatch": "Match",
          "colMethod": "Method",
          "colStatus": "Status",
          "colType": "Type",
          "colUsedBy": "Used by",
          "emptyWorkspace": "No workspace tools yet.",
          "noMatch": "No match"
        },
        "test": {
          "authIssue": "Authentication or authorization issue",
          "connectionEndpoint": "Connection & Endpoint",
          "errorCode": "Error Code",
          "errorMessage": "Error Message",
          "failed": "Test Failed",
          "noParams": "This tool has no runtime parameters.",
          "optional": "(Optional)",
          "passed": "Test Passed",
          "passedHint": "The tool responded successfully.",
          "requestFailed": "The request could not be completed.",
          "responseBody": "Response Body Preview",
          "responseTime": "Response Time",
          "run": "Test",
          "status": "Status",
          "targetEndpoint": "Target Endpoint",
          "testing": "Testing…",
          "title": "Test Tool",
          "tryAgain": "Try Again"
        },
        "webSearchDesc": "Let the agent look things up online mid-call.",
        "webSearchLabel": "Web search",
        "webhookKind": "Webhook",
        "webhookKindDesc": "Call an external HTTP API.",
        "workspaceLabel": "Workspace tools",
        "view": {
          "crumb": "Tools",
          "tabs": {
            "overview": "Overview",
            "endpoints": "Endpoints",
            "queries": "Queries",
            "tests": "Tests"
          },
          "authenticated": "Authenticated",
          "noAuth": "No auth",
          "enabled": "Enabled",
          "enabledFor": "Enabled for {{agent}}. Switch off to remove it from this agent.",
          "toolName": "Tool name",
          "source": "Source",
          "toolId": "Tool ID",
          "copyId": "Copy tool ID",
          "createdDate": "Created date",
          "connectionStatus": "Connection status",
          "connected": "Connected",
          "connecting": "Connecting",
          "connectionFailed": "Connection failed",
          "importFailed": "Import failed",
          "baseUrl": "Base URL",
          "database": "Database",
          "specification": "OpenAPI specification",
          "specValid": "Valid, {{count}} endpoints",
          "specFailed": "Invalid",
          "specImporting": "Importing",
          "templates": "{{count}} templates",
          "queryTemplates": "Query templates",
          "tls": "TLS",
          "tlsOn": "Verified",
          "tlsOff": "Not verified",
          "dbTestHint": "Run a question against the approved query templates to see how the agent answers it.",
          "test": "Test",
          "lastTested": "Last tested",
          "never": "Never",
          "toastEndpointFailed": "Could not update the endpoint",
          "typeApi": "API"
        },
        "loadErrorTitle": "Failed to load tools.",
        "toast": {
          "couldNotUpdateTool": "Could not update tool",
          "removed": "Removed “{{name}}”",
          "added": "Added “{{name}}”",
          "addedToolsOne": "Added {{count}} tool",
          "addedToolsMany": "Added {{count}} tools",
          "addedDatabasesOne": "Added {{count}} database",
          "addedDatabasesMany": "Added {{count}} databases",
          "couldNotUpdateTools": "Could not update tools",
          "deleted": "Deleted “{{name}}”",
          "couldNotDeleteTool": "Could not delete tool",
          "saved": "Saved “{{name}}”",
          "created": "Created “{{name}}”",
          "failedToSaveTool": "Failed to save tool"
        },
        "apiError": {
          "retrieveBench": "Failed to run the retrieval bench",
          "updateTool": "Failed to update tool",
          "updateSelection": "Failed to update tool selection",
          "loadTools": "Failed to load tools",
          "createTool": "Failed to create tool",
          "connectDatabase": "Failed to connect the database",
          "templateSearch": "Failed to run the template search",
          "importOpenapi": "Failed to import the OpenAPI spec",
          "updateEndpoint": "Failed to update the endpoint"
        }
      },
      "deleteDialog": {
        "title": "Delete “{{name}}”?",
        "checkingUsage": "Checking where this is used…",
        "usageUnknown": "Could not check where this is used.",
        "usedByAgents": "Used by {{count}} agents: {{names}}",
        "andMoreAgents": "(+{{more}} more)",
        "notUsed": "Not used by any agent. It’s safe to delete.",
        "warning": "This permanently deletes this {{kind}} from your library and removes it from every agent that uses it. This can’t be undone.",
        "confirm": "Delete from library"
      },
      "channels": {
        "subtitle": "Connect a channel so this agent can answer messages.",
        "connectChannel": "Connect a channel",
        "connected": "Connected",
        "statusDisconnected": "Disconnected",
        "disconnect": "Disconnect",
        "update": "Update credentials",
        "loadError": "Couldn't load channels.",
        "retry": "Retry",
        "noChannelsTitle": "No channels connected yet",
        "noChannelsBody": "Connect WhatsApp or SMS so this agent can handle conversations.",
        "connectedToast": "Channel connected",
        "disconnectedToast": "Channel disconnected",
        "credentialsUpdatedToast": "Credentials updated",
        "disconnectTitle": "Disconnect channel?",
        "disconnectStops": "This stops messages to {{name}}.",
        "actionFailed": "Something went wrong. Please try again.",
        "pickTitle": "Choose a channel",
        "pickSubtitle": "Pick the channel to connect to this agent.",
        "connectFormTitle": "Connect channel",
        "updateTitle": "Update credentials",
        "updateSubtitle": "Re-enter the credentials for {{name}}.",
        "displayName": "Display name",
        "displayNamePh": "e.g. Support line",
        "displayNameHelp": "A label to recognize this connection.",
        "back": "Back",
        "cancel": "Cancel",
        "connect": "Connect",
        "save": "Save",
        "requiredField": "This field is required.",
        "defs": {
          "whatsapp": {
            "label": "WhatsApp",
            "externalIdLabel": "Phone number ID",
            "externalIdHelp": "The WhatsApp phone_number_id from Meta.",
            "cred": {
              "accessToken": "Access token"
            }
          },
          "sms": {
            "label": "SMS (Twilio)",
            "externalIdLabel": "Twilio phone number",
            "externalIdHelp": "Your Twilio number in E.164, e.g. +15553334444. Must match the number Twilio sends from.",
            "cred": {
              "accountSid": "Account SID",
              "authToken": "Auth token"
            }
          },
          "ivr": {
            "label": "Voice (IVR)",
            "externalIdLabel": "Phone number",
            "externalIdHelp": "The Twilio number for voice calls."
          },
          "messenger": {
            "label": "Messenger",
            "externalIdLabel": "Page ID",
            "externalIdHelp": "The Facebook Page ID."
          },
          "instagram": {
            "label": "Instagram",
            "externalIdLabel": "Account ID",
            "externalIdHelp": "The Instagram professional account ID."
          },
          "slack": {
            "label": "Slack",
            "externalIdLabel": "Channel ID",
            "externalIdHelp": "The Slack channel ID."
          },
          "web_voice": {
            "label": "Web voice",
            "externalIdLabel": "Channel key",
            "externalIdHelp": "An identifier for the in-app voice widget."
          },
          "web_chat": {
            "label": "Web chat",
            "externalIdLabel": "Channel key",
            "externalIdHelp": "An identifier for the in-app chat widget."
          }
        },
        "pageTitle": "Channels",
        "pageSubtitle": "Numbers and accounts your agents talk on.",
        "addChannel": "Add channel",
        "emptyTitle": "No channels yet",
        "emptyBody": "Add a channel or import numbers from a connected account.",
        "unassigned": "Unassigned",
        "unassign": "Unassign",
        "noAgents": "No agents yet",
        "rowActions": "Channel actions",
        "assignedToast": "Assigned \"{name}\"",
        "unassignedToast": "Unassigned \"{name}\"",
        "assignError": "Couldn't change the assignment",
        "delete": "Delete",
        "deleteTitle": "Delete channel",
        "deleteMessage": "Delete \"{name}\"? This can't be undone.",
        "deletedToast": "Deleted \"{name}\"",
        "inUseError": "This channel is in use and can't be deleted.",
        "deleteError": "Couldn't delete the channel",
        "agentSubtitle": "Channels assigned to this agent.",
        "manageChannels": "Manage channels",
        "agentEmptyTitle": "No channels assigned",
        "agentEmptyBody": "Assign a channel to this agent from the Channels page.",
        "goToChannels": "Go to Channels",
        "addManual": "Add manually",
        "addManualDesc": "Enter a number or account details yourself.",
        "addImport": "Import numbers",
        "addImportDesc": "Discover numbers from a connected Twilio account.",
        "addManualTitle": "Add a channel",
        "addImportTitle": "Import numbers",
        "pickTypeSubtitle": "Choose a channel type.",
        "importSetupSubtitle": "Pick an account, then discover its numbers.",
        "importNumbersSubtitle": "Select the numbers to import.",
        "account": "Account",
        "accountPh": "Select an account",
        "noAccounts": "No matching account. Connect one in Integrations first.",
        "instanceSecret": "Access token",
        "instanceSecretHelp": "A per-channel token (e.g. a Facebook page token).",
        "twilioAccount": "Twilio account",
        "noTwilioAccounts": "No Twilio account. Connect one in Integrations first.",
        "importAs": "Import as",
        "discover": "Discover",
        "discoveryUnsupported": "This account doesn't support discovery. Add the channel manually instead.",
        "noNumbers": "No numbers found on this account.",
        "importN": "Import {count}",
        "add": "Add",
        "wizard": {
          "title": "Add channel",
          "steps": {
            "type": "Type",
            "provider": "Provider",
            "connection": "Account",
            "endpoints": "Endpoints",
            "assign": "Assign"
          },
          "pickType": "What kind of channel is this?",
          "pickProvider": "Which provider powers it?",
          "noProviders": "No provider offers this channel yet.",
          "pickConnection": "Account",
          "endpointsTitle": "Endpoints",
          "discovering": "Finding numbers…",
          "discoveryUnsupported": "This account doesn't support discovery. Add an endpoint manually.",
          "noEndpoints": "No endpoints found. Add one manually below.",
          "externalId": "Address",
          "externalIdPh": "e.g. +15553334444",
          "addManual": "Add manually",
          "removeEndpoint": "Remove endpoint",
          "assignTitle": "Assign to an agent (optional)",
          "assignHint": "You can assign or change this later from the Channels page.",
          "next": "Next",
          "add": "Add channel",
          "done": "Done",
          "created": "Added {count} channel(s)",
          "createdToast": "Added {count} channel(s)",
          "resultHint": "You can assign or manage them from the Channels page.",
          "skippedTitle": "{count} skipped",
          "skippedToast": "{count} skipped (already added)",
          "createError": "Couldn't add the channel."
        },
        "assignExisting": "Assign existing",
        "slackBind": {
          "rowTitle": "Slack",
          "rowBlurb": "Talk to this agent in Slack — direct messages or a channel.",
          "statusNone": "Not connected",
          "statusDm": "Direct messages",
          "statusChannel": "Channel {{id}}",
          "noIntegrationTitle": "Connect {{provider}} first",
          "noIntegrationBody": "You have not connected {{provider}} yet. To use it with this agent:",
          "noIntegrationStep1": "Go to Deploy → Integrations and press \"Add integration\".",
          "noIntegrationStep2": "Pick {{provider}} and connect it.",
          "goToIntegrations": "Go to Integrations",
          "dialogTitle": "Link Slack to this agent",
          "integrationLabel": "Slack workspace",
          "dmLabel": "Direct messages",
          "dmHint": "People open Slack → Apps → your bot and chat 1-on-1.",
          "channelLabel": "Channel",
          "channelIdLabel": "Channel ID",
          "channelIdHint": "In Slack: right-click the channel → View channel details → copy the Channel ID at the bottom (starts with C). EchoNova adds itself automatically.",
          "joinOk": "✅ EchoNova joined the channel. Mention @EchoNova there and it'll reply.",
          "joinPrivate": "This looks like a private channel — Slack won't let the bot add itself. In Slack, type /invite @EchoNova once in the channel and you're set.",
          "joinNotFound": "Couldn't find that channel. Double-check the ID, or type /invite @EchoNova in the channel.",
          "joinReauth": "Slack needs reconnecting to auto-join channels. Reconnect it in Deploy → Integrations, or invite @EchoNova manually.",
          "joinManual": "Saved. If the bot stays quiet, type /invite @EchoNova in the channel.",
          "channelIdInvalid": "That doesn't look like a channel ID — it starts with C, e.g. C0123ABCD.",
          "atLeastOne": "Turn on at least one of the two options.",
          "save": "Save",
          "cancel": "Cancel",
          "unlink": "Unlink from this agent",
          "unlinkConfirm": "Slack will stop talking to this agent.",
          "requiredField": "This field is required.",
          "addConnection": "Add connection",
          "addTitle": "Add a connection",
          "typeLabel": "Trigger",
          "connDm": "Direct message",
          "connChannel": "Channel",
          "add": "Add",
          "statusConnections": "{{count}} connected",
          "emptyTitle": "No connections yet",
          "emptyBody": "Add a connection to let this agent chat in Slack.",
          "allConnected": "All your Slack workspaces are fully connected to this agent.",
          "disconnect": "Disconnect",
          "toastAdded": "Connection added",
          "toastDisconnected": "Disconnected"
        },
        "metaBind": {
          "rowBlurb": "Let people message this agent on {{provider}}.",
          "addTitle": "Add a connection",
          "integrationLabel": "Connected account",
          "connect": "Connect",
          "disconnect": "Disconnect",
          "add": "Add connection",
          "cancel": "Cancel",
          "emptyTitle": "No connections yet",
          "emptyBody": "Connect an account to let this agent reply on this channel.",
          "statusConnected": "{{count}} connected",
          "statusNone": "Not connected",
          "toastConnected": "Connected",
          "toastDisconnected": "Disconnected",
          "allConnected": "All your accounts are connected to this agent."
        },
        "redesign": {
          "deleteConversation": "Delete",
          "deleteConversationConfirm": "Delete for good?",
          "deleteConversationKeep": "Keep",
          "conversationDeleted": "Conversation deleted",
          "deleteConversationError": "This conversation was not deleted. Try again.",
          "deleteConversationLive": "You can delete this conversation a few minutes after it ends.",
          "deleteConversationForbidden": "You do not have permission to delete conversations in this workspace.",
          "comingSoon": "Soon",
          "title": "Connected Channels",
          "subtitle": "Connect and manage customer interfaces across Voice, Messaging, and Support ticketing.",
          "addChannel": "Add Channel",
          "loadErrorTitle": "Couldn't load channels",
          "loadErrorBody": "Check your connection and try again.",
          "retry": "Retry",
          "emptyTitle": "No messaging channels connected",
          "emptyBody": "Add a connected account so this agent can start handling conversations.",
          "categories": {
            "all": "All",
            "web": "Web",
            "voice": "Voice & Telephony",
            "messaging": "Messaging",
            "support": "Support & Service"
          },
          "assignedRoute": "Assigned route",
          "workspace": "Workspace",
          "routing": "Routing",
          "conversations": "Conversations",
          "integrationDescription": "{{provider}} customer conversation channel",
          "actions": "Channel actions",
          "viewDetails": "View details",
          "editTriggers": "Edit triggers",
          "channelDetails": "Channel details",
          "close": "Close",
          "telephonyUiOnly": "Telephony details are display-only until the provisioning backend is available.",
          "status": {
            "active": "Active",
            "error": "Error",
            "open": "Open",
            "resolved": "Resolved",
            "failed": "Failed"
          },
          "tokenExpiry": {
            "soon": "Reconnect by {{date}}",
            "expired": "Token expired. Reconnect."
          },
          "agentName": "Agent",
          "pauseUiOnly": "Pause Channel",
          "live": "Live",
          "testAction": "Test",
          "disconnect": "Disconnect",
          "assignToAgent": "Assign to another agent",
          "detailTabs": "Channel detail sections",
          "tabs": {
            "overview": "Overview",
            "conversations": "Conversations"
          },
          "metrics": {
            "conversations": "Conversations",
            "messages": "Messages",
            "uniqueUsers": "Unique users",
            "resolved": "Resolved",
            "failed": "Failed",
            "avgResponse": "Avg. response time",
            "toolsTriggered": "Tools triggered",
            "duration": "Duration / session length",
            "turns": "Turns",
            "callDuration": "Call duration",
            "secondsUnit": "{{value}} seconds"
          },
          "twilioVoiceTitle": "Twilio voice calling service.",
          "voiceAndTelephony": "Voice & Telephony",
          "callStart": "Call Start {{time}}",
          "callEnd": "Call End {{time}}",
          "typeLabel": "Type",
          "filterAll": "All",
          "sourceLabel": "Source",
          "sourceWebsite": "Website",
          "ratedLabel": "Rated {{n}} of 5",
          "widgetOrigin": "Website",
          "shareLink": "Share link",
          "visitorComment": "Visitor comment",
          "type": {
            "voice": "Voice",
            "chat": "Chat"
          },
          "recentActivity": "Recent activity",
          "channel": "Channel",
          "connectedAs": "Connected as",
          "channelId": "Channel ID",
          "directMessages": "Direct Messages",
          "directMessagesBody": "Respond when users message the bot directly.",
          "responseInAll": "Response in all",
          "searchConversations": "Search for conversation...",
          "statusLabel": "Status",
          "back": "Back to channels",
          "chooseConnections": "Choose From Connection List",
          "chooseConnectionKnowledge": "Choose Connection knowledge",
          "connectNew": "Connect New",
          "search": "Search for...",
          "noResults": "No matching channels found.",
          "voiceAndText": "Voice and text messages",
          "messagingDesc": "Customer messaging",
          "supportDesc": "Support ticketing",
          "sipDesc": "Your own carrier or PBX",
          "choose": "Choose",
          "connect": "Connect",
          "add": "Add",
          "cancel": "Cancel",
          "connectedToast": "Channel connected",
          "disconnectedToast": "Channel disconnected",
          "oauthReturn": {
            "connected": "{{provider}} connected",
            "alreadyConnected": "This channel was already connected. It's now linked to this agent.",
            "alreadyBound": "This channel is already connected to another agent in this workspace. To move it, open that agent's Channels tab and use Assign to another agent.",
            "alreadyBoundTitle": "Move this channel?",
            "alreadyBoundConfirmBody": "This channel is connected to another agent. Move it to this agent?",
            "alreadyBoundWarning": "Open conversations on this channel will be closed.",
            "alreadyBoundConfirm": "Move",
            "alreadyBoundMovedToast": "Channel moved to this agent",
            "triggerSavedToast": "Slack triggers saved",
            "specificChannel": "Specific channel",
            "specificChannelHelp": "Enter the channel ID manually — the bot responds to @mentions there.",
            "channelIdLabel": "Channel ID",
            "channelIdInvalid": "This does not look like a valid Slack channel ID. Open the channel in Slack, then go to Channel details → About → Channel ID, such as C0123ABCDEF.",
            "errors": {
              "access_denied": "Access was declined. No changes were made.",
              "exchange_failed": "The connection didn't complete. Please try again.",
              "state_invalid": "The sign-in link expired or was invalid. Please try again.",
              "team_linked_elsewhere": "That Slack workspace is already connected to a different EchoNova workspace.",
              "phone_unresolved": "We couldn't resolve that WhatsApp phone number. Please try again.",
              "number_linked_elsewhere": "That WhatsApp number is already connected to a different EchoNova workspace.",
              "page_unresolved": "We couldn't resolve that page. Please try again.",
              "page_linked_elsewhere": "That page is already connected to a different EchoNova workspace.",
              "account_linked_elsewhere": "That account is already connected to a different EchoNova workspace.",
              "invalid_region": "That data center region isn't supported. Pick the region your account is in.",
              "org_lookup_failed": "We couldn't find an organization on that account. Check that the data center region matches.",
              "agent_lookup_failed": "We couldn't look up your agent profile. Check the app's permissions and that you're an agent in this organization.",
              "webhook_failed": "We couldn't create the webhook. Check the app's permissions, then reconnect.",
              "save_failed": "We couldn't save the connection. Please try again.",
              "unexpected": "Something went wrong connecting this channel. Please try again.",
              "org_linked_elsewhere": "That organization is already connected to a different EchoNova workspace.",
              "unknown": "Something went wrong connecting this channel. Please try again."
            }
          },
          "metaPick": {
            "title": "Choose what to connect",
            "subtitle": "Tick every account to connect. Each one becomes its own channel.",
            "connect": "Connect",
            "done": "Done",
            "expired": "This choice expired. Start again.",
            "loadFailed": "Couldn't load the accounts. Try again.",
            "connectFailed": "Something went wrong. Check your channels, then try again.",
            "maxHint": "Connect up to 50 at a time.",
            "states": {
              "connected_here": "Connected here",
              "taken": "In another workspace"
            },
            "outcomes": {
              "connected": "Connected",
              "refreshed": "Reconnected",
              "already_bound": "On another agent",
              "taken": "In another workspace",
              "webhook_failed": "Meta refused the webhook. Try again.",
              "failed": "Couldn't connect. Try again."
            }
          },
          "connectAccount": "Connect {{provider}} Account",
          "connectAccountBody": "Connect your secure integration to dispatch this conversational agent to channels or workspaces.",
          "setupInfo": "Connection information",
          "setupTabs": {
            "configure": "Configure",
            "triggers": "Triggers",
            "tools": "Tools",
            "howTo": "How To Connect"
          },
          "triggerType": "Trigger",
          "name": "Name",
          "credential": "Credential",
          "directMessage": "Direct Message",
          "directMessageBody": "A direct message is sent to the bot.",
          "channelMessage": "Channel Message",
          "channelMessageBody": "A message is sent in a channel where the bot was added.",
          "tools": {
            "directMessage": "Direct Message",
            "addReaction": "Add reaction",
            "removeReaction": "Remove reaction",
            "readThread": "Read thread",
            "description": "Available to this channel connection."
          },
          "howTo": {
            "title": "Option A — OAuth",
            "installPermission": "The user installing the app must have permission to add apps to the target Slack workspace.",
            "openIntegrations": "Open Integrations",
            "openIntegrationsBody": "In the EchoNova dashboard, go to Agents > Integrations and select Slack.",
            "clickConnect": "Click Connect",
            "clickConnectBody": "Pick the OAuth credential and click Connect. You are redirected to Slack to choose which workspace to install the EchoNova app into and to approve the requested scopes.",
            "completeRedirect": "Complete the redirect",
            "completeRedirectBody": "After approval, Slack redirects you back to EchoNova and the connection is created. The Slack workspace ID is recorded automatically and used when configuring triggers."
          },
          "goToIntegrations": "Go to Integrations",
          "selectChannels": "Select Channels",
          "selectChannelsBody": "Configure which Slack streams this agent will monitor and route.",
          "announcementDescription": "Global workspace announcement channel",
          "confirmConnect": "Confirm Connect",
          "disconnectTitle": "Disconnect channel?",
          "rotatePassword": "Rotate password",
          "rotateTitle": "Rotate the SIP password?",
          "rotateBody": "Calls to {{name}} stop for a few seconds while the new password is set. The old password stops working. Update your PBX right after.",
          "rotateConfirm": "Rotate password",
          "disconnectBody": "This permanently deletes {{name}} and its saved credential. Reconnecting later starts a brand new connection.",
          "reassignTitle": "Assign to another agent",
          "reassignBody": "Choose the agent that should receive {{name}}.",
          "reassignWarning": "Open conversations on this channel will be closed. History stays with this agent.",
          "reassignConfirm": "Assign",
          "reassignedToast": "Assigned to {{agent}}",
          "reassignFailed": "Couldn't assign this channel. Please try again.",
          "reassignEmpty": "There are no other agents in this workspace yet.",
          "reassignLoadError": "Couldn't load agents. Please try again.",
          "reassignLoadingAgents": "Loading agents…",
          "conversationDetails": "Conversation Details",
          "user": "User",
          "conversationId": "Conversation ID",
          "date": "Date",
          "sampleReply": "Of course — tell me how I can help.",
          "sampleUserMessage": "Can you help me?",
          "copy": "Copy",
          "copied": "Copied",
          "loadEarlier": "Load earlier messages",
          "llmSeconds": "LLMS {{seconds}} Sec",
          "conversationsNoResults": "No conversations found.",
          "conversationsLoadErrorTitle": "Couldn't load conversations",
          "metricsLoadErrorTitle": "Couldn't load channel analytics",
          "phoneNumber": "Phone number",
          "channelState": "Channel state",
          "conversationCrumb": "Agents/Conversations/",
          "callStartLabel": "Call Start",
          "noMessagesInConversation": "No messages in this conversation.",
          "endLabel": "End",
          "closeReason": {
            "timeout": "Timed out",
            "human_takeover": "Taken over by a person",
            "escalated": "Handed off",
            "reassigned": "Moved to another agent",
            "end_conv_tool": "Agent ended the call",
            "time_limit": "Time limit reached",
            "message_limit": "Message limit reached",
            "error": "Ended by an error",
            "user_hangup": "Caller hung up",
            "session_deleted": "Call closed",
            "unknown": "Reason unknown"
          },
          "summary": "Summary",
          "addTag": "Add Tag",
          "savedTags": "Saved tags",
          "searchByTagName": "Search by tag name",
          "noTagMatches": "No tag matches.",
          "noTagsYet": "No tags yet.",
          "createNewTag": "Create New Tag",
          "manageSavedTags": "Manage Saved Tags",
          "removeTag": "Remove tag",
          "metadata": "Metadata",
          "copyId": "Copy ID",
          "totalCredits": "Total credits",
          "llmCost": "LLM cost",
          "noDataCollected": "No data has been collected",
          "editTagTitle": "Edit Tag",
          "createTagTitle": "Create Tag",
          "tagNamePlaceholder": "Tag name",
          "description": "Description",
          "optional": "Optional",
          "tagDescriptionPlaceholder": "An optional description of this tag…",
          "save": "Save",
          "manageTagsTitle": "Manage Tags",
          "addNewTag": "Add New Tag",
          "createdDate": "Created Date",
          "editAction": "Edit",
          "deleteAction": "Delete",
          "tabOverviewLabel": "Conversation Overview",
          "tabClientData": "Client data",
          "tabAnalysis": "Analysis",
          "tagsUpdateError": "Could not update tags.",
          "tagNameExistsError": "A tag with this name already exists.",
          "tagSaveError": "Could not save the tag.",
          "tagDeleteError": "Could not delete the tag."
        }
      },
      "session": {
        "callDuration": "Call duration",
        "muteMic": "Mute microphone",
        "unmuteMic": "Unmute microphone",
        "mute": "Mute",
        "unmute": "Unmute",
        "endCall": "End call",
        "end": "End",
        "muteSpeaker": "Mute speaker",
        "unmuteSpeaker": "Unmute speaker",
        "speaker": "Speaker",
        "close": "Close",
        "agentFallback": "Agent",
        "connecting": "Connecting…",
        "isSpeaking": "{{name}} is speaking",
        "listening": "Listening…",
        "ending": "Ending…",
        "callEnded": "Call ended",
        "somethingWrong": "Something went wrong",
        "connectFailed": "Could not connect to the call.",
        "outOfCreditsTitle": "Out of credits",
        "outOfCreditsBody": "The call ended because the workspace ran out of credits.",
        "startFailed": "Failed to start session",
        "couldNotStartChat": "Could not start the chat session.",
        "couldNotStartVoice": "Could not start the voice session.",
        "agentBusy": "This agent is at its limit of calls at once. Try again shortly.",
        "agentDailyLimit": "This agent reached its daily call limit.",
        "planConcurrencyLimit": "Your plan's limit of calls at once is reached. End a call or upgrade your plan.",
        "agentChatsBusy": "This agent is at its limit of chats at once. Try again shortly.",
        "agentChatsDailyLimit": "This agent reached its daily chat limit.",
        "planChatConcurrencyLimit": "Your plan's limit of chats at once is reached. End a chat or upgrade your plan.",
        "timeout": "The request timed out. Try again."
      },
      "phraseList": {
        "countOf": "{{n}} of {{max}}",
        "add": "Add",
        "remove": "Remove “{{line}}”",
        "errors": {
          "empty": "Type a line first.",
          "tooLong": "Keep it under {{maxLength}} characters.",
          "dup": "This line is already in the list.",
          "max": "You can add up to {{max}} lines."
        }
      },
      "agentDetail": {
        "voiceRetired": "{{name}} is no longer available. Calls use {{standIn}} until you pick another voice.",
        "voiceRetiredNoStandIn": "{{name}} is no longer available. Pick another voice so calls have a voice.",
        "modelRetired": "{{model}} is no longer available. Calls use {{standIn}} until you pick another model.",
        "breadcrumbAgents": "AGENTS",
        "breadcrumbDetails": "Agent Details",
        "noDescription": "No description",
        "lastUpdated": "Last updated:",
        "testAction": "Test",
        "tabOverview": "Overview",
        "tabPersona": "Persona",
        "tabVoice": "Voice",
        "tabKnowledge": "Knowledge",
        "tabModel": "Model & Tools",
        "tabTools": "Tools",
        "tabPlayground": "Playground",
        "tabChannels": "Channels",
        "tabConversations": "Conversations",
        "tabKnowledgeLibrary": "Knowledge Library",
        "tabToolsLibrary": "Tools Library",
        "tabConnections": "Connections",
        "overviewStatsLabel": "Agent overview statistics",
        "statVoiceCalls": "Voice calls",
        "statTextConversations": "Text conversations",
        "statUniqueCustomers": "Unique customers",
        "statAverageCallDuration": "Avg. call duration",
        "statCreditsUsed": "Credits used",
        "statLastThirtyDays": "last 30 days",
        "statVoiceCallsDetail": "voice calls",
        "statThisMonth": "this month",
        "lastTestResults": "Last test results",
        "noTestResults": "No test results are available for this agent yet.",
        "recentConversations": "Recent conversations",
        "viewAll": "View All",
        "noConversations": "No conversations are available for this agent yet.",
        "voiceConfiguration": "Voice configuration",
        "configureVoice": "Configure voice",
        "testYourAgent": "Test your agent",
        "testYourAgentBody": "Start a live voice session using the agent's current configuration.",
        "dataUnavailable": "This data is not available from the current application API yet.",
        "errorBody": "This agent may have been removed, or it belongs to a different workspace.",
        "backToAgents": "Back to agents",
        "untitledAgent": "Untitled agent",
        "agentNameLabel": "Agent name",
        "addRole": "Add a role",
        "agentRoleLabel": "Agent role",
        "agentStatusLabel": "Agent status",
        "statusActive": "Active",
        "statusLive": "Live",
        "statusArchived": "Archived",
        "startVoiceSession": "Start voice session",
        "starting": "Starting…",
        "startSession": "Start session",
        "tabsLabel": "Agent detail tabs",
        "archivedBadge": "Archived.",
        "archivedRestoreHint": "Restore this agent to make changes.",
        "agentsBreadcrumb": "Agents",
        "archivedBannerBody": "This agent is archived. It can't take calls or start a session until you restore it.",
        "savingLabel": "Saving…",
        "savedLabel": "Saved",
        "notSavedLabel": "Not saved",
        "settingsLabel": "Settings",
        "settingsAlwaysAvailable": "Always Available",
        "settingsSetWorkingHours": "Set Working Hours",
        "personalityRequiredAdd": "Required: add personality",
        "writeAction": "Write",
        "editAction": "Edit",
        "autosaveHint": "Changes save automatically and take effect on the next session, never mid-call.",
        "rowIdentity": "Identity",
        "rowStatus": "Status",
        "rowModel": "Model",
        "rowVoice": "Voice",
        "identityDesc": "Your agent's name and a short description.",
        "statusDesc": "Whether this agent is active or archived.",
        "modelDesc": "The provider and model that power replies.",
        "voiceDesc": "The voice your agent speaks with.",
        "soundTagsHeading": "Sound tags",
        "soundTagsDesc": "Let the agent laugh, sigh or chuckle when the moment calls for it.",
        "normalizeNumbersHeading": "Read numbers naturally",
        "normalizeNumbersDesc": "Numbers, dates, times and money are spoken the way the voice's dialect says them.",
        "fillersHeading": "Lookup fillers",
        "fillersDesc": "Short lines the agent says while it looks something up, so callers don't sit in silence.",
        "fillersCustomHeading": "Custom lines (optional)",
        "fillersCustomDesc": "Write your own lines, or leave a list empty to use the default lines for the voice's dialect.",
        "fillersAckLabel": "Opening lines",
        "fillersAckPlaceholder": "e.g. One moment, let me check that for you.",
        "fillersHoldLabel": "Still-checking lines",
        "fillersHoldPlaceholder": "e.g. Still checking, thanks for waiting.",
        "fillersThinkLabel": "Thinking lines",
        "fillersThinkDesc": "Said when the agent's reply is slow and it isn't looking anything up.",
        "fillersThinkPlaceholder": "e.g. Let me think about that for a second.",
        "fillersThinkSympathyLabel": "Thinking lines for upset callers",
        "fillersThinkSympathyDesc": "Same moment, when the caller sounds upset.",
        "fillersThinkSympathyPlaceholder": "e.g. I understand, give me a moment.",
        "fillersUsingDefaults": "Empty — the default lines are used.",
        "usedVoicesHeading": "Used Voices",
        "voicesCountOne": "voice",
        "voicesCountMany": "voices",
        "primaryVoice": "Primary",
        "voiceSettingsAction": "Voice Settings",
        "addVoice": "Add voice",
        "defaultVoice": "Default",
        "makeDefaultVoice": "Make default",
        "removeVoice": "Remove",
        "changeAction": "Change",
        "playVoicePreview": "Play preview of {{name}}",
        "pauseVoicePreview": "Pause preview of {{name}}",
        "notSet": "Not set",
        "identityTitle": "Identity",
        "personalityTitle": "Personality",
        "nameHint": "Your agent introduces itself with the name written in its Personality. If there is none, it uses this name.",
        "descriptionHint": "Shown in your agents list. The caller never hears it.",
        "descriptionLabel": "Description",
        "nameRequired": "Name is required.",
        "saveAction": "Save",
        "voiceSheetTitle": "Voice & speech",
        "deliveryTuning": "Delivery tuning",
        "tuneSpeed": "Speed",
        "tuneStability": "Stability",
        "tuneSimilarity": "Similarity",
        "tuneExaggeration": "Exaggeration",
        "modelSheetTitle": "Model",
        "providerLabel": "Provider",
        "modelLabel": "Model",
        "modelManaged": "Managed by Echonova for now.",
        "temperature": "Temperature",
        "deterministic": "Deterministic",
        "creative": "Creative",
        "reasoningEffortTitle": "Reasoning effort",
        "reasoningEffortDesc": "How hard the model reasons before it answers. Higher effort can improve quality but adds latency.",
        "reasoningEffortDefault": "Default",
        "reasoningEffortMinimal": "Minimal",
        "reasoningEffortLow": "Low",
        "reasoningEffortMedium": "Medium",
        "reasoningEffortHigh": "High",
        "reasoningEffortNone": "None",
        "reasoningEffortXhigh": "Extra high",
        "charactersLabel": "characters",
        "discardUnsaved": "Discard unsaved changes?",
        "keepEditing": "Keep editing",
        "discardAction": "Discard",
        "personalityHeading": "Personality",
        "personalitySubtitle": "How this agent thinks, speaks and behaves.",
        "personalityPromptLabel": "Personality prompt",
        "personalityPlaceholder": "Describe how this agent speaks and what information it knows. Write a short brief that helps a new teammate understand it.",
        "greetingHeading": "Greeting message",
        "greetingSubtitle": "The first line the agent says.",
        "greetingPlaceholder": "What it says when a conversation starts",
        "voiceHeading": "Voice",
        "voiceSubtitle": "The voice this agent speaks with.",
        "changeVoice": "Change voice",
        "noVoicePicked": "No voice picked yet.",
        "pickAVoice": "Pick a voice",
        "voiceTuning": "Voice tuning",
        "stability": "Stability",
        "variable": "Variable",
        "stable": "Stable",
        "similarity": "Similarity",
        "loose": "Loose",
        "faithful": "Faithful",
        "speed": "Speed",
        "slower": "Slower",
        "faster": "Faster",
        "exaggeration": "Exaggeration",
        "neutral": "Neutral",
        "intense": "Intense",
        "searchKnowledgeLabel": "Search knowledge base",
        "searchDocsPlaceholder": "Search documents",
        "configureRag": "Configure RAG",
        "retrievalConfigLabel": "Retrieval configuration",
        "retrieval": "Retrieval",
        "alwaysOn": "Always on",
        "retrievalDescription": "The agent always searches the documents below. Set how much it relies on these documents and how closely a result must match to be considered relevant.",
        "topDocuments": "Top documents",
        "relevanceThreshold": "Relevance threshold",
        "stricterMatches": "Higher means stricter matches.",
        "addDocument": "Add document",
        "addUrl": "Add URL",
        "addFiles": "Add Files",
        "createText": "Create Text",
        "clear": "Clear",
        "filterAll": "All",
        "filterFiles": "Files",
        "filterWeb": "Web",
        "filterText": "Text",
        "storageUsedTitle": "{{used}} of {{limit}} used",
        "noDocumentsTitle": "No documents yet",
        "noDocumentsBody": "Add a URL, upload a file, or paste text. The agent draws on everything you add here.",
        "nothingMatches": "Nothing matches",
        "clearSearchOrFilters": "Clear the search or filters.",
        "knowledgeSourcesLabel": "Knowledge sources",
        "colDocument": "Document",
        "colUpdated": "Updated",
        "colActions": "Actions",
        "indexing": "Indexing",
        "incomplete": "Incomplete",
        "failed": "Failed",
        "resume": "Resume",
        "retryUpload": "Retry upload",
        "retry": "Retry",
        "byCreator": "by {{name}}",
        "removeSource": "Remove source",
        "toolsHeading": "Tools",
        "toolsSubtitle": "Actions the agent can take during a call.",
        "modelHeading": "Model",
        "modelSubtitle": "The reasoning model powering this agent.",
        "precise": "Precise",
        "deleteDocumentTitle": "Delete document?",
        "delete": "Delete",
        "addFilesTitle": "Add files",
        "addFilesBody": "Pick or drag files from your computer. The agent will index them and use them to answer.",
        "dropFiles": "Drop files here, or click to choose",
        "multipleFilesWelcome": "Multiple files welcome",
        "allowedTypes": "Allowed types",
        "maxPerFile": "Maximum {{max}} per file.",
        "done": "Done",
        "addWebSourceTitle": "Add a web source",
        "addWebSourceBody": "Index a single page, or crawl an entire site. The agent retrieves from it during conversations.",
        "urlLabel": "URL",
        "urlPlaceholder": "https://example.com/article",
        "mode": "Mode",
        "singlePage": "Single Page",
        "justThisUrl": "Just this URL.",
        "crawlSite": "Crawl site",
        "followInternalLinks": "Follow internal links.",
        "depth": "Depth",
        "depthHint": "Link levels to follow. 1–5.",
        "maxPages": "Max pages",
        "maxPagesHint": "Hard cap to keep the index focused. 1–500.",
        "cancel": "Cancel",
        "adding": "Adding",
        "add": "Add",
        "createTextTitle": "Create text snippet",
        "createTextBody": "Give it a short name and the content the agent should remember.",
        "textNameLabel": "Name",
        "textNamePlaceholder": "e.g. Return policy",
        "textContentLabel": "Content",
        "textContentPlaceholder": "Paste or type the content the agent should know.",
        "create": "Create",
        "unsavedChanges": "Unsaved changes",
        "discard": "Discard",
        "saveTitle": "Save ({{shortcut}})",
        "saving": "Saving…",
        "saveChanges": "Save changes",
        "leaveTitle": "Leave with unsaved changes?",
        "leaveBody": "Your edits to this agent will be lost. Save first if you want to keep them.",
        "stay": "Stay",
        "discardAndLeave": "Discard and leave",
        "fieldName": "Name",
        "fieldPersonality": "Personality",
        "errorRequired": "{{label}} is required.",
        "errorMaxLength": "{{label}} must be {{max}} characters or fewer.",
        "storageLimitTitle": "Storage limit reached",
        "storageLimitBody": "Your plan includes {{limit}} of knowledge storage. Delete some documents or upgrade your plan to add more.",
        "upgradePlanAction": "Upgrade plan",
        "errUnsupportedType": "{{name}}: unsupported file type. Allowed: {{allowed}}",
        "errOverLimit": "{{name}}: over {{max}} limit.",
        "errNotEnoughStorage": "{{name}}: needs {{needs}}, only {{left}} left in your plan. Upgrade to upload more.",
        "uploadFailedTitle": "Upload failed",
        "tryAgain": "Try again.",
        "fileMismatchTitle": "File doesn't match",
        "fileMismatchBody": "Expected {{filename}} ({{size}}). Picked file is a different size.",
        "resumeFailedTitle": "Resume failed",
        "unsupportedFileTitle": "Unsupported file",
        "allowedList": "Allowed: {{allowed}}",
        "errEnterUrl": "Enter a URL.",
        "errInvalidUrl": "Enter a valid URL starting with http:// or https://",
        "errCouldNotAddUrl": "Could not add this URL.",
        "errSnippetName": "Give this snippet a name.",
        "errSnippetContent": "Add some content for the snippet.",
        "errSnippetOverLimit": "Snippet is over the {{max}} limit.",
        "deleteUrlFailedTitle": "Couldn't delete URL",
        "deleteDocFailedTitle": "Couldn't delete document",
        "removeSizeNote": "({{size}} will be freed)",
        "removeConfirmMessage": "Permanently remove \"{{name}}\"{{sizeNote}}. The agent will lose access to it. This can't be undone.",
        "renameFailedTitle": "Couldn't rename document",
        "changesSaved": "Changes saved",
        "archivedRestoreFirst": "This agent is archived. Restore it first to make changes.",
        "fieldsNeedAttention": "Some fields need attention.",
        "saveFailed": "Couldn't save changes. Try again.",
        "archiveAction": "Archive",
        "pauseAgentAction": "Pause Agent",
        "restoreAction": "Restore",
        "failedToStartSession": "Failed to start the session.",
        "cannotStartSession": "Cannot start session",
        "changeStatusFailedTitle": "Couldn't change status",
        "agentArchived": "Agent archived",
        "agentRestored": "Agent restored",
        "modelPickLabel": "Model",
        "modelPickHint": "The model this agent runs on. The provider is set automatically.",
        "modelsLoading": "Loading models…",
        "modelsError": "Couldn't load the model list. Showing your current selection.",
        "modelDeprecated": "This model is no longer available. Pick another to keep this agent working.",
        "modelPreviewTag": "Preview",
        "modelPickerTitle": "Choose a model",
        "modelPriceInput": "Input",
        "modelPriceCached": "Cached",
        "modelPriceCacheWrite": "Cache write",
        "modelPriceOutput": "Output",
        "modelPriceProvider": "Provider price per 1M tokens: {{prices}}, plus {{fee}}%",
        "modelPriceOnPlan": "On your plan: {{prices}} credits per 1M tokens",
        "modelPriceUnlimited": "Included in your unlimited plan",
        "modelPriceUnlimitedNote": "The price of the call and of this model is included in your unlimited plan. Nothing is charged for it.",
        "modelPriceProviderNoFee": "Provider price per 1M tokens: {{prices}}",
        "modelPriceDefault": "Default price",
        "modelPricePerMinute": "≈ {{n}} credits / min on your plan",
        "modelPriceEstimateNote": "Estimated for a voice call: 2,500 credits a minute for the call, plus about 16,000 AI tokens a minute on this model. Real cost depends on your prompt and call length.",
        "analyticsLoadErrorTitle": "Couldn't load analytics",
        "analyticsLoadErrorBody": "Check your connection and try again.",
        "visitorLabel": {
          "generic": "Visitor",
          "widget_voice": "Website visitor",
          "widget_chat": "Website visitor",
          "web_chat": "Web visitor",
          "slack": "Slack conversation",
          "whatsapp": "WhatsApp contact",
          "zendesk": "Ticket requester",
          "zoho_desk": "Ticket requester",
          "intercom": "Ticket requester",
          "genesys": "Chat visitor"
        },
        "channelLabel": {
          "slack": "Slack",
          "whatsapp": "WhatsApp",
          "messenger": "Messenger",
          "instagram": "Instagram",
          "sms": "SMS",
          "twilio": "Twilio",
          "widget_voice": "Website voice",
          "widget_chat": "Website chat",
          "web_chat": "Web chat",
          "web_voice": "Web voice",
          "zendesk": "Zendesk",
          "zoho_desk": "Zoho Desk",
          "intercom": "Intercom",
          "genesys": "Genesys",
          "generic": "Channel"
        },
        "generateByAi": "Generate By AI",
        "tabSettings": "Settings",
        "testRuns": {
          "title": "Latest test results",
          "emptyTitle": "No tests run yet",
          "emptyBody": "Run a test to check your agent’s responses, knowledge and tools before going live.",
          "run": "Run a test",
          "chatTest": "Text chat test",
          "voiceTest": "Voice call test",
          "passed": "Passed",
          "failed": "Failed",
          "running": "Running",
          "latency": "Latency",
          "turns": "Turns",
          "toolsTriggered": "Tools triggered",
          "justNow": "Just now",
          "minutesAgo": "{{value}} Minutes Ago",
          "hoursAgo": "{{value}} Hours Ago",
          "daysAgo": "{{value}} Days Ago",
          "minuteAgo": "{{value}} Minute Ago",
          "hourAgo": "{{value}} Hour Ago",
          "yesterday": "Yesterday"
        },
        "overview": {
          "recoPrevAria": "Previous recommendation",
          "recoListAria": "Agent recommendations",
          "recoNextAria": "Next recommendation",
          "setupRequiredBadge": "Setup required",
          "setupRequiredTitle": "Get your agent ready",
          "setupRequiredBody": "Complete these steps before deploying your agent.",
          "continueSetup": "Continue setup",
          "recommendedBadge": "Recommended",
          "addTestsTitle": "Add test coverage",
          "addTestsBody": "This agent has no automated tests. Add tests to catch issues before they reach your customers.",
          "addTestsCta": "Add tests",
          "needsReviewBadge": "Needs Review",
          "connectChannelBody": "Choose where customers can reach your agent, then run a check.",
          "startConnect": "Start Connect",
          "performanceTitle": "Performance overview",
          "numbersTitle": "Overview numbers",
          "performanceEmpty": "Performance data will appear after your agent goes live",
          "conversationsEmptyBody": "Conversations will appear here after you connect a channel and your agent goes live."
        },
        "persona": {
          "previewSampleBadge": "Sample",
          "previewCloseAria": "Close generated prompt preview",
          "previewSampleNotice": "Sample output — generation API integration pending. Your agent prompt has not been changed.",
          "close": "Close"
        }
      },
      "industries": {
        "retail_ecommerce": "Retail & E-commerce",
        "healthcare_medical": "Healthcare & Medical",
        "finance_banking": "Finance & Banking",
        "real_estate": "Real Estate",
        "education_training": "Education & Training",
        "hospitality_travel": "Hospitality & Travel",
        "automotive": "Automotive",
        "professional_services": "Professional Services",
        "technology_software": "Technology & Software",
        "government_public": "Government & Public",
        "food_beverage": "Food & Beverage",
        "manufacturing": "Manufacturing",
        "fitness_wellness": "Fitness & Wellness",
        "legal_services": "Legal Services",
        "non_profit": "Non-Profit",
        "media_entertainment": "Media & Entertainment",
        "other": "Other"
      },
      "useCases": {
        "personal_assistant": "Personal Assistant",
        "learning_companion": "Learning Companion",
        "creative_helper": "Creative Helper",
        "health_wellness": "Health & Wellness",
        "task_management": "Task Management",
        "research_assistant": "Research Assistant",
        "customer_support": "Customer Support",
        "outbound_sales": "Outbound Sales",
        "learning_development": "Learning and Development",
        "scheduling": "Scheduling",
        "lead_qualification": "Lead Qualification",
        "answering_service": "Answering Service",
        "class_booking": "Class Booking",
        "workout_planning": "Workout Planning",
        "nutrition_guidance": "Nutrition Guidance",
        "progress_tracking": "Progress Tracking",
        "membership_management": "Membership Management",
        "wellness_coaching": "Wellness Coaching",
        "other": "Other"
      },
      "settings": {
        "timeZone": "Time Zone",
        "setWorkingHours": "Set Working Hours",
        "on": "On",
        "off": "Off",
        "startTime": "Working Hours Start Time",
        "endTime": "Working Hours End Time",
        "overnight": "This window runs from the evening into the next morning. The agent responds to messages from the start time until the end time the following day.",
        "callLimits": "Call limits",
        "callLimitsHint": "Apply to voice calls on every channel.",
        "maxCallLength": "Max call length",
        "idleTimeout": "Hang up after silence",
        "idleTimeoutHint": "If the caller says nothing for this long, the agent says goodbye and ends the call.",
        "seconds": "seconds",
        "maxCallsAtOnce": "Max calls at once",
        "planConcurrentCalls": "Your plan allows up to {{count}} calls at once across the workspace. The lower of the two limits applies.",
        "planConcurrentCallsUnlimited": "Your plan has no limit on calls at once.",
        "maxCallsPerDay": "Max calls per day",
        "chatLimits": "Chat limits",
        "chatLimitsHint": "Apply to website and playground chats. Messaging channels count toward chats at once but are never refused.",
        "maxChatLength": "Max chat length",
        "minutes": "minutes",
        "maxChatMessages": "Max messages per chat",
        "maxChatsAtOnce": "Max chats at once",
        "planConcurrentChats": "Your plan allows up to {{count}} chats at once across the workspace. The lower of the two limits applies.",
        "planConcurrentChatsUnlimited": "Your plan has no limit on chats at once.",
        "maxChatsPerDay": "Max chats per day",
        "noLimit": "No limit",
        "limitOutOfRange": "Enter a whole number in the allowed range.",
        "timeZonePlaceholder": "Select a time zone",
        "searchZones": "Search time zones…",
        "noZones": "No time zones match",
        "yourTimeZone": "Your timezone",
        "zone": {
          "africa_cairo": "Cairo",
          "asia_riyadh": "Riyadh",
          "asia_dubai": "Dubai",
          "asia_kuwait": "Kuwait",
          "asia_qatar": "Doha",
          "asia_muscat": "Muscat",
          "asia_beirut": "Beirut",
          "asia_damascus": "Damascus",
          "africa_khartoum": "Khartoum",
          "africa_tripoli": "Tripoli",
          "europe_london": "London",
          "utc": "UTC",
          "europe_paris": "Paris/Berlin",
          "america_new_york": "Eastern Time (US)",
          "america_chicago": "Central Time (US)",
          "america_denver": "Mountain Time (US)",
          "america_los_angeles": "Pacific Time (US)",
          "asia_kolkata": "India",
          "asia_tokyo": "Tokyo",
          "asia_shanghai": "Shanghai",
          "australia_sydney": "Sydney"
        },
        "pageTitle": "Settings",
        "pageSubtitle": "Secrets and authentication data reused by your tools and channels.",
        "secrets": "Secrets",
        "authConnections": "Auth connections"
      },
      "secrets": {
        "subtitle": "Reusable secret values referenced by your tools.",
        "create": "New secret",
        "createNew": "Create new",
        "createTitle": "New secret",
        "editTitle": "Rotate secret",
        "name": "Name",
        "namePh": "STRIPE_KEY",
        "value": "Value",
        "save": "Save",
        "cancel": "Cancel",
        "rotate": "Rotate",
        "delete": "Delete",
        "deleteTitle": "Delete secret",
        "deleteMessage": "Delete \"{{name}}\"? Tools that reference it will break.",
        "deletedToast": "Deleted {{name}}",
        "inUseError": "In use by a tool. Remove the reference first.",
        "deleteError": "Couldn't delete the secret.",
        "saveError": "Couldn't save the secret.",
        "loading": "Loading…",
        "empty": "No secrets yet.",
        "pickNone": "No secret",
        "keepHint": "leave blank to keep",
        "required": "This field is required",
        "emptyTitle": "No secrets yet",
        "rowActions": "Secret actions",
        "loadingAria": "Loading secrets"
      },
      "authConnections": {
        "subtitle": "Reusable auth methods referenced by tools and channels.",
        "add": "Add auth",
        "createNew": "Create new",
        "addTitle": "Add auth connection",
        "editTitle": "Edit auth connection",
        "name": "Name",
        "namePh": "My API auth",
        "type": "Type",
        "save": "Save",
        "cancel": "Cancel",
        "edit": "Edit",
        "delete": "Delete",
        "deleteTitle": "Delete auth connection",
        "deleteMessage": "Delete \"{{name}}\"? Tools or channels that reference it will break.",
        "deletedToast": "Deleted {{name}}",
        "inUseError": "In use by a tool or channel. Remove the reference first.",
        "deleteError": "Couldn't delete the connection.",
        "saveError": "Couldn't save the connection.",
        "loading": "Loading…",
        "empty": "No auth connections yet.",
        "pickNone": "No auth",
        "requiredField": "This field is required",
        "types": {
          "basic": "Basic",
          "bearer": "Bearer token",
          "oauth2_client_credentials": "OAuth2 client credentials",
          "oauth2_jwt": "OAuth2 JWT"
        },
        "fields": {
          "username": "Username",
          "password": "Password",
          "token": "Token",
          "clientId": "Client ID",
          "tokenUrl": "Token URL",
          "clientSecret": "Client secret",
          "scopes": "Scopes",
          "scopesHelp": "Space- or comma-separated.",
          "extraParams": "Extra params",
          "extraParamsHelp": "One key=value per line.",
          "issuer": "Issuer",
          "subject": "Subject",
          "audience": "Audience",
          "algorithm": "Algorithm",
          "privateKey": "Private key",
          "privateKeyHelp": "PEM-encoded."
        },
        "emptyTitle": "No connections yet",
        "typeLocked": "Connection type cannot be changed after creation.",
        "rowActions": "Connection actions",
        "provider": "Provider",
        "providerLocked": "The provider can't be changed after creating.",
        "providers": {
          "twilio": "Twilio",
          "meta": "Meta",
          "slack": "Slack",
          "google": "Google",
          "telegram": "Telegram",
          "custom": "Custom"
        },
        "loadingAria": "Loading connections"
      },
      "usage": {
        "none": "Not used",
        "one": "Used in 1 tool",
        "many": "Used in {{count}} tools",
        "usedBy": "Used by"
      },
      "integrations": {
        "pageTitle": "Integrations",
        "pageSubtitle": "Connect external platforms once, then link them to your agents.",
        "add": "Add integration",
        "searchPh": "Search integrations…",
        "emptyTitle": "No integrations yet",
        "emptyBody": "Connect Slack to let people talk to your agents where they already work.",
        "linkedTo": "Linked: {{agent}}",
        "notLinked": "Not linked",
        "rename": "Rename",
        "renameTitle": "Rename integration",
        "nameLabel": "Name",
        "save": "Save",
        "cancel": "Cancel",
        "disconnect": "Disconnect",
        "disconnectTitle": "Disconnect Slack?",
        "disconnectBody": "\"{{name}}\" will stop responding in Slack. You can reconnect anytime.",
        "connectedBanner": "Slack connected! Now open an agent's Channels tab to link it.",
        "whatsappConnectedBanner": "WhatsApp connected! Now open an agent's Channels tab to link it.",
        "metaConnectedBanner": "Connected! Now open an agent's Channels tab to link it.",
        "gcConnectedBanner": "Google Calendar connected! Add its tools from an agent's Tools tab.",
        "zohoDeskConnectedBanner": "Zoho Desk connected! Now open an agent's Channels tab to link it.",
        "intercomConnectedBanner": "Intercom connected! Now open an agent's Channels tab to link it.",
        "errors": {
          "access_denied": "{{provider}} access was declined. No changes were made.",
          "state_invalid": "The sign-in link expired or was invalid. Please try again.",
          "state_expired": "The sign-in link expired. Please try again.",
          "exchange_failed": "{{provider}} didn't complete the connection. Please try again.",
          "team_linked_elsewhere": "That {{provider}} account is already connected to a different EchoNova workspace.",
          "already_connected": "This {{provider}} account is already connected.",
          "invalid_region": "That data center region isn't supported. Pick the region your {{provider}} account is in.",
          "org_lookup_failed": "We couldn't find a {{provider}} organization on that account. Check that the data center region matches your account.",
          "agent_lookup_failed": "We couldn't look up your agent profile in {{provider}}. Check the app's permissions and that you're an agent in this organization.",
          "webhook_failed": "{{provider}} wouldn't let us create the webhook. Check the app's permissions, then reconnect.",
          "save_failed": "We couldn't save the {{provider}} connection. Please try again.",
          "unexpected": "Something went wrong connecting {{provider}}. Please try again.",
          "unknown": "Something went wrong connecting {{provider}}. Please try again."
        },
        "connect": "Connect",
        "aboutEmpty": "No details available.",
        "toolsCount": "{count} tools",
        "addDialog": {
          "title": "Add integration",
          "searchPh": "Search…",
          "noResults": "No integrations match your search.",
          "back": "Back",
          "categories": {
            "all": "All",
            "messaging": "Messaging",
            "productivity": "Productivity",
            "telephony": "Telephony",
            "helpdesk": "Customer Support"
          },
          "slack": {
            "title": "Connect Slack",
            "name": "Slack",
            "blurb": "Let people talk to your agents from Slack.",
            "nameLabel": "Name",
            "nameHint": "Shown in your integrations list so you can tell workspaces apart.",
            "howTitle": "How it works",
            "how1": "Click Connect and sign in to the Slack workspace you want to link.",
            "how2": "Approve the requested permissions on Slack's authorization screen.",
            "how3": "You'll be redirected back here - then open an agent's Channels tab to link it.",
            "connect": "Connect"
          },
          "meta": {
            "tokenLabel": "Access token",
            "here": "here",
            "importAnother": "Import another account",
            "onThisAgent": "on this agent",
            "onAnotherAgent": "on another agent",
            "triggerTitle": "Incoming messages",
            "triggerNote": "Messages to this connected account are handled by the linked agent."
          },
          "whatsapp": {
            "title": "Connect WhatsApp",
            "accountPlaceholder": "WhatsApp account",
            "selectHint": "Select a WhatsApp account",
            "noAccounts": "You have no WhatsApp accounts. Import an account",
            "howtoIntro": "Connect a WhatsApp Business number to your agents:",
            "how1Title": "Import your account",
            "how1Body": "Under Credential, click “here” (or “Import another account”). Meta opens a window with your business accounts.",
            "how2Title": "Pick the account and approve",
            "how2Body": "Choose the WhatsApp Business account that holds the number, then approve.",
            "how3Title": "Choose the numbers",
            "how3Body": "Back here, tick the numbers to connect. They connect to this agent. To reuse an account imported earlier, pick it under Credential, name it and click Connect."
          },
          "messenger": {
            "title": "Connect Messenger",
            "accountPlaceholder": "Facebook Page",
            "selectHint": "Select a Facebook Page",
            "noAccounts": "You have no Facebook Pages. Import a Page",
            "howtoIntro": "Connect a Facebook Page's Messenger to your agents:",
            "how1Title": "Import your Page",
            "how1Body": "Under Credential, click “here” (or “Import another account”). Meta opens a window with the Facebook Pages you manage.",
            "how2Title": "Pick the Pages and approve",
            "how2Body": "Tick the Pages the agent should answer, then approve.",
            "how3Title": "Choose the Pages",
            "how3Body": "Back here, tick the Pages to connect. They connect to this agent. To reuse a Page imported earlier, pick it under Credential, name it and click Connect."
          },
          "instagram": {
            "title": "Connect Instagram",
            "accountPlaceholder": "Instagram account",
            "selectHint": "Select an Instagram account",
            "noAccounts": "You have no Instagram accounts. Import an account",
            "howtoIntro": "Connect an Instagram professional account to your agents:",
            "how1Title": "Import your account",
            "how1Body": "Under Credential, click “here” (or “Import another account”). Meta opens a window with the Facebook Pages you manage.",
            "how2Title": "Pick the Page linked to Instagram",
            "how2Body": "Choose the Page your Instagram professional account is linked to, then approve.",
            "how3Title": "Choose the accounts",
            "how3Body": "Back here, tick the Instagram accounts to connect. They connect to this agent. To reuse an account imported earlier, pick it under Credential, name it and click Connect."
          },
          "google_calendar": {
            "title": "Connect Google Calendar",
            "name": "Google Calendar",
            "blurb": "Give your agents calendar tools: check availability and manage events.",
            "nameLabel": "Name",
            "nameHint": "Shown in your integrations list so you can tell accounts apart.",
            "signInHint": "Sign in with Google to grant calendar access. You'll be redirected back here.",
            "connect": "Connect with Google",
            "howtoIntro": "Connect a Google account so your agents can use calendar tools:",
            "how1Title": "Click Connect with Google",
            "how1Body": "You'll be taken to Google to sign in to the account you want to connect.",
            "how2Title": "Grant calendar access",
            "how2Body": "Approve the requested calendar permissions on Google's consent screen.",
            "how3Title": "Add the tools to an agent",
            "how3Body": "You'll be redirected back here - then open an agent's Tools tab and add the Google Calendar tools."
          },
          "twilio": {
            "title": "Connect Twilio",
            "name": "Twilio",
            "blurb": "Let people reach your agents by phone, and send SMS from your number.",
            "nameLabel": "Name",
            "nameHint": "Shown in your integrations list so you can tell numbers apart.",
            "phoneLabel": "Phone number",
            "sidLabel": "Account SID",
            "tokenLabel": "Auth Token",
            "apiKeyOption": "Twilio API key",
            "connect": "Connect",
            "triggerTitle": "Incoming calls",
            "triggerNote": "Calls to this number reach the connected agent."
          },
          "sip_trunk": {
            "title": "Connect a SIP trunk",
            "nameLabel": "Name",
            "phoneLabel": "Phone number",
            "phoneHint": "The number your carrier sends in the To header, in E.164.",
            "allowedLabel": "Allowed IPs",
            "allowedHint": "Optional. One IP or CIDR per line, never 0.0.0.0/0. Only checked over TCP and TLS; UDP is for testing only.",
            "authLabel": "Authentication",
            "authDigest": "Password",
            "authIp": "Carrier IP allowlist",
            "usernameLabel": "SIP username",
            "usernameHint": "Optional. Defaults to the phone number.",
            "encryptionLabel": "Media encryption",
            "encryptionAllow": "Allow (SRTP if offered)",
            "encryptionRequire": "Require SRTP",
            "encryptionDisable": "Disable",
            "triggerTitle": "Incoming calls",
            "triggerNote": "Every call to this number starts a voice session with this agent.",
            "result": {
              "title": "Trunk credentials",
              "warning": "This password is shown once. It cannot be retrieved later. To get a new one, use Rotate password on this number.",
              "host": "SIP host",
              "hostMissing": "Ask Echonova support for the SIP host of your environment.",
              "number": "Number",
              "username": "Username",
              "password": "Password",
              "copy": "Copy",
              "copied": "Copied",
              "done": "I saved it",
              "leavePrompt": "Leave without copying the password?",
              "keepOpen": "Keep this open",
              "leave": "Leave",
              "ipNote": "No password for this trunk. Calls are accepted over TCP or TLS from the IP ranges you listed.",
              "close": "Done"
            }
          },
          "zendesk": {
            "title": "Connect Zendesk",
            "name": "Zendesk",
            "blurb": "Your agent answers support tickets as public replies, and hands off to your team when needed.",
            "nameLabel": "Connection name",
            "nameHint": "A label your team will recognize.",
            "subdomainLabel": "Zendesk subdomain",
            "subdomainHint": "The \"acme\" in acme.zendesk.com.",
            "emailLabel": "Admin email",
            "emailHint": "The Zendesk user the API token belongs to.",
            "tokenLabel": "API token",
            "tokenHint": "Zendesk Admin Center → Apps and integrations → APIs → add API token.",
            "connect": "Connect Zendesk",
            "triggerTitle": "New tickets",
            "triggerNote": "Tickets on this Zendesk account reach the connected agent."
          },
          "zoho_desk": {
            "title": "Connect Zoho Desk",
            "name": "Zoho Desk",
            "blurb": "Your agent answers support tickets as public replies, and hands off to your team when needed.",
            "nameLabel": "Connection name",
            "nameHint": "Shown in your integrations list so you can tell accounts apart.",
            "regionLabel": "Data center region",
            "regionUs": "US",
            "regionEu": "Europe",
            "regionIn": "India",
            "regionAu": "Australia",
            "regionJp": "Japan",
            "regionCa": "Canada",
            "regionSa": "Saudi Arabia",
            "connect": "Connect with Zoho",
            "triggerTitle": "New tickets",
            "triggerNote": "Tickets on this Zoho Desk account reach the connected agent."
          },
          "intercom": {
            "title": "Connect Intercom",
            "name": "Intercom",
            "blurb": "Paste the credentials from your Intercom app so your agent can answer conversations.",
            "nameLabel": "Connection name",
            "nameHint": "Shown in your integrations list so you can tell workspaces apart.",
            "accessTokenLabel": "Access token",
            "accessTokenHint": "Developer Hub → your app → Authentication.",
            "clientSecretLabel": "Client secret",
            "clientSecretHint": "Developer Hub → your app → Basic information. Used to verify webhook signatures.",
            "adminIdLabel": "Admin ID",
            "adminIdHint": "The numeric id of the teammate the agent replies as (Settings → Teammates).",
            "teamInboxLabel": "Team inbox ID (optional)",
            "teamInboxHint": "Leave blank to answer all conversations, or set a team id to pilot the agent on one inbox.",
            "connect": "Connect Intercom",
            "triggerTitle": "New conversations",
            "triggerNote": "Conversations in this Intercom workspace reach the connected agent."
          },
          "genesys": {
            "title": "Connect Genesys Cloud",
            "name": "Genesys Cloud",
            "blurb": "Your agent answers Genesys Cloud bot conversations and hands off to a human queue when needed.",
            "nameLabel": "Connection name",
            "nameHint": "Shown in your integrations list so you can tell orgs apart.",
            "regionLabel": "Region",
            "regionUsEast1": "US East (us-east-1)",
            "regionUsEast2": "US Gov (us-east-2)",
            "regionUsWest2": "US West (us-west-2)",
            "regionCaCentral1": "Canada (ca-central-1)",
            "regionSaEast1": "São Paulo (sa-east-1)",
            "regionMxCentral1": "Mexico (mx-central-1)",
            "regionEuCentral1": "Frankfurt (eu-central-1)",
            "regionEuWest1": "Dublin (eu-west-1)",
            "regionEuWest2": "London (eu-west-2)",
            "regionEuCentral2": "Zurich (eu-central-2)",
            "regionMeCentral1": "UAE (me-central-1)",
            "regionApSouth1": "Mumbai (ap-south-1)",
            "regionApNortheast1": "Tokyo (ap-northeast-1)",
            "regionApNortheast2": "Seoul (ap-northeast-2)",
            "regionApNortheast3": "Osaka (ap-northeast-3)",
            "regionApSoutheast1": "Singapore (ap-southeast-1)",
            "regionApSoutheast2": "Sydney (ap-southeast-2)",
            "clientIdLabel": "OAuth Client ID",
            "clientIdHint": "Admin → Integrations → OAuth → create a Client Credentials grant client.",
            "clientSecretLabel": "OAuth Client Secret",
            "clientSecretHint": "Shown once when the OAuth client is created.",
            "connect": "Connect Genesys",
            "triggerTitle": "Bot Connector",
            "triggerNote": "Chat messages from your Genesys flows reach the agent you select as the bot.",
            "voiceTriggerTitle": "Audio Connector",
            "voiceTriggerNote": "Phone calls reach the agent whose ID is set as the Connector ID in Architect."
          }
        },
        "moreActions": "More actions",
        "deleteIntegration": "Delete integration",
        "deleteTitle": "Delete integration?",
        "deleteBody": "This removes “{{name}}” and its saved credential. Any agent using it will stop responding.",
        "disconnectNotes": {
          "twilio": "Disconnecting gives the number's call and SMS settings back to what they were.",
          "intercom": "Also remove the EchoNova webhook in your Intercom Developer Hub. We can't remove it for you."
        },
        "auth": {
          "botOauth": "Bot OAuth",
          "googleAccount": "Google account",
          "apiKey": "API key",
          "zohoAccount": "Zoho account",
          "intercomAccount": "Intercom account",
          "genesysAccount": "Genesys OAuth client"
        },
        "providers": {
          "slack": "Slack",
          "whatsapp": "WhatsApp",
          "messenger": "Messenger",
          "instagram": "Instagram",
          "google_calendar": "Google Calendar",
          "twilio": "Twilio",
          "sip_trunk": "SIP Trunk",
          "zendesk": "Zendesk",
          "zoho_desk": "Zoho Desk",
          "intercom": "Intercom",
          "genesys": "Genesys Cloud"
        },
        "credentialLabel": "Credential",
        "statusConnected": "Connected",
        "deleteShort": "Delete",
        "detail": {
          "tabs": {
            "configure": "Configure",
            "triggers": "Channel Triggers",
            "howto": "How to connect",
            "tools": "Tools"
          },
          "triggersIntro": "Conversation triggers available through your Slack integration.",
          "channelMessage": "Channel Message",
          "channelMessageDesc": "Someone @mentions the bot in a channel it was added to.",
          "directMessage": "Direct Message",
          "directMessageDesc": "A direct message is sent to the bot.",
          "existingTitle": "Existing connections",
          "existingIntro": "Existing conversation trigger connections.",
          "noConnections": "No triggers connected yet. Link this integration from an agent's Channels tab.",
          "agentLine": "Agent: {{name}}",
          "channelIdLine": "Channel ID: {{id}}",
          "unknownAgent": "an agent",
          "howtoIntro": "How people reach the connected agent through Slack:",
          "how1Title": "Connect Slack",
          "how1Body": "From Integrations, click Add integration, choose Slack, and approve it in your Slack workspace.",
          "how2Title": "Link an agent",
          "how2Body": "Open an agent's Channels tab and connect this integration - turn on Direct Message, or add a channel by its ID (channel details, the ID starting with C). EchoNova joins public channels automatically.",
          "how3Title": "Open Slack and send a message",
          "how3Body": "DM the bot from Apps then EchoNova, or mention @EchoNova in the linked channel, and the connected agent replies.",
          "zohoHowto": {
            "auto": "Tickets and customer replies now reach the bound agent automatically. Connecting created a webhook in your Zoho Desk account, so there's nothing else to set up.",
            "escalation": "When the agent escalates a ticket, it tags it echonova_escalated and stops replying so your team can take over.",
            "disconnect": "Disconnecting this integration removes the webhook from your Zoho Desk account."
          },
          "intercomHowto": {
            "setup": "In Intercom → Developer Hub, create an app. Copy its Access token and Client secret, and note the numeric Admin ID of the teammate the agent should post as.",
            "webhook": "In the app's Webhooks section, set the endpoint to your Echonova Intercom webhook URL and subscribe to conversation.user.created and conversation.user.replied.",
            "team": "Optional: route a slice of conversations to a dedicated Intercom team and paste its id as the Team inbox ID to pilot the agent on one queue.",
            "escalation": "When the agent escalates, it tags the conversation echonova_escalated, leaves an internal note, unassigns it, and stops replying."
          },
          "genesysHowto": {
            "oauthClient": "In Genesys Cloud Admin, create an OAuth client with the Client Credentials grant and a custom role granting integration:botconnector:edit. Genesys Sales must enable the Bot Connector feature on your org first.",
            "install": "Install the Genesys Bot Connector integration, then paste the Handle Utterance URI and header credential shown below into it.",
            "sync": "Paste the Bot Connector integration's id below and press Sync bots to pull it into Echonova.",
            "flow": "In Architect, add a Call Bot Connector action to a message flow, pick this agent as the bot, and branch on the escalate intent to hand off to a human queue."
          },
          "genesysVoiceHowto": {
            "title": "Voice (Audio Connector)",
            "install": "Install the Audio Connector integration from Genesys AppFoundry, then paste the Base Connection URI, API Key, and Client Secret shown below into it. Genesys Sales must enable BYOT Rate E on your org first.",
            "flow": "In Architect, create an Inbound Call Flow with a Call Audio Connector action, and set its Connector ID to this agent's id.",
            "duration": "Calls are capped at 15 minutes by Genesys's default limit."
          },
          "toolsIntro": "Actions available through your Slack integration.",
          "toolAddReaction": "Add reaction",
          "toolAddReactionDesc": "React to a message with an emoji.",
          "toolRemoveReaction": "Remove reaction",
          "toolRemoveReactionDesc": "Remove an emoji reaction from a message.",
          "toolDirectMessage": "Direct Message",
          "toolDirectMessageDesc": "A direct message is sent to the bot.",
          "toolReadThread": "Read thread",
          "toolReadThreadDesc": "Read the messages in a Slack thread.",
          "gcToolsIntro": "Actions available through your Google Calendar integration.",
          "gcCheckAvailability": "Check availability",
          "gcCheckAvailabilityDesc": "Find free and busy times across a calendar for a given window.",
          "gcCreateEvent": "Create event",
          "gcCreateEventDesc": "Add a new event with a title, time, and optional guests.",
          "gcListEvents": "List events",
          "gcListEventsDesc": "Read upcoming events from a calendar for a given range.",
          "gcListCalendars": "List calendars",
          "gcListCalendarsDesc": "List the calendars available on the connected Google account.",
          "twilioToolsIntro": "Actions available through your Twilio integration.",
          "smsSend": "Send SMS",
          "smsSendDesc": "Send a text message to any phone number from your connected number.",
          "bindLabel": "Handled by agent",
          "bindPh": "Choose an agent",
          "bindSave": "Link",
          "replyAsLabel": "Replying as",
          "replyAsPh": "Pick a teammate",
          "replyAsHint": "The Intercom teammate your agent posts replies as. Point this at a dedicated bot teammate so your team's own replies are recognised as a human taking over.",
          "genesysSetup": {
            "rotate": "Generate token",
            "rotateWarning": "Copy this token now; it won't be shown again. The old token stopped working, so paste this one into your Genesys Bot Connector.",
            "urlLabel": "Handle Utterance URI",
            "headerLabel": "Header name",
            "tokenLabel": "Header value (bot token)",
            "botConnectorIdLabel": "Bot Connector integration ID",
            "botConnectorIdPh": "e.g. 3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "syncButton": "Sync bots"
          },
          "genesysVoiceSetup": {
            "setUp": "Set up voice",
            "rotate": "Generate new keys",
            "notSetUp": "Not set up yet",
            "rotateWarning": "Copy these now; they won't be shown again. Any older keys stopped working, so paste these into your Genesys Audio Connector.",
            "baseUriLabel": "Base Connection URI",
            "apiKeyLabel": "API Key",
            "clientSecretLabel": "Client Secret"
          }
        },
        "toastSaved": "Changes saved",
        "toastDeleted": "Integration deleted",
        "toastDisconnected": "Disconnected"
      },
      "connections": {
        "name": "Name",
        "namePh": "e.g. Production account",
        "variant": "Credential type",
        "connect": "Connect",
        "cancel": "Cancel",
        "save": "Save",
        "requiredField": "This field is required.",
        "saveError": "Couldn't save the connection.",
        "pickNone": "No connection",
        "pickAccount": "Select an account",
        "connectNew": "Connect new account",
        "newAccount": "New account"
      },
      "playground": {
        "start": "Start a test session",
        "tryChat": "Try Chat",
        "tryCall": "Try Call",
        "cancel": "Cancel",
        "chat": "Chat",
        "call": "Call",
        "live": "Live",
        "connecting": "Connecting…",
        "placeholder": "Type Your Message Here",
        "send": "Send message",
        "mute": "Mute microphone",
        "unmute": "Unmute microphone",
        "micOff": "Microphone off",
        "speaking": "Agent is speaking…",
        "listening": "Listening…",
        "noReply": "No reply. Try again.",
        "thinking": "Agent is thinking…",
        "close": "Close",
        "titleLead": "Test",
        "titleTail": "Agent",
        "subtitle": "How would you like to test your agent?",
        "voiceRoute": "Voice Call with {{name}}",
        "chatRoute": "Chat with {{name}}",
        "callTitle": "Call With {{name}}",
        "chatTitle": "Chat With {{name}}",
        "endTest": "End Test",
        "statusSpeaking": "{{name}} speaking...",
        "statusListening": "{{name}} listening...",
        "statusMuted": "Microphone off",
        "statusConnecting": "Connecting...",
        "greeting": "Hi there! How can I help you today?",
        "user": "User",
        "text": "Text",
        "latency": "LLM {{seconds}} sec",
        "endChip": "End",
        "endReason": "Session ended"
      },
      "createChooser": {
        "close": "Close",
        "titleLead": "Build Your",
        "titleAccent": "Agent",
        "subtitle": "How would you like to create your agent?",
        "aiTitle": "Create with AI",
        "templateTitle": "Start with a template",
        "templateBody": "Choose a ready-made agent for a common use case",
        "templateBadge": "templates",
        "scratchTitle": "Start from scratch",
        "scratchBody": "Set up every part of your agent yourself",
        "soon": "Soon",
        "aiHint": "Answer a few questions"
      },
      "templates": {
        "heading": "Browse templates",
        "searchPlaceholder": "Search templates",
        "stepLabel": "Step",
        "items": {
          "customerSupport": {
            "title": "Customer Support",
            "body": "Resolves questions about orders, accounts, billing and returns"
          },
          "hotelReservation": {
            "title": "Hotel Reservations",
            "body": "Checks availability, books rooms and handles changes and cancellations"
          },
          "ecommerceShopping": {
            "title": "Shopping Assistant",
            "body": "Helps shoppers find the right product and track their orders"
          },
          "healthcareReceptionist": {
            "title": "Clinic Receptionist",
            "body": "Books and manages appointments and answers clinic questions"
          },
          "restaurantBooking": {
            "title": "Restaurant Bookings",
            "body": "Takes table reservations and answers menu and opening-hours questions"
          },
          "leadQualification": {
            "title": "Lead Qualification",
            "body": "Qualifies inbound interest and books a follow-up with sales"
          }
        },
        "noResults": "No templates match that search."
      },
      "build": {
        "titleLead": "Build Agent",
        "route": {
          "template": "with a template",
          "ai": "with AI",
          "scratch": "from scratch"
        },
        "capabilityQuestion": "What should this agent handle?",
        "capability": {
          "customerService": "Customer Service",
          "booking": "Booking",
          "support": "Support",
          "sales": "Sales",
          "fixProblems": "Fix Problems",
          "other": "Other"
        },
        "nameLabel": "Agent Name",
        "briefLabel": "Describe the agent you want",
        "briefPlaceholder": "A receptionist for a dental clinic that books appointments and answers questions about opening hours.",
        "briefHint": "Draft personas are generated locally for now — the model is not called yet.",
        "noVoices": "No voices are available yet, so an agent cannot be created.",
        "next": "Next",
        "create": "Create",
        "cancel": "Cancel",
        "voiceLabel": "Voice",
        "voiceChoose": "Choose a voice",
        "voiceLoading": "Loading voices…",
        "soundTagsLabel": "Sound tags",
        "soundTagsHint": "Let the agent laugh, sigh or chuckle when the moment calls for it.",
        "normalizeNumbersLabel": "Read numbers naturally",
        "normalizeNumbersHint": "Numbers, dates, times and money are spoken the way the voice's dialect says them.",
        "fillersLabel": "Lookup fillers",
        "fillersHint": "The agent says a short line while it looks something up. You can write your own lines later on the Voice tab."
      },
      "aiBuild": {
        "titleLead": "Build Agent",
        "titleAccent": "With AI",
        "step": "Step",
        "close": "Close",
        "speak": "Answer by voice",
        "placeholder": "Type Your Answer Here",
        "recording": "Listening… tap the mic to stop",
        "transcribing": "Transcribing…",
        "back": "Back",
        "build": "Build my agent",
        "done": "Close",
        "sourcesTitle": "Anything we should read first?",
        "sourcesHint": "Optional. Files and websites make the agent know your business.",
        "pickFiles": "Choose files",
        "urlPlaceholder": "https://your-website.com",
        "buildingTitle": "Building Your Agent",
        "buildingHint": "This runs in the background. You can close this and watch it in the list.",
        "errors": {
          "micDenied": "Microphone access was blocked. Type your answer instead.",
          "transcribeFailed": "Could not transcribe that. Try again or type it.",
          "submitFailed": "Could not start the build. Try again.",
          "emptyTranscript": "We could not hear anything. Try again, closer to the mic."
        },
        "q": {
          "business": "What is the business, and who is this agent to a caller, its name and role?",
          "businessChips": {
            "retail": "Retail",
            "clinic": "Clinic",
            "realEstate": "Real estate",
            "restaurant": "Restaurant",
            "education": "Education",
            "other": "Something else"
          },
          "callFlow": "Walk through a typical call, hello to goodbye. What do callers most often want?",
          "callers": "Who calls, how should the agent sound to them, and in what language and dialect?",
          "callersChips": {
            "egyptian": "Egyptian",
            "gulf": "Gulf",
            "levantine": "Levantine",
            "fusha": "Fusha",
            "english": "English",
            "mixed": "Mixed"
          },
          "guardrails": "What must the agent never do or say?",
          "outOfScope": "When the agent can't help, or the caller asks for something out of scope, what should it do?",
          "extraKnowledge": "Is there anything it may need that isn't in your uploaded documents?"
        }
      },
      "emptyStart": {
        "titleLead": "Build Your First Agent",
        "titleAccent": "With AI",
        "attach": "Attach files",
        "send": "Send answer",
        "removeFile": "Remove file",
        "or": "Or",
        "archivedLink": "Looking for archived agents?"
      },
      "analytics": {
        "title": "General Agent Analytics",
        "cancel": "Cancel",
        "apply": "Apply",
        "save": "Save",
        "retry": "Retry",
        "errorBanner": "Unable to load agent analytics.",
        "metricsAriaLabel": "Analytics metrics",
        "creditsUnit": "Credit",
        "loadingAnalytics": "Loading analytics…",
        "currentlyUnavailable": "Analytics are currently unavailable",
        "noDataCollected": "No data has been collected",
        "stackedView": "Stacked view",
        "overallSuccessRate": "Overall Success Rate",
        "success": "Success",
        "successRateAria": "Success rate {{pct}} percent",
        "unsuccessfulRate": "Unsuccessful Rate {{pct}}%",
        "successRate": "Success Rate {{pct}}%",
        "averageCsatRating": "Average CSAT Rating",
        "agentResponseTime": "Agent Response Time",
        "responseTimeChartLabel": "Agent response time",
        "totalConversationDuration": "Total Conversation Duration",
        "conversationDurationChartLabel": "Total conversation duration",
        "savedView": {
          "viewLabel": "VIEW",
          "edited": "edited",
          "editedBadge": "Edited",
          "saveFilterCta": "+ SAVE FILTER",
          "myViews": "My views",
          "empty": "No saved views yet.",
          "applyAria": "Apply saved view {{name}}",
          "applyAriaEdited": "Apply saved view {{name}}, edited",
          "moreActionsAria": "More actions for {{name}}",
          "rename": "Rename",
          "renameAria": "Rename {{name}}",
          "delete": "Delete",
          "deleteAria": "Delete {{name}}",
          "update": "Update {{name}}",
          "resetTo": "Reset to {{name}}",
          "createNew": "Create new view"
        },
        "dateRange": {
          "previous": "Previous date range",
          "next": "Next date range"
        },
        "granularity": {
          "ariaLabel": "Granularity",
          "hourly": "Hourly",
          "fourHours": "4 Hours",
          "day": "Day",
          "week": "Week"
        },
        "periods": {
          "last1Hour": "Last 1 hour",
          "last6Hours": "Last 6 hours",
          "last24Hours": "Last 24 hours",
          "yesterday": "Yesterday",
          "today": "Today",
          "last7Days": "Last 7 days",
          "last30Days": "Last 30 days",
          "last90Days": "Last 90 days",
          "customRange": "Custom range"
        },
        "agentFilter": {
          "ariaLabel": "Agent {{label}}",
          "searchPlaceholder": "Search by agent name",
          "noAgentsFound": "No agents found",
          "thisAgent": "This agent",
          "oneAgentFallback": "1 agent",
          "agentsCount": "{{count}} agents",
          "allAgents": "All agents"
        },
        "channelFilter": {
          "ariaLabel": "Group by {{label}}",
          "allChannels": "All channels",
          "channelsCount": "{{count}} channels"
        },
        "metrics": {
          "conversations": "Number of conversations",
          "avgCallDuration": "Average Call duration",
          "textConversations": "Text conversations",
          "creditsUsed": "Credits used",
          "avgCreditsPerConversation": "Ave. credits per conversation",
          "totalLlmCost": "Total LLM cost"
        },
        "chartLabels": {
          "totalCallDuration": "Total call duration"
        },
        "saveDialog": {
          "ariaLabel": "Save filter configuration",
          "closeAria": "Close save filter",
          "saveTitle": "Save Filter",
          "renameTitle": "Rename Filter",
          "lead": "Save your current filter configuration for quick access later.",
          "filterNameLabel": "Filter Name",
          "filterNamePlaceholder": "Active users last 7 days",
          "descriptionLabel": "Description",
          "optional": "(Optional)",
          "descriptionPlaceholder": "An optional description of this filter..."
        },
        "calendarDialog": {
          "title": "Select date range",
          "closeAria": "Close date range",
          "presetsAriaLabel": "Date presets",
          "start": "Start",
          "startDateAria": "Start date",
          "startTimeAria": "Start time",
          "end": "End",
          "endDateAria": "End date",
          "endTimeAria": "End time",
          "previousMonth": "Previous month",
          "nextMonth": "Next month",
          "timezoneLabel": "Africa/Cairo (UTC+3)"
        },
        "calendarWeekdays": {
          "su": "Su",
          "mo": "Mo",
          "tu": "Tu",
          "we": "We",
          "th": "Th",
          "fr": "Fr",
          "sa": "Sa"
        },
        "chart": {
          "credits": "credits",
          "moreRows": "+{{count}} more"
        }
      },
      "relativeTime": {
        "justNow": "Just now",
        "oneMinuteAgo": "1m ago",
        "minutesAgo": "{{minutes}}m ago",
        "oneHourAgo": "1h ago",
        "hoursAgo": "{{hours}}h ago",
        "oneDayAgo": "1d ago",
        "daysAgo": "{{days}}d ago",
        "monthsAgo": "{{months}}mo ago",
        "yearsAgo": "{{years}}y ago"
      }
    },
    "developers": {
      "activity": {
        "kicker": "Developers",
        "title": "Activity",
        "lead": "Credits, requests, speech and audio across your API keys.",
        "breadcrumbLabel": "Breadcrumb",
        "breadcrumbParent": "Developers",
        "tz": {
          "hint": "Times shown in your browser's time zone"
        },
        "filter": {
          "button": "Filter",
          "title": "Filter",
          "all": "All",
          "key": "API key",
          "service": "Service",
          "voice": "Voice",
          "day": "Day",
          "clear": "Clear all",
          "done": "Done",
          "remove": "Remove filter: {{name}}"
        },
        "period": {
          "label": "Period",
          "p7": "7 days",
          "p30": "30 days",
          "p90": "90 days",
          "p365": "1 year"
        },
        "exportCsv": "Export CSV",
        "csvDownloaded": "CSV downloaded",
        "copyLink": "Copy link",
        "copyLinkHint": "Copy a link to this exact view",
        "linkCopied": "Link to this view copied",
        "copyFailed": "Could not copy the link",
        "tabs": {
          "label": "Activity views",
          "overview": "Overview",
          "trends": "Trends",
          "explore": "Explore",
          "logs": "Logs"
        },
        "range": "{{from}} to {{to}}",
        "loading": "Loading activity",
        "error": {
          "title": "Could not load your activity.",
          "retry": "Retry"
        },
        "deleted": "deleted",
        "noVoice": "No voice",
        "services": {
          "tts": "Text to Speech",
          "stt": "Speech to Text",
          "clean": "Sound Cleaning"
        },
        "chart": {
          "nothing": "Nothing",
          "more": "more"
        },
        "overview": {
          "kpi": {
            "credits": "Credits used",
            "requests": "Requests",
            "characters": "Speech generated",
            "minutes": "Audio processed",
            "success": "Success rate"
          },
          "planRate": "≈ {{usd}} at your {{plan}} rate",
          "trialRate": "≈ {{usd}} at your trial rate",
          "planRateGeneric": "≈ {{usd}} at your plan rate",
          "calls": "{{count}} calls",
          "charactersSub": "characters read aloud",
          "minutesSub": "audio sent to Speech to Text or Sound Cleaning",
          "minutes": "{{n}} min",
          "seconds": "{{n}} s",
          "failedCount": "{{count}} failed requests",
          "new": "New",
          "vsPrevious": "vs previous period",
          "pts": "pts",
          "topKeys": {
            "title": "Top API keys",
            "sub": "Credits this period. Click one to filter everything."
          },
          "topVoices": {
            "title": "Top voices",
            "sub": "Credits spent on each voice."
          },
          "explore": "Explore ›",
          "nothing": "Nothing in this period.",
          "creditsShort": "cr",
          "mainHint": "Hover a bar for the breakdown. Click a bar to open that day’s logs. Click the cards above to change the measure.",
          "clickHint": "Click to open the logs for this day",
          "group": {
            "label": "Group by",
            "service": "Service",
            "key": "API key",
            "voice": "Voice"
          },
          "groupLower": {
            "service": "service",
            "key": "API key",
            "voice": "voice"
          },
          "measure": {
            "credits": "Credits",
            "spend": "Spend ($)",
            "requests": "Requests",
            "characters": "Characters",
            "minutes": "Audio minutes"
          },
          "unit": {
            "credits": "credits",
            "requests": "requests",
            "characters": "characters",
            "minutes": "audio minutes"
          },
          "title": "{{measure}} by {{group}}",
          "weekOf": "Week of {{date}}",
          "other": "Other ({{count}})",
          "failed": {
            "title": "Failed requests",
            "sub": "By API key. Failed requests are never charged.",
            "unit": "failed requests"
          },
          "worst": {
            "prefix": "Highest failure rate:",
            "suffix": ", {{rate}}% of its requests.",
            "seeLogs": "See the logs"
          },
          "plan": {
            "title": "Plan credits this cycle",
            "sub": "Your whole plan, every product. Resets {{date}}.",
            "of": "of {{total}} · {{pct}}",
            "dot": "1 dot = {{count}} credits, 5% of the plan",
            "limitOf": "{{used}} of {{limit}} key limit",
            "limitUnit": "Key limits: 1 dot = 10% of that key’s limit"
          },
          "near": "Near limit"
        },
        "trends": {
          "sub": "This period against the one before it, day by day.",
          "measureLabel": "Measure",
          "against": "against the previous {{days}} days",
          "new": "new",
          "measure": {
            "credits": "credits",
            "requests": "requests",
            "characters": "characters",
            "minutes": "audio minutes"
          },
          "metric": {
            "credits": "Credits",
            "requests": "Requests",
            "characters": "Characters",
            "minutes": "Minutes"
          },
          "unit": {
            "credits": "credits",
            "requests": "requests",
            "characters": "characters",
            "minutes": "audio minutes"
          },
          "thisPeriod": "This period",
          "previousPeriod": "Previous period",
          "weekOf": "Week of {{date}}",
          "weekOfPrev": "week of {{date}}",
          "tipVs": "{{now}} vs {{before}}",
          "chartLabel": "This period against the previous one",
          "nothing": "Nothing in this period.",
          "more": "more",
          "movers": {
            "title": "Biggest movers",
            "sub": "What changed most against the previous period. Click a row to filter the Overview.",
            "show": "Show"
          },
          "seg": {
            "all": "All",
            "key": "API keys",
            "service": "Services",
            "voice": "Voices"
          },
          "kind": {
            "key": "API key",
            "service": "Service",
            "voice": "Voice"
          },
          "col": {
            "any": "Key, service or voice",
            "trend": "Trend",
            "now": "This period",
            "before": "Previous",
            "change": "Change"
          }
        },
        "logs": {
          "title": "Requests",
          "count": "{{count}} requests",
          "countOne": "1 request",
          "onDay": "on {{date}}",
          "keep": "logs keep 365 days",
          "failedOnly": "Failed only",
          "find": "Find by request ID",
          "findClear": "Clear",
          "findInvalid": "Paste the full X-Request-Id value.",
          "findNone": "No request with this ID in the last 365 days.",
          "col": {
            "time": "Time",
            "key": "API key",
            "endpoint": "Endpoint",
            "status": "Status",
            "credits": "Credits",
            "took": "Time taken"
          },
          "detail": {
            "requestId": "Request id",
            "service": "Service",
            "voice": "Voice",
            "billed": "Billed",
            "error": "errorMessage",
            "notCharged": "Nothing was charged."
          },
          "billed": {
            "characters": "{{n}} characters",
            "minutes": "{{n}} min",
            "seconds": "{{n}} s",
            "credits": "{{n}} credits",
            "usd": "≈ {{amount}}"
          },
          "took": {
            "ms": "{{n}} ms",
            "s": "{{n}} s"
          },
          "empty": "No requests match.",
          "loading": "Loading requests",
          "error": "Could not load requests.",
          "retry": "Try again",
          "prev": "Previous",
          "next": "Next",
          "page": "Page {{page}} of {{pages}}"
        },
        "explore": {
          "controls": "Explore controls",
          "measure": {
            "label": "Measure",
            "credits": "Credits",
            "spend": "Spend ($)",
            "requests": "Requests",
            "characters": "Characters",
            "minutes": "Audio minutes",
            "errors": "Errors"
          },
          "unit": {
            "credits": "credits",
            "requests": "requests",
            "characters": "characters",
            "minutes": "audio minutes",
            "errors": "errors"
          },
          "group": {
            "label": "Group by",
            "then": "Then by",
            "none": "None"
          },
          "dim": {
            "key": "API key",
            "service": "Service",
            "voice": "Voice"
          },
          "dimLower": {
            "key": "API key",
            "service": "service",
            "voice": "voice"
          },
          "per": {
            "label": "Per",
            "day": "Day",
            "week": "Week",
            "month": "Month",
            "none": "None (ranking)"
          },
          "perLower": {
            "day": "day",
            "week": "week",
            "month": "month"
          },
          "show": {
            "label": "Show",
            "top": "Top {{count}}"
          },
          "chart": {
            "label": "Chart type",
            "bar": "Bars",
            "line": "Lines",
            "dots": "Dots"
          },
          "running": "Running total",
          "try": "Try:",
          "preset": {
            "spendPerKeyWeekly": "Spend per key, weekly",
            "eachKeyByService": "Each key by service",
            "charsPerVoiceRunning": "Characters per voice, running total",
            "failuresPerKey": "Failures per key"
          },
          "title": {
            "by": "{{base}} by {{group}}",
            "byTwo": "{{base}} by {{group}} and {{sub}}",
            "per": "{{base}} per {{unit}}",
            "cumulative": "{{base}}, cumulative"
          },
          "join": "{{a}} · {{b}}",
          "weekOf": "Week of {{date}}",
          "wholePeriod": "Whole period",
          "table": {
            "label": "Data table",
            "metric": "Metric",
            "total": "Total"
          },
          "nothing": "Nothing in this period.",
          "more": "more",
          "other": "Other ({{count}})"
        }
      },
      "addEndpointModal": {
        "eyebrow": "Webhook configuration",
        "activeHint": "Receive subscribed events at this endpoint.",
        "editTitle": "Edit Webhook",
        "addTitle": "Create Webhook",
        "closeModal": "Close modal",
        "nameLabel": "Name",
        "namePlaceholder": "e.g. Production Webhook",
        "urlLabel": "Endpoint URL",
        "urlPlaceholder": "https://your-domain.com/webhook",
        "eventTypesLabel": "Event Types",
        "active": "Active",
        "cancel": "Cancel",
        "saving": "Saving…",
        "saveChanges": "Save Changes",
        "updateError": "Failed to update webhook. Please try again.",
        "createError": "Failed to create webhook. Please try again.",
        "enable": "Enable",
        "enabled": "Enabled",
        "disabled": "Disabled",
        "validationEndpointUrl": "Enter a valid URL that starts with https://.",
        "create": "Create",
        "secretTitle": "Save your signing secret",
        "secretBody": "Use it to verify that deliveries come from EchoNova.",
        "secretWarning": "Copy it now. It is shown only once and cannot be recovered.",
        "secretDone": "Done"
      },
      "createApiKeyModal": {
        "eyebrow": "Developer credentials",
        "secretEyebrow": "Credential created",
        "activeHint": "Allow requests made with this credential.",
        "saveYourApiKey": "Save your API key",
        "secretNotShownAgain": "This secret will not be shown again.",
        "keyName": "Key Name",
        "secretKey": "Secret Key",
        "copyOrDownloadNotice": "Please copy or download this secret now. You will not be able to see it again after closing this dialog.",
        "downloadJson": "Download JSON",
        "copied": "Copied!",
        "copy": "Copy",
        "editTitle": "Edit API Key",
        "createTitle": "Create New Key",
        "closeModal": "Close modal",
        "nameLabel": "Name",
        "namePlaceholder": "Enter key name",
        "active": "Active",
        "creditLimit": "Credit Limit",
        "creditLimitPlaceholder": "Leave empty for unlimited",
        "limitTooHigh": "The credit limit can be at most {{max}} credits.",
        "limitInvalid": "Enter a whole number of credits, 1 or more, or leave it empty for no limit.",
        "createdTitle": "Key Created Successfully",
        "shownOnce": "The secret is shown once. After you close this, the portal shows only the key's first characters.",
        "decreaseLimit": "Decrease credit limit",
        "increaseLimit": "Increase credit limit",
        "services": "Services",
        "noAccess": "No Access",
        "noServiceHint": "Give this key access to at least one service.",
        "access": "Access",
        "cancel": "Cancel",
        "saving": "Saving…",
        "saveChanges": "Save Changes",
        "createKey": "Create Key",
        "serviceTts": "Text to Speech (TTS)",
        "serviceStt": "Speech to Text (STT)",
        "serviceClean": "Sound Cleaning",
        "agentsHint": "Lets your server create website widget tickets",
        "updateError": "Failed to update key. Please try again.",
        "createError": "Failed to create key. Please try again.",
        "enabled": "Enabled",
        "disabled": "Disabled",
        "create": "Create"
      },
      "apiKeys": {
        "createdButActive": "Key created but still active — disable it from the list",
        "title": "Developers - API Keys",
        "subtitle": "Create and manage reusable tools for your workspace.",
        "createNewKey": "Create Key",
        "overLimitPrefix": "Your workspace is over the API-key limit for the current plan. Delete unused keys or",
        "upgradePlanLink": "upgrade your plan",
        "overLimitSuffix": "to create more.",
        "loading": "Loading API keys…",
        "emptyTitle": "No API Key Created",
        "emptyDescription": "Create your first key to start using the API.",
        "neverUsed": "—",
        "openActionsMenu": "Open actions menu",
        "edit": "Edit",
        "delete": "Delete",
        "deleteDialogTitle": "Delete API Key",
        "headerName": "Name",
        "headerKey": "Key",
        "headerCreated": "Created",
        "headerLastUsed": "Last Used",
        "headerEnabled": "Enabled",
        "headerStatus": "Status",
        "loadError": "Failed to load API keys. Please try again.",
        "limitReachedTitle": "API-key limit reached",
        "limitReachedMessage": "Your plan allows {{limit}} active API keys. Delete an existing key or upgrade your plan to create another.",
        "upgradePlanAction": "Upgrade plan",
        "successTitle": "Success",
        "updatedMessage": "API Key updated successfully",
        "createdMessage": "API Key created successfully",
        "deleteConfirm": "Are you sure you want to delete \"{{name}}\"? This cannot be undone.",
        "deletedTitle": "Deleted",
        "deletedMessage": "API Key deleted successfully",
        "toggleAria": "Enable or disable {{name}}",
        "serviceTts": "Text to Speech",
        "serviceStt": "Speech to Text",
        "serviceClean": "Sound Cleaning",
        "serviceAgents": "Agents",
        "createdOn": "created",
        "unlimited": "Unlimited",
        "creditsLimit": "{{count}} credits",
        "deleteError": "The key was not deleted. Try again.",
        "headerActions": "Actions",
        "statusEnabled": "Active",
        "statusDisabled": "Disabled"
      },
      "docsLinks": {
        "readDocs": "Read the docs",
        "ttsQuickstart": "Text to Speech quickstart"
      },
      "overview": {
        "title": "Developers – Overview",
        "subtitle": "The Echonova platform powers three core capabilities",
        "sectionLabel": "Core capabilities",
        "quickstartLabel": "First request",
        "quickstartTitle": "Developer quickstart",
        "quickstartDescription": "Learn the basics and make your first request with the Echonova API.",
        "getStart": "Start Building",
        "ready": "Ready",
        "resourcesLabel": "Build faster",
        "quickLinks": "Quick Links",
        "linkTitle": "developers overview link title",
        "capabilities": {
          "agent": {
            "title": "Agents",
            "desc": "Build low-latency conversational agents with interruption handling and your own knowledge.",
            "alt": "Agents icon",
            "aria": "Show Agent code example"
          },
          "tts": {
            "title": "Text to Speech",
            "desc": "Generate natural, expressive speech across Arabic dialects, English and 28 more languages.",
            "alt": "Text to Speech icon",
            "aria": "Show Text to Speech code example"
          },
          "stt": {
            "title": "Speech to Text",
            "desc": "Convert audio into accurate text with speaker detection and timestamps.",
            "alt": "Speech to Text icon",
            "aria": "Show Speech to Text code example"
          },
          "clean": {
            "title": "Sound Cleaning",
            "desc": "Remove noise and level the loudness of a short recording in one call.",
            "alt": "Sound Cleaning icon",
            "aria": "Show Sound Cleaning code example"
          }
        },
        "quickLinkCards": {
          "activity": {
            "title": "Activity by key"
          },
          "createApiKey": {
            "title": "Create an API Key",
            "desc": "Create your first API key to start building.",
            "alt": "API Key icon"
          },
          "apiReference": {
            "title": "API Reference",
            "desc": "Complete API documentation and guides.",
            "alt": "API Reference icon"
          }
        }
      },
      "requestLog": {
        "liveLabel": "Live requests",
        "loadError": "The request log did not load. Try again.",
        "title": "Developers - Request Log",
        "subtitle": "View and analyze all API requests made to your account",
        "loading": "Loading request log…",
        "emptyTitle": "No requests yet",
        "emptyDescription": "API calls will appear here once your keys start being used.",
        "unknown": "Unknown",
        "headerCode": "Code",
        "headerMethod": "Method",
        "headerPath": "Path",
        "headerApiKey": "API Key",
        "headerTime": "Time",
        "headerTimestamp": "Timestamp",
        "headerRequest": "Request",
        "headerUser": "User"
      },
      "connectedApps": {
        "title": "Connected apps",
        "lead": "Apps like Claude that can use this workspace and spend its credits.",
        "connectedBy": "Connected by",
        "connectedAt": "Connected",
        "lastUsed": "Last used",
        "never": "Never",
        "revoke": "Disconnect",
        "revokeAria": "Disconnect {{client}}",
        "confirmTitle": "Disconnect {{client}}?",
        "confirmBody": "{{client}} stops working with this workspace right away. You can connect it again later.",
        "revoked": "{{client}} disconnected",
        "emptyTitle": "No connected apps",
        "emptyBody": "Connect Claude to use EchoNova voices in your chats.",
        "emptyLink": "How to connect Claude",
        "loadError": "Could not load connected apps.",
        "revokeError": "Could not disconnect this app."
      },
      "webhooks": {
        "title": "Developers - Web hooks",
        "subtitle": "Create and manage webhooks to receive real-time notifications from Echonova and send them to your external systems.",
        "addEndpoint": "Create Webhook",
        "loading": "Loading webhooks…",
        "emptyTitle": "No Web Hook Created",
        "emptyDescription": "Add your first endpoint to receive event notifications.",
        "copyId": "Copy webhook ID",
        "openActionsMenu": "Open actions menu",
        "edit": "Edit",
        "delete": "Delete",
        "deleteDialogTitle": "Delete webhook",
        "headerName": "Name",
        "headerSubscribedEvents": "Subscribed Events",
        "headerId": "ID",
        "headerEndpoint": "Endpoint",
        "headerStatus": "Status",
        "loadError": "Failed to load webhooks. Please try again.",
        "deleteConfirm": "Delete the webhook \"{{name}}\"? This cannot be undone.",
        "deletedTitle": "Deleted",
        "deletedMessage": "Webhook deleted successfully",
        "copiedTitle": "Copied",
        "copiedMessage": "Webhook ID copied to clipboard",
        "noEvents": "No events",
        "failures": "{{count}} failed deliveries",
        "deleteError": "The webhook was not deleted. Try again.",
        "updatedTitle": "Updated",
        "statusUpdatedMessage": "Webhook {{status}}",
        "statusEnabled": "enabled",
        "statusDisabled": "disabled",
        "headerActions": "Actions",
        "events": {
          "jobCompleted": "Job completed",
          "jobFailed": "Job failed",
          "spendingWarning": "Spending warning",
          "spendingExhausted": "Spending exhausted"
        }
      },
      "pagination": {
        "showing": "Showing {{from}}–{{to}} of {{total}}",
        "previous": "Previous",
        "next": "Next"
      },
      "page": {
        "eyebrow": "EchoNova developer platform",
        "title": "Build with voice.",
        "subtitle": "Ship Arabic-first speech experiences with simple APIs for synthesis, transcription, and everything around them.",
        "tabOverview": "Overview",
        "tabApiKeys": "API Keys",
        "tabWebhooks": "Webhooks",
        "tabRequestLog": "Request Log",
        "tabConnectedApps": "Connected apps"
      }
    },
    "subscription": {
      "overviewHeader": "Subscription",
      "workflowHeader": "EchoNova Subscription",
      "billingCycleToggle": {
        "monthly": "Monthly",
        "yearly": "Yearly",
        "ariaLabel": "Use yearly billing",
        "discount": "{{percent}}% OFF"
      },
      "common": {
        "unavailable": "Not available"
      },
      "overview": {
        "breadcrumb": "My Profile / Subscription",
        "title": "Subscription",
        "nextBilling": "Next billing date: {{date}}",
        "manageBilling": "Manage billing",
        "upgrade": "Upgrade Your Plan",
        "summaryTitle": "Your subscription",
        "billedPrice": "Billed {{cycle}} · {{price}}/{{period}}",
        "creditsUsage": "Credits Usage",
        "remainingCredits": "Remaining: {{count}} credits",
        "billingInformation": "Manage your billing",
        "billingDescription": "Your secure payment method and billing provider.",
        "update": "Update",
        "paymentMethod": "Payment Method",
        "billingCycle": "Billing Cycle",
        "nextInvoice": "Next invoice on {{date}}",
        "providerManaged": "Payment details are managed securely by {{provider}}.",
        "quickActions": "Quick Actions",
        "upgradePlan": "Upgrade Plan",
        "changePlan": "Change plan",
        "changePlanDescription": "Compare plans and choose the capacity you need.",
        "downloadInvoice": "Download Latest Invoice",
        "invoiceDescription": "Get a copy of your latest invoice.",
        "cancelDescription": "Stop renewal at the end of the current period.",
        "showPlan": "Show {{plan}} plan",
        "previousPlan": "Previous plan",
        "nextPlan": "Next plan",
        "billedCycle": "Billed {{cycle}} ·",
        "trialHeadline": "Free trial",
        "trialActive": "Free trial in progress",
        "addCredits": "Add More Credits",
        "extraCredits": "Extra credits: {{count}}",
        "expiringNext": "{{count}} expire {{date}}",
        "neverExpire": "{{count}} never expire",
        "autoTopUp": "Auto top up",
        "autoTopUpOff": "Off",
        "autoTopUpOn": "Below {{threshold}} credits, add {{amount}}. Spent {{spent}} of {{cap}} this month",
        "autoTopUpFailed": "Turned off: card declined. Update your card and turn it on again.",
        "autoTopUpUnavailable": "This payment provider does not accept auto top up",
        "on": "On",
        "off": "Off",
        "quickUnavailable": "Available once you subscribe to a paid plan"
      },
      "addCredits": {
        "title": "Add More Credits",
        "lead": "Extra credits never expire, even after your plan renews or ends. Your plan credits are always used first.",
        "topUpBy": "Choose a pack",
        "rate": "{{price}} per {{credits}} credits",
        "packCredits": "{{credits}} credits",
        "packsLabel": "Credit packs",
        "noPacks": "Credit packs are not available right now. Try again later.",
        "remaining": "Credits remaining",
        "topUpCredits": "Top up credits",
        "afterTopUp": "Credits after top up",
        "chargedAs": "Your card is charged {{amount}}.",
        "taxNote": "Sales tax, VAT, or other indirect taxes may be added to the charge according to your local regulations.",
        "consentPrefix": "By clicking \"Add Credits\" you agree to our",
        "terms": "Terms of Service",
        "consentAnd": "and",
        "privacy": "Privacy Policy",
        "cancel": "Cancel",
        "confirm": "Add Credits",
        "redirecting": "Taking you to PayPal…",
        "back": "Back",
        "error": {
          "load": "Could not load pricing. Try again.",
          "start": "Could not start the purchase. Try again.",
          "noClientSecret": "The payment form could not be created. Try again."
        },
        "payWith": "Pay with"
      },
      "autoTopUp": {
        "title": "Auto top up",
        "lead": "When your credits run low we charge the card on your subscription and add credits automatically.",
        "loading": "Loading…",
        "enable": "Enable auto top up",
        "threshold": "When credits fall below",
        "credits": "credits",
        "thresholdHelp": "{{min}} to {{max}} credits",
        "thresholdCover": "One top up must cover this. Pick a bigger pack or lower the threshold.",
        "amount": "Pack",
        "cap": "Monthly limit",
        "capHelp": "At least the pack price, up to ${{max}}",
        "capLow": "Must be at least the pack price",
        "card": "Card on file: {{brand}} ····{{last4}}",
        "noCard": "No card on file for this subscription",
        "spent": "Spent this month: {{spent}} of {{cap}}",
        "spentLabel": "Spent this month",
        "spentValue": "{{spent}} of {{cap}}",
        "change": "Change",
        "authorize": "By saving you allow EchoNova to charge {{card}} {{amount}} for {{credits}} credits each time your credits fall below {{threshold}}, up to {{cap}} a month. Turn it off at any time.",
        "chargedEach": "Your card is charged {{amount}} each time.",
        "failed": "Auto top up was turned off after 3 failed charges. Fix your card, then turn it back on.",
        "packAboveCap": "Turned off: your pack costs more than the monthly cap. Pick a pack within the cap or raise the cap, then turn it back on.",
        "packRetired": "Turned off: your pack is no longer sold. Pick another pack, then turn it back on.",
        "packBelowThreshold": "Turned off: your pack holds fewer credits than the threshold. Pick a bigger pack or lower the threshold, then turn it back on.",
        "turnedOff": "Auto top up is off. You can turn it back on at any time.",
        "cancel": "Cancel",
        "save": "Save",
        "error": {
          "save": "Could not save auto top up. Try again."
        }
      },
      "plansPage": {
        "breadcrumb": "My Profile / Subscription / Plans",
        "back": "← Back to Subscription",
        "title": "Upgrade Your Plan",
        "subtitle": "Select a plan based on your needs",
        "categoriesLabel": "Plan categories",
        "categories": {
          "all": "All",
          "voice": "AI Voice Generator",
          "annotation": "Annotation"
        },
        "mostPopular": "Most Popular",
        "changeTitle": "Change to {{plan}}?",
        "changeWarning": "Confirm your plan change",
        "changeDetail": "Your existing billing provider will apply the plan change according to its current proration and renewal rules.",
        "confirmChange": "Confirm Change",
        "keepCurrent": "Keep Current Plan"
      },
      "cancelDialog": {
        "title": "Cancel Subscription",
        "warning": "Are you sure you want to cancel?",
        "detail": "Your {{plan}} plan will remain active until {{date}}. After that, you will lose access to:",
        "confirm": "Cancel Subscription",
        "keep": "Keep My Plan",
        "close": "Close cancellation dialog",
        "benefits": {
          "voiceCloning": "Professional Voice Cloning",
          "commercialLicense": "Commercial License",
          "prioritySupport": "Priority Support",
          "planCreditsLeft": "Plan credits left now"
        }
      },
      "cancelled": {
        "title": "Subscription Cancelled",
        "subtitle": "Your {{plan}} plan has been cancelled.",
        "accessUntil": "Access Until",
        "plan": "Plan",
        "refund": "Refund",
        "refundValue": "No refund — usage through period",
        "changedMind": "Changed your mind?",
        "reactivate": "Reactivate Plan",
        "continue": "Continue"
      },
      "planCard": {
        "perYear": "/year",
        "perMonth": "/month",
        "approxPerMonth": "≈ ${{amount}}/month",
        "save": "Save {{percent}}%",
        "creditsPerMonth": "{{count}} credits / month",
        "unlimited": {
          "agents": "Unlimited agents",
          "seats": "Unlimited seats",
          "apiKeys": "Unlimited API keys"
        },
        "count": {
          "agents": {
            "one": "{{value}} agent",
            "other": "{{value}} agents"
          },
          "seats": {
            "one": "{{value}} seat",
            "other": "{{value}} seats"
          },
          "apiKeys": {
            "one": "{{value}} API key",
            "other": "{{value}} API keys"
          }
        },
        "unlimitedStorage": "Unlimited knowledge storage",
        "storage": "{{size}} knowledge storage",
        "action": {
          "current": "Current Plan",
          "scheduled": "Scheduled",
          "upgrade": "Upgrade",
          "downgrade": "Downgrade",
          "switchToYearly": "Switch to Yearly",
          "switchToMonthly": "Switch to Monthly",
          "select": "Select Plan",
          "testAndConnect": "Test And Connect"
        },
        "billedYearly": "{{amount}} billed yearly",
        "row": {
          "credits": "Monthly credits",
          "agents": "Agents",
          "storage": "Knowledge storage",
          "seats": "Seats",
          "apiKeys": "API keys",
          "included": "Included",
          "unlimited": "Unlimited"
        }
      },
      "currentPlanCard": {
        "via": "via {{provider}}",
        "upgrade": "Upgrade",
        "refreshTitle": "Refresh subscription state",
        "scheduledPrefix": "Plan change scheduled, switching to",
        "scheduledOn": "on {{date}}",
        "cancelChange": "Cancel change",
        "credits": "Credits",
        "remaining": "/ {{total}} remaining",
        "percentUsed": "{{percent}}% used",
        "usedOf": "{{used}} of {{total}}",
        "cancelSubscription": "Cancel subscription",
        "noActivePlan": "No active plan",
        "noActivePlanDesc": "Choose a plan to start using premium features.",
        "choosePlan": "Choose a plan",
        "status": {
          "freeTrial": "Free trial",
          "canceled": "Canceled",
          "paymentFailed": "Payment failed",
          "expired": "Expired",
          "expiredSubline": "Choose a plan to keep going.",
          "active": "Active"
        },
        "billedPeriod": "Billed {{period}}",
        "cta": {
          "addPayment": "Add payment method",
          "reactivate": "Reactivate",
          "updatePayment": "Update payment",
          "viewPlans": "View plans"
        },
        "manageOnPaypal": "Manage on PayPal",
        "manageBilling": "Manage billing",
        "pill": {
          "canceled": "Canceled",
          "pastDue": "Past due",
          "trial": "Trial",
          "active": "Active"
        },
        "verb": {
          "ends": "Ends",
          "accessEnds": "Access ends",
          "updateCardBy": "Update card by",
          "renews": "Renews"
        },
        "unit": {
          "day": "day",
          "days": "days"
        },
        "endsCopy": {
          "today": "{{verb}} today",
          "inDays": "{{verb}} in {{days}} {{unit}} · {{date}}",
          "onDate": "{{verb}} {{date}}"
        },
        "period": {
          "monthly": "monthly",
          "yearly": "yearly"
        }
      },
      "checkoutPage": {
        "breadcrumb": "My Profile / Subscription / Plans / Checkout",
        "title": "Complete Your Purchase",
        "subtitle": "Review your order and enter payment details.",
        "orderSummary": "Order Summary",
        "plan": "Plan",
        "billingCycle": "Billing Cycle",
        "regularPrice": "Regular Price",
        "amountDueToday": "Amount Due Today",
        "paymentDetails": "Payment Details",
        "securePayment": "Secure Payment",
        "providerSecurity": "Payment details are collected securely by the selected payment provider.",
        "backToPlans": "Back to plans",
        "subscriptionLabel": "Subscription",
        "subscribeTo": "Subscribe to {{plan}}",
        "renewingAt": "Renewing at {{price}} per {{period}}",
        "paymob": "Paymob",
        "paymobHint": "Pay by card with Paymob",
        "paymobSaveConsent": "Paymob keeps your card to pay renewals, plan changes and auto top ups. Remove it at any time on Manage billing.",
        "billedMonthly": "Billed monthly - Cancel anytime",
        "billedYearly": "Billed yearly - Cancel anytime",
        "subtotal": "Subtotal",
        "totalDueToday": "Total due today",
        "included": "INCLUDED",
        "creditsPerMonth": "{{count}} credits / month",
        "choosePaymentMethod": "Choose Payment Method",
        "choosePaymentMethodDesc": "Select your preferred payment method to complete your purchase",
        "paypal": "PayPal",
        "stripe": "Stripe",
        "loadingPaymentForm": "Loading payment form...",
        "redirecting": "Redirecting...",
        "payNow": "Pay Now",
        "currentProvider": "Current payment provider: {{provider}}",
        "changePlanNotice": "Your existing billing provider will apply this plan change using its current proration and renewal rules.",
        "confirmPlanChange": "Confirm Plan Change",
        "paymentSecuredBy": "Payment secured by",
        "cycleMonthly": "Monthly",
        "cycleYearly": "Yearly",
        "periodMonth": "month",
        "periodYear": "year",
        "error": {
          "paypalNoApprovalUrl": "PayPal did not return an approval URL.",
          "couldNotStartCheckout": "Could not start checkout.",
          "noClientSecret": "Checkout response did not include a client secret.",
          "failedToLoadForm": "Failed to load payment form."
        },
        "includedFeatures": "INCLUDED FEATURES",
        "cardHint": "Pay by card with Stripe",
        "paypalHint": "Approve in a PayPal window",
        "paypalNote": "You approve the payment on PayPal, then come back here.",
        "redirectingPaypal": "Taking you to PayPal. Do not close this window or refresh.",
        "cycleChangeNote": "Your yearly billing starts when this payment is paid, and your monthly billing ends."
      },
      "subscriptionPage": {
        "eyebrow": "Workspace subscription",
        "title": "Plans and billing",
        "subtitle": "Manage your current plan, monitor available credits, and choose the capacity that fits what you are building.",
        "currentPlanDesc": "Your workspace plan, billing status, and current credit usage.",
        "currentPlan": "Current Plan",
        "upgradeYourPlan": "Upgrade Your Plan",
        "selectPlanDesc": "Select a plan based on your needs",
        "cancelDialog": {
          "title": "Cancel subscription",
          "message": "Cancel your subscription? Your access will continue until the end of the current billing period.",
          "confirm": "Cancel subscription",
          "keep": "Keep plan"
        },
        "changeDialog": {
          "confirm": "Confirm change",
          "previewFailed": "We could not load the details of this change. Try again.",
          "retry": "Try again"
        },
        "changeTitle": {
          "upgrade": "Upgrade to {{plan}}?",
          "downgrade": "Downgrade to {{plan}}?",
          "switchToYearly": "Switch {{plan}} to yearly billing?",
          "switchToMonthly": "Switch {{plan}} to monthly billing?"
        },
        "changeMessage": {
          "monthlyUpgrade": "Starts a new monthly cycle today. You pay {{amount}} now.",
          "toAnnual": "Starts a new yearly cycle today. You pay {{amount}} now.",
          "annualUpgrade": "Starts a new yearly cycle today. You have used {{used}} of your current year, so {{discount}} comes off the new price. You pay {{amount}} now.",
          "annualUpgradeNoQuote": "Starts a new yearly cycle today. The unused value of your current year comes off the new price.",
          "keepCredits": "Your {{credits}} unused credits stay and the new plan's credits are added.",
          "keepCreditsNoCount": "Your unused credits stay and the new plan's credits are added.",
          "keepCreditsFirstMonth": "Your {{credits}} unused credits stay and the new plan's first month of credits is added.",
          "keepCreditsFirstMonthNoCount": "Your unused credits stay and the new plan's first month of credits is added.",
          "scheduled": "Takes effect on {{date}}. Until then you keep your current plan and credits. Unused plan credits end at the switch; top-up credits stay.",
          "scheduledNoDate": "Takes effect at the end of your current period. Until then you keep your current plan and credits. Unused plan credits end at the switch; top-up credits stay.",
          "paymobCheckout": "Yearly billing starts today with a payment of {{amount}} at the card form.",
          "approvalNote": "You approve the new plan on PayPal first.",
          "defaultCard": "It is charged to your default card.",
          "newPrice": "the new plan's price",
          "periodEnd": "This change is scheduled for the end of your current period, {{date}}. Nothing is charged now; until then you keep your current plan and credits.",
          "periodEndNoDate": "This change is scheduled for the end of your current period. Nothing is charged now; until then you keep your current plan and credits."
        },
        "overCap": {
          "agents": "You currently have {{current}} agents but {{plan}} only allows {{allowed}}. You'll need to archive {{excess}} to create new ones.",
          "storage": "You're using {{current}} of storage but {{plan}} only includes {{allowed}}. You'll need to delete {{excess}} before you can upload again.",
          "headsUp": "Heads up: {{warnings}}",
          "seats": "You currently have {{current}} team members but {{plan}} only allows {{allowed}}. You'll need to remove {{excess}} before you can invite anyone new.",
          "apiKeys": "You currently have {{current}} API keys but {{plan}} only allows {{allowed}}. You'll need to revoke {{excess}} before you can create new ones."
        },
        "toast": {
          "changed": {
            "title": "Plan changed",
            "upgraded": "Upgraded to {{plan}}.",
            "downgraded": "Downgrade to {{plan}} scheduled at end of period.",
            "switchedToYearly": "Switched to yearly billing.",
            "switchedToMonthly": "Switch to monthly billing scheduled at end of period.",
            "scheduled": "Change to {{plan}} scheduled for the end of this period."
          },
          "changeFailed": {
            "title": "Plan change failed",
            "detail": "Could not change plan."
          },
          "changeCanceled": {
            "title": "Change canceled",
            "detail": "Your scheduled plan change was canceled."
          },
          "cancelChangeFailed": {
            "title": "Could not cancel change"
          },
          "tryAgain": "Please try again.",
          "openBillingFailed": {
            "title": "Could not open billing"
          },
          "refreshed": {
            "title": "Refreshed",
            "detail": "Your subscription is up to date."
          },
          "syncFailed": {
            "title": "Sync failed",
            "detail": "Could not refresh your subscription."
          },
          "reactivated": {
            "title": "Reactivated",
            "detail": "Your subscription is active again."
          },
          "reactivationFailed": {
            "title": "Reactivation failed",
            "detail": "Could not reactivate subscription."
          },
          "canceled": {
            "title": "Subscription canceled",
            "detail": "Your access continues until the end of the billing period."
          },
          "cancellationFailed": {
            "title": "Cancellation failed",
            "detail": "Could not cancel subscription."
          },
          "invoiceFailed": {
            "title": "Could not open your invoice"
          }
        },
        "error": {
          "failedToLoadPlans": "Failed to load plans."
        }
      },
      "plans": {
        "starter": {
          "name": "Professional",
          "description": "For creators making premium content for global audiences"
        },
        "pro": {
          "name": "Organization",
          "description": "For creators making premium content for global audiences"
        },
        "business": {
          "name": "Enterprise",
          "description": "For creators making premium content for global audiences"
        }
      },
      "presentationFeatures": {
        "credits": "Monthly credits",
        "commercialLicense": "License for commercial use",
        "instantCloning": "Instant Voice Cloning",
        "professionalCloning": "Professional Voice Cloning"
      },
      "portalTitle": "Subscription",
      "portalSubtitle": "Manage your plan, credits, and billing preferences.",
      "checkoutTitle": "Checkout",
      "billingLink": "Billing details",
      "creditsHistoryLink": "Credits History",
      "page": {
        "changesOn": "Your plan changes to {{plan}} on {{date}}.",
        "keepCurrentPlan": "Keep current plan",
        "undoChangeFailed": "Could not undo the plan change",
        "currentPlan": "Current plan",
        "perCycle": "/ {{period}} · billed {{cycle}}",
        "accessUntil": "Access until {{date}}",
        "billingInformation": "Billing Information",
        "downloadInvoices": "Download invoices",
        "addCredits": "Add credits",
        "plansTitle": "Simple plans. Arabic-first. No surprises",
        "howBilling": "How billing works",
        "nextInvoice": "Next invoice",
        "allInvoices": "All invoices on {{provider}}",
        "noInvoices": "Invoices appear once you subscribe to a paid plan.",
        "oneTime": "One time",
        "included": "Included",
        "cancelNote": "Your subscription credits end on {{date}}. Top-up credits never expire.",
        "cancelNoteNoDate": "Your subscription credits end when this period ends. Top-up credits never expire.",
        "card": "{{brand}} ···· {{last4}}",
        "facts": {
          "upgrade": {
            "title": "Upgrade",
            "body": "Starts a new cycle today at the new plan's price. Your unused credits stay and the new plan's credits are added. A yearly upgrade takes off the unused value of your year."
          },
          "downgrade": {
            "title": "Downgrade",
            "body": "Applies at the end of the current period, as does yearly to monthly. Unused plan credits end at the switch."
          },
          "cancel": {
            "title": "Cancel",
            "body": "Your plan stays active until the period ends. Then plan credits end and basic limits apply; top-up credits never expire."
          },
          "extra": {
            "title": "Extra credits",
            "body": "Never expire, with or without a paid plan. Your plan credits are always used first."
          },
          "rollover": {
            "title": "Rollover",
            "body": "Unused plan credits roll over when the same plan renews, up to 3× your monthly allowance."
          },
          "payment": {
            "title": "Payment",
            "body": "Card or PayPal. VAT is calculated by the payment provider at checkout."
          }
        },
        "viewReceipts": "View receipts",
        "cycleChangesOn": "Your billing changes to {{cycle}} on {{date}}."
      },
      "balance": {
        "title": "Credit balance",
        "unit": "credits",
        "plan": "Plan credits",
        "trial": "Trial credits",
        "rolledOver": "Includes {{count}} rolled over",
        "cap": "Rolls over up to {{cap}}",
        "nextGrant": "Next credits {{date}}",
        "extra": "Extra credits",
        "granted": "Granted",
        "noExtra": "None yet",
        "aiTrial": "AI in your trial: {{used}} of {{cap}}",
        "aiTrialDone": "Your trial AI allowance is used up. Upgrade to keep using AI.",
        "basicTitle": "No paid plan, basic limits",
        "basicBody": "Top-up credits never expire. Choose a plan to get monthly credits again."
      }
    },
    "payment": {
      "paymentCancel": {
        "title": "Payment Failed",
        "description": "We couldn't process your payment. Please check your card details or try another payment method.",
        "tryAgain": "Try Again",
        "needHelp": "Need help?",
        "contactSupport": "Contact Support",
        "errorCause": "Error Cause",
        "safeCause": "The payment was not completed",
        "reference": "Reference",
        "amount": "Amount",
        "date": "Date",
        "changePaymentMethod": "Change Payment Method"
      },
      "paymentHistory": {
        "title": "Credits History",
        "subtitle": "Every credit consumed or refunded across your services.",
        "retry": "Retry",
        "empty": "No credit activity yet.",
        "colDate": "Date",
        "colService": "Service",
        "colAction": "Action",
        "colCredits": "Credits",
        "colBalanceAfter": "Balance after",
        "colDescription": "Description",
        "pagination": "Page {{current}} of {{total}} ({{records}} records)",
        "previous": "Previous",
        "next": "Next",
        "serviceAll": "All Services",
        "serviceTts": "Text to Speech",
        "serviceStt": "Speech to Text",
        "serviceAnnotation": "Annotation",
        "serviceClean": "Sound Cleaning",
        "serviceVoiceAgent": "Voice agent",
        "serviceChatAgent": "Chat agent",
        "actionAll": "All Actions",
        "actionConsume": "Consume",
        "actionRefund": "Refund",
        "loadError": "Failed to load credit history.",
        "kicker": "Payment History",
        "creditsUsed": "{{count}} credits used this period",
        "colDetails": "Details",
        "showDetails": "Details",
        "hideDetails": "Hide",
        "serviceReader": "EchoReader",
        "serviceClone": "Voice cloning",
        "serviceKnowledge": "Knowledge base",
        "serviceAgentBuild": "Agent setup",
        "serviceDbTools": "Database tools",
        "serviceOther": "Other",
        "detail": {
          "oldUnit": "Charged in the old credit unit, before credits changed. Old and new amounts do not compare.",
          "service": "Service",
          "model": "Model",
          "quantity": "Quantity",
          "rate": "Rate",
          "credits": "Credits",
          "providerCost": "Provider cost",
          "paidFrom": "Paid from",
          "ratePerUsd": "at {{rate}} credits per $1",
          "covers": "covers {{usd}}",
          "source": {
            "plan": "Plan credits",
            "trial": "Trial credits",
            "topup": "Extra credits",
            "admin": "Granted credits",
            "other": "Other credits"
          },
          "item": {
            "tts": "Text to Speech",
            "sttFile": "Speech to Text from files",
            "sttLive": "Live Speech to Text",
            "clean": "Sound Cleaning",
            "agentBase": "Voice agent time",
            "liveness": "Voice clone liveness check",
            "similarity": "Voice clone same-speaker check",
            "cloneBuild": "Instant voice build",
            "cloneTraining": "Professional voice training",
            "cloneFee": "Voice clone fee",
            "llm": "AI model",
            "vision": "EchoReader page reading",
            "other": "Other charge"
          },
          "qty": {
            "characters": "{{n}} characters",
            "seconds": "{{n}} seconds",
            "voices": "{{n}} voices",
            "tokens": "{{n}} tokens",
            "pages": "{{n}} pages",
            "units": "{{n}} units"
          },
          "per": {
            "character": "{{n}} per character",
            "minute": "{{n}} per minute",
            "voice": "{{n}} per voice",
            "hour": "{{n}} per hour",
            "second": "{{n}} per second",
            "page": "{{n}} per page"
          },
          "total": "Total",
          "charged": "Charged",
          "qtyOne": {
            "characters": "1 character",
            "seconds": "1 second",
            "voices": "1 voice",
            "tokens": "1 token",
            "pages": "1 page",
            "units": "1 unit"
          }
        },
        "unlimited": "Unlimited",
        "oldChip": "Old credits",
        "oldChipHint": "Charged in the old credit unit, before credits changed. Do not compare with new credits.",
        "totalExcludesOld": "Rows marked Old credits are not included.",
        "showDetailsFor": "Details for {{service}}, {{date}}",
        "hideDetailsFor": "Hide details for {{service}}, {{date}}",
        "detailRegion": "Charge details for {{service}}, {{date}}"
      },
      "paymentSuccess": {
        "failedTitle": "Payment failed",
        "failedDescription": "Your card was not charged. Check the card details or try another card.",
        "cardAddedTitle": "Card added",
        "cardAddedDescription": "Your card is saved for renewals, plan changes and auto top ups. The small check payment was cancelled.",
        "goToBilling": "Go to Manage billing",
        "card": "Card",
        "goToHome": "Go to home page",
        "orderId": "Order ID",
        "amountPaid": "Amount Paid",
        "nextBillingDate": "Next Billing Date",
        "viewReceipt": "View Receipt",
        "creditsPrefix": "You now have",
        "creditsSuffix": "Credits",
        "confirming": "Confirming your subscription…",
        "successTitle": "Payment Successful!",
        "successDescription": "Your subscription is now active. Thank you for your purchase!",
        "topupSuccessTitle": "Credits added",
        "topupSuccessDescription": "Your extra credits are ready. They never expire and are used after your plan credits run out.",
        "goToDashboard": "Go to Dashboard",
        "pendingTitle": "Almost there",
        "pendingDescription": "Your payment was received. The subscription will activate in a moment. Refresh the subscription page in a few seconds.",
        "goToSubscription": "Go to Subscription",
        "errorTitle": "Confirmation failed",
        "errorDescription": "Could not confirm your subscription. Please try again.",
        "topupErrorDescription": "Could not confirm your credit purchase. If you were charged, the credits will appear within a few minutes; otherwise try again.",
        "confirmError": "Could not confirm subscription.",
        "missingReference": "This page needs a valid payment reference. Return to subscription and start checkout again.",
        "processingTitle": "Processing Your Payment...",
        "processingDescription": "Please wait while we securely process your transaction. Do not close this window or refresh.",
        "securityMessage": "Secure provider-hosted payment processing",
        "paymentDetails": "Payment Details",
        "plan": "Plan",
        "billingCycle": "Billing Cycle",
        "orderDate": "Date",
        "receiptUnavailable": "Receipt details are not returned by the current subscription API."
      }
    },
    "annotations": {
      "annotations": {
        "startAnnotating": "Start Annotating",
        "startAudioAnnotation": "Start audio annotation",
        "audioAnnotationAlt": "Audio annotation",
        "audio": "Audio",
        "startImageAnnotation": "Start image annotation",
        "imageAnnotationAlt": "Image annotation",
        "image": "Image",
        "history": "History",
        "searchPlaceholder": "Type to search...",
        "searchHistory": "Search history",
        "medicalImage": "Medical Image",
        "todayTime": "Today,12:30PM",
        "downloadMedicalImage": "Download Medical Image",
        "meetingAudioName": "Meeting With Mahmood and Goda.MP3",
        "downloadMeetingAudio": "Download Meeting With Mahmood and Goda.MP3"
      },
      "annotationAudioPage": {
        "savedSuccess": "Annotation saved successfully!"
      },
      "annotationImagePage": {
        "confirm": "Confirm",
        "cancel": "Cancel",
        "submittedSuccess": "Annotations submitted successfully!"
      }
    },
    "team": {
      "inviteMemberDialog": {
        "title": "Invite a member",
        "emailLabel": "Email",
        "emailPlaceholder": "teammate@example.com",
        "roleLabel": "Role",
        "rolePlaceholder": "Select a role",
        "cancel": "Cancel",
        "sending": "Sending…",
        "send": "Send invitation",
        "sendError": "Could not send invitation."
      },
      "teamPage": {
        "title": "Team",
        "subtitle": "Who can access this workspace, and what they can do.",
        "inviteMember": "Invite member",
        "overLimitPrefix": "Your workspace is over the seat limit for the current plan. Remove some members or",
        "overLimitLink": "upgrade your plan",
        "overLimitSuffix": "to invite more.",
        "membersTab": "Members",
        "invitationsTab": "Invitations",
        "colMember": "Member",
        "colRole": "Role",
        "colStatus": "Status",
        "colEmail": "Email",
        "colSent": "Sent",
        "membersEmptyTitle": "No one here yet",
        "membersEmptyText": "Invite teammates to collaborate on voices, transcriptions, and credits.",
        "inviteFirstMember": "Invite the first member",
        "ownerBadge": "Owner",
        "ownerRole": "Owner",
        "adminRole": "Admin",
        "memberRole": "Member",
        "rolesKicker": "Roles",
        "ownerDescription": "Everything in the workspace: members, roles, invitations, billing and the developer API, plus the speech tools and the agents.",
        "adminDescription": "Manages members, roles, invitations and the developer API; sees billing without changing it; uses the speech tools and the agents.",
        "memberDescription": "Uses the speech tools and the agents; cannot view members, billing or the developer API.",
        "removeMember": "Remove member",
        "invitationsEmptyTitle": "No invitations yet",
        "invitationsEmptyText": "Send an invitation and we'll email a join link.",
        "sendInvitation": "Send an invitation",
        "pendingHeading": "Pending",
        "historyHeading": "History",
        "revoke": "Revoke",
        "removeDialogTitle": "Remove member",
        "removeConfirm": "Remove",
        "revokeDialogTitle": "Revoke invitation",
        "seatLimitTitle": "Seat limit reached",
        "seatLimitText": "Your plan allows {{limit}} seats (members + pending invitations). Remove a member or upgrade your plan to invite more.",
        "upgradePlan": "Upgrade plan",
        "invitationSentTitle": "Invitation sent",
        "invitationSentText": "They will receive an email with the invitation link.",
        "roleChangedTitle": "Role changed",
        "roleChangedText": "{{email}} is now {{role}}.",
        "aMember": "a member",
        "roleChangeErrorTitle": "Could not change role",
        "tryAgain": "Try again.",
        "removeMessage": "Remove {{email}} from this workspace? They will lose access immediately.",
        "memberRemovedTitle": "Member removed",
        "removeFailedTitle": "Remove failed",
        "revokeMessage": "Revoke the invitation sent to {{email}}?",
        "invitationRevokedTitle": "Invitation revoked",
        "revokeFailedTitle": "Revoke failed",
        "loadError": "Failed to load team data.",
        "status": {
          "active": "Active",
          "accepted": "Accepted",
          "invited": "Invited",
          "pending": "Pending",
          "rejected": "Rejected",
          "revoked": "Revoked",
          "expired": "Expired",
          "suspended": "Suspended"
        },
        "kicker": "Invitations",
        "resend": "Resend",
        "invitationResentTitle": "Invitation sent again",
        "resendFailedTitle": "Resend failed"
      }
    },
    "feedback": {
      "title": "Send feedback",
      "subtitle": "Tell us how EchoNova is working for you.",
      "ratingLabel": "How is your experience?",
      "rating1": "Very unhappy",
      "rating2": "Unhappy",
      "rating3": "Neutral",
      "rating4": "Happy",
      "rating5": "Very happy",
      "messageLabel": "Anything to add?",
      "optional": "(optional)",
      "messagePlaceholder": "What works, what doesn't, what you'd like next",
      "cancel": "Cancel",
      "send": "Send",
      "sending": "Sending...",
      "thanks": "Thank you. Your feedback reached the team.",
      "error": "Could not send your feedback. Try again."
    },
    "myProfile": {
      "assetsAndHistory": {
        "eyebrow": "Your audio archive",
        "title": "Everything you made, in one line",
        "subtitle": "Every voice you generated, every file you transcribed or cleaned, and every voice you added. Kept until you delete it.",
        "workspace": "Audio history workspace",
        "searchLabel": "Search history",
        "searchPlaceholder": "Search text, files and voices",
        "columnAsset": "Asset",
        "columnCreated": "Created",
        "columnType": "Type",
        "soon": "Soon",
        "loadingHistory": "Loading history…",
        "noHistoryMatch": "No history matches your search",
        "noHistoryYet": "No history yet",
        "noHistoryMatchHint": "Try a different keyword or clear the search.",
        "noHistoryYetHint": "Nothing here yet. Generate speech, transcribe a file or clean a recording, and it lands here.",
        "generateSpeech": "Generate speech",
        "transcribeAudio": "Transcribe audio",
        "clearSearch": "Clear search",
        "openMenu": "Open menu",
        "downloadTitleFailed": "Generation failed, nothing to download",
        "downloadTitlePending": "Still processing",
        "downloadTitle": "Download",
        "download": "Download",
        "tryAgain": "Try again",
        "recreate": "Recreate",
        "tabAll": "All",
        "tabTts": "Text to Speech",
        "tabStt": "Speech to Text",
        "tabClean": "Sound Cleaning",
        "tabClone": "Voice Cloning",
        "openClone": "Open",
        "noClones": "No cloned voices yet",
        "noClonesHint": "Clone your voice and it lands here.",
        "loadError": "Failed to load history. Please try again.",
        "noText": "No text",
        "unknownVoice": "Unknown voice",
        "audioFile": "Audio file",
        "todayAt": "Today, {{time}}",
        "yesterdayAt": "Yesterday, {{time}}",
        "unknown": "Unknown",
        "typeTts": "Text to Speech",
        "typeStt": "Speech to Text",
        "typeAnnotation": "Annotation",
        "imageAnnotation": "Image Annotation",
        "audioAnnotation": "Audio Annotation",
        "statusFailed": "Failed",
        "statusProcessing": "Processing",
        "statusReady": "Ready",
        "downloadError": "Failed to download this history item. Please try again.",
        "downloadFormat": "Transcript format",
        "noTranscript": "No transcript available",
        "kicker": "Assets · everything you made",
        "typeClean": "Sound Cleaning",
        "untitled": "Untitled",
        "today": "Today",
        "yesterday": "Yesterday",
        "dialectFilters": "Filter by dialect",
        "partialError": "Part of your history did not load.",
        "play": "Play",
        "pause": "Pause",
        "stop": "Stop",
        "close": "Close",
        "playAudio": "Play the audio",
        "playError": "This audio could not be played. Try again.",
        "player": "Audio player",
        "openTranscript": "Open the transcript",
        "closeTranscript": "Close the transcript",
        "transcript": "Transcript",
        "downloadTxt": "Download TXT",
        "rename": "Rename",
        "nameLabel": "Name",
        "renamed": "Renamed",
        "renameError": "The new name was not saved. Try again.",
        "delete": "Delete",
        "keep": "Keep",
        "deleteConfirm": "Delete for good?",
        "deleted": "Deleted",
        "deleteError": "This was not deleted. Try again.",
        "deleteProcessing": "Still processing. Delete it once it finishes.",
        "deleteForbidden": "Only the person who made this, or a workspace admin, can delete it."
      },
      "settings": {
        "tabProfile": "Profile Settings",
        "tabSecurity": "Login and security",
        "tabPreferences": "Preference",
        "personalInformation": "Personal Information",
        "name": "Name",
        "namePlaceholder": "Your full name",
        "email": "Email",
        "phone": "Phone",
        "gender": "Gender",
        "birthDate": "Birth Date",
        "bio": "Bio",
        "bioPlaceholder": "A short bio about yourself",
        "saving": "Saving...",
        "saveChanges": "Save Changes",
        "signInMethod": "Sign-in method",
        "signInMethodDesc": "How you sign in to your account.",
        "connected": "Connected",
        "changePassword": "Change password",
        "changePasswordDesc": "Use a strong password: at least 8 characters with an uppercase letter, a lowercase letter, a number and a special character.",
        "currentPassword": "Current password",
        "newPassword": "New password",
        "confirmPassword": "Confirm new password",
        "updating": "Updating...",
        "updatePassword": "Update password",
        "twoFactor": "Two-factor authentication",
        "twoFactorDesc": "Add a code from an authenticator app on top of your password.",
        "on": "On",
        "off": "Off",
        "disable": "Disable",
        "enable": "Enable",
        "sessions": "Sign out of all devices",
        "sessionsDesc": "This ends all sign-in sessions on this device and every other device. You will need to sign in again.",
        "signOutEverywhere": "Sign out everywhere",
        "signOutEverywhereError": "Could not sign out of all devices. Try again.",
        "chooseStyle": "Choose your style",
        "light": "Light",
        "dark": "Dark",
        "appLanguage": "Application language",
        "selectLanguage": "Select language",
        "disableTwoFactorTitle": "Disable two-factor authentication",
        "enableTwoFactorTitle": "Enable two-factor authentication",
        "scanAndConfirm": "Scan and confirm",
        "close": "Close",
        "settingUp": "Setting up two-factor authentication…",
        "scanQrInstruction": "Scan this QR with your authenticator app, then enter the 6-digit code it shows.",
        "qrCodeAlt": "Two-factor QR code",
        "cantScan": "Can't scan? Enter this setup key manually",
        "copied": "Copied",
        "copy": "Copy",
        "disableTwoFactorInstruction": "Enter your current authentication code or a recovery code to turn off two-factor authentication.",
        "recoveryCodesTitle": "Save your recovery codes",
        "recoveryCodesDesc": "Store these codes somewhere safe. They are shown only once. Each code works one time if you lose access to your authenticator app. Anyone with a code can pass two-factor, so keep them private.",
        "recoveryCodes": "Recovery codes",
        "recoveryCodesLeft": "{{n}} recovery codes left",
        "recoveryCodesLow": "You have {{n}} recovery codes left. Regenerate to get 10 new ones.",
        "recoveryCodesLeftOne": "1 recovery code left",
        "recoveryCodesLowOne": "You have 1 recovery code left. Regenerate to get 10 new ones.",
        "regenerate": "Regenerate",
        "regenerateTitle": "Regenerate recovery codes",
        "regenerateInstruction": "Enter the 6-digit code from your authenticator app. Your old recovery codes stop working.",
        "copyAll": "Copy all",
        "copyFailed": "Could not copy. Select the codes and copy them by hand.",
        "recoveryCodesSaved": "I saved these codes somewhere safe",
        "recoveryCodesRegeneratedToast": "New recovery codes are ready",
        "download": "Download",
        "done": "Done",
        "cancel": "Cancel",
        "langEnglish": "English",
        "langArabic": "Arabic",
        "langFrench": "French",
        "langSpanish": "Spanish",
        "genderPreferNot": "Prefer not to say",
        "genderMale": "Male",
        "genderFemale": "Female",
        "twoFactorEnabledToast": "Two-factor authentication enabled",
        "twoFactorDisabledToast": "Two-factor authentication disabled",
        "invalidCode": "Invalid code.",
        "couldNotStartSetup": "Could not start setup.",
        "couldNotDisable": "Could not disable.",
        "savedTitle": "Saved",
        "profileUpdated": "Profile updated successfully.",
        "passwordMismatch": "New password and confirmation do not match.",
        "passwordChangedTitle": "Password changed",
        "passwordChangedDetail": "Your password was updated successfully.",
        "changePasswordError": "Failed to change password.",
        "providerEmail": "Email",
        "updateProfileError": "Failed to update profile.",
        "updatePreferencesError": "Failed to update preferences.",
        "loadProfileError": "Failed to load profile.",
        "signOutConfirm": "All sign-in sessions will end, including the current session. You will need to sign in again on every device.",
        "sixDigitCode": "6-digit code",
        "code": "Code",
        "currentPasswordWrong": "Your current password is not correct.",
        "tabDataUse": "Data use",
        "dataUse": {
          "title": "Data use",
          "lead": "We train and improve our models on a separate copy of the text and audio you submit and generate, with your name, email and the account link removed. You can turn this off at any time. After that we take no new copies of this workspace's content; copies taken before stay until their period ends (up to 3 years after your last activity) unless you ask us to delete them at privacy@echonova.ai.",
          "switchLabel": "Use this workspace's content to improve EchoNova models",
          "managedByAdmins": "Only the workspace owner and admins can change this.",
          "changesTitle": "Changes",
          "turnedOnBy": "Turned on by {{name}}",
          "turnedOffBy": "Turned off by {{name}}",
          "noChanges": "No changes yet. This setting has been on since the workspace was created.",
          "saved": "Saved",
          "saveError": "Could not save. Try again.",
          "loadError": "Could not load this setting. Try again."
        },
        "closeAccount": {
          "title": "Delete account",
          "open": "Delete account",
          "desc": "Permanently delete your account and every workspace you own.",
          "warnTitle": "Before you delete your account",
          "warnDay0": "Effective immediately: you are signed out of all sessions, and your workspaces, agents, API keys and integrations are deactivated. Your subscription is cancelled and any unused credits are forfeited. We will email you a link to export your data.",
          "warnDay30": "After 30 days: your account and its data are permanently deleted. Until then, you can export your data or ask privacy@echonova.ai to reopen your account.",
          "warnBackups": "Deleted data is removed from our live systems within 60 days of closing and from our backups within 95 days. This cannot be undone.",
          "warnKept": "Some records are kept as required: invoices and payment records for 5 years under UAE law, generation records for up to 12 months, and the consent recording of any cloned voice for 12 months.",
          "email": "Type your email or username to confirm",
          "emailMismatch": "This does not match the email or username of this account.",
          "password": "Password",
          "code": "Authentication code",
          "submit": "Delete my account",
          "busy": "Deleting…",
          "cancel": "Cancel",
          "reauth": "For your safety, sign in again, then delete your account within 15 minutes.",
          "signInAgain": "Sign in again",
          "otherMembers": "Remove other members first, or contact privacy@echonova.ai."
        }
      }
    },
    "invitations": {
      "acceptInvitationPage": {
        "loading": "Loading invitation…",
        "invitedTitle": "You've been invited",
        "invitedBySuffix": "has invited you to join their workspace.",
        "invitedGeneric": "You've been invited to join a workspace on EchoNova.",
        "workspaceLabel": "Workspace",
        "roleLabel": "Role",
        "invitedByLabel": "Invited by",
        "sentToPrefix": "Invitation sent to",
        "signInAsPrefix": "Sign in as",
        "signInAsSuffix": "to accept.",
        "declineBtn": "Decline",
        "acceptBtn": "Accept invitation",
        "signInToAcceptBtn": "Sign in to accept",
        "joining": "Joining the workspace…",
        "declining": "Declining…",
        "goToDashboardBtn": "Go to dashboard",
        "goHomeBtn": "Go home",
        "errorNotRecipient": "You are not the intended recipient of this invitation. Sign in with the email it was sent to.",
        "errorInvalid": "This invitation is no longer valid.",
        "successAccepted": "Invitation accepted. Switch to this workspace from the sidebar to start using it.",
        "errorCouldNotAccept": "Could not accept invitation.",
        "successDeclined": "Invitation declined.",
        "errorCouldNotDecline": "Could not decline invitation.",
        "statusAccepted": "This invitation was already accepted.",
        "statusRejected": "This invitation was declined.",
        "statusExpired": "This invitation has expired.",
        "statusRevoked": "This invitation was revoked.",
        "statusNotPending": "This invitation is no longer pending.",
        "expiredAskOwner": "This invitation expired. Ask the workspace owner to send a new one."
      },
      "invitationsInboxPage": {
        "title": "Invitations",
        "subtitle": "Workspaces you've been invited to join. Accept or decline without leaving the app.",
        "refreshBtn": "Refresh",
        "loading": "Loading…",
        "emptyTitle": "No pending invitations",
        "emptyDescription": "When someone invites you to a workspace, it'll show up here.",
        "backToHomeBtn": "Back to home",
        "defaultWorkspace": "A workspace",
        "invitedAs": "Invited as",
        "defaultRole": "Member",
        "by": "by",
        "expiresIn": "Expires in",
        "day": "day",
        "days": "days",
        "declining": "Declining…",
        "declineBtn": "Decline",
        "accepting": "Accepting…",
        "acceptBtn": "Accept",
        "hideDetails": "Hide details",
        "viewDetails": "View details",
        "workspaceLabel": "Workspace",
        "roleLabel": "Role",
        "invitedByLabel": "Invited by",
        "sentToLabel": "Sent to",
        "sentLabel": "Sent",
        "expiresLabel": "Expires",
        "errorCouldNotAccept": "Could not accept this invitation.",
        "errorCouldNotDecline": "Could not decline this invitation.",
        "errorCouldNotLoad": "Could not load your invitations.",
        "kicker": "Workspace",
        "expiredChip": "Expired"
      },
      "errors": {
        "notFound": "This invitation was not found. Ask the workspace owner to send a new one.",
        "expired": "This invitation expired. Ask the workspace owner to send a new one.",
        "notRecipient": "This invitation was sent to a different email. Sign in with the email it was sent to.",
        "alreadyHandled": "This invitation was already used or cancelled, so it can no longer be changed.",
        "alreadyPending": "This email already has a pending invitation for this workspace.",
        "alreadyMember": "This email already belongs to a member of this workspace.",
        "seatLimit": "Your workspace has no free seats left. Upgrade your plan to invite more people.",
        "network": "Could not reach EchoNova. Check your connection and try again.",
        "generic": "Something went wrong. Please try again."
      }
    },
    "workspaces": {
      "workspaceSwitcher": {
        "noWorkspaces": "No workspaces yet.",
        "fallbackName": "Workspace",
        "switchSuccessTitle": "Switched workspace",
        "switchSuccessBody": "Now in {{name}}.",
        "switchErrorTitle": "Switch failed",
        "switchErrorBody": "Could not switch workspace."
      }
    },
    "termsPrivacy": {
      "privacyPolicy": {
        "title": "Privacy Policy",
        "lastUpdated": "January 05, 2026",
        "s1Title": "Information We Collect",
        "s1ss1Title": "Information You Provide",
        "s1ss1i1": "Account information including name, email address, username, and password",
        "s1ss1i2": "Profile information such as phone number, gender, birth date, and bio (optional)",
        "s1ss1i3": "Audio files, voice recordings, and transcriptions you create or upload",
        "s1ss1i4": "Image annotations including medical images, street-level images, and associated metadata",
        "s1ss1i5": "Task annotations, comments, notes, and review feedback",
        "s1ss1i6": "Specialization preferences and skill information when joining as an annotator",
        "s1ss1i7": "Identity verification documents (for sensitive projects requiring ID verification)",
        "s1ss1i8": "Communication history including support requests and feedback",
        "s1ss2Title": "Automatically Collected Information",
        "s1ss2i1": "Usage data including task completion times, annotation activity, and platform interactions",
        "s1ss2i2": "Device information such as browser type, operating system, and IP address",
        "s1ss2i3": "Authentication tokens and session data for security and access management",
        "s1ss2i4": "Task assignment history, completion status, and performance metrics",
        "s1ss2i5": "Review and quality assessment data including reviewer feedback and ratings",
        "s1ss2i6": "System logs and error reports for troubleshooting and service improvement",
        "s2Title": "How We Use Google User Data",
        "s2IntroText": "When you connect your Google account to EchoNova, we may access the following data:",
        "s2dp1Label": "Basic Profile Information",
        "s2dp1Desc": "To identify your account, authenticate your identity, and personalize your experience on our platform",
        "s2dp2Label": "Email Address",
        "s2dp2Desc": "To create and manage your account, send verification emails, and communicate important service updates",
        "s3Title": "How We Use Your Information",
        "s3ss1Title": "Service Provision",
        "s3ss1i1": "To provide, maintain, and improve our annotation platform and services",
        "s3ss1i2": "To assign tasks, manage workflows, and facilitate collaboration between annotators and reviewers",
        "s3ss1i3": "To process and store annotations, transcriptions, and related data",
        "s3ss1i4": "To enable audio playback, image viewing, and annotation tools functionality",
        "s3ss2Title": "Account Management",
        "s3ss2i1": "To create and manage user accounts, including authentication and authorization",
        "s3ss2i2": "To verify email addresses and ensure account security",
        "s3ss2i3": "To send service-related notifications, updates, and administrative messages",
        "s3ss2i4": "To track task assignments, completions, and performance metrics",
        "s3ss3Title": "Quality Assurance",
        "s3ss3i1": "To conduct quality reviews and assessments of annotations",
        "s3ss3i2": "To train and improve AI models using anonymized annotation data",
        "s3ss3i3": "To ensure compliance with HIPAA regulations for medical data annotation",
        "s3ss3i4": "To maintain accuracy and consistency across annotation projects",
        "s4Title": "Data Sharing and Disclosure",
        "s4ss1Title": "Service Providers",
        "s4ss1i1": "We may share data with third-party service providers who assist in operating our platform, including cloud storage, authentication services, and analytics providers",
        "s4ss1i2": "All service providers are contractually obligated to protect your data and use it only for specified purposes",
        "s4ss2Title": "Legal Requirements",
        "s4ss2i1": "We may disclose information if required by law, court order, or government regulation",
        "s4ss2i2": "We may share data to protect our rights, property, or safety, or that of our users",
        "s4ss3Title": "Business Transfers",
        "s4ss3i1": "In the event of a merger, acquisition, or sale of assets, user data may be transferred as part of the transaction",
        "s4ss3i2": "Users will be notified of any such transfer and any changes to privacy practices",
        "s5Title": "Data Security",
        "s5Content": "We implement industry-standard security measures to protect your information, including encryption, secure authentication, access controls, and regular security audits. For medical data, we maintain HIPAA-compliant security protocols. However, no method of transmission over the internet or electronic storage is 100% secure, and we cannot guarantee absolute security.",
        "s6Title": "Data Retention",
        "s6Content": "We retain your personal information for as long as necessary to provide our services, comply with legal obligations, resolve disputes, and enforce our agreements. Annotation data and task history may be retained for quality assurance and service improvement purposes. You may request deletion of your account and associated data by contacting us.",
        "s7Title": "Your Rights and Choices",
        "s7ss1Title": "Access and Correction",
        "s7ss1i1": "You have the right to access, update, or correct your personal information through your account settings",
        "s7ss1i2": "You may request a copy of your data in a portable format",
        "s7ss2Title": "Account Deletion",
        "s7ss2i1": "You may request deletion of your account and associated personal data",
        "s7ss2i2": "Some data may be retained as required by law or for legitimate business purposes",
        "s7ss2i3": "Annotation data may be retained in anonymized form for quality assurance",
        "s7ss3Title": "Communication Preferences",
        "s7ss3i1": "You can opt out of marketing communications while still receiving essential service notifications",
        "s7ss3i2": "You can manage email preferences in your account settings",
        "s7ss4Title": "Cookies and Tracking",
        "s7ss4i1": "You can control cookies through your browser settings",
        "s7ss4i2": "Some features may require cookies to function properly",
        "s8Title": "Children's Privacy",
        "s8Content": "Our services are not intended for individuals under the age of 18. We do not knowingly collect personal information from children. If we become aware that we have collected information from a child, we will take steps to delete such information promptly.",
        "s9Title": "International Data Transfers",
        "s9Content": "Your information may be transferred to and processed in countries other than your country of residence. These countries may have data protection laws that differ from those in your country. By using our services, you consent to the transfer of your information to these countries.",
        "s10Title": "Changes to This Privacy Policy",
        "s10Content": "We may update this Privacy Policy from time to time. We will notify you of any material changes by posting the new policy on this page and updating the \"Last Updated\" date. Your continued use of our services after such changes constitutes acceptance of the updated policy.",
        "contactTitle": "Contact & Support",
        "contactDescription": "If You Have Questions Or Concerns About This Privacy Policy Or Our Data Practices, Please Contact Us:"
      },
      "termsConditions": {
        "title": "Terms And Conditions",
        "lastUpdated": "January 05, 2026",
        "s1Title": "Acceptance of Terms",
        "s1Content": "By accessing or using EchoNova (\"the Service\"), you agree to be bound by these Terms and Conditions (\"Terms\"). If you do not agree to these Terms, you may not use the Service. EchoNova provides an AI-powered annotation platform for audio intelligence, medical data annotation, and street-level insight services. These Terms apply to all users, including annotators, reviewers, administrators, and clients.",
        "s2Title": "Account Registration and Security",
        "s2ss1Title": "Account Creation",
        "s2ss1i1": "You must provide accurate, current, and complete information when creating an account",
        "s2ss1i2": "You are responsible for maintaining the confidentiality of your account credentials",
        "s2ss1i3": "You must be at least 18 years old to create an account",
        "s2ss1i4": "You agree to notify us immediately of any unauthorized use of your account",
        "s2ss2Title": "Account Responsibilities",
        "s2ss2i1": "You are responsible for all activities that occur under your account",
        "s2ss2i2": "You must not share your account credentials with others",
        "s2ss2i3": "You must not create multiple accounts to circumvent platform restrictions",
        "s2ss2i4": "We reserve the right to suspend or terminate accounts that violate these Terms",
        "s2ss3Title": "Annotator Application Process",
        "s2ss3i1": "To become an annotator, you must complete the application process including providing specialization information",
        "s2ss3i2": "You may be required to complete a sample task and pass a review process",
        "s2ss3i3": "Acceptance as an annotator is at our sole discretion",
        "s2ss3i4": "You may be required to provide identity verification for sensitive projects",
        "s3Title": "Service Description",
        "s3ss1Title": "Annotation Services",
        "s3ss1i1": "EchoNova provides annotation tools for audio transcription, medical image annotation, and street-level image labeling",
        "s3ss1i2": "Tasks are assigned based on your specialization, availability, and performance",
        "s3ss1i3": "You agree to complete assigned tasks according to project guidelines and quality standards",
        "s3ss1i4": "Annotation work may be subject to review by reviewers and super reviewers",
        "s3ss2Title": "Platform Features",
        "s3ss2i1": "Audio annotation tools for transcription, speaker identification, dialect classification, and quality assessment",
        "s3ss2i2": "Medical image annotation tools with HIPAA-compliant workflows for radiology and clinical data",
        "s3ss2i3": "Street-level image annotation for geospatial and vision datasets",
        "s3ss2i4": "Task management, batch operations, and collaboration features",
        "s4Title": "User Conduct and Responsibilities",
        "s4ss1Title": "Prohibited Activities",
        "s4ss1i1": "You must not use the Service for any illegal or unauthorized purpose",
        "s4ss1i2": "You must not upload malicious code, viruses, or harmful content",
        "s4ss1i3": "You must not attempt to gain unauthorized access to the Service or other users' accounts",
        "s4ss1i4": "You must not interfere with or disrupt the Service or servers",
        "s4ss1i5": "You must not use automated systems to access the Service without permission",
        "s4ss2Title": "Content Standards",
        "s4ss2i1": "All annotations must be accurate, complete, and comply with project guidelines",
        "s4ss2i2": "You must maintain confidentiality of sensitive data, especially medical information",
        "s4ss2i3": "You must not share, copy, or distribute content from tasks outside the platform",
        "s4ss2i4": "You must respect intellectual property rights of clients and third parties",
        "s4ss3Title": "Quality Requirements",
        "s4ss3i1": "You agree to maintain high quality standards in all annotation work",
        "s4ss3i2": "You must respond to review feedback and make corrections as requested",
        "s4ss3i3": "Repeated quality issues may result in task reassignment or account suspension",
        "s4ss3i4": "You must complete tasks within assigned deadlines",
        "s5Title": "Intellectual Property Rights",
        "s5ss1Title": "Your Content",
        "s5ss1i1": "You retain ownership of annotations and content you create, but grant EchoNova and clients a license to use such content",
        "s5ss1i2": "By submitting annotations, you grant us a worldwide, royalty-free license to use, modify, and distribute your work",
        "s5ss1i3": "You represent that you have the right to grant such licenses",
        "s5ss2Title": "Platform Content",
        "s5ss2i1": "The Service, including software, design, and content, is owned by EchoNova and protected by intellectual property laws",
        "s5ss2i2": "You may not copy, modify, or create derivative works of the Service without permission",
        "s5ss2i3": "EchoNova trademarks and logos may not be used without written consent",
        "s6Title": "Payment and Compensation",
        "s6Content": "If you are an annotator, compensation terms will be specified in separate agreements or project-specific terms. Payment schedules, rates, and methods will be communicated through the platform or direct communication. EchoNova reserves the right to adjust compensation structures with appropriate notice. All payments are subject to applicable tax reporting requirements.",
        "s7Title": "Privacy and Data Protection",
        "s7Content": "Your use of the Service is also governed by our Privacy Policy. We are committed to protecting your privacy and handling your data in accordance with applicable data protection laws. For medical data annotation, we maintain HIPAA-compliant processes. You agree to handle all data, especially sensitive medical information, with appropriate confidentiality and security measures.",
        "s8Title": "Termination",
        "s8ss1Title": "Termination by You",
        "s8ss1i1": "You may terminate your account at any time by contacting us or using account deletion features",
        "s8ss1i2": "Upon termination, your access to the Service will be immediately revoked",
        "s8ss1i3": "Some data may be retained as required by law or for legitimate business purposes",
        "s8ss2Title": "Termination by Us",
        "s8ss2i1": "We may suspend or terminate your account if you violate these Terms",
        "s8ss2i2": "We may terminate accounts that are inactive for extended periods",
        "s8ss2i3": "We reserve the right to terminate accounts for any reason with or without notice",
        "s8ss2i4": "Upon termination, your right to use the Service will immediately cease",
        "s9Title": "Disclaimers and Limitation of Liability",
        "s9ss1Title": "Service Availability",
        "s9ss1i1": "The Service is provided \"as is\" and \"as available\" without warranties of any kind",
        "s9ss1i2": "We do not guarantee that the Service will be uninterrupted, secure, or error-free",
        "s9ss1i3": "We reserve the right to modify, suspend, or discontinue the Service at any time",
        "s9ss2Title": "Limitation of Liability",
        "s9ss2i1": "To the maximum extent permitted by law, EchoNova shall not be liable for any indirect, incidental, special, or consequential damages",
        "s9ss2i2": "Our total liability shall not exceed the amount you paid us in the 12 months preceding the claim",
        "s9ss2i3": "Some jurisdictions do not allow the exclusion of certain warranties or limitations of liability",
        "s10Title": "Indemnification",
        "s10Content": "You agree to indemnify, defend, and hold harmless EchoNova, its affiliates, officers, directors, employees, and agents from any claims, damages, losses, liabilities, and expenses (including legal fees) arising from your use of the Service, violation of these Terms, or infringement of any rights of another party.",
        "s11Title": "Dispute Resolution",
        "s11Content": "Any disputes arising from these Terms or your use of the Service shall be resolved through binding arbitration in accordance with applicable arbitration rules, except where prohibited by law. You waive any right to participate in a class-action lawsuit or class-wide arbitration. Some jurisdictions may not allow this waiver, and it may not apply to you.",
        "s12Title": "Governing Law",
        "s12Content": "These Terms shall be governed by and construed in accordance with applicable laws, without regard to conflict of law principles. Any legal action or proceeding arising under these Terms will be brought exclusively in the appropriate courts, and you consent to the jurisdiction of such courts.",
        "s13Title": "Changes to Terms",
        "s13Content": "We reserve the right to modify these Terms at any time. We will notify you of material changes by posting the updated Terms on this page and updating the \"Last Updated\" date. Your continued use of the Service after such changes constitutes acceptance of the modified Terms. If you do not agree to the changes, you must stop using the Service.",
        "s14Title": "Miscellaneous",
        "s14ss1Title": "Entire Agreement",
        "s14ss1i1": "These Terms, together with our Privacy Policy, constitute the entire agreement between you and EchoNova",
        "s14ss1i2": "If any provision is found to be unenforceable, the remaining provisions will remain in full effect",
        "s14ss2Title": "Assignment",
        "s14ss2i1": "You may not assign or transfer these Terms or your account without our written consent",
        "s14ss2i2": "We may assign these Terms in connection with a merger, acquisition, or sale of assets",
        "s14ss3Title": "Waiver",
        "s14ss3i1": "Our failure to enforce any provision of these Terms does not constitute a waiver",
        "s14ss3i2": "Any waiver must be in writing and signed by an authorized representative",
        "contactTitle": "Contact & Support",
        "contactDescription": "If You Have Questions Or Concerns About This Privacy Policy Or Our Data Practices, Please Contact Us:"
      }
    },
    "shared": {
      "player": {
        "downloadFailed": "Couldn't download the voice sample. Try again.",
        "region": "Audio player",
        "play": "Play",
        "pause": "Pause",
        "stop": "Stop",
        "seek": "Position",
        "download": "Download",
        "close": "Close",
        "transcript": "Transcript",
        "showTranscript": "Show the transcript",
        "hideTranscript": "Hide the transcript",
        "noTranscript": "No speech in this file."
      },
      "appHeader": {
        "howToUse": "How to use",
        "workspace": "Workspace",
        "playground": "Playground",
        "account": "Account",
        "developers": "Developers",
        "feedback": "Feedback",
        "switchLanguage": "Switch language"
      },
      "appInvitationsButton": {
        "invitations": "Invitations",
        "ariaLabel": "View {{count}} pending invitations"
      },
      "appNotificationsBell": {
        "notifications": "Notifications",
        "markAllAsRead": "Mark all as read",
        "loading": "Loading...",
        "noNotifications": "No notifications",
        "unreadNotification": "Unread notification",
        "unreadCount": "{{count}} unread notifications",
        "defaultTitle": "Notification",
        "viewAll": "View all notifications"
      },
      "appSidebar": {
        "navHome": "Home",
        "navVoicesLibrary": "Voices",
        "navTextToSpeech": "Text to Speech",
        "navSpeechToText": "Speech to Text",
        "navVoiceAgents": "Agents",
        "navSada": "Sada Agents",
        "navAssetsAndHistory": "Assets",
        "navApiKeys": "API Key",
        "navActivity": "Activity",
        "navDocumentation": "Documentation",
        "moreTools": "More Tools",
        "more": "More",
        "less": "Less",
        "comingSoon": "Coming Soon",
        "navVoiceCloning": "Voice Cloning",
        "navEchoReader": "EchoReader",
        "navDubbing": "Dubbing",
        "navSoundEffects": "Sound Effects",
        "navSoundCleaning": "Sound Cleaning",
        "navAudiobooks": "Audiobooks",
        "navArabicVoices": "Arabic Voices",
        "navEchoClone": "EchoClone",
        "navSonicRead": "SonicRead",
        "navSyncDub": "SyncDub",
        "navWordShift": "WordShift",
        "navEchoNotes": "EchoNotes",
        "brandHome": "EchoNova home",
        "brandAlt": "EchoNova",
        "collapseMenu": "Collapse menu",
        "collapseSidebar": "Collapse sidebar",
        "expandSidebar": "Expand sidebar",
        "mainNavigation": "Main navigation",
        "playground": "Playground",
        "navSectionBuild": "Build",
        "developers": "Developers",
        "planCreditsAria": "{{plan}} plan, {{percent}}% of credits used. Open subscription.",
        "planTitle": "{{plan}} plan",
        "subscribe": "Upgrade Your Plan",
        "upgradePlan": "Upgrade Your Plan",
        "creditsLabel": "credits",
        "lowBalance": "Low",
        "usedLabel": "Used",
        "resets": "Resets",
        "changePlan": "Change plan",
        "workspaceOwner": "Workspace · Owner",
        "settings": "Settings"
      },
      "agentNav": {
        "backToWorkspace": "Back to agents workspace",
        "configure": "Configure",
        "persona": "Persona & voice",
        "knowledge": "Knowledge base",
        "tools": "Tools",
        "channels": "Channels",
        "conversations": "Conversations",
        "dashboard": "Dashboard"
      },
      "agentsProductNav": {
        "home": "Home",
        "agents": "Agents",
        "configure": "Configure",
        "knowledge": "Knowledge base",
        "tools": "Tools",
        "channels": "Channels",
        "monitor": "Monitor",
        "conversations": "Conversations",
        "tests": "Tests",
        "soon": "Soon",
        "comingSoon": "This area is coming soon.",
        "backToWorkspace": "Back to workspace",
        "settings": "Secrets and authentication",
        "integrations": "Integrations",
        "deploy": "Deploy"
      },
      "appSubscriptionCard": {
        "creditsLeft": "credits left",
        "resetsIn": "resets in {{days}}d",
        "upgradePlan": "Upgrade plan",
        "numbersTitle": "{{left}} of {{total}} credits remaining",
        "usedZero": "0% used",
        "usedLessThanOne": "<1% used",
        "usedMoreThanNinetyNine": ">99% used",
        "usedPercent": "{{percent}}% used",
        "meterZero": "0% of credits used",
        "meterLessThanOne": "Less than 1% of credits used",
        "meterMoreThanNinetyNine": "More than 99% of credits used",
        "meterPercent": "{{percent}}% of credits used",
        "upgradeAria": "Upgrade {{plan}}, {{left}} of {{total}} credits remaining{{resetPart}}",
        "upgradeAriaReset": ", {{days}} days to reset"
      },
      "audioUploadModal": {
        "instruction": "Upload An Audio File, Then Click On Button To Transcribe",
        "limits": "Maximum file size: 10MB | Maximum duration: 20 seconds",
        "uploadButton": "Upload Audio Files",
        "uploading": "Uploading... {{progress}}%",
        "returnToSamples": "Return to the demo samples",
        "waveformAlt": "waveform",
        "errorInvalidType": "Please select a valid audio file",
        "errorFileSize": "File size must be less than 10MB",
        "errorDuration": "Audio duration must be less than 20 seconds",
        "errorValidate": "Failed to validate audio file"
      },
      "customStepper": {
        "step": "Step {{value}}"
      },
      "errorDialog": {
        "body": "Something went wrong. Please try again.",
        "ok": "OK"
      },
      "successDialog": {
        "body": "Done successfully.",
        "close": "Close"
      },
      "unauthorizedDialog": {
        "body": "Please sign in again to continue.",
        "close": "Close"
      },
      "dynamicForm": {
        "dropdownAlt": "Dropdown",
        "uploadAlt": "Upload",
        "uploadDocument": "Upload document",
        "uploadDocumentWithFile": "Upload document, current file: {{file}}",
        "uploadPlaceholder": "Click To Upload ID Document (For Sensitive Projects)"
      },
      "howToUseDialog": {
        "title": "How to Use",
        "titleTts": "How to Use Text to Speech Generator",
        "titleStt": "How to Use Speech to Text Generator",
        "ttsStep1Title": "1- Enter Your Text",
        "ttsStep1Desc": "Type or paste the text you want to convert into speech. You can enter up to 5,000 characters at once.",
        "clearText": "Clear text",
        "ttsStep2Title": "2- Choose Voice & Settings",
        "ttsStep2Desc": "Select your preferred voice, language, speed, and pitch from the options panel.",
        "voice1Name": "Rafal Liao",
        "voice1Desc": "A tiny voice of young girl",
        "voice2Name": "Jasmen",
        "voice2Desc": "A tiny voice of young girl",
        "multilingual": "Multilingual v2",
        "mode": "Mode",
        "stability": "Stability",
        "moreVariable": "More variable",
        "similarity": "Similarity",
        "ttsStep3Title": "3- Generate & Listen",
        "ttsStep3Desc": "Click the \"Generate Speech\" button to create your audio. Listen to a preview instantly in your browser.",
        "generateSpeech": "Generate Speech",
        "play": "Play",
        "ttsStep4Title": "4- Download or Share",
        "ttsStep4Desc": "Download your audio as MP3 or WAV format, or share it directly with others.",
        "playAudio": "Play audio",
        "share": "Share",
        "download": "Download",
        "sttStep1Title": "1- Upload or Record Audio",
        "sttStep1Desc": "Choose between uploading an existing audio file or recording directly in your browser.",
        "uploadIdDocument": "Click To Upload ID Document (For Sensitive Projects)",
        "idDocumentTypes": "Passport, Driver's License, Or National ID",
        "uploadAudioFile": "Upload Audio File",
        "sttStep2Title": "2- Transcribe & Review",
        "sttStep2Desc": "Click \"Start Transcription\" to process your audio. AI will convert speech to text with high accuracy.",
        "transcribing": "Transcribing...",
        "transcribingDesc": "We Working Now On Transcribing The Attached Audio",
        "sttStep3Title": "3- Edit & Export",
        "sttStep3Desc": "Review and edit the transcription if needed, then export in your preferred format.",
        "transcriptName1": "Mahmoud",
        "transcriptText1": "What happened to the new user flow?",
        "transcriptName2": "Sara",
        "transcriptText2": "It's still being finalized. Should be ready next week.",
        "downloadTranscribe": "Download Transcribe",
        "noInstructions": "Instructions not available for this page."
      },
      "loadingState": {
        "loading": "Loading"
      },
      "mediaPlayerBar": {
        "collapseText": "Collapse text",
        "showFullText": "Show full text",
        "back5s": "Back 5s",
        "back5seconds": "Back 5 seconds",
        "forward5s": "Forward 5s",
        "forward5seconds": "Forward 5 seconds",
        "play": "Play",
        "pause": "Pause",
        "removeFromSaved": "Remove from saved",
        "save": "Save",
        "downloadAudio": "Download audio",
        "closePlayer": "Close player",
        "volume": "Volume"
      },
      "pageFavouriteButton": {
        "removeAria": "Remove page from favourites",
        "addAria": "Add page to favourites",
        "label": "Favourite {{page}}"
      },
      "pagination": {
        "previous": "Previous",
        "next": "Next",
        "pagePrefix": "Page",
        "pageOf": "of",
        "prev": "Prev",
        "nextLabel": "Next"
      },
      "termsPrivacyContent": {
        "lastUpdated": "Last Updated: {{date}}",
        "contactSupportAria": "Contact and Support"
      },
      "voiceCard": {
        "voiceAria": "{{name}} voice",
        "avatarAlt": "{{name}} avatar",
        "flagAlt": "{{dialect}} flag",
        "removeFavorite": "Remove from favorites",
        "addFavorite": "Add to favorites",
        "pausePreview": "Pause voice preview",
        "playPreview": "Play voice preview",
        "playAlt": "Play"
      },
      "voicePickerDialog": {
        "eyebrow": "EchoNova voice library",
        "defaultTitle": "Select a voice",
        "allVoices": "All Voices",
        "favourites": "Favourites",
        "close": "Close",
        "searchPlaceholder": "Search voice by name, dialect, or language",
        "selectLanguage": "Select Language",
        "selectDialect": "Select Dialect",
        "selectGender": "Select Gender",
        "language": "Language",
        "dialect": "Dialect",
        "gender": "Gender",
        "noResults": "No results",
        "clearFilter": "Clear filter",
        "allLanguages": "All Languages",
        "allDialects": "All Dialects",
        "allGenders": "All Genders",
        "noFavouritesMatch": "No favourites match your filters.",
        "noVoicesMatch": "No voices match your filters.",
        "pausePreviewOf": "Pause preview of {{name}}",
        "playPreviewOf": "Play preview of {{name}}",
        "avatarAlt": "{{name}} avatar",
        "selected": "Selected",
        "select": "Select",
        "premade": "Premade",
        "cloned": "Cloned",
        "noSavedVoices": "No saved voices yet.",
        "savedHint": "Save voices from the Voice Library to find them here.",
        "recentlyUsed": "Recently used",
        "previewUnavailable": "Preview unavailable.",
        "previewProgress": "Voice preview progress",
        "comingSoon": "Coming Soon",
        "comingSoonDetail": "{{dialect}} Voices Coming soon, Stay Close."
      }
    },
    "userMenu": {
      "openMenu": "Open user menu",
      "openSettingsMenu": "Open settings menu",
      "accountSettings": "Account settings",
      "personalSettings": "Personal settings",
      "subscriptionBilling": "Subscription & billing",
      "workspacesMembers": "Workspaces & members",
      "invitations": "Invitations",
      "currentWorkspace": "Current workspace",
      "workspaceFallback": "Workspace",
      "appearance": "Appearance",
      "lightThemeAria": "Light theme",
      "darkThemeAria": "Dark theme",
      "systemThemeAria": "System theme",
      "light": "Light",
      "dark": "Dark",
      "system": "System",
      "language": "Language",
      "englishAria": "English",
      "arabicAria": "Arabic",
      "logOut": "Log out",
      "comingSoon": "Coming soon",
      "comingSoonBody": "We're working on multi-workspace support. Stay tuned.",
      "gotIt": "Got it",
      "creditsRemaining": "Credits remaining"
    },
    "docs": {
      "menu": "Docs menu",
      "feedback": "Feedback",
      "otherLanguage": "العربية",
      "documentation": "Documentation",
      "searchPlaceholder": "Type to search...",
      "searchAria": "Search documentation",
      "dashboard": "Dashboard",
      "signIn": "Sign In",
      "navAria": "Documentation navigation",
      "baseUrl": "Base URL",
      "copy": "Copy",
      "copied": "Copied",
      "copyAsMarkdown": "Copy as Markdown",
      "copyMenu": {
        "copyPage": "Copy page",
        "more": "More ways to use this page",
        "copyPageHint": "As Markdown, ready for an AI chat",
        "viewMarkdown": "View as Markdown",
        "viewMarkdownHint": "This page as plain text",
        "llmsHint": "Every docs page, listed for AI tools",
        "openClaude": "Open in Claude",
        "openChatgpt": "Open in ChatGPT",
        "askHint": "Ask questions about this page",
        "copied": "Page copied as Markdown"
      },
      "endpoint": {
        "headers": "Headers",
        "pathParams": "Path parameters",
        "queryParams": "Query parameters",
        "body": "Request body",
        "response": "Response",
        "responseNote": "Every response uses this envelope.",
        "downloadNote": "The body is the file itself, not the envelope, with Content-Disposition: attachment and its file name. Errors still use the envelope.",
        "errors": "Errors",
        "errorsNote": "Same envelope, with success false and data null.",
        "allErrors": "All errors",
        "required": "Required",
        "optional": "Optional",
        "showProperty": "Show 1 property",
        "showProperties": "Show {{count}} properties",
        "hideProperty": "Hide 1 property",
        "hideProperties": "Hide {{count}} properties",
        "when": "When.",
        "fix": "Fix.",
        "authDescription": "Bearer, a space, then your API key, which starts with ek_. Create keys in the portal under Developers, API Keys.",
        "dataDescription": "The result.",
        "successDescription": "true for a successful call.",
        "statusCodeDescription": "Repeats the HTTP status.",
        "errorMessageDescription": "null on success.",
        "copyUrl": "Copy URL",
        "copyCode": "Copy code",
        "copyResponse": "Copy response",
        "language": "Code language",
        "tryIt": "Try it",
        "exampleResponse": "Example response",
        "ok": "Successful response",
        "limits": {
          "lengthRange": "{{min}} to {{max}} characters",
          "minLength": "At least {{min}} characters",
          "maxLength": "Up to {{max}} characters",
          "range": "{{min}} to {{max}}",
          "min": "{{min}} or more",
          "max": "Up to {{max}}",
          "listSeparator": ", ",
          "oneOf": "{{list}} or {{last}}",
          "value": "{{value}}",
          "default": "default {{value}}"
        }
      },
      "tryIt": {
        "send": "Send request",
        "close": "Close",
        "tabs": "Request and response",
        "request": "Request",
        "response": "Response",
        "keyHint": "Your key stays in this tab and is never saved. It is sent only to this address:",
        "badKey": "This is not an EchoNova API key. Keys start with ek_ and are 67 characters long.",
        "credits": "Every request sent here is a real call with your key. A request that creates a job spends your workspace's credits, like any other call.",
        "reset": "Reset to the example",
        "empty": "Fill the fields, then send the request.",
        "sending": "Sending…",
        "missing": "Fill these first",
        "networkError": "The browser could not reach the API. Run the cURL above from your terminal instead.",
        "timeout": "The API did not answer within 10 minutes, so the request was stopped.",
        "ms": "{{ms}} ms",
        "audio": "Generated audio",
        "emptyBody": "(empty body)"
      },
      "lastUpdated": "Last updated",
      "fallbackNote": "This page is in English for now.",
      "onThisPage": "On this page",
      "previous": "Previous",
      "next": "Next",
      "pageNavAria": "Page navigation",
      "pageNotFound": "Page not found",
      "pageNotFoundBody": "This page does not exist or has moved.",
      "backToDocs": "Back to docs",
      "loading": "Loading",
      "helpful": "Was this page helpful?",
      "yes": "Yes",
      "no": "No",
      "thanks": "Thanks for your feedback.",
      "landingTitle": "EchoNova Documentation",
      "landingSubtitle": "Guides and reference for the portal and the Developer API.",
      "section": {
        "toggle": "{{section}} pages"
      },
      "sections": {
        "get-started": "Get started",
        "playground": "Playground",
        "agents": "Agents",
        "developers": "Developers",
        "account": "Account and billing",
        "help": "Help",
        "changelog": "Changelog"
      },
      "sectionDescriptions": {
        "get-started": "What EchoNova is and your first speech and first agent.",
        "playground": "Voices, Text to Speech, Speech to Text, Sound Cleaning and your assets.",
        "agents": "Build, connect and operate voice and text agents.",
        "developers": "API keys, authentication, jobs, webhooks and code samples.",
        "account": "Sign-in, workspaces, roles, plans, credits and invoices.",
        "help": "FAQ, troubleshooting and the glossary.",
        "changelog": "Every change to the v1 API, by date."
      },
      "groups": {
        "playground": {
          "voices": "Voices",
          "tts": "Text to Speech",
          "stt": "Speech to Text",
          "cleaning": "Sound Cleaning",
          "assets": "Assets"
        },
        "agents": {
          "basics": "Basics",
          "knowledge": "Knowledge",
          "tools": "Tools",
          "channels": "Channels",
          "integrations": "Integrations",
          "operate": "Operate",
          "security": "Security and privacy"
        },
        "developers": {
          "start": "Start",
          "tts": "Text to Speech",
          "stt": "Speech to Text",
          "clean": "Sound Cleaning",
          "webhooks": "Webhooks",
          "ops": "Operations"
        },
        "account": {
          "account": "Account",
          "workspace": "Workspace",
          "billing": "Billing"
        },
        "help": {
          "faq": "FAQ",
          "support": "Support"
        }
      }
    },
    "headerTitles": {
      "echoReader": "EchoReader",
      "home": "Home",
      "voicesLibrary": "Voices Library",
      "voices": "Voices",
      "textToSpeech": "Text to Speech",
      "speechToText": "Speech to Text",
      "soundCleaning": "Sound Cleaning",
      "sada": "Sada",
      "sadaAgent": "Agent",
      "subscription": "Subscription",
      "checkout": "Checkout",
      "assetsAndHistory": "Assets",
      "settings": "Settings",
      "workspaces": "Workspaces & Members",
      "annotations": "Annotations",
      "audioAnnotation": "Audio Annotation",
      "imageAnnotation": "Image Annotation",
      "developers": "API Keys",
      "activity": "Activity",
      "paymentHistory": "Payment History",
      "receipt": "Receipt"
    },
    "phase2": {
      "tts": {
        "kicker": "Text to Speech",
        "lead": "Write, refine, and generate speech with your selected voice.",
        "heroTitle": "Your text, in a voice from here",
        "guidance": "Guidance",
        "quality": "Quality",
        "speed": "Speed",
        "generating": "Generating…",
        "playFailed": "The audio could not be played. Try again.",
        "useVoice": "Use {{name}}",
        "about": "about",
        "credits": "credits",
        "emptyTitle": "Nothing yet.",
        "empty": "Press Generate. Each one lands here with its voice, its length and a download.",
        "noMatch": "Nothing you made matches this search.",
        "generate": "Generate",
        "lastGeneration": "Last generation:",
        "studio": "Studio",
        "studioLead": "Up to 5,000 characters, one WAV back. Pick a dialect, pick a voice, press Generate. Everything you make lands in History below and in Assets.",
        "upToCharacters": "Up to 5,000 characters",
        "clickVoice": "Click a voice to use it",
        "tagHint": "click to add at the cursor, − removes",
        "tags": {
          "laugh": "laugh",
          "cough": "cough",
          "clearThroat": "clear throat",
          "sigh": "sigh",
          "chuckle": "chuckle"
        },
        "dropFile": "Drop a file here or",
        "browse": "browse",
        "orPasteLink": "or paste a link and press Enter",
        "placeholder": "Placeholder",
        "tryDialect": "Try a sample in this dialect",
        "allVoices": "All voices",
        "characters": "characters",
        "limitReached": "Limit reached",
        "overLimit": "{{count}} over the limit. Shorten the text to generate.",
        "historyPlaceholder": "Placeholder · examples",
        "searchHistory": "Search what you made",
        "allInAssets": "All in Assets",
        "options": "Options",
        "resetDefaults": "Reset to defaults",
        "dialect": "Dialect",
        "guidanceHelp": "How closely the voice follows the text. Leave at 2 unless you are tuning.",
        "speedHelp": "0.5 slow · 1 normal · 2 fast",
        "qualityHelp": "Diffusion steps. More steps, slower, cleaner.",
        "normalize": "Read numbers naturally",
        "normalizeHelp": "Numbers, dates, times and money are spoken the way the voice's dialect says them."
      },
      "stt": {
        "kicker": "Speech to Text",
        "lead": "Upload or record audio to turn it into an editable transcript.",
        "heroTitle": "Written the way it was said",
        "studio": "Studio",
        "noFile": "No file yet",
        "dropAudio": "Drop an audio file, or click to browse",
        "replaceFile": "Drop another file or click to replace it",
        "record": "Record",
        "stop": "Stop",
        "findDialect": "Find a dialect",
        "detectNote": "Detected from the audio",
        "groupGulf": "Gulf",
        "groupLevant": "Egypt and Levant",
        "groupStandard": "Standard",
        "groupOther": "Other",
        "checking": "Checking the file…",
        "recording": "Recording…",
        "uploading": "Uploading",
        "preparing": "Preparing audio…",
        "uploadProgress": "Upload progress",
        "transcribing": "Transcribing",
        "done": "Done",
        "ready": "Ready",
        "working": "Working",
        "retry": "Try again",
        "used": "Used",
        "downloadHint": "Saves what this tab shows, as a {{format}} file",
        "cleanHint": "Noisy file? Clean it, then transcribe again",
        "cleanFailed": "We could not open this audio for cleaning. Drop the original file into Sound Cleaning instead.",
        "noSpeech": "No speech was found in this file.",
        "railEmpty": "Nothing yet. Each transcript lands here.",
        "untitled": "Untitled transcript",
        "studioLead": "Drop a file or record. One transcript back, in the dialect it was spoken, line by line. Emirati stays Emirati, nothing is straightened into Fusha.",
        "anyDialect": "Any dialect, detected from the audio",
        "dialect": "Dialect",
        "detect": "Detect",
        "viewLabel": "Transcript view",
        "viewText": "Text",
        "viewSrt": "Subtitles (SRT)",
        "viewJson": "JSON",
        "copy": "Copy",
        "copied": "Copied",
        "copyFailed": "Could not copy",
        "copyHint": "Copy what this tab shows",
        "loadingView": "Preparing the file…",
        "wordTiming": "Time on every word",
        "numbersAsDigits": "Numbers as digits",
        "numbersAsDigitsHint": "On: «واحد اتنين تلاتة» becomes 123. Off: numbers stay as spoken words.",
        "numbersAsDigitsEnglish": "On: “twenty eighteen” becomes 2018. Off: numbers stay as spoken words.",
        "identifySpeakers": "Identify speakers",
        "identifySpeakersHint": "On: each line shows who spoke and when. Off: one block of text.",
        "speakerLabel": "Speaker {{n}}",
        "talkTime": "Talk time per speaker",
        "playFrom": "Play from {{time}}",
        "exportFailed": "We could not prepare this file. Try again in a moment.",
        "placeholder": "Placeholder",
        "waiting": "Waiting for a file",
        "length": "Length",
        "aboutCredits": "about 0 credits",
        "transcribe": "Transcribe",
        "transcripts": "Transcripts",
        "allInAssets": "All in Assets",
        "placeholderExamples": "Placeholder · examples",
        "searchTranscripts": "Search transcripts",
        "transcript": "Transcript",
        "download": "Download",
        "cleanNoise": "Clean Noise",
        "previewLine": "The transcript will appear here, line by line.",
        "previewLineTwo": "Each sentence keeps the wording and dialect that were spoken.",
        "previewLineThree": "Use the timestamps to return to any moment in the audio."
      },
      "cleaning": {
        "kicker": "Sound Cleaning",
        "studio": "Studio",
        "lead": "Drop a recording, pick the room it came from, press Clean. The voice comes back as it was spoken: breath, pauses, the dialect's own rhythm. The hiss, the wind and the air conditioning do not.",
        "heroTitle": "Hear the words, not the room",
        "noFile": "No file yet",
        "waiting": "Waiting for a file",
        "ready": "Ready to clean",
        "cleaning": "Cleaning",
        "done": "Cleaned",
        "clean": "Clean",
        "cleaned": "Cleaned",
        "downloadHint": "The cleaned file, as WAV",
        "downloadFailed": "Couldn't download the cleaned audio. Try again.",
        "transcribe": "Transcribe cleaned audio",
        "transcribeFailed": "Couldn't get the cleaned audio. Try again.",
        "transcribeHint": "Open Speech to Text",
        "cloneVoice": "Clone the voice",
        "cloneVoiceFailed": "Could not prepare the cleaned audio for cloning.",
        "playOriginal": "Play the original",
        "playCleaned": "Play the cleaned file",
        "abNote": "The bars are the loudness over time. Press play on either row and hear the difference."
      },
      "voices": {
        "kicker": "Voice Library",
        "lead": "Explore the voices available to your workspace and choose one for your next generation.",
        "heroExploreLead": "Explore EchoNova",
        "heroAccent": "voices",
        "dialectCount": "{{count}} voices",
        "goToDialectSlide": "Go to dialect slide {{page}}"
      }
    },
    "notifications": {
      "kicker": "Account",
      "title": "Notifications",
      "subtitle": "Stay up to date with your workspace and account activity.",
      "unreadCount": "{{count}} unread",
      "filterLabel": "Notification status",
      "all": "All",
      "unread": "Unread",
      "read": "Read",
      "markAll": "Mark all as read",
      "markingAll": "Marking all as read…",
      "markRead": "Mark as read",
      "unreadState": "Unread",
      "loading": "Loading notifications…",
      "loadError": "We couldn't load your notifications.",
      "actionError": "We couldn't update this notification. Please try again.",
      "retry": "Try again",
      "emptyTitle": "No notifications yet",
      "emptyDescription": "New workspace and account activity will appear here.",
      "paginationLabel": "Notifications pagination",
      "previous": "Previous",
      "next": "Next",
      "viewAll": "View all"
    },
    "phase5": {
      "developers": {
        "kicker": "Developers",
        "title": "Build with EchoNova",
        "lead": "Manage your API access, endpoints, and request activity.",
        "codeExamples": "Code examples",
        "agentTab": "Agent"
      },
      "docs": {
        "mobileNav": "Browse documentation"
      }
    },
    "billing": {
      "kicker": "Billing",
      "title": "Manage billing",
      "subtitle": "Your secure payment method and billing provider. The default method pays renewals, plan changes, top-ups and auto top up.",
      "changePlan": "Change plan",
      "loading": "Loading billing details…",
      "loadError": "We couldn't load billing details.",
      "retry": "Try again",
      "currentPlan": "Current plan",
      "provider": "Provider",
      "billingCycle": "Billing cycle",
      "monthly": "Monthly",
      "yearly": "Yearly",
      "price": "Plan price",
      "periodEnd": "Current period ends",
      "providerActions": "Provider actions",
      "paymentMethods": "Payment methods",
      "addPaymentMethod": "Add payment method",
      "securityNote": "Payment details are managed securely by your payment provider. EchoNova never sees or stores the full card number.",
      "nextInvoice": "Next invoice on",
      "invoices": "Invoices",
      "invoicesDescription": "Every renewal and upgrade produces an invoice with the payment provider.",
      "downloadInvoices": "Download invoices",
      "manageTitle": "Payment methods and invoices",
      "manageDescription": "Manage payment methods and billing details securely with {{provider}}.",
      "noProviderDescription": "A provider-managed billing account is not available for this subscription.",
      "managePaymentMethods": "Manage payment methods",
      "openingPortal": "Opening provider portal…",
      "downloadInvoice": "Download latest invoice",
      "openingInvoice": "Opening invoice…",
      "portalError": "We couldn't open the provider billing portal.",
      "invoiceError": "We couldn't open the latest invoice.",
      "status": "Status",
      "noSubscriptionTitle": "No billing subscription",
      "noSubscriptionDescription": "Choose a plan to start a provider-managed subscription.",
      "statusTrial": "Trial",
      "statusActive": "Active",
      "statusPastDue": "Past due",
      "statusCanceled": "Canceled",
      "statusExpired": "Expired",
      "managedBy": "Managed by {{provider}}",
      "methodUse": "Pays renewals, plan changes and top-ups",
      "default": "Default",
      "backup": "Backup",
      "setDefault": "Set as default",
      "remove": "Remove",
      "confirmRemove": "Remove card",
      "keepCard": "Keep",
      "removeDefaultBlocked": "The default card pays your renewals. Make another card the default before removing it.",
      "noCards": "Your card appears here after your first payment.",
      "expires": "Expires {{date}}",
      "addCardLead": "Paymob checks the card with a small payment and cancels it right away.",
      "makeDefault": "Make this the default payment method",
      "continue": "Continue",
      "saveCard": "Save card",
      "cancel": "Cancel",
      "cardError": "We couldn't update your cards. Try again.",
      "addCardError": "The card form could not start. Try again.",
      "receipts": "Receipts",
      "receiptsDescription": "Every payment for your plan, with its receipt.",
      "noReceipts": "Receipts appear after your first payment.",
      "view": "View",
      "showMore": "Show more",
      "receiptsError": "We couldn't load your receipts.",
      "receipt": {
        "title": "Receipt",
        "number": "Receipt number",
        "date": "Date",
        "paid": "Paid",
        "for": "Payment for",
        "seller": "Seller",
        "billedTo": "Billed to",
        "period": "Period",
        "from": "From {{date}}",
        "to": "To {{date}}",
        "amount": "Amount",
        "download": "Download PDF",
        "back": "Back to Manage billing",
        "notFound": "This receipt was not found.",
        "loadError": "We couldn't load this receipt.",
        "kind": {
          "subscription_start": "Subscription",
          "renewal": "Renewal",
          "upgrade": "Upgrade",
          "cycle_change": "Billing cycle change"
        }
      }
    },
    "voiceCloning": {
      "title": "Voice Cloning",
      "studio": "Studio",
      "kicker": "Voice Cloning",
      "hero": "Your voice, in a few seconds",
      "lead": "Clone your voice with only a few seconds of audio.",
      "back": "Back",
      "soon": "Soon",
      "defaultName": "My voice",
      "tabs": {
        "instant": "Instant",
        "professional": "Professional"
      },
      "headRight": {
        "instant": "A few seconds",
        "clip": "1 clip",
        "instantNow": "Ready now"
      },
      "add": {
        "drop": "Upload or drag a file",
        "or": "or",
        "record": "Record",
        "stop": "Stop",
        "dialect": "Dialect",
        "readThis": "Read this out loud",
        "play": "Play",
        "remove": "Remove",
        "recording": "Recording {{n}}",
        "playClip": "Play {{name}}",
        "removeClip": "Remove {{name}}"
      },
      "orb": {
        "yourVoice": "Your voice",
        "listening": "Listening",
        "ready": "Ready to clone",
        "notConfirmed": "Not confirmed yet",
        "checking": "Checking",
        "making": "Making your voice"
      },
      "status": {
        "empty": "A few seconds of you",
        "recording": "Recording",
        "addMore": "Add {{seconds}} more seconds",
        "tooLong": "Too long, keep it under 30 seconds",
        "ready": "Ready"
      },
      "length": {
        "label": "Length",
        "keepReading": "Keep reading: {{seconds}} more seconds",
        "canStop": "Good. You can stop now, or keep going up to 30 seconds",
        "tooShort": "Too short: add {{seconds}} more seconds",
        "good": "Good length"
      },
      "cloneVoice": "Clone voice",
      "dialectsError": "Could not load the dialects.",
      "retry": "Try again",
      "upload": {
        "unreadable": "This file could not be read. Try a WAV, MP3 or M4A file."
      },
      "mic": {
        "problem": "We could not use your microphone. Check the browser permission and try again."
      },
      "confirm": {
        "title": "Confirm it is you",
        "sayThis": "Say this out loud",
        "eachDigit": "Say each digit.",
        "why": "This keeps your voice yours: only the person who says the code can clone it.",
        "newCode": "New code",
        "status": {
          "say": "Say the phrase",
          "recording": "Recording",
          "checking": "Checking",
          "failed": "Not clear, try again",
          "making": "Making your voice"
        }
      },
      "done": {
        "instantVoice": "Instant voice",
        "name": "Name",
        "today": "Today",
        "typeLine": "Type something to hear",
        "play": "Play",
        "stop": "Stop",
        "useInTts": "Use in Text to Speech",
        "cloneAnother": "Clone another",
        "ready": "Your voice is ready.",
        "rate": "24 kHz"
      },
      "rail": {
        "title": "Your voices",
        "empty": "No voices yet. Your first one takes a few seconds.",
        "play": "Play",
        "instant": "Instant"
      },
      "sheet": {
        "close": "Close",
        "type": "Type",
        "instant": "Instant",
        "created": "Created",
        "output": "Output",
        "outputValue": "24 kHz",
        "voiceId": "Voice id",
        "delete": "Delete",
        "professional": "Professional",
        "status": "Status",
        "trainingAudio": "Training audio",
        "jobId": "Job id"
      },
      "dialog": {
        "kicker": "Voice Cloning",
        "cancel": "Cancel",
        "close": "Close",
        "removeTitle": "Remove recording",
        "removeBody": "“{{name}}” will be removed from this voice. This cannot be undone.",
        "remove": "Remove",
        "deleteTitle": "Delete voice",
        "deleteBody": "“{{name}}” leaves your workspace. Anything already made with it stays where it is. This cannot be undone. The voice model is deleted within 30 days. We keep its consent recording for 12 months.",
        "delete": "Delete",
        "keep": "Keep it",
        "discardTitle": "Discard this upload",
        "discardBody": "The uploaded audio is deleted and you start again. This cannot be undone.",
        "discard": "Discard",
        "cancelUploadTitle": "Cancel the upload",
        "cancelUploadBody": "The files stop sending and the upload is deleted. You can start again afterwards.",
        "cancelUpload": "Cancel upload",
        "dismissBody": "“{{name}}” and its training audio are deleted. This cannot be undone."
      },
      "toast": {
        "deleted": "Deleted.",
        "renamed": "Renamed."
      },
      "errors": {
        "duplicateName": "A voice with this name already exists. Choose another name.",
        "generic": "Something went wrong. Try again."
      },
      "price": {
        "estimate": "This voice costs about {{credits}} credits.",
        "notSet": "Price not set yet. Voice cloning opens once its price is published."
      },
      "pro": {
        "label": "Professional",
        "tryAgain": "Try again",
        "estimate": "This voice costs about {{credits}} credits with 1 hour of training. The final price is set when training ends.",
        "orb": {
          "training": "Training"
        },
        "training": {
          "bar": "Professional voice",
          "label": "Training",
          "audio": "{{time}} of training audio",
          "left": "About {{n}} min left. You can leave this page; it will be in Your voices when it is ready."
        },
        "chips": {
          "uploading": "Uploading",
          "failed": "Failed"
        },
        "errors": {
          "insufficient_speech": "We could not find enough speech. Upload a longer recording with a single speaker.",
          "speaker_mismatch": "The confirmation voice does not match the recordings. Use your own voice.",
          "liveness_failed": "We could not verify that this is a real voice. Record the code again.",
          "invalid_input": "The audio must be between 10 minutes and 3 hours.",
          "payload_too_large": "The files are larger than 2 GB.",
          "unreadable_audio": "We could not read one of the audio files.",
          "not_ready": "Professional cloning is not available right now.",
          "unavailable": "Professional cloning is busy right now. Try again later.",
          "not_published": "Training finished but the voice could not be published. Try again.",
          "preview_failed": "The voice was trained but could not be tested. Try again.",
          "timeout": "Training took too long and was stopped.",
          "invalid_dialect": "That dialect is not supported.",
          "interrupted": "Training was interrupted. Try again.",
          "train_failed": "Training did not finish.",
          "training_failed": "Training did not finish.",
          "voice_exists": "A voice with this name already exists.",
          "submit_failed": "Training could not start. Try again later.",
          "stt_unavailable": "Professional cloning is not available right now.",
          "training_unavailable": "Professional cloning is not available right now.",
          "insufficient_credits": "Not enough credits to train this voice. Top up and try again.",
          "pipeline_unconfigured": "Training did not finish.",
          "no_input": "Training did not finish.",
          "other": "Training did not finish."
        },
        "defaultName": "My professional voice",
        "head": {
          "empty": "10 min to 3 h, ready in about 30 min",
          "clips": "{{n}} clips"
        },
        "add": {
          "drop": "Upload or drag files"
        },
        "length": {
          "label": "Total length",
          "min": "10 min",
          "max": "3 h",
          "help": "Professional needs 10 minutes to 3 hours in total."
        },
        "status": {
          "empty": "10 min to 3 h of you",
          "addMore": "Add {{time}} more",
          "tooLong": "Over 3 hours",
          "ready": "Ready",
          "sending": "Sending your files",
          "starting": "Starting",
          "sendFailed": "Some files did not send. Retry them or go Back.",
          "otherActive": "A professional voice is already being made. Wait for it to finish."
        },
        "clip": {
          "sent": "Sent",
          "failed": "Not sent",
          "unreadable": "Cannot read this file",
          "nameTooLong": "File name too long",
          "retry": "Retry"
        },
        "trainVoice": "Train voice",
        "toast": {
          "skipped": "Some files were skipped. Use WAV, FLAC, MP3, M4A, AAC, OGG, Opus or WebM.",
          "ready": "“{{name}}” is ready.",
          "tooMany": "Only {{max}} files are allowed. The rest were left out."
        },
        "rail": {
          "training": "Training, {{n}} min left"
        },
        "sheet": {
          "trainingLeft": "Training, about {{n}} min"
        },
        "renameLate": "This voice is almost ready. Rename it in Your voices.",
        "issue": {
          "unreadable": "One file cannot be read. Remove it",
          "tooBig": "The files are larger than 2 GB",
          "tooManyFiles": "Only 20 files are allowed. Remove some",
          "fileName": "A file name is longer than 200 characters. Rename or remove it"
        }
      },
      "kickerStudio": "Studio"
    }
  },
  "newLandingPage": {
    "skipToContent": "Skip to content",
    "header": {
      "brandHomeAria": "EchoNova home",
      "primaryNavigationAria": "Primary navigation",
      "mobileNavigationAria": "Mobile navigation",
      "changeLanguageAria": "Switch language",
      "menuAria": "Toggle navigation menu",
      "login": "Log In",
      "nav": {
        "products": "Products",
        "walkthrough": "Walkthrough",
        "whyEchoNova": "Why EchoNova",
        "developers": "Developers",
        "pricing": "Pricing"
      },
      "products": {
        "agents": "Sada AI Agents",
        "tts": "Text to Speech",
        "stt": "Speech to Text",
        "voices": "Voice Library",
        "cleaning": "Sound Cleaning",
        "cloning": "Voice Cloning",
        "echoReader": "EchoReader"
      }
    },
    "hero": {
      "titleLead": "Understood",
      "titleTail": "in your dialect",
      "description": "Sada by EchoNova answers your customers in their own dialect, understands their needs and responds to their requests from the first contact, by call or message.",
      "authSubtitle": "Your voice deserves to be heard, wherever Arabic is spoken.",
      "signUp": "Sign Up",
      "requestDemo": "Request A Demo",
      "tryLive": "Try It Live"
    },
    "stats": {
      "heading": "Measured, not claimed",
      "lead": "Public benchmark, public corpus, public paper. Every number below names its source.",
      "wer": {
        "unit": "% WER",
        "label": "Arabic dialect speech, our model."
      },
      "clips": {
        "label": "Clips in the public corpus."
      },
      "dialects": {
        "unit": "dialects",
        "label": "Trained from the dialect up."
      },
      "region": {
        "label": "Audio never leaves our cloud."
      }
    },
    "dialects": {
      "fusha": "Fusha",
      "egyptian": "Egyptian",
      "saudi": "Saudi",
      "emirati": "Emirati",
      "kuwaiti": "Kuwaiti",
      "english": "English"
    },
    "playground": {
      "heading": {
        "hear": "Hear it",
        "say": "Say it",
        "work": "Put it to work"
      },
      "lead": "Choose a service and experience how EchoNova listens, speaks, and responds in real time.",
      "tabsAria": "Playground services",
      "live": "Live Play Ground",
      "tabs": {
        "tts": "Text To Speech",
        "stt": "Speech To Text",
        "agent": "Sada Agent"
      },
      "tts": {
        "titleLead": "Type.",
        "titleTail": "Hear It",
        "placeholder": "Start typing here or paste any text you want to turn into life like speech...",
        "getStarted": "Get started with:",
        "prompts": {
          "story": "Narrate a story",
          "joke": "Tell a silly joke",
          "ad": "Record an advertisement",
          "languages": "Speak in different languages",
          "movie": "Direct a dramatic movie scene"
        },
        "play": "Play It",
        "generating": "Generating",
        "playing": "Playing",
        "error": "Something went wrong. Try again.",
        "chooseVoice": "Choose a voice",
        "voicesLoading": "Loading voices",
        "voicesError": "Voices unavailable",
        "previewAria": "Play a sample of {{name}}",
        "gender": {
          "male": "Male",
          "female": "Female"
        },
        "explore": "Explore All Voices"
      },
      "stt": {
        "title": "Start speaking. Sada detects your dialect and knows when you're done",
        "speakAria": "Record four seconds of speech",
        "upload": "or upload / drop an audio file (up to one minute)",
        "recording": "Listening. Tap the mic when you're done",
        "transcribing": "Transcribing",
        "completed": "Here is what you said",
        "tryAgain": "Try again",
        "error": "We couldn't hear that. Keep it under a minute, then try again or upload a file.",
        "stopAria": "Stop recording",
        "samples": "Or try a sample in:"
      },
      "agent": {
        "titleLead": "Try",
        "titleTail": "Sada",
        "call": "Voice Call with Sada",
        "chat": "Chat with Sada"
      },
      "eyebrow": "Live Playground"
    },
    "tts": {
      "eyebrow": "Text to Speech",
      "heading": "Every message deserves the right voice",
      "lead": "Turn text into natural speech using voices designed for Arabic and its dialects. Choose a voice, control its delivery, and generate audio for content, products, and customer experiences.",
      "cta": "Try It Now",
      "editor": {
        "label": "All-in-one AI editor",
        "text": "Create podcasts, voiceovers in one Echo-Creative platform."
      },
      "voice": {
        "label": "Choose a voice and dialect",
        "text": "From the Voice Library, or your own cloned voice soon."
      },
      "features": {
        "control": {
          "label": "Control the voice",
          "text": "Guidance Scale, Speed Multiplier, and more."
        },
        "diacritics": {
          "label": "Diacritization",
          "text": "Now you can generate the voice with Diacritization!"
        },
        "expressive": {
          "label": "Expressiveness Tags",
          "text": "Add Expressiveness Tags to your voice."
        },
        "dialects": {
          "label": "+10 Dialect",
          "text": "Trained from the dialect up, ready to use."
        }
      }
    },
    "stt": {
      "eyebrow": "Speech to text",
      "heading": "From real conversations to clear, usable text",
      "lead": "Every dialect, transcribed as it was said. Upload a recording or capture one now; EchoNova returns an editable transcript that keeps the rhythm and nuance of the dialect.",
      "cta": "Try It Now",
      "review": {
        "speaker": "Speaker {{n}} · 00:40–00:55",
        "transcript": "In a quiet village where the sky brushes the fields in hues of gold, young Mia discovered a map leading to forgotten treasures. Little did she know, her cat Whiskers had a secret: he was the guardian of the map, tasked with guiding Mia to not only the treasure but also to her destiny.",
        "caption": "All-in-one AI editor",
        "text": "Speak, understood, get your speech in an editable file"
      },
      "chips": {
        "hala": "ياهلا وغلا !!",
        "marhaba": "مرحباً بالغالي",
        "lesson": "درس اليوم عن.."
      },
      "listen": {
        "caption": "Understood in your dialect",
        "text": "Speak, understood"
      }
    },
    "agent": {
      "eyebrow": "SADA Agent",
      "heading": "Agents that understand—and act.",
      "lead": "Sada handles voice and chat conversations from the first response to resolution. It understands the customer’s dialect, uses the tools and knowledge you approve, and hands the conversation to a human when needed.",
      "cta": "Build Your Agent",
      "persona": {
        "label": "Persona",
        "value": "Call Center",
        "voice": "Agent Voice"
      },
      "pills": {
        "knowledge": "Knowledge Library",
        "tools": "Tools Library",
        "connections": "Connections",
        "tests": "Tests"
      },
      "center": {
        "titleLead": "Build Your",
        "titleTail": "Agent",
        "text": "Define its role, personality, voice, language, and behavior."
      },
      "features": {
        "build": {
          "label": "Build Your Agent",
          "text": "Define its role, personality, voice, language, and behavior."
        },
        "connect": {
          "label": "Connect Its World",
          "text": "Add channels, knowledge sources, business tools, and custom API endpoints."
        },
        "test": {
          "label": "Test and Improve",
          "text": "Run tests, review conversations, monitor performance, and improve how the agent responds."
        }
      }
    },
    "uae": {
      "eyebrow": "Security & sovereignty",
      "heading": "Designed in the UAE. Your audio data stays here.",
      "lead": "Call audio and transcripts never leave our UAE cloud. Bought tools only ever see account metadata. Arabic personal data is masked before it reaches any model.",
      "columns": {
        "sovereign": {
          "title": "Sovereign cloud & on-prem",
          "text": "Run EchoNova in our UAE cloud, inside your own VPC, or air-gapped. Audio never leaves your perimeter."
        },
        "residency": {
          "title": "Data residency & PDPL",
          "text": "All voice data in-region, aligned to UAE PDPL and GCC residency requirements. DPA and subprocessor register."
        },
        "privacy": {
          "title": "Privacy Shield",
          "text": "Arabic PII masking: names, numbers and IDs redacted in transcripts, with a vault and an audit trail."
        }
      }
    },
    "workspace": {
      "heading": "One workspace.  Every voice workflow",
      "lead": "Create agents, generate speech, transcribe audio, manage voices, run tests, review conversations, and monitor usage from one connected workspace.",
      "cards": {
        "tts": {
          "title": "Text to Speech Studio",
          "text": "Generate, preview, download, and manage speech projects."
        },
        "stt": {
          "title": "Speech to Text Studio",
          "text": "Upload or record, review the transcript, and export it."
        },
        "voices": {
          "title": "Voice Library",
          "text": "Browse, preview, and save voices across dialects."
        }
      }
    },
    "voices": {
      "eyebrow": "Voice Library",
      "count": "99+",
      "heading": " Arabic voice",
      "cta": "Browse the Voice Library",
      "playAria": "Play a sample of {{name}}",
      "pauseAria": "Pause the sample of {{name}}"
    },
    "comingSoon": {
      "heading": "More ways to work with Arabic voice",
      "lead": "Everything joins the same login, the same library and the same billing. One ecosystem, not seven islands.",
      "badge": "Coming Soon",
      "items": {
        "clone": "Voice Clone",
        "reader": "EchoReader",
        "dubbing": "Dubbing",
        "sfx": "Sound Effects"
      }
    },
    "integrations": {
      "eyebrow": "Integrations",
      "heading": "Connect EchoNova to the tools you already use",
      "statuses": {
        "live": "Live",
        "partner": "Partner",
        "beta": "Beta"
      },
      "cards": {
        "embed": {
          "title": "Website Embed",
          "text": "One script tag. Sada answers on your site, by voice or chat."
        },
        "telephony": {
          "title": "Telephony · SIP",
          "text": "A phone number for your agent through our carrier partner."
        },
        "api": {
          "title": "API",
          "text": "Speech to Text and Text to Speech from any stack. Keys in the studio."
        },
        "webhooks": {
          "title": "Webhooks",
          "text": "Every call outcome pushed to your CRM or ticket desk."
        }
      },
      "partners": {
        "genesys": {
          "name": "Genesys AppFoundry",
          "text": "Sada inside the contact-centre platforms the region already runs.",
          "year": "2027"
        },
        "aws": {
          "name": "AWS Marketplace",
          "text": "Procure through your existing cloud agreement.",
          "year": "2027"
        }
      }
    },
    "developers": {
      "eyebrow": "Developers",
      "heading": "Two endpoints. Any stack",
      "lead": "Send audio, get dialect-aware text. Send text, get a voice. Keys live in the studio; usage is metered per minute and per character.",
      "cta": "Get an API key",
      "endpoints": {
        "label": "STT & TTS endpoints",
        "text": "REST and streaming APIs for Arabic speech to text and text to speech, with dialect codes and timestamps."
      },
      "webhooks": {
        "label": "Webhooks & events",
        "text": "Every call outcome pushed to the systems you already run. Transcript, resolution and spend in one payload."
      }
    },
    "why": {
      "heading": "Why EchoNova",
      "points": {
        "arabicFirst": "Arabic-first",
        "uae": "Built in the UAE",
        "dialect": "Your dialect isn't an edge case"
      }
    },
    "cta": {
      "heading": "Built for Arabic",
      "action": "Request a demo"
    },
    "footer": {
      "brandHomeAria": "EchoNova home",
      "tagline": "Arabic voice intelligence, built in the UAE.",
      "columns": {
        "products": "Products",
        "developers": "Developers",
        "company": "Company",
        "legal": "Legal"
      },
      "links": {
        "agents": "Sada AI Agents",
        "stt": "Speech to Text",
        "tts": "Text to Speech",
        "voices": "Voice Library",
        "pricing": "Pricing",
        "documentation": "Documentation",
        "apiReference": "API Reference",
        "integrations": "Integrations",
        "systemStatus": "System Status",
        "whyEchoNova": "Why EchoNova",
        "about": "About",
        "contact": "Contact",
        "careers": "Careers",
        "privacy": "Privacy Policy",
        "terms": "Terms of Use",
        "dataProcessing": "Data Processing",
        "security": "Security"
      },
      "copyright": "© {{year}} EchoNova AI. All rights reserved.",
      "social": {
        "linkedin": "LinkedIn",
        "x": "X",
        "youtube": "YouTube"
      }
    },
    "requestDemo": {
      "title": "Request A Demo",
      "subtitle": "Request a demo for sada agent",
      "nameLabel": "Your Name",
      "namePlaceholder": "Enter your name",
      "nameRequired": "Please enter your name",
      "nameTooLong": "Please keep your name under 120 characters",
      "emailLabel": "Email",
      "emailPlaceholder": "Enter your email",
      "emailRequired": "Please enter your email",
      "emailInvalid": "Please enter a valid email address",
      "companyLabel": "Company",
      "companyPlaceholder": "Enter your company name here",
      "companyTooLong": "Please keep your company name under 160 characters",
      "submit": "Request a demo",
      "submitting": "Sending your request...",
      "success": "Thanks! We got your request and will be in touch shortly.",
      "errorTitle": "We couldn't send your request",
      "errorMessage": "Something went wrong. Please try again."
    }
  },
  "voice": {
    "gender": {
      "male": "Male",
      "female": "Female",
      "unknown": "Unknown"
    },
    "language": {
      "arabic": "Arabic",
      "english": "English",
      "en": "English",
      "ar": "Arabic",
      "ar-eg": "Arabic (Egyptian)",
      "en-us": "English"
    }
  },
  "landingV2": {
    "studio": {
      "hero": {
        "kicker": "Voice Studio",
        "title": "Your voice, reading anything",
        "lead": "Clone your voice from a few seconds of audio. Then give EchoReader any document, link or text, and listen to it in your own voice, or in any voice from the library.",
        "voiceName": "Ahmed"
      },
      "jump": {
        "clone": "Voice Cloning",
        "reader": "EchoReader"
      },
      "clone": {
        "kicker": "Voice Cloning",
        "title": "Your voice, in a few seconds",
        "lead": "Read the passage out loud, pick your dialect, and your voice is ready to use.",
        "instant": "Instant",
        "pro": "Professional",
        "lenInstant": "A few seconds",
        "lenPro": "3 to 15 minutes",
        "proBody": "Professional cloning needs 3 to 15 minutes of clear speech in a quiet room. You record it in the app, reading guided passages.",
        "proCta": "Sign up to record",
        "ready": "Your voice is ready",
        "instantChip": "Instant",
        "cloneAnother": "Clone another",
        "off": "The live cloning demo is resting. Sign up to clone your voice in the app.",
        "note": "Your recording is used to make your voice, then deleted within 1 day.",
        "step1": {
          "title": "Record",
          "body": "A few seconds for Instant, or 3 to 15 minutes for Professional."
        },
        "step2": {
          "title": "Confirm it is you",
          "body": "Say a one-time code out loud, so only you can clone your voice."
        },
        "step3": {
          "title": "Use it everywhere",
          "body": "In Text to Speech, in EchoReader, and in your Sada agents."
        },
        "trust1": "Yours alone",
        "trust2": "Delete any time",
        "useInTts": "Use it in Text to Speech"
      },
      "reader": {
        "kicker": "EchoReader",
        "title": "Any document, read aloud",
        "lead": "Bring a file, a link or your own text, and listen in the voice you choose.",
        "signUp": "Sign up",
        "yourVoice": "Your voice",
        "step1": {
          "title": "Review the text",
          "body": "See every passage before any audio is made."
        },
        "step2": {
          "title": "Choose a voice",
          "body": "Any dialect in the library, or your own."
        },
        "step3": {
          "title": "Listen",
          "body": "The passage being read is marked, and your place is kept."
        },
        "limitSize": "Up to 25 MB and 200,000 characters",
        "limitPages": "PDFs up to 300 pages",
        "listenSound": "Listen with sound",
        "pauseSound": "Pause sound",
        "videoLabel": "EchoReader demo: Huda reads three passages from a PDF, and each passage is marked as she reads it."
      },
      "together": {
        "kicker": "Together",
        "title": "Clone once. Hear it everywhere",
        "lead": "The voice you clone shows up wherever you choose a voice: in Text to Speech, in EchoReader, and in your Sada agents.",
        "choose": "Choose a voice",
        "yours": "Yours",
        "voice2": "Haifa",
        "voice3": "Huda"
      }
    },
    "nav": {
      "sada": "Sada",
      "sadaAgent": "Sada Agent",
      "login": "Log in",
      "signUp": "Sign up",
      "requestDemo": "Request a demo",
      "tryLive": "Try it live",
      "research": "Research"
    },
    "home": {
      "studio": {
        "title": "One login, all our products on one screen.",
        "alt": "Product screen",
        "steps": {
          "tts": {
            "title": "Text to Speech",
            "text": "Type Arabic, pick a dialect and a voice, press Generate. One WAV back."
          },
          "voices": {
            "title": "Voice Library",
            "text": "Voices from different countries and dialects. Listen, save your favourites and use them."
          },
          "cleaning": {
            "title": "Sound Cleaning",
            "text": "Upload your recording, choose the recording environment and get your voice back, clean."
          }
        }
      },
      "productsLead": "One login, one library, one bill. All the products below are available in the studio today.",
      "live": "Live",
      "sadaCard": "Build responsive conversational agents that handle interruptions smoothly and draw on your knowledge base.",
      "ttsCard": "Create natural, expressive voices across Arabic dialects and English.",
      "sttCard": "Convert audio into accurate text, in the dialect it was spoken.",
      "cleaningCard": "Drop in a file, pick a preset: Studio Master, Heavy AC & Wind, Radio Voice or Deep Voice. Up to 1 hour per file."
    },
    "footer": {
      "about": "About EchoNova",
      "contact": "Contact us",
      "terms": "Terms and Conditions",
      "cookies": "Cookie Policy",
      "cookieSettings": "Cookie settings",
      "trust": "Trust Center",
      "research": "Research"
    },
    "about": {
      "kicker": "About EchoNova",
      "title": "Understood, not processed",
      "lead": "EchoNova builds the Arabic voice layer: systems that hear a dialect and understand it, and voices that speak it back naturally. Our first product is Sada, an agent that answers people in the dialect they called in. We are based in Dubai and we build for the Arabic-speaking world first, not as an afterthought.",
      "name": {
        "kicker": "The name",
        "title": "A star that flares. A light that comes back",
        "p1": "A nova is a star that suddenly burns thousands of times brighter. Some of that light reaches us directly. Some of it hits the dust around the star, scatters, and arrives later, seen a second time. Astronomers call it a light echo: the same flash, returned after touching something.",
        "p2": "That is the whole company in one picture. Every person who speaks sends out a small flash of light. For a long time in our region, that flash met nothing: a machine that could not hear the dialect, an answer that never came back. EchoNova is the echo. Your voice returns to you, in your language, understood. And to return a voice truthfully, you first have to listen carefully. Listening first is where the name comes from, and where the product starts.",
        "echoLabel": "Light echo · direct, then delayed"
      },
      "dot": {
        "kicker": "The dot",
        "becomes": "becomes",
        "withOneDot": "with one dot",
        "p1": "In Arabic, a single dot flips the meaning: ink becomes news. It is almost invisible, and it changes everything. A dialect is the dot of speech. Machines that \"support Arabic\" hear the letters and drop the dot: they get the words and miss the meaning. We build the intelligence that catches the dot: the dialect, the context, the tone.",
        "p2": "Before the logo and before the typeface there was a painting, in the hand of the calligrapher Mahmoud Al Abbadi. The confident stroke of the reed pen, the free brush, the dot that completes a letter, the warmth of paper under ink: our visual language came out of it. Arabic calligraphy was the first technology to carry the Arabic voice across centuries. We see our work as a continuation of it, not a break."
      },
      "voice": {
        "kicker": "How we speak",
        "trusted": {
          "title": "Trusted, not cold",
          "text": "We speak from knowledge, and we do not stammer when we know."
        },
        "precise": {
          "title": "Precise, not dry",
          "text": "Precision about human things: the experience, the result, the feeling."
        },
        "warm": {
          "title": "Warm, not cheap",
          "text": "The person first in every sentence. Warmth from the logic, not from slang."
        },
        "simple": {
          "title": "Simple, not shallow",
          "text": "The complicated becomes easy because we understand it deeply."
        },
        "people": "We say \"people\", never \"customers\". We mock the broken system, never the human on the other end of the line."
      },
      "mission": {
        "kicker": "The larger mission",
        "title": "A voice layer owned by the people it belongs to",
        "text": "Sada is the beginning, not the end. Under the product sits a wider ambition: to build the Arabic voice layer in full, not by translating a Western tone into Arabic, but by making voices that speak our dialects naturally. Because a voice is only understood by its own people, its source has to be real people from the dialect itself: not \"data samples\", but people who own what they say, are recorded with consent, and are paid when their voice is used."
      },
      "build": {
        "kicker": "What we build",
        "title": "One layer, four doors",
        "sada": {
          "name": "Sada",
          "text": "The agent answers calls and messages in the caller’s dialect, carries out actions within the permissions you grant, confirms every important detail and hands the conversation to a human employee when needed."
        },
        "stt": {
          "name": "Speech to Text",
          "text": "Written the way it was said. Emirati stays Emirati; nothing is straightened into Fusha."
        },
        "tts": {
          "name": "Text to Speech",
          "text": "Voices with a hometown. Each voice was recorded by someone from the place its dialect belongs to."
        },
        "cleaning": {
          "name": "Sound Cleaning",
          "text": "Hear the words, not the room. Presets for everyone, parameters for the ones who care."
        }
      },
      "where": {
        "kicker": "Where we are",
        "title": "Built in the UAE",
        "p1": "EchoNova is built in the United Arab Emirates by engineers, linguists and voice people from the Emirates, Egypt and further afield, who share one conviction: Arabic deserves technology built for it, not translated to it. The dialect is where the language actually lives, and it is where we start. Emirati first: the first voice, the first sentence, the first dialect we get right. Then Saudi, Kuwaiti, Egyptian, Fusha and English, with more on the way.",
        "p2": "We are here to celebrate the language, in every dialect it is spoken, and to give it the voice layer it has been waiting for."
      },
      "contact": {
        "kicker": "Contact us",
        "title": "Talk to a person",
        "sales": "Demos, pricing and partnerships:",
        "info": "Everything else, press and voice talent who want to join the library:",
        "form": "Or use the form to send your request to our team."
      },
      "careers": {
        "kicker": "Careers",
        "title": "Work on the dot",
        "text": "If you care about the difference between hearing Arabic and understanding it, write to"
      },
      "form": {
        "firstName": "First name",
        "lastName": "Last name",
        "email": "Work email",
        "company": "Company or organisation",
        "need": "What do you need",
        "needs": {
          "sada": "A Sada demo for my contact centre",
          "stt": "Speech to Text for my product",
          "tts": "Text to Speech for my product",
          "voices": "Voices and voice cloning",
          "cleaning": "Sound Cleaning for my archive",
          "partnership": "A partnership",
          "press": "Press",
          "other": "Something else"
        },
        "message": "Message",
        "messagePlaceholder": "Tell us about the calls, the dialects, the volume.",
        "send": "Send",
        "goesTo": "Goes to {{email}}",
        "errors": {
          "firstName": "Enter your first name.",
          "lastName": "Enter your last name.",
          "emailRequired": "Enter your work email.",
          "emailInvalid": "Enter a valid email, like name@company.com.",
          "company": "Enter your company or organisation."
        },
        "sent": "Opening your mail app with the message. Thank you.",
        "error": "We could not send your request. Please try again.",
        "sending": "Sending..."
      }
    },
    "playground": {
      "livePlayground": "Live playground",
      "hearItSayItPutItToWork": "Hear it. Say it. Put it to work",
      "textToSpeechSpeechToTextAndSound": "Text to Speech, Speech to Text and Sound Cleaning in one place. Try it for free, no account needed.",
      "services": "Services",
      "liveFreeTrial": "Live · free trial",
      "textToTurnIntoSpeech": "Text to turn into speech",
      "typeAnyText": "Type any text here...",
      "tags": {
        "label": "Tags",
        "add": "Add {{tag}} at the cursor",
        "remove": "Remove {{tag}}",
        "names": {
          "laugh": "laugh",
          "chuckle": "chuckle",
          "clearThroat": "clear throat",
          "shush": "shush"
        }
      },
      "voice": "Voice",
      "chooseVoice": "Choose voice",
      "picker": {
        "search": "Search a voice",
        "dialects": "Ways of speaking",
        "selected": "Selected",
        "preview": "Preview {{name}}",
        "empty": "No voice matches that search.",
        "count": "{{voices}} voices · {{ways}} ways of speaking",
        "library": "Voice Library"
      },
      "generating": "Generating…",
      "play": "Play",
      "unableToLoadAudioPleaseTryAgain": "Unable to load audio. Please try again.",
      "playing": "Playing",
      "yourVoiceInWords": "Your voice. In words.",
      "speakNaturallyOrUploadARecordingWeLl": "Speak naturally or upload a recording. We’ll take care of the transcript.",
      "yourTranscriptIsReady": "Your transcript is ready",
      "copied": "Copied",
      "copyText": "Copy text",
      "microphoneRecording": "Microphone recording",
      "tryAnotherRecording": "Try another recording",
      "couldNotCopyAutomaticallySelectTheTranscriptTo": "Could not copy automatically. Select the transcript to copy it.",
      "weReListening": "We're listening",
      "useYourMicrophone": "Use your microphone",
      "yourWordsYourDialectJustStartSpeaking": "Speak naturally, in your own dialect.",
      "stopTranscribe": "Stop & transcribe",
      "startRecording": "Start recording",
      "or": "or",
      "dropYourAudioHere": "Drag and drop your audio file here.",
      "orChooseARecordingFromYourDevice": "Or choose a recording from your device",
      "audioFile": "Audio file",
      "browseFiles": "Browse files",
      "upTo": "Up to",
      "turningYourAudioIntoWords": "Turning your audio into words…",
      "chooseASupportedAudioFileNoLargerThan": "Choose a supported audio file, no larger than",
      "couldNotTranscribeTheAudioCheckYourFile": "Could not transcribe the audio. Check your file or microphone permission and try again.",
      "soundCleaning": "Sound Cleaning",
      "openTheStudioToUploadYourFileAnd": "Open the studio to upload your file and clean your audio.",
      "openSoundCleaning": "Open Sound Cleaning",
      "limits": {
        "ip_limit": "You've used today's 40 free demo requests across Text to Speech, Speech to Text and Sound Cleaning. Try again tomorrow.",
        "rate_limit": "Too many requests. The demo allows 3 requests a minute for each tool. Wait a minute and try again.",
        "budget": "The demo is resting until tomorrow.",
        "busy": "The service is under heavy demand right now. Try again in a minute.",
        "check": "Check failed. Please try again.",
        "too_long": "The demo takes clips up to {{seconds}} seconds. Choose a shorter one.",
        "inappropriate": "Sorry, the text contains inappropriate language. Please edit the text and try again."
      },
      "clean": {
        "preset": "Preset",
        "presets": {
          "studio": "Professional studio quality",
          "wind": "Heavy AC and wind noise",
          "radio": "Radio voice",
          "deep": "Deep voice"
        },
        "limit": "We clean the first {{seconds}} seconds. Files up to {{mb}} MB, any common audio format.",
        "sample": "Or try a 1980s cassette",
        "sampleFile": "cassette-1980s.mp3",
        "before": "Before",
        "after": "Cleaned",
        "another": "Choose another file",
        "run": "Clean it",
        "cleaning": "Cleaning…",
        "preparing": "Preparing audio…",
        "checking": "Verifying request…",
        "uploading": "Uploading audio…",
        "processing": "Upload complete. Cleaning audio…",
        "errors": {
          "unreadable": "Your browser couldn't read this file. Try another audio file.",
          "busy": "The service is under heavy demand right now. Try again in a minute.",
          "failed": "We couldn't clean this file. Try again, or try another file."
        }
      },
      "freeDemoNoAccountThenSignUp": "Free demo · no account · sign up for more",
      "textToSpeech": "Text to Speech",
      "speechToText": "Speech to Text",
      "stop": "Stop"
    },
    "pricing": {
      "pricing": "Pricing",
      "simplePlansArabicFirstNoSurprises": "Simple plans. Arabic-first. No surprises",
      "upgradeYourPlan": "Upgrade Your Plan",
      "billingPeriod": "Billing period",
      "monthly": "Monthly",
      "yearly": "Yearly",
      "save": "Save",
      "loadingPlans": "Loading plans…",
      "mostPopular": "Most popular",
      "month": "/ month",
      "custom": "Custom",
      "billedYearly": "billed yearly",
      "billedMonthly": "Billed monthly",
      "choosePlan": "Choose plan",
      "vatExcluded": "VAT excluded",
      "howBillingWorks": "How billing works",
      "pricedBeforeItRunsRefundedIfItFails": "Priced before it runs. Refunded if it fails",
      "builtInTheUaeYourAudioStaysIn": "Developed in the UAE. Your audio recordings stay here.",
      "unlimited": "Unlimited",
      "forIndividualsAndSmallTeamsGettingStartedWith": "For individuals and small teams getting started with TTS/STT.",
      "speechToText": "Speech to Text",
      "textToSpeech": "Text to Speech",
      "soundCleaning": "Sound Cleaning",
      "dialects": "Dialects",
      "support": "Support",
      "community": "Community",
      "forTeamsShippingArabicVoiceInAProduct": "For teams shipping Arabic voice in a product.",
      "included": "Included",
      "contactCentresGovernmentBanksTelcos": "Contact centres, government, banks, telcos.",
      "talkToSales": "Talk to sales",
      "usage": "Usage",
      "sadaAgent": "Sada agent",
      "included2": "Included",
      "privateDeployment": "Private deployment",
      "optional": "Optional",
      "slaDataResidency": "Service agreement and data residency",
      "contracted": "Contracted",
      "dedicated": "Dedicated",
      "trial": "Trial",
      "upgrade": "Upgrade",
      "downgrade": "Downgrade",
      "yearly2": "Yearly",
      "payment": "Payment",
      "cardOrPaypalVatCalculatedAtCheckoutInvoices": "By card or PayPal. VAT is calculated at checkout, and invoices are available in the portal.",
      "forGrowingTeamsThatNeedHigherLimitsAnd": "For growing teams that need higher limits and the full feature set.",
      "forLargeOrganizationsWithHighVolumeWorkloadsAnd": "For large organizations with high-volume workloads and dedicated support.",
      "forCreatorsMakingPremiumContentForGlobalAudiences": "For creators making premium content for global audiences",
      "tts": "TTS",
      "stt": "STT",
      "annotation": "Annotation",
      "agents": "Agents",
      "seats": "Seats",
      "projects": "Projects",
      "apiKeys": "API keys",
      "storageBytes": "Storage (bytes)",
      "storage": "Knowledge storage",
      "getPlan": "Get {{plan}}",
      "volumePricing": "Volume pricing, hosted in the UAE",
      "loadError": "We couldn't load the plans.",
      "retry": "Try again",
      "trialFact": "Every workspace starts with the trial credits on its card, with no time limit. AI model use in the trial is capped at $1 of model cost. When you pay for a plan, unused trial credits end; extra credits you bought keep working.",
      "upgradeFact": "Starts a new cycle today at the new plan's price. Your unused credits stay and the new plan's credits are added. A yearly upgrade takes off the unused value of your year.",
      "downgradeFact": "Applies at the end of the current period, as does yearly to monthly. Unused plan credits end at the switch; extra credits stay.",
      "cancel": "Cancel",
      "cancelFact": "Your plan runs to the end of the paid period. Then plan credits end and basic limits apply; extra credits never expire.",
      "yearlyFact": "Paid once a year; credits still arrive every month. Annual totals and savings are shown with each plan."
    },
    "voices": {
      "exploreEchonovaSVoices": "Explore EchoNova's voices",
      "noVoiceSamplesAreAvailable": "No voice samples are available.",
      "playing": "● Playing",
      "playSample": "▶ Play sample"
    },
    "ctaCarousel": {
      "trySadaFree": "Try Sada free",
      "talkToSales": "Talk to sales"
    },
    "sadaLive": {
      "ask": {
        "title": "Ask Sada anything about EchoNova",
        "line": "Our products, dialects, prices, or where your data is kept.",
        "q1": "شو تسوي إيكونوڤا؟",
        "q2": "كم لهجة تفهمون؟",
        "q3": "Where is my data kept?",
        "q4": "How do I get an API key?"
      },
      "sadaTheAgent": "Sada · the agent",
      "talkToSadaLive": "Talk to Sada. Live",
      "notARecordingSadaPicksUpHearsYour": "This is not a recorded response. Sada answers the call, understands your dialect and carries out your request while you follow the transcript and its actions in real time.",
      "microphoneFreeNoAccount": "Microphone · free · no account needed",
      "sadaSpeakingHandoverAvailableAtAnyPoint": "Sada speaking · handover available at any point",
      "openSada": "Open Sada",
      "speaking": "Speaking",
      "listening": "Listening",
      "endConversation": "End conversation",
      "beginConversation": "Begin conversation",
      "notice": "Sada is an AI assistant. We keep a transcript of this conversation for 1 day.",
      "consent": {
        "title": "Before you talk to Sada",
        "agreePrefix": "By continuing, you agree to our",
        "terms": "Terms",
        "and": "and",
        "privacy": "Privacy Policy",
        "accept": "Accept and start",
        "cancel": "Cancel"
      },
      "hangUp": "Hang up",
      "connecting": "Connecting…",
      "ended": "The demo call has ended.",
      "endedByLimit": "The demo call reached its time limit.",
      "problems": {
        "mic": "Allow the microphone to talk to Sada.",
        "check": "Check failed. Please try again.",
        "busy": "Sada is busy right now. Try again in a minute.",
        "ip_limit": "You've used today's 3 free calls with Sada. Try again tomorrow.",
        "rate_limit": "Too many attempts. Wait a minute and try again.",
        "budget": "The demo is resting until tomorrow.",
        "failed": "Something went wrong. Please try again."
      }
    },
    "performance": {
      "eyebrow": "Arabic speech to text",
      "title": "The most accurate model for Arabic dialects",
      "lead": "Word error rate on 120 hours of Fusha and eight Gulf, Egyptian and Levantine dialects.",
      "chartTitle": "Word error rate",
      "legend": "Each dot is one wrong word in 100 · lower is better",
      "footnote": "Measured by EchoNova on 53,597 clips, 13 to 16 October 2026 · method and full results in the technical paper",
      "echonova": "EchoNova"
    },
    "sovereignty": {
      "fitsYourContactCentre": "Fits your contact centre",
      "securitySovereignty": "Security & sovereignty",
      "security": "Security",
      "hostedInTheUae": "Hosted in the UAE",
      "sadaHandlesTheConversationYourPlatformKeepsThe": "Sada manages the conversation while the call stays on your platform.",
      "yourContactCentrePlatform": "Your contact-centre platform",
      "telephonyRoutingAgentDesktop": "Telephony · routing · agent desktop",
      "audioIn": "Audio in",
      "liveStreamFromTheCallOrChat": "Live stream from the call or chat",
      "sada": "Sada",
      "arabicNativeAgentBoundedAuthority": "An agent designed for Arabic · defined permissions",
      "handover": "Handover",
      "toAPersonWithTranscriptAndContext": "To a person, with transcript and context",
      "connectsThroughThePlatformSStandardVoiceBot": "Connects through the platform’s standard voice-bot interface",
      "noChangeToNumbersQueuesOrDesktops": "No changes to numbers, queues or work interfaces",
      "failsOpenToYourAgents": "If it cannot proceed, it hands the conversation to your staff.",
      "audioComesInTextAndSpeechGoOut": "Audio comes in, text and spoken responses go out. Your data never leaves the region.",
      "speechToText": "Speech to Text",
      "liveAndBatchTranscriptionAcrossEightDialects": "Convert audio to text in real time or in batches, across eight dialects.",
      "textToSpeech": "Text to Speech",
      "naturalArabicVoicesInTheCallerSOwn": "Natural Arabic voices in the caller’s own dialect.",
      "soundCleaning": "Sound Cleaning",
      "noiseAndEchoRemovedBeforeTheModelListens": "Noise and echo are removed before the model listens to the audio.",
      "encryptedInTransitAtRest": "Encryption during transmission and storage",
      "processedStoredInRegion": "Processed & stored in-region",
      "retentionYouControl": "Kept until you delete it",
      "audioJourneySteps": "Audio journey steps",
      "playWalkthrough": "Watch the walkthrough",
      "pauseAnimation": "Pause animation",
      "integrationProvidersAreNotNamedOnTheSite": "Our policy is not to name integration service providers on the site.",
      "customPricingTalkToSales": "Custom pricing · talk to sales",
      "dataResidencyRetentionPolicy": "Data residency and retention policy",
      "noCrossBorderTransfer": "No cross-border transfer",
      "yourAudioArrives": "Your audio recording has arrived",
      "fromCallsAppsOrRecordings": "From calls, apps or recordings.",
      "processedInTheUae": "Processed in the UAE",
      "theAppropriateVoiceServiceProcessesTheAudioInside": "Your recordings are processed in the region using the most suitable voice service.",
      "connectedToYourSystems": "Connected to your systems",
      "resultsReachTheSystemsYouConnect": "Results go directly to your connected systems.",
      "yourDataStaysProtected": "Your data stays safe and protected",
      "encryptionInRegionStorageAndRetentionYouControl": "Encryption and in-region storage, and your data kept until you delete it.",
      "yourChannels": "Your channels",
      "phoneCalls": "Phone calls",
      "agentDesktop": "Customer service agent interface",
      "appsWebsites": "Apps & websites",
      "recordingsFiles": "Recordings & files",
      "yourSystems": "Your systems",
      "contactCentrePlatform": "Contact centre platform",
      "crmDatabases": "Customer relationship management and accounts",
      "yourOwnCode": "Your own code",
      "analyticsQa": "Analytics & QA",
      "phone": "Phone",
      "messagingApps": "Messaging apps",
      "webApp": "Web & app",
      "voiceNotes": "Voice notes",
      "crmAccounts": "Customer relationship management and accounts",
      "bookingsOrders": "Bookings & orders",
      "yourOwnApis": "Your own APIs",
      "peopleReachYouBy": "People reach you by",
      "sadaActsIn": "Sada works within",
      "builtInTheUaeYourAudioStaysIn": "Developed in the UAE. Your audio recordings stay here.",
      "audioIsProcessedByEchonovaServicesInThe": "EchoNova services process your audio recordings in the region, then send the results directly to your connected systems."
    },
    "cleaning": {
      "soundCleaning": "Sound Cleaning",
      "hearTheWordsNotTheRoom": "Hear the words, not the room",
      "tapeHissTrafficAirConditioningAPhoneLine": "Tape hiss, traffic and AC noise, even old phone lines. Sound Cleaning removes ambient noise and echo while preserving the voice as it was spoken. One button, one file.",
      "signUp": "Sign up",
      "requestADemo": "Request a demo",
      "readTheDocs": "Read the docs →",
      "beforeAndAfter": "Before and after",
      "realRecording": "real recording",
      "switchWhileItPlays": "Switch during playback",
      "rawTape": "Raw tape",
      "cleaned": "Cleaned",
      "recordingPosition": "Recording position",
      "pauseRecording": "Pause recording",
      "playRecording": "Play recording",
      "rashidBinTannaf": "Rashid bin Tannaf",
      "cassette1980s28Seconds": "cassette, 1980s · 28 seconds",
      "removed": "Removed",
      "tapeHiss": "Tape hiss",
      "hum": "Hum",
      "roomEcho": "Room echo",
      "crackle": "Crackle",
      "theVoiceOnTheTape": "The voice on the tape",
      "rashidBinTannafAtHome1980s": "Rashid bin Tannaf at home, 1980s",
      "sharjah1980s": "Sharjah, 1980s",
      "born": "Born",
      "alDhaid": "Al Dhaid",
      "atSea": "At sea",
      "30Years": "30 years",
      "pearlDiver": "Pearl diver",
      "poetry": "Poetry",
      "from25": "From 25",
      "nabatiVerse": "Nabati verse",
      "onAir": "On air",
      "radioAndTv": "Radio and TV",
      "honoured": "Honoured",
      "emiratesPostStamp": "Emirates Post stamp",
      "remembered": "Remembered",
      "yearOfHisPassing": "Year of his passing*",
      "thePeopleCalledHimTannaf": "The people called him Tannaf.",
      "listenToHisVoice": "Listen to his voice",
      "rashidBinTannafBinFayezBinSaeedWas": "Rashid bin Tannaf bin Fayez bin Saeed was born in 1910 in Al Dhaid, Sharjah. He lost his father early, was raised by his maternal grandfather, and memorised the Quran before he could write. At seventeen he went to sea as a pearl diver and stayed thirty years; later he quarried coral stone for houses. He turned to poetry at twenty-five.",
      "hisNabatiVerseWasHalfDesertHalfCoast": "His Nabati verse was half desert, half coast, with a port's worth of English words slipped in, and it was funny. Wisdom carried by a joke. But what made him famous was the voice: the delivery, the pause, the punchline dropped between two lines. Radio and television carried it through the 1970s and 80s, and his majlis in Al Ramla, Sharjah, filled every night.",
      "hePublishedSadaAlWonaIn1984And": "He published Sada al-Wona in 1984 and Ahwak in 1997, followed by Diwan Tannaf in 2018. In 2009, Emirates Post issued a stamp bearing his image. He died in 2000, and most of his legacy survives on tape: his words as he spoke them, in his voice, with all the surrounding noise. This page preserves his voice and removes that noise.",
      "archiveNotes": "Archive notes",
      "factsCheckedAgainstAlIttihadAlKhaleejAl": "* Facts checked against Al Ittihad, Al Khaleej, Al Bayan, Emirates Post and Arabic Wikipedia. Sources disagree on tribe (Al Kaabi / Al Nuaimi) and death year (1999–2001).",
      "soundCleaningStudio": "Sound Cleaning studio",
      "realProductScreenSoundCleaningAtDevEchonova": "Actual product interface: Sound Cleaning, with four presets and an advanced control panel.",
      "forThePeopleWhoWorkWithSound": "For the people who work with sound",
      "presetsForEveryoneParametersForTheOnesWho": "Presets for everyone. Parameters for the ones who care",
      "mostCleaningToolsGiveYouOneSliderAnd": "Most audio cleaning tools give you one slider and a promise of improvement. But sound engineers, podcasters, archivists and voice artists want to know what actually changed. Advanced cleaning reveals the eight settings behind each preset, from low-frequency reduction to loudness and dynamic range. Each change appears in red, and you hear its effect on the raw recording as you move the slider.",
      "itWasBuiltWithThePeopleWhoSpend": "Developed with professionals who spend their day wearing headphones. Set the target loudness for your podcast or platform. Raise the low-frequency filter to counter wind noise, or lower it to preserve the depth of a voice. Control the dynamic range for a quiet reading or a majlis with overlapping voices. Your ears are the judge.",
      "parameterGuide": "Parameter guide",
      "advancedCleaning": "Advanced cleaning",
      "liveOnTheTannafTape": "live on the Tannaf tape",
      "pause": "Ⅱ Pause",
      "hearIt": "▶ Hear it",
      "resetToDefaults": "Reset to defaults",
      "parametersChanged": "parameters changed",
      "presetStudioMaster": "Preset · Studio Master",
      "result": "Result",
      "whatYourSettingsDoToTheTape": "The effect of your settings on the tape",
      "stop": "■ Stop",
      "yourSettings": "Your settings",
      "lowCut": "Low cut",
      "off": "off",
      "gain": "Gain",
      "compressor": "Audio compressor",
      "limiter": "Peak limiter",
      "theDotsAreTheSoundBandByBand": "The dots represent the sound, frequency band by frequency band: low frequencies on the left, high frequencies on the right. The Raw recording row shows the tape as recorded, while the Cleaned audio row shows the result after applying your settings. Use Raw recording / Your settings to switch between the two.",
      "presets": "Presets",
      "fourPresetsOneButton": "Four presets. One button",
      "pickTheRoomTheRecordingCameFromThe": "Pick the room the recording came from. The model removes what does not belong and keeps the voice whole: breath, pauses, the dialect's own rhythm. Up to 1 hour per file.",
      "advancedSettings": "Advanced settings",
      "cleanFirst": "Clean first",
      "everythingAfterItWorksBetter": "Everything after it works better",
      "soundCleaningSitsInFrontOfTheOther": "Sound Cleaning sits in front of the other products. Same login, same file, one step earlier.",
      "developers": "Developers",
      "oneFileInACleanOneOut": "Upload a file and get it back clean.",
      "sendTheAudioNameThePresetGetThe": "Send the audio file, choose a preset and receive the cleaned version. You can pass it directly to transcription within the same API request.",
      "apiReference": "API reference",
      "sdks": "SDKs",
      "pressHearItThenMoveAnySliderThis": "Press ▶ Hear it, then move any slider. This line tells you what the change does to the tape.",
      "theRecordingCouldNotLoadPleaseTryAgain": "The recording could not load. Please try again.",
      "couldNotPlayTheRecordingPleaseTryAgain": "Could not play the recording. Please try again.",
      "studioMasterDefaultsRestoredSwitchToRawTape": "Studio Master defaults restored. Switch to Raw tape to compare.",
      "couldNotStartTheAudioPreviewPleaseTry": "Could not start the audio preview. Please try again.",
      "rumbleHumCutoff": "Low-frequency noise and hum cutoff",
      "filterSmoothness": "Filter roll-off",
      "targetVolume": "Target volume",
      "peakCeiling": "Maximum peak level",
      "loudSpikesTrigger": "Loud spikes trigger",
      "volumeSmoothing": "Volume smoothing",
      "reactionSpeed": "Reaction speed",
      "recoverySpeed": "Recovery speed",
      "raiseForWindOrAcRumbleLowerFor": "Raise it to reduce wind or AC noise. Lower it to preserve deep voices.",
      "howGradualTheLowCutIsRarelyNeeds": "Controls how gradually low frequencies are reduced. Rarely needs adjustment.",
      "16ForPodcastsAndVideo14ForMusic": "-16 for podcasts and video, -14 for music platforms, -18 for background speech.",
      "stopsCracklingAndClippingKeepAt1": "Stops crackling and clipping. Keep at -1.",
      "lowerForWildVolumeSwingsRaiseForDynamic": "Lower for wild volume swings. Raise for dynamic speech.",
      "2Gentle4Broadcast6AggressiveRadioVoice": "2 gentle, 4 broadcast, 6 aggressive radio voice.",
      "howFastLoudSyllablesAreTamedKeepAt": "How fast loud syllables are tamed. Keep at 5 ms.",
      "howFastVolumeReturnsToNormalKeepAt": "How fast volume returns to normal. Keep at 50 ms.",
      "loudness": "Loudness",
      "dynamics": "Dynamics"
    },
    "developers": {
      "developerApi": "Developer API",
      "twoServicesNineEndpointsOneEnvelope": "Two services. Nine endpoints. One envelope",
      "textToSpeechAndSpeechToTextOver": "Text to Speech and Speech to Text over HTTPS. One key from your workspace, one JSON shape on every answer, and a portal that shows every request you made.",
      "getAnApiKey": "Get an API key",
      "readTheDocs": "Read the docs",
      "auth": "Auth",
      "authorizationBearerEk": "Authorization: Bearer ek_…",
      "a67CharacterKeyShownOnceAtCreation": "A 67-character key, shown once at creation. One key per environment.",
      "answers": "Answers",
      "http200OnEverySuccessPostIncluded": "HTTP 200 on every success, POST included.",
      "successStatuscodeErrormessageDataOnEveryResponse": "success · statusCode · errorMessage · data, on every response.",
      "styles": "Styles",
      "synchronousOrAsynchronousYourChoice": "Synchronous or asynchronous, your choice.",
      "samePriceSameFieldsJobsEndWithA": "Same price, same fields. Jobs end with a webhook or a poll.",
      "region": "Region",
      "servedFromTheUae": "Served from the UAE.",
      "keysJobsWebhooksAndLogsStayOnThe": "Keys, jobs, webhooks and logs stay on the environment they were made on.",
      "version": "Version",
      "v1InThePath": "v1, in the path.",
      "noVersionHeaderBreakingChangesAreDatedOn": "No version header. Breaking changes are dated on the changelog.",
      "theMaintainedDocumentation": "The maintained documentation",
      "endpointsAndExamplesKeptCurrent": "Endpoints and examples, kept current.",
      "openDocumentation": "Open documentation"
    },
    "marketing": {
      "getStarted": "Get started",
      "talkToSada": "Talk to Sada"
    },
    "sada": {
      "sadaTheAgent": "Sada · the agent",
      "sadaAnswers": "Sada answers",
      "inTheirDialect": "In your dialect.",
      "anArabicNativeAgentForCallsAndMessages": "An Arabic-native agent for calls and messages. It understands the person, acts inside the authority you grant, confirms every value, and hands off to your team when it should.",
      "requestADemo": "Request a demo",
      "talkToSada": "Talk to Sada",
      "howACallRuns": "How a call runs",
      "sadaListensUnderstandsActsWithinTheAuthorityYou": "Sada listens, understands, acts within the authority you grant, confirms, and hands off",
      "everyConsequentialValueIsConfirmedBackToThe": "Sada confirms every detail that will trigger an action with the caller before changing anything in your systems. A human agent can take over at any time. Three calls, all in Emirati.",
      "deliveryRescheduleADelivery": "Delivery · reschedule a delivery",
      "bankBlockALostCard": "Bank · block a lost card",
      "clinicMoveAnAppointment": "Clinic · move an appointment",
      "listen": "Listen",
      "picksUpInTheCallerSDialectNoise": "Picks up in the caller's dialect. Noise and echo cleaned before the model hears a word.",
      "understand": "Understand",
      "identifiesIntentAndTheDetailsThatMatterThe": "Identifies intent and the details that matter: the order, the date, the person.",
      "act": "Act",
      "looksUpAndUpdatesOnlyWhatYouHave": "Looks up and updates only what you have authorised: order, booking, account systems.",
      "confirm": "Confirm",
      "readsTheExactValueBackAndWaitsFor": "Reads the exact value back and waits for a yes. No yes, no change.",
      "handOff": "Hand off",
      "resolvesOrPassesToAPersonWithThe": "Resolves, or passes to a person with the full transcript and context. Nothing repeated.",
      "audioProposesYourControlsDecide": "Audio proposes. Your controls decide",
      "boundedAuthority": "Bounded authority",
      "everyValueConfirmed": "Every value confirmed",
      "humanTakeoverAtAnyStep": "Human takeover at any step",
      "fullAuditTrail": "Full audit trail",
      "sadaSitsInsideThePlatformYouAlreadyRun": "Sada works inside the platform you already use.",
      "yourTelephonyRoutingAndAgentDesktopStayWhere": "Your telephony, routing and customer service agent interface stay as they are. Sada handles the conversation and immediately hands it to an employee when human intervention is needed.",
      "industries": "Industries",
      "whereArabicVoiceActuallyGetsSpoken": "Where Arabic voice actually gets spoken",
      "theSameModelsBehindSadaTunedForThe": "The same models behind Sada, tuned for the places a caller expects to be understood the first time. One sample call per sector.",
      "government": "Government",
      "serviceLinesThatAnswerInTheCallerS": "Service lines that answer in the caller's dialect, around the clock, with every call logged in-region.",
      "serviceHotlines": "Service hotlines",
      "statusUpdates": "Status updates",
      "appointments": "Appointments",
      "hearSada": "Hear Sada",
      "renewAPermit": "renew a permit",
      "banking": "Banking",
      "cardTransferAndAccountCallsHandledWithoutAn": "Complete card, transfer and account transactions without a maze of voice menus, with calls transcribed for compliance.",
      "cardDisputes": "Card disputes",
      "onboarding": "Onboarding",
      "callQa": "Call QA",
      "blockALostCard": "block a lost card",
      "aviationTravel": "Aviation & travel",
      "rebookingsAndBaggageCallsInThePeakHour": "Rebookings and baggage calls in the peak hour, in Arabic and English on the same line.",
      "rebooking": "Rebooking",
      "baggage": "Baggage",
      "loyalty": "Loyalty",
      "changeAFlight": "change a flight",
      "telecom": "Telecom",
      "highVolumeSupportAndRetentionCallsWithDialect": "Manage large volumes of support and customer retention calls, with dialect and caller intent identified in real time.",
      "planChanges": "Plan changes",
      "activation": "Activation",
      "retention": "Retention",
      "upgradeADataPackage": "upgrade a data package",
      "healthcare": "Healthcare",
      "appointmentAndResultsCallsWithAudioKeptInside": "Appointment and results calls, with audio kept inside the country as regulation requires.",
      "reminders": "Reminders",
      "triageIntake": "Triage intake",
      "askForXRayResults": "ask for X-ray results",
      "food": "Restaurants and cafés",
      "foodCopy": "Takes orders by phone or message, answers menu and branch questions, and has them ready when the guest walks in.",
      "orders": "Orders",
      "pickup": "Pickup",
      "reservations": "Reservations",
      "orderAheadForPickup": "order ahead for pickup",
      "sectorsShownAreTargetMarketsAtLaunch": "Sectors shown are target markets at launch",
      "namesOfFirstDeploymentsToBeAdded": "Names of first deployments to be added",
      "humansInTheLoop": "Human oversight at every stage",
      "peopleStayInCharge": "People stay in charge",
      "howWeControlSada": "How we control Sada",
      "sadaActsOnlyInsideThePermissionsYouGrant": "Sada operates only within the permissions you grant. Anything outside that scope is refused, never guessed.",
      "theExactDateAmountOrNumberIsRead": "The exact date, amount or number is read back and bound to the person’s yes before anything changes.",
      "handoverAtAnyMoment": "Handover at any moment",
      "aSupervisorCanListenTakeOverOrEnd": "A supervisor can listen to the call, take it over or end it. Any unresolved request is handed to an employee with the full conversation transcript.",
      "yourOwnSada": "Your own Sada",
      "personaDialectVoiceKnowledgeTools": "Persona, dialect, voice, knowledge, tools",
      "configuredInTheStudioNoCodeRequiredAn": "Configured in the studio, no code required. An account takes a minute; the first agent takes ten.",
      "signUpToBuildAnAgent": "Sign up to build an agent",
      "securityCompliance": "Security & compliance",
      "securityWithoutShortcuts": "Security without shortcuts",
      "enterpriseLevelDataProtection": "Enterprise-level data protection",
      "audioTranscriptsAndVoicesAreEncryptedInTransit": "Audio, transcripts and recorded voices are encrypted during transmission and storage, processed and stored in UAE data centres, and kept until you delete them, or as your enterprise contract sets.",
      "granularTeamPermissions": "Granular team permissions",
      "dedicatedSupportAndPrivateDeployments": "Dedicated support and private deployments",
      "uaeDataResidency": "UAE data residency",
      "inRegionProcessingStorage": "In-region processing & storage",
      "implementationInProgressAuditsQ12027": "Implementation in progress · audits Q1 2027",
      "retentionYouControl": "Retention set in your contract",
      "zeroRetentionModeAvailable": "Kept until you delete it on self-serve plans",
      "registrationsInProgress": "Registrations in progress",
      "trustCenterRequestTheDpa": "Trust center · request the DPA",
      "wordingToBeClearedByLegalBeforePublishing": "Wording to be cleared by legal before publishing"
    },
    "stt": {
      "speechToText": "Speech to Text",
      "writtenTheWayItWasSaid": "Written the way it was said",
      "emiratiStaysEmiratiEgyptianStaysEgyptianNothingIs": "Emirati stays Emirati, and Egyptian stays Egyptian. We do not convert dialects to Fusha or guess what was said.",
      "signUp": "Sign up",
      "requestADemo": "Request a demo",
      "readTheDocs": "Read the docs →",
      "listenAndRead": "Listen and read",
      "transcriptDemo": "transcript demo",
      "hoverAnUnderlinedWord": "Hover over any underlined word.",
      "sampleDialect": "Sample dialect",
      "pauseTranscriptDemo": "Pause transcript demo",
      "playTranscriptDemo": "Play transcript demo",
      "speaker": "Speaker",
      "dialectDetecting": "Dialect · detecting",
      "recordSecondsOfYourOwn": "Record {{seconds}} seconds of your own →",
      "tryTheModel": "Try the model",
      "sayItInYourDialectReadItBack": "Speak in your dialect and read your words exactly as you said them.",
      "recordUpToSecondsFromYourMicrophone": "Record up to {{seconds}} seconds from your microphone, or drop an audio file to transcribe.",
      "freeNoAccount": "free · no account",
      "secondsArabicAnyDialect": "{{seconds}} seconds · Arabic, any dialect",
      "stopAndTranscribe": "Stop and transcribe",
      "startRecording": "Start recording",
      "orDropAnAudioFileHereMp3Wav": "Or drop an audio file here · MP3, WAV, M4A up to 10 MB",
      "transcriptionCouldNotCompletePleaseTryAgain": "Transcription could not complete. Please try again.",
      "whatComesBack": "What comes back",
      "oneTranscriptWrittenTheWayItWasSaid": "A transcript that captures speech as it was spoken. Emirati stays Emirati and is never converted to Fusha.",
      "transcribing": "Transcribing…",
      "transcribe": "Transcribe",
      "speechToTextStudio": "Speech to Text studio",
      "realProductScreenTheSpeechToTextStudio": "Actual product interface: the Speech to Text studio",
      "dialects": "Dialects",
      "trainedFromTheDialectUp": "Trained from the dialect up",
      "notFushaWithADialectPatchEachDialect": "This is not Fusha with a dialect added on. Each dialect has its own training track, so the words people actually use appear as spoken, without errors.",
      "comingSoon": "Coming Soon",
      "aTranscriptYouCanUseNotFix": "A transcript ready to use, with no corrections needed.",
      "mostArabicTranscriptionHandsYouADraftTo": "Most Arabic transcription tools give you a draft that needs correcting. Here, you get the conversation as it happened: who said what, when, and the exact words they used.",
      "seeAFullTranscript": "See a full transcript",
      "whereItGoes": "Where it goes",
      "threePlacesTheWordsMatter": "Three places the words matter",
      "soundCleaning": "Sound Cleaning",
      "noisyRecordingCleanItFirst": "Noisy recording? Clean it first.",
      "streetCarOpenOfficeRunTheFileThrough": "In the street, car or open office, run the file through Sound Cleaning before transcription for clearer, more accurate words. The same account, the same file.",
      "developers": "Developers",
      "audioInWordsSpeakersAndTimeOut": "Send audio, get text.",
      "sendAFileOrAStreamSetThe": "Send the file and receive the transcript within the same API request. The system automatically detects the dialect from the audio, so there are no settings to configure. Longer files are processed as a separate job.",
      "apiReference": "API reference",
      "sdks": "SDKs",
      "builtInTheUaeYourAudioAndTranscripts": "Built in the UAE. Your audio and transcripts stay in the UAE.",
      "fushaWouldWrite": "In Fusha: ",
      "chooseAnAudioFileNoLargerThan10": "Choose an audio file no larger than 10 MB.",
      "emiratiSupportCall": "Emirati · support call",
      "egyptianVoiceNote": "Egyptian · voice note",
      "saudiMeeting": "Saudi · meeting"
    },
    "tts": {
      "textToSpeech": "Text to Speech",
      "arabicThatSoundsLikeAPersonNotA": "Arabic that sounds human, not robotic",
      "typeInEmiratiSaudiEgyptianOrFushaAnd": "Write in Emirati, Saudi, Egyptian or Fusha and hear the text in the same dialect. Pauses, stress and rhythm follow the dialect, not how the words are written.",
      "signUp": "Sign up",
      "requestADemo": "Request a demo",
      "readTheDocs": "Read the docs →",
      "tryIt": "Try it",
      "freeNoAccount": "Free, no account",
      "clickAVoiceToHearASample": "Click a voice to hear a sample",
      "speechText": "Speech text",
      "tags": "Tags",
      "clickToAdd": "click to add",
      "dialect": "Dialect",
      "loadingVoices": "Loading voices…",
      "noVoicesAvailableForThisDialectYet": "No voices available for this dialect yet.",
      "generating": "Generating…",
      "stop": "■ Stop",
      "stopAudio": "Stop",
      "couldNotGenerateAudioPleaseTryAgain": "Could not generate audio. Please try again.",
      "upTo": "Up to",
      "characters": "characters",
      "voice": "Voice",
      "generate": "Generate",
      "oneClickOneWavSpeedExpressivenessAndTashkeel": "One click gives you a ready-to-use WAV file. Control over speed, expressive delivery and Fusha diacritics is included in your account.",
      "realProductScreenTheTextToSpeechStudio": "Actual product interface: the Text to Speech studio",
      "voices": "Voices",
      "everyVoiceIsFromSomewhere": "Every voice is from somewhere",
      "eachOneIsRecordedByANativeSpeaker": "Each one is recorded by a native speaker and tuned on how that dialect actually flows. Click a planet to hear it.",
      "browseTheVoiceLibrary": "Browse the Voice Library",
      "comingSoon": "Coming Soon",
      "playSample": "▶ Play sample",
      "couldNotPlayThisSample": "Could not play this sample.",
      "couldNotLoadVoices": "Could not load voices.",
      "expressiveTags": "Expressive tags",
      "tagsThatSpeakTheDialect": "Expressions spoken in the same dialect",
      "typeATagInsideTheSentenceAndThe": "Write a tag within the sentence and the voice performs it. An expression",
      "inEmiratiDoesNotSoundLikeA": "in Emirati does not sound like a",
      "inEgyptianSoEachTagIsTrainedPer": "in Egyptian. Each tag is trained specifically for each dialect, rather than borrowed from Fusha or English.",
      "allTags": "All tags",
      "insideTheTextInBrackets": "Inside the text, in brackets",
      "noPanelNoMarkupLanguageWrite": "No panel, no markup language. Write",
      "or": "or",
      "whereItHappensAndKeepWriting": "where it happens and keep writing.",
      "perDialect": "Per dialect",
      "performedTheWayALocalWould": "Performed the way a local would",
      "theSameTagSixDifferentPerformancesPickThe": "The same tag, six different performances. Pick the dialect and the tag follows.",
      "whereItGoes": "Where it goes",
      "ivrMediaEchoreaderDubbing": "IVR, media, EchoReader, dubbing",
      "theSameVoiceOnThePhoneLineIn": "The same voice on the phone line, in a video, in a document read aloud, or laid over a film.",
      "developers": "Developers",
      "oneCallAudioBack": "One call. Audio back",
      "sendTextGetAStreamPickTheVoice": "Send the text and voice ID and receive a WAV file in the selected dialect. Each request supports up to 5,000 characters.",
      "apiReference": "API reference",
      "sdks": "SDKs",
      "builtInTheUaeYourTextAndAudio": "Built in the UAE. Your text and audio stay in the UAE.",
      "remove": "Remove "
    },
    "voiceLibrary": {
      "voiceLibrary": "Voice Library",
      "everyVoiceHasAHometown": "Every voice has a hometown",
      "twentyVoicesTodayAcrossTenWaysOfSpeaking": "Twenty voices available now, across eleven ways of speaking: eight Arabic dialects, plus Fusha and American and British English. Each voice was recorded by a speaker from its own community. Choose one, listen and use it.",
      "browseTheLibrary": "Browse the library",
      "signUp": "Sign up",
      "voicesToday": "voices today",
      "waysOfSpeaking": "ways of speaking",
      "hear": "Hear ",
      "stop": "Stop",
      "orHearOneAtRandom": "Or hear one at random",
      "thisSampleIsnTPubliclyAvailableYet": "This sample isn’t publicly available yet.",
      "theAudioCouldNotPlayPleaseTryAgain": "The audio could not play. Please try again.",
      "theLibrary": "The library",
      "twentyVoicesByWhereTheyComeFrom": "Twenty voices, by where they come from",
      "oneListClickARowToHearIt": "One list. Click a row to hear it.",
      "searchAName": "Search a name",
      "soon": "soon",
      "playing": "Playing",
      "comingSoon": "coming soon",
      "beingRecordedNowTheFirstVoicesLandHere": "Being recorded now. The first voices land here when they are ready.",
      "noVoiceByThatNameYet": "No voice by that name yet.",
      "aGame": "A game",
      "guessTheDialect": "Guess the dialect",
      "fiveVoicesFiveGuessesEachOneSaysThe": "Five voices and five guesses. Each voice says the same sentence in its own dialect; your task is to identify where it comes from. Most people from the region get four out of five. Systems that support Arabic get none, because they treat them all as one language.",
      "round": "round",
      "of5": "of 5",
      "playTheVoice": "Play the voice",
      "right": "Right.",
      "notThisTime": "Not this time.",
      "pressPlayThenSayWhereThisVoiceIs": "Press play, then say where this voice is from.",
      "stop2": "■ Stop",
      "playTheVoice2": "▶ Play the voice",
      "listenThenPickADialect": "Listen, then pick a dialect",
      "nextVoice": "Next voice →",
      "seeYourScore": "See your score →",
      "everyDialectHasItsOwnVoiceKeepListening": "Every dialect has its own voice. Keep listening.",
      "playAgain": "Play again",
      "whereTheyComeFrom": "Where they come from",
      "voiceDialectsAcrossTheRegionDashedLabelsIndicate": "Voice dialects across the region. Dashed labels indicate coming soon.",
      "voiceCloning": "Voice Cloning",
      "chooseAnAudioFileUpTo10Mb": "Choose an audio file up to 10 MB.",
      "startOver": "Start over",
      "signUp2": "Sign up →",
      "voicesFromThePeopleWhoOwnThem": "Voices from the people who own them",
      "realPeopleTheirVoiceStaysTheirs": "Real people. Their voice stays theirs",
      "noScrapedAudioEveryVoiceInTheLibrary": "We do not use recordings scraped from the internet. Every voice in the library was recorded by someone from its own community under a signed agreement, and its owner retains the rights. Whenever you use the voice here, its owner is paid. Want to add your voice to the library? Use Voice Cloning.",
      "recorded": "Recorded",
      "aPersonInARoomInTheirDialect": "A person, in a room, in their dialect",
      "notADatasetSomeoneFromSharjahJeddahKuwait": "Not a dataset, but voices of people from Sharjah, Jeddah, Kuwait and Cairo, professionally recorded and speaking as they do at home.",
      "agreed": "Agreed",
      "signedScopedTheirs": "Signed, scoped, theirs",
      "aWrittenAgreementSaysWhatTheVoiceMay": "A written agreement says what the voice may be used for. The person can see where it is used and can withdraw it.",
      "paid": "Paid",
      "usedHerePaidThere": "Used here, paid there",
      "whenAVoiceIsUsedItsOwnerEarns": "Whenever a voice is used, its owner earns from it. Ongoing income from their voice, not a one-time payment.",
      "developers": "Developers",
      "listThemPickOneSpeak": "List them. Pick one. Speak",
      "theLibraryIsAnEndpointFilterByDialect": "The library is an endpoint. List the voices, take a voice id, hand it to Text to Speech or to a Sada agent.",
      "apiReference": "API reference",
      "sdks": "SDKs",
      "builtInTheUaeYourAudioStaysIn": "Built in the UAE. Your audio stays in the UAE.",
      "voice": "voice",
      "voices": "voices",
      "clone": {
        "kicker": "Voice Cloning",
        "title": "Your voice, in a few seconds",
        "lead": "Clone your voice with only a few seconds of audio.",
        "back": "Back",
        "bar": {
          "record": "Instant",
          "confirm": "Confirm it is you",
          "making": "Making your voice",
          "ready": "Your voice",
          "fewSeconds": "A few seconds"
        },
        "readThis": "Read this out loud",
        "sayThis": "Say this out loud",
        "eachDigit": "Say each digit.",
        "why": "Only the person who says the code can clone this voice.",
        "newCode": "New code",
        "record": "Record",
        "stop": "Stop",
        "dialect": "Dialect",
        "dialectsError": "Could not load the dialects.",
        "retry": "Try again",
        "cloneVoice": "Clone voice",
        "status": {
          "fewSeconds": "A few seconds of you",
          "recording": "Recording",
          "tooShort": "Keep going, at least 10 seconds",
          "ready": "Ready to clone",
          "sayPhrase": "Say the phrase"
        },
        "orb": {
          "yourVoice": "Your voice",
          "listening": "Listening",
          "ready": "Ready to clone",
          "notConfirmed": "Not confirmed yet",
          "making": "Making your voice"
        },
        "making": "Making your voice",
        "done": "This is you. Press Play to hear your voice.",
        "play": "Play",
        "pause": "Pause",
        "signUp": "Create free account",
        "deletedSoon": "This voice will be deleted within 1 day.",
        "privacy": "Your voice is used once to make this sample, then deleted within 1 day.",
        "errors": {
          "off": "Live voice cloning opens soon.",
          "ip_limit": "You've used today's voice clone. The demo allows one a day. Try again tomorrow.",
          "mismatch": "That was not clear. Say the new code.",
          "expired": "That code ran out. Say the new code.",
          "speaker": "The two recordings are not the same person. Go back and record again.",
          "not_live": "We could not confirm it is you. Try again.",
          "length": "Record again: 10 to 30 seconds for your voice, 3 to 10 for the code.",
          "mic": "Allow the microphone to record.",
          "failed": "Something went wrong. Try again in a minute."
        }
      }
    },
    "why": {
      "whyEchonova": "Why EchoNova",
      "understoodNotProcessed": "Understood, not processed",
      "mostVoiceSystemsHearArabicAndDoNot": "Most voice systems hear Arabic and do not understand it. Fusha, perhaps. The dialect, which is how people actually speak, is lost on the way. EchoNova was built from the dialect up, starting with Emirati.",
      "requestADemo": "Request a demo",
      "tryItLive": "Try it live",
      "theCallerEmirati": "The caller · Emirati",
      "aSystemThatSupportsArabic": "A system that “supports Arabic”",
      "hearsTheLetters": "Hears the letters",
      "echonova": "EchoNova",
      "hearsTheDialect": "Hears the dialect",
      "heardAs": "Heard as",
      "understoodEmiratiArAe": "Understood · Emirati · ar-AE",
      "sadaRepliesEmirati": "Sada replies · Emirati",
      "playItAgain": "Play it again",
      "resumeAnimation": "Resume animation",
      "pauseAnimation": "Pause animation",
      "theDot": "The dot",
      "oneDotChangesTheMeaning": "One dot changes the meaning",
      "inArabicOneDotTurnsInkIntoNews": "In Arabic, one dot turns ink into news: حبر becomes خبر. The dialect is the dot of speech. A system that “supports Arabic” hears the letters and drops the dot: right words, wrong meaning. EchoNova is built to catch the dot: the dialect, the context, the tone.",
      "takeTheDotAway": "Take the dot away",
      "addTheDot": "Add the dot",
      "news": "news",
      "ink": "ink",
      "spotTheDot": "Spot the dot ",
      "round1Of3": "round 1 of 3",
      "listenThenPickTheWordYouHeard": "Listen, then pick the word you heard",
      "twoWordsOneDotApartSaidInEmirati": "Two words. One dot apart. Said in Emirati.",
      "playTheSample": "Play the sample",
      "thisSampleIsnTPubliclyAvailableYet": "This sample isn’t publicly available yet.",
      "score": "Score",
      "dotGame": {
        "roundOf": "round {{round}} of 3",
        "playing": "Playing…",
        "playAgain": "Play it again",
        "sampleSoon": "Sample coming soon",
        "pickWithoutSample": "The recording is on its way. Pick the word you think was said.",
        "whichOne": "Which one was it?",
        "playFirst": "Play the sample first.",
        "caught": "Yes. You caught the dot",
        "missed": "Not this time. One dot, other word",
        "answer": "{{word}} · {{meaning}}. The other word was one dot away.",
        "nextRound": "Next round →",
        "seeScore": "See your score →",
        "endAll": "Every dot has a sound you hear, but most systems do not.",
        "endTwo": "Two out of three. The dot is small.",
        "endLow": "The dot is small. That is the whole point.",
        "restart": "Play again",
        "house": "house",
        "girl": "girl",
        "camel": "camel",
        "lamb": "lamb"
      },
      "builtFromTheDialectUp": "Built from the dialect up",
      "fushaIsOneWayOfSpeakingNotThe": "Fusha is one way of speaking, not the default choice.",
      "otherSystemsStartFromFushaAndPatchThe": "Other systems start from Fusha and patch the dialect on top. We start where people speak, and build upward from there.",
      "03EverythingYouUse": "03 · Everything you use",
      "02TheUnitWeBuildIn": "02 · The unit we build in",
      "emirati": "Emirati",
      "thenSaudiKuwaitiEgyptianFushaEnglishFourMore": "then Saudi, Kuwaiti, Egyptian, Fusha, and American and British English, with four more dialects to come",
      "01OnePersonInTheRoomTheySpeak": "01 · One person, speaking in their natural environment",
      "recordedAgreedInWritingPaidWhenUsed": "Recorded. Agreed in writing. Paid when used.",
      "whyWeExist": "Why we exist",
      "theProblemWasNeverOurVoicesItWas": "The problem was never our voices. It was the systems that were not built for us.",
      "beforeYouSign": "Before you sign",
      "threeQuestionsAnsweredPlainly": "Three questions, answered plainly",
      "builtInTheUaeYourAudioStaysIn": "Developed in the UAE. Your audio recordings stay here.",
      "peopleWhoOwnTheirVoices": "People who own their voices",
      "recordedInTheRoomTheySpeakInAgreed": "Every voice was recorded in its natural environment with written consent, and its owner is paid whenever it is used. Not just a dataset.",
      "theDialectIsTheUnit": "The dialect is the unit",
      "emiratiFirstThenSaudiKuwaitiAndEgyptianWith": "Emirati first. Then Saudi, Kuwaiti and Egyptian, with Fusha and American and British English beside them as three of eleven ways of speaking. Four more on the way.",
      "everythingYouUseSitsOnTop": "Everything you use sits on top",
      "sadaSpeechToTextTextToSpeechAnd": "Sada, Speech to Text, Text to Speech and Sound Cleaning all draw from the same base. Improve the base, and every product hears better.",
      "whereDoesTheAudioGo": "Where does the audio go?",
      "itStaysInTheUaeProcessingStorageAnd": "It stays in the UAE. Processing, storage and the models themselves run here. Nothing is sent abroad to be understood.",
      "whatHappensWhenTheCallerSwitchesDialect": "What happens when the caller switches dialect?",
      "theSystemDetectsTheWayOfSpeakingAnd": "The system detects the way of speaking and follows it. Nobody is asked to press 1 for Arabic, and nobody is asked to speak Fusha.",
      "whoIsOnTheOtherEnd": "Who is on the other end?",
      "sadaAnswersAPersonCanTakeTheConversation": "Sada answers. A person can take the conversation whenever it needs one, with the transcript in front of them.",
      "sada": "Sada",
      "speechToText": "Speech to Text",
      "textToSpeech": "Text to Speech",
      "soundCleaning": "Sound Cleaning"
    },
    "research": {
      "us": "EchoNova",
      "hero": {
        "kicker": "Research · Technical report · October 2026",
        "title": "The most accurate model for Arabic dialects",
        "lead": [
          "We tested Sada-ASR, the speech recognition inside EchoNova, against eleven systems from Microsoft, ElevenLabs, Google and others, on the same 120 hours of real Arabic speech. It made the fewest mistakes."
        ],
        "paper": {
          "label": "Read the paper",
          "meta": "PDF · 10 pages"
        },
        "testSet": {
          "label": "Test set",
          "meta": "Hugging Face"
        },
        "code": {
          "label": "Scoring code",
          "meta": "GitHub"
        },
        "meta": [
          {
            "label": "Published",
            "value": "October 2026"
          },
          {
            "label": "Systems tested",
            "value": "12"
          },
          {
            "label": "Audio",
            "value": "120 hours · 53,597 clips"
          },
          {
            "label": "Varieties",
            "value": "Fusha + 8 dialects"
          }
        ]
      },
      "result": {
        "kicker": "The result",
        "title": "Fewer wrong words than any system we tested",
        "body": "Word error rate is the share of words a system gets wrong. Every system heard the same audio and was scored the same way.",
        "chartTitle": "Word error rate",
        "chartScale": "Each dot is one wrong word in 100 · lower is better",
        "note": "Measured by EchoNova, 13 to 16 October 2026 · All 12 systems and per-dialect tables in the paper"
      },
      "plain": {
        "kicker": "In plain words",
        "title": "What we did, and how to read it",
        "steps": [
          {
            "title": "What we measured",
            "body": [
              "How often each system writes a word wrong. Sada-ASR's 11.69% means about 12 wrong words in every 100. The next best system, Microsoft's, gets about 14 wrong."
            ]
          },
          {
            "title": "How we kept it fair",
            "body": [
              "Every system heard the same 53,597 clips, was scored by the same code and was run by us in the same week. None of the test audio was used to train Sada-ASR."
            ]
          },
          {
            "title": "Where we lost",
            "body": [
              "On Lebanese Arabic, Microsoft makes fewer word errors than we do, and on Syrian we are level. We show it because a test we never lose is not worth trusting."
            ]
          }
        ]
      },
      "dialects": {
        "kicker": "By dialect",
        "title": "First on 7 of 9 Arabic varieties",
        "body": "Sada-ASR's word error rate in each variety, next to the strongest other system.",
        "tiles": [
          {
            "name": "Fusha",
            "tag": "1st",
            "vs": ["next best Microsoft 6.99%"]
          },
          {
            "name": "Egyptian",
            "tag": "1st",
            "vs": ["next best Microsoft 13.26%"]
          },
          {
            "name": "Saudi",
            "tag": "1st",
            "vs": ["next best Microsoft 16.93%"]
          },
          {
            "name": "Emirati",
            "tag": "1st",
            "vs": ["next best Microsoft 20.22%"]
          },
          {
            "name": "Kuwaiti",
            "tag": "1st",
            "vs": ["next best Microsoft 14.83%"]
          },
          {
            "name": "Qatari",
            "tag": "1st",
            "vs": ["next best Microsoft 17.02%"]
          },
          {
            "name": "Omani",
            "tag": "1st",
            "vs": ["next best Microsoft 20.37%"]
          },
          {
            "name": "Syrian",
            "tag": "Level",
            "vs": ["level with Microsoft 19.98%"]
          },
          {
            "name": "Lebanese",
            "tag": "2nd",
            "vs": ["behind Microsoft 23.05%"]
          }
        ],
        "fullTitle": "Every dialect, every system",
        "wer": "Word error rate",
        "cer": "Character error rate",
        "fullBody": "All ten systems we ran, in every variety. Darker cells mean more errors. Rows are ordered by overall word error rate.",
        "columns": [
          "All",
          "Fusha",
          "Egyptian",
          "Saudi",
          "Emirati",
          "Kuwaiti",
          "Qatari",
          "Omani",
          "Syrian",
          "Lebanese"
        ],
        "legend": {
          "best": "Best system in that dialect",
          "tie": "Level, inside the margin of error",
          "fewer": "Fewer errors",
          "more": "More errors"
        },
        "footnote": "Lebanese is our one loss, 1.91 points behind Microsoft. Syrian is a tie. By character error rate, Sada-ASR is lowest in all nine varieties. Full tables, including systems not shown here, are in the paper."
      },
      "built": {
        "kicker": "How we built it",
        "title": "People who speak the dialect, checking every word",
        "body": "Dialects have no standard spelling and few written transcripts. So we built our own annotation platform, with native speakers from across the Arab world at every step.",
        "steps": [
          {
            "title": "100+ annotators",
            "body": "In-house native speakers transcribe the audio, word for word, in their own dialect."
          },
          {
            "title": "Reviewers",
            "body": "A second layer reviews and audits every submission before it counts."
          },
          {
            "title": "Experts",
            "body": "Professional writers and domain specialists settle the hardest cases."
          },
          {
            "title": "Hidden checks",
            "body": "Control and duplicate samples measure every annotator, then are removed before training."
          }
        ]
      },
      "public": {
        "kicker": "Public test sets",
        "title": "Also first on the six public Arabic test sets",
        "body": [
          "The Open Universal Arabic ASR Leaderboard uses six public test sets. We scored Sada-ASR on them with the leaderboard's own code. Other rows are figures their makers published, so the comparison is indicative."
        ],
        "columns": {
          "system": "System",
          "wer": "Average word error rate",
          "source": "Source"
        },
        "usName": "EchoNova Sada-ASR",
        "usNote": "Measured by EchoNova",
        "sources": [
          "This report",
          "Published by TII",
          "Published by IFM",
          "Leaderboard",
          "Measured by IFM",
          "Measured by IFM"
        ]
      },
      "method": {
        "kicker": "Method",
        "title": "For engineers",
        "items": [
          {
            "title": "The test set",
            "body": [
              "120 hours in 53,597 clips of at most 30 seconds, cut from 14,686 source recordings: Fusha (Modern Standard Arabic) and eight dialects, Egyptian, Emirati, Saudi, Kuwaiti, Qatari, Omani, Syrian and Lebanese. Each variety contributes a fixed number of hours. No clip of this set, and no part of the six public test splits, was used to train or select Sada-ASR."
            ]
          },
          {
            "title": "Scoring",
            "body": [
              "Word and character error rates are corpus micro-averages: total edit distance divided by total reference length. Hypotheses and references are normalized identically: punctuation and diacritics removed, hamza and madda forms of alif folded, Eastern Arabic digits mapped to Western, word-final taa marbuta folded into haa. Numbers are not converted between digits and words."
            ]
          },
          {
            "title": "Confidence",
            "body": [
              "Margins carry 95% confidence intervals from 2,000 bootstrap resamples of source recordings. Sada-ASR's lead over Microsoft MAI-Transcribe-2 is 1.83 points (95% CI 1.72 to 1.93). The paper also reports the margin on clips where Microsoft's fixed number and script conventions do not apply."
            ]
          },
          {
            "title": "Systems and settings",
            "body": [
              "Every API was set to Arabic and to verbatim output where possible. No system, ours included, used contextual biasing, custom vocabulary or any other adaptation. Every run is dated, and raw outputs are stored so every figure can be recomputed without re-running a recognizer."
            ]
          },
          {
            "title": "Model",
            "body": [
              "Sada-ASR is an attention-based encoder-decoder: a Conformer encoder turns audio into acoustic representations and a Transformer decoder writes the transcript. It is decoded with plain greedy search on every test set, with no decode-time tuning."
            ]
          }
        ]
      },
      "rerun": {
        "kicker": "Check it yourself",
        "title": "Everything you need to rerun it",
        "paper": {
          "kind": "Paper · PDF",
          "title": "Sada-ASR technical report",
          "body": "Data pipeline, method, full results for 12 systems and the error analysis.",
          "action": "Download →"
        },
        "dataset": {
          "kind": "Dataset · Hugging Face",
          "title": "20-hour public test set",
          "body": "The public release: 8,925 clips across all nine varieties with reference transcripts. Results on this page use the full 120-hour set. Research use, gated access.",
          "action": "Open →"
        },
        "code": {
          "kind": "Code · GitHub",
          "title": "Scoring and normalization",
          "body": "The exact code behind every number on this page. Apache 2.0.",
          "action": "Open →"
        },
        "copy": "Copy"
      },
      "media": {
        "kicker": "For media",
        "title": "The facts, ready to quote",
        "facts": [
          [
            "Sada-ASR made ",
            "the fewest word errors",
            " of 12 speech recognition systems tested on Arabic."
          ],
          [
            "It got ",
            "about 12 words wrong in 100",
            ", against about 14 for the next best system."
          ],
          [
            "It came ",
            "first on 7 of 9",
            " Arabic varieties, from Fusha to Gulf, Egyptian and Levantine dialects."
          ],
          [
            "Built in the UAE, trained on speech transcribed by ",
            "more than 100 native speakers",
            "."
          ]
        ],
        "press": "Press enquiries",
        "questions": "Questions",
        "faq": [
          {
            "q": "What is word error rate?",
            "a": "The share of words a system writes wrong: swapped, missed or added. Lower is better. 10% means one wrong word in ten."
          },
          {
            "q": "Why are Arabic dialects hard?",
            "a": "People speak dialect, but most written Arabic is Fusha. Dialects have no standard spelling, mix in English and differ from country to country, so systems trained mainly on Fusha miss words people actually say."
          },
          {
            "q": "Who checked these results?",
            "a": "We ran every system ourselves, dated every run and published the test set and scoring code so anyone can rerun them. Independent reproductions are welcome."
          },
          {
            "q": "Can I try it on my own audio?",
            "a": "Yes. Sign up and use Speech to Text in the playground, or talk to us about a pilot."
          }
        ]
      }
    },
    "carouselSlides": [
      {
        "src": "/releases/555cbab2b8be71512969/images/landing-v2/carousel/12_dubai_skyline_zabeel_4K.webp",
        "eyebrow": "Sovereign Arabic voice AI",
        "title": "Developed in the UAE to speak the language of the region.",
        "description": "Try Speech to Text, Text to Speech and Sound Cleaning, or talk to us about Sada for your contact centre.",
        "alt": "Dubai skyline"
      },
      {
        "src": "/releases/555cbab2b8be71512969/images/landing-v2/carousel/06_airline_dxb_4K.webp",
        "eyebrow": "Sada for airlines",
        "title": "Every flight change starts with understanding the request.",
        "description": "A voice agent that hears the dialect, confirms the details and acts within its authority.",
        "alt": "Aircraft at Dubai airport"
      },
      {
        "src": "/releases/555cbab2b8be71512969/images/landing-v2/carousel/07_bank_hq_4K.webp",
        "eyebrow": "Sada for banking",
        "title": "Clear conversations. Controlled actions.",
        "description": "Understand the customer intent and hand the conversation to a person at any point.",
        "alt": "Bank headquarters in the UAE"
      },
      {
        "src": "/releases/555cbab2b8be71512969/images/landing-v2/carousel/10_hospital_reception_4K.webp",
        "eyebrow": "Sada for healthcare",
        "title": "The patient is understood the first time.",
        "description": "Arabic appointment and service requests with a clear confirmation.",
        "alt": "Hospital reception"
      }
    ],
    "pageCopy": {
      "sada": {
        "eyebrow": "Sada · the agent",
        "title": "Sada answers. In your dialect.",
        "description": "An Arabic-native agent for calls and messages. It understands the person, acts inside the authority you grant, confirms every value, and hands off to your team when it should."
      },
      "tts": {
        "eyebrow": "Text to Speech",
        "title": "Arabic that sounds like a person, not a machine.",
        "description": "Type the words, pick a voice from the region and control how the line is delivered."
      },
      "stt": {
        "eyebrow": "Speech to Text",
        "title": "Written the way it was said.",
        "description": "Every dialect, transcribed as it was spoken, with a transcript ready to use."
      },
      "cleaning": {
        "eyebrow": "Sound Cleaning",
        "title": "Hear the words, not the room.",
        "description": "Remove noise and echo while keeping the speaker clear."
      },
      "voices": {
        "eyebrow": "Voice Library",
        "title": "Every voice has a hometown.",
        "description": "Browse voices by where they come from and listen to their real samples."
      },
      "why": {
        "eyebrow": "Why EchoNova",
        "title": "Understood, not processed.",
        "description": "Most voice systems hear Arabic and do not understand it. EchoNova was built from the dialect up, starting with Emirati."
      },
      "research": {
        "eyebrow": "Research",
        "title": "The most accurate model for Arabic dialects.",
        "description": "We tested Sada-ASR, the speech recognition inside EchoNova, against eleven systems from Microsoft, ElevenLabs, Google and others, on the same 120 hours of real Arabic speech. It made the fewest mistakes."
      },
      "developers": {
        "eyebrow": "Developers",
        "title": "Two services. Nine endpoints. One envelope.",
        "description": "Use the current documentation and API contracts to add EchoNova speech services to your product."
      },
      "pricing": {
        "eyebrow": "Pricing",
        "title": "Simple plans. Arabic-first. No surprises.",
        "description": "Plans, limits and prices come from EchoNova plan data, with a complete fallback when the API returns no plans."
      },
      "about": {
        "eyebrow": "About EchoNova",
        "title": "Understood, not processed.",
        "description": "Arabic voice intelligence built from the dialect up, in the UAE."
      },
      "trust": {
        "eyebrow": "Trust Center",
        "title": "Trust and safety, in plain words.",
        "description": "How EchoNova protects your data, how we treat every voice, and the policies we publish."
      }
    },
    "pageSections": {
      "sada": [
        {
          "kicker": "How Sada works",
          "title": "Sada listens, understands, acts within the authority you grant, confirms, and hands off.",
          "items": [
            {
              "title": "01 · Listen",
              "text": "Receives the customer request in the dialect they use."
            },
            {
              "title": "02 · Understand",
              "text": "Keeps the intent, dialect and conversation context together."
            },
            {
              "title": "03 · Act",
              "text": "Uses only the tools and actions you approve."
            },
            {
              "title": "04 · Confirm",
              "text": "Repeats consequential values before anything changes."
            },
            {
              "title": "05 · Hand over",
              "text": "A person can take over at any point."
            }
          ]
        },
        {
          "kicker": "Industries",
          "title": "Where Arabic voice actually gets spoken.",
          "description": "The same models behind Sada, tuned for the places a caller expects to be understood the first time.",
          "items": [
            {
              "title": "Airlines",
              "text": "Bookings, changes and flight information."
            },
            {
              "title": "Banking",
              "text": "Account requests with controlled actions."
            },
            {
              "title": "Government",
              "text": "Clear routes through public services."
            },
            {
              "title": "Healthcare",
              "text": "Appointments and supported patient requests."
            },
            {
              "title": "Telecom",
              "text": "Plans, support and service changes."
            },
            {
              "title": "Media",
              "text": "Interactive Arabic audience experiences."
            }
          ]
        },
        {
          "kicker": "Your own Sada",
          "title": "Persona, dialect, voice, knowledge, tools.",
          "description": "Configure how the agent sounds, what it knows, which tools it can use and when it must hand over."
        }
      ],
      "tts": [
        {
          "kicker": "Voices",
          "title": "Every voice is from somewhere.",
          "description": "Each available voice is tied to its language and dialect. Listen to the real samples before choosing."
        },
        {
          "kicker": "Expression",
          "title": "Tags that speak the dialect.",
          "description": "Guide delivery with the supported expressive controls while keeping the words and dialect intact.",
          "items": [
            {
              "title": "Pace",
              "text": "Control how quickly the line is delivered."
            },
            {
              "title": "Expression",
              "text": "Shape supported delivery styles."
            },
            {
              "title": "Consistency",
              "text": "Keep the selected voice across a complete message."
            }
          ]
        },
        {
          "kicker": "API",
          "title": "One call. Audio back.",
          "description": "Send text with a selected voice and delivery settings, then receive the generated audio through the current API contract.",
          "tone": "paper"
        },
        {
          "kicker": "Security & sovereignty",
          "title": "Built in the UAE. Your text and audio stay in the UAE."
        }
      ],
      "stt": [
        {
          "kicker": "Dialects",
          "title": "Trained from the dialect up.",
          "description": "Each supported dialect is treated as its own speech track so the words people use return as usable text."
        },
        {
          "kicker": "Output",
          "title": "A transcript you can use, not fix.",
          "items": [
            {
              "title": "Editable text",
              "text": "Review and use the transcript in the same workflow."
            },
            {
              "title": "Speaker context",
              "text": "Keep turns and conversation structure legible."
            },
            {
              "title": "Timing",
              "text": "Use timing data where the current response provides it."
            }
          ]
        },
        {
          "kicker": "Where it goes",
          "title": "Three places the words matter.",
          "items": [
            {
              "title": "Contact centres",
              "text": "Search and review customer conversations."
            },
            {
              "title": "Content teams",
              "text": "Turn recordings into working text."
            },
            {
              "title": "Product workflows",
              "text": "Pass speech results into your own systems."
            }
          ]
        },
        {
          "kicker": "API",
          "title": "Audio in. Words, speakers and time out.",
          "description": "Use the maintained Speech to Text endpoint for synchronous or job-based transcription.",
          "tone": "paper"
        },
        {
          "kicker": "Security & sovereignty",
          "title": "Built in the UAE. Your audio and transcripts stay in the UAE."
        }
      ],
      "cleaning": [
        {
          "kicker": "Controls",
          "title": "Presets for everyone. Parameters for the ones who care.",
          "description": "Start with a preset, then use the controls available in the studio when a recording needs more precise treatment."
        },
        {
          "kicker": "Presets",
          "title": "Four presets. One button.",
          "items": [
            {
              "title": "Studio Master",
              "text": "A balanced clean-up for general recordings."
            },
            {
              "title": "Heavy AC & Wind",
              "text": "For strong steady background noise."
            },
            {
              "title": "Radio Voice",
              "text": "A focused voice-forward result."
            },
            {
              "title": "Deep Voice",
              "text": "Preserves weight while cleaning the signal."
            }
          ]
        },
        {
          "kicker": "Clean first",
          "title": "Everything after it works better.",
          "description": "Sound Cleaning sits before transcription, generation review and publishing in the same workspace."
        },
        {
          "kicker": "Workflow",
          "title": "One file in. A clean one out.",
          "description": "Upload a supported file, apply the clean-up, compare the result and export.",
          "tone": "paper"
        },
        {
          "kicker": "Security & sovereignty",
          "title": "Built in the UAE. Your audio stays in the UAE."
        }
      ],
      "voices": [
        {
          "kicker": "The library",
          "title": "Voices, by where they come from.",
          "description": "Browse the voices currently returned by EchoNova and play their real samples."
        },
        {
          "kicker": "Listen",
          "title": "Guess the dialect.",
          "description": "Listen first, then compare the dialect shown for the selected voice.",
          "items": [
            {
              "title": "Emirati",
              "text": "A voice rooted in the UAE."
            },
            {
              "title": "Saudi",
              "text": "A voice recorded for Saudi delivery."
            },
            {
              "title": "Kuwaiti",
              "text": "A voice tuned for Kuwaiti speech."
            }
          ]
        },
        {
          "kicker": "Voice cloning",
          "title": "Add your own voice.",
          "description": "Create a voice for an approved speaker with clear consent, scope and ownership."
        },
        {
          "kicker": "Ownership",
          "title": "Real people. Their voice stays theirs.",
          "description": "Voices are connected to the people who recorded them and to the permissions that govern their use."
        },
        {
          "kicker": "API",
          "title": "List them. Pick one. Speak.",
          "description": "Fetch available voices, select an id and use it with Text to Speech.",
          "tone": "paper"
        },
        {
          "kicker": "Security & sovereignty",
          "title": "Built in the UAE. Your audio stays in the UAE."
        }
      ],
      "developers": [
        {
          "kicker": "Endpoints",
          "title": "Nine endpoints, all under /v1.",
          "description": "Text to Speech and Speech to Text expose synchronous requests, asynchronous jobs and voice discovery through one versioned API."
        },
        {
          "kicker": "First request",
          "title": "Start with the voices. It costs nothing.",
          "description": "List the available voices, choose an id, then make a generation request."
        },
        {
          "kicker": "Responses",
          "title": "One shape, every time.",
          "description": "Successful results and failures use stable response structures so clients can handle them consistently."
        },
        {
          "kicker": "Text to Speech",
          "title": "Six fields. One WAV file.",
          "description": "Send text, voice and supported delivery options through the maintained contract."
        },
        {
          "kicker": "Speech to Text",
          "title": "One file part. One transcript.",
          "description": "Upload a supported audio file and read the transcript from the response."
        },
        {
          "kicker": "Jobs",
          "title": "Hold the connection, or get a job id.",
          "description": "Use synchronous calls for short work and asynchronous jobs when the request should finish in the background."
        },
        {
          "kicker": "Webhooks",
          "title": "Four events, one signature.",
          "description": "Verify signed events before updating your system."
        },
        {
          "kicker": "Billing",
          "title": "Priced before it runs. Refunded if it fails.",
          "description": "Review the current credit rules in the maintained developer documentation."
        },
        {
          "kicker": "Errors",
          "title": "When it fails, it says why.",
          "description": "Use the status and error message to decide whether to fix, retry or stop."
        },
        {
          "kicker": "Versioning",
          "title": "v1, dated.",
          "description": "Follow the changelog and versioned contracts when integrating."
        },
        {
          "kicker": "Security & sovereignty",
          "title": "Built in the UAE. Your audio stays in the UAE."
        }
      ],
      "pricing": [
        {
          "kicker": "How billing works",
          "title": "Priced before it runs. Refunded if it fails.",
          "items": [
            {
              "title": "Know the cost",
              "text": "The selected plan and service determine the credit cost."
            },
            {
              "title": "Use one balance",
              "text": "Speech services share the workspace billing model."
            },
            {
              "title": "Failed work",
              "text": "Failed metered work follows the current refund rules."
            }
          ]
        },
        {
          "kicker": "Security & sovereignty",
          "title": "Built in the UAE. Your audio stays in the UAE."
        }
      ],
      "about": [
        {
          "kicker": "The name",
          "title": "A star that flares. A light that comes back.",
          "description": "EchoNova combines the return of an echo with the light of a nova."
        },
        {
          "kicker": "The dot",
          "title": "حبر becomes خبر with one dot.",
          "description": "Small details change meaning. Arabic voice systems need the dialect, context and tone around the letters."
        },
        {
          "kicker": "The principle",
          "title": "A voice layer owned by the people it belongs to.",
          "description": "Consent, clear scope and identifiable voices belong in the product experience."
        },
        {
          "kicker": "Products",
          "title": "One layer, four doors.",
          "items": [
            {
              "title": "Sada",
              "text": "Agents that understand and act."
            },
            {
              "title": "Speech to Text",
              "text": "Spoken Arabic into usable text."
            },
            {
              "title": "Text to Speech",
              "text": "Text delivered in a selected voice."
            },
            {
              "title": "Sound Cleaning",
              "text": "Clearer audio for every next step."
            }
          ]
        },
        {
          "kicker": "Home",
          "title": "Built in the UAE.",
          "description": "Built for the way the region speaks and for the systems used here."
        },
        {
          "kicker": "Team",
          "title": "The people behind the echo.",
          "description": "A product team working across speech, language, software and customer experience."
        },
        {
          "kicker": "Contact",
          "title": "Talk to a person.",
          "description": "Bring a voice workflow, integration or deployment question to the EchoNova team."
        },
        {
          "kicker": "Careers",
          "title": "Work on the dot.",
          "description": "Help build Arabic voice products where details carry meaning."
        }
      ]
    },
    "planNames": {
      "Starter": "Starter",
      "Professional": "Professional",
      "Organization": "Organization",
      "Enterprise": "Enterprise",
      "Free": "Free",
      "Creator": "Creator",
      "Pro": "Pro",
      "Business": "Business"
    },
    "common": {
      "products": "Products",
      "fourWaysToWorkWithArabicVoice": "Four ways to work with Arabic voice",
      "oneLoginOneLibraryAndOneConnectedWorkspace": "One login, one library and one connected workspace.",
      "readTheCurrentResource": "Read the current resource",
      "soundCleaning": "Sound Cleaning",
      "comingSoon": "Coming Soon",
      "sada": "Sada",
      "inbound0041": "Inbound · 00:41",
      "liveCall": "● Live call",
      "voiceKeptWhole": "VOICE KEPT WHOLE",
      "studioMaster": "Professional studio processing",
      "theDefault": "The default",
      "podcastsVoiceOversInterviewsRemovesHissAndRoom": "Podcasts, voice-overs, interviews. Removes hiss and room tone, leaves everything human.",
      "acWindTraffic": "AC · WIND · TRAFFIC",
      "heavyAcWind": "Heavy AC & Wind",
      "outdoorsAndOpenOffices": "Outdoors and open offices",
      "airConditioningWindOnTheMicTrafficBehind": "Air conditioning, wind on the mic, traffic behind a site interview.",
      "phoneLineOldTape": "PHONE LINE · OLD TAPE",
      "radioVoice": "Radio voice",
      "phoneLinesAndOldTape": "Phone lines and old tape",
      "narrowCracklingSourcesCallRecordingsArchiveCassettesRadio": "Narrow, crackling sources: call recordings, archive cassettes, radio pulls.",
      "lowVoicesKeptLow": "LOW VOICES, KEPT LOW",
      "deepVoice": "Deep Voice",
      "lowVoicesKeptLow2": "Low voices, kept low",
      "tunedSoADeepSpeakerDoesNotCome": "Tuned so a deep speaker does not come back thin after cleaning.",
      "cleanSpeechToText": "CLEAN → SPEECH TO TEXT",
      "beforeTranscription": "Before transcription",
      "fewerWrongWords": "Fewer wrong words",
      "aCleanFileGivesSpeechToTextA": "A cleaned file gives Speech to Text a clearer signal, turning noisy calls into accurate transcripts ready to use.",
      "cleanVoiceCloning": "CLEAN → VOICE CLONING",
      "beforeCloning": "Before cloning",
      "aCleanerReferenceVoice": "A cleaner reference voice",
      "voiceCloningLearnsFromWhatItHearsGive": "Voice Cloning learns from what it hears. Give it the voice, not the room.",
      "cleanPublish": "CLEAN → PUBLISH",
      "beforePublishing": "Before publishing",
      "fieldAudioStudioFinish": "Field audio, studio finish",
      "voiceNotesSiteVisitsMajlisRecordingsArchiveTape": "Voice notes, site visits, majlis recordings, archive tape. Publish them without apologising for the sound.",
      "baseUrl": "BASE URL",
      "echonovaTextToSpeechStudio": "EchoNova Text to Speech studio",
      "realProductScreensNotRendersTextToSpeech": "Real product screens, not renders: Text to Speech studio, Voices library and Sound Cleaning studio from dev.echonova.ai",
      "sadaAgent": "Sada Agent",
      "meetSada": "Meet Sada →",
      "textToSpeech": "Text to Speech",
      "openTextToSpeech": "Open Text to Speech →",
      "speechToText": "Speech to Text",
      "openSpeechToText": "Open Speech to Text →",
      "cleanRecordingsAndCompareTheResultBeforeExport": "Clean recordings and compare the result before export.",
      "openSoundCleaning": "Open Sound Cleaning →",
      "echonovaHighlights": "EchoNova highlights",
      "skipToContent": "Skip to content",
      "emiratiNot": "Emirati · not",
      "kuwaitiHowAreYou": "Kuwaiti · how are you",
      "everyDialect": "every dialect",
      "egyptianHowAreYou": "Egyptian · how are you",
      "saudiWhat": "Saudi · what",
      "gulfNow": "Gulf · now",
      "egyptianToday": "Egyptian · today",
      "allLetSGo": "all · let's go",
      "emiratiThen": "Emirati · then",
      "notCorrectedToFusha": "NO CONVERSION TO FUSHA",
      "asSaid": "AS SAID",
      "keptAsSaid": "Kept as said",
      "noSilentFushaCorrections": "No silent Fusha corrections",
      "stays": "stays",
      "theWordAPersonChoseIsTheWord": ". The word the speaker chose is the same word in the file.",
      "speaker1": "SPEAKER 1",
      "speaker2": "SPEAKER 2",
      "speakers": "Speakers",
      "whoSaidWhat": "Who said what",
      "callerAndAgentHostAndGuestTwoPeople": "Caller and agent, host and guest, two people in a meeting. Each turn carries its speaker, even when they overlap.",
      "timeAndExport": "Time and export",
      "everyWordHasATimestamp": "Every word has a timestamp",
      "jumpTheAudioFromTheTextExportAs": "Jump to the audio position from the text. Export as plain text, subtitles or JSON with a timestamp for every word.",
      "everyCallWritten": "EVERY CALL, WRITTEN",
      "contactCentres": "Contact centres",
      "everyCallWritten2": "Every call, written",
      "searchYesterdaySCallsByWhatWasSaid": "Search yesterday's calls by what was said. Review the quality of every call and give Sada what people actually ask about.",
      "subtitlesInTheDialect": "SUBTITLES IN THE DIALECT",
      "media": "Media",
      "subtitlesInTheDialect2": "Subtitles in the dialect",
      "interviewsSeriesPodcastsSrtOutOfTheBox": "Interviews, series, podcasts. SRT out of the box, timed to the word, in the dialect the guest spoke.",
      "meetingsAndNotes": "Meetings and notes",
      "voiceNotesIntoText": "Voice notes into text",
      "theWhatsappVoiceNoteTheSiteVisitThe": "The WhatsApp voice note, the site visit, the majlis meeting. Record it, read it, share it.",
      "capitalMarkersDashedComingSoon": "Capital markers · dashed = coming soon",
      "switchLanguageLabel": "اللغة العربية"
    },
    "carousel": {
      "echonovaHighlights": "EchoNova highlights",
      "carousel": "carousel",
      "slideNumberOfTotal": "Slide {{number}} of {{total}}",
      "pauseAutoplay": "Pause automatic slides",
      "resumeAutoplay": "Resume automatic slides",
      "previousSlide": "Previous slide",
      "nextSlide": "Next slide",
      "chooseSlide": "Choose slide",
      "goToSlideNumber": "Go to slide {{number}}"
    },
    "trust": {
      "eyebrow": "Trust Center",
      "title": "Trust Center",
      "lead": "How EchoNova protects your data, how we treat every voice on the platform, and every policy we publish, in Arabic and English, each with a PDF.",
      "cta": {
        "documents": "Read the policies",
        "report": "Report a security issue"
      },
      "factsTag": "confirm",
      "facts": [
        {
          "label": "Hosting",
          "title": "AWS and Azure",
          "text": "Our services run on Amazon Web Services and Microsoft Azure. Regions are listed on the subprocessors page."
        },
        {
          "label": "Your data",
          "title": "You decide",
          "text": "We use content to improve our models. Every account can turn this off in Settings, at any time."
        },
        {
          "label": "Every voice",
          "title": "Watermarked",
          "text": "Every audio file we generate carries an inaudible mark of its origin.",
          "claim": "F3"
        },
        {
          "label": "Cloning",
          "title": "Consent first",
          "text": "No voice is cloned without its owner's documented consent. Public figures are blocked.",
          "claim": "F4"
        }
      ],
      "sub": {
        "compliance": "Compliance",
        "controls": "Controls",
        "documents": "Documents",
        "report": "Report"
      },
      "standing": {
        "kicker": "Compliance",
        "title": "Where we stand",
        "lead": "The frameworks we are working towards. We hold no certification yet, and we will update this page the day we do.",
        "items": [
          {
            "name": "ISO/IEC 27001",
            "status": "In progress",
            "text": "Information security management system, built with a specialist partner."
          },
          {
            "name": "ISO/IEC 42001",
            "status": "In progress",
            "text": "AI management system, including AI impact assessments."
          },
          {
            "name": "UAE Personal Data Protection Law",
            "status": "Aligning",
            "text": "Federal Decree-Law No. 45 of 2021."
          },
          {
            "name": "Saudi Personal Data Protection Law",
            "status": "Aligning",
            "text": "For processing of Saudi personal data."
          },
          {
            "name": "UAE Information Assurance standards",
            "status": "Aligning",
            "text": "Controls mapped against the national standard."
          },
          {
            "name": "UAE National Cloud Security Policy",
            "status": "Aligning",
            "text": "Cloud hosting and configuration controls."
          },
          {
            "name": "CSA STAR Level 1",
            "status": "In progress",
            "text": "Public self-assessment of cloud security controls."
          }
        ]
      },
      "controls": {
        "kicker": "Controls",
        "title": "How we protect it",
        "lead": "The controls behind our commitments, grouped by area.",
        "tag": "to confirm",
        "note": "Depends on engineering. Confirmed or removed before this page goes live.",
        "groups": [
          {
            "title": "Data security",
            "items": [
              {
                "text": "Encryption in transit (TLS 1.2 or higher)",
                "claim": "C1"
              },
              {
                "text": "Encryption at rest in production storage",
                "claim": "C2"
              },
              {
                "text": "Encrypted backups with tested restores",
                "claim": "C3"
              },
              {
                "text": "No new training copies after you opt out",
                "claim": "C4"
              }
            ]
          },
          {
            "title": "Access",
            "items": [
              {
                "text": "Named accounts for everyone with production access",
                "claim": "C5"
              },
              {
                "text": "Least-privilege permissions",
                "claim": "C6"
              },
              {
                "text": "Multi-factor authentication on cloud consoles",
                "claim": "C7"
              },
              {
                "text": "Access removed the day someone leaves",
                "claim": "C8"
              }
            ]
          },
          {
            "title": "Monitoring",
            "items": [
              {
                "text": "Every production access logged, reviewed and kept 12 months",
                "claim": "C9"
              },
              {
                "text": "Generation records kept up to 12 months",
                "claim": "C10"
              },
              {
                "text": "Append-only storage for evidence records",
                "claim": "C11"
              }
            ]
          },
          {
            "title": "AI and voice safety",
            "items": [
              {
                "text": "Inaudible watermark on every generated file",
                "claim": "C12"
              },
              {
                "text": "Recorded consent and a voice identity check before any voice is cloned",
                "claim": "C13"
              },
              {
                "text": "Blocked list of public figures' voices",
                "claim": "C14"
              },
              {
                "text": "Input screened for banned content, Arabic and English",
                "claim": "C15"
              },
              {
                "text": "Training opt-out in every account",
                "claim": "C16"
              },
              {
                "text": "Artists' recordings never given to third parties",
                "claim": "C17"
              }
            ]
          },
          {
            "title": "Privacy",
            "items": [
              {
                "text": "Processing under the UAE and Saudi data protection laws"
              },
              {
                "text": "30 days' notice before any new subprocessor"
              },
              {
                "text": "Data deleted within 60 days of closing, and from backups within 95"
              },
              {
                "text": "Data subject requests through privacy@echonova.ai"
              }
            ]
          },
          {
            "title": "Incident response",
            "items": [
              {
                "text": "Security reports answered within 2 business days"
              },
              {
                "text": "Customers told of a personal data breach within 24 hours",
                "claim": "C23"
              },
              {
                "text": "Misuse reports decided within 10 business days"
              },
              {
                "text": "Evidence shared with affected voice owners"
              }
            ]
          }
        ]
      },
      "documents": {
        "kicker": "Documents",
        "title": "Every policy, in writing",
        "lead": "Read any document here in Arabic or English, or download it as a PDF. Accepting our terms in your account accepts the version shown here.",
        "read": "Read",
        "pdf": "PDF",
        "texts": [
          "Self-serve plans, credits, billing and refunds, what you may do with generated audio, and your account.",
          "Enterprise plans and Sada: services, AI terms, customer data, fees, liability and service levels.",
          "Pilots and proofs of concept that run before an enterprise plan.",
          "How we process personal data for our customers: roles, security, subprocessors, transfers, breaches and deletion.",
          "The providers that process customer data on our behalf, what they handle, and where.",
          "What the platform may never be used for, and how we enforce it.",
          "The rules every user follows when using any voice on the platform.",
          "The terms under which artists record for the voice library, and how they are paid.",
          "What personal data we collect, why, how long we keep it, and your rights over it.",
          "The cookies the site sets, and how to refuse the ones that are not essential.",
          "The rules for using echonova.ai.",
          "How to report infringing content or a misused voice, and how to use our name and logo.",
          "How we protect data and handle AI, and how to report a vulnerability."
        ]
      },
      "report": {
        "kicker": "Report",
        "title": "Tell us",
        "lead": "Every report is read by a person, gets a case number, and gets an answer.",
        "cards": [
          {
            "title": "Security issue",
            "text": "Found a vulnerability or suspect an incident? We reply within 2 business days.",
            "email": "security@echonova.ai"
          },
          {
            "title": "Misuse of a voice",
            "text": "Your voice used without consent, or content that breaks our policies.",
            "email": "abuse@echonova.ai"
          },
          {
            "title": "Privacy request",
            "text": "Access, correct or delete your personal data.",
            "email": "privacy@echonova.ai"
          },
          {
            "title": "Legal and IP",
            "text": "Copyright, trademark and legal notices.",
            "email": "legal@echonova.ai"
          }
        ]
      },
      "reader": {
        "nav": "Documents",
        "back": "← Trust Center",
        "backTop": "← Back to Trust Center",
        "langAr": "العربية",
        "langEn": "English",
        "pdf": "PDF",
        "missingArabic": "النسخة العربية من هذه الوثيقة قيد الإعداد. النسخة الإنجليزية أدناه."
      }
    }
  },
  "creditPricing": {
    "kicker": "Credits",
    "title": "One credit balance across EchoNova.",
    "lead": "Use your credits across speech, voice agents, and AI.",
    "ratesTitle": "Service rates",
    "ratesNote": "The same on every plan.",
    "cloneNote": "A voice clone also pays for its checks, transcription, cleaning, and preview at the rates here. Its dollar fee is taken in credits at the rate of the credits that pay.",
    "service": "Service",
    "credits": "Credits",
    "rows": {
      "tts": "Text to Speech",
      "sttLive": "Live Speech to Text",
      "sttFile": "Speech to Text from files",
      "clean": "Sound Cleaning",
      "agentBase": "Voice agent",
      "cloneInstant": "Instant voice clone",
      "cloneProfessional": "Professional voice clone",
      "readerPage": "EchoReader page reading",
      "cloneLiveness": "Voice clone liveness check",
      "cloneSimilarity": "Voice clone same-speaker check"
    },
    "units": {
      "perCharacterOne": "1 credit per character",
      "perCharacter": "{{n}} credits per character",
      "perMinute": "{{n}} credits per minute",
      "perMinutePlusAi": "{{n}} credits per minute, plus AI model usage",
      "perSecond": "{{n}} credits per second",
      "perPage": "{{n}} credits per page",
      "cloneInstant": "{{fee}} per voice, plus {{n}} credits to build it",
      "cloneProfessional": "{{fee}} per voice, plus {{n}} credits per training hour",
      "notSet": "Price not set yet"
    },
    "aiTitle": "AI models",
    "ai": "AI model usage is based on the provider's model price + {{fee}}% and is deducted from your EchoNova credits.",
    "rolloverTitle": "Rollover",
    "rollover": "Unused subscription credits roll over when the same plan renews, up to 3× your monthly plan allowance.",
    "extraTitle": "Extra credits",
    "extra": "Extra credits start at {{price}} per {{credits}} credits and never expire.",
    "extraCap": "Extra credits do not count toward the rollover limit."
  },
  "cookieBanner": {
    "title": "Cookies on EchoNova",
    "body": "We use strictly necessary cookies to run the site and keep it secure. With your permission, we also use analytics cookies to see which pages are used, so we can improve them. No advertising or cross-site tracking.",
    "more": "Cookie Notice",
    "reject": "Reject all",
    "choose": "Choose",
    "save": "Save choices",
    "accept": "Accept all",
    "necessary": "Strictly necessary",
    "necessaryHint": "Sign-in, security, load balancing and remembering this choice. Always on.",
    "alwaysOn": "Always on",
    "analytics": "Analytics",
    "analyticsHint": "Anonymous counts of pages visited and errors, so we can improve the site."
  },
  "oauthConsent": {
    "title": "{{client}} wants to use EchoNova",
    "can": "It will be able to:",
    "canVoices": "Find Arabic voices",
    "canTts": "Turn text into speech",
    "canStt": "Transcribe audio",
    "canClean": "Clean audio recordings",
    "workspace": "Workspace",
    "spendWarning": "{{client}} can spend this workspace's credits each time it uses a tool. You can disconnect it at any time in Developers, Connected apps.",
    "allow": "Allow",
    "deny": "Deny",
    "expiredTitle": "This link has expired",
    "expiredBody": "Start the connection again from Claude.",
    "noneTitle": "No workspace you can connect",
    "noneBody": "You need to be the owner or a developer admin of a workspace to connect apps.",
    "error": "Something went wrong. Try again."
  }
}
