{
  "release": {
    "available": "A new version is ready. You can finish your current work before updating.",
    "apply": "Update app",
    "confirmTitle": "Apply the new version?",
    "confirmBody": "The page will reload. Stored chat and note drafts can be restored. Unsaved inputs and original attachments may be lost; review or download them first. Drafts that failed to save will be checked before reloading.",
    "loadTitle": "This screen could not be loaded",
    "loadBody": "The app may have updated, or the connection may be unavailable. Go back to review your work, or reload after checking unsaved inputs and attachments.",
    "reload": "Reload app",
    "back": "Go back"
  },
  "common": {
    "save": "Save",
    "cancel": "Cancel",
    "delete": "Delete",
    "edit": "Edit",
    "add": "Add",
    "search": "Search",
    "darkMode": "Dark mode",
    "lightMode": "Light mode",
    "filter": "Filter",
    "refresh": "Refresh",
    "loading": "Loading...",
    "loadMore": "Load more",
    "noData": "No data available",
    "noDescription": "No description",
    "noMessages": "No messages yet",
    "active": "Active",
    "inactive": "Inactive",
    "confirm": "Confirm",
    "close": "Close",
    "submit": "Submit",
    "back": "Back",
    "next": "Next",
    "previous": "Previous",
    "yes": "Yes",
    "no": "No",
    "all": "All",
    "select": "Select",
    "actions": "Actions",
    "status": "Status",
    "date": "Date",
    "name": "Name",
    "email": "Email",
    "password": "Password",
    "description": "Description",
    "settings": "Settings",
    "language": "Language",
    "korean": "Korean",
    "english": "English",
    "unknown": "Unknown",
    "unknownUser": "Unknown User",
    "value": "Value",
    "justNow": "Just now",
    "minutesAgo": "{{count}}m ago",
    "hoursAgo": "{{count}}h ago",
    "daysAgo": "{{count}}d ago",
    "customer": "Customer",
    "online": "Online",
    "offline": "Offline",
    "owner": "Owner",
    "admin": "Admin",
    "member": "Member",
    "confirmDelete": "Are you sure you want to delete?",
    "invitationSent": "Invitation sent",
    "today": "Today",
    "yesterday": "Yesterday",
    "searchPlaceholder": "Search customers, chats, campaigns...",
    "phone": "Phone",
    "copied": "Copied!",
    "copy": "Copy",
    "create": "Create",
    "update": "Update",
    "type": "Type",
    "title": "Title",
    "pause": "Pause",
    "activate": "Activate",
    "allCategories": "All Categories",
    "category": "Category",
    "color": "Color",
    "manager": "Manager",
    "none": "None",
    "tags": "Tags",
    "error": "An error occurred",
    "clear": "Clear",
    "errorOccurred": "An error occurred",
    "failed": "Failed",
    "high": "High",
    "low": "Low",
    "navigate": "Navigate",
    "noResults": "No results",
    "normal": "Normal",
    "remove": "Remove",
    "retry": "Retry",
    "role": "Role",
    "searching": "Searching...",
    "success": "Success",
    "typeToSearch": "Type to search...",
    "urgent": "Urgent",
    "visibility": "Visibility",
    "created": "Created",
    "team": "Team",
    "updated": "Updated",
    "undo": "Undo",
    "basicInfo": "Basic Info",
    "exportCsv": "Export CSV",
    "exporting": "Exporting...",
    "skipToContent": "Skip to content",
    "createdAt": "Created",
    "managerOnly": "Only an admin or manager can change this",
    "adminOnly": "Only an admin can delete this",
    "realtimeDown": "Realtime connection lost. Reconnecting — new messages may not appear until it is back.",
    "increased": "increased",
    "decreased": "decreased",
    "duplicate": "Duplicate",
    "preview": "Preview",
    "history": "History",
    "attachFile": "Attach file",
    "moveUp": "Move up",
    "moveDown": "Move down",
    "stats": "Statistics",
    "details": "Details",
    "approve": "Approve",
    "notifications": "Notifications",
    "notificationsWithCount": "Notifications — {{n}} unread",
    "send": "Send",
    "pagination": "Pagination",
    "goToPage": "Page {{n}}",
    "openMenu": "Open menu",
    "agent": "Agent",
    "priorityLow": "Low",
    "priorityMedium": "Medium",
    "priorityHigh": "High",
    "priorityUrgent": "Urgent",
    "pending": "Pending",
    "approved": "Approved",
    "executed": "Executed",
    "rejected": "Rejected",
    "me": "Me",
    "languageLoadError": "The language could not be loaded. Check your connection and try again."
  },
  "auth": {
    "cleanup": {
      "title": "Some private data could not be removed from this browser",
      "blockedTitle": "Finish removing this account’s previous browser data",
      "body": "Your server session can be signed out while browser cleanup is still pending. Previous drafts and originals from the account being cleaned stay hidden until removal is confirmed. Restore browser storage access and retry, or clear this site’s data in your browser settings. Other accounts’ drafts are preserved.",
      "memoryOnly": "This browser could not keep the cleanup request across a reload. Keep this tab open until cleanup succeeds, or clear this site’s data before leaving.",
      "retry": "Retry removing private data",
      "otherAccount": "Sign in with another account"
    },
    "sessionUnavailable": "Unable to verify your session",
    "sessionUnavailableDescription": "The connection was interrupted. Please try again in a moment.",
    "login": "Login",
    "logout": "Logout",
    "register": "Register",
    "welcomeBack": "Welcome back",
    "createAccount": "Create account",
    "signInContinue": "Sign in to continue to your dashboard",
    "getStarted": "Get started with Trifrost",
    "fullName": "Full Name",
    "namePlaceholder": "John Doe",
    "signUp": "Sign Up",
    "noAccount": "Don't have an account?",
    "hasAccount": "Already have an account?",
    "pleaseWait": "Please wait...",
    "demoCredentials": "Demo Credentials",
    "signInWithGoogle": "Sign in with Google",
    "secureLogin": "Secure Login",
    "googleLoginInfo": "Sign in securely with your Google account. No separate password required.",
    "authFailed": "Authentication failed. Please try again.",
    "noToken": "No authentication token received.",
    "authError": "Authentication Error",
    "signingYouIn": "Signing you in...",
    "pleaseWaitAuth": "Please wait while we complete your authentication.",
    "termsNotice": "By continuing, you agree to our Terms of Service and Privacy Policy.",
    "email": "Email",
    "password": "Password",
    "sideTitle": "Where every customer conversation comes together",
    "sideSubtitle": "One inbox for KakaoTalk, LINE and web chat.",
    "sideBullet1": "KakaoTalk, LINE and web chat in one inbox",
    "sideBullet2": "AI answers first, grounded in your knowledge base",
    "sideBullet3": "Tenant isolation · session revocation · signed webhooks",
    "sideQuote": "\"Within a month, our first response time dropped 38%. We no longer waste time hunting for inquiries across channels.\"",
    "sideQuoteAuthor": "Seoyeon Park · CX Lead, MarketWave",
    "backToHome": "Back to home",
    "orUseEmail": "or continue with email",
    "forgotPassword": "Forgot your password?",
    "forgotPasswordTitle": "Reset your password",
    "forgotPasswordSubtitle": "Enter the email you signed up with and we'll send you a reset link.",
    "sendResetLink": "Send reset link",
    "checkYourInbox": "Check your inbox",
    "resetSent": "If an account exists for {{email}}, we've sent a password reset link.",
    "resetSentHint": "Can't find it? Check your spam folder. The link expires in 1 hour.",
    "backToLogin": "Back to sign in",
    "resetPasswordTitle": "Choose a new password",
    "resetPasswordSubtitle": "Enter the password you'll use from now on.",
    "resetPasswordAction": "Update password",
    "newPassword": "New password",
    "confirmPassword": "Confirm password",
    "passwordMismatch": "Passwords do not match.",
    "passwordHint": "Use at least {{count}} characters.",
    "resetLinkInvalid": "This reset link is invalid or has expired.",
    "resetLinkInvalidTitle": "This link cannot be used",
    "resetLinkMissing": "No reset token found. Please open the link from your email again.",
    "requestNewLink": "Request a new link",
    "signupSubtitle": "Get your team answering customers in minutes.",
    "signupFailed": "Could not create your account. Please check your details.",
    "workspaceName": "Workspace name",
    "workspacePlaceholder": "Acme Support",
    "workspaceHint": "Leave blank and we'll name it after you.",
    "genericError": "Something went wrong. Please try again shortly.",
    "sessionRevoked": "Your password changed, so existing sessions were signed out. Please sign in again.",
    "verifyRequired": "You need to verify your email before signing in.",
    "resendVerification": "Resend verification email",
    "verificationResent": "Verification email sent.",
    "verifying": "Verifying your email...",
    "verifiedTitle": "Email verified",
    "verifiedBody": "You're all set. Taking you to your dashboard...",
    "verifyFailed": "We could not verify your email.",
    "verifyFailedTitle": "Verification failed",
    "verifyFailedHint": "The link may have expired. Sign in and request a new verification email from settings.",
    "verifyTokenMissing": "No verification token found. Please open the link from your email again.",
    "verifyBannerTitle": "Verify your email address",
    "verifyBannerBody": "Open the link we sent to {{email}} to finish verifying your account.",
    "role": "Role",
    "roleAdmin": "Admin",
    "roleManager": "Manager",
    "roleAgent": "Agent",
    "inviteLoading": "Checking your invitation...",
    "inviteTitle": "Join {{workspace}}",
    "inviteSubtitle": "{{inviter}} invited you. Create your account to join.",
    "inviteSubtitleNoInviter": "Create your account to join this workspace.",
    "acceptInvite": "Accept invitation",
    "inviteInvalid": "This invitation is invalid or has expired.",
    "inviteInvalidTitle": "This invitation cannot be used",
    "inviteInvalidHint": "It may already have been used or expired. Ask a workspace admin to send a new one.",
    "inviteAcceptFailed": "Could not accept the invitation.",
    "sessionExpired": "Your session expired and you were signed out. Please sign in again.",
    "googleOnlyNotice": "Continue with Google or your configured organization SSO.",
    "logoutTitle": "Log out?",
    "logoutHandover": "If you have no other connected device, your {{count}} assigned conversations will be handed to other agents.",
    "logoutHandoverAlone": "If you have no other connected device, your {{count}} conversations will become unassigned. No other agents are currently online.",
    "sessionChanged": "The browser signed in with a different session. Reload the app to continue with the current account.",
    "retryLogout": "Retry signing out",
    "logoutConfirmed": "The server confirmed that this session has ended.",
    "logoutUnconfirmed": "The app is locked, but the server has not confirmed sign-out. Reconnect and retry, or end this session from another signed-in device.",
    "organizationSso": "Organization SSO",
    "workspaceSlug": "Workspace slug",
    "organizationSignIn": "Sign in with your organization",
    "reauthRequired": "Sign in again with your organization to continue."
  },
  "landing": {
    "nav": {
      "features": "Features",
      "how": "How it works",
      "channels": "Channels",
      "login": "Log in",
      "start": "Start for free",
      "pricing": "Pricing",
      "help": "Help",
      "agentic": "AI agent",
      "switch": "Switch from Channel Talk",
      "label": "Main navigation",
      "experience": "Use cases",
      "faq": "FAQ",
      "open": "Open menu",
      "close": "Close menu",
      "skip": "Skip to content"
    },
    "hero": {
      "badge": "Support for membership services, SaaS and online education",
      "title1": "AI for the FAQs.",
      "titleAccent": "People for",
      "title2": " the rest.",
      "subtitle": "Answer from your service’s FAQs and preserve the context of signed-in members. We can review installation and migration fit with you.",
      "ctaPrimary": "Review my website",
      "ctaSecondary": "Try the demo",
      "note": "Free plan available · Fictional preview",
      "illustrationAlt": "Messages from multiple channels flowing into the Trifrost inbox and being resolved with AI-suggested replies",
      "online": "Online",
      "msgCustomer1": "Can I pause my membership?",
      "msgAgent": "Let me explain how to pause 🙂",
      "msgCustomer2": "Thanks for the quick reply!",
      "listPreviewA": "Where is my course access period?",
      "listPreviewB": "I need help with my account",
      "aiAnswerLine1": "You can request a pause in your account.",
      "aiAnswerLine2": "An agent can review account-specific details.",
      "aiSourceLabel": "Sources",
      "aiSourceA": "Member FAQ",
      "aiSourceB": "Pause policy",
      "resolved": "Resolved",
      "tagRepeat": "Member",
      "toastTitle": "Fictional support example",
      "toastDesc": "FAQ answer → agent handoff"
    },
    "channels": {
      "label": "Start on your website. Connect the channels you need.",
      "soon": "Planned",
      "webWidget": "Web widget",
      "phone": "Phone",
      "note": "Start with the web widget. KakaoTalk and LINE require provider accounts, integration setup and inbound/outbound verification. Planned channels cannot be connected yet."
    },
    "features": {
      "title": "Connect conversations, customer context and next steps",
      "subtitle": "From the first question to its resolution, give your team the tools to keep the conversation moving.",
      "inboxTitle": "Omnichannel inbox",
      "inboxDesc": "Manage widget conversations and configured LINE or Kakao channels together. External channels require provider accounts and inbound/outbound verification.",
      "aiTitle": "AI agent & chatbot",
      "aiDesc": "Scenario chatbots and an AI agent resolve repeat questions first and hand only low-confidence cases to a human. It answers outside business hours too.",
      "crmTitle": "Customer CRM & segments",
      "crmDesc": "Every interaction builds the customer profile. Create precise target groups with behavior, purchase, and attribute-based segments.",
      "campaignTitle": "Marketing campaigns",
      "campaignDesc": "Multichannel campaigns and A/B tests aimed at a segment. Opens, clicks, and conversions land on the same screen.",
      "analyticsTitle": "Analytics & AI quality",
      "analyticsDesc": "Track response time, resolution rate, CSAT, and campaign performance — plus the quality of every AI reply.",
      "teamTitle": "Team collaboration",
      "teamDesc": "Internal notes, assignment, and team chat keep everyone in step, with separate agent and admin permissions.",
      "knowledgeTitle": "Knowledge base & help center",
      "knowledgeDesc": "Use your documents as sources for AI answers and publish a help center. Customers and your support team work from the same knowledge.",
      "proactiveTitle": "Proactive & on-site messages",
      "proactiveDesc": "Trigger pop-ups, banners, and proactive chats by page, segment, or timing — start the conversation before the ticket arrives.",
      "workflowTitle": "Workflows & SLA",
      "workflowDesc": "Route, tag and escalate conversations with rules, then manage first-response and resolution targets with SLAs.",
      "i18nTitle": "Korean and English, side by side",
      "i18nDesc": "Visitors read their browser's language, agents read the one they picked. The widget, the console and every transactional email go out in the right one.",
      "securityTitle": "Security & data ownership",
      "securityDesc": "Workspaces are isolated from one another, and who opened or changed what is kept in an audit trail. Export any time — one customer, or the whole workspace.",
      "installTitle": "A widget that installs cleanly",
      "installDesc": "Start website support with one script tag. Identify signed-in members with server-generated signatures and configure the widget for your site policies.",
      "more": "Explore campaigns, collaboration, security and more"
    },
    "how": {
      "title": "Start small. Connect what your service needs.",
      "subtitle": "Prepare your widget, knowledge and team in three steps.",
      "step1Title": "Install the widget",
      "step1Desc": "Paste one script tag into your site and the chat widget appears instantly.",
      "step2Title": "Prepare your knowledge",
      "step2Desc": "Add FAQs and guides. Review what customers can read and what AI should reference.",
      "step3Title": "Start supporting customers together",
      "step3Desc": "Set agents and business hours, then review AI answers. Integrate member identity and external channels as needed.",
      "code": "View example install code",
      "help": "Need member identity or historical conversation migration?",
      "review": "Review your integration scope"
    },
    "stats": {
      "freePlanValue": "₩0",
      "freePlan": "to start on the Free plan",
      "freeAiValue": "50",
      "freeAi": "AI replies/mo on Free",
      "alwaysValue": "24/7",
      "always": "AI answers after hours",
      "setupValue": "1 tag",
      "setup": "Web widget installation script"
    },
    "cta": {
      "title": "Build your service’s first support flow",
      "subtitle": "Start on your own or review the setup with us. Check what you need for FAQs, member identity and historical conversations.",
      "button": "Review my website",
      "secondary": "Start a free workspace",
      "note": "50 AI replies per month on Free · Member identity and external channels require integration"
    },
    "footer": {
      "rights": "All rights reserved."
    },
    "agentic": {
      "title": "Our AI doesn't stop at answering",
      "subtitle": "Understanding a question and resolving it are different jobs. Trifrost's AI queries your own systems and operates the platform on your behalf — and you decide what runs automatically and what needs approval.",
      "executeTitle": "Customer-facing actions",
      "executeDesc": "Mid-conversation, the AI calls your API. Instead of reciting a knowledge-base line to \"where is my order?\", it looks the order up and answers with the real thing.",
      "executeChip1": "GET · POST · PUT · PATCH · DELETE",
      "executeChip2": "Templated body & headers",
      "executeChip3": "Answers grounded in the response",
      "executeSafety": "Each action runs automatically or only after confirmation — your choice. Requests to internal addresses are blocked (SSRF guard), with a timeout and a response-size cap.",
      "operateTitle": "Operator agent",
      "operateDesc": "Tell the AI what you want in the console and it works the platform for you. Instead of hunting through screens, write \"assign this week's unresolved chats\".",
      "operateChip1": "Query chats, customers, segments",
      "operateChip2": "Manage campaigns, teams, knowledge",
      "operateChip3": "Change widget, chatbot, channel settings",
      "operateSafety": "Sensitive operations are held for approval rather than executed. Available tools are limited by the operator's role, and every executed action is logged."
    },
    "pricing": {
      "title": "Start at your size",
      "subtitle": "Try the free plan first. Compare agent seats, monthly active customers and AI reply allowances as your support grows.",
      "popular": "For growing teams",
      "perMonth": "/mo",
      "freeLine": "2 agent seats · 1,000 monthly active customers · 50 AI replies",
      "starterLine": "3 seats · 3,000 monthly customers · 200 AI replies",
      "growthLine": "8 seats · 20,000 monthly customers · 600 AI replies",
      "scaleLine": "20 seats · 100,000 monthly customers · 1,700 AI replies",
      "compare": "Compare all plans",
      "note": "Save 20% with annual billing · Displayed prices exclude regional taxes (VAT, etc.)."
    },
    "experience": {
      "eyebrow": "SUPPORT THAT FITS YOUR TEAM",
      "title": "Customers ask. AI helps. Your team takes it from there.",
      "subtitle": "Choose your service type to explore FAQ answers and agent handoff.",
      "choose": "Choose a service type",
      "demo": "Continue in the demo",
      "preview": "Support flow preview",
      "example": "Fictional example",
      "handoff": "Context for your team",
      "note": "This is an illustration using fictional data. It does not run live AI or contact an agent. Member identity requires server integration.",
      "membership": {
        "label": "Memberships",
        "title": "Make everyday membership questions easier",
        "description": "Answer common policy questions from your FAQs, then pass account-specific requests to your team with the conversation context.",
        "benefit1": "Ground recurring answers in your policy documents",
        "benefit2": "Keep the member’s question in context during handoff",
        "question": "Can I pause my membership?",
        "answer": "You can request a pause in your account before the next billing date. I’ll ask the team to check how it applies to your account.",
        "source": "Member FAQ · Pausing a membership",
        "handoff": "Review the pause request, referenced policy and need for an account check together."
      },
      "saas": {
        "label": "SaaS",
        "title": "From setup questions to account-specific support",
        "description": "Use your knowledge base for product guidance. Let an agent handle workspace-specific settings and permission checks.",
        "benefit1": "Use help articles and product guides as sources",
        "benefit2": "Connect follow-up work with assignment and internal notes",
        "question": "How do I invite a new teammate?",
        "answer": "Invite them by email from Team settings. If you need to check permissions or your seat allowance, the team can help from here.",
        "source": "Product guide · Inviting teammates",
        "handoff": "Pass along the invite question, guidance provided and any permission checks needed."
      },
      "education": {
        "label": "Education",
        "title": "Quick course guidance. Thoughtful individual support.",
        "description": "Explain course access and common questions first. Connect learners to your team when enrollment or billing needs a closer look.",
        "benefit1": "Keep course guidance and FAQs in one place",
        "benefit2": "Give agents the conversation and guidance already shared",
        "question": "Where can I see my course access period?",
        "answer": "You can find the access period for each course in My Classroom. If the dates need checking, I’ll connect you with the team.",
        "source": "Course FAQ · Access period",
        "handoff": "Review the access question, referenced guide and request to check individual enrollment."
      }
    },
    "faq": {
      "eyebrow": "BEFORE YOU GET STARTED",
      "title": "New to support tools, or ready to switch?",
      "subtitle": "Review installation, AI answers, channel setup and costs before you begin.",
      "contact": "Talk about your setup",
      "estimate": "View pricing and cost estimates",
      "switch": "Explore ChannelTalk migration",
      "startQuestion": "Where should we start?",
      "startAnswer": "Create a free workspace, install the web widget and add your FAQs. Check answers and agent handoff before opening support to customers. Identifying signed-in members requires your server to generate identity signatures.",
      "aiQuestion": "What happens when AI cannot answer a question?",
      "aiAnswer": "Use your knowledge base as a source and configure when to hand off to an agent. AI accuracy is not guaranteed: review answers against real questions and apply approvals to sensitive actions.",
      "channelsQuestion": "Can we connect KakaoTalk and LINE immediately?",
      "channelsAnswer": "You can start with the web widget. LINE needs an official account setup. KakaoTalk requires a compatible dealer gateway contract and integration. Verify inbound and outbound messages in your provider account. Instagram, Naver TalkTalk and phone are planned.",
      "migrationQuestion": "Can we bring our ChannelTalk conversation history?",
      "migrationAnswer": "Review supported customer and conversation formats, preview the import, then bring them in. Imported conversations are read-only historical records, not resumed live chats. Attachment and member-mapping scope depend on the original data.",
      "costQuestion": "Can we estimate monthly costs and limit AI overage?",
      "costAnswer": "Use the pricing calculator to estimate costs for seats and monthly AI replies. Administrators can also set an AI reply overage cap. That cap excludes the base subscription, extra seats, external channel fees and taxes."
    }
  },
  "consent": {
    "title": "Your cookie choices",
    "description": "Trifrost uses only the storage the site needs to work by default. With your consent, we also use cookies and tracking scripts for usage statistics (analytics) and for ad conversion measurement and remarketing (advertising). You can change your choice at any time from Cookie settings at the bottom of the site.",
    "policyLink": "Privacy Policy",
    "purposesLegend": "Choose by purpose",
    "necessary": "Necessary",
    "necessaryDetail": "Keeps you signed in, protects the site, and remembers your language and this choice. Always on.",
    "analytics": "Analytics",
    "analyticsDetail": "Google Analytics, HawkEyeOps and Cloudflare Web Analytics count visits and usage so we can improve the site.",
    "accountDescription": "Accept all also includes subscription analytics for the workspace you administer after sign-in. You can select it separately in Customize.",
    "accountAnalytics": "Account subscription analytics",
    "accountAnalyticsDetail": "Allow Google Analytics to measure subscription signup, activation, payment, renewal and cancellation for the workspace you administer. Requires Analytics. Withdrawal stops future sends.",
    "accountSyncPending": "Saving your account analytics choice. If the connection is lost, we retry at your next sign-in or when it returns.",
    "accountSyncFailed": "Your browser choice applies, but we could not confirm saving the account choice. Reconnect and save again in Cookie settings. The previous account choice may remain until it is saved on the server.",
    "advertising": "Advertising",
    "advertisingDetail": "Google Ads measures ad conversions and shows Trifrost ads on other sites based on your visits here (remarketing).",
    "acceptAll": "Accept all",
    "rejectAll": "Reject all",
    "customize": "Customize",
    "save": "Save choices",
    "settingsLink": "Cookie settings"
  },
  "workspaceDeletion": {
    "title": "Request workspace deletion",
    "description": "Ask the operator to delete this workspace and its conversations, customers and documents. Nothing is deleted right away: billing and data export are checked first, and you will hear the outcome within 30 days of the request at the latest. Export your data before deletion.",
    "open": "Request deletion",
    "confirmLabel": "To confirm, type the workspace name \"{{name}}\"",
    "confirm": "Send deletion request",
    "requested": "Deletion request received.",
    "pending": "Deletion requested on {{requested}}. You will hear the outcome by {{respondBy}}."
  },
  "notFound": {
    "title": "Page not found",
    "body": "This address has moved or never existed. Pick where you would like to go below.",
    "linksLabel": "Main pages",
    "home": "Go home",
    "pricing": "Pricing",
    "contact": "Contact us"
  },
  "siteFooter": {
    "brandName": "Zero to One Flow (021flow)",
    "brandDescription": "A sole-proprietor brand providing AI-powered digital products and automation services.",
    "pending": "Pending",
    "languageLabel": "Language",
    "langKo": "한국어",
    "langEn": "English",
    "product": {
      "heading": "Product",
      "overview": "Overview",
      "features": "Features",
      "pricing": "Pricing",
      "help": "Help Center"
    },
    "legal": {
      "heading": "Legal",
      "terms": "Terms of Service",
      "privacy": "Privacy Policy",
      "dpa": "Data Processing Addendum (Draft)",
      "refund": "Refund & Cancellation Policy",
      "subscription": "Subscription Terms"
    },
    "support": {
      "heading": "Support",
      "emailLabel": "Email",
      "phoneLabel": "Support Phone",
      "billingLabel": "Billing, refund & cancellation",
      "xsollaBuyerSupport": "Xsolla Support"
    },
    "business": {
      "heading": "Business Information",
      "tradeName": "Trade Name",
      "representative": "Sole Proprietor / Representative",
      "registrationNo": "Business Registration No.",
      "ecommerceRegNo": "E-commerce Registration No.",
      "address": "Address",
      "email": "Email",
      "hostingProvider": "Hosting Provider",
      "verification": "Business Information Verification",
      "verificationLink": "View"
    },
    "paymentNoticeHeading": "Payment Notice",
    "paymentNotice": "Web payments use Xsolla Checkout. Review the seller, final amount, taxes, renewal and refund terms before purchasing.",
    "copyright": "© 2026 Zero to One Flow. All rights reserved.",
    "ariaLabel": "Site footer"
  },
  "checkoutConsent": {
    "xsollaNotice": "Web payments use Xsolla Checkout. Review the seller, final amount, taxes, renewal and refund terms before purchasing.",
    "autoRenewNotice": "Subscription plans may renew automatically until cancelled.",
    "merchantNotice": "Enter card details only in Xsolla Checkout. Trifrost does not store card numbers or CVC.",
    "agreeIntro": "By proceeding to checkout, you agree to our Terms of Service, Privacy Policy, and Refund & Cancellation Policy.",
    "agreeTerms": "I agree to the Terms of Service.",
    "agreePrivacy": "I have read the Privacy Policy.",
    "agreeRefund": "I have read the Refund & Cancellation Policy.",
    "linkSuffix": "view",
    "error": "You must agree to all required policies before proceeding to checkout.",
    "summaryHeading": "Review your order",
    "planLabel": "Plan",
    "priceLabel": "Price",
    "intervalLabel": "Billing interval",
    "featuresLabel": "Included features"
  },
  "pricingPage": {
    "title": "Pricing",
    "subtitle": "Choose the plan that fits your needs. Web payments are securely processed by Xsolla.",
    "perMonth": "/mo",
    "perYear": "/yr",
    "loginToSubscribe": "Log in to subscribe",
    "manageInApp": "Subscriptions can be started and managed from the billing page after you log in.",
    "trialNote": "If a free trial is offered, you may be charged unless you cancel before the trial ends.",
    "vatNote": "Displayed prices may exclude regional taxes (VAT/GST, etc.), which Xsolla calculates and collects at checkout.",
    "contactSales": "Contact us",
    "subtitleNotReady": "Choose the plan that fits your needs. Start on the Free plan right away, or contact us to onboard onto a paid plan.",
    "startFree": "Start for free",
    "contactOnboarding": "Contact us for onboarding",
    "paymentsComingSoon": "Online payments are coming soon. Pilot customers who need a paid plan can use it on a manual invoice after an onboarding call.",
    "vatNoteManual": "Displayed prices may exclude taxes. The final amount is confirmed in your quote and invoice.",
    "mauPolicy": "MAU counts distinct active customer records per UTC calendar month. Records created separately on different channels count separately. Linking or unlinking records does not rewrite previously metered usage, merge consent or transfer channel credentials.",
    "offerVersionNotice": "New subscription offers are separate from existing contracts. Existing subscription base fees and finalized invoices are not automatically changed. Reduced overage rates apply to usage periods from October 2026."
  },
  "contactPage": {
    "title": "Support / Contact",
    "subtitle": "Need help? Reach us through the channels below.",
    "generalHeading": "General inquiries",
    "generalEmail": "Email",
    "phone": "Support Phone",
    "billingHeading": "Billing, refund & cancellation",
    "billingDesc": "Billing, refund, cancellation, and chargeback inquiries are handled by Xsolla Support, our Merchant of Record.",
    "xsollaBuyerSupport": "Xsolla Support",
    "hoursHeading": "Hours",
    "businessHours": "Business Hours",
    "responseTime": "Response Time",
    "businessInfoHeading": "Business Information"
  },
  "legalPage": {
    "backToHome": "Back to home",
    "effectiveDate": "Effective Date",
    "draftDate": "Draft Date",
    "revisionHistory": "Policy revision history",
    "revisionDate": "Date",
    "revisionSummary": "Summary",
    "lastUpdated": "Last Updated",
    "tableOfContents": "Contents",
    "businessInfoHeading": "Business Information"
  },
  "sidebar": {
    "adoption": "Adoption and operations",
    "dashboard": "Dashboard",
    "chats": "Chats",
    "customers": "Customers",
    "campaigns": "Campaigns",
    "segments": "Segments",
    "chatbot": "Scenario chatbot",
    "aiAgent": "AI auto-reply",
    "aiDashboard": "AI Dashboard",
    "aiQuality": "AI Quality",
    "aiActions": "AI Actions",
    "knowledgeBase": "Knowledge Base",
    "helpCenter": "Help Center",
    "workflows": "Workflows",
    "sla": "SLA Management",
    "proactive": "Proactive messages",
    "teamChat": "Team Chat",
    "analytics": "Analytics",
    "marketing": "Popups & banners",
    "settings": "Settings",
    "workspaces": "Workspaces",
    "billing": "Billing",
    "platform": "Deployment & ops",
    "workspace": "Workspace",
    "targetProduct": "Target product",
    "mainMenu": "Main",
    "marketingMenu": "Marketing",
    "aiMenu": "AI & Automation",
    "analyticsMenu": "Analytics & Team",
    "expand": "Expand sidebar",
    "collapse": "Collapse sidebar",
    "serviceAdmin": "Service admin",
    "hint": {
      "aiActions": "Actions the AI is allowed to run",
      "aiAgent": "AI answers grounded in your knowledge base",
      "aiDashboard": "AI usage and cost",
      "aiQuality": "AI answer quality review",
      "analytics": "Volume, response time and satisfaction",
      "billing": "Plan, seats and invoices",
      "campaigns": "Marketing messages sent to customers",
      "chatbot": "Keyword-rule chatbot",
      "chats": "Customer conversations from every channel",
      "customers": "Profiles and conversation history",
      "dashboard": "Today's support at a glance",
      "helpCenter": "Public help articles for customers",
      "knowledgeBase": "Internal documents the AI learns from",
      "marketing": "On-site popups, banners and tooltips",
      "platform": "Deployment and cost structure",
      "proactive": "Messages sent to visitors first",
      "segments": "Group customers by rules",
      "serviceAdmin": "Run every workspace",
      "settings": "Widget, notifications and account",
      "sla": "Response targets and breach alerts",
      "teamChat": "Internal team conversations",
      "workflows": "Rules that automate work",
      "workspaces": "Workspaces and members"
    },
    "aiReviews": "AI reply reviews"
  },
  "dashboard": {
    "title": "Dashboard",
    "welcome": "Welcome",
    "overview": "Overview",
    "totalCustomers": "Total Customers",
    "activeChats": "Active Chats",
    "pendingChats": "Pending Chats",
    "resolvedToday": "Resolved Today",
    "avgResponseTime": "Avg Response Time",
    "customerSatisfaction": "Customer Satisfaction",
    "recentActivity": "Recent Activity",
    "quickStats": "Quick Stats",
    "todayStats": "Today's Stats",
    "weeklyTrend": "Weekly Trend",
    "newCustomers": "New Customers",
    "messagesSent": "Messages Sent",
    "messagesReceived": "Messages Received",
    "last7Days": "Last 7 days",
    "lastNDays": "Last {{count}} days",
    "channelDistribution": "Channel Distribution",
    "channelPlanned": "{{label}} (planned)",
    "bySource": "By source",
    "distribution": "Distribution",
    "subtitle": "View your business performance at a glance",
    "loadingData": "Loading data...",
    "fetchError": "Failed to load dashboard data",
    "realtimeSnapshot": "Realtime snapshot",
    "liveChatsCount": "{{count}} live chats",
    "newCustomersCount": "{{count}} new customers",
    "activeCampaignsCount": "{{count}} active campaigns",
    "noChartData": "No conversations to show yet",
    "noChannelData": "No channel data yet",
    "noResponseData": "No response-time data yet",
    "chartLoadFailed": "Couldn't load this data",
    "responseDistributionUnit": "In minutes",
    "unassigned": "Unassigned",
    "unassignedCaption": "Open conversations with no agent",
    "unassignedNoAutoTeam": "No auto-assign team. Configure a team or assign manually.",
    "unassignedNoActiveMembers": "No active agents in auto-assign teams. Check team members.",
    "unassignedAllOffline": "All auto-assign agents are offline. Sign in or assign manually.",
    "unassignedAtCapacity": "No assignment capacity is available. Check agent limits.",
    "unassignedAvailable": "An agent is available. Check automatic recovery status.",
    "slaAttention": "SLA attention",
    "slaAttentionCaption": "{{breached}} breached · {{atRisk}} at risk",
    "newInPeriod": "New in the last {{count}} days",
    "newCustomersLabel": "{{n}} new customers in the last {{count}} days",
    "assignedToMe": "Assigned to me",
    "assignedToMeCaption": "Open conversations I own",
    "waitingOnMe": "{{count}} awaiting a first reply",
    "sinceLastLogin": "{{count}} new conversations since your last visit ({{when}})",
    "quiet": "Quiet conversations",
    "quietCaption": "Open with no activity for over {{n}} days",
    "needsReply": "Your turn",
    "needsReplyCaption": "Assigned to you, awaiting a reply or delivery follow-up"
  },
  "chats": {
    "deliveryPending": "Waiting to send",
    "deliveryUncertain": "Delivery unconfirmed",
    "deliveryUncertainHint": "Check the external channel. Later messages in this conversation will wait until this result is resolved.",
    "deliveryUncertainParts": "{{confirmed}} of {{total}} parts were sent to the channel. Check the rest there. Later messages will wait until this is resolved.",
    "deliveryUncertainAttachments": "{{confirmed}} of {{total}} attachments were sent to the channel. Check the rest there. Later messages will wait until this is resolved.",
    "deliveryUncertainBodyAttachment": "The text was sent to the channel, but the attachment result is unknown. Check the external channel.",
    "deliveryReviewParts": "Review {{count}} unconfirmed text parts",
    "deliveryReviewUncertainWarning": "The first unconfirmed part may already have arrived. Check the external channel and send only what is missing.",
    "deliveryReviewRejectedWarning": "These are the rejected part and the text after it. Check the external channel and send only what is missing.",
    "deliveryPartNumber": "Part {{number}} of {{total}}",
    "deliveryReviewCopy": "Copy unconfirmed text",
    "deliveryReviewCopied": "Copied",
    "deliveryReviewCopyFailed": "Could not copy. Select and copy the text below.",
    "deliveryConfirmSent": "Confirm delivered",
    "deliveryConfirmPartial": "Remaining part handled",
    "deliveryConfirmPartialTitle": "Did you handle the rest in the external channel?",
    "deliveryConfirmPartialWarning": "This app will not resend the parts already accepted. Choose this only after sending the missing content in the external channel or confirming it is unnecessary. This records a partial app delivery and releases later queued messages. Your decision is audited.",
    "deliveryConfirmNotSent": "Confirm not sent and close",
    "deliveryConfirmNotSentTitle": "Did you confirm the message did not arrive?",
    "deliveryConfirmNotSentWarning": "The original will not be resent. Choose this only after checking the external channel and confirming it did not arrive. This records a failed delivery, releases later queued messages, and audits your decision.",
    "deliveryConfirmNotSentPlaceholder": "Evidence from the external channel that it did not arrive (at least 10 characters)",
    "deliveryRetry": "Confirm missing and retry",
    "deliveryConfirmTitle": "Did the message reach the customer?",
    "deliveryConfirmWarning": "Choose this only after confirming delivery in the external channel. This records the message as sent and releases later queued messages. Your decision is audited.",
    "deliveryRetryTitle": "Did you confirm it was not delivered?",
    "deliveryRetryWarning": "Choose this only after confirming the message did not arrive. The original will be sent again; an incorrect decision can send a duplicate. Your decision is audited.",
    "deliveryResolveError": "Could not resolve delivery. Refresh the conversation and check its status before trying again.",
    "deliveryAttentionEvidence": "New facts {{n}}",
    "deliveryEvidencePending": "A response arrived after the original attempt lost authority. Review it with the current delivery decision before closing this follow-up.",
    "deliveryEvidenceAcknowledge": "Review new provider facts",
    "deliveryEvidenceTitle": "Have you reviewed the new provider facts?",
    "deliveryEvidenceWarning": "Keep the current delivery decision and record the evidence and follow-up. This review sends no messages and does not release a blocked dispatch. A later response will need a new review.",
    "deliveryEvidenceRecorded": "New provider facts reviewed at {{date}}; the delivery decision was preserved.",
    "deliveryEvidenceAssignTitle": "Who will handle this fact review?",
    "deliveryEvidenceAssignWarning": "Record the handoff reason and the requested active manager. Assigning yourself accepts responsibility; another manager must accept the handoff. The review remains open and delivery is unchanged.",
    "deliveryEvidenceAssignConfirm": "Record review assignment",
    "deliveryEvidenceAcceptTitle": "Will you take responsibility for this review?",
    "deliveryEvidenceAcceptWarning": "Accept this handoff personally. This keeps the fact review open and does not release or send any messages. Unresolved reviews will be reminded daily.",
    "deliveryEvidenceAcceptConfirm": "Accept review responsibility",
    "deliveryEvidenceNoteTitle": "What follow-up has been performed?",
    "deliveryEvidenceNoteWarning": "Record the evidence checked and the customer follow-up. This progress note keeps the review open, does not send messages and does not postpone unresolved-review reminders.",
    "deliveryEvidenceNoteConfirm": "Record review progress",
    "deliveryEvidenceFollowup": {
      "title": "Provider fact review ownership",
      "help": "Taking ownership does not close the review or send a message. Unassigned or unaccepted reviews are reminded hourly; accepted, unresolved reviews are reminded daily. Progress notes do not postpone reminders.",
      "refresh": "Refresh review ownership",
      "unavailable": "Could not retrieve review ownership and history. Refresh before taking action.",
      "owner": "Review owner: {{name}}",
      "unassigned": "No review owner",
      "ownerUnavailable": "The selected owner is no longer an active workspace manager. Select a current manager.",
      "accepted": "Owner accepted at {{date}}",
      "unaccepted": "The assigned owner has not accepted this review.",
      "nextReminder": "Next unresolved-review reminder: {{date}}",
      "reminded": "Last reminder: {{date}}",
      "take": "Take responsibility for this review",
      "accept": "Accept this review handoff",
      "assign": "Assign review owner",
      "cancelAssignment": "Cancel owner selection",
      "note": "Record review progress",
      "search": "Find an active manager",
      "managersUnavailable": "Could not retrieve managers. Refresh the selection before assigning.",
      "searchMore": "Only the first 25 managers are shown. Search to narrow the list.",
      "assignee": "Review owner to assign",
      "draftChanged": "This review changed after you opened the owner selection. Cancel the selection and review its current state.",
      "reviewAssignment": "Review this owner assignment",
      "requestedOwner": "Requested review owner: {{name}}",
      "you": "You",
      "formerMember": "Former or unavailable member",
      "history": "Review follow-up history",
      "hideHistory": "Hide review follow-up history",
      "noHistory": "No retained follow-up records. This does not prove that no action was taken.",
      "earlier": "Earlier provider fact occurrence",
      "more": "Load earlier follow-up records",
      "events": {
        "opened": "New provider facts opened for review",
        "superseded": "A later response requires a new review",
        "assigned": "{{actor}} assigned the review to {{assignee}}",
        "accepted": "{{actor}} accepted responsibility",
        "noted": "{{actor}} recorded review progress",
        "closed": "{{actor}} completed this fact review; the delivery decision was preserved",
        "reminded": "Unresolved review reminder scheduled",
        "owner_unavailable": "The assigned manager is no longer available; a new owner is needed"
      }
    },
    "deliveryObservations": {
      "title": "Provider request observations",
      "help": "Request facts are kept for 90 days. API acceptance does not prove customer delivery or reading. Older requests may have no recorded facts.",
      "refresh": "Refresh request observations",
      "empty": "No retained request observations. This does not prove that nothing was sent.",
      "error": "Could not retrieve request observations. Refresh before deciding how to handle this delivery.",
      "more": "Load earlier requests",
      "request": "{{provider}} · {{kind}}, part {{part}} · {{date}}",
      "attempt": "Attempt started: {{date}}",
      "attachment": "Attachment {{index}}",
      "observed": "Response observed: {{date}}",
      "late": "Observed after this attempt lost authority. The current delivery decision was preserved.",
      "http": "HTTP {{status}}",
      "requestId": "Provider request: {{id}}",
      "acceptedRequestId": "Previously accepted request: {{id}}",
      "kinds": {
        "body": "reply text",
        "image": "image",
        "attachment_link": "attachment link"
      },
      "outcomes": {
        "pending": "Request prepared; no response recorded",
        "accepted": "API acceptance observed; customer delivery unverified",
        "rejected": "This request was rejected; earlier requests may still have been accepted",
        "unknown": "Request outcome unconfirmed",
        "not_started": "This request stopped before network permission"
      }
    },
    "deliveryReview": {
      "reviewedState": "Reviewed delivery state: {{status}} · {{date}}",
      "recoveryTitle": "Saved delivery decisions",
      "preparedNotice": "A delivery decision is waiting for your confirmation. Open the original review to apply it or cancel it.",
      "resultNotice": "A saved delivery decision has a result you have not reviewed.",
      "recoveryError": "Could not check saved delivery decisions. Refresh to check their state.",
      "inspectStored": "Review saved decision",
      "refreshRequest": "Check saved decision",
      "closeReview": "Close review",
      "cancelRequest": "Cancel saved decision",
      "dismissResult": "Acknowledge this result",
      "resultExplanation": "This is the saved result of your original decision. The message below shows its current delivery state. Acknowledging this result does not change delivery.",
      "originalResult": "Original delivery result: {{status}} · {{date}}",
      "superseded": "The delivery state has changed since this decision. The original result does not replace the newer state.",
      "frozen": "This request keeps the original evidence and reviewed delivery state. Retry applies the same request. Closing this review does not cancel it; an application already received by the server may finish.",
      "readError": "Could not read this message or saved request. Previous decision controls are unavailable. Refresh to check the current state.",
      "changed": "The reviewed delivery or saved request has changed. This decision cannot be applied to a newer occurrence. Check the saved request or cancel it, then start a new review.",
      "unknown": "Could not confirm this request’s outcome. Check the saved decision before retrying or cancelling it.",
      "states": {
        "prepared": "Decision saved; not yet applied",
        "applied": "Original decision applied",
        "cancelled": "Request cancelled; this request cannot be applied"
      },
      "statuses": {
        "pending": "Waiting to send",
        "sending": "Sending",
        "sent": "Sent",
        "failed": "Failed",
        "skipped": "Not sent",
        "partial": "Partly sent",
        "uncertain": "Delivery unconfirmed",
        "none": "No delivery change"
      }
    },
    "deliveryQueue": {
      "title": "Delivery follow-up queue",
      "help": "Oldest items first. Select a status and inspect the original message. This list does not send or retry messages. Refresh after resolving an issue.",
      "filter": "Delivery status",
      "show": "View delivery queue",
      "hide": "Hide delivery queue",
      "refresh": "Refresh delivery queue",
      "checked": "Checked: {{date}}",
      "unavailable": "Could not retrieve this queue. Retry the refresh; these results are not an empty queue.",
      "empty": "No current issues match this status.",
      "pageCleared": "No issues remain in the loaded rows. Load later issues or refresh the queue.",
      "untitled": "Conversation",
      "noText": "Message with no text",
      "open": "Inspect this message",
      "more": "Load later issues",
      "focusTitle": "Message selected for delivery review",
      "focusHelp": "This original message is shown separately from recent history. Check the external channel before recording a delivery decision.",
      "closeFocus": "Close selected message",
      "messageUnavailable": "Could not retrieve this message. It may have been removed or access may have changed. Refresh to check its current state.",
      "kinds": {
        "all": "All delivery issues",
        "uncertain": "Delivery unconfirmed",
        "delayed": "Pending for at least 5 minutes",
        "expired": "Sending lease expired",
        "failed": "Delivery failed",
        "skipped": "Not sent",
        "partial": "Partly sent",
        "evidence": "New provider facts"
      },
      "evidenceCurrent": "Current delivery decision: {{status}}"
    },
    "deliveryAttentionTitle": "External delivery needs attention",
    "deliveryAttentionPreview": "Check delivery",
    "deliveryHandledPreview": "Delivery follow-up recorded",
    "deliveryAttentionHint": "Unconfirmed delivery pauses later sends. Check failed, skipped, and partial sends and record the follow-up.",
    "deliveryAttentionUncertain": "Unconfirmed: {{n}}",
    "deliveryAttentionFailed": "Failed: {{n}}",
    "deliveryAttentionSkipped": "Not sent: {{n}}",
    "deliveryAttentionPartial": "Partly sent: {{n}}",
    "deliveryAttentionDelayed": "Delayed: {{n}}",
    "deliveryAcknowledge": "Record follow-up",
    "deliveryAcknowledgeTitle": "How was this delivery issue handled?",
    "deliveryAcknowledgeWarning": "This does not change what was delivered. Record the channel evidence and customer follow-up; the issue then leaves the central queue. Your decision is audited.",
    "deliveryAcknowledgePlaceholder": "Channel evidence and customer follow-up (at least 10 characters)",
    "deliveryAttentionHandled": "Manager follow-up recorded",
    "deliveryAttentionOpen": "Open first conversation",
    "deliveryAttentionUnavailable": "Could not check the external delivery queue.",
    "title": "Chats",
    "allChats": "All conversations",
    "myChats": "My conversations",
    "unassigned": "Unassigned",
    "active": "Active",
    "pending": "Pending",
    "resolved": "Resolved",
    "closed": "Closed",
    "typeMessage": "Type a message...",
    "send": "Send",
    "assignTo": "Assign to",
    "resolve": "Resolve",
    "reopen": "Reopen",
    "internalNote": "Internal Note",
    "addNote": "Add Note",
    "noChats": "No open conversations yet",
    "selectChat": "Select a conversation",
    "customerInfo": "Customer Info",
    "chatHistory": "Chat History",
    "attachFile": "Attach file",
    "conversations": "Conversations",
    "searchConversations": "Search conversations...",
    "loadingChats": "Loading conversations...",
    "loadingMessages": "Loading messages...",
    "selectConversation": "Select conversation with {{name}}",
    "selectConversationDesc": "Pick one from the list and it appears here",
    "noMessagesYet": "No messages yet",
    "searchInChat": "Search in conversation...",
    "newMessageNotificationBody": "Check your inbox",
    "messagesWillAppear": "Messages will appear when the conversation starts",
    "fetchError": "Couldn't load conversations. Please try again shortly.",
    "messagesError": "Failed to load messages",
    "noMessages": "No messages",
    "sendError": "Failed to send message",
    "attachmentExpired": "The temporary attachment upload expired. Send again to upload the file once more.",
    "uploadError": "Failed to upload attachment",
    "someoneTyping": "Someone is typing...",
    "subtitle": "Communicate with customers across all channels",
    "status": {
      "open": "Open",
      "pending": "Pending",
      "closed": "Closed",
      "waiting": "Awaiting customer"
    },
    "multipleTyping": "Several people are typing...",
    "selectedCount": "{{count}} selected",
    "bulkClose": "Close all",
    "bulkAssign": "Assign all",
    "bulkError": "Bulk action failed.",
    "channels": {
      "website": "Website",
      "kakao": "KakaoTalk",
      "naver": "Naver",
      "line": "LINE",
      "instagram": "Instagram",
      "phone": "Phone"
    },
    "channel": "Channel",
    "messageCount": "Messages",
    "newMessageNotification": "New customer message",
    "selectConversationEmpty": "Select a conversation",
    "attachmentOnly": "📎 Attachment",
    "lastFromUs": "You",
    "composerHint": "Enter to send · Shift+Enter for a new line · / for saved replies",
    "alsoViewing": "{{names}} is also viewing",
    "bulkCloseTitle": "Close all selected conversations?",
    "bulkCloseWarning": "{{n}} conversations will be closed and each customer will be asked to rate it. That request cannot be unsent.",
    "newMessageAnnounce": "New message: {{text}}",
    "newMessageFrom": "New message from {{name}}",
    "conversationList": "Conversation list",
    "loadOlder": "Load older messages",
    "attachment": "Attached image",
    "retractMessage": "Retract message",
    "messageRetracted": "This message was deleted",
    "retractTitle": "Retract this message?",
    "retractWarning": "The content is permanently deleted from this conversation and replaced in the web chat. The customer may have read it, and messages already delivered to an external channel remain in their app.",
    "retractConfirm": "Retract",
    "retractError": "Could not retract the message",
    "retractInProgress": "This message is being sent to an external channel. Try again once its delivery outcome is known.",
    "retractUnconfirmed": "Delivery is unconfirmed. Ask a manager to verify and resolve its outcome before retracting it.",
    "visitorContext": "Session context",
    "device": "Device / browser",
    "lastPage": "Page they were on",
    "referrer": "Came from",
    "hostData": "From the site",
    "hostDataUnverified": "Sent by the customer's website (not verified)",
    "slaDueIn": "{{duration}} to reply",
    "slaOverdue": "{{duration}} overdue",
    "customerTyping": "{{name}} is typing...",
    "theCustomer": "The customer",
    "previousChats": "Previous conversations",
    "firstContact": "First contact",
    "previousChatsFailed": "Could not load previous conversations",
    "previousChatsRetry": "Retry previous conversations",
    "conversationLoading": "Loading this conversation…",
    "conversationUnavailable": "This conversation is unavailable or you do not have access.",
    "conversationLoadFailed": "Could not load this conversation. Retry to check the record.",
    "conversationRefreshFailed": "Could not refresh this conversation. Previously loaded information is still shown; retry to check the latest details.",
    "customerContextLoading": "Loading purchase and contact history…",
    "customerContextFailed": "Could not load purchase and contact history.",
    "customerContextRetry": "Retry purchase and contact history",
    "thisConversation": "This conversation",
    "startedAt": "Started",
    "andNMore": "and {{count}} more",
    "willSplit": "Over {{limit}} characters — sent as {{count}} messages",
    "askedForHuman": "Asked for a person",
    "answeredByBot": "bot replied",
    "answeredByAi": "AI replied",
    "pagesPinned": "Conversations with new activity after {{time}} move to the first page.",
    "pageIndicator": "Page {{page}}",
    "liveInbox": "Live inbox",
    "newArrivals": "{{n}} new update(s) — refresh list",
    "newActivityOlderPage": "{{n}} new update(s) — view first page",
    "inboxCatchUp": "Reconnected — refresh the inbox",
    "inboxCatchUpOlderPage": "Reconnected — review the first page",
    "scopeUnassigned": "Unassigned only",
    "scopeSla": "SLA attention only",
    "queueSlaAttention": "SLA attention",
    "scopeSlaUncovered": "Open conversations without an SLA only",
    "scopeSlaPending": "Conversations awaiting SLA retry only",
    "slaAssignmentPending": "SLA assignment retry",
    "slaHistoryNeedsReview": "SLA history review needed",
    "scopeClear": "Show all",
    "typeMessageWithCanned": "Type a message…  ( / for canned replies)",
    "needsCare": "Needs care",
    "sameContactRecords": "{{count}} other record(s) with the same contact (not merged)",
    "howItWent": "How it went",
    "scopeRating": "Only conversations rated poorly",
    "answerSource": "Source",
    "searchTruncated": "The search ran long, so these are partial results — try narrowing it",
    "deliveryFailed": "Not delivered",
    "deliveryFailedHint": "this never reached the customer",
    "deliveryTooLongHint": "This exceeded the channel's split-message limit and was not delivered. Send a shorter reply in separate messages.",
    "attachmentUnavailable": "attachment not received",
    "deliveryPartial": "attachment not sent",
    "deliveryPartialHint": "the message went out, but the attached file could not be sent over this channel",
    "deliveryPartialText": "reply partly sent",
    "deliveryPartialTextHint": "{{confirmed}} of {{total}} parts were sent to the channel. Check and send the remaining text.",
    "deliveryPartialAttachmentsHint": "{{confirmed}} of {{total}} attachments were sent to the channel. Check and send the rest.",
    "deliveryPartialResolvedHint": "The app sent only part of this reply. A manager recorded that the rest was handled in the external channel.",
    "deliverySkipped": "Not sent",
    "deliveryInactive": "the channel integration is switched off",
    "deliveryTargetChanged": "Further sends stopped because the channel connection or recipient changed. Check the delivery outcome before taking action.",
    "deliveryNoChannelId": "this customer has no id on that channel",
    "deliveryUnsupportedChannel": "this channel does not support sending from the app",
    "systemNote": "Generated",
    "handoffs": "Passed through",
    "unassignedShort": "unassigned",
    "scopeTeam": "Only {{name}}",
    "scopeChannel": "{{channel}} channel only",
    "teamScopeLabel": "Filter by team",
    "teamScopeAll": "All teams",
    "teamScopeNone": "No team",
    "senderAutomation": "Automated",
    "senderAI": "AI",
    "senderBot": "Bot",
    "appliedAutomation": "Automation applied",
    "deletedRule": "Deleted rule",
    "scopeMine": "Assigned to me only",
    "customerLanguage": "Customer language",
    "product": "Target product",
    "productUnspecified": "Unspecified · shared knowledge only",
    "langEn": "English",
    "langKo": "Korean",
    "sourceKb": "Knowledge base",
    "sourceArticle": "Help article",
    "noKnowledge": "No article",
    "lowConfidence": "AI unsure",
    "noAnswer": "AI could not answer",
    "aiQuotaGone": "AI allowance spent",
    "excludedIntent": "Excluded from AI",
    "maxAutoReplies": "AI reply limit",
    "sensitiveInformation": "Sensitive details",
    "urgentRequest": "Urgent request",
    "intentNotEligible": "Not eligible for AI",
    "providerUnavailable": "AI provider unavailable",
    "aiUnavailable": "AI setup unavailable",
    "emptyResponse": "Empty AI response",
    "maxAttempts": "AI attempt limit",
    "humanReview": "Awaiting AI review",
    "agentRejected": "Agent rejected draft",
    "noKnowledgeSource": "No source content",
    "unsupportedNumericClaim": "Unsupported number",
    "unverifiedActionClaim": "Action needs verification",
    "unsupportedLink": "Link needs verification",
    "aiInterrupted": "AI reply interrupted",
    "aiGenerationFailed": "AI generation failed",
    "scopeQuiet": "Quiet for {{n}}+ days",
    "channelScopeLabel": "Filter by channel",
    "channelScopeAll": "All channels",
    "fileTooLarge": "{{name}}: file is too large (max {{max}}MB)",
    "fileTypeNotAllowed": "{{name}}: unsupported file type",
    "tooManyFiles": "You can attach at most {{n}} files",
    "dropToAttach": "Drop here to attach",
    "setStatusTo": "Change status to {{status}}",
    "filterByTag": "Show conversations tagged {{tag}}",
    "scopeTags": "Tagged {{tag}}",
    "scopeNeedsReply": "Your turn",
    "recentPurchases": "{{count}} recent purchases",
    "recentPurchases_one": "{{count}} recent purchase",
    "customerSince": "Customer since {{date}}",
    "handoff": {
      "pending": "Handoff briefing is queued.",
      "running": "Preparing the handoff briefing.",
      "paused": "Handoff briefing is waiting while workspace automation is paused.",
      "failed": "The handoff briefing could not be prepared. Check the assignee and try again.",
      "done": "The handoff briefing is ready in internal notes.",
      "deleted": "The handoff briefing note was deleted.",
      "unavailable": "Could not check the handoff briefing status.",
      "retryUnavailable": "Could not confirm the briefing retry. Check its status again.",
      "retry": "Retry briefing",
      "retrying": "Requesting retry…",
      "open": "View briefing"
    },
    "conversationDeleted": "This customer was deleted. This conversation is no longer available.",
    "unavailableDrafts": "Your unsent reply and note are still available to copy below. They cannot be sent or saved to this conversation.",
    "unsentReply": "Unsent reply",
    "unsavedNote": "Unsent note",
    "draftBadge": "Draft",
    "draftConflictBadge": "Draft conflict"
  },
  "customers": {
    "phoneCountry": {
      "label": "Phone Country",
      "unset": "Country not selected",
      "help": "Choose a country to interpret a national number. Numbers starting with + use their country calling code. No country is selected by default.",
      "csvHelp": "Optional Phone Country column: use a two-letter code such as KR, US or GB. A blank cell keeps the existing country. Contacts with unknown numbering country require review.",
      "restoreContext": "Review the current phone and country together. Only the selected history fields will be restored."
    },
    "listChanged": "Customer list changed · view latest",
    "latestList": "Latest customers",
    "pageIndicator": "Page {{page}}",
    "noSearchResults": "No matching customers",
    "noSearchResultsDescription": "Try another name, email address or phone number.",
    "clearSearch": "Clear search",
    "pageEmpty": "No remaining customers on this page",
    "countUnavailable": "Customer count unavailable",
    "readSlow": "Customer data took too long to load. Refine your search or try again.",
    "profileRefreshFailed": "Could not refresh this customer's details. Previously loaded information remains visible.",
    "profileUnavailable": "This customer is unavailable or you do not have access.",
    "profileLoading": "Checking customer details…",
    "profileLoadFailed": "Could not load this customer's details. Retry to check the record.",
    "profileLinkInvalid": "This customer link is invalid.",
    "marketing": {
      "title": "Marketing email consent",
      "description": "This applies to the email address. Record the original source and time of explicit consent as evidence before sending. Fresh evidence is required after an opt-out.",
      "status": {
        "unknown": "No consent record · sending blocked",
        "granted": "Consent recorded",
        "withdrawn": "Opted out · sending blocked",
        "suppressed": "Provider bounce or complaint · sending blocked"
      },
      "sourceLabel": "Consent source",
      "sources": {
        "web_form": "Web form",
        "checkout": "Checkout",
        "documented_offline": "Documented offline consent",
        "staff_request": "Staff record",
        "email_unsubscribe": "Email unsubscribe",
        "customer_erased": "Suppressed after customer erasure",
        "ses_complaint": "SES spam complaint",
        "ses_permanent_bounce": "SES permanent bounce"
      },
      "evidence": "Consent evidence or opt-out request",
      "evidencePlaceholder": "Record the consent text, original location, and time (at least 10 characters)",
      "consentTime": "Actual consent date and time",
      "recordConsent": "Record consent",
      "recordOptOut": "Record opt-out",
      "fetchError": "Could not load the marketing preference.",
      "saveError": "Could not save the marketing preference.",
      "loading": "Checking marketing preference…",
      "saved": "Marketing preference saved."
    },
    "links": {
      "title": "Linked customer records",
      "description": "A manager reviews both current profiles before linking their support history. Incorrect links can be removed. Channel sign-ins and marketing consent remain separate. MAU counts each customer record per month and does not change when records are linked or unlinked.",
      "empty": "No confirmed links for this record.",
      "loadFailed": "Customer links could not be checked.",
      "conversations": "{{count}} conversations",
      "formerActor": "Former teammate",
      "unlink": "Review unlink",
      "openProfile": "Open customer profile",
      "add": "Link another record",
      "searchHelp": "Matching contact details are a clue. Verify the person before linking.",
      "search": "Find a customer to link",
      "searchFailed": "Customer search failed. Retry the search.",
      "noResults": "No other records match. Refine the search.",
      "previewFailed": "The latest records could not be reviewed. Retry when both records are available.",
      "reviewAgain": "Review the latest details and confirm your choice again.",
      "laterChange": "The original request is confirmed. A later change exists; the list shows the current relationship.",
      "confirmed": "Your reviewed change is confirmed.",
      "checkingDrafts": "Checking link drafts on this browser…",
      "unreadableDrafts": "Some link drafts could not be checked. Keep any open editor available and retry.",
      "pendingDraft": "Result unconfirmed. Restore to check the same request.",
      "unsentDraft": "Unfinished relationship review",
      "discardWarning": "Discarding a browser draft does not undo a relationship already saved on the server.",
      "restoreDraft": "Restore link draft",
      "discardDraft": "Discard link draft",
      "reviewTitle": "Review the two customer records",
      "unlinkTitle": "Review removing this relationship",
      "ownership": "Each record keeps its conversations, visitor access, channel addresses and consent. Linking changes the staff’s related-record view.",
      "reason": "Reason and evidence for this decision",
      "verified": "I verified these records belong to the same customer.",
      "unlinkVerified": "I reviewed removing this relationship.",
      "saving": "Saving review on this browser…",
      "saved": "Review saved for this account on this browser. Signing out removes drafts.",
      "unsaved": "This review is available only in this tab. Keep it open or download a copy before leaving.",
      "cleanupFailed": "The editor closed, but its browser draft could not be removed. It may appear again.",
      "retryOriginal": "Check original request",
      "confirm": "Confirm customer link",
      "confirmUnlink": "Confirm unlink",
      "reviewLatest": "Review latest records",
      "retryStorage": "Retry saving review",
      "downloadDraft": "Download review draft",
      "history": "View linked conversation history",
      "historyFailed": "Linked history could not be loaded or relationships changed. Reload it.",
      "historyOrder": "Conversations from all connected records, newest start first.",
      "noHistory": "No conversations in this view.",
      "more": "Load more",
      "changes": "View relationship changes",
      "changesFailed": "Relationship changes could not be loaded.",
      "changesRetention": "Shows relationship changes from the last 90 days.",
      "noChanges": "No relationship changes in the last 90 days.",
      "linked": "Link confirmed",
      "unlinked": "Link removed",
      "errors": {
        "unconfirmed": "The result is unconfirmed. Keep the original request and check again.",
        "conflict": "Records or the relationship changed after review. Load the latest records and decide again.",
        "deleted": "One of these customer records is no longer available.",
        "forbidden": "Your account no longer has permission to confirm this relationship.",
        "invalid": "Check the review and load the latest records before confirming.",
        "requestConflict": "This request belongs to different changes. Review the latest records before making a new decision.",
        "limit": "A group supports up to 100 records and 20 direct links per record. Review existing relationships."
      }
    },
    "profileDraft": {
      "title": "Profile drafts",
      "memoryOnly": "Available only in this tab. Restore and download a copy before leaving.",
      "loading": "Checking drafts on this browser…",
      "unreadable": "Some drafts could not be checked. Your current editor is still available.",
      "description": "Drafts belong to this account on this browser. Restore one to review and save it. Signing out removes them.",
      "checkAgain": "Check drafts again",
      "pending": "Save result unconfirmed",
      "discardPending": "Discarding this draft does not undo any change already saved to the customer.",
      "unsent": "Not saved to the customer",
      "restore": "Restore draft",
      "discard": "Discard draft",
      "saving": "Saving draft on this browser…",
      "saved": "Draft saved on this browser for this account. Save to update the customer. Signing out removes drafts.",
      "unsaved": "This draft could not be saved on this browser. Keep this page open or download a copy before leaving.",
      "cleanupFailed": "The editor closed, but a saved local draft could not be removed. It may appear again.",
      "retryStorage": "Retry saving draft",
      "download": "Download draft"
    },
    "editRecovery": {
      "conflict": "These details changed while you were editing. Compare each field, choose the value to keep, then save again. Your other changes are still here.",
      "unconfirmed": "The save result is unconfirmed. Retry the same changes to check the result.",
      "deleted": "This customer was deleted. Your text is still here to copy; it cannot be saved to the deleted customer.",
      "invalid": "Check these details before saving again.",
      "current": "Latest saved value",
      "mine": "My change",
      "useCurrent": "Use latest value",
      "keepMine": "Keep my change"
    },
    "changeHistory": {
      "title": "Profile change history",
      "description": "Shows staff, tag, operator AI, CSV and widget contact edits. New changes retain before/after values for 90 days. Other automation changes are not included.",
      "loadError": "Could not load change history.",
      "empty": "No profile or tag changes to show.",
      "formerActor": "Former teammate",
      "csvImport": "CSV import",
      "operatorAgent": "Operator AI",
      "widgetVisitor": "Widget visitor",
      "more": "Show earlier changes",
      "fields": {
        "phoneCountry": "Phone Country",
        "name": "Name",
        "email": "Email",
        "phone": "Phone",
        "company": "Company",
        "notes": "Notes",
        "status": "Status",
        "tags": "Tags",
        "other": "Other field"
      }
    },
    "profileRestore": {
      "legacyValue": "This previous value does not meet the current edit limits. It remains available to review.",
      "viewValues": "Review previous values",
      "valuesUnavailable": "Previous values were not recorded or have expired.",
      "reviewTitle": "Review selected profile values",
      "reviewDescription": "Compare the recorded change with the current values. Only selected fields return to their previous values; other fields and customer identity stay unchanged.",
      "before": "Before this change",
      "after": "After this change",
      "current": "Current value",
      "emptyValue": "Empty",
      "reason": "Reason for restoring selected values",
      "approval": "I reviewed the current values and selected fields.",
      "confirm": "Restore selected values",
      "retryOriginal": "Retry original restore request",
      "reviewLatest": "Review latest values",
      "conflict": "Selected fields changed. Review their latest values and confirm again.",
      "unconfirmed": "The result is unconfirmed. Retry the original request to check or finish it.",
      "unavailable": "This customer or the recorded values are no longer available. The review remains available to download.",
      "invalid": "These selected values cannot be restored. Review the latest values.",
      "forbidden": "Your current account cannot restore these values.",
      "requestConflict": "This request identity already belongs to a different operation. Review again before creating a new request.",
      "confirmed": "Selected values restored. A new change records the result and your reason.",
      "readFailed": "Could not load the recorded and current values. Retry from the history.",
      "reviewAgain": "Select fields and confirm after reviewing the latest values.",
      "draftTitle": "Saved profile restore review",
      "recover": "Recover restore review",
      "discard": "Discard restore review",
      "noReason": "No reason entered yet",
      "draftsUnreadable": "Saved restore reviews could not be checked. Keep this page open and retry.",
      "discardWarning": "Discarding this private review does not undo a request already received by the server.",
      "restorationRecorded": "Restored from an earlier change",
      "recordedReason": "Recorded restore reason",
      "expires": "Recorded values are available until {{at}}."
    },
    "creation": {
      "matchPhoneCountryUnknown": "Phone may match; numbering country needs review",
      "checking": "Checking previous customer requests…",
      "recoveryFailed": "Previous requests could not be checked. Close and reopen this dialog to retry.",
      "saved": "{{name}} was saved. Open this customer to continue.",
      "viewSaved": "View saved customer",
      "reenter": "A previous request has no confirmed result. Enter the same details to retry it safely.",
      "resume": "Retry previous request",
      "sameDetails": "Use the original name, email, phone and company for this retry. Check the customer list if you no longer have those details.",
      "unconfirmed": "The save result is unconfirmed. Retry with these details to check or finish the same request.",
      "deleted": "The customer from this request has been deleted. Retrying will not recreate it.",
      "storageWarning": "This browser cannot save the recovery request. Keep this page open and retry here; recovery may be unavailable after a reload.",
      "reviewTitle": "Customer saved · follow-up needs review",
      "reviewDescription": "A follow-up automation did not finish with a confirmed result. Check its execution history before retrying any customer-facing action.",
      "viewWorkflows": "View workflows",
      "existingTitle": "Existing contact matches",
      "matchDescription": "These records share this email or phone number. Review them before creating a separate contact. Shared contact details do not prove that these are the same person.",
      "matchEmail": "Same email",
      "matchPhone": "Same phone digits",
      "openExisting": "Open existing contact",
      "separateReason": "Reason for a separate contact",
      "separateApproval": "I reviewed these records and want to create a separate contact.",
      "createSeparate": "Create separate contact",
      "matchLimit": "These matches cannot be reviewed completely here. Open the existing records or refine the contact details before creating another record.",
      "reviewChanged": "The details or existing records changed, or the review expired. Check them again before creating a separate contact.",
      "checkFailed": "Could not check existing contacts. No creation request was submitted; try again.",
      "existingUnavailable": "Could not open this existing contact. Check the latest records again.",
      "savedUnavailable": "Could not confirm the saved customer is still available. Your recovery request is kept; close and reopen to check again.",
      "preservedReason": "Original separate-contact reason: {{reason}}"
    },
    "title": "Customers",
    "allCustomers": "All Customers",
    "addCustomer": "Add Customer",
    "customerDetails": "Customer Details",
    "contactInfo": "Contact Info",
    "recentChats": "Recent Chats",
    "tags": "Tags",
    "notes": "Notes",
    "createdAt": "Created At",
    "lastSeen": "Last Seen",
    "totalChats": "Total Chats",
    "segment": "Segment",
    "customFields": "Custom Fields",
    "exportCustomers": "Export Customers",
    "importCustomers": "Import Customers",
    "searchCustomers": "Search customers...",
    "addNewCustomer": "Add New Customer",
    "createCustomer": "Create Customer",
    "noCustomers": "No customers found",
    "totalSpent": "Total Spent",
    "purchaseCount": "Purchase Count",
    "company": "Company",
    "noNotes": "No notes",
    "addTagPlaceholder": "Add a tag...",
    "status": {
      "active": "Active",
      "inactive": "Inactive",
      "pending": "Pending",
      "vip": "VIP",
      "atRisk": "At Risk"
    },
    "addFirstCustomer": "Add your first customer",
    "companyPlaceholder": "Enter company name",
    "createError": "Failed to create customer",
    "customerCreated": "Customer created successfully",
    "customerUpdated": "Customer updated successfully",
    "customers": "customers",
    "emailPlaceholder": "Enter email",
    "fetchError": "Failed to load customers",
    "namePlaceholder": "Enter name",
    "phonePlaceholder": "Enter phone number",
    "selectCustomer": "Select a customer",
    "selectCustomerDesc": "Select a customer from the list to view their details",
    "subtitle": "Manage your customer relationships",
    "tagExists": "Tag already exists",
    "tagLimit": "A customer can have up to 20 tags.",
    "tagInvalid": "Enter a tag of 1 to 64 characters.",
    "updateError": "Failed to update customer",
    "lastContact": "Last contact",
    "chatCount": "{{count}} chats",
    "chatCount_one": "{{count}} chat",
    "source": {
      "widget": "Web widget",
      "website": "Web widget",
      "kakao": "KakaoTalk",
      "line": "LINE",
      "naver": "Naver",
      "instagram": "Instagram",
      "email": "Email",
      "manual": "Added manually",
      "import": "Imported"
    },
    "sourceColumn": "Source",
    "email": "Email",
    "exportError": "The export failed.",
    "exportTruncated": "The 5,000-row export cap was reached, so the file is incomplete.",
    "lastInteraction": "Last contact",
    "name": "Name",
    "phone": "Phone",
    "listAria": "Customer list",
    "switchDraftTitle": "You have unsaved changes",
    "switchDraftMessage": "Opening another customer closes this editor and keeps the draft. Return to this customer to restore it. If the draft is available only in this tab, download a copy before closing the tab. A save already sent may still finish.",
    "switchDraftConfirm": "Keep draft and switch",
    "switchChecking": "Checking the selected customer before switching…",
    "switchUnavailable": "The selected customer could not be opened. Your current editor and draft remain here. Check again or cancel.",
    "showBrowsers": "Include {{count}} visitors who never wrote",
    "showBrowsers_one": "Include {{count}} visitor who never wrote",
    "hideBrowsers": "Only people who wrote",
    "exportOne": "Export data",
    "deleteTitle": "Delete this customer?",
    "deleteMessage": "{{name}} and their conversations, messages, internal notes and ratings will be erased. Attachments with no other references are deleted when safe; files in use are retried. This cannot be undone — export a copy first if you need one.",
    "deleteError": "Could not delete the customer",
    "deletePending": "Customer removal was accepted, but data cleanup is still running. Give an administrator erasure ID {{id}} to check its status.",
    "deleteFilesShared": "{{count}} attachments were kept because other records still reference them",
    "deleteFilesDeferred": "{{count}} attachments are queued for automatic deletion retry",
    "deleteFilesFailed": "{{count}} attachments could not be deleted. Check the audit record",
    "blocked": "Blocked",
    "import": {
      "button": "Import",
      "title": "Import customers",
      "help": "Upload a CSV file or paste its contents. The first row must be column headers (Name, Email, Phone, Company, Tags, Member ID). With a Member ID, that member lands on this record when they log in to the widget.",
      "tagsFormat": "For tags containing spaces or commas, use a JSON array such as [\"VIP customer\",\"follow up\"]. New CSV exports use this format. When updating a customer, [] removes all tags.",
      "chooseFile": "Choose CSV file",
      "draftHelp": "Closing this window keeps the CSV on this page. After leaving or reloading, upload the same file again to restore review choices and reasons. Current contacts must be reviewed and confirmed again.",
      "draftSaved": "Review choices and reasons are saved in this tab. The CSV itself is not saved.",
      "draftRestored": "Your review draft was restored. Check the current contacts and confirm each decision again.",
      "draftUnsaved": "Review choices and reasons remain in this page but could not be saved. Retry saving before leaving or reloading.",
      "draftCleanupFailed": "The saved review draft could not be removed. Your input remains here. Retry discarding before leaving.",
      "retryDraftStorage": "Retry saving review draft",
      "discardDraft": "Discard import draft",
      "discardDraftBody": "Discard this CSV input and its review choices and reasons for the current file and mode? This does not change any customers.",
      "discardDraftConfirm": "Discard draft",
      "pasteLabel": "CSV contents",
      "check": "Preview",
      "checking": "Checking…",
      "confirm": "Import {{n}}",
      "importing": "Importing…",
      "done": "{{created}} added · {{updated}} updated",
      "failed": "Import failed",
      "previewFailed": "Preview failed",
      "willCreate": "New",
      "willUpdate": "Update",
      "willSkip": "Skipped",
      "hasError": "Error",
      "duplicates": "Existing email addresses or phone numbers:",
      "skipThem": "Skip",
      "updateThem": "Overwrite",
      "ignoredColumns": "Columns not imported",
      "truncated": "Split files larger than {{max}} rows before importing.",
      "showingFirst": "Showing {{shown}} of {{total}} rows, errors first",
      "showingRange": "Showing {{start}}–{{end}} of {{total}} rows · errors and pending reviews first",
      "previousPage": "Previous rows",
      "nextPage": "Next rows",
      "changesHeading": "Planned changes",
      "changeLine": "Review {{count}} changes on CSV line {{line}}",
      "targetContact": "Existing customer: {{name}} · {{email}} · {{phone}}",
      "emailKept": "The existing email stays {{email}}.",
      "field": "Field",
      "before": "Current value",
      "after": "After import",
      "emptyValue": "(empty)",
      "onlyChanges": "Only the fields listed here change. Blank CSV cells keep current values; [] clears tags.",
      "invalidCsv": "Invalid CSV. Check that quotes are closed and escaped correctly.",
      "empty": "Add a header and at least one customer row.",
      "tooLarge": "Use a CSV file of 5 MB or smaller.",
      "tooManyRows": "A file can contain up to 5,000 customer rows. Split it before importing.",
      "missingHeaders": "Include a Name or Email column in the first row.",
      "fixErrors": "Fix every error before importing. No customers will be changed until the file is valid.",
      "previewChanged": "Customer data or the file changed, or the preview expired. Review a new preview before importing.",
      "requestConflict": "This request belongs to a different import. Review the file again.",
      "readFailed": "Could not read the file. Choose it again.",
      "line": "CSV line",
      "needsReview": "Needs review",
      "reviewRequired": "Review every conflicting row and confirm its action before importing. Errors and pending reviews appear first; confirming them reveals the next rows.",
      "readSlow": "Import lookup took too long. Your CSV remains here. Try again or reduce the file size.",
      "matchLimit": "Matching contact data exceeds the lookup limits. Reduce the file or ask an administrator to review existing contacts.",
      "reviewLine": "Review line {{line}}",
      "fileMatch": "Earlier CSV line {{line}}",
      "sharedContact": "A shared email or phone does not prove two records belong to the same person. Compare the contacts before choosing an action.",
      "reviewAction": "Action for this row",
      "reviewActionFor": "Action for CSV line {{line}}",
      "updateSelected": "Update this existing customer",
      "createSeparate": "Create a separate customer",
      "skipRow": "Skip this row",
      "keepEmail": "The selected customer's original email remains unchanged. Only supplied name, phone, company and tags can be updated. Blank values keep their current values; [] clears tags.",
      "reviewReason": "Record why this action is appropriate",
      "reasonFor": "Reason for CSV line {{line}}",
      "reviewConfirm": "I compared these contacts and confirm this action",
      "applyReview": "Review this selection",
      "pendingRecovery": "The original import result needs confirmation. Its file, mode and reviewed actions remain fixed while you recover it.",
      "memoryRecovery": "This browser could not save the original request. Keep this page open and recover the result here; recovery after reload is not guaranteed.",
      "recoverResult": "Recover original import result",
      "recoveredDone": "Original import confirmed: {{created}} created · {{updated}} updated at the time. Later edits and deletions remain in effect.",
      "match": {
        "phoneCountryUnknown": "Phone may match; country unconfirmed",
        "email": "Same email",
        "phone": "Same phone digits"
      },
      "reasons": {
        "invalidPhoneCountry": "Use a supported two-letter phone country code, such as KR, US or GB.",
        "phoneCountryUnknown": "A matching phone has no country information. Review the numbering country before selecting an existing or separate customer.",
        "extraCells": "More cells than the header. Check commas and quotes.",
        "missingIdentity": "Name or email is required.",
        "invalidEmail": "Enter a valid email address.",
        "fieldLength": "Limit name to 256, email to 254, phone to 64 and company to 512 characters.",
        "tagLimit": "Use up to 20 tags, each 64 characters or fewer.",
        "invalidTags": "Enter tags as a JSON array of strings, such as [\"VIP customer\",\"follow up\"].",
        "fileDuplicate": "Duplicate within this file.",
        "ambiguous": "Several customers match. Resolve the duplicate records first.",
        "update": "Update existing customer. Blank fields keep their current values.",
        "exists": "Customer already exists.",
        "unchanged": "Customer details are unchanged.",
        "noIdentity": "No email or phone. A new import can create another record.",
        "phoneEmailMismatch": "This phone matches an existing customer with a different email.",
        "identifierConflict": "Email and phone match different existing customers.",
        "fileCollision": "This row shares an email or phone with an earlier, different CSV row.",
        "repeatedTarget": "An earlier row already updates this customer. Skip this row or create a reviewed separate record.",
        "identityLimit": "Too many matches or oversized legacy contact values. Correct or split this row before importing.",
        "changePreviewLimit": "Existing profile values cannot be fully reviewed within the import limits. Correct this customer's profile before importing. No rows will be applied.",
        "reviewedSkip": "Reviewed: skip this row.",
        "reviewedSeparate": "Reviewed: create a separate customer.",
        "invalidMemberId": "Member ID must be 1-128 characters with no surrounding spaces",
        "memberDuplicate": "An earlier row in this file has the same member ID",
        "memberExists": "A customer with this member ID already exists",
        "memberConflict": "This member ID belongs to a different customer than the one this row matches. Review both records",
        "memberUnavailable": "This member ID belongs to a customer you cannot view"
      },
      "unconfirmed": "The import result could not be confirmed. Retry with the same contents to recover the result without creating duplicates.",
      "willLinkMembers": "Member links {{count}}",
      "linkedMembers": "{{count}} existing customers linked to members"
    },
    "vip": "VIP",
    "atRisk": "At risk"
  },
  "campaigns": {
    "title": "Campaigns",
    "allCampaigns": "All Campaigns",
    "createCampaign": "Create Campaign",
    "editCampaign": "Edit Campaign",
    "deleteCampaign": "Delete Campaign",
    "campaignName": "Campaign Name",
    "campaignType": "Campaign Type",
    "targetSegment": "Target Segment",
    "schedule": "Schedule",
    "draft": "Draft",
    "scheduled": "Scheduled",
    "sent": "Sent",
    "smtpAccepted": "Accepted by SMTP",
    "measurementNote": "Send counts include only email with recipient-level SMTP acceptance records. Unverified historical totals appear as —; opens, clicks, and conversions are not measured yet.",
    "openNotMeasured": "Opens are not measured",
    "completed": "Completed",
    "emailCampaign": "Email Campaign",
    "pushCampaign": "Push Campaign",
    "inAppCampaign": "In-App Campaign",
    "stats": "Stats",
    "openRate": "Open Rate",
    "clickRate": "Click Rate",
    "conversionRate": "Conversion Rate",
    "messageBody": "Message Body",
    "opened": "Opened",
    "campaignUpdated": "Campaign updated successfully",
    "campaignDeleted": "Campaign deleted successfully",
    "updateError": "Failed to update campaign",
    "deleteError": "Failed to delete campaign",
    "deleteConfirmation": "Are you sure you want to delete \"{{name}}\"? This action cannot be undone.",
    "launch": "Launch",
    "pause": "Pause",
    "statusChanged": "Campaign status updated",
    "statusError": "Failed to update campaign status",
    "deliveryReview": "Recipient delivery history",
    "deliveryRun": "Delivery run",
    "olderRuns": "Load earlier runs",
    "runStatus": {
      "running": "Running",
      "paused": "Review required",
      "completed": "Completed",
      "reviewed": "Closed after review",
      "cancelled": "Stopped",
      "expired": "Expired"
    },
    "currentRun": "Current run",
    "nextRunAt": "Next send",
    "scheduleTitle": "Delivery schedule",
    "saveDraft": "Save as draft",
    "scheduleSend": "Schedule delivery",
    "scheduleZone": "Time zone",
    "scheduleZoneHelp": "For example, Asia/Seoul or America/New_York (IANA time zone)",
    "scheduleStart": "First delivery time",
    "scheduleFrequency": "Repeat",
    "scheduleOnce": "Once",
    "scheduleDaily": "Daily",
    "scheduleWeekly": "Weekly",
    "scheduleMonthly": "Monthly",
    "scheduleInterval": "Interval (1–12)",
    "scheduleEnd": "Last delivery deadline (optional)",
    "scheduleEndHelp": "Leave blank to repeat until stopped. Missed occurrences are not sent in a burst.",
    "scheduleInvalid": "Check the time zone, future delivery time, and end deadline.",
    "scheduleTargetRequired": "Select at least one target segment before scheduling delivery.",
    "stopSchedule": "Stop schedule",
    "stopScheduleConfirm": "Stop the next and future sends for {{name}}. Existing delivery history stays available.",
    "stopScheduleReason": "Record a reason to stop (at least 10 characters)",
    "stopScheduleSuccess": "Scheduled delivery stopped",
    "stopScheduleError": "Could not stop the schedule. Refresh its status.",
    "closeRun": "Close reviewed run",
    "closeRunSafety": "Failed, skipped, and unconfirmed recipients in this run will not be resent automatically. Record the review to schedule the next run. The campaign completes if its end deadline passed.",
    "closeRunSuccess": "This run was closed",
    "closeRunError": "Could not close this run. Refresh the delivery history.",
    "resume": "Resume pending recipients",
    "resumeTitle": "Resume paused delivery",
    "resumeCounts": "Pending {{pending}} · Unconfirmed {{unknown}} · In progress {{sending}}",
    "resumeSafety": "Only recipients who have not been attempted will be sent. Attempted recipients are never resent automatically.",
    "resumeAcknowledge": "I reviewed the unconfirmed recipients and understand they will not be resent automatically.",
    "resumeNote": "Record the review evidence and reason to resume (at least 10 characters)",
    "resumeWait": "Wait for active attempts to settle. If the worker stopped, try resuming and review the updated history.",
    "resumeSuccess": "Sending resumed for pending recipients",
    "resumeError": "Could not resume delivery. Refresh the recipient review.",
    "providerTitle": "Later SES outcome",
    "providerNotConfigured": "SES event tracking is not configured; actual delivery and bounce outcomes are unavailable.",
    "providerSetupWarning": "Email provider feedback is needed to receive delivery, bounce, and complaint results. Outcomes after SMTP acceptance are currently unavailable.",
    "providerWaiting": "Waiting for SES events. Actual delivery is not yet confirmed.",
    "providerNote": "Latest SES outcome for each recipient. Delivery means the recipient server accepted the email, not that a person read it.",
    "providerMetrics": {
      "observed": "Outcomes received",
      "delivered": "Server delivered",
      "bounced": "Bounced",
      "complained": "Spam complaints",
      "rejected": "SES rejected",
      "delayed": "Delayed"
    },
    "providerStates": {
      "sent": "SES accepted",
      "delayed": "Delayed",
      "delivered": "Recipient server accepted",
      "bounced": "Bounced",
      "complained": "Spam complaint",
      "rejected": "SES rejected"
    },
    "deliveryLoadError": "Failed to load delivery history. Try again.",
    "noDeliveryHistory": "No delivery history has been saved",
    "deliveryMetrics": {
      "targeted": "Targeted",
      "totalSent": "Accepted by SMTP",
      "failed": "Failed",
      "skipped": "Not sent",
      "unknown": "Unconfirmed"
    },
    "deliveryStatus": {
      "pending": "Pending",
      "sending": "Attempting",
      "sent": "Accepted by SMTP",
      "failed": "Failed",
      "skipped": "Not sent",
      "unknown": "Unconfirmed"
    },
    "deliveryReasons": {
      "empty_audience": "The campaign paused because it has no recipients. Review the audience, then close this run.",
      "uncertain_delivery": "The campaign paused because delivery is uncertain. Review each recipient.",
      "failed_recipients": "Delivery failed for some recipients.",
      "skipped_recipients": "Some recipients were not sent a message.",
      "invalid_target": "A target segment is missing or invalid.",
      "schedule_expired": "The schedule ended before this occurrence could be sent.",
      "invalid_schedule": "The recurring schedule is invalid, so delivery was paused.",
      "interrupted_after_attempt": "Work stopped after an attempt and before its result was saved.",
      "provider_call_threw": "The provider call outcome is unknown.",
      "provider_outcome_missing": "The provider did not confirm whether it accepted the message.",
      "not_delivered": "The email was not sent.",
      "provider_rejected": "The email provider rejected the request.",
      "campaign_stopped": "The campaign was stopped by a manager before this recipient was sent.",
      "smtp_unconfigured": "SMTP is not configured; no message was sent.",
      "marketing_consent_missing": "No explicit marketing consent was recorded; no message was sent.",
      "marketing_unsubscribed": "This email address opted out; no message was sent.",
      "marketing_suppressed": "This address was suppressed after an SES bounce or complaint; no message was sent.",
      "marketing_preference_unavailable": "The marketing preference could not be checked; no message was sent.",
      "unsubscribe_url_unavailable": "An unsubscribe link could not be created; no message was sent.",
      "recipient_changed_or_deleted": "The customer's email changed or the customer was deleted; no message was sent."
    },
    "types": {
      "sms": "SMS",
      "push": "Push Notification",
      "email": "Email",
      "inApp": "In-App",
      "chat": "Chat"
    },
    "selectedSegments": "{{count}} segment(s) selected",
    "campaignCreated": "Campaign created successfully",
    "campaigns": "campaigns",
    "createError": "Failed to create campaign",
    "createFirstCampaign": "Create your first campaign",
    "fetchError": "Failed to load campaigns",
    "noCampaigns": "No campaigns",
    "selectTargetSegments": "Select target segments",
    "subtitle": "Deliver effective marketing messages to your customers",
    "status": {
      "draft": "Draft",
      "scheduled": "Scheduled",
      "running": "Running",
      "paused": "Paused",
      "completed": "Completed",
      "cancelled": "Cancelled"
    },
    "clicked": "Clicked",
    "converted": "Converted",
    "running": "Sending",
    "paused": "Paused",
    "failed": "Failed",
    "cancelled": "Cancelled",
    "launchStarted": "Sending started",
    "launchConfirmTitle": "Send campaign",
    "launchConfirmBody": "Send “{{name}}” to the audience below now.",
    "launchSegmentLine": "{{name}} · about {{count}} customers",
    "launchNoAudience": "This campaign has no target segment, so it cannot be sent. Edit the campaign and choose a segment.",
    "launchConfirmNote": "Sent email cannot be recalled. Only customers who consented to marketing receive it.",
    "launchEditAudience": "Choose audience",
    "launchNow": "Send now",
    "active": "Live",
    "ended": "Ended"
  },
  "segments": {
    "title": "Segments",
    "allSegments": "All Segments",
    "createSegment": "Create Segment",
    "segmentName": "Segment Name",
    "conditions": "Conditions",
    "addCondition": "Add Condition",
    "matchAll": "Match All",
    "matchAny": "Match Any",
    "customerCount": "Customer Count",
    "lastUpdated": "Last Updated",
    "noSegments": "No segments available",
    "preview": "Preview",
    "previewCustomers": "Preview Matching Customers",
    "matchingCustomers": "Matching Customers",
    "noMatchingCustomers": "No customers match the criteria",
    "commaSeparatedValues": "Enter comma-separated values",
    "existsValue": "Exists",
    "missingValue": "Does not exist",
    "operators": {
      "equals": "Equals",
      "contains": "Contains",
      "greaterThan": "Greater than",
      "greaterThanOrEqual": "Greater than or equal",
      "lessThan": "Less than",
      "lessThanOrEqual": "Less than or equal",
      "in": "In (multiple values)",
      "notIn": "Not in (multiple values)",
      "exists": "Exists"
    },
    "fields": {
      "status": "Status",
      "tags": "Tags",
      "email": "Email",
      "company": "Company",
      "name": "Name",
      "phone": "Phone",
      "totalSpent": "Total Spent",
      "purchaseCount": "Purchase Count",
      "lastPurchaseDate": "Last Purchase Date",
      "createdAt": "Created Date",
      "lastInteractionDate": "Last contact"
    },
    "createSuccess": "Segment created successfully",
    "updateSuccess": "Segment updated successfully",
    "deleteSuccess": "Segment deleted successfully",
    "fetchError": "Failed to load segments",
    "saveError": "Failed to save segment",
    "invalidFilters": "Check each condition: choose a field, operator, and valid value before saving.",
    "deleteError": "Failed to delete segment",
    "subtitle": "Define and manage customer groups",
    "createFirst": "Create your first segment",
    "deleteConfirmation": "Are you sure you want to delete this segment?",
    "deleteSegment": "Delete Segment",
    "previewError": "Failed to load preview",
    "selectField": "Select field",
    "selectOperator": "Select operator",
    "showingFirst10": "Showing first 10 only",
    "nameRequired": "Enter a segment name",
    "filtersRequired": "Add at least one condition",
    "removeFilter": "Remove condition {{n}}"
  },
  "chatbot": {
    "title": "Chatbot",
    "allChatbots": "All Chatbots",
    "createChatbot": "Create Chatbot",
    "chatbotName": "Chatbot Name",
    "scenarios": "Scenarios",
    "createScenario": "Create Scenario",
    "scenarioName": "Scenario Name",
    "trigger": "Trigger",
    "response": "Response",
    "active": "Active",
    "inactive": "Inactive",
    "testBot": "Test Bot",
    "analytics": "Analytics",
    "conversations": "Conversations",
    "handoffRate": "Handoff Rate",
    "type": "Type",
    "scenarioBased": "Scenario-based",
    "aiAgent": "AI Agent",
    "successRate": "Success Rate",
    "activateImmediately": "Activate immediately",
    "triggerType": "Trigger Type",
    "keyword": "Keyword",
    "intent": "Intent",
    "messageContains": "Message Contains",
    "responseType": "Response Type",
    "text": "Text",
    "buttons": "Buttons",
    "handoff": "Agent Handoff",
    "addResponse": "Add Response",
    "deleteScenario": "Delete Scenario",
    "scenarioSettings": "Scenario Settings",
    "triggerConditions": "Trigger Conditions",
    "responses": "Responses",
    "testScenario": "Test Scenario",
    "scenarioEditor": "Scenario Editor",
    "triggerValue": "Trigger Value",
    "addScenario": "Add Scenario",
    "timeBased": "Time-based",
    "fetchError": "Failed to load chatbots",
    "createSuccess": "Chatbot created successfully",
    "updateSuccess": "Chatbot updated successfully",
    "saveError": "Failed to save chatbot",
    "deleteSuccess": "Chatbot deleted successfully",
    "deleteError": "Failed to delete chatbot",
    "activated": "Chatbot activated",
    "deactivated": "Chatbot deactivated",
    "toggleError": "Failed to toggle chatbot status",
    "manageScenarios": "Manage Scenarios",
    "noScenarios": "No scenarios yet",
    "editScenario": "Edit Scenario",
    "scenarioDeleted": "Scenario deleted",
    "scenarioAdded": "Scenario added",
    "scenarioUpdated": "Scenario updated",
    "deleteChatbot": "Delete Chatbot",
    "noChatbots": "No chatbots",
    "createFirst": "Create your first chatbot",
    "subtitle": "Automate customer service with AI chatbots",
    "deleteConfirmation": "Are you sure you want to delete this chatbot?",
    "emptyTitle": "No chatbots yet",
    "emptyDescription": "Build a conversation flow that answers common questions automatically when a keyword matches."
  },
  "analytics": {
    "title": "Analytics",
    "overview": "Overview",
    "performance": "Performance",
    "customerInsights": "Customer Insights",
    "teamPerformance": "Team Performance",
    "dateRange": "Date Range",
    "today": "Today",
    "yesterday": "Yesterday",
    "last7Days": "Last 7 Days",
    "last30Days": "Last 30 Days",
    "custom": "Custom",
    "export": "Export",
    "chatAnalytics": "Chat Analytics",
    "totalChats": "Chats in range",
    "totalSent": "Sent in range",
    "agentPerformance": "Agent Performance",
    "chatsHandled": "Chats Handled",
    "satisfaction": "Satisfaction",
    "avgResponseTime": "Avg Response Time",
    "resolutionRate": "Resolution Rate",
    "chatVolume": "Chat Volume",
    "responseTime": "Response Time",
    "customerSatisfaction": "Customer Satisfaction",
    "dailyChats": "Daily Chats",
    "responseTimeDistribution": "Response Time Distribution",
    "conversionRate": "Conversion Rate",
    "totalConverted": "Total Converted",
    "customerAnalytics": "Customer Analytics",
    "totalCustomers": "Total Customers",
    "newCustomers": "New Customers",
    "activeCustomers": "Active Customers",
    "vipCustomers": "VIP Customers",
    "atRiskCustomers": "At-Risk Customers",
    "churnRate": "Churn Rate",
    "channelAnalytics": "Channel Analytics",
    "channel": "Channel",
    "chatsCount": "Chats",
    "fetchError": "Failed to load analytics",
    "endDate": "End Date",
    "loadingData": "Loading data...",
    "noAgentData": "No agent data available",
    "noChannelData": "No channel data available",
    "startDate": "Start Date",
    "subtitle": "Analyze business performance and gain insights",
    "channelMetrics": "Channel Metrics",
    "firstResponseTime": "First Response Time",
    "onlineTime": "Online Time",
    "pending": "Pending",
    "performanceMetrics": "Performance Metrics",
    "resolved": "Resolved",
    "exportCsv": "Export CSV",
    "presetToday": "Today",
    "preset7d": "Last 7 days",
    "preset30d": "Last 30 days",
    "preset90d": "Last 90 days",
    "responseBuckets": {
      "0-1m": "Under 1 min",
      "1-5m": "1–5 min",
      "5-15m": "5–15 min",
      "15-30m": "15–30 min",
      "30m+": "30+ min"
    },
    "overNConversations": "over {{count}} conversations",
    "overNConversations_one": "over {{count}} conversation",
    "overNRatings": "over {{count}} ratings",
    "overNRatings_one": "over {{count}} rating",
    "viewLowRated": "See {{count}} poorly rated",
    "campaignReceiptNote": "Confirmed SMTP acceptances for {{n}} campaigns in the selected period. Unverified historical totals are excluded; opens, clicks, and conversions are not measured yet.",
    "unassignedNote": "Currently assigned conversations and satisfaction exclude {{n}} conversations without an assignee.",
    "unattributedResponses": "Among conversations started in this period, {{n}} first human responses lack responder evidence and are excluded from agent response times.",
    "unattributedClosures": "{{n}} conversations closed in this period and still closed lack actor evidence and are excluded from agent manual closure counts.",
    "undatedClosures": "{{n}} historical closed conversations lack a closure date and cannot be placed in a reporting period.",
    "assignedConversations": "Currently assigned",
    "manualClosures": "Manual closures",
    "closureAttribution": "Manual closures count recorded close actions within this period, credited to the person who closed the conversation. Reopening and closing again counts as another closure. Automated, AI tool and unattributed historical closures are excluded.",
    "agentAttribution": "Conversation counts and satisfaction follow the current assignment. Response time follows the first human responder, even after reassignment. Missing response evidence is excluded."
  },
  "marketing": {
    "title": "Marketing",
    "campaigns": "campaigns",
    "popups": "Popups",
    "banners": "Banners",
    "announcements": "Announcements",
    "createNew": "Create New",
    "targeting": "Targeting",
    "display": "Display Settings",
    "preview": "Preview",
    "noPopups": "No popups yet",
    "noBanners": "No banners yet",
    "noAnnouncements": "No announcements yet",
    "messagePreview": "Campaign message preview",
    "noItemsYet": "No {{type}} yet",
    "createFirst": "Create your first {{type}} to start engaging visitors",
    "createItem": "Create {{type}}",
    "impressions": "Impressions",
    "clicks": "Clicks",
    "loadingCampaigns": "Loading campaigns...",
    "subtitle": "Create popups, banners, and campaigns to engage your visitors",
    "campaignName": "Campaign Name",
    "content": "Content",
    "buttonText": "Button Text",
    "buttonUrl": "Button URL",
    "message": "Message",
    "backgroundColor": "Background Color",
    "textColor": "Text Color",
    "position": "Position",
    "frequency": "Frequency",
    "displaySettings": "Display Settings",
    "editCampaign": "Edit Campaign",
    "createCampaign": "Create Campaign",
    "targetPages": "Target Pages",
    "targetPagesPlaceholder": "/home, /products, /pricing",
    "targetPagesHelp": "Enter exact page paths or full URLs separated by commas. Leave empty for all pages.",
    "showOnPageLoad": "Show on page load",
    "showAfterDelay": "Show after delay",
    "seconds": "seconds",
    "positions": {
      "center": "Center",
      "top": "Top",
      "bottom": "Bottom",
      "topLeft": "Top Left",
      "topRight": "Top Right",
      "bottomLeft": "Bottom Left",
      "bottomRight": "Bottom Right"
    },
    "frequencies": {
      "always": "Always",
      "oncePerSession": "Once per session",
      "oncePerDay": "Once per day",
      "oncePerWeek": "Once per week",
      "onceEver": "Once ever",
      "once": "Once only"
    },
    "types": {
      "popup": "Popup",
      "banner": "Banner",
      "tooltip": "Tooltip",
      "notification": "Notification"
    },
    "size": "Size",
    "sizes": {
      "small": "Small",
      "medium": "Medium",
      "large": "Large",
      "fullscreen": "Fullscreen"
    },
    "animation": "Animation",
    "animations": {
      "fade": "Fade",
      "slide": "Slide",
      "zoom": "Zoom",
      "none": "None"
    },
    "imageUrl": "Image URL",
    "triggers": "Triggers",
    "showOnScroll": "Show on scroll",
    "showOnExit": "Show on exit intent",
    "showOnIdle": "Show when idle",
    "scheduling": "Scheduling",
    "startDate": "Start Date",
    "endDate": "End Date",
    "timezone": "Timezone",
    "clone": "Clone",
    "cloneSuccess": "Campaign cloned successfully",
    "cloneError": "Failed to clone campaign",
    "viewAnalytics": "View Analytics",
    "campaignAnalytics": "Campaign Analytics",
    "conversions": "Conversions",
    "conversionRate": "Conversion Rate",
    "dismissals": "Dismissals",
    "analyticsError": "Failed to load analytics",
    "createSuccess": "Campaign created",
    "deleteError": "Failed to delete campaign",
    "deleteSuccess": "Campaign deleted",
    "fetchError": "Failed to load campaigns",
    "noTitle": "Untitled",
    "saveError": "Failed to save campaign",
    "statusError": "Failed to change status",
    "statusUpdated": "Status updated",
    "updateSuccess": "Campaign updated",
    "deleteTitle": "Delete this campaign?",
    "deleteMessage": "\"{{name}}\" goes, and its delivery and conversion history with it. This cannot be undone.",
    "ab": {
      "title": "A/B test",
      "enabled": "Enable variant delivery",
      "help": "Visitors receive one variant in proportion to the weights. Blank content inherits the base content. Reordering or renaming keeps the assignment; changing weights or variants can change it. Content edits keep existing counts. Clone the campaign to start a new experiment.",
      "name": "Variant name",
      "weight": "Traffic weight",
      "share": "Expected share: {{percent}}%",
      "variantNumber": "Variant {{number}}",
      "add": "Add variant",
      "remove": "Remove variant",
      "invalid": "Use unique variant names and weights between 0 and 10,000. An enabled test needs at least two variants and a positive total weight.",
      "analyticsHelp": "Counts are visitor-reported events, not unique people. CTR is clicks divided by impressions. No statistical winner has been determined.",
      "active": "Variant delivery enabled",
      "inactive": "Variant delivery disabled; historical counts remain"
    },
    "scheduleTimezone": "Schedule time zone",
    "scheduleHelp": "Enter times in this IANA time zone, for example Asia/Seoul or America/New_York. Use UTC for an ambiguous daylight-saving time. Empty dates have no time limit. Open pages recheck near the start time and about once a minute while visible.",
    "scheduleInvalid": "Use a valid time zone and unambiguous times. The end must be after the start.",
    "audience": {
      "title": "Customer audience",
      "help": "Select up to 20 segments and 20 conditions. Selected segments match with OR; all additional conditions must match. With no selection or conditions, all visitors qualify. Rules use the current customer record after visitor ownership is verified.",
      "loadError": "Could not load segments.",
      "unavailable": "Inactive",
      "noSegments": "No segments yet. You can add customer conditions below.",
      "missingSegment": "A selected segment is no longer available. Remove it or choose another before publishing.",
      "conditionNumber": "Customer condition {{number}}",
      "field": "Customer field",
      "operator": "Comparison",
      "value": "Condition value",
      "chooseValue": "Choose a value",
      "statuses": {
        "active": "Active",
        "inactive": "Inactive",
        "vip": "VIP",
        "at-risk": "At risk"
      },
      "customKey": "Custom field key",
      "listHelp": "Separate values with commas.",
      "addCondition": "Add customer condition",
      "removeCondition": "Remove condition {{number}}",
      "fields": {
        "status": "Status",
        "tags": "Tags",
        "name": "Name",
        "email": "Email",
        "phone": "Phone",
        "company": "Company",
        "source": "Source",
        "totalSpent": "Total spent",
        "purchaseCount": "Purchase count",
        "createdAt": "Created date",
        "lastPurchaseDate": "Last purchase date",
        "lastInteractionDate": "Last interaction date",
        "customFields": "Custom field"
      },
      "operators": {
        "equals": "Equals",
        "contains": "Contains",
        "gt": "Greater than",
        "lt": "Less than",
        "gte": "At least",
        "lte": "At most",
        "in": "In list",
        "nin": "Not in list"
      }
    },
    "displayRules": {
      "help": "Page load, scroll, exit intent and inactivity are alternative conditions: the first one met shows the campaign. Delay sets a minimum wait for every condition. With no condition selected, the campaign shows on page load. Eligible announcements appear one at a time; closing or expiration allows the next one.",
      "scrollDepth": "Scroll depth (%)",
      "idleSeconds": "Seconds without activity",
      "delaySeconds": "Minimum wait (seconds)",
      "frequencyHelp": "Frequency uses this browser’s storage: the current tab session, 24 hours, 7 days or once ever. Blocked or cleared storage cannot retain the limit after reload."
    },
    "conversion": {
      "title": "Conversion goal",
      "none": "Do not measure",
      "chatStarted": "New chat starts",
      "help": "Count a saved new widget conversation when both campaign delivery and the last reported click, or impression if there is no click, are within seven days. Existing-chat replies and public conversion reports do not count. Choose the goal before visitors see the campaign; earlier eligible views can still lead to a recorded chat after the goal is disabled."
    },
    "measurement": {
      "events": "Impressions and clicks are visitor-reported events, not unique people. CTR is clicks divided by impressions.",
      "verified": "New chat starts are saved conversations attributed to the reported campaign. Counts use retained chats; deleting a customer removes their evidence. Earlier records remain when the goal is disabled.",
      "unavailable": "New chat starts have not been connected for this campaign, or its connection is unavailable. This is not a measured zero.",
      "rate": "A unique visitor cohort is not measured, so no chat-start rate or statistical winner is claimed.",
      "reported": "Visitors reported {{n}} conversion events. These are separate from stored chat starts and do not verify purchases.",
      "retired": "Removed variant"
    },
    "revision": {
      "title": "Results by saved conditions",
      "help": "Changing content, allocation or campaign settings records new conditions. Totals above combine all conditions. Review reported events and retained new conversations separately for each set. Unique-visitor conversion rates and statistical winners are not measured.",
      "error": "Could not load results by saved conditions.",
      "empty": "No separate conditions have been recorded yet. They will be recorded on the next save.",
      "number": "Conditions {{n}}",
      "current": "Current settings",
      "savedAt": "Conditions saved at",
      "legacy": "Unassigned conditions: reported impressions {{impressions}} · reported clicks {{clicks}} · new conversations {{conversations}}",
      "counts": "Reported impressions {{impressions}} · reported clicks {{clicks}} · new conversations {{conversations}}",
      "settings": "View saved settings",
      "allPages": "All pages",
      "segmentNotice": "Audiences use current customer data and segment definitions. Separate changes to segment definitions are not included in this conditions record.",
      "page": "{{page}} / {{pages}}",
      "conflict": "This campaign was changed by another operation. Review the current settings before saving again.",
      "reload": "Load latest conditions",
      "reloadHelp": "Loading the latest conditions replaces your current inputs with those settings. Reapply the changes you need before saving.",
      "segments": "Selected segments: {{n}}"
    },
    "deletion": {
      "unavailable": "This campaign is no longer available. Check the refreshed list.",
      "unconfirmed": "Deletion could not be confirmed. Retry or close this dialog to check its result.",
      "conflict": "This campaign changed after you opened the confirmation. Review the latest campaign before deleting it.",
      "reviewLatest": "Review latest campaign",
      "completed": "The campaign was deleted. Retrying will not delete another campaign.",
      "cancelHelp": "Check whether deletion completed, or stop it if it has not been applied. This does not restore a deleted campaign."
    },
    "creation": {
      "title": "Unconfirmed campaign requests",
      "checking": "Checking saved campaign results…",
      "unconfirmed": "The result is unconfirmed. Check the saved result or retry the same request.",
      "saved": "Saved campaign: {{name}}",
      "openSaved": "Open saved campaign",
      "sameDetails": "Enter the original settings to retry this request. Different settings cannot reuse it.",
      "reenter": "The original settings are needed to retry. Enter them again; campaign text is not stored on this device.",
      "deleted": "This campaign was deleted. This request will not create it again.",
      "storageWarning": "Recovery is available on this page. Keep this page open until the result is confirmed.",
      "cancel": "Cancel unconfirmed request",
      "cancelHelp": "Opens the current campaign if already saved, or cancels an unsaved request.",
      "cancelled": "This request was cancelled and cannot change a campaign.",
      "mutationLabel": "{{action}}: {{name}}",
      "changedSince": "The original change was saved and later changes exist. Review the current campaign."
    }
  },
  "settings": {
    "visitorRetention": {
      "title": "Unengaged visitor retention",
      "scope": "Only widget visitors without contact details, conversations, purchases, staff notes, tags, extra customer attributes or linked records are eligible. Recent visits or changes protect a customer.",
      "days": "Days to retain after last activity",
      "daysHelp": "Choose 7–730 days. Automatic cleanup starts disabled.",
      "enabled": "Automatic cleanup enabled · {{count}} days retained",
      "disabled": "Automatic cleanup disabled",
      "preview": "Preview deletion scope",
      "enable": "Confirm and enable automatic cleanup",
      "stop": "Stop automatic cleanup",
      "reload": "Check current settings",
      "retrySave": "Check the same save request",
      "incidents": {
        "title": "Cleanup incident follow-up",
        "help": "Track cleanup problems, responsible administrators and action notes. Reading a notification does not acknowledge an incident. Unacknowledged problems are reminded hourly; personally acknowledged problems daily while unresolved.",
        "scan": "Eligibility check incident",
        "cleanup": "Deletion cleanup incident",
        "active": "Unresolved",
        "resolved": "Recovery confirmed",
        "opened": "Detected {{date}}",
        "checked": "Monitor last checked {{date}}",
        "recovered": "Recovery confirmed {{date}}",
        "stale": "The monitor has not checked this incident for over five minutes. Current recovery is unconfirmed.",
        "owner": "Responsible administrator: {{name}}",
        "unassigned": "Unassigned",
        "ownerUnavailable": "The previous administrator is no longer eligible. Assign an active administrator.",
        "acknowledged": "Responsibility acknowledged {{date}}",
        "unacknowledged": "Awaiting acknowledgement by the assigned administrator",
        "nextReminder": "Next unresolved reminder scheduled {{date}}",
        "reminded": "Last unresolved reminder {{date}}",
        "take": "Take responsibility",
        "assign": "Change responsible administrator",
        "cancelAssignment": "Close assignment",
        "acknowledge": "Acknowledge responsibility",
        "searchAdministrator": "Search administrators",
        "assignee": "Responsible administrator",
        "saveAssignment": "Save responsible administrator",
        "administratorsUnavailable": "Could not retrieve eligible administrators. Search again or close and reopen assignment.",
        "searchMore": "More administrators match. Narrow the search to find the person you need.",
        "note": "Incident action note",
        "noteHelp": "Describe what was checked or changed; up to 2,000 characters. Save explicitly. Unsaved drafts remain only on this page.",
        "addNote": "Save action note",
        "clearDraft": "Clear unsaved note",
        "draftChanged": "The incident changed after this draft began. Review current details, then copy and clear the draft before writing it for the current incident.",
        "changed": "The incident or administrator changed. Refresh and review current details before making another change.",
        "saveUnavailable": "Could not confirm this action. Retry the same request to retrieve or save its result; a new action is blocked until it is confirmed.",
        "superseded": "This action was recorded, and the incident changed afterwards. Current details are shown here; see action history for the original record.",
        "retry": "Check the same incident action",
        "saved": "Incident action recorded.",
        "meaning": "Acknowledgement records that an administrator has taken responsibility. Recovery is confirmed by automatic checks. Action records are kept for 90 days.",
        "history": "View action history",
        "hideHistory": "Hide action history",
        "includeEarlier": "Include earlier occurrences",
        "earlier": "Earlier occurrence",
        "historyUnavailable": "Could not retrieve action history. No empty history is assumed; refresh or check current incidents.",
        "noHistory": "No action records are retained for this occurrence.",
        "older": "Load older action records",
        "refreshHistory": "Refresh action history",
        "formerMember": "Former member",
        "unavailable": "Could not retrieve incidents. Their state is unknown; check again.",
        "none": "No monitored cleanup incidents are recorded.",
        "refresh": "Check current incidents",
        "events": {
          "opened": "Monitor detected a problem.",
          "recovered": "Monitor confirmed recovery.",
          "assigned": "{{actor}} assigned responsibility: {{assignee}}.",
          "acknowledged": "{{actor}} acknowledged responsibility.",
          "noted": "{{actor}} recorded an action note.",
          "owner_unavailable": "The previous responsible administrator became unavailable."
        }
      },
      "pendingSave": "Unresolved policy save",
      "pendingEnable": "Requested: enable automatic cleanup with {{days}} days retained.",
      "pendingStop": "Requested: stop automatic cleanup.",
      "pendingSaveHelp": "The result is not confirmed. Check the same request to apply or retrieve its result, or cancel it before starting a different change. Returning to this page does not apply it automatically.",
      "obsoleteSave": "The policy or review has changed or expired. Cancel this request, then check current settings before making a new change.",
      "cancelSave": "Cancel unresolved request",
      "cancelSaveUnavailable": "Could not confirm cancellation. The same request is retained; check its result or retry cancellation.",
      "saveLookupUnavailable": "Could not retrieve your policy save requests. Check current settings again before making another change.",
      "saveResult": "Policy save result",
      "saveCancelled": "This request was cancelled before it was applied.",
      "saveSuperseded": "This request was applied, and the policy was changed afterwards. The current policy is shown below.",
      "saveApplied": "This request was applied. Cancelling a request does not undo an already applied policy; check the current policy below.",
      "dismissSave": "Dismiss this result",
      "confirmTitle": "Enable automatic visitor cleanup",
      "confirmScope": "This preview found {{count}} eligible visitors with no activity since {{date}}. Enabling cleanup periodically removes eligible visitors, including future visitors inactive for {{days}} days.",
      "checkedAt": "Scope checked {{date}} · This preview is valid for 10 minutes.",
      "irreversible": "Deletion cannot be undone. Eligibility is checked again before removal; visitors who gain a conversation or contact details are kept. Stopping cleanup does not reverse a deletion already started.",
      "acknowledge": "I reviewed the scope and understand deletion cannot be undone.",
      "lastRun": "Last check {{date}} · {{count}} deletions accepted · {{failed}} acceptance failures",
      "completion": "Attachments and linked records are cleaned with separate retries after deletion is accepted. Check deletion progress on the customer screen to confirm completion.",
      "saved": "Retention policy saved.",
      "unavailable": "Could not check the retention policy or deletion scope. Please check again.",
      "conflict": "The policy changed or the preview expired. Check current settings, then preview again.",
      "saveUnavailable": "Could not confirm the save result. Check the same request or load current settings.",
      "progressTitle": "Visitor cleanup progress",
      "progressUnavailable": "Could not check cleanup progress. Counts are unavailable; try again.",
      "progressStale": "The policy changed. Check current settings before using these figures.",
      "progressChecked": "Checked {{date}}",
      "candidateProfiles": "{{count}} profiles to check for cleanup",
      "candidateHelp": "These profiles match the age and empty-profile rules. Linked records may still protect them, so this is not the number that will be deleted.",
      "cleanupTotals": "{{active}} pending · {{complete}} completed · {{retrying}} retrying",
      "oldestCleanup": "Oldest pending deletion accepted {{date}}",
      "scanProgress": "Last batch checked {{count}} profiles · policy revision {{revision}}",
      "nextCheck": "Next eligibility check {{date}}",
      "refreshProgress": "Refresh cleanup progress",
      "previewWorking": "Checking the full deletion scope · {{count}} candidate profiles examined. No cleanup is enabled by this check.",
      "previewUnavailable": "The scope check is temporarily unavailable. Its saved progress is retained and checking will retry.",
      "cancelPreview": "Close scope check",
      "previousPreview": "Previous scope check",
      "previousPreviewDetails": "Your earlier scope check · {{days}} days retained · started {{date}}",
      "previousPreviewDone": "Completed · {{count}} eligible visitors. Review this result again before enabling cleanup.",
      "previousPreviewWorking": "Saved progress · {{count}} candidate profiles examined. Checking continues after you leave this page.",
      "resumePreview": "Resume scope review",
      "resumeUnavailable": "Could not retrieve your earlier scope check. Check current settings again before starting another check.",
      "closeUnavailable": "Could not confirm that the scope check was closed. Close the same check again or check current settings.",
      "previewClosed": "Scope check closed. It cannot enable cleanup; start a new check when needed.",
      "warnings": {
        "invalidPolicy": "The stored retention period is invalid. Stop cleanup or review a valid period.",
        "cleanupRetry": "Some accepted deletions are waiting for a retry. Check deletion progress on the customer screen.",
        "cleanupDelayed": "An accepted deletion has remained incomplete for over 15 minutes. Check deletion progress on the customer screen.",
        "scanFailure": "Eligibility checking or deletion acceptance failed. Automatic retries continue. Check the policy and deletion progress; contact support if failures continue.",
        "scanDelayed": "Automatic eligibility checks are over five minutes late. Refresh progress; contact support if the delay continues."
      },
      "backlogPaused": "New automatic deletions are paused while the cleanup backlog drains. Existing deletion jobs continue."
    },
    "storage": {
      "title": "Attachment storage",
      "measure": "Measure storage",
      "retry": "Check status again",
      "coverage": "Measures files linked to this workspace’s conversation, image and upload ownership records or pending customer erasure evidence. Historical unsent files without ownership evidence and files hosted by external services are excluded.",
      "unmeasured": "No measurement yet. Start a measurement; it continues after you leave this page.",
      "progress": "Measuring · {{count}} files checked",
      "unavailable": "Could not check measurement status. Usage was not treated as zero. Please try again.",
      "failed": "This measurement could not finish. Try measuring again shortly.",
      "previous": "The figures below are from the previous completed measurement.",
      "measuredAt": "Measurement completed: {{date}}",
      "bytes": "Total stored",
      "referencedBytes": "Used by records",
      "unattachedBytes": "Not sent or linked yet",
      "discardedBytes": "Awaiting deletion or failure cleanup",
      "files": "{{count}} files checked · {{copies}} stored copies",
      "missing": "{{count}} files recorded here were absent from storage and are excluded from the byte total.",
      "writing": "{{count}} files are being stored · {{bytes}} observed so far. Measure again once writing finishes.",
      "window": "Within this workspace each file key is counted once; stored copies are counted separately. These are observations over the measurement period. Uploads and deletions during it may appear in the next measurement. Requests within a minute reuse the measurement; completed results are kept for 7 days. This is not billed usage or a live balance.",
      "retention": "Referenced files have no automatic expiry. Unreferenced files become eligible for daily cleanup after 24 hours; active writes, reference reservations or deletion failures can delay removal. Customer and workspace erasure are handled separately.",
      "access": "Attachments require current workspace, team or customer access. Widget customer links last 10 minutes, external channel links 7 days, and email image links 30 days. Deletion or retraction can revoke access sooner."
    },
    "title": "Settings",
    "general": "General",
    "profile": "Profile",
    "team": "Team",
    "notifications": "Notifications",
    "integrations": "Integrations",
    "billing": "Billing",
    "security": "Security",
    "appearance": "Appearance",
    "language": "Language",
    "languageDescription": "Select the language for the interface",
    "korean": "한국어",
    "english": "English",
    "timezone": "Timezone",
    "saveChanges": "Save Changes",
    "changePassword": "Change Password",
    "twoFactor": "Two-Factor Authentication",
    "widget": "Widget",
    "channels": "Channels",
    "operatingHours": "Operating Hours",
    "generalSettings": "General Settings",
    "notificationSettings": "Notification Settings",
    "emailNotifications": "Email Notifications",
    "browserNotifications": "Browser Notifications",
    "soundNotifications": "Sound Notifications",
    "newChatNotifications": "New Chat Notifications",
    "newMessageNotifications": "New Message Notifications",
    "mentionNotifications": "Mention Notifications",
    "avatarUrl": "Avatar URL",
    "emailNotificationsDesc": "Email for things you cannot afford to miss, such as an SLA breach (sign-up and password emails are not affected by this)",
    "browserNotificationsDesc": "Show desktop notifications",
    "soundNotificationsDesc": "Play notification sounds",
    "widgetDescription": "Configure chat widget appearance",
    "primaryColor": "Primary Color",
    "greetingMessage": "Greeting Message",
    "operatingHoursDescription": "Set team operating hours",
    "teamDescription": "Manage team members and permissions",
    "securityDescription": "Manage account security",
    "markAllRead": "Mark all as read",
    "viewAllNotifications": "View all notifications",
    "noNotifications": "No notifications",
    "inviteTeamMember": "Invite Team Member",
    "inviteDescription": "Invite team members to collaborate",
    "emailAddress": "Email Address",
    "selectRole": "Select Role",
    "sendInvitation": "Send Invitation",
    "manageTeam": "Manage Team",
    "currentPassword": "Current Password",
    "newPassword": "New Password",
    "confirmNewPassword": "Confirm New Password",
    "enable2FA": "Enable Two-Factor Authentication",
    "emailRequired": "Email is required",
    "memberAdded": "Member added successfully",
    "allFieldsRequired": "All fields are required",
    "passwordMismatch": "Passwords do not match",
    "passwordTooShort": "Password must be at least {{count}} characters",
    "passwordChanged": "Password changed successfully",
    "passwordChangeError": "Failed to change password",
    "saveSuccess": "Settings saved successfully",
    "saveError": "Failed to save settings",
    "removeMember": "Remove Member",
    "removeMemberConfirmation": "Are you sure you want to remove {{name}} from the team?",
    "invitationSent": "Invitation sent successfully",
    "showAvatar": "Show Avatar",
    "showAvatarDesc": "Display agent avatar in chat widget",
    "autoOpen": "Auto Open Widget",
    "autoOpenDesc": "Automatically open chat widget for visitors",
    "autoOpenDelay": "Auto Open Delay (seconds)",
    "autoOpenDelayDesc": "Time to wait before auto-opening the widget",
    "joinedAt": "Joined",
    "memberDetails": "Member Details",
    "preChatForm": "Pre-chat Form",
    "widgetCommonKnowledge": "No product · shared knowledge only",
    "widgetProductHelp": "Copy a product-specific embed to link conversations and AI answers to that product's knowledge.",
    "widgetProductsLoading": "Checking product information. Please try again in a moment.",
    "preChatFormDesc": "Ask visitors for their name and contact details before the chat starts",
    "preChatMessage": "Intro Message",
    "preChatMessagePlaceholder": "Please share your details before we start.",
    "preChatPhone": "Phone",
    "preChatFieldOff": "Off",
    "preChatFieldOptional": "Optional",
    "preChatFieldRequired": "Required",
    "subtitle": "Manage your workspace and account settings",
    "greetingDefault": "Hello! How can we help you?",
    "widgetLivePreviewBadge": "Live preview",
    "widgetLivePreviewHint": "A live widget preview floats in the corner — changes apply instantly.",
    "widgetPreviewQ": "Hi, I have a question.",
    "widgetPreviewA": "Sure, what would you like to know? Happy to help 😊",
    "widgetTogglePreview": "Toggle preview",
    "members": "Members",
    "membersDescription": "Manage who can access this workspace and invite new members.",
    "membersLoadFailed": "Could not load members.",
    "workspaceMembers": "Workspace members",
    "seatUsage": "Seat usage",
    "seatUsageOf": "{{used}} of {{total}} seats used",
    "seatUsageUnlimited": "{{used}} in use · unlimited",
    "seatPending": "{{count}} pending invite(s)",
    "seatLimitBadge": "Seats full",
    "seatLimitReached": "All purchased seats are in use. Add seats in Billing.",
    "inviteMember": "Invite a member",
    "sendInvite": "Send invite",
    "inviteHint": "We email an invitation link to this address. It expires in 7 days.",
    "inviteSent": "Invitation sent to {{email}}.",
    "inviteFailed": "Could not send the invitation.",
    "inviteResent": "Invitation resent.",
    "inviteRevoked": "Invitation revoked.",
    "inviteExpires": "Expires",
    "inviteSentTimes": "sent {{count}}×",
    "pendingInvitations": "Pending invitations",
    "revokeInviteTitle": "Revoke this invitation?",
    "revokeInviteMessage": "The link sent to {{email}} stops working immediately.",
    "roleUpdated": "Role updated.",
    "memberActive": "Active",
    "memberDeactivated": "Deactivated",
    "deactivate": "Deactivate",
    "reactivate": "Reactivate",
    "deactivateMemberTitle": "Deactivate this member?",
    "deactivateMemberMessage": "{{name}} is signed out immediately and can no longer sign in. Their conversation history is kept and a seat is freed.",
    "memberDeactivatedToast": "Member deactivated.",
    "memberReactivatedToast": "Member reactivated.",
    "you": "you",
    "seatGrandfathered": "Existing members keep their access. Upgrade to add more seats.",
    "dayOpen": "{{day}} open",
    "primaryColorContrast": "White text on this colour has a {{ratio}}:1 contrast ratio (4.5:1 recommended). Visitors may struggle to read the widget.",
    "greetingHint": "Leave blank to greet each visitor in their own language.",
    "privacyPolicyUrl": "Privacy policy link",
    "privacyPolicyUrlHint": "Linked from the privacy notice on the widget’s first screen. https addresses only.",
    "privacyPolicyUrlInvalid": "Enter an address starting with https://.",
    "privacyNoticeText": "Privacy notice",
    "privacyNoticeDefault": "Your messages and contact details are processed to answer your enquiry.",
    "privacyNoticeHint": "Shown under the greeting before the visitor’s first message (up to 300 characters). Leave blank for the default sentence in the visitor’s language.",
    "jumpTo": "Jump to a setting",
    "jumpToDesc": "Workspace settings are grouped into the sections below.",
    "tabHint": {
      "profile": "Your account name, email and details",
      "notifications": "Desktop notifications and sounds",
      "widget": "Web widget snippet, colours and copy",
      "channels": "KakaoTalk and LINE webhook setup",
      "hours": "Operating hours, timezone and away message",
      "members": "Invite teammates and manage seats",
      "team": "Groups used for routing conversations",
      "security": "How you sign in, and account security"
    },
    "inviteCreatedNoEmail": "The invitation for {{email}} was created but the email could not be sent. Resend it from the list below, or share the invite link directly.",
    "inviteResendNoEmail": "The email could not be resent. Check your mail settings, or share the invite link directly.",
    "emailChangedVerify": "Saved. A verification email was sent to {{email}} — your address is unverified until you follow that link.",
    "memberActiveChats": "{{count}} live",
    "deactivateMemberMessageWithChats": "{{name}} is signed out immediately and can no longer sign in. Their {{count}} live conversation(s) move to other agents right now. Their conversation history is kept and a seat is freed.",
    "reassignedAll": "{{count}} conversation(s) reassigned",
    "reassignedWithUnassigned": "{{moved}} reassigned · {{unassigned}} left unassigned",
    "passwordManagedByGoogle": "Your password lives in your Google Account",
    "passwordManagedByGoogleDesc": "Trifrost signs in with Google only, so there is no separate password here. Change your password or two-step verification in your Google Account settings",
    "openGoogleSecurity": "Open Google Account security",
    "desktopBlocked": "Your browser has blocked notifications for this site. Allow them from the padlock icon in the address bar → site settings",
    "desktopNotAsked": "Notification permission has not been granted yet, so no desktop notifications will appear",
    "desktopUnsupported": "This browser does not support desktop notifications",
    "widgetKeyNotReady": "The install snippet is not ready yet. Please try again in a moment.",
    "visitorProtectionTitle": "New visitor creation protection",
    "visitorProtectionPolicy": "New visitor creation attempts: {{ipPerMinute}} per minute and {{ipPerHour}} per hour per IP; {{workspacePerMinute}} per minute, {{workspacePerHour}} per hour and {{workspacePerDay}} per day across the workspace.",
    "visitorProtectionHelp": "Verified returning sessions and initial response recovery are excluded. Windows start at first use and include failed creation attempts. Ask the service operator to adjust limits for high traffic or shared networks.",
    "resendInviteTo": "Resend invitation to {{email}}",
    "revokeInviteTo": "Revoke invitation for {{email}}",
    "offHoursMessage": "Off-hours message",
    "holidays": "Holidays",
    "holidaysDescription": "The desk is closed on these days regardless of the weekly schedule. New business-hours SLA targets also skip them.",
    "holidaysEmpty": "No holidays added.",
    "holidayUnnamed": "Closed",
    "removeHoliday": "Remove holiday on {{date}}",
    "holidayDate": "Date",
    "holidayName": "Name (optional)",
    "holidayNamePlaceholder": "e.g. New Year's Day",
    "holidayDateRequired": "Pick a date for the holiday.",
    "holidayDuplicate": "That date is already on the list.",
    "widgetTitle": "Widget title",
    "widgetTitleDefault": "Support Team",
    "widgetTitleHint": "The name visitors see. Leave blank to use your workspace name.",
    "sendCustomerInfo": "Send logged-in customer info (optional)",
    "sendCustomerInfoHelp": "Attach what your site already knows with data-cd-* and it appears alongside the conversation. These values are not verified, so do not use them to confirm identity.",
    "cspHeading": "Content Security Policy",
    "cspDesc": "If your site sets a CSP, allow the entries below or the widget cannot load its styles or reach the server, and the chat will not open.",
    "sessions": {
      "title": "Signed-in devices",
      "help": "Review browser logins and recent activity. End any login you do not recognize. Tabs sharing the same login will sign out together.",
      "refresh": "Refresh list",
      "unknownBrowser": "Unknown browser",
      "current": "Current login",
      "lastSeen": "Last used: {{date}}",
      "expires": "Expires: {{date}}",
      "ip": "IP address: {{ip}}",
      "logoutHere": "Sign out here",
      "revoke": "End login",
      "empty": "No active logins.",
      "loadFailed": "Could not load your logins. Refresh the list to retry.",
      "revokeFailed": "The result could not be confirmed. Retry or refresh the list.",
      "confirmTitle": "End this login?",
      "confirmCurrent": "Tabs using this login will sign out together. Your other device logins will remain active.",
      "confirmOther": "All connections using this login will end. Your current login and other devices will remain active.",
      "confirm": "End login now"
    },
    "memberIdentity": {
      "title": "Member identity · logged-in members",
      "help": "Connect a member who is logged in to your site to one customer record across every device. Your site's server signs the member ID with the secret below (HMAC-SHA256) and passes it to the widget. The member's record and past conversations open only when the signature matches. Same scheme as Channel Talk's memberHash.",
      "on": "On",
      "off": "Off",
      "rotatedAt": "Secret changed: {{when}}",
      "previousValid": "The previous secret is also accepted until {{when}}.",
      "showOnce": "This secret is shown only once. Store it in your server's environment, never in browser code.",
      "secretLabel": "Member identity secret",
      "create": "Create secret",
      "rotate": "Rotate secret",
      "disable": "Turn off member identity",
      "adminOnly": "Only admins can create or change the secret.",
      "failed": "That did not work. Please try again shortly.",
      "tabTag": "In the install tag",
      "tabSpa": "Login and logout",
      "tabServer": "Server signing",
      "tabChannel": "Switching from Channel Talk",
      "tagHelp": "For server-rendered sites, add the member ID and signature to the install tag. No inline script, so it works under a Content-Security-Policy.",
      "spaHelp": "Call boot after login and shutdown on logout. Logging out clears the member's support history from this browser, so shared computers stay safe.",
      "serverHelp": "Always sign on your site's server. If the secret reaches the browser, anyone can enter support as another member.",
      "channelHelp": "Keep your Channel Talk loader and every ChannelIO(...) call. Change only the three things below, and keep your memberHash signing code — replace only the secret's value.",
      "rotateTitle": "Rotate the secret?",
      "rotateMessage": "A new secret is issued. The current one keeps working for 24 hours, so update your server within that time.",
      "disableTitle": "Turn off member identity?",
      "disableMessage": "Every member immediately connects as an anonymous visitor. Sites that still send signatures will log an error in the widget console and continue anonymously."
    },
    "inviteSeatsFull": "All purchased seats are in use, so you cannot invite anyone right now.",
    "inviteSeatsFullLink": "Add seats in Billing",
    "offHoursDefault": "We're outside business hours right now. Leave a message and we'll get back to you.",
    "offHoursHint": "Leave it empty to show a default message in the visitor's language.",
    "noTeamTitle": "No teams yet",
    "noTeamDescription": "Teams are created with \"Create channel\" in Team chat. Once one exists you can invite teammates here and use it for assignment. To invite people to the workspace, use the Members tab.",
    "goToTeamChat": "Create a channel in Team chat",
    "exportWorkspaceData": "Export data"
  },
  "teamChat": {
    "title": "Team Chat",
    "channels": "Channels",
    "directMessages": "Direct Messages",
    "createChannel": "Create Channel",
    "members": "Members",
    "pinned": "Pinned",
    "editMessage": "Edit",
    "deleteMessage": "Delete Message",
    "replyTo": "Reply",
    "addReaction": "Add reaction",
    "attachFile": "Attach file",
    "replyingTo": "Replying to",
    "edited": "edited",
    "deleteConfirm": "Are you sure you want to delete this message?",
    "editSuccess": "Message edited",
    "editError": "Failed to edit message",
    "deleteSuccess": "Message deleted",
    "deleteError": "Failed to delete message",
    "reactionError": "Failed to add reaction",
    "manageMembers": "Manage Members",
    "addMember": "Add member",
    "inviteSuccess": "Member invited",
    "inviteError": "Failed to invite member",
    "removeSuccess": "Member removed",
    "removeError": "Failed to remove member",
    "roleSuccess": "Role updated",
    "roleError": "Failed to change role",
    "fetchError": "Failed to load teams",
    "messagesError": "Failed to load messages",
    "sendError": "Failed to send message",
    "createSuccess": "Team created",
    "createError": "Failed to create team",
    "subtitle": "Communicate with your team in real-time",
    "noChannels": "No channels",
    "noMessages": "No messages",
    "typeMessage": "Type a message...",
    "searchTeams": "Search teams...",
    "roles": {
      "owner": "Owner",
      "admin": "Admin",
      "member": "Member"
    },
    "deleteTeam": "Delete team",
    "deleteTeamTitle": "Delete this team?",
    "deleteTeamMessage": "\"{{name}}\" and its conversations go. Anything routed to this team returns to general assignment. This cannot be undone.",
    "deleteTeamError": "Could not delete the team",
    "cancelReply": "Cancel reply",
    "removeAttachment": "Remove attachment: {{name}}",
    "removeMember": "Remove member: {{name}}",
    "notAMember": "You are not a member of this team, so it will not update live."
  },
  "features": {
    "realTimeChat": "Real-time Chat",
    "realTimeChatDesc": "Connect with customers instantly across all channels",
    "customerCRM": "Customer CRM",
    "customerCRMDesc": "Unified customer profiles and interaction history",
    "marketingAutomation": "Marketing Automation",
    "marketingAutomationDesc": "Targeted campaigns and personalized messaging"
  },
  "errors": {
    "somethingWrong": "Something went wrong",
    "notFound": "We couldn't find that.",
    "unauthorized": "Authentication required",
    "forbidden": "Access denied",
    "serverError": "Server error occurred",
    "networkError": "Network error occurred",
    "tryAgain": "Please try again",
    "network": "Can't reach the server. Check your network connection.",
    "timeout": "The server is taking too long to respond. Please try again.",
    "server": "The server hit a temporary problem. Please try again shortly.",
    "rateLimited": "Too many requests. Please wait a moment and try again.",
    "badRequest": "That request couldn't be processed. Check the values and try again.",
    "unknown": "Something went wrong.",
    "invalidInput": "We couldn't save that. Check that every required field is filled in.",
    "invalidCredentials": "That email or password isn't right.",
    "wrongCurrentPassword": "Your current password isn't right.",
    "passwordTooShort": "Password must be at least {{count}} characters.",
    "emailTaken": "That email is already in use.",
    "oauthNoPassword": "Set a password first — social sign-in accounts can't change one.",
    "alreadyMember": "That person is already in this workspace.",
    "seatLimit": "No seats left. Change your plan or remove a member.",
    "invalidEmail": "That email address doesn't look right.",
    "duplicate": "That value is already registered.",
    "missingFields": "A required field is empty. Check your input.",
    "boundaryTitle": "This part could not be displayed",
    "boundaryBody": "The rest of the console still works. Try again, or move to another screen."
  },
  "notes": {
    "editor": {
      "actions": {
        "update": "Edit note",
        "delete": "Delete note",
        "resolve": "Resolve note",
        "reopen": "Reopen note",
        "restore": "Restore earlier text"
      },
      "confirm": {
        "update": "Save note",
        "delete": "Confirm deletion",
        "resolve": "Mark resolved",
        "reopen": "Reopen",
        "restore": "Save restored text as a new revision"
      },
      "content": "Edited note content",
      "drafts": "Note edit drafts",
      "checking": "Checking drafts on this browser…",
      "unreadable": "Some drafts could not be checked. You can still edit notes.",
      "recoverDescription": "Restore an unfinished note action for this account on this browser. Signing out removes these drafts.",
      "checkAgain": "Check note drafts again",
      "pendingDraft": "Result unconfirmed. Discarding this draft does not undo an action already saved.",
      "memoryOnly": "Available only in this tab. Restore and download a copy before leaving.",
      "restore": "Restore note draft",
      "discard": "Discard note draft",
      "saving": "Saving draft on this browser…",
      "saved": "Draft saved on this browser. Confirm the action to update the note. Signing out removes drafts.",
      "unsaved": "This draft could not be saved on this browser. Keep this page open or download a copy before leaving.",
      "cleanupFailed": "The editor closed, but a saved local draft could not be removed. It may appear again.",
      "retryStorage": "Retry saving draft",
      "download": "Download draft",
      "deleteWarning": "Deleting this note removes its text and linked mention notifications. This cannot be undone.",
      "loadLatest": "Load latest note",
      "latest": "Latest saved note",
      "unresolved": "Unresolved",
      "keepMine": "Keep my text",
      "useLatest": "Use latest text",
      "reviewLatest": "Review this version",
      "retryOperation": "Retry note action",
      "updated": "Updated {{date}}",
      "errors": {
        "conflict": "This note changed while you were working. Compare the latest version before confirming your action. Your text is still here.",
        "conflictUnavailable": "This note changed, but its latest version could not be loaded. Your text is still here. Load it before trying again.",
        "unconfirmed": "The result is unconfirmed. Retry the same action to check what was saved.",
        "deleted": "This note is no longer available. Your text is still here to copy or download.",
        "forbidden": "You no longer have permission for this action. Your text is still here to copy or download.",
        "invalid": "Check the note before trying again. Text must contain 1–10,000 characters.",
        "requestConflict": "This request could not be verified. Download your draft and check the current note before starting a new action.",
        "historyUnavailable": "The selected earlier text expired or was erased. Cancel this restoration and read the current note history."
      }
    },
    "resolved": "Resolved",
    "loadFailed": "Internal notes could not be loaded. Retry to see the latest notes.",
    "internalNotes": "Internal Notes",
    "onlyVisibleToTeam": "Only visible to team",
    "noInternalNotes": "No internal notes",
    "addNote": "Add Note",
    "addNotePlaceholder": "Add internal note...",
    "history": {
      "open": "Note change history",
      "title": "Internal note change history",
      "close": "Close history",
      "refresh": "Refresh note history",
      "loading": "Loading note history…",
      "retention": "New changes are retained for 90 days. Deleting a note erases its retained text immediately. Current notes keep their own lifetime.",
      "unavailable": "History could not be loaded. Refresh to read current records.",
      "empty": "No change records are retained for this conversation. Older changes have not been reconstructed.",
      "version": "Version {{n}}",
      "unknownActor": "Previous editor unknown",
      "formerActor": "Former or unavailable teammate",
      "legacy": "This snapshot was recorded at a later change. Its earlier editor and change time are unknown.",
      "system": "Automatically generated note",
      "resolved": "Resolved in this version",
      "unresolved": "Unresolved in this version",
      "erased": "This note was deleted. Its retained text has been erased.",
      "noContent": "No text is retained in this record.",
      "restoredSource": "Restored from a retained earlier version",
      "reviewRestore": "Review restoring this text",
      "restoreHelp": "This saves the selected earlier text as a new revision. Current attachments, mentions and resolution stay in place. Review and confirm before saving.",
      "sourceUnavailable": "The current note or your author access could not be verified. Refresh before trying again.",
      "more": "More change records",
      "loaded": "{{count}} of {{total}} notes loaded",
      "pageError": "More notes could not be loaded. Retry or refresh the list.",
      "moreNotes": "More internal notes",
      "operations": {
        "create": "Created",
        "legacy": "Earlier state recorded",
        "update": "Edited",
        "resolve": "Resolved",
        "restore": "Text restored",
        "delete": "Deleted"
      }
    },
    "mentions": {
      "label": "Mentioned teammates",
      "open": "Mention teammates",
      "hide": "Hide teammate search",
      "count": "{{n}} of 50 teammates selected",
      "unavailable": "Unavailable teammate {{n}}",
      "unavailableShort": "Unavailable teammate",
      "remove": "Remove mention of {{name}}",
      "removeShort": "Remove",
      "search": "Search teammates by name",
      "help": "Active workspace members, including teammates without a team. Only newly added recipients receive a new mention notification.",
      "refresh": "Refresh teammates",
      "loading": "Loading teammates…",
      "error": "Teammates could not be loaded. Refresh before choosing a recipient.",
      "lookupError": "Selected teammates could not be verified. Their selection is retained; refresh to check names.",
      "empty": "No active teammates match this search.",
      "add": "Mention {{name}}",
      "more": "More teammates",
      "loadCurrent": "Load current mentions before editing",
      "keepChanges": "Keep my changes",
      "changed": "Mention recipients changed",
      "pending": "This note request is unconfirmed. Its text and recipients are fixed. Check its saved result, retry the same request, or confirm cancellation before editing.",
      "checkRequest": "Check saved note",
      "cancelRequest": "Cancel pending note",
      "results": {
        "saved": "The original note was saved. This draft has been cleared.",
        "cancelled": "Cancellation is confirmed. Your text and recipients remain available for editing.",
        "deleted": "The original note was deleted. Your private text is retained.",
        "missing": "No saved request was found. Retry the same note or confirm cancellation.",
        "unavailable": "The result could not be checked. Your original request remains fixed."
      },
      "checkingRecipient": "Checking teammate {{n}}…"
    }
  },
  "workspaces": {
    "title": "Workspaces",
    "workspaces": "Workspaces",
    "subtitle": "Create and manage workspaces and products",
    "activeWorkspace": "Active workspace",
    "createWorkspace": "Create workspace",
    "editWorkspace": "Edit workspace",
    "deleteWorkspace": "Delete workspace",
    "noWorkspaces": "No workspaces",
    "nameRequired": "Enter a workspace name",
    "namePlaceholder": "e.g. Acme Corp",
    "plan": "Plan",
    "products": "Products",
    "addProduct": "Add product",
    "noProducts": "No products yet. Add the services/products your company offers.",
    "allProducts": "All products",
    "productNamePlaceholder": "Product/service name",
    "productDescPlaceholder": "Description (optional)",
    "deleteConfirmation": "Are you sure you want to delete \"{{name}}\"? This action cannot be undone.",
    "created": "Workspace created",
    "updated": "Workspace updated",
    "deleted": "Workspace deleted",
    "deletePending": "Workspace deletion was accepted, but data cleanup is still pending. Check operation {{id}} in the operational status.",
    "deleteFilesShared": "{{count}} attachments were kept because other records still reference them",
    "deleteFilesDeferred": "{{count}} attachments are queued for automatic deletion retry",
    "deleteFilesFailed": "{{count}} attachments could not be deleted. Check the audit record",
    "fetchError": "Failed to load workspaces",
    "saveError": "Failed to save",
    "deleteError": "Failed to delete",
    "deleteWillErase": "{{count}} records held by this workspace will be permanently erased with it.",
    "deleteWillErase_one": "{{count}} record held by this workspace will be permanently erased with it.",
    "deleteNothingStored": "No stored data.",
    "deleteRetained": "Billing and usage records are retained as required by law.",
    "deleteIrreversible": "This cannot be undone.",
    "deleteFiles": "{{count}} uploaded files will be checked and deleted when no other record or active write needs them.",
    "exportFirst": "Export first",
    "exportDone": "Exported. Attachments are a separate download — use the links inside the bundle.",
    "exportAdminOnly": "Only an admin can export",
    "deletePreviewFailed": "Could not load what would be erased. Check what this removes before continuing.",
    "editAdminOnly": "Only an admin can edit workspace details",
    "exportData": "Export workspace data",
    "exportDataDesc": "Download every record this workspace holds — conversations, customers, articles — as one JSON file. Attachments are a separate download using the links inside it."
  },
  "billing": {
    "intervalLabel": "Billing period",
    "intervalMonth": "Monthly",
    "intervalYear": "Annual · 20% off plan price",
    "intervalYearPlain": "Annual",
    "applyCurrentOffer": "Switch to new pricing",
    "currentInterval": "Current subscription: {{interval}}",
    "annualSeatsTotal": "{{included}} seats included + {{extra}} extra · {{total}} billed annually ({{monthly}} per month equivalent)",
    "title": "Billing & Subscription",
    "subtitle": "Manage your plan and seats and review billing details",
    "memberSubtitle": "Review your current plan and usage",
    "currentPlan": "Current plan",
    "current": "Current plan",
    "seats": "Seats",
    "seatCount": "Seats",
    "pendingSeatReservations": "{{count}} pending invitation(s) reserve seats.",
    "seatMinimum": "{{used}} active members and {{pending}} pending invitations require at least {{minimum}} seats.",
    "seatOvercommitted": "Your plan has {{total}} seats, with {{used}} active members and {{pending}} pending invitations. Some invitations may be unable to join. Add seats or revoke pending invitations.",
    "changePending": "We are confirming the change to {{plan}} with {{seats}} seats with the payment provider. Refresh this page shortly. Other subscription changes are paused until confirmation finishes. Contact support if this lasts more than 10 minutes.",
    "unlimited": "Unlimited",
    "renewsOn": "Renews on",
    "cancelsOn": "Cancels on",
    "subscribe": "Subscribe",
    "switchTo": "Switch to {{plan}}",
    "updateSeats": "Update seats",
    "managePayment": "Manage payment",
    "cancelPlan": "Cancel",
    "adminOnly": "Only admins can change billing",
    "priceUnconfigured": "This plan is currently unavailable",
    "notConfigured": "Checkout is currently unavailable. Please try again later or contact support.",
    "notConfiguredNotice": "Online payments are coming soon, so new subscriptions cannot be started yet. If you need a paid plan, it is available on a manual invoice after an onboarding call.",
    "checkoutSuccess": "Payment complete. Syncing your subscription...",
    "checkoutError": "Could not start checkout",
    "planChanged": "Subscription updated",
    "changeError": "Failed to change subscription",
    "portalError": "Could not open the management page",
    "canceled": "Your subscription is scheduled to cancel at the next billing date",
    "cancelError": "Failed to cancel",
    "overageHistory": "Overage charges",
    "nonBillableMau": "{{count}} free-plan MAU over allowance · not charged",
    "overageReason": {
      "freePlan": "Not charged — this workspace is on the free plan.",
      "nothingToCharge": "Skipped — nothing chargeable in this period.",
      "mauPending": "The amount will be finalized after usage reconciliation.",
      "aiPending": "The amount will be finalized after in-progress AI replies finish.",
      "aiUsageChanged": "The amount will be finalized after AI usage is rechecked.",
      "periodSettling": "The amount will be finalized after the month-end settling period.",
      "noSubscription": "We are verifying the subscription for this charge.",
      "subscriptionInactive": "We are reviewing the subscription status.",
      "subscriptionCancelPending": "We are reviewing the charge because cancellation is scheduled.",
      "settlementReview": "We are verifying payment for the scheduled overage charge.",
      "subscriptionChanged": "We are reviewing the changed subscription.",
      "workspaceMissing": "We are reviewing the workspace record.",
      "lateMauActivity": "We are reviewing this period's charges after late activity was recorded.",
      "mauDifferenceWaived": "Additional charges found after close were waived.",
      "mauExternalAdjustment": "The post-close usage difference was adjusted separately.",
      "mauReview": "We are reviewing whether historical usage is billable.",
      "mauOrderReview": "We are reviewing activities recorded at the same time.",
      "priceReview": "We are reviewing the price configuration for these charges.",
      "unconfirmed": "We are verifying the outcome of the charge request.",
      "failed": "Payment failed. Check the payment method."
    },
    "overageStatus": {
      "charged": "Charged",
      "providerForgiven": "Forgiven",
      "settledExternally": "Adjusted separately",
      "scheduled": "Scheduled for next bill",
      "draft": "Pending",
      "deferred": "Reconciling",
      "review": "Billing review needed",
      "charging": "Processing",
      "unconfirmed": "Verification needed",
      "failed": "Failed",
      "skipped": "N/A",
      "awaiting_payment": "Awaiting payment"
    },
    "seatsGrandfathered": "Existing members keep their access. Upgrade to add more seats.",
    "overageAmountPending": "Calculating amount",
    "aiReplies": "AI auto replies",
    "auxiliaryAiBudget": "AI support tasks budget",
    "auxiliaryBudgetReached": "Monthly limit reached",
    "auxiliaryAiBudgetNote": "Provider costs for classification, summaries, and quality reviews. Includes in-progress reservations and is not billed separately.",
    "blockedCount": "{{count}} handed to a person after the limit",
    "mau": "Monthly active users",
    "mauFreeNote": "The free plan is not billed for overage",
    "mauOverageCount": "{{count}} over",
    "mauOverageNote": "Overage is billed at ₩{{rate}} per user",
    "mauBillableOverageNote": "{{count}} billable users · ₩{{rate}} each",
    "mauNoBillableOverage": "Overage from the free-plan period is not billed",
    "mauReviewNote": "We are reviewing whether historical overage is billable",
    "mauProvisionalNote": "This count is provisional until first-activity order is checked at month close",
    "overageCount": "{{count}} over",
    "overageNote": "Overage is billed at ₩{{rate}} per reply",
    "aiQuotaExhausted": "The AI reply allowance ({{allowance}}) is used up. Every question now goes to an agent.",
    "aiQuotaShrank": "The plan changed, so the AI allowance is now {{allowance}} and this month's {{used}} replies already exceed it. Every question now goes to an agent.",
    "aiQuotaNearLimit": "AI replies used: {{used}}/{{allowance}}. Past the limit every question goes to an agent.",
    "viewPlans": "View plans",
    "feature": {
      "omnichannelInbox": "Unified omnichannel inbox",
      "kbGroundedAi": "Knowledge-base grounded AI answers",
      "allOfStarter": "Everything in Starter",
      "crmCampaignSegment": "CRM, campaigns & segments",
      "analyticsDashboard": "Analytics dashboard",
      "slaManagement": "SLA management",
      "allOfGrowth": "Everything in Growth",
      "workflowAutomation": "Workflow automation",
      "aiQuality": "AI quality monitoring",
      "prioritySupport": "Priority support",
      "seatsIncluded": "{{count}} agent seats included",
      "mauIncluded": "{{count}} monthly active customers",
      "aiIncluded": "{{count}} AI replies / month included",
      "overage": "Overage ₩{{ai}} per AI reply · ₩{{seat}} per extra seat"
    },
    "pastDueBanner": "A payment did not go through. Please check your card — if it is not resolved the subscription will be cancelled and the workspace moves to the free plan",
    "pausedBanner": "The subscription is paused. Paid features stay unavailable until it is resumed",
    "seatsIncludedOnly": "{{n}} seats included · {{price}}/mo",
    "seatsWithExtra": "{{n}} included + {{extra}} extra · {{price}} + {{extraPrice}} = {{total}}/mo",
    "canceledBanner": "The subscription was cancelled and this workspace is now on the free plan. The AI allowance and seat count are lower, and questions past the allowance go to an agent",
    "fixPayment": "Check payment method",
    "statusActive": "Active",
    "statusTrialing": "Trial",
    "statusPastDue": "Payment failed",
    "statusPaused": "Paused",
    "statusCanceled": "Canceled",
    "statusFree": "Free",
    "invoicePaid": "Paid",
    "invoiceOpen": "Unpaid",
    "invoiceVoid": "Void",
    "invoiceUncollectible": "Uncollectible",
    "invoiceRefunded": "Refunded",
    "aiRepliesInProgress": "Includes {{count}} requests in progress. Requests that produce no answer are returned to your allowance after settlement.",
    "payOverage": "Pay usage invoice",
    "planChangeSupport": "Contact support to change your plan or seats.",
    "xsollaConfirming": "Confirming the Xsolla result and subscription update.",
    "xsollaChangeNotice": "Prices show the new recurring charge. Review unused-period credit, balance, any additional payment and the effective date in Xsolla Checkout before confirming."
  },
  "knowledgeBase": {
    "title": "Knowledge Base",
    "subtitle": "Manage knowledge for your AI Agent",
    "create": "Create Knowledge Base",
    "createNew": "New Knowledge Base",
    "items": "Items",
    "itemCount": "{{count}} items",
    "addItem": "Add Item",
    "editItem": "Edit Item",
    "deleteItem": "Delete Item",
    "searchItems": "Search items...",
    "noItems": "No items",
    "noKnowledgeBases": "No knowledge bases",
    "createFirst": "Create your first knowledge base",
    "itemTitle": "Item Title",
    "itemContent": "Item Content",
    "itemTags": "Tags",
    "published": "Published",
    "draft": "Draft",
    "types": {
      "articles": "Articles",
      "faqs": "FAQs",
      "custom": "Custom",
      "website": "Website"
    },
    "addItemDescription": "Add new knowledge base item",
    "content": "Content",
    "contentPlaceholder": "Enter item content",
    "itemTitlePlaceholder": "Enter item title",
    "namePlaceholder": "Enter knowledge base name",
    "selectKB": "Select Knowledge Base",
    "selectKBDescription": "Select knowledge base to add item",
    "tagsPlaceholder": "Enter tags separated by commas",
    "fetchError": "Failed to load knowledge bases",
    "saveError": "Failed to save knowledge base",
    "createSuccess": "Knowledge base created successfully",
    "updateSuccess": "Knowledge base updated successfully",
    "deleteSuccess": "Knowledge base deleted successfully",
    "deleteError": "Failed to delete knowledge base",
    "deleteKB": "Delete Knowledge Base",
    "deleteConfirmation": "Are you sure you want to delete '{{name}}'? This action cannot be undone.",
    "itemSaveError": "Failed to save item",
    "itemCreateSuccess": "Item added successfully",
    "itemUpdateSuccess": "Item updated successfully",
    "itemDeleteSuccess": "Item deleted successfully",
    "itemDeleteError": "Failed to delete item",
    "deleteItemConfirmation": "Are you sure you want to delete '{{title}}'? This action cannot be undone.",
    "search": "Search",
    "searchPlaceholder": "Search knowledge base...",
    "searchResults": "Search Results",
    "searchError": "Search failed",
    "noResults": "No results found",
    "regenerateEmbeddings": "Regenerate Embeddings",
    "regenerateSuccess": "Embeddings regenerated successfully",
    "regenerateError": "Failed to regenerate embeddings",
    "regenerating": "Regenerating...",
    "category": "Category",
    "categoryPlaceholder": "Enter category",
    "totalItems": "Total Items",
    "lastUpdated": "Last Updated",
    "tags": "Tags",
    "targetProduct": "Target product",
    "allProductsScope": "All products",
    "productHelp": "Choose which product's inquiries this knowledge base serves.",
    "bulkImport": "Bulk import",
    "bulkHelp": "Paste FAQ text or upload a file (.txt/.md/.csv). Q:/A: pairs, markdown headings (#), and blank-line blocks are auto-detected.",
    "bulkFormat": "Format",
    "bulkText": "Content",
    "formatAuto": "Auto-detect",
    "formatHeadings": "Markdown headings (#)",
    "formatBlocks": "Blank-line blocks",
    "uploadFile": "Choose file",
    "importItems": "Import",
    "detectedItems": "{{count}} items detected",
    "detectedItems_one": "{{count}} item detected",
    "bulkSuccess": "Imported {{count}} items",
    "bulkSuccess_one": "Imported {{count}} item",
    "bulkError": "Bulk import failed",
    "fileReadError": "Failed to read file",
    "gapsTitle": "Questions the AI could not answer",
    "gapsHint": "Add a document and the next one gets answered automatically",
    "gapOpenChat": "Open chat",
    "gapWrite": "Write it",
    "gapPickKb": "Pick a knowledge base first",
    "editConflict": "Another teammate changed or deleted this article. Your edits are preserved. Copy your draft, close this editor, then reopen the latest article to merge your changes."
  },
  "helpCenter": {
    "title": "Help Center",
    "subtitle": "Manage help articles for your customers",
    "articles": "Articles",
    "categories": "Categories",
    "createArticle": "Create Article",
    "createCategory": "Create Category",
    "editArticle": "Edit Article",
    "deleteArticle": "Delete Article",
    "articleTitle": "Article Title",
    "articleContent": "Article Content",
    "articleExcerpt": "Excerpt",
    "selectCategory": "Select Category",
    "noArticles": "No articles",
    "noCategories": "No categories",
    "createFirstArticle": "Create your first article",
    "searchArticles": "Search articles...",
    "views": "Views",
    "helpful": "Helpful",
    "notHelpful": "Not Helpful",
    "visibility": {
      "public": "Public",
      "internal": "Internal"
    },
    "status": {
      "draft": "Draft",
      "published": "Published",
      "archived": "Archived"
    },
    "addCategory": "Add Category",
    "categoryNamePlaceholder": "Enter category name",
    "content": "Content",
    "contentPlaceholder": "Enter article content",
    "excerpt": "Excerpt",
    "excerptPlaceholder": "Enter article excerpt",
    "publish": "Publish",
    "tagsPlaceholder": "Enter tags separated by commas",
    "titlePlaceholder": "Enter article title",
    "search": "Search",
    "searchResults": "Search Results",
    "noSearchResults": "No search results found",
    "searchError": "Search failed",
    "clearSearch": "Clear",
    "feedbackSuccess": "Thank you for your feedback",
    "feedbackError": "Failed to submit feedback",
    "categoryDeleteSuccess": "Category deleted successfully",
    "categoryDeleteError": "Failed to delete category",
    "categoryHasArticles": "Cannot delete category with articles",
    "deleteCategory": "Delete Category",
    "deleteCategoryConfirmation": "Are you sure you want to delete \"{{name}}\"?",
    "visibilityLabel": "Visibility",
    "articleCreated": "Article created successfully",
    "articleUpdated": "Article updated successfully",
    "articleDeleted": "Article deleted successfully",
    "fetchError": "Failed to load articles",
    "saveError": "Failed to save article",
    "deleteError": "Failed to delete article",
    "totalArticles": "Total Articles",
    "categoryCreated": "Category created successfully",
    "categoriesError": "Failed to load categories",
    "categoryCreateSuccess": "Category created",
    "categorySaveError": "Failed to save category",
    "categoryUpdateSuccess": "Category updated",
    "createSuccess": "Article created",
    "deleteConfirmation": "Are you sure you want to delete this article?",
    "deleteSuccess": "Article deleted",
    "feedback": "Feedback",
    "publishError": "Failed to change publish status",
    "publishSuccess": "Publish status changed",
    "updateSuccess": "Article updated",
    "editConflict": "Someone else saved this article first. Copy what you wrote before refreshing so you do not lose it.",
    "discardTitle": "You have an article in progress",
    "discardMessage": "Closing now discards what you typed. Continue?",
    "discardConfirm": "Close and discard",
    "draftRestored": "Restored the article you were writing"
  },
  "workflows": {
    "autoDisabledReason": "Auto-disabled after repeated failures: {{reason}}",
    "title": "Workflows",
    "subtitle": "Set up automation rules for your tasks",
    "create": "Create Workflow",
    "editWorkflow": "Edit Workflow",
    "deleteWorkflow": "Delete Workflow",
    "noWorkflows": "No workflows",
    "createFirst": "Create your first workflow",
    "workflowName": "Workflow Name",
    "scheduleState": {
      "pending": "Pending",
      "claimed": "Claimed",
      "running": "Running",
      "done": "Done",
      "failed": "Failed",
      "uncertain": "Uncertain",
      "cancelled": "Cancelled"
    },
    "scheduleSettings": "Schedule",
    "scheduleEnabled": "Schedule status",
    "scheduleOn": "Enabled",
    "scheduleOff": "Schedule paused",
    "scheduleFrequency": "Repeat",
    "scheduleOnce": "Once",
    "scheduleHourly": "Hourly",
    "scheduleDaily": "Daily",
    "scheduleWeekly": "Weekly",
    "scheduleMonthly": "Monthly",
    "scheduleNextRun": "Next run",
    "scheduleLastAccepted": "Last accepted",
    "scheduleHint": "Repeats use the selected time zone. Missing local times are rejected; the first occurrence is chosen for repeated times.",
    "scheduleTimezone": "Time zone",
    "scheduleInvalidLocalTime": "This local time does not exist in the selected time zone. Choose another time.",
    "scheduleInvalidTimezone": "Enter a valid IANA time zone.",
    "scheduleEmailTo": "Recipient email",
    "scheduleUncertain": "The result is unknown. Check email or webhook recipient records before deciding whether to run again.",
    "manualRun": "Manual run",
    "manualRequestId": "Request ID",
    "manualUncertain": "The result is unknown. Check delivery and change records before retrying with a new request.",
    "manualPartial": "Some actions already ran. Check the execution record before retrying with a new request.",
    "reviewConfirmCompleted": "Confirm completed",
    "reviewCloseUnresolved": "Close without replay",
    "reviewRetryOccurrence": "Retry occurrence",
    "reviewDecision": {
      "confirm_completed": "Confirm all required actions completed",
      "close_unresolved": "Close this run without replaying it",
      "retry": "Retry this occurrence from the beginning"
    },
    "reviewReason": {
      "operator_confirm_completed": "Completion verified by a manager",
      "operator_close_unresolved": "Closed by a manager without replay"
    },
    "reviewRetryWarning": "I checked the previous delivery and accept that retrying may repeat completed actions.",
    "reviewEvidence": "Verification evidence",
    "reviewEvidenceHint": "Record the request ID, outcome and time checked, without personal data (at least 10 characters).",
    "reviewFailed": "Could not record the decision. Refresh the execution history before trying again.",
    "lastReview": "Last review by {{actor}} on {{date}}",
    "stepState": {
      "started": "Running",
      "done": "Done",
      "failed": "Failed",
      "skipped": "Skipped",
      "uncertain": "Uncertain",
      "confirmed": "Verified complete"
    },
    "providerMessageId": "Provider message ID",
    "messageId": "Conversation message ID",
    "sesOutcome": "SES outcome",
    "emailAttention": "Recent email delivery problems",
    "emailAttentionError": "Could not load email delivery outcomes.",
    "openCampaign": "Open campaigns",
    "sesStates": {
      "sent": "Accepted by SES",
      "delayed": "Delivery delayed",
      "delivered": "Delivered to mail server",
      "bounced": "Bounced",
      "complained": "Spam complaint",
      "rejected": "Rejected by SES"
    },
    "trigger": "Trigger",
    "conditions": "Conditions",
    "actions": "Actions",
    "addCondition": "Add Condition",
    "addAction": "Add Action",
    "triggeredCount": "Triggered Count",
    "lastTriggered": "Last Triggered",
    "types": {
      "routing": "Routing",
      "assignment": "Assignment",
      "followup": "Follow-up",
      "sla": "SLA",
      "notification": "Notification"
    },
    "triggerEvents": {
      "message_received": "Message Received",
      "chat_created": "Chat Created",
      "chat_updated": "Chat Updated",
      "time_based": "Time-based"
    },
    "actionTypes": {
      "assign_agent": "Assign Agent",
      "assign_team": "Assign Team",
      "send_message": "Send Message",
      "add_tag": "Add Tag",
      "set_priority": "Set Priority",
      "trigger_ai": "Trigger AI",
      "escalate": "Escalate",
      "notify": "Send Notification"
    },
    "operators": {
      "equals": "Equals",
      "not_equals": "Not Equals",
      "contains": "Contains",
      "not_contains": "Not Contains",
      "greater_than": "Greater Than",
      "less_than": "Less Than",
      "exists": "Exists",
      "not_exists": "Not Exists"
    },
    "field": "Field",
    "messagePlaceholder": "Enter message",
    "namePlaceholder": "Enter workflow name",
    "success": "Success",
    "triggerType": "Trigger Type",
    "triggered": "Triggered",
    "updateSuccess": "Workflow updated",
    "createSuccess": "Workflow created",
    "saveError": "Failed to save workflow",
    "toggleSuccess": "Workflow status updated",
    "toggleError": "Failed to toggle workflow",
    "deleteSuccess": "Workflow deleted",
    "deleteError": "Failed to delete workflow",
    "deleteConfirmation": "Are you sure you want to delete \"{{name}}\"?",
    "fetchError": "Failed to load workflows",
    "optionsError": "Failed to load options",
    "testWorkflow": "Test Workflow",
    "testResult": "Test Result",
    "wouldTrigger": "Would Trigger",
    "actionsToExecute": "Actions to Execute",
    "testError": "Test failed",
    "executeSuccess": "Workflow executed successfully",
    "executeError": "Workflow execution failed",
    "viewLogs": "View Logs",
    "executionLogs": "Execution Logs",
    "logsError": "Failed to load logs",
    "noLogs": "No execution logs",
    "actionsExecuted": "Actions",
    "logicalOperator": "Logical Operator",
    "agentIdPlaceholder": "Enter agent ID",
    "teamIdPlaceholder": "Enter team ID",
    "tagPlaceholder": "Enter tag name",
    "webhookUrlPlaceholder": "Enter webhook URL",
    "webhookMethod": "HTTP Method",
    "fieldNamePlaceholder": "Field name",
    "fieldValuePlaceholder": "Field value",
    "notifyMessagePlaceholder": "Notification message",
    "notifyTarget": "Notification Target",
    "priority": {
      "low": "Low",
      "normal": "Normal",
      "high": "High",
      "urgent": "Urgent"
    },
    "status": {
      "open": "Open",
      "pending": "Pending",
      "resolved": "Resolved",
      "closed": "Closed"
    },
    "targetAssignedAgent": "Assigned agent",
    "targetTeam": "Assigned team",
    "targetAllAgents": "All agents",
    "emailToCustomer": "To the customer",
    "emailToAgent": "To the assigned agent",
    "emailSubjectPlaceholder": "Subject",
    "emailBodyPlaceholder": "Body",
    "aiPromptPlaceholder": "Leave empty to answer the customer's last message",
    "escalateReasonPlaceholder": "Escalation reason (shown in the manager notification)",
    "testedAgainst": "Tested against",
    "testSampleChat": "most recent conversation",
    "actualValue": "actual",
    "noValue": "none",
    "executionControl": "Execution control",
    "maxPerChat": "Max runs per conversation",
    "cooldownMinutes": "Cooldown (minutes)",
    "executionMode": "With other rules",
    "modeAll": "Keep running other rules",
    "modeFirstMatch": "Stop after this rule runs",
    "executionHint": "0 means no limit.",
    "openConversation": "Open conversation",
    "autoDisabled": "Auto-disabled",
    "failed": "Failed",
    "pauseAll": "Pause all",
    "resumeAll": "Resume automation",
    "pausedNotice": "Automation is paused for this workspace. No rule will run.",
    "pausedAll": "Automation paused",
    "resumedAll": "Automation resumed",
    "pauseError": "Could not change the automation state",
    "startFromTemplate": "Start from an example",
    "useTemplate": "Use this",
    "customerFacing": "Goes to the customer",
    "searchPlaceholder": "Search name, trigger or action",
    "outboundOnly": "Only rules that message customers",
    "filteredCount": "{{shown}} of {{total}}",
    "failedAt": "Failed at action {{n}}: {{type}}",
    "skippedAfter": "{{count}} skipped after it",
    "deliveryUncertain": "The receiver's outcome is unknown. Check its records before running this again.",
    "deliveryId": "Request ID",
    "messageStepQueued": "A completed message step means the send was queued. Check the actual channel result below.",
    "messageOutcomesTitle": "External channel message outcomes",
    "messageOutcomesHint": "Newest sends first. 'Accepted by channel' means the provider received the request, not that the customer read it.",
    "messageOutcomesEmpty": "This rule has no external channel send records.",
    "messageOutcomesError": "Could not load message delivery status.",
    "messageOutcomesMore": "Show older sends",
    "messageOutcomeHandled": "Follow-up recorded",
    "messageOutcomeStates": {
      "pending": "Queued",
      "sending": "Sending",
      "sent": "Accepted by channel",
      "failed": "Send failed",
      "skipped": "Not sent",
      "partial": "Partly sent",
      "uncertain": "Outcome unconfirmed",
      "retracted": "Retracted"
    },
    "messageOutcomeReasons": {
      "delivery_target_changed": "Further sends stopped because the channel connection or recipient changed. Review the delivery outcome.",
      "provider_outcome_unknown": "The provider has not confirmed whether it accepted the request.",
      "text_part_unconfirmed": "Part of the reply was accepted; another part may also have been accepted.",
      "provider_request_failed": "The channel rejected the send.",
      "message_too_long": "The message exceeded the channel's split-send limit.",
      "integration_inactive": "The channel integration is disabled.",
      "no_channel_id": "The customer has no channel ID.",
      "unsupported_channel": "This app does not support sending through this channel.",
      "empty": "There is no content to send.",
      "attachment_failed": "The attachment could not be sent.",
      "text_part_failed": "Only part of the reply was accepted by the channel.",
      "no_public_url": "The attachment cannot be accessed."
    },
    "variablesHint": "Available variables"
  },
  "sla": {
    "title": "SLA Management",
    "subtitle": "Manage Service Level Agreement policies",
    "policies": "SLA Policies",
    "create": "Create SLA",
    "editPolicy": "Edit Policy",
    "deletePolicy": "Delete Policy",
    "noPolicies": "No SLA policies",
    "createFirst": "Create your first SLA policy",
    "policyName": "Policy Name",
    "priority": "Priority",
    "conditions": "Conditions",
    "addCondition": "Add Condition",
    "conditionField": "Field",
    "conditionOperator": "Operator",
    "conditionValue": "Value",
    "operators": {
      "equals": "Equals",
      "not_equals": "Not Equals",
      "contains": "Contains",
      "in": "In",
      "not_in": "Not In"
    },
    "targets": "Targets",
    "firstResponseTime": "First Response Time",
    "resolutionTime": "Resolution Time",
    "nextResponseTime": "Next Response Time",
    "minutes": "minutes",
    "hours": "hours",
    "businessHours": "Business Hours",
    "enableBusinessHours": "Enable Business Hours",
    "timezone": "Timezone",
    "workingHours": "Working Hours",
    "workspaceHolidaysApply": "Workspace holidays are excluded from new business-hours SLA targets. Existing due times stay fixed.",
    "policyHolidays": "Policy holidays",
    "policyHolidaysHint": "These dates apply to this policy alongside workspace holidays. Existing deadlines stay fixed.",
    "noPolicyHolidays": "No policy holidays added.",
    "holidayDate": "Date",
    "holidayName": "Name (optional)",
    "holidayNamePlaceholder": "e.g. Company anniversary",
    "holidayDateRequired": "Choose a valid holiday date.",
    "holidayDuplicate": "This date has already been added.",
    "removePolicyHoliday": "Remove holiday {{date}}",
    "dayNames": [
      "Sun",
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat"
    ],
    "escalation": "Escalation",
    "escalationLevel": "Level",
    "escalationThreshold": "Threshold",
    "escalationActions": "Actions",
    "escalationMessage": "Message (optional)",
    "addEscalation": "Add Escalation Level",
    "addAction": "Add Action",
    "actionTypes": {
      "notify_agent": "Notify Agent",
      "notify_manager": "Notify Manager",
      "reassign": "Reassign",
      "send_email": "Send Email",
      "webhook": "Webhook"
    },
    "notifications": "Notifications",
    "notifyOnBreach": "Notify on Breach",
    "notifyOnWarning": "Notify on Warning",
    "warningThreshold": "Warning Threshold",
    "dashboard": "SLA Dashboard",
    "breaches": "Breaches",
    "viewBreaches": "View Breaches",
    "breachesList": "SLA Breaches",
    "breachesError": "Failed to load breaches",
    "noBreaches": "No SLA breaches",
    "deadline": "Deadline",
    "breachedAt": "Breached At",
    "chat": "Chat",
    "target": "Target",
    "actual": "Actual",
    "atRisk": "At Risk",
    "onTrack": "On Track",
    "breached": "Breached",
    "compliance": "Compliance",
    "avgFirstResponse": "Avg First Response",
    "avgResolution": "Avg Resolution",
    "chats": "Chats",
    "complianceRate": "Compliance Rate",
    "firstResponse": "First Response",
    "namePlaceholder": "Enter policy name",
    "nextResponse": "Next Response",
    "resolution": "Resolution",
    "totalChats": "Total Chats",
    "totalPolicies": "Total Policies",
    "uncoveredOpenChats": "Open conversations without an SLA",
    "uncoveredOpenChatsHint": "Excluded from policy and compliance figures. Open the conversation list",
    "pendingSlaAssignments": "SLA assignments awaiting retry",
    "pendingSlaAssignmentsHint": "A policy or conversation-history issue delayed assignment. Open the conversation list",
    "useBusinessHours": "Use Business Hours Only",
    "threshold": "Threshold",
    "fetchError": "Failed to load SLA policies",
    "dashboardError": "Failed to load dashboard",
    "updateSuccess": "SLA policy updated",
    "createSuccess": "SLA policy created",
    "saveError": "Failed to save SLA policy",
    "toggleSuccess": "Status updated",
    "toggleError": "Failed to toggle status",
    "deleteSuccess": "SLA policy deleted",
    "deleteError": "Failed to delete SLA policy",
    "deleteConfirmation": "Are you sure you want to delete \"{{name}}\"?",
    "analytics": "SLA Analytics",
    "workflowRecovery": {
      "filter": "Filter workflow status",
      "confirmTitle": "Review workflow execution",
      "readError": "Could not load workflow status. Refresh before making changes.",
      "empty": "No workflow events match this filter.",
      "states": {
        "uncertain": "Execution unconfirmed"
      },
      "openWorkflows": "View workflows",
      "workflowId": "Workflow ID",
      "actionStep": "Attempt {{attempt}}, action {{index}}",
      "reviewEvidence": "Verification evidence",
      "reviewEvidenceHint": "Record the request ID, outcome and time you checked. Avoid copying personal data (at least 10 characters).",
      "lastReview": "Last review by {{actor}} on {{date}}",
      "title": "Workflow follow-up",
      "description": "Track workflows accepted for conversation creation and updates, customer messages, tags, assignments, SLA breaches, and closures. Review partial or interrupted runs before repeating them.",
      "closedEvent": "Conversation closed",
      "createdEvent": "Conversation created",
      "assignedEvent": "Agent assigned",
      "updatedEvent": "Conversation updated",
      "tagEvent": "Tag added",
      "assignmentReceipt": "Assignment request ID",
      "mutationReceipt": "Conversation update request ID",
      "tag": "Added tag",
      "messageEvent": "Customer message received",
      "sourceMessage": "Source message ID",
      "confirmDelivered": "Confirm completed",
      "confirm": {
        "retry": "This retries the accepted workflow event from the beginning. Execution limits and cooldowns still apply. Some actions may already have completed, including messages or emails. Check the workflow logs and recipient before accepting possible duplicates.",
        "confirm_delivered": "Record that you verified all required workflow actions completed. No actions will run again.",
        "cancel": "Cancel further processing of this event. Actions that already completed cannot be recalled."
      },
      "reasons": {
        "conversation_changed": "The conversation state or SLA changed after this event was accepted.",
        "message_unavailable": "The source customer message is unavailable.",
        "workspace_or_policy_unavailable": "The workspace or policy is no longer available.",
        "customer_unavailable": "The customer is no longer available.",
        "automation_paused": "Workspace automation or this policy is paused. The event remains queued.",
        "workflow_changed": "An accepted workflow changed or was disabled. Review its current configuration.",
        "no_workflows": "No active workflow was configured when the event was recorded.",
        "not_matched": "The accepted rules did not match or their execution limit was reached.",
        "workflow_failed": "At least one workflow failed. Earlier actions may have completed. Check the workflow logs.",
        "delivery_uncertain": "An external delivery result is unknown. Match the request ID against the recipient before retrying.",
        "workflow_interrupted": "The execution result could not be confirmed. Check for completed actions before retrying.",
        "worker_interrupted": "Processing stopped before its result was confirmed. Automatic replay is held.",
        "preparation_failed": "Preparation failed before execution. The event will be checked again.",
        "operator_cancel": "Cancelled by a manager.",
        "operator_confirm_delivered": "A manager verified completion."
      }
    },
    "recovery": {
      "title": "Escalation delivery",
      "description": "Review queued actions and recover failed or unconfirmed delivery.",
      "filter": "Filter escalation status",
      "all": "All states",
      "level": "Level {{level}}",
      "open": "Open conversation",
      "retry": "Retry action",
      "confirmDelivered": "Confirm delivered",
      "cancel": "Cancel action",
      "confirmTitle": "Review escalation action",
      "readError": "Could not load escalation delivery. Refresh before making changes.",
      "unconfirmed": "Could not confirm the change. Check the latest status before trying again.",
      "changed": "This action changed. Review its latest status.",
      "empty": "No escalation actions match this filter.",
      "states": {
        "pending": "Queued",
        "running": "Processing",
        "sending": "Sending",
        "claimed": "Preparing",
        "done": "Completed",
        "failed": "Failed",
        "uncertain": "Delivery unconfirmed",
        "paused": "Paused",
        "cancelled": "Cancelled",
        "skipped": "Skipped"
      },
      "types": {
        "notify_agent": "Notify agent",
        "notify_manager": "Notify manager",
        "reassign": "Reassign conversation",
        "send_email": "Send email",
        "webhook": "Call webhook"
      },
      "reasons": {
        "recipient_unavailable": "The recipient is unavailable in this workspace.",
        "assignment_changed": "The assignment changed. Review the conversation before making a new assignment.",
        "email_unconfigured": "Email delivery is not configured.",
        "webhook_unconfigured": "A webhook URL is required.",
        "action_failed": "The action could not be completed. Check the policy and recipient.",
        "delivery_unconfirmed": "The provider may have accepted this request. Check delivery before deciding whether to resend.",
        "automation_paused": "Workspace automation or this policy is paused.",
        "policy_changed": "The policy changed or was deleted.",
        "conversation_changed": "The conversation closed or its SLA changed.",
        "workspace_unavailable": "The workspace is unavailable.",
        "email_opt_out": "The recipient disabled email notifications.",
        "operator_cancel": "Cancelled by a manager.",
        "operator_confirm_delivered": "A manager confirmed delivery.",
        "target_resolved": "The response target was fulfilled or is no longer at risk."
      },
      "confirm": {
        "retry": "The provider may have already accepted this action. Retrying could send a duplicate email or webhook. Continue only after checking delivery.",
        "confirm_delivered": "Record that you verified delivery with the recipient or provider. This will mark the action completed without sending again.",
        "cancel": "Cancel this queued action. A previously accepted external request cannot be recalled."
      },
      "chooseRecipient": "Choose an agent or team",
      "defaultRecipient": "Use the current assignee / policy default",
      "unavailableRecipient": "Unavailable recipient — choose again",
      "unavailableTeam": "Unavailable team — choose again",
      "noTeam": "No team restriction",
      "targetsError": "Could not load workspace recipients.",
      "recipient": "Recipient",
      "team": "Receiving team",
      "webhookUrl": "Webhook URL",
      "pausedRetry": "Resume workspace automation and this policy before retrying.",
      "obsoleteRetry": "This action no longer matches the conversation or policy. Review the current policy."
    }
  },
  "proactive": {
    "title": "Proactive Messages",
    "subtitle": "Send messages to visitors proactively",
    "create": "Create Message",
    "editMessage": "Edit Message",
    "deleteMessage": "Delete Message",
    "noMessages": "No proactive messages",
    "createFirst": "Create your first proactive message",
    "messageName": "Message Name",
    "namePlaceholder": "Welcome Message",
    "message": "Message Content",
    "messagePlaceholder": "Hi! How can I help you today?",
    "senderName": "Sender Name",
    "triggerEvent": "Trigger Event",
    "delay": "Delay",
    "frequency": "Frequency",
    "targeting": "Targeting",
    "pages": "Pages",
    "newVisitors": "New Visitors",
    "returningVisitors": "Returning Visitors",
    "scheduling": "Scheduling",
    "analytics": "Analytics",
    "sent": "Sent",
    "clicked": "Clicked",
    "replied": "Replied",
    "conversion": "Conversion Rate",
    "types": {
      "welcome": "Welcome",
      "behavior": "Behavior-based",
      "exit_intent": "Exit Intent",
      "time_based": "Time-based"
    },
    "triggerEvents": {
      "page_load": "Page Load",
      "scroll_depth": "Scroll Depth",
      "time_on_page": "Time on Page",
      "exit_intent": "Exit Intent",
      "custom_event": "Custom Event"
    },
    "frequencies": {
      "once_per_session": "Once per Session",
      "once_per_day": "Once per Day",
      "once_ever": "Once Ever",
      "always": "Always"
    },
    "pageTargeting": "Page Targeting",
    "addPageRule": "Add Rule",
    "noPageRules": "No page rules. Message will show on all pages.",
    "pageUrlPlaceholder": "Enter URL pattern (e.g., /products)",
    "matchTypes": {
      "exact": "Exact Match",
      "contains": "Contains",
      "starts_with": "Starts With",
      "regex": "Regex"
    },
    "deviceTargeting": "Device Targeting",
    "desktop": "Desktop",
    "mobile": "Mobile",
    "tablet": "Tablet",
    "startDate": "Start Date",
    "endDate": "End Date",
    "timezone": "Timezone",
    "quickReplies": "Quick Replies",
    "addQuickReply": "Add Reply",
    "noQuickReplies": "No quick replies added",
    "replyLabel": "Label",
    "replyValue": "Value",
    "replyActions": {
      "send_message": "Send Message",
      "open_url": "Open URL"
    },
    "buttons": "Buttons",
    "addButton": "Add Button",
    "noButtons": "No buttons added",
    "buttonLabel": "Label",
    "buttonTypes": {
      "primary": "Primary",
      "secondary": "Secondary",
      "link": "Link"
    },
    "buttonUrl": "URL",
    "displayed": "Displayed",
    "dismissed": "Dismissed",
    "fetchError": "Failed to load proactive messages",
    "optionsError": "Failed to load options",
    "updateSuccess": "Message updated",
    "createSuccess": "Message created",
    "saveError": "Failed to save message",
    "toggleSuccess": "Status updated",
    "toggleError": "Failed to toggle status",
    "deleteSuccess": "Message deleted",
    "deleteError": "Failed to delete message",
    "deleteConfirmation": "Are you sure you want to delete \"{{name}}\"?",
    "content": "Content",
    "devices": "Devices",
    "trigger": "Trigger",
    "proactiveMessage": "Proactive message"
  },
  "aiSettings": {
    "title": "AI Agent Settings",
    "subtitle": "Configure AI auto-response system",
    "selectChatbot": "Select Chatbot",
    "selectChatbotDesc": "Select a chatbot to apply AI settings",
    "noChatbots": "No chatbots",
    "createChatbotFirst": "Create a chatbot first",
    "enableAI": "Enable AI Agent",
    "enableAIDesc": "AI will automatically respond to customer messages",
    "provider": "AI Provider",
    "model": "Model",
    "apiKey": "API Key",
    "apiKeyPlaceholder": "sk-...",
    "temperature": "Temperature",
    "temperatureDesc": "Higher is more creative, lower is more consistent (0.0 - 1.0)",
    "maxTokens": "Max Tokens",
    "maxTokensDesc": "Maximum tokens per response",
    "systemPrompt": "System Prompt",
    "systemPromptPlaceholder": "You are a helpful customer support agent...",
    "personality": "AI Personality",
    "personalityName": "Name",
    "personalityTone": "Tone",
    "personalityLanguage": "Language",
    "capabilities": "AI Capabilities",
    "canSuggestArticles": "Suggest Articles",
    "canSuggestArticlesDesc": "Automatically suggest relevant articles from knowledge base",
    "canSummarize": "Summarize Conversations",
    "canSummarizeDesc": "Automatically summarize long conversations",
    "canTranslate": "Translate",
    "canTranslateDesc": "Automatically translate customer messages",
    "canEscalate": "Escalate to Agent",
    "canEscalateDesc": "Automatically escalate to human agent when needed",
    "canCollectInfo": "Collect Information",
    "canCollectInfoDesc": "Automatically collect customer information",
    "escalation": "Escalation Settings",
    "enableEscalation": "Enable Auto-Escalation",
    "escalationKeywords": "Escalation Keywords",
    "escalationKeywordsPlaceholder": "agent, human, help (comma separated)",
    "sentimentThreshold": "Sentiment Threshold",
    "sentimentThresholdDesc": "Escalation threshold for negative sentiment detection",
    "confidenceThreshold": "Confidence Threshold",
    "confidenceThresholdDesc": "Escalate when AI response confidence is below this value",
    "maxAttempts": "Max Attempts",
    "maxAttemptsDesc": "Auto-escalate after this many attempts",
    "escalationMessage": "Escalation Message",
    "targetTeam": "Target Team",
    "knowledgeBases": "Knowledge Bases",
    "knowledgeBasesLabel": "Connect Knowledge Bases",
    "selectKnowledgeBases": "Select knowledge bases for AI to reference",
    "noKnowledgeBases": "No knowledge bases available",
    "multilingual": "Multilingual Support",
    "enableMultilingual": "Enable Multilingual Support",
    "autoDetect": "Auto-detect Language",
    "supportedLanguages": "Supported Languages",
    "responseSettings": "Response Settings",
    "greeting": "Greeting Message",
    "greetingPlaceholder": "Hello! How can I help you today?",
    "fallbackMessage": "Fallback Message",
    "fallbackMessagePlaceholder": "I'm sorry, I didn't understand. Could you please rephrase?",
    "offlineMessage": "Offline Message",
    "offlineMessagePlaceholder": "We're currently offline. We'll get back to you soon.",
    "testAI": "Test AI",
    "testMessage": "Test Message",
    "testResponse": "AI Response",
    "providers": {
      "openai": "OpenAI",
      "anthropic": "Anthropic"
    },
    "models": {
      "gpt-4": "GPT-4",
      "gpt-4-turbo": "GPT-4 Turbo",
      "gpt-3.5-turbo": "GPT-3.5 Turbo",
      "claude-3-opus": "Claude 3 Opus",
      "claude-3-sonnet": "Claude 3 Sonnet",
      "claude-3-haiku": "Claude 3 Haiku"
    },
    "tones": {
      "professional": "Professional",
      "friendly": "Friendly",
      "casual": "Casual",
      "formal": "Formal"
    },
    "language": "Response Language",
    "languages": {
      "ko": "Korean",
      "en": "English",
      "ja": "Japanese",
      "zh": "Chinese"
    },
    "aiAgents": "AI Agents",
    "aiDisabled": "AI Disabled",
    "aiEnabled": "AI Enabled",
    "aiResponses": "AI Responses",
    "avgConfidence": "Avg Confidence",
    "configure": "Configure",
    "configureAI": "Configure AI",
    "escalationRate": "Escalation Rate",
    "tone": "Tone",
    "totalConversations": "Total Conversations",
    "fetchError": "Failed to load AI settings",
    "saveError": "Failed to save AI settings",
    "saveSuccess": "AI settings saved successfully",
    "aiAssistant": "AI Assistant",
    "previewQ": "Hi, I have a question.",
    "providerDown": "The AI model cannot be reached. Replies customers receive right now are quoted straight from the knowledge base, and the figures below are measured on that basis",
    "providerNotConfigured": "No AI model is connected. Replies are written by extracting from the knowledge base",
    "repliesTitle": "AI replies",
    "repliesOnHint": "AI answers customer questions first. Applies to the widget and every connected channel.",
    "repliesPausedHint": "AI is not answering customers right now. Applies to the widget and every connected channel.",
    "repliesDeploymentOff": "AI replies are switched off for this whole server.",
    "repliesPause": "Stop replying",
    "repliesResume": "Start replying again"
  },
  "aiAgent": {
    "httpReviewsTitle": "Review external outcomes",
    "reviewRecordedBy": "Verified by: {{name}}",
    "refreshReviews": "Refresh reviews",
    "moreReviews": "Show more",
    "httpReviewsUnavailable": "Could not load external outcomes. Try again shortly.",
    "httpReviewsEmpty": "No external outcomes need review.",
    "httpReviewUnknown": "The review may have been saved. Check the stored result before recording another decision.",
    "httpReviewManagerRequired": "Ask a manager to verify and record the actual outcome.",
    "reviewApplied": "Staff verified: applied",
    "reviewNotApplied": "Staff verified: not applied",
    "title": "Operator Agent",
    "notConfigured": "Set an AI provider API key to use the operator agent.",
    "modeOperator": "Operator Agent",
    "modeAssist": "Reply Assist",
    "placeholder": "Ask the agent to do something...",
    "intro": "Ask for platform tasks in plain language. e.g. \"Assign unassigned chats to me\", \"Find recent VIP customers\".",
    "working": "Working...",
    "approvalNeeded": "Approval needed",
    "approve": "Approve",
    "reject": "Reject",
    "approved": "Approved",
    "rejected": "Rejected",
    "quotaReached": "Your AI allowance has been reached. Check your usage and plan.",
    "authorityChanged": "Your account or permissions changed, so the request stopped. Sign in again.",
    "sessionBusy": "Another request is running in this conversation. Wait for it to finish before trying again.",
    "interrupted": "The request stopped before completion. Review the tool outcomes below before giving another instruction. Tools with unknown outcomes are not retried automatically.",
    "stillWorking": "Your request is still running. Reconnecting checks the same request.",
    "resultUnknown": "The result is not yet confirmed. Check result retrieves the same request without starting an accepted task again.",
    "historyUnavailable": "Previous messages could not be loaded. Reopen this panel shortly.",
    "newConversation": "New operator conversation",
    "checkResult": "Check result",
    "toolUncertain": "Outcome unknown",
    "approvalStates": {
      "pending": "Approval needed",
      "deciding": "Checking decision…",
      "executing": "Action in progress",
      "executed": "Action completed",
      "rejected": "Rejected",
      "failed": "Action not completed",
      "uncertain": "Action outcome unknown",
      "unknown": "Checking action outcome"
    },
    "customerErasurePending": "Related conversation records are still being deleted",
    "customerErasureComplete": "Related conversation records have been deleted",
    "checkErasure": "Check deletion progress",
    "erasureCheckError": "Could not check deletion progress. Retry here or use the customer deletion status panel.",
    "approvalUnknown": "Check the saved result before giving another instruction. This action will not be executed again automatically.",
    "reconciliationHint": "Check the target system, then record what happened. These buttons record your finding and do not execute the action.",
    "evidence": "How you verified the result (at least 10 characters)",
    "confirmApplied": "Record that the change was applied",
    "confirmNotApplied": "Record that the change was not applied",
    "checkedOutcome": "Staff verification"
  },
  "ai": {
    "dashboard": {
      "title": "AI Performance Dashboard",
      "subtitle": "Monitor AI auto-response and analytics performance",
      "totalConversations": "AI Handled",
      "autoReplySuccess": "Auto-Reply Success Rate",
      "avgConfidence": "Avg Confidence",
      "escalationRate": "Escalation Rate",
      "resolutionRate": "AI Resolution Rate",
      "tokenCost": "Token Cost",
      "performanceTrend": "Performance Trend",
      "dailyMetrics": "Daily AI Metrics",
      "intentDistribution": "Intent Distribution",
      "uncategorizedIntent": "Uncategorized",
      "byCategory": "Inquiries by Category",
      "sentimentTrend": "Sentiment Trend",
      "customerSentiment": "Customer Sentiment Changes",
      "intentPerformance": "Intent Performance",
      "byIntentMetrics": "Confidence & Resolution by Intent",
      "insights": "AI Insights",
      "faqCandidates": "FAQ Candidates",
      "aiHandled": "AI Handled",
      "autoReply": "Auto Reply",
      "positive": "Positive",
      "neutral": "Neutral",
      "negative": "Negative",
      "confidence": "Confidence",
      "resolution": "Resolution",
      "cases": "cases",
      "times": "times",
      "days7": "7 Days",
      "days30": "30 Days",
      "days90": "90 Days"
    },
    "quality": {
      "title": "AI Quality Dashboard",
      "subtitle": "Monitor agent performance and conversation quality",
      "analysisPaused": "Automatic quality analysis is paused.",
      "analysisPausedCredentials": "Ask an administrator to check the AI provider connection. Existing assessments remain available.",
      "analysisPausedConnection": "The AI provider is temporarily unavailable. Existing assessments remain available; check again later.",
      "analysisStatusUnknown": "Automatic quality analysis status is unverified.",
      "analysisStatusUnknownDetail": "Recent assessments may be delayed. Existing assessments remain available.",
      "topPerformers": "Top Performers",
      "qualityScore": "Quality Score",
      "avgResponse": "Avg Response",
      "resolutionRate": "Resolution Rate",
      "qualityBreakdown": "Quality Breakdown",
      "coachingRecommendations": "Coaching Recommendations",
      "qualityInsights": "Quality Insights",
      "insightType": {
        "slow_response": "Slow Response",
        "escalation": "Escalation",
        "distribution": "Score Distribution",
        "low_satisfaction": "Low Satisfaction",
        "negative_sentiment": "Negative Sentiment",
        "high_volume": "High Volume",
        "low_resolution": "Low Resolution"
      },
      "selectAgent": "Select an agent to view performance details",
      "excellent": "Excellent",
      "good": "Good",
      "average": "Average",
      "needsImprovement": "Needs Improvement",
      "noRecommendations": "No recommendations at this time",
      "responsiveness": "Responsiveness",
      "accuracy": "Accuracy",
      "helpfulness": "Helpfulness",
      "professionalism": "Professionalism",
      "resolution": "Resolution",
      "conversations": "conversations",
      "fetchError": "Failed to load quality data",
      "agentError": "Failed to load agent details",
      "scoreBand": "Score distribution",
      "countUnit": "{{count}}",
      "bandDetail": "{{from}}–{{to}} pts · avg {{avg}}",
      "flagDetailSevere": "{{n}} high severity",
      "flagDetail": "No high-severity items",
      "badgeFastResponder": "Fast responder",
      "badgeHighQuality": "High quality",
      "badgeCustomerFavorite": "Customer favorite",
      "badgeProblemSolver": "Problem solver",
      "badgeAiPowerUser": "AI power user"
    },
    "assist": {
      "title": "AI Assistant",
      "suggestedReplies": "Suggested Replies",
      "articles": "KB Articles",
      "customerInfo": "Customer Info",
      "loading": "Generating suggestions...",
      "noSuggestions": "No source-backed reply available",
      "citedSources": "Sources: {{count}}",
      "noArticles": "No related articles",
      "noCustomerData": "No customer data",
      "contextTips": "Tips",
      "useReply": "Use Reply",
      "copy": "Copy",
      "copied": "Copied",
      "confidence": "Confidence",
      "concise": "Concise",
      "detailed": "Detailed",
      "empathetic": "Empathetic",
      "general": "General",
      "keyPoints": "Key Points",
      "recentIssues": "Recent Issues",
      "totalInteractions": "Total Interactions",
      "avgSatisfaction": "Avg Satisfaction",
      "tier": "Tier",
      "riskLevel": "Risk Level",
      "highRisk": "High",
      "mediumRisk": "Medium",
      "lowRisk": "Low",
      "fetchError": "Failed to load AI suggestions",
      "selectChat": "Select a chat"
    },
    "autoReply": {
      "title": "Auto Reply",
      "enabled": "Auto Reply Enabled",
      "confidenceThreshold": "Confidence Threshold",
      "reviewThreshold": "Review Threshold",
      "pendingReview": "Pending Review",
      "approve": "Approve",
      "reject": "Reject",
      "approved": "Approved",
      "rejected": "Rejected",
      "modified": "Modified"
    },
    "intent": {
      "title": "Intent Classification",
      "billing": "Billing",
      "technical": "Technical Support",
      "general": "General Inquiry",
      "complaint": "Complaint",
      "feedback": "Feedback",
      "sales": "Sales",
      "refund": "Refund",
      "shipping": "Shipping"
    },
    "routing": {
      "title": "Smart Routing",
      "suggestedAgent": "Suggested Agent",
      "suggestedTeam": "Suggested Team",
      "confidence": "Confidence",
      "reason": "Reason"
    },
    "assistant": "AI Assistant",
    "copilot": {
      "failed": "Failed to run the AI writing assistant.",
      "label": "AI Help",
      "polite": "More polite",
      "concise": "Shorter",
      "empathetic": "More empathetic",
      "fix": "Proofread",
      "translateEn": "Translate to English",
      "notConfigured": "Set an AI provider API key to use the AI writing assistant."
    }
  },
  "messagePanel": {
    "aiAssist": "AI assist",
    "customerInfo": "Customer info",
    "moreActions": "More actions",
    "changeStatus": "Change Status",
    "changePriority": "Change Priority",
    "reassignAgent": "Reassign Agent",
    "manageTags": "Manage Tags",
    "exportChat": "Export Transcript",
    "statusChanged": "Status changed successfully",
    "statusConflict": "The conversation changed. Review its latest state before trying again.",
    "statusUnconfirmed": "Could not confirm the change. Refresh the conversation before trying again.",
    "statusError": "Failed to update status",
    "priorityChanged": "Priority changed successfully",
    "priorityError": "Failed to update priority",
    "reassigned": "Chat reassigned successfully",
    "reassignError": "Failed to reassign chat",
    "tagAdded": "Tag added successfully",
    "tagRemoved": "Tag removed successfully",
    "tagError": "Failed to update tags",
    "exported": "Transcript downloaded",
    "exportError": "Failed to export transcript",
    "noAgents": "No agents available",
    "noTags": "No tags yet",
    "newTagPlaceholder": "Enter new tag...",
    "current": "Current",
    "priority": {
      "low": "Low",
      "medium": "Medium",
      "high": "High",
      "urgent": "Urgent"
    },
    "assignConflict": "Another agent claimed this conversation first. Refresh and try again.",
    "assignConflictNamed": "{{name}} claimed this conversation first. Refresh and try again.",
    "internalNotes": "Internal notes"
  },
  "chat": {
    "status": {
      "closed": "Closed",
      "open": "Open",
      "pending": "Pending",
      "resolved": "Resolved"
    }
  },
  "header": {
    "notifications": "Notifications"
  },
  "channels": {
    "description": "Connect external messaging channels to handle every customer conversation in one inbox.",
    "lineDescription": "Bring messages from your LINE Official Account into the inbox.",
    "kakaoDescription": "Bring Kakao Counsel Talk inquiries into the inbox (via an authorized dealer gateway).",
    "instagramDescription": "Instagram DM integration",
    "kakaoWebhookHelp": "Register this URL as the inbound message callback in your Kakao dealer (VAS provider) console.",
    "apiBase": "Gateway API Base URL",
    "kakaoWebhookToken": "Webhook Verification Token",
    "kakaoAccessToken": "Outbound Access Token",
    "comingSoon": "Coming soon",
    "active": "Connected",
    "inactive": "Inactive",
    "webhookUrl": "Webhook URL",
    "webhookHelp": "Register this URL under Messaging API > Webhook URL in the LINE Developers console.",
    "channelSecret": "Channel Secret",
    "channelAccessToken": "Channel Access Token",
    "savedKeepBlank": "Saved — fill in only to change",
    "testConnection": "Test connection",
    "testSuccess": "Connected",
    "testFailed": "Connection failed",
    "lastReceived": "Last received",
    "receivedCount": "Messages received",
    "lastError": "Last error",
    "toggleLabel": "Enable {{channel}} integration",
    "disconnect": "Disconnect",
    "disconnectTitle": "Disconnect {{name}}?",
    "disconnectMessage": "The stored credentials are erased and no messages will be sent or received on this channel. Reconnecting means entering new values from the provider. Past conversations are kept.",
    "disconnectError": "Could not disconnect the channel",
    "inboundAttentionTitle": "External channel intake is delayed",
    "inboundAttentionHint": "Incoming messages are stored and being retried. If the delay continues, check the channel connection and server health.",
    "inboundDelayed": "Delayed messages: {{count}}",
    "inboundInterrupted": "Interrupted jobs: {{count}}",
    "inboundAttentionUnavailable": "Could not check external channel intake. Please try again.",
    "providerVerificationNotice": "A connection test checks credentials only. LINE needs an official account and webhook registration. Kakao needs a compatible dealer gateway contract and integration validation. Verify inbound and outbound text, images and file links with a test account before use."
  },
  "productHelp": {
    "title": "Trifrost help",
    "intro": "Find the right starting point for your account and customer support work.",
    "account": {
      "title": "Accounts and workspaces",
      "body": "Create a new workspace with a Google account. To join an existing workspace, use the invitation link from its administrator."
    },
    "conversations": {
      "title": "Conversations and customers",
      "body": "After signing in, handle requests in Conversations and review profiles and history in Customers."
    },
    "knowledge": {
      "title": "Knowledge base",
      "body": "Manage articles in your workspace's knowledge base. Published public articles appear in that workspace's customer help center."
    },
    "billing": {
      "title": "Pricing and support",
      "body": "See plans on the Pricing page and find service and billing contact options on the Contact page."
    },
    "customerHelp": {
      "title": "Looking for a business's customer help center?",
      "body": "Open the dedicated help link shared by that business."
    },
    "links": {
      "start": "Start a new workspace",
      "signIn": "Log in",
      "chats": "Conversations",
      "customers": "Customers",
      "knowledgeBase": "Knowledge base",
      "pricing": "Pricing",
      "contact": "Contact"
    }
  },
  "helpPublic": {
    "title": "How can we help?",
    "searchLabel": "Search help articles",
    "searchPlaceholder": "Search for answers",
    "loadFailed": "Could not load help articles. Please try again.",
    "articleLoadFailed": "Could not load this article. Please try again.",
    "searchFailed": "Could not search help articles. Please try again.",
    "allCategories": "All",
    "noResults": "No results found.",
    "noArticles": "No articles published yet.",
    "backToList": "Back to all articles",
    "notFound": "Article not found.",
    "wasHelpful": "Was this article helpful?",
    "yes": "Yes",
    "no": "No",
    "thanksFeedback": "Thanks for your feedback!",
    "feedbackFailed": "Could not save your feedback. Please try again.",
    "related": "Related articles"
  },
  "cannedReplies": {
    "title": "Canned replies (↑↓ to move, Enter to select)",
    "new": "New reply",
    "empty": "No canned replies yet. Add one with \"New reply\".",
    "personal": "Personal",
    "team": "Team",
    "createTitle": "Create canned reply",
    "titlePlaceholder": "Title (e.g. Greeting)",
    "shortcutPlaceholder": "Shortcut (e.g. hello — searched as /hello)",
    "contentPlaceholder": "Reply content",
    "deleteTitle": "Delete this saved reply?",
    "deleteMessage": "\"{{title}}\" will be deleted. If your team shares it, it goes for everyone, and this cannot be undone.",
    "deleteError": "Could not delete the saved reply"
  },
  "widgetPreview": {
    "title": "Customer Support",
    "subtitle": "Leave a message and we will reply after reviewing it",
    "inputPlaceholder": "Type a message...",
    "empty": "No messages to preview",
    "label": "Widget preview",
    "fromBot": "Automated reply",
    "offlineSubtitle": "Outside business hours",
    "preChatGate": "Visitors must leave their contact details before chatting (pre-chat form is on)"
  },
  "notifications": {
    "newNotification": "New notification",
    "loadFailed": "Notifications could not be loaded. Please try again.",
    "readFailed": "The read update could not be confirmed. Check the refreshed list before trying again.",
    "kinds": {
      "mention": "You were mentioned in a note",
      "slaBreach": "SLA breach",
      "chatAssigned": "A conversation was assigned to you",
      "escalation": "An escalated conversation was assigned to you",
      "kbGap": "A question your knowledge base doesn't cover",
      "faqCandidate": "A new FAQ candidate",
      "article": "Article notification",
      "chatUnassigned": "A new conversation came in",
      "deliveryUncertain": "External delivery needs confirmation",
      "deliveryFailure": "External message delivery failed",
      "deliveryEvidence": "New provider facts need review",
      "deliveryEvidenceAssigned": "Provider fact review assigned to you",
      "deliveryEvidenceReminder": "Provider fact review remains unresolved",
      "deliveryEvidenceOwnerUnavailable": "Provider fact review needs a new owner",
      "visitorRetentionAttention": "Visitor cleanup needs attention",
      "visitorRetentionRecovered": "Visitor cleanup warning cleared"
    },
    "moreUnread": "Showing {{shown}} of {{total}} unread notifications"
  },
  "admin": {
    "title": "Service Admin",
    "badge": "OPS",
    "operatorBadge": "Operator",
    "shellSubtitle": "Service-wide administration",
    "backToConsole": "Workspace console",
    "nav": {
      "overview": "Overview",
      "workspaces": "Workspaces",
      "users": "Users",
      "revenue": "Revenue",
      "usage": "Usage & cost",
      "infra": "Infrastructure",
      "demos": "Demos",
      "promotions": "Promotion videos",
      "operators": "Operators"
    },
    "planMix": "Paid subscription mix",
    "planMixHint": "Counted from subscriptions; a workspace without one counts as free.",
    "notOperator": "Platform operators only",
    "notOperatorDesc": "The service-wide admin console is limited to platform operators. You can continue managing your workspace from the console.",
    "queueDone": "{{action}} done: {{name}}",
    "ready": "Healthy",
    "notReady": "Unhealthy",
    "onlineUsers": "{{n}} online",
    "envLabel": "Environment",
    "version": "Version",
    "nodeVersion": "Node",
    "uptime": "Uptime",
    "dependencies": "Dependencies",
    "clients": "Clients {{n}}",
    "queues": "Queues",
    "queuesDisabled": "Disabled",
    "queuesInline": "Jobs run inline inside the web process.",
    "noQueues": "No queues registered.",
    "colQueue": "Queue",
    "colState": "State",
    "colWaiting": "Waiting",
    "colFailed": "Failed",
    "paused": "Paused",
    "running": "Running",
    "resume": "Resume",
    "pause": "Pause",
    "retry": "Retry",
    "costGovernance": "Cost guardrails",
    "operatorsDesc": "These people can see every workspace's data and the platform's state. Granting and revoking happens only on the server, never in this console — if an operator could add operators, one compromised account would be unrecoverable.",
    "noOperators": "No operators",
    "colUser": "User",
    "colWorkspaceRole": "Workspace role",
    "colStatus": "Status",
    "colLastLogin": "Last login",
    "you": "You",
    "active": "Active",
    "inactive": "Inactive",
    "mrr": "MRR",
    "arr": "{{v}} annualised",
    "payingWorkspaces": "Paying workspaces",
    "conversion": "{{v}}% conversion",
    "users": "Users",
    "activeUsers": "{{v}} active",
    "chats30d": "Chats (last 30 days)",
    "chatsTotal": "{{v}} all time",
    "aiReplies": "AI replies (this month)",
    "aiCost": "Cost {{v}}",
    "mauTotal": "MAU (this month)",
    "mauOverage": "{{v}} over",
    "customers": "Customers",
    "messages": "Messages {{v}}",
    "operators": "Platform operators",
    "operatorsHint": "Service-wide access",
    "growth": "Last 30 days",
    "newWorkspaces": "New workspaces",
    "newUsers": "New users",
    "newChats": "Chats",
    "overageOutstanding": "Uncharged overage",
    "noOverage": "No overage waiting to be charged.",
    "payingCount": "{{n}} subscriptions",
    "subsTotal": "Total subscriptions",
    "subsCanceled": "{{n}} canceled",
    "overagePending": "Overage awaiting charge",
    "overageDeferred": "Reconciling",
    "overageReview": "Billing review",
    "overageReconciliation": "Post-close review",
    "overageSettlementReview": "Payment review needed",
    "overageRenewalUnverified": "The expected renewal date passed without a verified payment transaction. Reconcile Paddle transactions.",
    "overageCanceledBeforeSettlement": "Cancellation may have forgiven the scheduled charge. Check Paddle transactions.",
    "overagePausedBeforeSettlement": "Pausing may have changed the charge date. Check Paddle transactions.",
    "overageSubscriptionChangedBeforeSettlement": "The subscription changed. Verify whether the scheduled charge was paid.",
    "overageSettlementTitle": "Overage payment review",
    "overageSettlementNotice": "Check the actual Paddle transaction before recording a decision. This does not mark the invoice paid or submit another charge.",
    "overageProviderForgiven": "Paddle forgiveness confirmed",
    "overageSettledExternally": "Adjusted separately",
    "overageSettlementNoteHint": "Record at least 20 characters explaining the Paddle transaction and adjustment.",
    "reconciliationOpen": "Review",
    "reconciliationView": "Review history",
    "reconciliationPrevious": "Previous outcome",
    "reconciliationTitle": "Overage charge reconciliation",
    "reconciliationOriginal": "Original charge",
    "reconciliationOriginalMau": "Original MAU overage",
    "reconciliationAiCounts": "AI overage replies: {{original}} → {{current}}",
    "reconciliationAiPending": "Wait for {{count}} in-progress AI replies before reviewing.",
    "reconciliationDecreaseNeedsAdjustment": "Current usage is lower than the original charge. Confirm the Paddle refund or adjustment and record it as an external adjustment.",
    "reconciliationActive": "Active customers",
    "reconciliationVerifiedMau": "Billable MAU after ledger verification: {{count}}",
    "reconciliationUnverifiedMau": "The current MAU ledger is not verified yet. A no-difference decision will reverify it.",
    "reconciliationDecision": "Review outcome",
    "reconciliationNoDifference": "No billing difference",
    "reconciliationWaived": "Difference waived",
    "reconciliationExternal": "Adjusted externally",
    "reconciliationNotice": "This record does not change the invoice or send another Paddle charge. Compare the transaction and activity ledger first.",
    "reconciliationNote": "Review evidence",
    "reconciliationNoteHint": "Describe how you checked the transaction and activity ledger (at least 20 characters)",
    "reconciliationReference": "External adjustment reference",
    "reconciliationReferenceHint": "Verifiable Paddle transaction, refund, or other reference",
    "reconciliationSave": "Record review outcome",
    "reconciliationAlreadyResolved": "This review has already been resolved. Refresh the list.",
    "overageFailed": "Charge failed",
    "overageExceptions": "Failed and unconfirmed charges",
    "overageExceptionsGuidance": "{{count}} cases · oldest first. Verify the subscription, request ID, and transaction in Paddle before resolving. Do not resubmit an uncertain charge.",
    "noOverageExceptions": "No charges need investigation",
    "overageAttempt": "Last attempt",
    "overageAttempts": "Attempts: {{count}}",
    "providerRequest": "Request",
    "overageChargingUncertain": "Submission may have stopped during transit. Check Paddle.",
    "overageUnconfirmed": "Submission outcome is uncertain. Check Paddle.",
    "overageRejected": "Paddle rejected the charge",
    "overageRetryReview": "Review retry",
    "overageRetryTitle": "Approve retry for rejected charge",
    "overageRetryNotice": "Verify in Paddle that this request was rejected and the same charge was not scheduled or paid. After approval, the next monthly close rechecks usage and the subscription before submitting a charge.",
    "overageRetryReference": "Paddle verification reference",
    "overageRetryReferenceHint": "Verifiable Paddle request or support ticket reference",
    "overageRetryNote": "Retry evidence",
    "overageRetryNoteHint": "Describe how you confirmed rejection and no duplicate charge (at least 20 characters)",
    "overageRetryApprove": "Approve retry",
    "overageRetryReconcileFirst": "Resolve the usage reconciliation first",
    "overageRetryApprovedAt": "Retry approved",
    "overageRetryQueued": "Waiting for usage and subscription recalculation after approval",
    "overageRetryReviewNeeded": "Manual review is needed after recalculation",
    "subscriptions": "Subscriptions",
    "noSubs": "No subscriptions",
    "colWorkspace": "Workspace",
    "colAction": "Action",
    "colPlan": "Plan",
    "colSeats": "Seats",
    "colMrr": "MRR",
    "colRenews": "Renews",
    "linked": "Linked",
    "notLinked": "Not linked",
    "overageByPeriod": "Overage by period",
    "colPeriod": "Period",
    "charged": "Charged",
    "pending": "Pending",
    "failed": "Failed",
    "colCount": "Count",
    "recentInvoices": "Recent overage invoices",
    "colAmount": "Amount",
    "colReason": "Note",
    "periodLabel": "Period",
    "aiCostTotal": "Total AI cost",
    "blendedMargin": "Blended margin",
    "marginTarget": "Target 70% or above",
    "thinMargin": "Margin below 70%",
    "thinMarginHint": "Signal to revisit pricing",
    "fxNote": "Costs are in USD, converted at a fixed ₩{{rate}}/$ rate (USD_KRW_RATE).",
    "orphanUsage": "Excluded from the table above: {{n}} usage records from deleted workspaces (AI {{ai}} · MAU {{mau}} · {{cost}}).",
    "usageByWorkspace": "Usage and cost by workspace",
    "noUsage": "No usage recorded for this period",
    "colAi": "AI",
    "colMau": "MAU",
    "colCost": "Cost",
    "colRevenue": "Revenue",
    "colMargin": "Margin",
    "searchUser": "Search by name or email",
    "userCount": "{{n}} users",
    "noUsers": "No users",
    "colRole": "Role",
    "unverified": "Unverified",
    "searchWorkspace": "Search by name or slug",
    "wsCount": "{{n}} workspaces",
    "noWorkspaces": "No workspaces",
    "colName": "Workspace",
    "colMembers": "Members",
    "colChats": "Chats",
    "unassigned": "Unassigned",
    "activeManagers": "Active admins/managers",
    "noQueueOwner": "No manager to alert",
    "deletionRequestsOnly": "Deletion requests only",
    "deletionRequested": "Deletion requested · reply by {{date}}",
    "ownerlessQueueDetail": "{{count}} unassigned conversations have no active admin or manager to alert.",
    "colCreated": "Created",
    "view": "View",
    "workspace": "Workspace",
    "noSub": "No subscription",
    "usageVsAllowance": "Usage / included",
    "aiRepliesShort": "AI replies",
    "aiCostLabel": "AI cost",
    "overageHistory": "Overage history",
    "membersTitle": "{{n}} members",
    "outboundEmail": "Outbound email",
    "emailNotConfigured": "SMTP is not configured — verification, password reset and invitation emails are not being sent",
    "aiProvider": "AI provider",
    "aiNotConfigured": "No AI key — auto-replies fall back to help-centre extracts",
    "webhookDeliveries": "Payment webhook deliveries",
    "billingChanges": "Subscription changes awaiting confirmation",
    "billingChangesAttention": "{{count}} subscription changes await confirmation — check the payment provider",
    "billingChangesClear": "No subscription changes await confirmation.",
    "billingChangeTarget": "Requested plan and seats",
    "billingChangeStarted": "Requested",
    "billingChangeLastChecked": "Last checked",
    "billingChangeCheck": "Check Paddle",
    "billingChangeReconciled": "The provider subscription was synchronized.",
    "billingChangeReleased": "The unapplied change was confirmed and the hold was released.",
    "billingChangeReviewReady": "Eligible for review",
    "billingChangeReviewPending": "More evidence needed",
    "billingChangeComparison": "Local: {{localPlan}} {{localSeats}} seats · Paddle: {{providerPlan}} {{providerSeats}} seats",
    "billingChangeProviderUpdated": "Paddle last updated",
    "billingChangeReleaseGuidance": "Check Paddle subscription history or a support case, then record its reference and your findings. Releasing the hold lets the customer request another change.",
    "billingChangeReference": "Paddle history ID or support case",
    "billingChangeNote": "Review findings (at least 20 characters)",
    "billingChangeRelease": "Confirm unapplied and release hold",
    "billingChangeReason": {
      "providerIdMismatch": "The provider subscription ID differs.",
      "unknownPrice": "The provider price cannot be mapped.",
      "inactiveProvider": "The provider subscription is not active.",
      "localMismatch": "The local subscription differs from the provider.",
      "missingTimestamp": "The provider has no last-update timestamp.",
      "providerChanged": "The provider subscription changed after this request. Review its history.",
      "tooRecent": "Wait 30 minutes before reviewing an unapplied request.",
      "secondObservation": "Confirm the same provider state twice, at least five minutes apart.",
      "reconciliationPending": "The target was found, but local reconciliation is still pending.",
      "unknown": "Check the provider state again."
    },
    "webhookAttention": "{{n}} failed, unresolved, or stalled deliveries — check whether payments took effect",
    "webhookAllClear": "No deliveries need attention.",
    "webhookAttentionFilter": "Needs attention",
    "webhookStaleReceived": "Stalled for over 10 minutes",
    "webhookMore": "Showing {{shown}} of {{total}} · Load more",
    "webhookNone": "No payment webhooks received yet.",
    "webhookNoneWithStatus": "No deliveries with this status.",
    "webhookNoWorkspace": "Unknown",
    "webhookRetry": "Retry",
    "webhookTransactionRetry": "Reconcile transaction again",
    "webhookTransactionNoEvidence": "This older delivery has no retained transaction evidence. Verify it with Paddle transaction read access.",
    "webhookRetried": "Retry result: {{status}}",
    "webhookBindPlaceholder": "Workspace ID to bind this delivery to",
    "colReceived": "Received",
    "colType": "Type",
    "colDetail": "Detail",
    "webhookStatus": {
      "applied": "Applied",
      "ignored": "Ignored",
      "unresolved": "Unresolved",
      "failed": "Failed",
      "received": "In progress"
    },
    "timezone": "Timezone",
    "tzNotPinned": "{{zone}} (inherited from the host — TZ is not pinned)",
    "confirmedAiCost": "Confirmed AI cost",
    "unconfirmedAiCost": "{{count}} AI calls need cost reconciliation. Only confirmed costs are shown; affected margins remain unavailable until reconciliation.",
    "unconfirmedCallCount": "{{count}} unconfirmed calls",
    "deliveryAlerts": {
      "title": "Delivery alert processing",
      "help": "Each delivery alert check runs independently. Missing, failed or stale processing is reported separately from conversation readiness.",
      "refresh": "Refresh alert processing",
      "checking": "Checking alert processing…",
      "unavailable": "Could not retrieve alert processing. Its current state is unconfirmed.",
      "unknown": "No current shared worker state can be confirmed.",
      "instances": "{{healthy}} of {{total}} registered workers healthy",
      "expected": "Expected at least {{n}} workers",
      "checked": "Checked at {{at}}",
      "instance": "Worker",
      "phase": "Check",
      "state": "State",
      "lastSuccess": "Last successful completion",
      "completionAge": "Since completion",
      "failureCount": "Failures",
      "duration": "Processing duration",
      "consecutive": "{{n}} consecutive",
      "thresholds": "A check is stale after 60 seconds without completion; email processing has a 150-second threshold.",
      "latency": "Bell notification storage latency",
      "samples": "{{n}} observed notification samples",
      "upper": "≤ {{n}}",
      "overDay": "Over 24 hours",
      "within": "{{percent}}% stored within 60 seconds",
      "invalidTiming": "{{n}} samples had no valid timing and were excluded.",
      "sampleHelp": "The last hour of each current worker boot, up to 500 recent committed notifications per worker. Restarts reset samples. Percentiles are histogram upper bounds. These measurements do not prove socket delivery, operator reading or customer receipt.",
      "statuses": {
        "ok": "Healthy",
        "checking": "Checking",
        "starting": "Starting",
        "stale": "Stale",
        "degraded": "Degraded",
        "stopped": "Stopped",
        "unknown": "Unconfirmed"
      },
      "phases": {
        "uncertain": "Unconfirmed delivery",
        "terminal": "Failed delivery",
        "evidence": "New provider facts",
        "email": "Alert email"
      },
      "latencyUnavailable": "Notification storage measurements are unavailable."
    },
    "notificationEmailReview": {
      "providerMailTime": "Original mail timestamp: {{at}}",
      "title": "Notification email review",
      "help": "Review unknown SMTP outcomes and provider issues using the original request and verified evidence.",
      "refresh": "Refresh email review queue",
      "filter": "Email review status",
      "filters": {
        "open": "Needs review",
        "reviewed": "Manually reviewed",
        "all": "All emails requiring review"
      },
      "workspace": "Workspace",
      "created": "Notification created",
      "status": "Review status",
      "action": "Action",
      "needsReview": "Needs review",
      "reviewed": "Manually reviewed",
      "inspect": "Inspect email",
      "empty": "No notification emails match this review status.",
      "more": "Load more emails",
      "loading": "Retrieving current email records…",
      "queueError": "Could not retrieve this email queue. Refresh to try again.",
      "recoveryError": "Could not check saved review requests. Recording is unavailable until recovery succeeds.",
      "savedRequest": "A saved email review request needs confirmation.",
      "restore": "Restore saved email review",
      "detailTitle": "Review the notification email",
      "scope": "Record what you confirmed about this manager notification email. This action does not resend email, change the customer reply, or release its blocked dispatch.",
      "originalMessage": "Original customer reply reference",
      "smtpUnknown": "Original SMTP result remains unknown",
      "attempt": {
        "recipient": "Original recipient",
        "host": "Original SMTP server",
        "messageId": "Original RFC Message-ID",
        "at": "Attempt started"
      },
      "legacy": "Original address/request details were not recorded or their retention period has ended. The current account address is not evidence of the original recipient.",
      "acceptanceHelp": "SMTP acceptance is a mail server accepting the request. It does not prove arrival in a mailbox or reading. Record the provider log or recipient evidence you checked.",
      "facts": {
        "accepted": "SMTP acceptance observed",
        "rejected": "SMTP rejection observed",
        "unknown": "Result unknown",
        "not_sent": "No SMTP request was sent"
      },
      "outcome": "Confirmed mail outcome",
      "outcomes": {
        "accepted": "Manually confirmed SMTP acceptance",
        "not_accepted": "Manually confirmed no SMTP acceptance",
        "provider_issue_handled": "Provider issue investigated and handled"
      },
      "evidence": "Checked evidence (10–1,000 characters)",
      "prepare": "Save this review for confirmation",
      "apply": "Record the saved outcome",
      "acknowledge": "Acknowledge the saved result",
      "requestStates": {
        "prepared": "Review saved; outcome has not been applied.",
        "applied": "Manual review was recorded. The original SMTP state is preserved.",
        "cancelled": "The saved review was cancelled."
      },
      "readError": "Could not read the current email facts and review history. Recording is unavailable.",
      "mutationUnknown": "Could not confirm the saved request result. Check it before applying or cancelling.",
      "changed": "New facts or another review changed this email. Cancel the saved review and reopen the email to review its current facts.",
      "checkRequest": "Check saved email review request",
      "cancelRequest": "Cancel saved email review",
      "retryPrepare": "Retry the saved preparation",
      "refreshFacts": "Refresh email facts",
      "history": "Recorded review history",
      "moreHistory": "Load more email reviews",
      "superseded": "Superseded by newer facts or a newer review",
      "providerConfigured": "SES tracking is configured for new attempts. Configuration alone does not prove event delivery.",
      "providerNotConfigured": "SES event tracking is not configured. No provider outcome is inferred.",
      "smtpRecorded": "Original SMTP state retained: {{state}}",
      "providerHistory": "Verified SES events",
      "providerHelp": "Delivery means the recipient mail server accepted the email. It does not prove inbox arrival or reading. Complaint reports may hide who submitted them.",
      "providerNoFacts": "No verified event is retained for this attempt. This is not a delivery result.",
      "providerUntracked": "This original attempt has no retained SES tracking configuration. Current settings cannot supply missing original evidence.",
      "providerMessageId": "SES message ID",
      "moreProviderHistory": "More SES events",
      "providerStates": {
        "accepted": "SES accepted",
        "delayed": "Delivery delayed",
        "delivered": "Recipient server accepted",
        "bounced": "Delivery bounced",
        "rejected": "SES rejected",
        "rendering_failed": "Rendering failed",
        "complained": "Complaint observed"
      },
      "providerEvents": {
        "Send": "SES accepted",
        "DeliveryDelay": "Delivery delayed",
        "Delivery": "Recipient server accepted",
        "Bounce": "Delivery bounced",
        "Reject": "SES rejected",
        "Rendering Failure": "Rendering failed",
        "Complaint": "Complaint observed"
      }
    },
    "deliveryOutcomes": {
      "providerIssues": "Provider issues: {{count}} · awaiting review: {{open}} (original SMTP state retained)",
      "title": "Delivery notification outcomes",
      "refresh": "Refresh notification outcomes",
      "help": "Worker completion and notification delivery are separate. This view inspects currently eligible incidents and retained successful notification records.",
      "statuses": {
        "checking": "Checking",
        "unknown": "Unverified",
        "attention": "Needs attention",
        "pending": "Pending",
        "clear": "No pending notifications found"
      },
      "checking": "Reading notification outcomes…",
      "unavailable": "Could not read notification outcomes. Previous counts were removed; refresh to try again.",
      "unknown": "Some measurements are unavailable. Unavailable values are not zero.",
      "checked": "Checked at {{at}}",
      "kind": "Incident",
      "eligible": "Current incidents",
      "waiting": "Still awaiting a notification",
      "overdue": "Over 60 seconds",
      "withoutRecipient": "No eligible recipient",
      "oldest": "Oldest pending due time",
      "kinds": {
        "uncertain": "Unconfirmed delivery",
        "terminal": "Failed delivery",
        "evidence": "New provider facts"
      },
      "unmeasured": "Unmeasured",
      "timingUnknown": "{{n}} records have unmeasured timing",
      "coverageHelp": "Counts are incidents, not recipients. An incident is pending if at least one currently eligible manager lacks a committed receipt for its current notification round. Due reminders and unavailable selected recipients are included. A stored receipt does not prove operator reading; deleted or inactive parents are excluded.",
      "reviewCounts": "{{open}} need review · {{reviewed}} manually reviewed (original SMTP state retained)",
      "emailTitle": "Unconfirmed-delivery alert email",
      "emailUnknown": "Email outcomes are unavailable.",
      "emailStates": {
        "pending": "Queued email: {{n}}",
        "sending": "Email being processed: {{n}}",
        "uncertain": "Original SMTP result remains unknown: {{n}}"
      },
      "oldestEmail": "Oldest queued at {{at}}",
      "emailOverdue": "{{n}} beyond the processing threshold",
      "emailHelp": "Queued email is overdue after 60 seconds and processing after 150 seconds. Unknown results remain unknown after the message is resolved; this view does not retry email or declare it delivered.",
      "retainedTitle": "Retained notification creation delay",
      "retainedUnknown": "Retained notification measurements are unavailable.",
      "samples": "{{n}} retained notification samples",
      "within": "{{percent}}% of measured records created within 60 seconds",
      "upper": "≤ {{n}} ms",
      "overDay": "Over 24 hours",
      "expiredClaims": "{{n}} expired sending claims",
      "retainedHelp": "Records created in the last hour by successful notification transactions, retained for 90 days across worker restarts. Message/customer erasure also removes the records. Delay uses the notification record’s creation time, excluding transaction commit wait; percentiles are histogram upper bounds. Pending incidents, socket delivery, reading and customer receipt are outside this sample."
    },
    "paymentProvider": "Payment provider",
    "xsollaLedgerNote": "Amounts reported in signed payment notifications. Reconcile actual collections, balance credits, taxes and fees with Xsolla transaction and settlement reports.",
    "amount": "Amount",
    "refundReview": "Partial refund review",
    "paymentPaid": "Payment confirmed",
    "paymentRefunded": "Refund confirmed",
    "xsollaSettlements": "Xsolla subscription changes",
    "xsollaSettlementNote": "Subscription changes cleared by Xsolla. Amounts are the new recurring charges; balance-funded changes are not counted as cash receipts.",
    "contractAmount": "New recurring charge",
    "settlementApplied": "Applied",
    "xsollaPendingChanges": "Pending Xsolla changes",
    "checkoutWaiting": "Awaiting customer confirmation",
    "settlementPending": "Confirming result",
    "checkAgain": "Check again"
  },
  "onboarding": {
    "title": "Get started",
    "subtitle": "{{n}} steps left.",
    "live": "Receiving chats",
    "notLive": "No chats yet",
    "required": "Required",
    "copySnippet": "Copy snippet",
    "widgetSettings": "Widget settings",
    "go": "Open",
    "step": {
      "install": "Install the widget",
      "knowledge": "Create a knowledge base",
      "invite": "Invite your team",
      "hours": "Set operating hours"
    },
    "why": {
      "install": "Visitors can only start a conversation once this snippet is on your site. Nothing happens until it is.",
      "knowledge": "AI replies are grounded in your articles. With none, every question goes to a human.",
      "invite": "Invite teammates to share the inbox.",
      "hours": "Outside business hours visitors get an away message automatically."
    },
    "needsUpgrade": "Requires a paid plan",
    "installSeen": "Install confirmed"
  },
  "platform": {
    "title": "Platform · Operations",
    "adminOnly": "Operators only",
    "adminOnlyDesc": "The deployment and operations console is restricted to platform operators.",
    "subtitle": "Review the deployment, operations and cost design, and manage it within safe limits.",
    "overview": "Overview · Status",
    "env": "Environment",
    "version": "Version / SHA",
    "uptime": "Uptime",
    "queue": "Queue",
    "onlineAgents": "Agents online",
    "architecture": "Architecture",
    "component": "Component",
    "placement": "Placement",
    "scaling": "Scaling",
    "autoDeploy": "Auto deploy",
    "approvalDeploy": "Deploy on approval",
    "cost": "Cost · Governance",
    "estMonthly": "Estimated monthly cost (USD)",
    "budgets": "Budget alerts",
    "reporting": "Reporting",
    "requiredTags": "Required cost tags",
    "operations": "Operations · Queue management",
    "opsNote": "Infrastructure changes (Terraform/EKS/Atlas) run only through CI and Terraform. Only safe, app-owned actions are available here.",
    "resume": "Resume",
    "pause": "Pause",
    "retryFailed": "Retry failed",
    "docs": "Docs · Links",
    "docsNote": "See the ARCHITECTURE / RUNBOOK / COST / FINOPS documents in the repository for the full design.",
    "demos": {
      "title": "Feature demo clips",
      "subtitle": "Every feature recorded at {{resolution}}. Click a thumbnail to play it in place.",
      "lastRecorded": "Last recorded: {{at}}",
      "emptyTitle": "Nothing recorded yet",
      "emptyBefore": "Run",
      "emptyAfter": "on the server and the per-feature clips will appear here.",
      "playAria": "Play {{title}}",
      "notRecorded": "Not recorded",
      "console": "Console",
      "public": "Public"
    }
  },
  "presence": {
    "label": "Availability",
    "online": "Available",
    "away": "Away",
    "busy": "Busy"
  },
  "audit": {
    "title": "Deletion log",
    "description": "Records when an irreversible deletion happened, and who did it",
    "deleted": "Deleted",
    "empty": "Nothing has been deleted yet",
    "loadFailed": "Could not load the deletion log",
    "showAll": "See all {{count}}",
    "removedChats": "conversations",
    "removedMessages": "messages",
    "removedNotes": "internal notes",
    "removedQuality": "quality records",
    "removedFiles": "attachments",
    "roleChanged": "Role changed",
    "memberDeactivated": "Access removed",
    "memberReactivated": "Access restored",
    "exported": "Exported",
    "redactedSubject": "Erased customer"
  },
  "drafts": {
    "conflict": {
      "choiceFailed": "The draft choice could not be saved. All versions remain. Check browser storage and retry.",
      "reply": "Reply drafts differ between tabs",
      "note": "Note drafts differ between tabs",
      "body": "Both drafts are preserved. Compare them and choose one before editing or sending.",
      "pending": "A note request is awaiting confirmation. Open that draft and check or cancel its original request before choosing another version.",
      "changed": "A draft changed while you were reviewing it. Both versions remain; compare them again.",
      "version": "Draft {{count}}",
      "empty": "Empty draft · it may have been sent or cleared in another tab",
      "mentions": "{{count}} selected mention recipients",
      "openPending": "Open request to check",
      "choose": "Use this draft",
      "download": "Download all versions",
      "confirmTitle": "Choose this draft?",
      "confirmBody": "The selected text, recipients and attachments will remain. Other versions shown here will be discarded. This does not send a message or note. Download all versions first if you want to keep them.",
      "selected": "Selected draft"
    },
    "attachments": "Check the original files and draft storage status before leaving.",
    "files": {
      "body": "Original files are stored for this account in this browser. Check the draft storage status before leaving.",
      "unsaved": "Some original files could not be stored. Keep this tab open, retry storage or download a copy. Missing originals are marked in the export.",
      "missing": "Some original files could not be loaded. Sending is blocked. Review any earlier send result, remove the missing entries and attach the originals again.",
      "only": "Attachment-only draft",
      "download": "Download {{name}}",
      "exportIncomplete": "The download contains your text and readable originals. Some originals are missing or could not be read; their filenames are marked in the export. Keep this tab open and download or reselect those files before leaving.",
      "exportFailed": "The draft download failed. Keep this tab open and try again, or download each original separately."
    },
    "loading": "Loading drafts from this device.",
    "saving": "Saving drafts. Please wait.",
    "saved": "Drafts saved on this device. They are not synced to other devices.",
    "unsaved": "Drafts could not be saved. They remain in this tab, but reloading or closing it may lose them.",
    "unreadable": "Some existing drafts could not be read. Restore storage access and check again.",
    "retry": "Retry saving drafts",
    "download": "Download drafts",
    "noteFailed": "The note could not be confirmed as saved. Your text is still here.",
    "recoveryTitle": "Keep your drafts before leaving",
    "recoveryBody": "Some drafts could not be saved. The conversation screen is locked while you review them. Retry saving or download them before continuing. The file includes unsent replies and internal notes.",
    "continue": "Continue and risk losing unsaved changes"
  },
  "aiReviews": {
    "title": "AI reply reviews",
    "subtitle": "Review a proposed customer reply, edit it if needed, and approve the exact version you have read.",
    "reviewTitle": "Review AI reply",
    "openChat": "Open conversation",
    "customerMessage": "Customer message",
    "noMessage": "No source message was recorded. Check the conversation before deciding.",
    "originalReply": "Original AI proposal",
    "originalTemplate": "Original template proposal",
    "responseTemplate": "Response template",
    "templateSource": "Response template: {{name}}",
    "templateHint": "This proposal uses a saved response template. Check current policy and the customer's situation before approving.",
    "classificationConfidenceHint": "Intent classification confidence is an estimate and does not establish the accuracy of the template answer.",
    "noKnowledgeSource": "No usable knowledge source is available. Verify any policy, price, or time claim before approval.",
    "unsupportedNumericClaim": "The proposal contains a number absent from its knowledge sources. Verify any period, price, or quantity before approval.",
    "unverifiedActionClaim": "The proposal claims an action was completed, but the AI executed no action. Check the actual outcome and edit the reply.",
    "unsupportedLink": "The proposal contains a link absent from its sources or outside a public HTTPS address. Verify it before approval.",
    "confidenceHint": "AI confidence is an estimate, not a guarantee of accuracy.",
    "replyToSend": "Reply to send",
    "editHint": "Edits remain in this review until you send or close it. Check the current conversation before approving.",
    "reason": "Reason (optional)",
    "approve": "Approve and send",
    "reject": "Reject and take over",
    "dismiss": "Dismiss proposal only",
    "checkResult": "Check current result",
    "retrySame": "Retry the same decision",
    "modifiedResult": "Edited reply accepted",
    "acceptedResult": "Reply accepted",
    "decidedBy": "Reviewed by",
    "formerMember": "Former team member",
    "takenOver": "Proposal rejected. The conversation has been assigned to the reviewer.",
    "dismissed": "Proposal dismissed. The conversation assignment was preserved.",
    "readError": "Could not confirm the current review. Refresh before making a decision.",
    "actionError": "The decision could not be accepted. Check the current result and your reply.",
    "changed": "The proposal or conversation changed, or someone already decided. Review the current result before continuing.",
    "unconfirmed": "The result of this decision could not be confirmed.",
    "uncertainHint": "Check the result first. Retrying repeats exactly the same decision and cannot send a second reply for this proposal.",
    "discardConfirm": "Close this review? Unsaved edits will be discarded. A decision already submitted may still finish; check its result in history.",
    "keepEditing": "Keep this review open",
    "leave": "Close review",
    "empty": "No reviews in this view.",
    "conversation": "Conversation",
    "review": "Review reply",
    "viewResult": "View result",
    "filters": {
      "pending": "Awaiting review",
      "all": "All reviews and history"
    },
    "states": {
      "pending": "Awaiting review",
      "approved": "Approved",
      "rejected": "Rejected",
      "superseded": "Replaced by a newer proposal",
      "expired": "Expired",
      "context_changed": "Conversation changed"
    },
    "blocked": {
      "expired": "This proposal is over 24 hours old and cannot be sent. Open the conversation to compose a fresh reply, or dismiss it.",
      "context_changed": "Messages, status or assignment changed after this proposal. Open the conversation to compose a fresh reply, or dismiss it."
    },
    "delivery": {
      "website": "Saved in the conversation.",
      "pending": "Delivery is queued.",
      "sending": "Delivery is in progress.",
      "sent": "The channel confirmed delivery.",
      "failed": "Delivery failed. Open the conversation to review the failure.",
      "uncertain": "Delivery is unconfirmed. Check the channel before sending again.",
      "skipped": "Delivery was skipped. Open the conversation for details.",
      "partial": "Delivery was only partly completed. Open the conversation for details.",
      "retracted": "This reply was retracted from the conversation."
    }
  },
  "erasureJobs": {
    "visitorRetention": "Visitor retention · {{days}} days · policy revision {{revision}}",
    "customerTitle": "Customer deletion jobs",
    "workspaceTitle": "Workspace deletion jobs",
    "operationId": "Operation ID",
    "workspaceId": "Workspace ID",
    "activeCount": "{{count}} in progress",
    "pending": "Waiting for cleanup",
    "running": "Cleaning up",
    "done": "Complete",
    "attempts": "{{count}} attempts",
    "cleanupPending": "Waiting for attachment or external provider cleanup.",
    "retrying": "A cleanup step failed and will retry automatically.",
    "counts": "{{chats}} chats · {{messages}} messages · {{files}} files processed",
    "noneActive": "No deletion jobs in progress.",
    "moreActive": "{{count}} more jobs exist. Check their status by operation ID.",
    "recent": "Recently completed",
    "loadError": "Could not load deletion jobs. Try again.",
    "lookupLabel": "Look up an operation ID",
    "lookupPlaceholder": "24-character operation ID",
    "lookup": "Look up",
    "lookupResult": "Lookup result",
    "invalidId": "Enter a 24-character operation ID.",
    "notFound": "This operation was not found or you cannot view it.",
    "lookupError": "Could not check the operation status. Try again."
  },
  "switchPage": {
    "documentTitle": "Move from Channel Talk to Trifrost — two lines of code | Trifrost",
    "badge": "For teams on Channel Talk",
    "title": "Moving from Channel Talk changes two lines of code",
    "subtitle": "Keep the ChannelIO calls across your site and your member-signing code. Change the script URL and the key, and the same buttons, the same signed-in members and the same conversations continue in Trifrost.",
    "ctaStart": "Start for free",
    "ctaHelp": "Ask for migration help",
    "freeNote": "Try it on the Free plan (2 agents, 1,000 active customers a month, 50 AI replies) before paying anything.",
    "codeTitle": "What changes",
    "before": "Now (Channel Talk)",
    "after": "After (Trifrost)",
    "codeNote": "Leave the server code that builds memberHash alone and only swap the secret it signs with for the one Trifrost issues. Both the raw string and the hex-decoded form of the secret are accepted.",
    "stepsTitle": "In this order",
    "stepsSubtitle": "Done in this order, signed-in members keep their customer record and their conversations.",
    "steps": {
      "secret": {
        "title": "Create a member-identity secret",
        "body": "Console → Settings → Widget → Member identity. Put the secret in your site server's environment. It is shown once, and after a rotation the previous secret keeps working for 24 hours."
      },
      "import": {
        "title": "Import your customer list",
        "body": "Upload the customer CSV exported from Channel Talk with a member ID column. Each member lands on their imported record the first time they sign in. Duplicates and conflicts are blocked in the preview."
      },
      "code": {
        "title": "Change two lines",
        "body": "Change only the loader's script URL and the pluginKey. Try it on a staging page first, then on the live site."
      }
    },
    "keepTitle": "Calls that keep working",
    "keepBody": "These calls and boot options work the same without edits. The profile's name, email and mobileNumber become customer details.",
    "memberTitle": "A signed-in member is one person on every device",
    "memberBody": "memberId and memberHash are verified on our server with HMAC-SHA256. The same member's questions from a laptop and a phone land in one customer record and one conversation, and an anonymous chat started before sign-in carries over.",
    "memberSafety": "If the signature is wrong, the visitor continues anonymously and the browser console says why. Logging out (shutdown) removes the member's identity from that browser.",
    "gapsTitle": "Not there yet",
    "gapsSubtitle": "Check these before you move. If you need one of them, a migration call starts with the timeline.",
    "gaps": {
      "kakao": {
        "title": "KakaoTalk consultation",
        "body": "Requires a contract with a verified Kakao dealer gateway. Notification (AlimTalk) sending is not available."
      },
      "history": {
        "title": "Past conversation history",
        "body": "Customer/member and conversation archive imports are supported. Export requires your source account API access. Optional attachment copies support files up to 3 MB each within a 6 MB JSON batch."
      },
      "unsupported": {
        "title": "Some ChannelIO calls",
        "body": "openWorkflow, addTags, removeTags, setAppearance, openSupportBot and similar calls are ignored without errors, with a one-time note in the developer console."
      },
      "track": {
        "title": "Storing track events",
        "body": "After session initialization and site consent configuration, track events are stored and can apply customer tags. Existing ChannelTalk campaign configurations require separate migration."
      },
      "mobile": {
        "title": "Mobile app SDKs",
        "body": "There are no iOS, Android, Flutter or React Native SDKs. Websites and mobile web are supported."
      }
    },
    "faqTitle": "Questions",
    "faq": {
      "rollback": {
        "q": "Can we go back if something is wrong?",
        "a": "Yes. Your Channel Talk account and settings stay as they are, so restoring the original script URL and key switches back immediately."
      },
      "price": {
        "q": "What will it cost?",
        "a": "Price depends on agents, monthly active customers and AI replies. Enter what you use today to see a monthly estimate."
      },
      "staging": {
        "q": "Can we test before changing the live site?",
        "a": "Switch one staging or test page first and check sign-in, sign-out and a conversation. Ask from a phone and a laptop with the same account and confirm both land in one customer and one conversation in the console."
      }
    },
    "pricingLink": "Open the price calculator",
    "finalTitle": "Try it on staging today",
    "finalSubtitle": "Install on the Free plan, confirm members and conversations carry over, then decide."
  }
}
