{
  "common": {
    "appName": "UnifiedAI",
    "submit": "Submit",
    "cancel": "Cancel",
    "next": "Next",
    "back": "Back",
    "loading": "Loading...",
    "showPassword": "Show password",
    "hidePassword": "Hide password",
    "alreadyHaveAccount": "Already have an account?",
    "logIn": "Log in",
    "termsAgree": "I agree to the Terms of Service and Privacy Policy",
    "termsRequired": "You must agree to the Terms of Service to continue"
  },
  "validation": {
    "required": "This field is required",
    "email": "Enter a valid email address",
    "passwordStrength": "Password must be at least 10 characters and include an uppercase letter, a lowercase letter, a number, and a symbol",
    "passwordMismatch": "Passwords do not match",
    "companyWebsite": "Enter a valid website address (e.g. example.com)",
    "phoneInvalid": "Enter a valid phone number"
  },
  "register": {
    "title": "Register",
    "subtitle": "Apple Business Chat & partner registration",
    "username": "Username",
    "name": "Full name",
    "email": "Email",
    "password": "Password",
    "confirmPassword": "Confirm password",
    "abcToggle": "Registering via Apple Business Chat coupon",
    "abcCouponCode": "Coupon code",
    "submit": "Create account",
    "appleBusinessLink": "Apple Business Register",
    "success": "Account created. Check your email to verify your account.",
    "genericError": "Something went wrong. Please try again."
  },
  "signupEntry": {
    "title": "Create your UnifiedAI account",
    "modeSelf": "Self sign-up",
    "modeReseller": "Reseller / Certified Partner",
    "modeSelfHint": "Set up your own account and choose a plan",
    "modeResellerHint": "I have a partner license key"
  },
  "resellerSignup": {
    "title": "Reseller / Certified Partner sign-up",
    "licenseKeyLabel": "License key",
    "validate": "Validate",
    "validating": "Validating...",
    "email": "Email",
    "company": "Company",
    "username": "Username",
    "password": "Password",
    "confirmPassword": "Confirm password",
    "submit": "Create account",
    "errorExpired": "This license key has expired. Please contact your UIB representative for a new one.",
    "errorAlreadyUsed": "This license key has already been used.",
    "errorInvalid": "This license key is invalid.",
    "errorExistingUser": "An account with this email already exists.",
    "genericError": "Something went wrong. Please try again.",
    "success": "Account created successfully."
  },
  "selfServiceOnboard": {
    "stepLead": "Step 1 of 2 — Your details",
    "stepPlan": "Step 2 of 2 — Choose a plan",
    "name": "Full name",
    "companyName": "Company name",
    "companyWebsite": "Company website",
    "phone": "Phone number",
    "dialCode": "Country code",
    "industry": "Industry",
    "email": "Email",
    "password": "Password",
    "confirmPassword": "Confirm password",
    "city": "City",
    "zip": "ZIP / Postal code",
    "country": "Country",
    "continueWithGoogle": "Continue with Google",
    "next": "Next",
    "back": "Back",
    "passwordRulesTitle": "Password requirements",
    "choosePlan": "Choose plan",
    "contactUs": "Contact us",
    "enterpriseNote": "Need a custom plan? Contact our sales team.",
    "genericError": "Something went wrong. Your details have been saved — please try again.",
    "success": "Your account is being set up."
  },
  "setPassword": {
    "title": "Set your password",
    "password": "New password",
    "confirmPassword": "Confirm new password",
    "submit": "Set password",
    "cancel": "Cancel",
    "linkExpired": "This link has expired. Please request a new one.",
    "linkInvalid": "This link is invalid.",
    "checking": "Checking your link...",
    "genericError": "Something went wrong. Please try again.",
    "success": "Password set. Redirecting to login..."
  },
  "login": {
    "card1": {
      "title": "Log in",
      "subtitle": "Access your UnifiedAI workspace",
      "email": "Email",
      "emailPlaceholder": "you@company.com",
      "password": "Password",
      "passwordPlaceholder": "••••••••",
      "submit": "Log in",
      "forgot": "Forgot password?",
      "forgotPanel": "We'll email you a reset link.",
      "or": "or",
      "google": "Continue with Google",
      "linkedin": "Continue with LinkedIn",
      "recaptcha": "Verified — reCAPTCHA",
      "languageLabel": "Language"
    },
    "validation": {
      "email": "Enter a valid email address",
      "password": "Use at least 10 characters with an uppercase letter, a lowercase letter, a number, and a symbol"
    },
    "getStarted": {
      "heading": "New to UnifiedAI? Choose how to get started:"
    },
    "signup": {
      "self": {
        "title": "Self-Service Sign Up",
        "subtitle": "Create a new workspace in minutes",
        "cta": "Create workspace"
      },
      "register": {
        "title": "Register (ABC / Enterprise)",
        "subtitle": "Guided setup with an account manager",
        "cta": "Request account"
      },
      "partner": {
        "title": "Partner / Reseller Sign Up",
        "subtitle": "Join via license key or invite token",
        "cta": "Activate license"
      }
    }
  },
  "voiceCall": {
    "title": "WhatsApp Voice Call",
    "netNewChip": "Net-new — no legacy design to reference",
    "activeCalls": "Active calls ({{count}})",
    "switchCall": "Switch to call with {{name}}",
    "onHold": "On hold",
    "callType": "WhatsApp Voice",
    "botHandling": "AI Bot handling call — sentiment: {{sentiment}}",
    "agentOnCall": "{{name}} (agent) on call",
    "handoverSystemLine": "— Call handed to {{name}} —",
    "sentiment": {
      "neutral": "neutral",
      "positive": "positive",
      "negative": "negative"
    },
    "action": {
      "mute": "Mute",
      "unmute": "Unmute",
      "hold": "Hold",
      "resume": "Resume",
      "handover": "Handover to Agent",
      "endCall": "End Call"
    },
    "transcript": {
      "heading": "Live Transcript (AI)",
      "speaker": {
        "customer": "Customer",
        "bot": "AI Bot",
        "agent": "Agent",
        "system": "System"
      }
    }
  },
  "navShell": {
    "skipToContent": "Skip to content",
    "toggleNav": "Toggle navigation",
    "primaryNav": "Primary",
    "unreadNotifications": "Notifications: {{count}} unread",
    "search": {
      "label": "Search",
      "placeholder": "Search conversations, contacts, flows…"
    },
    "account": {
      "menuLabel": "Account menu",
      "profile": "Profile",
      "settings": "Settings",
      "signOut": "Sign out"
    },
    "groups": {
      "main": "Main",
      "engage": "Engage",
      "grow": "Grow",
      "manage": "Manage"
    },
    "items": {
      "dashboard": "Dashboard",
      "conversations": "Conversations",
      "liveAgents": "Live Agents",
      "liveFeed": "Live Feed",
      "history": "History",
      "teamTools": "Team Tools",
      "flows": "Flow Builder",
      "broadcasts": "Broadcasts",
      "templates": "Templates",
      "content": "Content",
      "audience": "Audience",
      "analytics": "Analytics",
      "commerce": "Commerce",
      "users": "Users",
      "agentGroups": "Agent Groups",
      "settings": "Settings",
      "developerPortal": "Developer Portal",
      "aiBuilder": "AI Builder",
      "flowsList": "Guided Flows",
      "flowInsights": "Flow Insights",
      "flowVariables": "Variables",
      "gettingStarted": "Getting Started",
      "voiceEngine": "Voice Engine",
      "liveOps": "Operations",
      "voiceCall": "Voice Call",
      "analyticsOverview": "Overview",
      "sentimentChurn": "Sentiment & Churn",
      "emotionAi": "Emotion AI",
      "channels": "Channels",
      "channelCatalogue": "All Channels",
      "whatsappGroups": "WhatsApp Groups",
      "webWidget": "Web Widget",
      "marketing": "Marketing",
      "reportInsights": "Insights",
      "reportBuilder": "Report Builder",
      "commercial": "Commercial",
      "platform": "Platform",
      "compliance": "Compliance",
      "sourceLibrary": "Source Library",
      "ragEngine": "RAG Engine",
      "audienceIntel": "Intelligence",
      "contactsDirectory": "Contacts",
      "contactLists": "Contact Lists",
      "telco": "Telco & White Label",
      "localization": "Localization",
      "sdk": "SDKs & APIs",
      "agentWorkspace": "Agent Workspace",
      "flowResponses": "Flow Responses",
      "contentElements": "Content Elements",
      "commercePayments": "Payments",
      "commerceOrders": "Catalog Orders",
      "commerceRecharge": "Prepaid Recharge",
      "workspaceSettings": "Workspace",
      "auditLog": "Audit Log",
      "governance": "Governance",
      "business": "Business",
      "aiAgent": "AI Agent"
    },
    "collapseNav": "Collapse sidebar",
    "expandNav": "Expand sidebar",
    "back": "Back",
    "backHint": "Return to the previous screen",
    "brandHome": "UnifiedAI — go to Dashboard",
    "version": "Version {{version}}",
    "tooltips": {
      "dashboard": "An overview of your key metrics — active conversations, audience size, content elements and message volume. Start here to monitor performance and act on what needs attention.",
      "conversations": "Every conversation surface in one place: the live agent console, the real-time activity feed, and the searchable history of past conversations.",
      "liveFeed": "Watch conversations as they happen. Live counts for open, queued and unassigned work, plus a running stream of handovers, escalations and resolutions.",
      "history": "Search past conversations by user, session or unanswered question. Read the full transcript, then re-engage with a template or broadcast.",
      "teamTools": "Canned responses your team can reuse, and a leaderboard of agent performance — CSAT, handling time and first response.",
      "liveAgents": "See which human agents are online, what they are handling, and how work is queued. Take over a conversation from the AI agent when a person is needed.",
      "flows": "Build and edit guided conversation flows on the canvas. Branch on user input, call out to your systems, and hand off to a live agent.",
      "broadcasts": "Send a message to your whole audience or a chosen segment. Use broadcasts for announcements, promotions and time-critical updates.",
      "templates": "Create and manage the pre-approved message templates each channel requires, including WhatsApp and LINE, and track their approval status.",
      "content": "Manage the knowledge your AI agent answers from — documents, conversational elements, quick replies and rich content across every channel.",
      "audience": "Manage and view your user base. Search contacts, inspect identifiers and last-seen activity, filter by subscription status, and build contact lists from a CSV upload.",
      "analytics": "Generate detailed reports on system activity, user interactions and overall performance. Use them to analyse trends and make data-driven decisions.",
      "commerce": "View and manage payment details for catalog orders. Track each order's payment status, total and products for full visibility into user transactions.",
      "users": "Manage the people who can sign in to this workspace. Invite users, set their roles, and review what each role is permitted to do.",
      "agentGroups": "Organise your agents into groups by role and responsibility, so conversations route to the right team and agents can collaborate.",
      "settings": "Configure the workspace — channels, branding, business hours, integrations and account preferences.",
      "developerPortal": "API keys, webhooks and an explorer for testing endpoints. Everything needed to integrate this workspace with your own systems.",
      "aiBuilder": "Configure the cognitive core: which model engines serve traffic, the guardrails every reply passes through, each agent’s knowledge, confidence floor and handover rules, and the append-only trail of what agents decided.",
      "flowsList": "Every guided flow in the workspace, with its completion rate and where people drop out. Open one to edit it on the canvas.",
      "flowInsights": "Scorecards, the drop-off heatmap, intent-to-outcome mapping and diagnosed breakpoints — the four ways to find out which node to go and fix.",
      "flowVariables": "Values that travel between flows. See which flow writes each one, which flows read it, and what a handover carries.",
      "gettingStarted": "The launch checklist, short screen-by-screen guides, and the demo library. Start here on day one.",
      "voiceEngine": "The transcription queue and which speech provider serves each language, the classifier that routes fraud and cancellation calls past the bot, your brand voice, and what video is still waiting on.",
      "liveOps": "One queue across every channel, how work is shared between agents, and what a customer sees while a handover happens.",
      "voiceCall": "The live WhatsApp voice call: transcript, running sentiment, and handover from the AI to a person.",
      "analyticsOverview": "Conversation volume, resolution and channel performance across the workspace.",
      "sentimentChurn": "Where sentiment is heading and which customers are at risk of leaving.",
      "emotionAi": "What the profiler scores, when a conversation escalates, how urgency is decided, what is remembered across channels, and where the intent map turns unhappy.",
      "channels": "Every channel the workspace can reach people on: what each one carries, how it connects, how delivery fails over, and how one person’s threads become one thread.",
      "channelCatalogue": "The capability matrix — rich media, templates, buttons, groups, voice and the service window, per channel.",
      "whatsappGroups": "Groups the workspace runs: membership, how people join, and whether the bot may post where everyone can read it.",
      "webWidget": "The embed snippet, which domains are actually loading it, and how the widget behaves for a visitor.",
      "marketing": "Multi-step sequences, where conversions actually came from, which buttons and copy earn their place, and A/B tests that are only called when the numbers separate.",
      "reportInsights": "What happens next and what to do about it: volume and failure forecasts, first-contact resolution, AI agent load, scored leads and the digests that go out by email.",
      "reportBuilder": "Build a report nobody wrote a tab for, schedule it, and read retention cohorts and funnels.",
      "commercial": "Invoices that go through the CRM before Xero, a pricing calculator built on numbers a customer can check, what partners are owed, and what users say about the product.",
      "platform": "The engineering standards and how well the codebase follows them, the gates every change passes, throughput against the committed floor, and the resilience posture with its evidence.",
      "compliance": "What is certified today and what is not, availability measured against the error budget, where data can live, and how long each kind of record is kept.",
      "sourceLibrary": "The documents and sites the agents answer from, with gap detection and the approval workflow.",
      "ragEngine": "How a document becomes a retrievable chunk, where the vectors live, which live systems can be queried, and whether a source is still worth trusting.",
      "audienceIntel": "What the platform learns about people and what it does with it: progressive profiling, lookalikes, event streams and CRM sync, next-best actions, and one timeline per person.",
      "contactsDirectory": "Every contact, with consent, attributes, duplicate review and the segment builder.",
      "contactLists": "CSV audiences for broadcasts, kept separate from the CRM directory.",
      "telco": "The abstraction layers a carrier builds on, what the white label covers, self-service provisioning, and the OSS/BSS contract.",
      "localization": "Which languages answer automatically and which route to a person, bilingual flow coverage, right-to-left support, and local number and date formats.",
      "sdk": "The handover API and its gotchas, generated specs and collections, the event stream, and the extension points partners can build on.",
      "agentWorkspace": "Everything an agent's shift needs: the canned-response library and leaderboard, the cross-channel queue and workload balancer, the live voice call, and the voice platform behind it.",
      "flowResponses": "What people actually answered inside a guided flow or a WhatsApp Flow. Read one person's submission, or export the whole set.",
      "contentElements": "The questions your agent can answer, their variants, and the response each one sends. Wire an element to a guided flow or a WhatsApp Flow here.",
      "commercePayments": "Payment links and their status, from the live agent console and from a flow's end response.",
      "commerceOrders": "Orders placed through the WhatsApp store, with transaction status and the products in each one.",
      "commerceRecharge": "The prepaid wallet that funds WhatsApp broadcasts: ledger, current balance and the usage that drew it down.",
      "workspaceSettings": "The workspace itself — general preferences, channel connections, the assistant's persona, security and billing.",
      "auditLog": "Who changed what, and when, across templates, broadcasts, users and content.",
      "governance": "What an enterprise security review asks for: certifications and availability against the error budget, plus the engineering standards and capacity behind them.",
      "business": "The commercial build: invoicing, pricing and partner revenue, and the carrier or BSP white label.",
      "aiAgent": "Open your assistant on any channel, or copy its public link"
    }
  },
  "conversations": {
    "buckets": {
      "label": "Your conversations",
      "active": "Active",
      "reengage": "Re-Engage",
      "not-engaged": "Not-Engaged",
      "newMessages": "New message",
      "reengageNote": "Chats you disengaged from. They stay yours for 24 hours — open one to pick it back up.",
      "notEngagedNote": "Nobody answered these inside the 2-minute window. Open one to take it."
    },
    "queue": {
      "heading": "Queue (Live)",
      "empty": "No one is waiting. New engagement requests land here.",
      "engage": "Engage",
      "expiring": "{{count}} about to fall through",
      "fallsThrough": "Falls through to Not-Engaged in {{seconds}}s",
      "routedTo": "Routed to {{name}}",
      "fromBot": "From bot",
      "suggest": "Suggest Generative AI response",
      "suggestHint": "Picking one fills your composer. Nothing is sent until you send it."
    },
    "transfer": {
      "action": "Transfer",
      "heading": "Transfer to an online agent",
      "chats": "{{count}} active",
      "noneOnline": "No agent is online right now.",
      "offline": "{{name}} is offline",
      "nowWith": "now with {{name}}"
    },
    "listLabel": "Conversations",
    "threadLabel": "Conversation thread",
    "searchPlaceholder": "Search conversations…",
    "group": "Group",
    "unreadLabel": "Unread",
    "noResults": "No conversations match your search.",
    "backToList": "Back to conversations",
    "presence": {
      "label": "Your status",
      "active": "Active",
      "away": "Away",
      "inactive": "Inactive"
    },
    "engagement": {
      "engaged": "Engaged",
      "botHandled": "Bot-handled",
      "disengaged": "Disengaged",
      "reassigned": "Reassigned",
      "autoDisengaged": "Auto-disengaged"
    },
    "thread": {
      "online": "Online",
      "acceptFromBot": "Accept from bot",
      "disengage": "Disengage to bot",
      "reassign": "Reassign",
      "close": "Close",
      "reopen": "Reopen",
      "voiceCall": "Start voice call",
      "attach": "Attach file",
      "quickReply": "Quick reply",
      "template": "Template",
      "composerPlaceholder": "Type a message…",
      "send": "Send",
      "failed": "Failed",
      "quotedReplyTo": "Replying to {{name}}",
      "reactedBy": "Reacted by {{name}} · {{when}}",
      "quoteType": {
        "text": "Text",
        "image": "Photo",
        "video": "Video",
        "audio": "Audio",
        "document": "Document",
        "contact": "Contact",
        "location": "Location"
      },
      "delivery": {
        "pending": "Pending",
        "sent": "Sent",
        "delivered": "Delivered",
        "read": "Read",
        "failed": "Failed"
      },
      "modeLabel": "What this message is",
      "modeReply": "Reply to customer",
      "modeNote": "Internal note",
      "notePlaceholder": "Note for the team — the customer never sees this",
      "saveNote": "Save note"
    },
    "ai": {
      "heading": "AI Assist",
      "togglePanel": "Toggle AI Assist panel",
      "suggestedReply": "Suggested reply",
      "useReply": "Use this reply",
      "customer": "Customer",
      "customerSince": "Customer since {{date}}",
      "sentiment": "Sentiment",
      "summary": "Conversation summary",
      "keyOverview": "Key overview",
      "userIntent": "User intent",
      "issueIdentified": "Issue identified",
      "resolutionStatus": "Resolution status",
      "sentimentValue": {
        "Positive": "Positive",
        "Neutral": "Neutral",
        "Negative": "Negative"
      }
    },
    "notes": {
      "heading": "Internal notes",
      "empty": "No notes on this conversation yet.",
      "notified": "Notified:",
      "hint": "Notes stay inside the workspace. Use @name to put one in a colleague’s queue."
    },
    "payment": {
      "action": "Payment link",
      "heading": "Send a payment link",
      "amount": "Amount",
      "currency": "Currency",
      "note": "What it is for",
      "notePlaceholder": "Deposit for booking #4821",
      "send": "Send link to customer"
    }
  },
  "dashboard": {
    "title": "Dashboard",
    "liveActivity": "Live Activity",
    "stats": {
      "activeAgents": "Active Agents",
      "openConversations": "Open Conversations",
      "inQueue": "In Queue",
      "avgResponse": "Avg Response",
      "teamCsat": "Team CSAT"
    },
    "activity": {
      "agent": "Agent: {{name}}",
      "agentNone": "Agent: —",
      "rowLabel": "Open conversation with {{name}}",
      "status": {
        "engaged": "Engaged",
        "waiting": "Waiting",
        "escalated": "Escalated"
      }
    },
    "openLiveFeed": "Open Live Feed",
    "charts": {
      "sessionsWeek": "Sessions this week",
      "byChannel": "Sessions by channel"
    },
    "standardReply": {
      "title": "Standard reply",
      "on": "On",
      "off": "Off",
      "onDesc": "Every incoming message is getting this one reply. The AI agent and your live agents are both bypassed.",
      "offDesc": "Messages are answered by the AI agent, or handed to a live agent. Turn this on to reply to everyone with a single fixed message.",
      "turnOn": "Turn on",
      "turnOff": "Turn off",
      "edit": "Edit message"
    },
    "quick": {
      "label": "Create something",
      "newQuestion": "Create a new question",
      "newTemplate": "Create new template",
      "newContactList": "Create contact list",
      "scheduleBroadcast": "Schedule broadcast",
      "newFlow": "Create guided flow",
      "addChannel": "Add a channel"
    }
  },
  "reports": {
    "title": "Analytics",
    "tabsLabel": "Analytics sections",
    "range": {
      "label": "Date range",
      "7d": "Last 7 days",
      "30d": "Last 30 days",
      "90d": "Last 90 days",
      "ytd": "This year"
    },
    "export": {
      "label": "Export",
      "pdf": "PDF",
      "csv": "CSV"
    },
    "tab": {
      "overview": "Overview",
      "conversations": "Conversations",
      "agents": "Agents",
      "flows": "Flows",
      "channels": "Channels",
      "usage": "Usage"
    },
    "channelName": {
      "whatsapp": "WhatsApp",
      "instagram": "Instagram",
      "webchat": "Webchat",
      "email": "Email",
      "sms": "SMS"
    },
    "day": {
      "mon": "Mon",
      "tue": "Tue",
      "wed": "Wed",
      "thu": "Thu",
      "fri": "Fri",
      "sat": "Sat",
      "sun": "Sun"
    },
    "overview": {
      "tile": {
        "conversations": "Conversations",
        "avgSentiment": "Avg Sentiment",
        "resolutionRate": "Resolution Rate",
        "aiResolution": "AI Resolution"
      },
      "volumeByChannel": "Volume by Channel",
      "volumeCaption": "{{channel}} leads at {{pct}}",
      "sentimentTrend": "Sentiment Trend (30d)",
      "sentimentCaption": "Trending up {{delta}}",
      "exportTitle": "Conversation report",
      "exportRows": "Messages in range",
      "exportSize": "Estimated file size",
      "exportRange": "Range",
      "exportAction": "Download CSV"
    },
    "conversations": {
      "tile": {
        "total": "Total",
        "open": "Open",
        "resolved": "Resolved",
        "avgFirstResponse": "Avg first response",
        "avgResolution": "Avg resolution"
      },
      "volumeOverTime": "Volume over time",
      "byType": "By type",
      "byStatus": "By status",
      "type": {
        "support": "Support",
        "sales": "Sales",
        "billing": "Billing",
        "feedback": "Feedback"
      },
      "status": {
        "open": "Open",
        "pending": "Pending",
        "resolved": "Resolved",
        "escalated": "Escalated"
      }
    },
    "agents": {
      "leaderboard": "Agent leaderboard",
      "col": {
        "agent": "Agent",
        "chatsHandled": "Chats handled",
        "avgHandle": "Avg handle",
        "csat": "CSAT",
        "firstResponse": "First response"
      },
      "chatsPerDay": "Chats per day",
      "csatByAgent": "CSAT by agent",
      "csatBands": "CSAT bands: green ≥ 70 · amber 40–69 · red < 40",
      "hoursLoggedIn": "Hours logged in per agent",
      "hoursCaption": "Daily average across the selected range.",
      "activeChatCount": "Active chats right now",
      "activeChatCaption": "A live snapshot, not a total for the range. The balancer caps each agent at {{cap}}.",
      "categoryCount": "Categories assigned by agents",
      "trendingArticles": "Trending articles"
    },
    "flows": {
      "tile": {
        "activeFlows": "Active flows",
        "totalRuns": "Total runs",
        "avgCompletion": "Avg completion"
      },
      "completionByFlow": "Completion rate by flow",
      "dropOff": "Drop-off funnel",
      "dropOffCaption": "53% of users drop before the end step",
      "step": {
        "start": "Start",
        "greeting": "Greeting",
        "intent": "Intent captured",
        "details": "Details provided",
        "confirm": "Confirmation",
        "end": "End"
      },
      "insightsTitle": "Per-node flow insights",
      "insightsDesc": "Drop-off heatmaps, intent-to-outcome mapping and diagnosed breakpoints — which node to go and fix.",
      "insightsOpen": "Open Flow Insights",
      "nodesPerFlow": "Nodes per flow",
      "nodesCaption": "{{name}} is the largest flow at {{nodes}} nodes — big flows are slow to change and easy to break.",
      "apiUsageInFlow": "API usage in flows"
    },
    "channels": {
      "volumeSplit": "Volume split",
      "deliveryRate": "Delivery rate by channel",
      "avgResponseTime": "Avg response time by channel",
      "usernameAdoption": "WhatsApp username adoption",
      "byPhone": "Started from the phone number",
      "byUsername": "Started from the username",
      "usernameCaption": "Usernames now open {{share}} of WhatsApp conversations, {{delta}} across this range."
    },
    "customise": {
      "label": "Customise",
      "hint": "Untick to hide a graph. Drag, or use the arrows, to reorder this tab.",
      "reset": "Reset to default order",
      "moveUp": "Move up",
      "moveDown": "Move down"
    },
    "usage": {
      "mindspace": "AGI mindspace usage",
      "mindspaceCaption": "Units consumed per day by generative replies and summaries.",
      "broadcastsPerDay": "Broadcasts sent per day",
      "templateStats": "Template statistics",
      "apiUsageInVariables": "API usage in variables",
      "apiVariablesCaption": "Calls made resolving variables while composing a reply. Each one adds latency to the answer.",
      "tile": {
        "mindspace": "Mindspace units",
        "broadcasts": "Broadcasts sent",
        "templatesSent": "Template messages",
        "apiCalls": "Variable API calls"
      },
      "col": {
        "template": "Template",
        "category": "Category",
        "sent": "Sent",
        "delivered": "Delivered",
        "read": "Read",
        "readRate": "Read rate"
      }
    }
  },
  "listPattern": {
    "searchLabel": "Search",
    "statusFilterLabel": "Filter by status",
    "actionsColumn": "Actions",
    "rowActionLabel": "View details",
    "view": "View",
    "retry": "Retry",
    "empty": "No results match your filters.",
    "pageInfo": "Showing {{from}}–{{to}} of {{total}}",
    "pagination": "Pagination",
    "previousPage": "Previous page",
    "nextPage": "Next page",
    "goToPage": "Go to page {{page}}"
  },
  "commerce": {
    "payments": {
      "srTitle": "Commerce — Payments",
      "searchPlaceholder": "Search transactions…",
      "dateRange": "Last 30 days",
      "stats": {
        "revenue": "Revenue",
        "successful": "Successful",
        "failed": "Failed"
      },
      "col": {
        "transaction": "Transaction",
        "status": "Status",
        "amount": "Amount",
        "date": "Date"
      },
      "filter": {
        "all": "All",
        "processed": "Processed",
        "pending": "Pending",
        "failed": "Failed"
      },
      "detail": {
        "heading": "Payment detail",
        "close": "Close panel",
        "reference": "Reference",
        "customer": "Customer",
        "status": "Status",
        "amount": "Amount",
        "date": "Date",
        "method": "Method",
        "gateway": "Gateway",
        "history": "Payment history for {{name}}",
        "showMore": "Show more",
        "showLess": "Show less",
        "empty": "No earlier payments for this customer."
      }
    },
    "orders": {
      "srTitle": "Commerce — Catalog Orders",
      "searchPlaceholder": "Search orders…",
      "dateRange": "Last 30 days",
      "exportCsv": "Export CSV",
      "itemCount": "{{count}} items",
      "stats": {
        "total": "Total Orders",
        "fulfilled": "Fulfilled",
        "unfulfilled": "Unfulfilled"
      },
      "col": {
        "order": "Order",
        "items": "Items",
        "total": "Total",
        "status": "Status",
        "date": "Date"
      },
      "filter": {
        "all": "All",
        "pending": "Pending",
        "fulfilled": "Fulfilled",
        "failed": "Failed"
      },
      "detail": {
        "heading": "Order detail",
        "close": "Close panel",
        "reference": "Reference",
        "customer": "Customer",
        "status": "Status",
        "total": "Total",
        "date": "Date",
        "channel": "Channel",
        "lineItems": "Line items",
        "colItem": "Item",
        "colQty": "Qty",
        "colUnitPrice": "Unit price",
        "colLineTotal": "Line total",
        "deliveryNote": "Delivery note"
      }
    },
    "recharge": {
      "srTitle": "Commerce — Prepaid Recharge",
      "searchPlaceholder": "Search transactions…",
      "walletCard": {
        "label": "Wallet Balance",
        "caption": "Derived from ledger — reconciled"
      },
      "col": {
        "transaction": "Transaction",
        "type": "Type",
        "amount": "Amount",
        "balanceAfter": "Balance After",
        "date": "Date"
      },
      "filter": {
        "all": "All",
        "credit": "Credit",
        "debit": "Debit"
      },
      "dateFilter": {
        "label": "Date range",
        "7d": "Last 7 days",
        "30d": "Last 30 days",
        "90d": "Last 90 days",
        "all": "All time"
      }
    }
  },
  "broadcasts": {
    "srTitle": "Broadcasts",
    "newBroadcast": "New Broadcast",
    "searchPlaceholder": "Search broadcasts…",
    "stats": {
      "sent": "Broadcasts Sent",
      "recipients": "Total Recipients",
      "deliveryRate": "Avg Delivery Rate"
    },
    "col": {
      "name": "Name",
      "channel": "Channel",
      "status": "Status",
      "recipients": "Recipients",
      "schedule": "Schedule"
    },
    "filter": {
      "all": "All",
      "scheduled": "Scheduled",
      "sent": "Sent",
      "failed": "Failed"
    },
    "report": {
      "heading": "Delivery report",
      "close": "Close panel",
      "name": "Name",
      "channel": "Channel",
      "status": "Status",
      "recipients": "Recipients",
      "pending": "This broadcast hasn't been sent yet — delivery data appears once it runs.",
      "barLabel": "Delivery outcome breakdown",
      "sent": "Sent",
      "delivered": "Delivered",
      "read": "Read",
      "replied": "Replied",
      "failed": "Failed",
      "errorsHeading": "Recipients with errors",
      "noErrors": "No delivery errors for this broadcast."
    }
  },
  "tabs": {
    "label": "Tabs"
  },
  "templates": {
    "title": "Templates",
    "newTemplate": "New Template",
    "searchPlaceholder": "Search templates…",
    "tablistLabel": "Template channels",
    "channel": {
      "whatsapp": "WhatsApp",
      "nexus": "Nexus",
      "line": "LINE",
      "facebook": "Facebook Messenger"
    },
    "col": {
      "name": "Name",
      "category": "Category",
      "language": "Language",
      "status": "Status",
      "created": "Created"
    },
    "filter": {
      "all": "All",
      "approved": "Approved",
      "pending": "Pending",
      "rejected": "Rejected"
    },
    "nexus": {
      "title": "Nexus isn't connected",
      "body": "Connect Nexus to create and manage templates for it.",
      "cta": "Go to Channel settings"
    },
    "preview": {
      "heading": "Template preview",
      "close": "Close panel",
      "mediaHeader": "[media]",
      "delete": "Delete template",
      "meta": {
        "waba": "WABA account",
        "language": "Language",
        "category": "Category",
        "created": "Created"
      }
    },
    "deleteDialog": {
      "title": "Delete this template?",
      "body": "This template is used in {{count}} active broadcast(s). Deleting it may break scheduled sends.",
      "confirm": "Delete template",
      "cancel": "Cancel"
    },
    "editAction": "Edit template"
  },
  "templateEditor": {
    "tablistLabel": "Template channel",
    "emojiStrip": "Insert emoji",
    "title": {
      "create": "New template",
      "edit": "Edit template"
    },
    "action": {
      "submit": "Submit for approval",
      "cancel": "Cancel",
      "uploadSample": "Upload sample",
      "addVariable": "+ Add variable",
      "addButton": "Add button",
      "removeButton": "Remove button"
    },
    "field": {
      "waba": "WABA account",
      "name": "Name",
      "category": "Category",
      "language": "Language",
      "header": "Header",
      "headerText": "Header text",
      "body": "Body",
      "footer": "Footer",
      "buttons": "Buttons",
      "otp": "OTP type",
      "expiry": "Code expiry (minutes)",
      "elementType": "Element type",
      "cardTitle": "Card title",
      "cardSubtitle": "Card subtitle",
      "cardImageUrl": "Card image URL"
    },
    "hint": {
      "name": "Lowercase letters, numbers and underscores only — no spaces."
    },
    "category": {
      "Utility": "Utility",
      "Marketing": "Marketing",
      "Authentication": "Authentication"
    },
    "header": {
      "none": "None",
      "text": "Text",
      "media": "Media"
    },
    "otp": {
      "copyCode": "Copy code",
      "oneTap": "One-tap"
    },
    "btnType": {
      "quickReply": "Quick reply",
      "url": "Visit website",
      "phone": "Call phone",
      "flow": "Flow"
    },
    "line": {
      "elBtn": "Button",
      "elCarousel": "Carousel",
      "elImageCarousel": "Image carousel",
      "elCardMenu": "Card menu"
    },
    "placeholder": {
      "buttonText": "Button text"
    },
    "err": {
      "formInvalid": "Fix the highlighted fields before submitting for approval.",
      "nameRequired": "Name is required.",
      "nameFormat": "Use lowercase letters, numbers and underscores only — no spaces.",
      "nameLength": "Name must be 512 characters or fewer.",
      "btnMax": "A template can have at most 10 buttons.",
      "btnUrlMax": "At most 2 website buttons are allowed.",
      "btnPhoneMax": "Only 1 call button is allowed.",
      "btnFlowMax": "At most 2 Flow buttons are allowed."
    },
    "preview": {
      "label": "Live preview",
      "chatName": "UnifiedAI Business",
      "media": "[media]",
      "buttonFallback": "Button"
    }
  },
  "users": {
    "title": "Users & Permissions",
    "invite": {
      "label": "Invite User",
      "full": "{{role}} seats full"
    },
    "seat": {
      "summaryLabel": "Seat usage by role",
      "count": "{{used}}/{{limit}}"
    },
    "role": {
      "admin": "Admin",
      "supervisor": "Supervisor",
      "agent": "Agent",
      "developer": "Developer"
    },
    "status": {
      "active": "Active",
      "away": "Away",
      "inactive": "Inactive",
      "pending": "Pending invite"
    },
    "members": {
      "heading": "Team Members",
      "searchPlaceholder": "Search by name or email…",
      "roleFilterLabel": "Filter by role",
      "roleFilterAll": "All roles",
      "editPermissions": "Edit permissions",
      "secondary": "{{chats}} active chats · CSAT {{csat}}",
      "empty": "No team members match your filters.",
      "avatarAlt": "{{name}} avatar"
    },
    "pagination": {
      "label": "Team members pagination",
      "previous": "Previous",
      "next": "Next",
      "page": "Page {{page}} of {{total}}"
    },
    "detail": {
      "heading": "Member details",
      "close": "Close panel",
      "role": "Role",
      "status": "Status",
      "agentGroup": "Agent group",
      "activeChats": "Active chats",
      "csat": "CSAT",
      "memberSince": "Member since",
      "edit": "Edit",
      "delete": "Delete",
      "deleteSelfHint": "You can't delete your own account.",
      "resendInvite": "Resend invite",
      "resendSent": "Invitation re-sent."
    },
    "edit": {
      "name": "Name",
      "email": "Email",
      "emailReadonly": "Email can't be changed after the invite is sent.",
      "role": "Role",
      "agentGroup": "Agent group",
      "save": "Save changes",
      "cancel": "Cancel"
    },
    "deleteDialog": {
      "title": "Remove this member?",
      "body": "{{name}} will lose access to this workspace. Their conversation history is kept.",
      "confirm": "Remove member",
      "cancel": "Cancel"
    },
    "rbac": {
      "heading": "Role Permission Matrix",
      "intro": "This matrix is the single source of truth for what each role can do.",
      "permissionColumn": "Permission",
      "adminLocked": "Admin always has full access",
      "toggleLabel": "{{permission}} for {{role}}",
      "perm": {
        "manageUsersBilling": "Manage Users & Billing",
        "manageSettings": "Manage Settings",
        "viewAnalytics": "View Analytics",
        "manageFlowsContent": "Manage Flows & Content",
        "handleConversations": "Handle Conversations",
        "accessDevApiKeys": "Access Dev/API Keys"
      }
    }
  },
  "userCreate": {
    "title": "Invite a user",
    "name": {
      "label": "Name",
      "placeholder": "Jane Cooper"
    },
    "email": {
      "label": "Email",
      "placeholder": "jane@company.com"
    },
    "phone": {
      "label": "Phone",
      "placeholder": "919876543210",
      "hint": "Optional. Digits only — include the country code."
    },
    "role": {
      "label": "Role"
    },
    "agentGroup": {
      "label": "Agent group",
      "none": "— None —"
    },
    "seat": {
      "summaryLabel": "Seat usage by role",
      "count": "{{used}}/{{limit}}",
      "full": "{{role}} seats are full ({{used}}/{{limit}})"
    },
    "submit": "Send invite",
    "cancel": "Cancel",
    "err": {
      "nameRequired": "Enter a name.",
      "emailRequired": "Enter an email address.",
      "emailInvalid": "Enter a valid email address."
    }
  },
  "screenPlaceholder": {
    "notBuilt": {
      "title": "This screen has not been built yet"
    },
    "notDesigned": {
      "title": "Not yet designed",
      "body": "Pending product decision.",
      "badge": "Awaiting design"
    }
  },
  "statePlaceholder": {
    "empty": {
      "title": "No results yet",
      "message": "Data will appear here once available.",
      "action": "Create new"
    },
    "error": {
      "title": "Something went wrong",
      "message": "We couldn't load this. Check your connection and try again.",
      "action": "Retry"
    },
    "loading": {
      "title": "Loading…",
      "message": "This should only take a moment."
    },
    "forbidden": {
      "title": "You don't have access",
      "message": "Ask your workspace admin to grant permission for this section.",
      "action": "Request access"
    }
  },
  "agentGroups": {
    "title": "Agent Groups & Routing",
    "newGroup": "New group",
    "groups": {
      "heading": "Agent Groups"
    },
    "card": {
      "members": "{{count}} members",
      "avgHandle": "Avg handle: {{time}}"
    },
    "presence": {
      "online": "{{count}} online",
      "away": "{{count}} away",
      "offline": "{{count}} offline",
      "state": {
        "online": "Online",
        "away": "Away",
        "offline": "Offline"
      }
    },
    "role": {
      "admin": "Admin",
      "supervisor": "Supervisor",
      "agent": "Agent",
      "developer": "Developer"
    },
    "shift": {
      "any": "Any",
      "business": "Business hrs",
      "night": "Night shift"
    },
    "priority": {
      "high": "High",
      "medium": "Medium",
      "low": "Low"
    },
    "status": {
      "active": "Active",
      "paused": "Paused"
    },
    "rules": {
      "heading": "Routing Rules",
      "add": "Add routing rule",
      "edit": "Edit",
      "onCall": "(on-call)",
      "precedenceHint": "Rules evaluate top to bottom; first match wins.",
      "dragHint": "Drag to reorder (visual only in this prototype)",
      "reorderColumn": "Reorder",
      "col": {
        "condition": "Condition",
        "group": "Assigned Group",
        "shift": "Shift",
        "priority": "Priority",
        "status": "Status",
        "actions": "Actions"
      }
    },
    "detail": {
      "heading": "Group details",
      "close": "Close panel",
      "nameLabel": "Group name",
      "renameLabel": "Rename group",
      "membersHeading": "Members",
      "addMemberLabel": "Add a member to this group",
      "addMemberPlaceholder": "Select an agent…",
      "addMemberButton": "Add",
      "removeMemberLabel": "Remove {{name}} from this group",
      "noMembers": "No members yet. Add one above.",
      "metricsHeading": "Group metrics",
      "metricsBody": "Per-group CSAT, volume and SLA dashboards are coming in a later phase.",
      "delete": "Delete group",
      "cancel": "Cancel",
      "save": "Save"
    },
    "create": {
      "heading": "New group",
      "nameLabel": "Group name",
      "namePlaceholder": "e.g. Support Team",
      "nameHint": "No length limit — long names are truncated with a tooltip.",
      "membersNote": "You can add members after the group is created.",
      "submit": "Create group"
    },
    "ruleEditor": {
      "addHeading": "Add routing rule",
      "editHeading": "Edit routing rule",
      "condition": "Condition",
      "conditionPlaceholder": "e.g. VIP segment (tier=Gold)",
      "group": "Assigned group",
      "shift": "Shift",
      "priority": "Priority",
      "active": "Rule is active",
      "save": "Save rule"
    },
    "deleteDialog": {
      "title": "Delete “{{name}}”?",
      "body": "This group has {{members}} members and {{rules}} active routing rules. Removing it will unassign them.",
      "cancel": "Cancel",
      "confirm": "Delete group"
    }
  },
  "contacts": {
    "title": "Audience",
    "import": {
      "button": "Import contacts",
      "heading": "Import contacts",
      "close": "Close import panel",
      "filePickerLabel": "CSV file",
      "filePickerHint": "The legacy contact-list CSV manager is broadcast-adjacent (contact-list manager). Import is disabled in this prototype.",
      "sampleCsv": "Download sample CSV",
      "upload": "Upload",
      "note": "Static prototype — file selection and upload are disabled."
    },
    "duplicates": {
      "banner": "{{count}} possible duplicate contacts found",
      "review": "Review",
      "dismiss": "Dismiss",
      "heading": "Review possible duplicates",
      "close": "Close merge panel",
      "subhead": "These records share a phone number or email address.",
      "keepLeft": "Keep left",
      "keepRight": "Keep right",
      "merge": "Merge",
      "note": "Static prototype — merge is not applied. Closes phase3 MISSING finding “Duplicate Contact Merge/Dedup”.",
      "fieldName": "Name",
      "fieldPhone": "Phone",
      "fieldChannel": "Channel",
      "fieldTags": "Tags",
      "fieldLastContact": "Last contact"
    },
    "list": {
      "searchPlaceholder": "Search contacts…"
    },
    "filter": {
      "all": "All",
      "subscribed": "Subscribed",
      "unsubscribed": "Unsubscribed",
      "blocked": "Blocked"
    },
    "col": {
      "name": "Name",
      "phone": "Phone",
      "channel": "Channel",
      "tags": "Tags",
      "lastContact": "Last Contact"
    },
    "channel": {
      "whatsapp": "WhatsApp",
      "instagram": "Instagram",
      "sms": "SMS",
      "email": "Email",
      "webchat": "Web chat"
    },
    "detail": {
      "heading": "Contact",
      "tagsHeading": "Tags",
      "addTag": "Add tag",
      "addTagLabel": "New tag name",
      "addTagConfirm": "Add",
      "addTagCancel": "Cancel",
      "noTags": "No tags yet.",
      "consentHeading": "Consent & opt-out",
      "consentCaption": "One consent view — replaces 3 separately-tracked opt-out flags.",
      "consent": {
        "marketing": "Marketing",
        "conversation": "Conversations",
        "email": "Email",
        "subscribed": "Subscribed",
        "unsubscribed": "Unsubscribed",
        "open": "Not blocked",
        "blocked": "Blocked",
        "toggleLabel": "Toggle {{label}} consent"
      },
      "attributesHeading": "Attributes",
      "attributesNote": "From the contact profile's dynamic attribute slots (legacy UserDetail has 15).",
      "paymentsHeading": "Payment history",
      "showMore": "Show more",
      "showLess": "Show less",
      "noPayments": "No payments recorded.",
      "conversationHeading": "Conversation",
      "viewConversation": "View conversation"
    },
    "segments": {
      "new": "New segment",
      "heading": "New segment",
      "close": "Close segment builder",
      "intro": "Legacy had rich contact profiles but no way to build an audience segment. This is the basic builder (phase3 gap).",
      "attrLabel": "Attribute",
      "opLabel": "Operator",
      "valueLabel": "Value",
      "valuePlaceholder": "Value",
      "addCondition": "Add condition",
      "removeCondition": "Remove condition",
      "preview": "Preview",
      "previewResult": "≈ {{count}} contacts match",
      "save": "Save segment",
      "saveNote": "Static prototype — segment is not saved.",
      "attr": {
        "tag": "Tag",
        "channel": "Channel",
        "marketingConsent": "Marketing consent",
        "city": "City",
        "plan": "Plan",
        "lifetimeValue": "Lifetime value"
      },
      "op": {
        "is": "is",
        "isNot": "is not",
        "contains": "contains",
        "gt": "greater than",
        "lt": "less than"
      }
    }
  },
  "flows": {
    "title": "Guided Flows",
    "newFlow": "New flow",
    "enableRequiresPublished": "Publish a live version before enabling this flow",
    "searchPlaceholder": "Search flows or authors…",
    "language": {
      "label": "Language",
      "all": "All languages"
    },
    "col": {
      "name": "Name",
      "addedBy": "Added by",
      "consumed": "Consumed",
      "lastUsed": "Last used",
      "modified": "Modified",
      "status": "Status"
    },
    "filter": {
      "all": "All",
      "active": "Active",
      "inactive": "Inactive"
    },
    "analysis": {
      "heading": "AI Flow Analysis",
      "close": "Close analysis",
      "completion": "Completion rate",
      "dropOff": "Top drop-off",
      "body": "This flow has a {{rate}}% completion rate. Biggest drop-off: the \"{{dropOff}}\" step — roughly {{abandon}}% of users abandon here. Consider adding a \"skip / talk to an agent\" branch so they don't leave empty-handed.",
      "openCanvas": "Open in canvas"
    },
    "modal": {
      "title": "Create or import a flow",
      "close": "Close dialog",
      "tablistLabel": "Flow creation mode",
      "tab": {
        "manual": "Manual",
        "auto": "Auto-Generate (AI)"
      },
      "name": {
        "label": "Flow name",
        "placeholder": "e.g. Order status self-service",
        "error": "Enter a flow name to continue."
      },
      "language": {
        "label": "Language"
      },
      "csv": {
        "label": "Import from CSV",
        "pick": "Upload CSV",
        "sample": "Download sample",
        "hint": "Static prototype — file selection is disabled. Required columns: ID, Node Type, Label, Previous Message, Next Message, Position."
      },
      "description": {
        "label": "Describe the flow",
        "placeholder": "Describe what this flow should do, step by step. The AI drafts a starting graph you can refine on the canvas."
      },
      "pdf": {
        "hint": "Drop a PDF to extract requirements (disabled in this prototype)"
      },
      "enhance": "Enhance with AI",
      "cancel": "Cancel",
      "create": "Create flow",
      "outline": {
        "label": "Outline the AI would build",
        "hint": "Created as a draft on the canvas — every node is editable before you publish."
      }
    },
    "insightsLink": "Insights"
  },
  "flowCanvas": {
    "back": "Back to flows",
    "canvasLabel": "Flow graph canvas",
    "railToggle": "Panel",
    "workingVersion": "Working Version {{version}}",
    "actions": {
      "coPilot": "AI Agent",
      "preview": "Preview",
      "test": "Test",
      "saveVersion": "Save Version",
      "simulate": "Dry run"
    },
    "access": {
      "chip": "Access: {{roles}}",
      "title": "Edit access",
      "hint": "Local to this prototype — no permissions are enforced.",
      "role": "Role"
    },
    "versions": {
      "title": "Versions",
      "item": "Version {{version}}",
      "current": "current",
      "compare": "Compare 1.2 ↔ 1.3"
    },
    "diff": {
      "title": "Version diff — 1.2 ↔ 1.3",
      "close": "Close diff",
      "nodes": "+2 nodes added",
      "edge": "1 edge relabeled",
      "endpoint": "\"API: Get Order Status\" endpoint changed",
      "hint": "Static summary — a full side-by-side graph diff is a later phase."
    },
    "palette": {
      "heading": "Nodes",
      "hint": "Click a node type to add it near the centre of the canvas, then configure it here.",
      "slot_question": {
        "label": "Slot Question",
        "sub": "Capture a value into a variable"
      },
      "menu_question": {
        "label": "Menu Question",
        "sub": "Offer a list of choices"
      },
      "menu_item": {
        "label": "Menu Item",
        "sub": "A single choice under a menu"
      },
      "condition": {
        "label": "Condition",
        "sub": "Branch on an operator and value"
      },
      "conditional_response": {
        "label": "Conditional Response",
        "sub": "Reply based on a check"
      },
      "api_action": {
        "label": "API Action",
        "sub": "Call an external endpoint"
      },
      "end_response": {
        "label": "End Response",
        "sub": "Final message or handoff"
      }
    },
    "nodeType": {
      "root": "Start",
      "slot_question": "Slot Question",
      "menu_question": "Menu Question",
      "menu_item": "Menu Item",
      "condition": "Condition",
      "conditional_response": "Conditional Response",
      "api_action": "API Action",
      "end_response": "End Response"
    },
    "defaultLabel": {
      "slot_question": "New slot question",
      "menu_question": "New menu question",
      "menu_item": "New menu item",
      "condition": "New condition",
      "conditional_response": "New conditional response",
      "api_action": "New API action",
      "end_response": "New end response"
    },
    "config": {
      "heading": "Node",
      "close": "Close node config",
      "label": "Label",
      "message": "Message",
      "delete": "Delete node",
      "rootLocked": "The Start node cannot be deleted.",
      "menu": {
        "options": "Options",
        "add": "Add option",
        "remove": "Remove option",
        "newOption": "New option"
      },
      "slot": {
        "variable": "Variable name"
      },
      "api": {
        "endpoint": "Endpoint URL",
        "method": "Method"
      },
      "condition": {
        "operator": "Operator",
        "value": "Value",
        "attribute": "Branch on"
      },
      "end": {
        "template": "Send a template when the flow closes",
        "delay": "When to send it",
        "hint": "Once the session ends, only an approved template can reach the customer. This is the bridge from a flow into a campaign.",
        "target": "Hand off to"
      }
    },
    "copilot": {
      "title": "AI Flow Co-Pilot",
      "close": "Close Co-Pilot",
      "prompt": "Make this flow handle orders placed outside business hours.",
      "reply": "I've added an after-hours check before the API call, routing to a fallback response outside business hours.",
      "apply": "Apply",
      "applied": "Applied to canvas",
      "inputLabel": "Ask the Co-Pilot",
      "inputPlaceholder": "Describe a change… (disabled in this prototype)",
      "disclaimer": "Prototype — the Co-Pilot replies with one canned suggestion.",
      "nodeCheck": "After hours?",
      "nodeFallback": "Outside business hours",
      "edgeCheck": "check hours",
      "edgeAfterHours": "after hours"
    },
    "preview": {
      "title": "Preview",
      "close": "Close preview",
      "greeting": "Hi! I'm the Order Assistant. 👋"
    },
    "test": {
      "title": "Test run",
      "close": "Close test run",
      "subtitle": "Simulated traversal of the happy path.",
      "completed": "Flow completed"
    },
    "tips": {
      "coPilot": "Describe a change in plain English and the co-pilot drafts the nodes. Nothing is applied until you press Apply.",
      "preview": "See the conversation the way the customer sees it, without leaving the canvas.",
      "test": "Walk the graph from Start and check the path a happy-path run would take.",
      "simulate": "The full dry run: pick a sample dataset, see every step pass or fail, what the run would carry to the next flow, and any repair we can stage."
    },
    "nextStep": {
      "heading": "Suggested next",
      "hint": "What usually follows this node. Picking one adds it and connects it — hover to see why it is suggested."
    }
  },
  "content": {
    "title": "Content",
    "nav": {
      "label": "Content sections",
      "rag": "Knowledge Base (RAG)",
      "elements": "Content Elements",
      "flows": "Flow Builder",
      "developerPortal": "Developer Portal",
      "richMenu": "Rich Menu",
      "lineFlex": "Line Flex",
      "quickReply": "Quick Reply",
      "tags": "Tags",
      "whatsappFlows": "WhatsApp Flows"
    },
    "addSource": {
      "trigger": "Add Source",
      "title": "Add a knowledge source",
      "close": "Close dialog",
      "typeLabel": "Source type",
      "comingSoon": "Coming soon",
      "type": {
        "document": "Document",
        "website": "Website",
        "video": "Video",
        "structured": "Structured data"
      },
      "document": {
        "pick": "Choose a PDF",
        "note": "PDF only · 30MB max · 250 pages"
      },
      "website": {
        "label": "Website URL",
        "placeholder": "https://example.com/help"
      },
      "cancel": "Cancel",
      "add": "Add"
    },
    "rag": {
      "tablistLabel": "Filter sources by type",
      "language": "Training language",
      "search": "Search sources…",
      "tab": {
        "all": "All",
        "documents": "Documents",
        "websites": "Websites"
      },
      "filter": {
        "all": "All",
        "trained": "Trained",
        "training": "Training",
        "failed": "Failed"
      },
      "col": {
        "name": "Name",
        "type": "Type",
        "status": "Status",
        "added": "Added"
      },
      "emptyState": {
        "title": "No sources match your filters",
        "message": "Adjust the type or status filter, or add a new source."
      },
      "callout": "Coming soon: structured data (SQL/API), catalog/product sync, and auto-refresh for external sources",
      "detail": {
        "title": "Source details",
        "close": "Close details",
        "status": "Status",
        "fileName": "File name",
        "url": "URL",
        "languageField": "Language",
        "delete": "Delete",
        "deleteBlocked": "Can't delete while training — wait for it to finish"
      },
      "gaps": {
        "title": "3 questions your knowledge base can't answer",
        "asked": "Asked {{count}} times",
        "addSource": "Add source"
      },
      "versions": {
        "title": "Pending approval ({{count}})",
        "pending": "Pending",
        "none": "Nothing awaiting approval."
      }
    },
    "tags": {
      "title": "Tags",
      "intro": "Labels applied to contacts for segmentation and routing.",
      "search": "Search tags…",
      "col": {
        "name": "Name",
        "usedBy": "Usage"
      }
    },
    "waFlows": {
      "title": "WhatsApp Flows",
      "intro": "Interactive WhatsApp Flows registered with Meta.",
      "search": "Search flows…",
      "col": {
        "name": "Name",
        "status": "Status",
        "category": "Category"
      }
    }
  },
  "settings": {
    "title": "Settings",
    "tablistLabel": "Settings sections",
    "subpillLabel": "More settings sections",
    "backToTab": "Back",
    "save": "Save",
    "savedHint": "Saved",
    "on": "On",
    "off": "Off",
    "tab": {
      "general": "General",
      "channels": "Channels",
      "persona": "Persona",
      "security": "Security & RBAC",
      "billing": "Billing",
      "ai": "AI & NLP",
      "handover": "Handover"
    },
    "pill": {
      "businessHours": "Business Hours & SLA",
      "localization": "Language & Format",
      "auditLog": "Audit Log & Retention",
      "dataResidency": "Data Residency",
      "appleBusinessChat": "Apple Business Chat"
    },
    "general": {
      "heading": "General",
      "workspaceName": "Workspace name",
      "timezone": "Timezone",
      "defaultLanguage": "Default language",
      "dateFormat": "Date format",
      "perUserNote": "Notifications & theme are now per-user — each teammate controls their own, so admins no longer overwrite each other's preferences."
    },
    "channels": {
      "heading": "Channels",
      "connected": "Connected",
      "notConnected": "Not connected",
      "configure": "Configure",
      "connect": "Connect",
      "onboardingNote": "Connecting a new channel opens a guided onboarding flow (not yet designed in this prototype).",
      "catalogueTitle": "Channel catalogue",
      "catalogueDesc": "What each channel can carry, how it connects, how delivery fails over, and how one person threads across channels.",
      "catalogueOpen": "Open catalogue"
    },
    "persona": {
      "heading": "Bot persona",
      "displayName": "Bot display name",
      "avatar": "Avatar",
      "upload": "Upload image",
      "tone": "Tone",
      "greeting": "Greeting message",
      "fallback": "Fallback message",
      "previewLabel": "Preview"
    },
    "security": {
      "heading": "Security & Access Control",
      "manage": "Manage",
      "configure": "Configure",
      "change": "Change",
      "rbac": {
        "title": "Role Permission Matrix",
        "desc": "Define what each role (Admin / Supervisor / Agent / Developer) can access."
      },
      "audit": {
        "title": "Audit Log Export & Retention",
        "desc": "Export activity logs, set retention policy (90 days default)."
      },
      "residency": {
        "title": "Data Residency Region",
        "desc": "Currently: {{region}}. Affects storage + processing location."
      },
      "session": {
        "heading": "Session & Auth",
        "timeout": "Session timeout",
        "require2fa": "Require 2FA for admins",
        "sso": "Single sign-on (SAML)",
        "ssoDesc": "Enterprise SSO with your identity provider.",
        "contactSales": "Contact sales"
      }
    },
    "billing": {
      "planHeading": "Current plan",
      "pricePerMonth": "${{price}}/mo",
      "renewsOn": "Renews {{date}}",
      "meter": {
        "conversations": "Conversations",
        "broadcasts": "Broadcasts",
        "seats": "Seats"
      },
      "paymentHeading": "Payment method",
      "cardOnFile": "•••• {{last4}}",
      "update": "Update",
      "invoicesHeading": "Invoices",
      "amount": "${{amount}}",
      "download": "Download"
    },
    "businessHours": {
      "heading": "Business Hours",
      "day": "Day",
      "open": "Opens",
      "close": "Closes",
      "closed": "Closed",
      "closedToggle": "Mark {{day}} as closed",
      "perDayNote": "A per-day \"closed\" toggle is new — the legacy schedule had no way to close an individual day.",
      "slaHeading": "SLA targets",
      "firstResponse": "First response within",
      "resolution": "Resolution within",
      "minutes": "min",
      "hours": "h",
      "weekday": {
        "monday": "Monday",
        "tuesday": "Tuesday",
        "wednesday": "Wednesday",
        "thursday": "Thursday",
        "friday": "Friday",
        "saturday": "Saturday",
        "sunday": "Sunday"
      }
    },
    "localization": {
      "heading": "Language & Format",
      "perUserNote": "These are your personal preferences — they don't change what other teammates see.",
      "dashboardLanguage": "Dashboard Language",
      "rtlOn": "RTL Layout — On",
      "rtlOff": "RTL Layout — Off (auto-detects for AR / HE customers)",
      "numberLocale": "Number & date format",
      "coverageHeading": "Customer languages",
      "coverageTitle": "Language coverage and RTL readiness",
      "coverageDesc": "Which customer languages the assistant answers automatically, bilingual flow coverage, right-to-left surfaces and local formats.",
      "coverageOpen": "Open localization"
    },
    "auditLog": {
      "heading": "Audit Log & Retention",
      "intro": "Every configuration and access change is recorded. This surface is new — the legacy app wrote a trail on every save but never showed it.",
      "searchPlaceholder": "Search audit log…",
      "emptyTitle": "No matching activity",
      "emptyMessage": "Adjust the category filter or search term.",
      "openTitle": "Full audit log",
      "openDesc": "Read the recorded changes by category — templates, broadcasts, user management and content.",
      "open": "Open audit log"
    },
    "dataResidency": {
      "heading": "Data Residency Region",
      "region": "Region",
      "warning": "Changing region triggers a data migration and up to 4h of read-only mode.",
      "requestChange": "Request change",
      "requested": "Change requested — our team will be in touch."
    },
    "payment": {
      "heading": "Payment gateway",
      "intro": "Boxpay credentials. Three features stop working without them, and all three live on other screens.",
      "enabled": "Accept payments",
      "enabledDesc": "Turn off and payment links stop being generated anywhere in the workspace.",
      "businessCode": "Business code",
      "apiKey": "API key",
      "currency": "Default currency",
      "mode": "Mode",
      "modeDesc": "Test keys accept payments that never settle, and the customer cannot tell the difference.",
      "test": "Test",
      "live": "Live",
      "testWarn": "You are in test mode. Customers can complete a payment and no money will move.",
      "gates": "These stop working without valid credentials:"
    },
    "apple": {
      "heading": "Apple Business Chat",
      "intro": "Templates iMessage renders natively. The same question looks different on the device depending on which you pick.",
      "publish": "Publish {{name}}"
    },
    "closure": {
      "heading": "Close this account",
      "intro": "Closing removes the workspace and everything in it. There is no undo after the grace period.",
      "begin": "Close account…",
      "grace": "You have {{days}} days to change your mind. After that the data is gone.",
      "typeToConfirm": "Type {{phrase}} to confirm",
      "confirm": "Close account permanently"
    }
  },
  "devPortal": {
    "title": "Developer Portal",
    "netNewChip": "Net-new — no legacy design to reference",
    "subtitle": "API keys, webhooks, rate limits, docs and the changelog for the public API.",
    "tabsLabel": "Developer Portal sections",
    "copy": "Copy",
    "copied": "Copied",
    "tab": {
      "keys": "API Keys",
      "webhooks": "Webhooks",
      "limits": "Rate Limits",
      "docs": "Docs",
      "changelog": "Changelog"
    },
    "env": {
      "live": "Live",
      "test": "Test"
    },
    "status": {
      "active": "Active",
      "revoked": "Revoked",
      "paused": "Paused"
    },
    "keys": {
      "heading": "API Keys",
      "generate": "+ Generate key",
      "generateConfirm": "Generate",
      "done": "Done",
      "deprecated": "Deprecated",
      "rotate": "Rotate",
      "revoke": "Revoke",
      "rotateConfirmBody": "Rotating invalidates the current key immediately. Update your integrations first.",
      "revokeConfirmBody": "Revoke “{{name}}”? Any integration using it stops working right away. This can't be undone.",
      "oneTimeWarning": "Copy this key now — you won't be able to see it again.",
      "field": {
        "name": "Key name",
        "namePlaceholder": "e.g. Billing service",
        "env": "Environment",
        "scopes": "Scopes"
      },
      "meta": {
        "scopes": "Scopes",
        "lastUsed": "Last used",
        "status": "Status"
      }
    },
    "webhooks": {
      "heading": "Webhook Endpoints (Guided-Flow callbacks)",
      "add": "+ Add endpoint",
      "addConfirm": "Add",
      "signingSecret": "Signing secret",
      "reveal": "Reveal",
      "hide": "Hide",
      "roll": "Roll",
      "rolled": "Rolled",
      "lastDelivery": "Last delivery: {{detail}}",
      "field": {
        "url": "Endpoint URL",
        "events": "Events"
      },
      "log": {
        "heading": "Delivery log",
        "note": "Legacy had no delivery visibility at all. Failed deliveries are tinted and offer a redelivery.",
        "search": "Search deliveries…",
        "col": {
          "event": "Event",
          "endpoint": "Endpoint",
          "response": "Response",
          "attempts": "Attempts",
          "when": "When"
        }
      }
    },
    "limits": {
      "heading": "Rate Limits",
      "governanceNote": "Per-endpoint-group limits, throttling policy and per-key overrides — this is where the previously-unhomed “API Rate-Limit & Throttling Governance Console” lives.",
      "recent429": "Recent 429s (last 24h): {{count}}",
      "perMin": "{{n}}/min",
      "usageLabel": "{{used}} of {{limit}} requests used this minute",
      "usageCaption": "{{used}} / {{limit}} this minute",
      "col": {
        "group": "Endpoint group",
        "limit": "Limit",
        "usage": "Usage"
      },
      "policy": {
        "heading": "Throttling policy",
        "burst": "Burst allowance",
        "on429": "On 429",
        "overrides": "Per-key overrides"
      },
      "volume": {
        "heading": "Request volume vs limit",
        "caption": "Last 12 minutes — Messages group, limit 600/min."
      }
    },
    "docs": {
      "heading": "API Documentation",
      "intro": "The public API is the audit's best-guarded surface — every call is scoped and checked for app ownership. Browse the endpoint groups; the example is illustrative and static.",
      "fullReference": "Full reference →",
      "request": "Request",
      "response": "Response"
    },
    "changelog": {
      "heading": "Changelog & deprecations",
      "intro": "API changes and deprecation notices. Deprecated behaviour is flagged and carries a removal date.",
      "deprecation": "Deprecation"
    }
  },
  "sentiment": {
    "title": "Sentiment & Churn Risk",
    "netNewChip": "Net-new — no legacy design to reference",
    "range": {
      "label": "Date range",
      "7d": "Last 7 days",
      "30d": "Last 30 days",
      "90d": "Last 90 days"
    },
    "tile": {
      "avgSentiment": "Avg Sentiment",
      "atRisk": "At-Risk Conversations",
      "churnContacts": "Churn-Risk Contacts"
    },
    "chart": {
      "distribution": "Sentiment distribution",
      "trend": "Sentiment trend (30d)",
      "trendCaption": "Trending up {{delta}} over the range",
      "churnBreakdown": "Churn risk breakdown"
    },
    "dist": {
      "positive": "Positive",
      "neutral": "Neutral",
      "negative": "Negative"
    },
    "csat": {
      "heading": "CSAT",
      "toggleLabel": "CSAT demo state",
      "responses": "n = {{n}} responses",
      "satisfied": "Satisfied",
      "unsatisfied": "Unsatisfied",
      "state": {
        "empty": "No data",
        "data": "Real data",
        "fabricated": "Legacy bug"
      },
      "empty": {
        "title": "No responses yet",
        "message": "CSAT will show once customers rate conversations."
      },
      "fabricated": {
        "body": "Legacy showed a fabricated 50% here when the sentiment model failed to load — the redesign never fabricates a number (analytics-reporting.md §8)."
      }
    },
    "churn": {
      "heading": "Churn-Risk Contacts",
      "filterLabel": "Filter by risk level",
      "filter": {
        "all": "All",
        "high": "High",
        "medium": "Medium",
        "low": "Low"
      },
      "level": {
        "high": "High Risk",
        "medium": "Medium Risk",
        "low": "Low Risk"
      },
      "col": {
        "contact": "Contact",
        "factors": "Risk factors",
        "level": "Risk level",
        "lastContact": "Last contact",
        "action": "Action"
      },
      "view": "View",
      "empty": "No contacts at this risk level."
    },
    "atRisk": {
      "heading": "At-Risk Conversations",
      "jumpIn": "Jump in",
      "trend": {
        "down": "Sentiment trending down",
        "flat": "Sentiment flat"
      }
    }
  },
  "teamTools": {
    "title": "Team Tools",
    "netNewChip": "Net-new — no legacy design to reference",
    "canned": {
      "heading": "Canned Response Library",
      "intro": "Categorized snippets agents can insert into a reply. Legacy quick-replies had no categories, usage counts or team-vs-personal scope.",
      "new": "+ New snippet",
      "searchLabel": "Search snippets",
      "searchPlaceholder": "Search title, body or shortcut…",
      "categoryLabel": "Filter by category",
      "scopeLabel": "Filter by scope",
      "category": {
        "all": "All categories",
        "Commerce": "Commerce",
        "Account": "Account",
        "Support": "Support",
        "Onboarding": "Onboarding"
      },
      "scope": {
        "all": "All",
        "team": "Team",
        "personal": "Personal"
      },
      "usedTimes": "used {{count}}×",
      "insert": "Insert",
      "inserted": "Inserted into reply ✓",
      "edit": "Edit snippet",
      "delete": "Delete snippet",
      "empty": "No snippets match your filters.",
      "field": {
        "title": "Title",
        "shortcut": "Shortcut",
        "category": "Category",
        "body": "Body",
        "insertVar": "Insert {{ }} variable",
        "scope": "Scope",
        "save": "Save snippet"
      }
    },
    "leaderboard": {
      "heading": "Agent Productivity Leaderboard",
      "intro": "Ranked agent performance with gamification badges. No leaderboard existed in legacy.",
      "periodLabel": "Leaderboard period",
      "period": {
        "week": "This week",
        "month": "This month",
        "all": "All time"
      },
      "resolvedChart": "Resolved this week",
      "csat": "CSAT",
      "resolved": "{{count}} resolved",
      "avgHandle": "{{time}} avg handle",
      "firstResponse": "{{time}} first response",
      "yourRank": "Your rank: #{{rank}}"
    }
  },
  "richMenu": {
    "title": "Rich Menu Builder",
    "savePublish": "Save & Publish",
    "publishedToast": "Published ✓",
    "saved": {
      "heading": "Saved rich menus ({{count}})",
      "edit": "Edit"
    },
    "targeting": {
      "all": "All users",
      "specific": "Specific users",
      "channel": "By channel"
    },
    "status": {
      "enabled": "Enabled",
      "disabled": "Disabled"
    },
    "meta": {
      "name": "Rich menu name",
      "nameError": "Use lowercase letters, numbers and underscores only.",
      "targeting": "Targeting",
      "enabled": "Enabled",
      "disabled": "Disabled"
    },
    "layout": {
      "heading": "Layout Template",
      "single": "1 region",
      "splitV": "2 — stacked",
      "splitH": "2 — side by side",
      "row3": "3 regions",
      "grid4": "4 regions",
      "grid6": "6 regions"
    },
    "preview": {
      "heading": "Preview — tap a cell to edit it"
    },
    "action": {
      "message": "Send Message",
      "url": "Open URL",
      "postback": "Postback",
      "video": "Play Video"
    },
    "cell": {
      "heading": "Cell: “{{label}}”",
      "label": "Label",
      "actionType": "Action Type",
      "triggerMessage": "Trigger Text",
      "triggerUrl": "URL",
      "triggerPostback": "Postback Data",
      "triggerVideo": "Video URL",
      "icon": "Icon",
      "uploadImage": "Upload image",
      "dimensionHint": "2500×1686px",
      "autoResize": "Auto-resize & crop to fit"
    },
    "confirm": {
      "title": "Switch layout?",
      "body": "Switching layout will clear the {{count}} cells you've configured. Continue?",
      "cancel": "Cancel",
      "continue": "Continue"
    }
  },
  "lineFlex": {
    "title": "Line Flex Message Builder",
    "chip": "Now has live preview — was JSON-only in legacy",
    "save": "Save",
    "savedToast": "Saved ✓",
    "saveErrorSimulated": "Couldn't save — the server rejected the message. Your content is kept here so you can fix it and retry.",
    "saved": {
      "heading": "Saved flex messages ({{count}})",
      "edit": "Edit"
    },
    "meta": {
      "name": "Message name",
      "nameError": "Use lowercase letters, numbers and underscores only."
    },
    "modeLabel": "Editor mode",
    "mode": {
      "visual": "Visual Builder",
      "json": "JSON"
    },
    "add": {
      "header": "+ Header Block",
      "hero": "+ Hero Image",
      "body": "+ Body Text Block",
      "button": "+ Button Block"
    },
    "kind": {
      "header": "Header",
      "hero": "Hero Image",
      "body": "Body Text",
      "button": "Button"
    },
    "field": {
      "headerText": "Header text",
      "bodyText": "Body text",
      "imageUrl": "Image URL",
      "pickImage": "Choose image",
      "buttonLabel": "Button label",
      "buttonUrl": "Button URL"
    },
    "block": {
      "moveUp": "Move block up",
      "moveDown": "Move block down",
      "remove": "Remove block"
    },
    "empty": "No blocks yet — add one above.",
    "json": {
      "label": "Generated LINE Flex JSON"
    },
    "schema": {
      "validPrefix": "✓",
      "badPrefix": "⚠",
      "valid": "Valid LINE Flex structure",
      "heroOrder": "'hero' block must precede 'body'",
      "empty": "A bubble needs at least one block"
    },
    "simulateFailure": "Simulate a server validation failure on save",
    "preview": {
      "heading": "Live Preview"
    }
  }
}
