from __future__ import annotations

import os


SUPPORTED_LOCALES: tuple[str, ...] = ("en", "de", "fr", "es", "ro", "ru")

LANG_ALIASES: dict[str, str] = {
    "cz": "cs",
    "in": "id",
    "iw": "he",
    "ji": "yi",
    "no": "nb",
    "ua": "uk",
}

LANG_DISPLAY: dict[str, str] = {
    "en": "English",
    "de": "Deutsch",
    "fr": "Français",
    "es": "Español",
    "ro": "Română",
    "ru": "Русский",
}

TRANSLATIONS: dict[str, dict[str, str]] = {
    "en": {
        "app.title": "IuVe Connect Agent Console",
        "nav.avatar": "Avatar",
        "nav.dashboard": "Dashboard",
        "nav.devices": "Devices",
        "nav.diagnostics": "Diagnostics",
        "nav.security": "Security",
        "nav.updates": "Updates",
        "label.runtime_state": "Runtime State",
        "label.trust_state": "Trust State",
        "label.paired": "Paired",
        "label.device_state": "Device State",
        "label.last_heartbeat_at": "Last Heartbeat",
        "label.app_version": "Agent Version",
        "label.backend_base_url": "Backend URL",
        "label.service_status": "Service Status",
        "saas.title": "IuVe AI Plan & Entitlements",
        "saas.plan": "Current plan",
        "saas.subscription": "Subscription",
        "saas.capabilities": "Capabilities",
        "saas.usage": "Monthly usage",
        "saas.providers": "AI providers",
        "saas.allowed": "Allowed",
        "saas.blocked": "Blocked",
        "saas.reason": "Reason",
        "saas.unavailable": "Sign in via pairing to load SaaS context",
        "saas.refresh": "Refresh plan",
        "saas.upgrade": "Update tariff",
        "saas.usage_row": "{feature}: {used}/{limit}",
        "saas.capability_row": "{id}: {status}",
        "saas.capability.allowed": "available",
        "saas.capability.denied": "blocked",
        "action.open_connect": "Open IuVe Connect",
        "action.open_logs": "Open Logs",
        "action.restart_agent": "Restart Agent",
        "action.check_update": "Check Update",
        "action.export_diagnostics": "Export Diagnostics",
        "header.refresh": "Refresh",
        "header.settings": "Settings",
        "header.profile": "Profile",
        "header.fullscreen.enter": "Fullscreen",
        "header.fullscreen.exit": "Windowed",
        "header.device": "Device",
        "header.trust": "Trust",
        "header.avatar_mode": "Avatar Mode",
        "header.active_permissions": "Active Permissions",
        "header.connection": "Connection",
        "header.orchestra": "Intelligence",
        "status.orchestra.cloud_active": "Cloud Orchestra Active",
        "status.orchestra.local_fallback": "Local Fallback Mode",
        "status.orchestra.offline": "Offline / Server Unavailable",
        "status.orchestra.cloud_active.bullet1": "Full cloud intelligence via iuve.eu Orchestra",
        "status.orchestra.cloud_active.bullet2": "Respects your account plan, grants, and audit log",
        "status.orchestra.cloud_active.bullet3": "Primary route for Avatar advisory and intent routing",
        "status.orchestra.local_fallback.bullet1": "iuve.eu server is unavailable or Orchestra is offline",
        "status.orchestra.local_fallback.bullet2": "Simple device actions still work on this trusted device",
        "status.orchestra.local_fallback.bullet3": "Optional local Ollama may assist if already installed (not required)",
        "status.orchestra.offline.bullet1": "No cloud connection and no local LLM detected",
        "status.orchestra.offline.bullet2": "Only basic device fast-path commands (no AI advisory)",
        "status.orchestra.offline.bullet3": "Pair the device and restore connectivity for full intelligence",
        "modal.orchestra_status.title": "IuVe intelligence mode",
        "modal.orchestra_status.done": "Close",
        "modal.orchestra_status.check": "Check Orchestra",
        "status.orchestra.reason.label": "Why local fallback",
        "status.orchestra.detail.label": "Diagnostic detail",
        "status.orchestra.reason.not_connected": "Device credentials are missing from local storage.",
        "status.orchestra.reason.backend_unreachable": "Cannot reach the iuve.eu backend health endpoint.",
        "status.orchestra.reason.account_unverified": "Backend rejected or did not return the device profile.",
        "status.orchestra.reason.orchestra_disabled": "Cloud Orchestra is disabled on the server.",
        "status.orchestra.reason.entitlement_denied": "Your plan does not include cloud AI providers.",
        "status.orchestra.reason.probe_failed": "Orchestra probe failed even though the device is paired.",
        "status.model.chip.orchestra": "Orchestra",
        "status.model.chip.local": "Local",
        "status.model.chip.local_default": "ollama",
        "status.model.chip.rules": "Local rules",
        "status.model.chip.offline": "Offline",
        "avatar.chat.system": "Status",
        "avatar.execution.timeline.intent": "Intent",
        "avatar.execution.timeline.classify": "Classification",
        "avatar.execution.timeline.planner": "Planner (Orchestra)",
        "avatar.execution.timeline.planner_local": "Planner (local fallback)",
        "avatar.execution.timeline.policy": "Policy",
        "avatar.execution.timeline.policy.safe": "Safe (IuVeWorkspace writes)",
        "avatar.execution.timeline.policy.balanced": "Balanced (Desktop/Downloads/Documents)",
        "avatar.execution.timeline.policy.trusted": "Trusted (full home)",
        "avatar.execution.timeline.execute": "Executor",
        "avatar.execution.timeline.verifier": "Verifier",
        "avatar.execution.timeline.done": "Done",
        "avatar.execution.timeline.error": "Error",
        "avatar.execution.timeline.ok": "✓",
        "avatar.execution.timeline.fail": "✗",
        "avatar.execution.timeline.layer.orchestra": "Orchestra/backend layer",
        "avatar.execution.timeline.layer.planner": "Planner layer",
        "avatar.execution.timeline.layer.agent": "Desktop agent",
        "avatar.execution.timeline.layer.classify": "Classification layer",
        "avatar.chat.response.advisory_consultation_required": (
            "This task needs consultation, not PC actions. "
            "The cloud planner could not map it to device steps — ask a follow-up question or rephrase as a concrete action."
        ),
        "avatar.chat.response.orchestra_error_detail": "Orchestra diagnostic: {detail}",
        "header.owner": "Account",
        "splash.title": "IuVe Connect Agent",
        "splash.subtitle": "Loading console — pairing, grants, device profile, and SaaS context.",
        "splash.version": "Version {version}",
        "splash.footer": "Developed by {developer} · {company}",
        "splash.stage.init": "Starting…",
        "splash.stage.pairing": "Checking pairing status…",
        "splash.stage.grants": "Syncing capability grants…",
        "splash.stage.device_scan": "Scanning device capabilities…",
        "splash.stage.saas": "Loading SaaS plan and profile…",
        "modal.action.cancel": "Cancel",
        "modal.action.done": "Done",
        "modal.action.open_permissions": "Open permissions",
        "modal.plan_execute.title": "Execute plan?",
        "modal.plan_execute.body": "The agent will run the proposed multi-step plan on this device. Continue?",
        "modal.plan_execute.confirm": "Execute plan",
        "modal.session_start.title": "Start action session?",
        "modal.session_start.body": "Grant a time-bounded session for this plan preset before execution.",
        "modal.session_start.confirm": "Start session",
        "modal.permission_required.title": "Permission required",
        "modal.permission_required.body": "Approve {capability} in Permission Center to continue.",
        "modal.browser_wait.title": "Action required in browser or app",
        "modal.browser_wait.body": "The agent is waiting for your action in the browser or application. Click Done when finished.",
        "modal.agent_waiting.title": "Agent waiting for you",
        "modal.agent_waiting.body": "Complete the required action, then confirm to continue.",
        "modal.vision_fail.title": "Could not confirm the result on screen",
        "modal.vision_fail.body": "The agent did not find the expected text ({expected_text}). Fix it manually and tap Retry to verify again (attempt {attempt}/{max_attempts}).",
        "modal.vision_fail.ollama_hint": "Dev only: local Ollama vision requires ollama pull llava and AVATAR_DESKTOP_VISION_LOCAL_ENABLED=true.",
        "modal.vision_fail.cloud_hint": "Verifying via IuVe Orchestra cloud…",
        "modal.vision_fail.retry": "Retry verification",
        "avatar.status.header": "Avatar Chat Shell | Runtime: {runtime} | Trust: {trust}",
        "avatar.title": "IuVe Avatar",
        "avatar.intro": "{device} | How can I help with this device today?",
        "avatar.conversation.title": "Conversation",
        "avatar.input.placeholder": "Ask IuVe about goals on this device…",
        "avatar.input.attach": "Attach context or open permissions",
        "avatar.chat.mode.auto": "Auto",
        "avatar.chat.mode.local": "Local only",
        "avatar.chat.mode.cloud_assisted": "Cloud assisted",
        "avatar.chat.mode.hint": "IuVe picks the AI route — not a manual model picker",
        "avatar.chat.working.badge": "{count} Working",
        "avatar.chat.tag.multitask": "Multitask",
        "avatar.chat.tag.dismiss": "Dismiss context tag",
        "avatar.action.stop": "Stop plan",
        "avatar.device_context.title": "Device Context",
        "avatar.device_context.cpu": "CPU",
        "avatar.device_context.ram": "RAM",
        "avatar.device_context.disk": "Disk",
        "avatar.device_context.os": "OS",
        "avatar.device_context.apps": "Apps",
        "avatar.device_context.scan": "Last scan",
        "avatar.device_context.trust": "Trust Level",
        "avatar.device_context.capabilities": "Capabilities",
        "avatar.device_context.root": "Root Session",
        "avatar.action.open_permissions": "Open Permission Center",
        "avatar.action.open_diagnostics": "Open Diagnostics",
        "avatar.action.cancel": "Cancel",
        "avatar.action.send": "Send",
        "avatar.action.session_start": "Start",
        "avatar.action.session_skip": "Skip",
        "avatar.input.voice": "Voice input",
        "avatar.input.voice_not_configured": "Voice input is not configured on this device.",
        "avatar.input.voice_deps_missing": (
            "Voice input is not configured. Reinstall the desktop agent (0.2.0.5+) "
            "or install dependencies: sudo apt install python3-pyaudio"
        ),
        "avatar.input.voice_pyaudio_missing": (
            "Microphone capture is unavailable. Install: sudo apt install python3-pyaudio portaudio19-dev"
        ),
        "avatar.input.voice_capture_failed": "Could not capture voice input. Check microphone permissions.",
        "avatar.action.execute": "Execute",
        "avatar.action.execute_plan": "Execute plan",
        "avatar.advisory.only": "Advisory only. No action executed.",
        "avatar.chat.accuracy_disclaimer": (
            "IuVeAI may make mistakes. We recommend verifying important information."
        ),
        "avatar.unpaired.banner": "This device is not paired yet. Pair it to activate IuVe Avatar.",
        "avatar.unpaired.pair": "Pair Device",
        "avatar.unpaired.permissions": "Open Permissions",
        "avatar.unpaired.diagnostics": "View Diagnostics",
        "avatar.chat.user": "User",
        "avatar.chat.avatar": "Avatar",
        "avatar.chat.welcome.tagline": (
            "IuVe Console is you on your computer, with AI superpowers: state your goal — "
            "the agent picks the site, app, or cloud and sees it through safely, with your approval."
        ),
        "avatar.chat.welcome": (
            "IuVe Console is you on your computer, with AI superpowers.\n"
            "State your goal in plain words — no commands or jargon.\n"
            "The agent picks the site, app, or cloud and proposes a plan to the result.\n"
            "Sensitive steps run only with your approval; everything is audited.\n"
            "To auto-run actions: trusted state and grants in Permission Center."
        ),
        "avatar.chat.response.placeholder": "I can explain safe next steps for this device. Grant capabilities in Permission Center when you need privileged operations.",
        "avatar.chat.response.permission_required": "Permission required: {capability}. Open Permission Center to review and approve via local governance.",
        "avatar.chat.response.permission_blocked_plan": "{capability} is not included in your plan. Upgrade your subscription or choose permissions allowed on your tariff in Permission Center.",
        "avatar.chat.response.root_required": "Root approval required: {capability}. Open Permission Center for explicit confirmation. No root action is executed from chat.",
        "avatar.chat.response.diagnostics": "Local diagnostics guidance: runtime={runtime}, trust={trust}, last heartbeat={heartbeat}. You can open Diagnostics for full details.",
        "avatar.chat.response.action_ready": "Suggested action: {action}. Review the card below and press Execute.",
        "avatar.chat.response.action_auto": "Running granted action: {action}.",
        "avatar.chat.response.auto_executing": "Executing now (trusted owner, active grant).",
        "avatar.chat.response.auto_executing_plan": "Starting plan automatically in a moment (trusted owner, grants cover all steps).",
        "avatar.chat.response.session_proposal": "This task needs a «{title}» session ({duration}). Start it?",
        "avatar.chat.response.session_started": "Action session started: {title}.",
        "avatar.chat.response.session_skipped": "Continuing without an action session — each step will ask for confirmation.",
        "avatar.chat.response.session_pending_execute": "Start or skip the action session before executing the plan.",
        "avatar.chat.response.chat_error": "Avatar chat error: {reason}.",
        "avatar.chat.response.thinking": "Thinking…",
        "avatar.chat.response.thinking_cloud": "Thinking via IuVe Orchestra…",
        "avatar.chat.response.trust_required": "Trusted device state is required before executing actions from Avatar chat.",
        "avatar.chat.response.no_capabilities": "No active capability grants. Open Permission Center and grant the required permissions first.",
        "avatar.chat.response.execution_ok": "Action completed.",
        "avatar.chat.response.execution_ok_mouse": "Mouse cursor moved.",
        "avatar.chat.response.execution_ok_trash": "Recycle bin emptied.",
        "avatar.chat.response.execution_ok_folder": "Opened folder: {path} ({status}).",
        "avatar.chat.response.execution_ok_app": "Launched {application} ({status}).",
        "avatar.chat.response.execution_ok_keyboard_cursor": (
            "Question typed into Cursor: {text}"
        ),
        "avatar.chat.response.execution_ok_keyboard_libreoffice": (
            "Article text typed into LibreOffice Writer: {text}"
        ),
        "avatar.chat.response.execution_ok_keyboard_browser": (
            "Question typed into browser chat: {text}"
        ),
        "avatar.chat.response.web_post_composer_found": "Composer found on page",
        "avatar.chat.response.web_post_draft_inserted": "Draft inserted in composer: {text}",
        "avatar.chat.response.web_post_draft_verified": "Draft verified in composer: {text}",
        "avatar.chat.response.web_post_publish_confirmation": (
            "Draft ready. Publish confirmation required."
        ),
        "avatar.chat.response.web_post_publish_clicked": "Publish button clicked",
        "avatar.chat.response.web_post_publish_verified": "Post published and verified",
        "avatar.chat.response.web_post_publish_failed": "Publish failed: {text}",
        "avatar.chat.response.execution_ok_keyboard_browser_sent": (
            "Question sent to chat: {text}"
        ),
        "avatar.chat.response.execution_ok_url": "Action completed: opened {url} ({status}).",
        "avatar.chat.response.execution_failed": "Action failed: {reason}.",
        "avatar.chat.response.execution_denied": "Action denied by policy: {reason}.",
        "avatar.chat.error.application_not_allowlisted": (
            "This application is not on the allowed launch list. "
            "Your permissions are active — check the app name or wait for a device profile scan."
        ),
        "avatar.chat.error.application_not_found_on_device": (
            "Application not found on this device. Wait for a device scan or check the name."
        ),
        "avatar.chat.error.capability_not_granted": (
            "No application_control permission. Open Permission Center and enable application control."
        ),
        "avatar.chat.error.permission_denied": "Action denied by security policy.",
        "avatar.chat.response.no_action": "No action executed.",
        "avatar.chat.response.plan_preview": "Execution plan ({step_count} steps): {goal}\n{steps}\nReview the card below and press Execute plan to run all steps.",
        "avatar.chat.response.plan_deferred": "Multi-step goal detected. Fetching execution plan from cloud planner…",
        "avatar.chat.response.plan_fetch_failed": "Failed to fetch execution plan: {reason}",
        "avatar.chat.response.plan_fetch_fallback": "Using local fallback plan while cloud planner is unavailable ({reason}).",
        "avatar.chat.response.plan_fetch_auth_failed": (
            "Could not fetch execution plan: the device token is invalid or expired. "
            "Open Devices → Re-pair Device, get a fresh pair token at https://www.iuve.eu/connect, "
            "pair again, and wait until Connection shows Connected."
        ),
        "avatar.plan.preview.title": "Execution plan preview",
        "avatar.plan.preview.body": "Goal: {goal}\nSteps ({step_count}):\n{steps}",
        "avatar.plan.preview.note": "Plan preview only. Multi-step execution is disabled on this device.",
        "avatar.plan.preview.execute_note": "Review the plan and press Execute plan to run all steps.",
        "avatar.plan.session.allowed": "Allowed for this task",
        "avatar.plan.session.auto_exec": "Automatic execution within granted access",
        "avatar.plan.session.stop_task": "Stop task",
        "avatar.chat.response.plan_started": "Executing plan ({step_count} steps): {goal}",
        "avatar.chat.response.plan_step_progress": "Step {index}/{total}: {step_label} — {status}",
        "avatar.chat.response.plan_only": "Plan prepared (no execution):\n{goal}\n\n{steps}",
        "avatar.chat.response.page_loaded_ok": "✓ Page loaded",
        "avatar.chat.response.files_list_header": "✓ Found {count} files:",
        "avatar.chat.response.plan_completed": "Plan completed ({step_count} steps): {goal}",
        "avatar.chat.response.plan_failed": "Plan stopped at step «{step_label}»: {reason}",
        "avatar.chat.response.plan_resume": "Resuming plan from step {step_index}: {goal}",
        "avatar.chat.response.plan_already_completed": "Plan already completed — nothing to resume.",
        "avatar.action.retry_step": "Retry step",
        "avatar.chat.file_drop.chip": "File: {filename} · Orchestra → {routed_model}",
        "avatar.chat.file_drop.audio_stub": "File: {filename} · audio transcription planned (Orchestra → {routed_model})",
        "avatar.chat.file_drop.code_hint": "File: {filename} · coding provider hint (→ {routed_model})",
        "avatar.chat.file_drop.zip_listing": "File: {filename} · contents: {listing}",
        "avatar.chat.file_drop.unsupported": "Unsupported file type: {filename}",
        "avatar.chat.file_drop.not_found": "File not found: {filename}",
        "avatar.chat.file_drop.disabled": "File drop is disabled on this device.",
        "avatar.step.get_diagnostics": "Check memory / diagnostics",
        "avatar.step.empty_trash": "Empty recycle bin",
        "avatar.step.browser_open_url": "Open website",
        "avatar.step.open_document_edit": "Open document",
        "avatar.step.mouse_move_relative": "Move mouse cursor",
        "avatar.step.application_launch": "Launch application",
        "avatar.step.open_folder": "Open folder",
        "avatar.step.keyboard_type_text": "Type text into application",
        "avatar.step.social_post_draft": "Draft social post",
        "avatar.step.social_post_publish": "Publish social post",
        "avatar.step.check_update": "Check agent update",
        "avatar.step.get_status": "Read agent status",
        "avatar.step.web_fetch": "Fetch web page",
        "avatar.step.summarize_content": "Summarize content",
        "avatar.step.capture_screenshot": "Capture screen screenshot",
        "avatar.step.verify_screen_contains_text": "Verify text on screen",
        "avatar.step.describe_active_window": "Describe active window",
        "avatar.step.list_files_in_folder": "List files in folder",
        "avatar.step.plan_step": "Plan step",
        "avatar.step.insert_exact_text": "Insert exact post text",
        "avatar.step.open_web_composer": "Open post composer",
        "avatar.step.verify_web_draft": "Verify web post draft",
        "avatar.step.verify_published": "Verify post published",
        "avatar.step.browser_click_publish": "Click publish button",
        "avatar.web_post.status.composer_found": "composer found",
        "avatar.web_post.status.draft_inserted": "draft inserted",
        "avatar.web_post.status.draft_verified": "draft verified",
        "avatar.web_post.status.draft_content_mismatch": "draft content mismatch",
        "avatar.web_post.status.publish_requested": "publish requested",
        "avatar.web_post.status.publish_confirmation_required": "publish confirmation required",
        "avatar.web_post.status.publish_clicked": "publish clicked",
        "avatar.web_post.status.publish_verified": "publish verified",
        "avatar.web_post.status.publish_failed": "publish failed",
        "avatar.web_post.status.publish_button_not_found": "publish button not found",
        "avatar.plan.status.ok": "done",
        "avatar.plan.status.failed": "failed",
        "avatar.plan.status.running": "in progress",
        "avatar.execution.status.mouse_moved": "mouse moved",
        "avatar.execution.status.keyboard_typed": "text typed",
        "avatar.execution.status.folder_opened": "folder opened",
        "avatar.execution.status.trash_emptied": "recycle bin emptied",
        "avatar.execution.status.ok": "completed",
        "avatar.execution.status.completed": "completed",
        "cap.audit.grant_active": "Active grant",
        "avatar.chat.response.plan_error": "Plan execution error: {reason}",
        "avatar.chat.response.plan_cancelled": "Plan stopped.",
        "avatar.chat.response.device_inventory": "{summary}",
        "avatar.chat.response.llm_advisory": "{answer}",
        "avatar.chat.response.llm_unavailable": (
            "I cannot answer general questions right now — IuVe AI Orchestra on iuve.eu is unavailable. "
            "Check your network and account connection. "
            "If you run Ollama locally, it may be used as an optional offline fallback."
        ),
        "avatar.chat.response.llm_unavailable_not_connected": (
            "I cannot answer general questions right now — sign in and connect this device to iuve.eu "
            "(pairing + trusted status), then try again."
        ),
        "avatar.chat.response.llm_unavailable_cloud": (
            "IuVe AI Orchestra is temporarily unavailable or not included in your plan. "
            "Check your connection and tariff at iuve.eu, then try again."
        ),
        "avatar.chat.response.intent_clarify": "{question}",
        "avatar.chat.response.vision_required": (
            "Screen vision is unavailable. Grant Screen Vision in Permission Center "
            "or set AVATAR_DESKTOP_VISION_ENABLED=true in the agent service."
        ),
        "avatar.chat.response.vision_flag_required": (
            "Screen vision is blocked by AVATAR_DESKTOP_VISION_ENABLED=false in the agent service. "
            "Remove that override or set it to true. Your Screen Vision grant is already active."
        ),
        "avatar.chat.response.vision_grant_required": (
            "Screen vision requires the Screen Vision grant. Open Permission Center and enable "
            "«Screen Vision» (recommended: 1-hour Action Session)."
        ),
        "avatar.chat.response.device_scan_onboarding": "Device profile updated. {summary}",
        "avatar.chat.response.capabilities_faq": (
            "I can help on this device with: opening websites, reading pages, drafting documents, "
            "managing files in your workspace, checking agent status, and running multi-step plans. "
            "High-risk actions (publishing, payments, deletion, secrets, system changes) require your explicit confirmation. "
            "Open Permission Center to grant capabilities when you are ready."
        ),
        "avatar.chat.response.meta_external": (
            "Cursor and cloud development are outside direct device execution. "
            "I can work locally on this machine: browser, documents, files, and audited device tasks. "
            "For Cursor or cloud coding, describe the goal here and I will explain what I can prepare locally "
            "or what should be done in your IDE — without requesting device permissions for that."
        ),
        "avatar.action.executing_plan": "Executing plan...",
        "avatar.action.document_edit.title": "Open document for editing",
        "avatar.action.document_edit.body": "Create/open a letter draft in ~/IuVeWorkspace and launch LibreOffice Writer.",
        "avatar.action.browser_open.title": "Open website",
        "avatar.action.browser_open.body": "Open URL in default browser: {url}",
        "avatar.action.check_update.title": "Check agent update",
        "avatar.action.check_update.body": "Check stable channel for a signed desktop agent update.",
        "avatar.action.mouse_move.title": "Move mouse cursor",
        "avatar.action.mouse_move.body": "Move the mouse cursor relatively on this desktop. Requires xdotool or ydotool.",
        "avatar.action.diagnostics.title": "Check device diagnostics",
        "avatar.action.diagnostics.body": "Read local runtime diagnostics and memory summary.",
        "avatar.action.open_folder.title": "Open workspace folder",
        "avatar.action.open_folder.body": "Open IuVe workspace folder in the default file manager.",
        "avatar.action.application_launch.title": "Launch application",
        "avatar.action.application_launch.body": "Launch a local desktop application (e.g. Cursor IDE).",
        "avatar.action.application_launch_named.body": "Launch the matched installed application on this device.",
        "avatar.action.application_not_found.body": "No matching installed application found in the device profile yet. Run a device scan or check the name.",
        "avatar.action.keyboard_type.title": "Type into application",
        "avatar.action.keyboard_type.body": "Focus the target window and type text via keyboard (xdotool/ydotool).",
        "dialog.profile.body": "Account: {account}\nDevice: {device}\nAgent version: {version}\nTrust state: {trust}",
        "onboarding.unpaired.banner": "Device is not paired. Pair this device to enable IuVe AI Avatar operations.",
        "onboarding.pair.button": "Pair Device",
        "pairing.dialog.title": "Pair Device",
        "pairing.dialog.instruction": "Get a Pair Token in IuVe Connect and paste it here.",
        "pairing.dialog.token.placeholder": "Pair Token",
        "pairing.dialog.paste": "Paste From Clipboard",
        "pairing.dialog.pair": "Pair",
        "pairing.success.title": "Device Paired",
        "pairing.success.body": "Pairing completed. Trust and connection status will update after heartbeat.",
        "pairing.error.invalid_token": "Invalid pair token. Generate a new token in IuVe Connect and try again.",
        "pairing.error.expired_token": "Pair token has expired. Generate a new token in IuVe Connect.",
        "pairing.error.network_error": "Network error while contacting the backend. Check your connection and try again.",
        "pairing.error.backend_rejected": "Backend rejected the pairing request. Verify the token and try again.",
        "pairing.error.clipboard_unavailable": "Clipboard is unavailable in this session.",
        "devices.placeholder": "Local secure device state bound to explicit pairing and capability admission.",
        "devices.auth_error.banner": "Device authentication failed ({error}). Revoke pairing and pair again with a fresh token from IuVe Connect.",
        "devices.auth_error.hint": "{hint}",
        "devices.unpair.button": "Revoke Pairing",
        "devices.repair.button": "Re-pair Device",
        "devices.open_security.link": "Open Permissions Center",
        "devices.revoke_all.distinct.hint": "«Revoke Pairing» removes device trust. «Revoke All» on Security only disables capability grants.",
        "dialog.devices.unpair.title": "Revoke device pairing?",
        "dialog.devices.unpair.body": "This clears the local device token on this machine. Generate a new pair token in IuVe Connect to pair again.\n\n{hint}",
        "dialog.devices.repair.title": "Re-pair this device?",
        "dialog.devices.repair.body": "Local pairing credentials will be cleared and the pairing dialog will open. Use a fresh pair token from IuVe Connect.",
        "label.device_id": "Device ID",
        "label.pairing_timestamp": "Pairing Timestamp",
        "label.admission_mode": "Admission Mode",
        "label.allowlisted_command_channel": "Allowlisted Channel",
        "label.hidden_actions": "Hidden Actions",
        "label.pre_pair_actions": "Pre-Pair Actions",
        "diagnostics.placeholder": "Runtime diagnostics are explicit, local and exportable for audit evidence.",
        "diagnostics.page.title": "Device Health",
        "diagnostics.page.subtitle": "A human-readable view of connection, trust and heartbeat status. Advanced details stay available below.",
        "diagnostics.action.refresh_scan": "Refresh device scan",
        "diagnostics.action.refresh_scan.scanning": "Scanning…",
        "diagnostics.scan.status.scanning": "Scanning device inventory…",
        "diagnostics.scan.status.complete": "Scan complete — {count} apps found.",
        "diagnostics.scan.status.failed": "Device scan failed: {reason}",
        "diagnostics.scan.status.interrupted": "Scan interrupted — try again.",
        "diagnostics.scan.status.interrupted.partial": "Scan interrupted — {count} apps indexed (partial). Try again.",
        "avatar.chat.response.device_scan_manual": "Device scan finished. {count} apps indexed.",
        "diagnostics.health.title": "Health Summary",
        "diagnostics.health.connection": "Connection",
        "diagnostics.health.trust": "Trust",
        "diagnostics.health.heartbeat": "Heartbeat",
        "diagnostics.health.logs": "Logs",
        "diagnostics.advanced.title": "Advanced Details",
        "label.heartbeat_age_sec": "Heartbeat Age (sec)",
        "label.failure_count": "Failure Count",
        "label.last_error": "Last Error",
        "label.logs_path": "Logs Path",
        "label.storage_path": "Storage Path",
        "label.status_source_version": "Status Source",
        "label.signed_bootstrap_required": "Signed Bootstrap Required",
        "security.placeholder": "Secure access admission is enforced: deny-by-default, explicit consent, capability grants and root gates.",
        "security.summary.trust.title": "Trust",
        "security.summary.trust.body": "This install pairs as one device in your account. Trust and permissions apply here only; you can pair additional devices on other operating systems when their agent is available.",
        "security.summary.consent.title": "Consent",
        "security.summary.consent.body": "Permission changes remain explicit, local and auditable.",
        "security.summary.root.title": "Root",
        "security.summary.root.body": "Root operations stay gated behind explicit confirmation.",
        "security.summary.audit.title": "Audit",
        "security.summary.audit.body": "All grants and revocations remain visible in the audit trail.",
        "security.status.line": "Trust: {trust} · Grants: {granted}/{total} · Active sessions: {sessions} · Root: {root}",
        "security.status.card.this_device": "This device",
        "security.status.card.connected": "Connected",
        "security.status.card.trusted": "Trust on this device",
        "security.status.card.permissions": "Permissions on this device",
        "security.status.card.sessions": "Active temporary sessions",
        "security.status.card.time_remaining": "Time remaining",
        "security.status.connected.yes": "Connected to IuVe",
        "security.status.connected.no": "Not connected",
        "security.status.trusted.yes": "Trusted",
        "security.status.trusted.no": "Not trusted yet",
        "security.status.this_device.named": "{name} ({id})",
        "security.status.this_device.id_only": "Device {id}",
        "security.status.this_device.unknown": "This console install",
        "security.status.no_active_sessions": "No active sessions",
        "security.status.revoke_all": "Revoke all access",
        "security.recommended_safe.button": "Recommended safe mode",
        "security.recommended_safe.hint": "One click: Standard profile, temporary sessions, and confirmations for risky actions.",
        "security.advanced.title": "Advanced settings ▾",
        "security.advanced.subtitle": "Manual capability controls for power users. Ordinary users can stay with profiles and task sessions above.",
        "security.task_sessions.note": "Pick a task to reduce popups for that work only. Dangerous actions still ask for confirmation.",
        "security.safety.summary.title": "Review before applying",
        "security.safety.summary.body": "Profile: {profile}\n\nIuVe will be allowed to:\n{allowed}\n\nStill requires your confirmation:\n{confirms}\n\nAccess expires: {expires}\n\nTo revoke: open Security and tap «Revoke all access», or end temporary sessions below.\n{revoke}",
        "security.safety.revoke_hint": "All changes are recorded in the audit log.",
        "security.safety.confirm.publishing": "Publishing posts, emails, or comments",
        "security.safety.confirm.payments": "Payments and subscriptions",
        "security.safety.confirm.deleting_files": "Deleting files or wiping folders",
        "security.safety.confirm.sending_messages": "Sending messages",
        "security.safety.confirm.installing_software": "Installing or removing software",
        "security.safety.confirm.system_root": "System-level and root operations",
        "security.manual_configure": "Configure manually ▾",
        "security.additional.title": "Additional",
        "cap.grants.permanent.title": "Permanent permissions",
        "cap.grants.permanent.subtitle": "Choose an access profile or configure individual permissions below.",
        "cap.grants.profile.title": "Access profile",
        "cap.grants.profile.subtitle": "Pick how much help IuVe may provide on this device. Risky actions always ask first.",
        "profile.lifetime.label": "Session lifetime",
        "profile.lifetime.permanent": "Permanent",
        "profile.lifetime.app_exit": "Until application exit",
        "profile.lifetime.device_shutdown": "Until device shutdown",
        "profile.lifetime.single_task": "Single task",
        "profile.summary.title": "Active profile",
        "profile.summary.active": "Profile",
        "profile.summary.capabilities": "Included capabilities",
        "profile.summary.lifetime": "Lifetime",
        "profile.summary.risk": "Risk level",
        "profile.summary.audit": "Audit status",
        "profile.audit.active": "Active — grants logged",
        "profile.audit.none": "No grants",
        "profile.audit.revoked_app_exit": "Revoked on exit",
        "profile.temporary_scopes.note": "Task scopes (files, sites, input automation, development, screen vision, software) are auto-included when needed — no manual switches.",
        "profile.bundle.file_workspace": "File access (workspace)",
        "profile.bundle.diagnostics": "Diagnostics",
        "profile.bundle.network_readonly": "Read-only network",
        "profile.bundle.logs": "Logs",
        "profile.bundle.app_launch": "Application launch",
        "profile.bundle.browser_automation": "Browser automation",
        "profile.bundle.sites_apps": "Sites & apps",
        "profile.bundle.clipboard": "Clipboard",
        "profile.bundle.file_write_limited": "Limited file write",
        "profile.bundle.keyboard_automation": "Keyboard automation",
        "profile.bundle.mouse_automation": "Mouse automation",
        "profile.bundle.screen_vision": "Screen vision",
        "profile.bundle.development": "Development",
        "profile.bundle.software_management": "Software management",
        "profile.bundle.documents": "Documents",
        "profile.bundle.automation": "Automation",
        "profile.bundle.root_operations": "Root operations",
        "profile.bundle.shell": "Shell",
        "profile.bundle.package_management": "Package management",
        "profile.bundle.system_configuration": "System configuration",
        "profile.bundle.service_management": "Service management",
        "profile.bundle.device_management": "Device management",
        "cap.grants.active.title": "Granted permissions",
        "ai_providers.title": "AI Providers",
        "ai_providers.subtitle": "List synced from server admin settings. Online only when an API key is configured in Admin. Browser login does not connect the agent — add keys in Admin → Settings.",
        "ai_providers.col.name": "Provider",
        "ai_providers.col.status": "Status",
        "ai_providers.col.account": "Account",
        "ai_providers.col.capabilities": "Capabilities",
        "ai_providers.col.cost": "Cost",
        "ai_providers.col.priority": "Priority",
        "ai_providers.status.online": "Online",
        "ai_providers.status.offline": "Offline",
        "ai_providers.account.connected": "Connected",
        "ai_providers.account.not_connected": "Not connected",
        "ai_providers.account.pending": "Pending",
        "ai_providers.honesty.not_configured": "Not configured on server",
        "ai_providers.honesty.no_orchestra_executor": "Listed — no Orchestra executor yet",
        "ai_providers.honesty.image_pipeline": "Image pipeline (admin)",
        "ai_providers.honesty.orchestra_executor": "Orchestra executor ready",
        "ai_providers.hint.needs_admin_api_key": "Add {setting_key} in Admin → Settings (browser login cannot connect the agent).",
        "ai_providers.hint.complete_browser_login": "Finish login in the browser, then confirm in the dialog.",
        "ai_providers.hint.agent_unavailable": "Agent cannot use this provider yet — no server API key path.",
        "ai_providers.hint.cursor_desktop_only": "Cursor has no public agent API — desktop app only. Use OpenAI or Claude for cloud coding.",
        "ai_providers.hint.configure_local": "Set OLLAMA_BASE_URL in Admin → Settings.",
        "ai_providers.hint.not_configured": "Not configured on server.",
        "ai_providers.action.confirm_login": "Confirm login",
        "ai_providers.sync.ok": "Synced with server admin settings.",
        "ai_providers.action.connect": "Connect Account",
        "ai_providers.action.register": "Register",
        "ai_providers.action.disconnect": "Disconnect",
        "ai_providers.action.refresh": "Refresh",
        "ai_providers.action.refreshing": "Refreshing…",
        "ai_providers.loading": "Loading providers…",
        "ai_providers.action.enable": "Enable",
        "ai_providers.action.disable": "Disable",
        "ai_providers.consent.title": "Connect AI provider?",
        "ai_providers.consent.body": "IuVe will open the official {provider} login page. You sign in there — IuVe never asks for or stores your password.",
        "ai_providers.consent.confirm": "Open official login",
        "ai_providers.consent.cancel": "Cancel",
        "ai_providers.complete.title": "Finished signing in?",
        "ai_providers.complete.body": "Confirm only after you logged in on the official {provider} site.",
        "ai_providers.complete.confirm": "Yes, connected",
        "ai_providers.disconnect.title": "Disconnect provider?",
        "ai_providers.disconnect.body": "Disconnect {provider}? You can reconnect anytime.",
        "ai_providers.disconnect.confirm": "Disconnect",
        "ai_providers.error.unavailable": "AI Providers service is unavailable.",
        "ai_providers.error.auth": "Pair this device to manage AI providers.",
        "ai_providers.error.invalid_auth": "Device authorization failed. Re-pair this device to manage AI providers.",
        "ai_providers.empty": "No providers configured.",
        "label.admission_model": "Admission Model",
        "label.deny_by_default": "Deny by Default",
        "label.explicit_user_consent_required": "Explicit User Consent",
        "label.pairing_required": "Pairing Required",
        "label.allowlisted_commands_only": "Allowlisted Commands Only",
        "label.root_profile_gated": "Root Profile Gated",
        "label.approval_ticket_required": "Approval Ticket Required",
        "label.rollback_instruction_required": "Rollback Instruction Required",
        "label.active_trust_state": "Active Trust State",
        "label.active_runtime_state": "Active Runtime State",
        "label.trust_levels": "Trust Levels",
        "label.required_capabilities": "Required Capabilities",
        "label.capability_contract": "Capability Contract",
        "updates.placeholder": "Updates stay policy-gated with read-only visibility in local console.",
        "label.update_channel": "Update Channel",
        "label.remote_update_allowed": "Remote Update Allowed",
        "label.policy": "Policy",
        "label.note": "Note",
        "dialog.restart.title": "Restart agent service?",
        "dialog.restart.body": "This action will restart iuve-connect-desktop-agent.service for the current user.",
        "dialog.confirm": "Confirm",
        "dialog.cancel": "Cancel",
        "dialog.export.title": "Diagnostics placeholder exported",
        "dialog.export.body": "Saved to: {path}",
        "dialog.ok": "OK",
        "dialog.update.check.title": "Update check",
        "dialog.update.check.body": "Status: {status}\nReason: {reason}",
        "dialog.update.available.title": "Update available",
        "dialog.update.available.body": "A newer version is available: {version}. Install now?",
        "dialog.update.install": "Install Update",
        "dialog.update.result.title": "Update result",
        "dialog.update.result.body": "Status: {status}\nReason: {reason}",
        "updates.page.title": "Agent Updates",
        "updates.page.subtitle": "Safe, policy-gated updates with explicit pairing and consent.",
        "updates.status.title": "Update Status",
        "updates.troubleshooting.title": "Troubleshooting",
        "updates.pairing.required.hint": "Pair this device to enable update checks.",
        "updates.pairing.required.title": "Pairing Required",
        "updates.pairing.required.message": "Device is not paired. Pair this device before checking updates.",
        "updates.pairing.required.pair": "Pair Device",
        "updates.pairing.required.help": "Open Pairing Help",
        "updates.check.available": "A newer version is available.",
        "updates.check.available_version": "Update available: {version}",
        "updates.check.up_to_date": "Your agent is up to date.",
        "updates.check.up_to_date_version": "You are on the latest version ({version}).",
        "updates.check.signature_blocked": "Upgrade blocked: device is not eligible for unsigned stable-channel updates.",
        "updates.check.invalid_release_checksum": "Release metadata is incomplete (missing SHA256 checksum). Try again later.",
        "updates.check.missing_release_version": "Release metadata is incomplete (missing version). Try again later.",
        "updates.check.channel_disabled": "Updates are disabled for this device (channel: disabled).",
        "updates.check.channel_mismatch": "Release channel does not match your configured update channel.",
        "updates.check.unsupported_package": "Release package format is not supported on this device.",
        "updates.check.checksum_mismatch": "Downloaded package failed checksum verification. Try again later.",
        "updates.check.dpkg_not_found": "dpkg was not found on this system. Install manually with apt.",
        "updates.check.release_unavailable": "No installable release is published on the stable channel yet.",
        "updates.check.release_download_failed": "Could not download the release package. Check network and try again.",
        "updates.check.temporary_unavailable_detail": "Update check failed: {detail}",
        "updates.check.release_lookup_failed": "Could not fetch release information. Try again later.",
        "updates.check.update_check_exception": "Update check failed due to an internal error. Try again later.",
        "updates.check.temporary_unavailable": "Update check is temporarily unavailable. Try again later.",
        "updates.status.version": "Current Version",
        "updates.status.pairing": "Pairing Status",
        "updates.status.channel": "Channel",
        "updates.actions.title": "Actions",
        "updates.policy.read_only_visibility": "View-only updates (capability grants unchanged)",
        "updates.policy.trusted_self_update": "Trusted device may self-update from the official stable channel (checksum-verified).",
        "updates.policy.paired_official_self_update": "Paired device may self-update from the official stable channel (checksum-verified; trust confirmation may still be pending).",
        "updates.policy.pairing_not_trusted": "Pairing complete — trust state does not allow self-update yet.",
        "updates.policy.pairing_required": "Pair this device to check and install updates.",
        "updates.policy.channel_disabled": "Update channel is disabled on this device.",
        "updates.policy.revoked_no_update": "Device trust is revoked — self-update is disabled.",
        "updates.check.install_started": "Downloading and installing update. You may be prompted for administrator password.",
        "updates.check.install_failed": "Update installation failed. Try: sudo dpkg -i ./iuve-connect-desktop-agent_{version}_all.deb",
        "updates.check.install_failed_detail": "Update installation failed ({version}): {detail}",
        "updates.check.already_installed_version": "Version {version} is already installed. No update needed.",
        "updates.check.privilege_installer_unavailable": "Administrator privileges are required. Install manually: sudo dpkg -i <downloaded.deb>",
        "updates.check.installed": "Update installed successfully. Restart the agent service if prompted.",
        "updates.note.non_autonomous": "Update operations remain gated and non-autonomous.",
        "updates.note.discover_troubleshooting": "If Discover fails to install due to third-party APT source errors, fix system repositories first or run: sudo dpkg -i ./iuve-connect-desktop-agent_{version}_all.deb",
        "cap.section.title": "Capability Control Center",
        "cap.section.subtitle": "All capabilities are OFF by default. Local consent required.",
        "cap.file_access": "File Access",
        "cap.application_control": "Application Control",
        "cap.mouse_control": "Mouse Control",
        "cap.keyboard_control": "Keyboard Control",
        "cap.network_control": "Network Control",
        "cap.software_management": "Software Management",
        "cap.root_operations": "Root Operations",
        "cap.screen_vision": "Screen Vision",
        "cap.grant": "Grant",
        "cap.revoke": "Revoke",
        "cap.expires": "Expires",
        "cap.granted_at": "Granted At",
        "cap.no_expiry": "No expiry",
        "cap.status.enabled": "Enabled",
        "cap.status.disabled": "Disabled",
        "cap.status.expired": "Expired",
        "cap.risk.low": "Low risk",
        "cap.risk.medium": "Medium risk",
        "cap.risk.high": "High risk",
        "cap.risk.critical": "CRITICAL",
        "cap.expiry.15m": "15 minutes",
        "cap.expiry.1h": "1 hour",
        "cap.expiry.8h": "8 hours",
        "cap.expiry.permanent": "Permanent",
        "cap.expiry.24h": "24 hours",
        "cap.expiry.reboot": "Until reboot",
        "cap.expiry.one_shot": "One time only",
        "cap.page.title": "Security & Agent Permissions",
        "cap.page.subtitle": "Manage IuVe AI permissions on this device. All high-risk actions require your explicit consent and are recorded in the audit log.",
        "cap.trust_badge.label": "Current trust level",
        "cap.trust_base": "Base level",
        "cap.avatar.mode.label": "Avatar Mode",
        "cap.avatar.mode.inactive": "Inactive",
        "cap.avatar.mode.enabled": "Enabled",
        "cap.root_session.label": "Root Session",
        "cap.root_session.none": "None active",
        "cap.capabilities_count": "Active grants: {granted}/{total}",
        "cap.canonical_count": "{granted}/{total}",
        "avatar.device_context.scan.just_now": "just now",
        "avatar.device_context.scan.minutes_ago": "{m}m ago",
        "avatar.device_context.scan.hours_ago": "{h}h ago",
        "cap.expires_in.label": "Expires In",
        "cap.expires_in.none": "No active grants",
        "cap.expires_in.expired": "Expired",
        "cap.expires_in.minutes": "{m} min",
        "cap.expires_in.hours": "{h} h",
        "avatar.card.trust": "Trust Level",
        "avatar.card.avatar": "Avatar Mode",
        "avatar.card.root": "Root Session",
        "avatar.card.capabilities": "Active Grants",
        "footer.connected": "Connected",
        "footer.trust": "Trusted",
        "footer.heartbeat": "Heartbeat",
        "footer.backend": "Backend",
        "footer.expires": "Expires In",
        "cap.table.title": "Capability Management",
        "cap.col.permission": "Permission",
        "cap.col.risk": "Risk",
        "cap.col.status": "Status",
        "cap.col.expiry": "Expires",
        "cap.col.actions": "Actions",
        "cap.policy.link": "About access policy",
        "cap.active_permissions.title": "Granted permissions",
        "cap.no_active_permissions": "No active permissions",
        "cap.no_active_permissions.sub": "All capabilities disabled. Agent running in safe mode.",
        "cap.audit.open": "Open Capability Audit",
        "cap.audit.dialog.title": "Capability Audit Log",
        "cap.audit.empty": "Audit log is empty.",
        "cap.status_bar.model": "Model",
        "cap.status_bar.consent": "Explicit consent",
        "cap.status_bar.consent_required": "\u2717 Required",
        "cap.status_bar.heartbeat": "Last heartbeat",
        "cap.status_bar.never": "Never",
        "cap.description.file_access": "Read/write user files",
        "cap.description.application_control": "Launch, close, focus windows",
        "cap.description.mouse_control": "Cursor movement, clicks",
        "cap.description.keyboard_control": "Text input, key presses",
        "cap.description.network_control": "Network checks, diagnostics",
        "cap.description.software_management": "Install, update software",
        "cap.description.root_operations": "sudo, packages, services, system config",
        "cap.description.screen_vision": "Bounded desktop screenshot to verify results (read-only, not streaming)",
        "cap.granted_by_label": "Granted by",
        "cap.granted_at_label": "Granted at",
        "cap.expires_at_label": "Expires at",
        "cap.risk_level_label": "Risk level",
        "cap.refresh": "Refresh",
        "cap.col.grant": "Grant",
        "cap.status.not_granted": "Not granted",
        "cap.status.session": "Session (temporary)",
        "cap.status.blocked_plan": "Blocked by plan",
        "cap.grant_selection.title": "Choose permissions to grant",
        "cap.grant_selection.hint": "Check the capabilities you want to allow. Unchecked permissions stay denied until you grant them.",
        "cap.grant_selection.apply": "Apply permissions",
        "cap.grant_selection.selected": "Selected: {selected}/{total}",
        "cap.grant_selection.confirm.title": "Apply selected permissions?",
        "cap.grant_selection.confirm.body": "You are about to grant {count} capability(ies) on this device. This will be synced to your account.",
        "cap.grant_selection.confirm.high_risk": "High-risk capabilities included: {caps}",
        "cap.grant_selection.empty.title": "No permissions selected",
        "cap.grant_selection.empty.body": "Select at least one capability to grant, or use a preset bundle.",
        "cap.preset.minimal": "Minimal",
        "cap.preset.standard": "Standard",
        "cap.preset.assistant": "Assistant Mode",
        "cap.preset.full": "Full",
        "cap.preset.expert": "Expert",
        "cap.preset.minimal.summary": "Files and safe diagnostics only.",
        "cap.preset.standard.summary": "Files, websites, apps, and basic automation.",
        "cap.preset.assistant.summary": "Everyday PC assistance with confirmations for risky actions.",
        "cap.preset.full.summary": "Desktop automation, screen vision, and software management.",
        "cap.preset.expert.summary": "Advanced control — Stop Zone still protects publishing, payments, and system changes.",
        "cap.plain.file_access": "IuVe can work with your files in the IuVe workspace.",
        "cap.plain.application_control": "IuVe can open and focus apps when you approve a task.",
        "cap.plain.mouse_control": "IuVe can move the mouse only when you approve a task.",
        "cap.plain.keyboard_control": "IuVe can type text only when you approve a task.",
        "cap.plain.network_control": "IuVe can run safe network checks and open websites you allow.",
        "cap.plain.software_management": "IuVe can check for updates — installing software still needs confirmation.",
        "cap.plain.root_operations": "System-level actions require separate confirmation.",
        "cap.plain.screen_vision": "IuVe can look at the screen to understand what is open.",
        "cap.preset.confirm.body": "Preset «{preset}» selected. Confirm to apply these permissions.",
        "cap.grant_wizard.title": "Set up agent permissions",
        "cap.grant_wizard.body": "IuVe runs in safe mode until you choose which permissions to grant. Select capabilities in the checklist below and click Apply permissions.",
        "cap.grant_wizard.open": "Choose permissions",
        "cap.grant_wizard.later": "Later",
        "cap.revoke_all": "Revoke All",
        "cap.revoke_all_sessions": "Revoke all sessions",
        "cap.revoke_all_grants": "Reset permissions",
        "cap.action_sessions.title": "Temporary task sessions",
        "cap.action_sessions.subtitle": "Time-limited access for a single task. Ends automatically when the timer expires.",
        "cap.action_sessions.empty": "No active sessions. Pick a task below to reduce confirmation prompts for that work.",
        "cap.action_sessions.group.common": "Common tasks",
        "cap.action_sessions.group.advanced": "Advanced",
        "cap.action_sessions.start.confirm": "Start session",
        "cap.action_sessions.revoke": "Revoke",
        "cap.action_sessions.active.title": "Active now",
        "cap.action_sessions.running.title": "Running now",
        "cap.action_sessions.active.row": "{title} — {remaining} left",
        "cap.action_sessions.cloud.title": "Cloud suggestions",
        "cap.action_sessions.cloud.empty": "No pending cloud suggestions.",
        "cap.action_sessions.card.files.user_title": "Files & folders",
        "cap.action_sessions.card.files.duration": "2 h",
        "cap.action_sessions.card.files.summary": "Read, write, and organize files in the IuVe workspace",
        "cap.action_sessions.card.websites.user_title": "Browser assistance",
        "cap.action_sessions.card.websites.duration": "1 h",
        "cap.action_sessions.card.websites.summary": "Open sites, navigate pages, and type in browser forms",
        "cap.action_sessions.card.office_documents.user_title": "Office documents",
        "cap.action_sessions.card.office_documents.duration": "1 h",
        "cap.action_sessions.card.office_documents.summary": "Open LibreOffice, Writer, and edit documents on your PC",
        "cap.action_sessions.card.maintenance.user_title": "PC maintenance",
        "cap.action_sessions.card.maintenance.duration": "30 min",
        "cap.action_sessions.card.maintenance.summary": "Safe upkeep checks and package dry-runs",
        "cap.action_sessions.card.development.user_title": "Development",
        "cap.action_sessions.card.development.duration": "2 h",
        "cap.action_sessions.card.development.summary": "Coding in IDE with project files",
        "cap.action_sessions.card.full_assistance.user_title": "Full assistant",
        "cap.action_sessions.card.full_assistance.duration_label": "30 / 60 / 120 min",
        "cap.action_sessions.card.full_assistance.summary": "Files, websites, apps, and desktop help for a limited time",
        "cap.action_sessions.card.full_assistance.choose.title": "How long?",
        "cap.action_sessions.card.full_assistance.choose.body": "Choose how long IuVe may assist with everyday PC tasks.",
        "cap.action_sessions.card.full_assistance.duration_option": "{minutes} minutes",
        "cap.action_sessions.card.full_assistance.title": "Start full assistance for {minutes} minutes?",
        "cap.action_sessions.card.full_assistance.body": "For {minutes} minutes IuVe may help with files, websites, apps, and desktop tasks. Publishing, payments, and system changes still need your confirmation.",
        "cap.action_sessions.card.web_apps.user_title": "Sites & apps",
        "cap.action_sessions.card.web_apps.duration": "1 h",
        "cap.action_sessions.card.web_apps.summary": "Open websites or launch desktop programs",
        "cap.action_sessions.card.web_apps.choose.title": "Which session?",
        "cap.action_sessions.card.web_apps.choose.body": "Pick websites or desktop apps for this temporary session.",
        "cap.action_sessions.card.desktop.user_title": "Input automation",
        "cap.action_sessions.card.desktop.duration": "30 min",
        "cap.action_sessions.card.desktop.summary": "Mouse and keyboard automation on the desktop",
        "cap.action_sessions.card.coding_maintenance.user_title": "Development",
        "cap.action_sessions.card.coding_maintenance.duration": "2 h",
        "cap.action_sessions.card.coding_maintenance.summary": "Coding in IDE or limited PC maintenance",
        "cap.action_sessions.card.coding_maintenance.choose.title": "Which development session?",
        "cap.action_sessions.card.coding_maintenance.choose.body": "Pick coding or maintenance for this temporary session.",
        "cap.action_sessions.preset.files.user_title": "Work with files",
        "cap.action_sessions.preset.files.summary": "Read and write in the IuVe workspace",
        "cap.action_sessions.preset.files.duration": "2 h",
        "cap.action_sessions.preset.files.title": "Start a file work session?",
        "cap.action_sessions.preset.files.body": "For 2 hours the agent may read and change files in your IuVe workspace. Fewer popups for this task; access ends automatically.",
        "cap.action_sessions.preset.web.user_title": "Websites & ChatGPT",
        "cap.action_sessions.preset.web.summary": "Open sites and type in browser chat windows",
        "cap.action_sessions.preset.web.duration": "1 h",
        "cap.action_sessions.preset.web.title": "Start a web session?",
        "cap.action_sessions.preset.web.body": "For 1 hour the agent may open websites and type into browser chat pages (ChatGPT and similar). Access ends automatically.",
        "cap.action_sessions.preset.apps.user_title": "Apps on PC",
        "cap.action_sessions.preset.apps.summary": "Launch and focus desktop applications",
        "cap.action_sessions.preset.apps.duration": "1 h",
        "cap.action_sessions.preset.apps.title": "Start an apps session?",
        "cap.action_sessions.preset.apps.body": "For 1 hour the agent may open and focus programs on this computer. Access ends automatically.",
        "cap.action_sessions.preset.desktop.user_title": "Mouse & keyboard",
        "cap.action_sessions.preset.desktop.summary": "Automated clicks and typing on the desktop",
        "cap.action_sessions.preset.desktop.duration": "30 min",
        "cap.action_sessions.preset.desktop.title": "Start a desktop automation session?",
        "cap.action_sessions.preset.desktop.body": "For 30 minutes the agent may move the mouse and type on the desktop. High risk — each action still needs your permanent permission. Access ends automatically.",
        "cap.action_sessions.preset.network.user_title": "Network check",
        "cap.action_sessions.preset.network.summary": "Ping, DNS and connection diagnostics",
        "cap.action_sessions.preset.network.duration": "30 min",
        "cap.action_sessions.preset.network.title": "Start a network check session?",
        "cap.action_sessions.preset.network.body": "For 30 minutes the agent may run safe network diagnostics (ping, DNS, etc.). Access ends automatically.",
        "cap.action_sessions.preset.coding.user_title": "Code & Cursor",
        "cap.action_sessions.preset.coding.summary": "Files, IDE apps and keyboard for coding",
        "cap.action_sessions.preset.coding.duration": "2 h",
        "cap.action_sessions.preset.coding.title": "Start a coding session?",
        "cap.action_sessions.preset.coding.body": "For 2 hours the agent may work with project files, open Cursor/IDE and type there. Access ends automatically.",
        "cap.action_sessions.preset.maintenance.user_title": "PC maintenance",
        "cap.action_sessions.preset.maintenance.summary": "Package install dry-run and limited upkeep",
        "cap.action_sessions.preset.maintenance.duration": "30 min",
        "cap.action_sessions.preset.maintenance.title": "Start a maintenance session?",
        "cap.action_sessions.preset.maintenance.body": "For 30 minutes the agent may run package install dry-runs and similar limited upkeep checks. Access ends automatically.",
        "cap.action_sessions.preset.document.user_title": "Work with files",
        "cap.action_sessions.preset.document.summary": "Read and write in the IuVe workspace",
        "cap.action_sessions.preset.document.duration": "2 h",
        "cap.action_sessions.preset.document.title": "Start a file work session?",
        "cap.action_sessions.preset.document.body": "For 2 hours the agent may read and change files in your IuVe workspace. Fewer popups for this task; access ends automatically.",
        "cap.action_sessions.preset.browser.user_title": "Websites & ChatGPT",
        "cap.action_sessions.preset.browser.summary": "Open sites and type in browser chat windows",
        "cap.action_sessions.preset.browser.duration": "1 h",
        "cap.action_sessions.preset.browser.title": "Start a web session?",
        "cap.action_sessions.preset.browser.body": "For 1 hour the agent may open websites and type into browser chat pages. Access ends automatically.",
        "avatar.action.cloud_suggestion.title": "Cloud suggested action",
        "avatar.action.cloud_suggestion.body": "Structured action proposed by cloud planner.",
        "dialog.cap.revoke_all.title": "Revoke all capabilities?",
        "dialog.cap.revoke_all.body": "This will disable every capability grant on this device. IuVe AI will run in safe mode until you grant permissions again.",
        "dialog.cap.revoke_all_sessions.title": "Revoke all task sessions?",
        "dialog.cap.revoke_all_sessions.body": "This ends every temporary task session. Permanent permissions stay unchanged.",
        "dialog.cap.revoke_all_grants.title": "Reset all permissions?",
        "dialog.cap.revoke_all_grants.body": "This disables every permanent permission on this device. IuVe AI will run in safe mode until you grant access again.",
        "cap.command_log.title": "Command Action Log",
        "cap.command_log.empty": "No command events recorded yet.",
        "cap.command_log.filter.all": "All",
        "cap.command_log.filter.allow": "Allowed",
        "cap.command_log.filter.deny": "Denied",
        "dialog.command.confirm.title": "Confirm command execution",
        "dialog.command.confirm.body": "Command: {command}\nRisk: {risk}\nSource: {source}\nReason: {reasoning}\nRollback: {rollback}",
        "dialog.command.confirm.execute": "Execute",
        "dialog.command.confirm.decline": "Decline",
        "dialog.command.confirm.always_allow": "Always allow this type",
        "dialog.command.confirm.details": "More details",
        "dialog.command.confirm.details.title": "Command payload",
        "dialog.command.double_confirm.title": "High-risk action — stop zone",
        "dialog.command.double_confirm.body": "Stop-zone: {stop_zone}\nCommand: {command}\nRisk: {risk}\n\nThis action requires owner double confirmation before execution.",
        "dialog.command.double_confirm.continue": "Continue to verification",
        "dialog.command.double_confirm.verify.title": "Owner verification required",
        "dialog.command.double_confirm.verify.body": "Re-confirm execution of {command} (stop-zone: {stop_zone}).\nType OWNER to approve this high-risk action.",
        "dialog.command.double_confirm.verify.execute": "Verify and execute",
        "cap.pending_confirmation.title": "Pending command confirmation",
        "cap.pending_confirmation.body": "Command {command} ({command_id}…) is waiting for your decision.",
        "cap.pending_confirmation.open_dialog": "Confirm command",
        "cap.pending_confirmation.awaiting_agent": "Command {command} ({command_id}…) approved — waiting for agent service to execute.",
        "cap.pending_confirmation.fallback_body": "Confirm execution of command {command}? (Simplified dialog — full details unavailable.)",
        "dialog.cap.grant.title": "Grant capability?",
        "dialog.cap.grant.body": "Grant {capability} to IuVe AI?\nRisk level: {risk}\nExpires: {expiry}\n\nYou can revoke this at any time.",
        "dialog.cap.root.title": "Root Operations — CRITICAL RISK",
        "dialog.cap.root.body": "This permission allows IuVe AI to execute privileged operations on this device.\nGrant only if you fully trust this system.",
        "dialog.cap.root.confirm": "Grant Root Access",
        "dialog.cap.revoke.title": "Revoke capability?",
        "dialog.cap.revoke.body": "Revoke {capability}?\nIuVe AI will no longer be able to use this capability.",
    },
    "ru": {
        "app.title": "IuVe Connect Agent Console",
        "nav.avatar": "Аватар",
        "nav.dashboard": "Панель",
        "nav.devices": "Устройства",
        "nav.diagnostics": "Диагностика",
        "nav.security": "Безопасность",
        "nav.updates": "Обновления",
        "label.runtime_state": "Состояние рантайма",
        "label.trust_state": "Состояние доверия",
        "label.paired": "Спарен",
        "label.device_state": "Состояние устройства",
        "label.last_heartbeat_at": "Последний heartbeat",
        "label.app_version": "Версия агента",
        "label.backend_base_url": "URL бэкенда",
        "label.service_status": "Статус сервиса",
        "saas.title": "Тариф IuVe AI и полномочия",
        "saas.plan": "Текущий тариф",
        "saas.subscription": "Подписка",
        "saas.capabilities": "Возможности",
        "saas.usage": "Месячное использование",
        "saas.providers": "AI-провайдеры",
        "saas.allowed": "Разрешены",
        "saas.blocked": "Заблокированы",
        "saas.reason": "Причина",
        "saas.unavailable": "Выполните pairing для загрузки тарифа SaaS",
        "saas.refresh": "Обновить данные",
        "saas.upgrade": "Обновить тариф",
        "saas.usage_row": "{feature}: {used}/{limit}",
        "saas.capability_row": "{id}: {status}",
        "saas.capability.allowed": "доступно",
        "saas.capability.denied": "заблокировано",
        "action.open_connect": "Открыть IuVe Connect",
        "action.open_logs": "Открыть логи",
        "action.restart_agent": "Перезапустить агент",
        "action.check_update": "Проверить обновление",
        "action.export_diagnostics": "Экспорт диагностики",
        "header.refresh": "Обновить",
        "header.settings": "Настройки",
        "header.profile": "Профиль",
        "header.fullscreen.enter": "Во весь экран",
        "header.fullscreen.exit": "Оконный режим",
        "header.device": "Устройство",
        "header.trust": "Доверие",
        "header.avatar_mode": "Режим аватара",
        "header.active_permissions": "Активные полномочия",
        "header.connection": "Подключение",
        "header.orchestra": "Интеллект",
        "status.orchestra.cloud_active": "Облачный Orchestra активен",
        "status.orchestra.local_fallback": "Локальный резервный режим",
        "status.orchestra.offline": "Офлайн / сервер недоступен",
        "status.orchestra.cloud_active.bullet1": "Полный облачный интеллект через Orchestra на iuve.eu",
        "status.orchestra.cloud_active.bullet2": "Учитываются тариф, grants и аудит вашего аккаунта",
        "status.orchestra.cloud_active.bullet3": "Основной маршрут для advisory и intent в Avatar",
        "status.orchestra.local_fallback.bullet1": "Сервер iuve.eu недоступен или Orchestra отключён",
        "status.orchestra.local_fallback.bullet2": "Простые действия на устройстве по-прежнему доступны",
        "status.orchestra.local_fallback.bullet3": "Локальный Ollama может помочь, если уже установлен (не обязателен)",
        "status.orchestra.offline.bullet1": "Нет облака и не обнаружен локальный LLM",
        "status.orchestra.offline.bullet2": "Только базовые fast-path команды устройства (без AI advisory)",
        "status.orchestra.offline.bullet3": "Выполните pairing и восстановите связь для полного интеллекта",
        "modal.orchestra_status.title": "Режим интеллекта IuVe",
        "modal.orchestra_status.done": "Закрыть",
        "modal.orchestra_status.check": "Проверить Orchestra",
        "status.orchestra.reason.label": "Почему локальный режим",
        "status.orchestra.detail.label": "Диагностика",
        "status.orchestra.reason.not_connected": "В локальном хранилище нет учётных данных устройства.",
        "status.orchestra.reason.backend_unreachable": "Не удаётся достучаться до health endpoint iuve.eu.",
        "status.orchestra.reason.account_unverified": "Бэкенд не подтвердил профиль устройства.",
        "status.orchestra.reason.orchestra_disabled": "Cloud Orchestra отключён на сервере.",
        "status.orchestra.reason.entitlement_denied": "Ваш тариф не включает облачные AI-провайдеры.",
        "status.orchestra.reason.probe_failed": "Проба Orchestra не прошла, хотя устройство paired.",
        "status.model.chip.orchestra": "Orchestra",
        "status.model.chip.local": "Локально",
        "status.model.chip.local_default": "ollama",
        "status.model.chip.rules": "Локальные правила",
        "status.model.chip.offline": "Офлайн",
        "avatar.chat.system": "Статус",
        "avatar.execution.timeline.intent": "Намерение",
        "avatar.execution.timeline.classify": "Классификация",
        "avatar.execution.timeline.planner": "Планировщик (Orchestra)",
        "avatar.execution.timeline.planner_local": "Планировщик (локальный резерв)",
        "avatar.execution.timeline.policy": "Политика",
        "avatar.execution.timeline.policy.safe": "Safe (запись в IuVeWorkspace)",
        "avatar.execution.timeline.policy.balanced": "Balanced (Desktop/Загрузки/Документы)",
        "avatar.execution.timeline.policy.trusted": "Trusted (весь home)",
        "avatar.execution.timeline.execute": "Исполнитель",
        "avatar.execution.timeline.verifier": "Верификатор",
        "avatar.execution.timeline.done": "Готово",
        "avatar.execution.timeline.error": "Ошибка",
        "avatar.execution.timeline.ok": "✓",
        "avatar.execution.timeline.fail": "✗",
        "avatar.execution.timeline.layer.orchestra": "слой Orchestra/бэкенд",
        "avatar.execution.timeline.layer.planner": "слой планировщика",
        "avatar.execution.timeline.layer.agent": "десктоп-агент",
        "avatar.execution.timeline.layer.classify": "слой классификации",
        "avatar.chat.response.advisory_consultation_required": (
            "Задача требует консультации, не действий на ПК. "
            "Облачный планировщик не смог разложить её на шаги устройства — уточните вопрос или сформулируйте конкретное действие."
        ),
        "avatar.chat.response.orchestra_error_detail": "Диагностика Orchestra: {detail}",
        "header.owner": "Аккаунт",
        "splash.title": "IuVe Connect Agent",
        "splash.subtitle": "Загрузка консоли — pairing, grants, профиль устройства и тариф SaaS.",
        "splash.version": "Версия {version}",
        "splash.footer": "Разработчик: {developer} · {company}",
        "splash.stage.init": "Запуск…",
        "splash.stage.pairing": "Проверка pairing…",
        "splash.stage.grants": "Синхронизация grants…",
        "splash.stage.device_scan": "Сканирование устройства…",
        "splash.stage.saas": "Загрузка тарифа и профиля…",
        "modal.action.cancel": "Отмена",
        "modal.action.done": "Готово",
        "modal.action.open_permissions": "Открыть полномочия",
        "modal.plan_execute.title": "Выполнить план?",
        "modal.plan_execute.body": "Агент выполнит предложенный многошаговый план на этом устройстве. Продолжить?",
        "modal.plan_execute.confirm": "Выполнить план",
        "modal.session_start.title": "Запустить сессию действий?",
        "modal.session_start.body": "Выдайте ограниченную по времени сессию для этого пресета перед выполнением.",
        "modal.session_start.confirm": "Запустить сессию",
        "modal.permission_required.title": "Требуется полномочие",
        "modal.permission_required.body": "Подтвердите {capability} в центре полномочий, чтобы продолжить.",
        "modal.browser_wait.title": "Требуется действие в браузере или приложении",
        "modal.browser_wait.body": "Агент ждёт вашего действия в браузере. Нажмите Готово когда закончите.",
        "modal.agent_waiting.title": "Агент ждёт вас",
        "modal.agent_waiting.body": "Завершите требуемое действие и подтвердите продолжение.",
        "modal.vision_fail.title": "Не удалось подтвердить результат на экране",
        "modal.vision_fail.body": "Агент не нашёл ожидаемый текст ({expected_text}). Исправьте вручную и нажмите «Повторить» для повторной проверки (попытка {attempt}/{max_attempts}).",
        "modal.vision_fail.ollama_hint": "Только для разработки: локальный Ollama требует ollama pull llava и AVATAR_DESKTOP_VISION_LOCAL_ENABLED=true.",
        "modal.vision_fail.cloud_hint": "Проверка через облако IuVe Orchestra…",
        "modal.vision_fail.retry": "Повторить проверку",
        "avatar.status.header": "Avatar Chat Shell | Рантайм: {runtime} | Доверие: {trust}",
        "avatar.title": "IuVe Avatar",
        "avatar.intro": "{device} | Чем помочь с этим устройством сегодня?",
        "avatar.conversation.title": "Диалог",
        "avatar.input.placeholder": "Спросите IuVe о цели на этом устройстве…",
        "avatar.input.attach": "Контекст или открыть полномочия",
        "avatar.chat.mode.auto": "Авто",
        "avatar.chat.mode.local": "Только локально",
        "avatar.chat.mode.cloud_assisted": "С облаком",
        "avatar.chat.mode.hint": "IuVe сам выбирает маршрут ИИ — не ручной выбор модели",
        "avatar.chat.working.badge": "{count} в работе",
        "avatar.chat.tag.multitask": "Мультизадача",
        "avatar.chat.tag.dismiss": "Убрать метку контекста",
        "avatar.action.stop": "Остановить план",
        "avatar.device_context.title": "Контекст устройства",
        "avatar.device_context.cpu": "CPU",
        "avatar.device_context.ram": "RAM",
        "avatar.device_context.disk": "Диск",
        "avatar.device_context.os": "ОС",
        "avatar.device_context.apps": "Приложения",
        "avatar.device_context.scan": "Сканирование",
        "avatar.device_context.trust": "Уровень доверия",
        "avatar.device_context.capabilities": "Полномочия",
        "avatar.device_context.root": "Root-сессия",
        "avatar.action.open_permissions": "Открыть центр полномочий",
        "avatar.action.open_diagnostics": "Открыть диагностику",
        "avatar.action.cancel": "Отмена",
        "avatar.action.send": "Отправить",
        "avatar.action.session_start": "Запустить",
        "avatar.action.session_skip": "Пропустить",
        "avatar.input.voice": "Голосовой ввод",
        "avatar.input.voice_not_configured": "Голосовой ввод на этом устройстве не настроен.",
        "avatar.input.voice_deps_missing": (
            "Голосовой ввод не настроен. Переустановите агент (0.2.0.5+) "
            "или установите зависимости: sudo apt install python3-pyaudio"
        ),
        "avatar.input.voice_pyaudio_missing": (
            "Захват микрофона недоступен. Установите: sudo apt install python3-pyaudio portaudio19-dev"
        ),
        "avatar.input.voice_capture_failed": "Не удалось записать голос. Проверьте доступ к микрофону.",
        "avatar.action.execute": "Выполнить",
        "avatar.action.execute_plan": "Выполнить план",
        "avatar.advisory.only": "Только advisory-режим. Действие не выполняется.",
        "avatar.chat.accuracy_disclaimer": (
            "IuVeAI может допускать ошибки. Рекомендуем проверять важную информацию."
        ),
        "avatar.unpaired.banner": "Это устройство ещё не спарено. Выполните pairing, чтобы активировать IuVe Avatar.",
        "avatar.unpaired.pair": "Спарить устройство",
        "avatar.unpaired.permissions": "Открыть полномочия",
        "avatar.unpaired.diagnostics": "Просмотр диагностики",
        "avatar.chat.user": "Пользователь",
        "avatar.chat.avatar": "Аватар",
        "avatar.chat.welcome.tagline": (
            "IuVe Console — это вы на компьютере, только с суперсилами ИИ: говорите цель — "
            "агент сам выбирает сайт, программу или облако и доводит дело до результата, "
            "безопасно и с вашего разрешения."
        ),
        "avatar.chat.welcome": (
            "IuVe Console — это вы на компьютере, только с суперсилами ИИ.\n"
            "Говорите цель простыми словами — без команд и техно-жаргона.\n"
            "Агент сам выберет сайт, программу или облако и предложит план до результата.\n"
            "Всё безопасно: чувствительные шаги — только с вашего разрешения, с аудитом.\n"
            "Для автозапуска: trusted и нужные grants в центре полномочий."
        ),
        "avatar.chat.response.placeholder": "Я могу подсказать безопасные шаги для этого устройства. Выдайте полномочия в центре полномочий, когда нужны привилегированные операции.",
        "avatar.chat.response.permission_required": "Требуется полномочие: {capability}. Откройте центр полномочий для явного локального подтверждения.",
        "avatar.chat.response.permission_blocked_plan": "«{capability}» недоступно на вашем тарифе. Обновите подписку или выберите разрешённые полномочия в центре полномочий.",
        "avatar.chat.response.root_required": "Требуется root-одобрение: {capability}. Откройте центр полномочий для явного подтверждения. Из чата root-действия не выполняются.",
        "avatar.chat.response.diagnostics": "Локальная диагностика: рантайм={runtime}, доверие={trust}, последний heartbeat={heartbeat}. Подробности доступны в Диагностике.",
        "avatar.chat.response.action_ready": "Предложено действие: {action}. Проверьте карточку ниже и нажмите «Выполнить».",
        "avatar.chat.response.action_auto": "Выполняю разрешённое действие: {action}.",
        "avatar.chat.response.auto_executing": "Выполняю сейчас (trusted owner, grant активен).",
        "avatar.chat.response.auto_executing_plan": "Запускаю план автоматически (trusted owner, grants покрывают все шаги).",
        "avatar.chat.response.session_proposal": "Для этой задачи нужна сессия «{title}» ({duration}). Запустить?",
        "avatar.chat.response.session_started": "Сессия действий запущена: {title}.",
        "avatar.chat.response.session_skipped": "Продолжаю без сессии — каждый шаг будет с подтверждением.",
        "avatar.chat.response.session_pending_execute": "Сначала запустите или пропустите сессию действий.",
        "avatar.chat.response.chat_error": "Ошибка Avatar chat: {reason}.",
        "avatar.chat.response.thinking": "Думаю…",
        "avatar.chat.response.thinking_cloud": "Думаю через IuVe Orchestra…",
        "avatar.chat.response.trust_required": "Для выполнения действий из Avatar требуется состояние trusted.",
        "avatar.chat.response.no_capabilities": "Нет активных полномочий. Откройте центр полномочий и выдайте нужные grants.",
        "avatar.chat.response.execution_ok": "Действие выполнено.",
        "avatar.chat.response.execution_ok_mouse": "Курсор мыши сдвинут.",
        "avatar.chat.response.execution_ok_trash": "Корзина очищена.",
        "avatar.chat.response.execution_ok_folder": "Папка открыта: {path} ({status}).",
        "avatar.chat.response.execution_ok_app": "Приложение {application} запущено ({status}).",
        "avatar.chat.response.execution_ok_keyboard_cursor": (
            "Вопрос введён в Cursor: {text}"
        ),
        "avatar.chat.response.execution_ok_keyboard_libreoffice": (
            "Текст статьи введён в LibreOffice Writer: {text}"
        ),
        "avatar.chat.response.execution_ok_keyboard_browser": (
            "Вопрос введён в чат браузера: {text}"
        ),
        "avatar.chat.response.web_post_composer_found": "Composer найден на странице",
        "avatar.chat.response.web_post_draft_inserted": "Черновик вставлен в composer: {text}",
        "avatar.chat.response.web_post_draft_verified": "Черновик подтверждён в composer: {text}",
        "avatar.chat.response.web_post_publish_confirmation": (
            "Черновик готов. Для публикации требуется подтверждение."
        ),
        "avatar.chat.response.web_post_publish_clicked": "Кнопка «Опубликовать» нажата",
        "avatar.chat.response.web_post_publish_verified": "Пост опубликован и подтверждён",
        "avatar.chat.response.web_post_publish_failed": "Публикация не удалась: {text}",
        "avatar.chat.response.execution_ok_keyboard_browser_sent": (
            "Вопрос отправлен в чат: {text}"
        ),
        "avatar.chat.response.execution_ok_url": "Действие выполнено: открыт {url} ({status}).",
        "avatar.chat.response.execution_failed": "Действие не выполнено: {reason}.",
        "avatar.chat.response.execution_denied": "Действие отклонено политикой: {reason}.",
        "avatar.chat.error.application_not_allowlisted": (
            "Это приложение не в списке разрешённых для запуска. "
            "Полномочия выданы — уточните название или дождитесь сканирования профиля устройства."
        ),
        "avatar.chat.error.application_not_found_on_device": (
            "Приложение не найдено на устройстве. Дождитесь сканирования или уточните название."
        ),
        "avatar.chat.error.capability_not_granted": (
            "Нет полномочия application_control. "
            "Откройте центр полномочий и включите управление приложениями."
        ),
        "avatar.chat.error.permission_denied": "Действие отклонено политикой безопасности.",
        "avatar.chat.response.no_action": "Действие не выполнялось.",
        "avatar.chat.response.plan_preview": "План выполнения ({step_count} шагов): {goal}\n{steps}\nПроверьте карточку ниже и нажмите «Выполнить план».",
        "avatar.chat.response.plan_deferred": "Обнаружена многошаговая цель. Запрос плана у облачного планировщика…",
        "avatar.chat.response.plan_fetch_failed": "Не удалось получить план: {reason}",
        "avatar.chat.response.plan_fetch_fallback": "Использую локальный резервный план — облачный планировщик недоступен ({reason}).",
        "avatar.chat.response.plan_fetch_auth_failed": (
            "Не удалось получить план: токен устройства недействителен или устарел. "
            "Откройте «Устройства» → «Переспарить устройство», получите новый pair token в IuVe Connect "
            "(https://www.iuve.eu/connect), выполните pairing заново и дождитесь статуса «Connected»."
        ),
        "avatar.plan.preview.title": "Предпросмотр плана",
        "avatar.plan.preview.body": "Цель: {goal}\nШаги ({step_count}):\n{steps}",
        "avatar.plan.preview.note": "Только предпросмотр плана. Многошаговое исполнение отключено на этом устройстве.",
        "avatar.plan.preview.execute_note": "Проверьте план и нажмите «Выполнить план» для запуска всех шагов.",
        "avatar.plan.session.allowed": "Разрешено для этой задачи",
        "avatar.plan.session.auto_exec": "Автоматическое выполнение внутри разрешенного доступа",
        "avatar.plan.session.stop_task": "Остановить задачу",
        "avatar.chat.response.plan_started": "Запуск плана ({step_count} шагов): {goal}",
        "avatar.chat.response.plan_step_progress": "Шаг {index}/{total}: {step_label} — {status}",
        "avatar.chat.response.plan_only": "План подготовлен (без выполнения):\n{goal}\n\n{steps}",
        "avatar.chat.response.page_loaded_ok": "✓ Страница загрузилась",
        "avatar.chat.response.files_list_header": "✓ Найдено {count} файлов:",
        "avatar.chat.response.plan_completed": "План выполнен ({step_count} шагов): {goal}",
        "avatar.chat.response.plan_failed": "План остановлен на шаге «{step_label}»: {reason}",
        "avatar.chat.response.plan_resume": "Продолжаю план с шага {step_index}: {goal}",
        "avatar.chat.response.plan_already_completed": "План уже завершён — возобновлять нечего.",
        "avatar.action.retry_step": "Повторить шаг",
        "avatar.chat.file_drop.chip": "Файл: {filename} · Orchestra → {routed_model}",
        "avatar.chat.file_drop.audio_stub": "Файл: {filename} · транскрипция аудио запланирована (Orchestra → {routed_model})",
        "avatar.chat.file_drop.code_hint": "Файл: {filename} · подсказка coding-провайдера (→ {routed_model})",
        "avatar.chat.file_drop.zip_listing": "Файл: {filename} · содержимое: {listing}",
        "avatar.chat.file_drop.unsupported": "Неподдерживаемый тип файла: {filename}",
        "avatar.chat.file_drop.not_found": "Файл не найден: {filename}",
        "avatar.chat.file_drop.disabled": "Перетаскивание файлов отключено на этом устройстве.",
        "avatar.step.get_diagnostics": "Проверить память / диагностику",
        "avatar.step.empty_trash": "Очистить корзину",
        "avatar.step.browser_open_url": "Открыть сайт",
        "avatar.step.open_document_edit": "Открыть документ",
        "avatar.step.mouse_move_relative": "Сдвинуть курсор",
        "avatar.step.application_launch": "Запустить приложение",
        "avatar.step.open_folder": "Открыть папку",
        "avatar.step.keyboard_type_text": "Ввести текст в приложение",
        "avatar.step.social_post_draft": "Подготовить пост",
        "avatar.step.social_post_publish": "Опубликовать пост",
        "avatar.step.check_update": "Проверить обновление агента",
        "avatar.step.get_status": "Прочитать статус агента",
        "avatar.step.web_fetch": "Загрузить веб-страницу",
        "avatar.step.summarize_content": "Сделать краткое резюме",
        "avatar.step.capture_screenshot": "Сделать снимок экрана",
        "avatar.step.verify_screen_contains_text": "Проверить текст на экране",
        "avatar.step.describe_active_window": "Описать активное окно",
        "avatar.step.list_files_in_folder": "Список файлов в папке",
        "avatar.step.plan_step": "Шаг плана",
        "avatar.step.insert_exact_text": "Вставить точный текст поста",
        "avatar.step.open_web_composer": "Открыть редактор поста",
        "avatar.step.verify_web_draft": "Проверить черновик поста",
        "avatar.step.verify_published": "Проверить публикацию",
        "avatar.step.browser_click_publish": "Нажать «Опубликовать»",
        "avatar.web_post.status.composer_found": "composer найден",
        "avatar.web_post.status.draft_inserted": "черновик вставлен",
        "avatar.web_post.status.draft_verified": "черновик подтверждён",
        "avatar.web_post.status.draft_content_mismatch": "текст черновика не совпадает",
        "avatar.web_post.status.publish_requested": "запрошена публикация",
        "avatar.web_post.status.publish_confirmation_required": "нужно подтверждение публикации",
        "avatar.web_post.status.publish_clicked": "публикация нажата",
        "avatar.web_post.status.publish_verified": "публикация подтверждена",
        "avatar.web_post.status.publish_failed": "публикация не удалась",
        "avatar.web_post.status.publish_button_not_found": "кнопка публикации не найдена",
        "avatar.plan.status.ok": "готово",
        "avatar.plan.status.failed": "ошибка",
        "avatar.plan.status.running": "выполняется",
        "avatar.execution.status.mouse_moved": "курсор сдвинут",
        "avatar.execution.status.keyboard_typed": "текст введён",
        "avatar.execution.status.folder_opened": "папка открыта",
        "avatar.execution.status.trash_emptied": "корзина очищена",
        "avatar.execution.status.ok": "выполнено",
        "avatar.execution.status.completed": "выполнено",
        "cap.audit.grant_active": "Активное полномочие",
        "avatar.chat.response.plan_error": "Ошибка выполнения плана: {reason}",
        "avatar.chat.response.plan_cancelled": "План остановлен.",
        "avatar.chat.response.device_inventory": "{summary}",
        "avatar.chat.response.llm_advisory": "{answer}",
        "avatar.chat.response.llm_unavailable": (
            "Сейчас не могу ответить на общий вопрос — облачный IuVe AI Orchestra на iuve.eu недоступен. "
            "Проверьте сеть и подключение аккаунта. "
            "Если у вас локально запущен Ollama, он может использоваться как необязательный офлайн-запасной вариант."
        ),
        "avatar.chat.response.llm_unavailable_not_connected": (
            "Сейчас не могу ответить на общий вопрос — войдите в аккаунт и подключите это устройство к iuve.eu "
            "(сопряжение и доверенный статус), затем повторите."
        ),
        "avatar.chat.response.llm_unavailable_cloud": (
            "IuVe AI Orchestra временно недоступен или не входит в ваш тариф. "
            "Проверьте подключение и тариф на iuve.eu, затем повторите."
        ),
        "avatar.chat.response.intent_clarify": "{question}",
        "avatar.chat.response.vision_required": (
            "Просмотр экрана недоступен. Выдайте полномочие «Просмотр экрана» в центре полномочий "
            "или установите AVATAR_DESKTOP_VISION_ENABLED=true в сервисе агента."
        ),
        "avatar.chat.response.vision_flag_required": (
            "Просмотр экрана заблокирован: AVATAR_DESKTOP_VISION_ENABLED=false в сервисе агента. "
            "Уберите эту настройку или установите true. Полномочие «Просмотр экрана» уже выдано."
        ),
        "avatar.chat.response.vision_grant_required": (
            "Для просмотра экрана нужно полномочие «Просмотр экрана». Откройте центр полномочий "
            "и включите его (рекомендуется сессия на 1 час)."
        ),
        "avatar.chat.response.device_scan_onboarding": "Профиль устройства обновлён. {summary}",
        "avatar.chat.response.capabilities_faq": (
            "На этом устройстве я могу: открывать сайты, читать страницы, готовить документы, "
            "работать с файлами в рабочей папке, проверять статус агента и выполнять многошаговые планы. "
            "Рискованные действия (публикации, платежи, удаление, секреты, системные изменения) требуют явного подтверждения. "
            "Откройте центр полномочий, когда будете готовы выдать доступ."
        ),
        "avatar.chat.response.meta_external": (
            "Cursor и облачная разработка не выполняются напрямую на устройстве. "
            "Локально я работаю здесь: браузер, документы, файлы и задачи с аудитом. "
            "Для Cursor или облачного кода опишите цель — я объясню, что могу подготовить локально "
            "и что лучше сделать в IDE, без запроса полномочий устройства."
        ),
        "avatar.action.executing_plan": "Выполняется план...",
        "avatar.action.document_edit.title": "Открыть документ для редактирования",
        "avatar.action.document_edit.body": "Создать/открыть черновик письма в ~/IuVeWorkspace и запустить LibreOffice Writer.",
        "avatar.action.browser_open.title": "Открыть сайт",
        "avatar.action.browser_open.body": "Открыть URL в браузере по умолчанию: {url}",
        "avatar.action.check_update.title": "Проверить обновление агента",
        "avatar.action.check_update.body": "Проверить stable-канал на подписанное обновление desktop agent.",
        "avatar.action.mouse_move.title": "Сдвинуть курсор мыши",
        "avatar.action.mouse_move.body": "Относительное перемещение курсора на этом устройстве. Нужен xdotool или ydotool.",
        "avatar.action.diagnostics.title": "Проверить диагностику устройства",
        "avatar.action.diagnostics.body": "Считать локальную диагностику и сводку по памяти.",
        "avatar.action.open_folder.title": "Открыть папку workspace",
        "avatar.action.open_folder.body": "Открыть папку IuVeWorkspace в файловом менеджере.",
        "avatar.action.application_launch.title": "Запустить приложение",
        "avatar.action.application_launch.body": "Запустить локальное приложение (например Cursor IDE).",
        "avatar.action.application_launch_named.body": "Запустить найденное установленное приложение на этом устройстве.",
        "avatar.action.application_not_found.body": "Подходящее приложение в профиле устройства не найдено. Дождитесь сканирования или уточните название.",
        "avatar.action.keyboard_type.title": "Ввести текст в приложение",
        "avatar.action.keyboard_type.body": "Сфокусировать окно и ввести текст с клавиатуры (xdotool/ydotool).",
        "dialog.profile.body": "Аккаунт: {account}\nУстройство: {device}\nВерсия агента: {version}\nСостояние доверия: {trust}",
        "onboarding.unpaired.banner": "Устройство не спарено. Выполните pairing устройства, чтобы включить операции IuVe AI Avatar.",
        "onboarding.pair.button": "Спарить устройство",
        "pairing.dialog.title": "Спарить устройство",
        "pairing.dialog.instruction": "Получите Pair Token в IuVe Connect и вставьте его сюда",
        "pairing.dialog.token.placeholder": "Pair Token",
        "pairing.dialog.paste": "Вставить из буфера",
        "pairing.dialog.pair": "Спарить",
        "pairing.success.title": "Устройство спарено",
        "pairing.success.body": "Pairing завершён. Статус доверия и подключения обновится после heartbeat.",
        "pairing.error.invalid_token": "Недействительный pair token. Сгенерируйте новый токен в IuVe Connect и повторите.",
        "pairing.error.expired_token": "Срок действия pair token истёк. Сгенерируйте новый токен в IuVe Connect.",
        "pairing.error.network_error": "Сетевая ошибка при обращении к backend. Проверьте подключение и повторите.",
        "pairing.error.backend_rejected": "Backend отклонил запрос pairing. Проверьте токен и повторите.",
        "pairing.error.clipboard_unavailable": "Буфер обмена недоступен в этой сессии.",
        "devices.placeholder": "Локальное защищенное состояние устройства с явным pairing и контролем capability.",
        "devices.auth_error.banner": "Ошибка аутентификации устройства ({error}). Отзовите pairing и выполните повторный pairing с новым токеном из IuVe Connect.",
        "devices.auth_error.hint": "{hint}",
        "devices.unpair.button": "Отозвать pairing",
        "devices.repair.button": "Переспарить устройство",
        "devices.open_security.link": "Открыть центр полномочий",
        "devices.revoke_all.distinct.hint": "«Отозвать pairing» снимает доверие устройства. «Отозвать все» в разделе Безопасность отключает только полномочия (grants).",
        "dialog.devices.unpair.title": "Отозвать pairing устройства?",
        "dialog.devices.unpair.body": "Локальный токен устройства на этой машине будет удалён. Для повторного pairing получите новый pair token в IuVe Connect.\n\n{hint}",
        "dialog.devices.repair.title": "Переспарить устройство?",
        "dialog.devices.repair.body": "Локальные учётные данные pairing будут сброшены и откроется диалог pairing. Используйте свежий pair token из IuVe Connect.",
        "label.device_id": "ID устройства",
        "label.pairing_timestamp": "Время pairing",
        "label.admission_mode": "Режим допуска",
        "label.allowlisted_command_channel": "Allowlist канал",
        "label.hidden_actions": "Скрытые действия",
        "label.pre_pair_actions": "Действия до pairing",
        "diagnostics.placeholder": "Диагностика рантайма локальная, явная и пригодная для аудита.",
        "diagnostics.page.title": "Состояние устройства",
        "diagnostics.page.subtitle": "Понятный обзор подключения, доверия и heartbeat. Ниже доступны расширенные детали.",
        "diagnostics.action.refresh_scan": "Обновить сканирование",
        "diagnostics.action.refresh_scan.scanning": "Сканирование…",
        "diagnostics.scan.status.scanning": "Сканирование установленных приложений…",
        "diagnostics.scan.status.complete": "Сканирование завершено — найдено приложений: {count}.",
        "diagnostics.scan.status.failed": "Ошибка сканирования: {reason}",
        "diagnostics.scan.status.interrupted": "Сканирование прервано… Попробуйте снова.",
        "diagnostics.scan.status.interrupted.partial": "Сканирование прервано… Проиндексировано приложений: {count} (частично). Попробуйте снова.",
        "avatar.chat.response.device_scan_manual": "Сканирование завершено. Проиндексировано приложений: {count}.",
        "diagnostics.health.title": "Сводка состояния",
        "diagnostics.health.connection": "Подключение",
        "diagnostics.health.trust": "Доверие",
        "diagnostics.health.heartbeat": "Heartbeat",
        "diagnostics.health.logs": "Логи",
        "diagnostics.advanced.title": "Расширенные детали",
        "label.heartbeat_age_sec": "Возраст heartbeat (сек)",
        "label.failure_count": "Число ошибок",
        "label.last_error": "Последняя ошибка",
        "label.logs_path": "Путь к логам",
        "label.storage_path": "Путь к состоянию",
        "label.status_source_version": "Источник статуса",
        "label.signed_bootstrap_required": "Требуется signed bootstrap",
        "security.placeholder": "Безопасный допуск: deny-by-default, явное согласие, capability grants и root-гейты.",
        "security.summary.trust.title": "Доверие",
        "security.summary.trust.body": "Эта установка — отдельное устройство в аккаунте. Доверие и полномочия действуют только здесь; вы можете спарить другие устройства на других ОС, когда появится соответствующий агент.",
        "security.summary.consent.title": "Согласие",
        "security.summary.consent.body": "Изменения полномочий остаются явными, локальными и аудируемыми.",
        "security.summary.root.title": "Root",
        "security.summary.root.body": "Root-операции остаются под явным подтверждением.",
        "security.summary.audit.title": "Аудит",
        "security.summary.audit.body": "Все выдачи и отзыв видны в журнале аудита.",
        "security.status.line": "Доверие: {trust} · Полномочия: {granted}/{total} · Активные сессии: {sessions} · Root: {root}",
        "security.status.card.this_device": "Это устройство",
        "security.status.card.connected": "Подключение",
        "security.status.card.trusted": "Доверие на этом устройстве",
        "security.status.card.permissions": "Полномочия на этом устройстве",
        "security.status.card.sessions": "Активные временные сессии",
        "security.status.card.time_remaining": "Осталось времени",
        "security.status.connected.yes": "Подключено к IuVe",
        "security.status.connected.no": "Не подключено",
        "security.status.trusted.yes": "Доверенное",
        "security.status.trusted.no": "Пока не доверено",
        "security.status.this_device.named": "{name} ({id})",
        "security.status.this_device.id_only": "Устройство {id}",
        "security.status.this_device.unknown": "Эта установка консоли",
        "security.status.no_active_sessions": "Нет активных сессий",
        "security.status.revoke_all": "Отозвать весь доступ",
        "security.recommended_safe.button": "Рекомендуемый безопасный режим",
        "security.recommended_safe.hint": "Один клик: профиль «Стандартный», временные сессии и подтверждения для рискованных действий.",
        "security.advanced.title": "Расширенные настройки ▾",
        "security.advanced.subtitle": "Ручные переключатели для опытных пользователей. Обычным пользователям достаточно профилей и задач выше.",
        "security.task_sessions.note": "Выберите задачу — меньше всплывающих окон только для неё. Опасные действия всё равно требуют подтверждения.",
        "security.safety.summary.title": "Проверьте перед применением",
        "security.safety.summary.body": "Профиль: {profile}\n\nIuVe сможет:\n{allowed}\n\nВсё равно потребует подтверждения:\n{confirms}\n\nДоступ истекает: {expires}\n\nОтозвать: вкладка «Безопасность» → «Отозвать весь доступ» или завершите сессии ниже.\n{revoke}",
        "security.safety.revoke_hint": "Все изменения записываются в журнал аудита.",
        "security.safety.confirm.publishing": "Публикация постов, писем и комментариев",
        "security.safety.confirm.payments": "Платежи и подписки",
        "security.safety.confirm.deleting_files": "Удаление файлов и очистка папок",
        "security.safety.confirm.sending_messages": "Отправка сообщений",
        "security.safety.confirm.installing_software": "Установка и удаление программ",
        "security.safety.confirm.system_root": "Системные и root-операции",
        "security.manual_configure": "Настроить вручную ▾",
        "security.additional.title": "Дополнительно",
        "cap.grants.permanent.title": "Постоянные полномочия",
        "cap.grants.permanent.subtitle": "Выберите профиль доступа или настройте отдельные полномочия ниже.",
        "cap.grants.profile.title": "Профиль доступа",
        "cap.grants.profile.subtitle": "Выберите, чем IuVe может помогать на этом устройстве. Рискованные действия всегда спрашивают подтверждение.",
        "profile.lifetime.label": "Срок сессии",
        "profile.lifetime.permanent": "Постоянно",
        "profile.lifetime.app_exit": "До выхода из приложения",
        "profile.lifetime.device_shutdown": "До выключения устройства",
        "profile.lifetime.single_task": "Одна задача",
        "profile.summary.title": "Активный профиль",
        "profile.summary.active": "Профиль",
        "profile.summary.capabilities": "Включённые возможности",
        "profile.summary.lifetime": "Срок",
        "profile.summary.risk": "Уровень риска",
        "profile.summary.audit": "Статус аудита",
        "profile.audit.active": "Активен — выдачи в журнале",
        "profile.audit.none": "Нет выдач",
        "profile.audit.revoked_app_exit": "Отозвано при выходе",
        "profile.temporary_scopes.note": "Области задач (файлы, сайты, ввод, разработка, экран, ПО) подключаются автоматически — ручные переключатели не нужны.",
        "profile.bundle.file_workspace": "Файлы (рабочая область)",
        "profile.bundle.diagnostics": "Диагностика",
        "profile.bundle.network_readonly": "Сеть (только чтение)",
        "profile.bundle.logs": "Логи",
        "profile.bundle.app_launch": "Запуск приложений",
        "profile.bundle.browser_automation": "Автоматизация браузера",
        "profile.bundle.sites_apps": "Сайты и приложения",
        "profile.bundle.clipboard": "Буфер обмена",
        "profile.bundle.file_write_limited": "Ограниченная запись файлов",
        "profile.bundle.keyboard_automation": "Автоматизация клавиатуры",
        "profile.bundle.mouse_automation": "Автоматизация мыши",
        "profile.bundle.screen_vision": "Просмотр экрана",
        "profile.bundle.development": "Разработка",
        "profile.bundle.software_management": "Управление ПО",
        "profile.bundle.documents": "Документы",
        "profile.bundle.automation": "Автоматизация",
        "profile.bundle.root_operations": "Root-операции",
        "profile.bundle.shell": "Shell",
        "profile.bundle.package_management": "Управление пакетами",
        "profile.bundle.system_configuration": "Конфигурация системы",
        "profile.bundle.service_management": "Управление службами",
        "profile.bundle.device_management": "Управление устройством",
        "cap.grants.active.title": "Выданные полномочия",
        "ai_providers.title": "AI-провайдеры",
        "ai_providers.subtitle": "Список синхронизируется с настройками Admin на сервере. Онлайн — только при наличии API-ключа в Admin. Вход в браузере не подключает агента — добавьте ключи в Admin → Настройки.",
        "ai_providers.col.name": "Провайдер",
        "ai_providers.col.status": "Статус",
        "ai_providers.col.account": "Аккаунт",
        "ai_providers.col.capabilities": "Возможности",
        "ai_providers.col.cost": "Стоимость",
        "ai_providers.col.priority": "Приоритет",
        "ai_providers.status.online": "Онлайн",
        "ai_providers.status.offline": "Офлайн",
        "ai_providers.account.connected": "Подключён",
        "ai_providers.account.not_connected": "Не подключён",
        "ai_providers.account.pending": "Ожидание",
        "ai_providers.honesty.not_configured": "Не настроено на сервере",
        "ai_providers.honesty.no_orchestra_executor": "В списке — executor Orchestra ещё нет",
        "ai_providers.honesty.image_pipeline": "Image pipeline (admin)",
        "ai_providers.honesty.orchestra_executor": "Executor Orchestra готов",
        "ai_providers.hint.needs_admin_api_key": "Добавьте {setting_key} в Admin → Настройки (вход в браузере не подключает агента).",
        "ai_providers.hint.complete_browser_login": "Завершите вход в браузере и подтвердите в диалоге.",
        "ai_providers.hint.agent_unavailable": "Агент пока не может использовать этого провайдера — нет пути через API-ключ сервера.",
        "ai_providers.hint.cursor_desktop_only": "У Cursor нет публичного agent API — только десктоп. Для облачного кода используйте OpenAI или Claude.",
        "ai_providers.hint.configure_local": "Укажите OLLAMA_BASE_URL в Admin → Настройки.",
        "ai_providers.hint.not_configured": "Не настроено на сервере.",
        "ai_providers.action.confirm_login": "Подтвердить вход",
        "ai_providers.sync.ok": "Синхронизировано с настройками Admin на сервере.",
        "ai_providers.action.connect": "Подключить",
        "ai_providers.action.register": "Регистрация",
        "ai_providers.action.disconnect": "Отключить",
        "ai_providers.action.refresh": "Обновить",
        "ai_providers.action.refreshing": "Обновление…",
        "ai_providers.loading": "Загрузка провайдеров…",
        "ai_providers.action.enable": "Включить",
        "ai_providers.action.disable": "Выключить",
        "ai_providers.consent.title": "Подключить AI-провайдера?",
        "ai_providers.consent.body": "IuVe откроет официальную страницу входа {provider}. Вы входите там — IuVe никогда не запрашивает и не хранит пароль.",
        "ai_providers.consent.confirm": "Открыть официальный вход",
        "ai_providers.consent.cancel": "Отмена",
        "ai_providers.complete.title": "Вход выполнен?",
        "ai_providers.complete.body": "Подтвердите только после входа на официальном сайте {provider}.",
        "ai_providers.complete.confirm": "Да, подключён",
        "ai_providers.disconnect.title": "Отключить провайдера?",
        "ai_providers.disconnect.body": "Отключить {provider}? Можно подключить снова в любой момент.",
        "ai_providers.disconnect.confirm": "Отключить",
        "ai_providers.error.unavailable": "Сервис AI-провайдеров недоступен.",
        "ai_providers.error.auth": "Спарьте устройство для управления AI-провайдерами.",
        "ai_providers.error.invalid_auth": "Ошибка авторизации устройства. Переспарьте устройство для управления AI-провайдерами.",
        "ai_providers.empty": "Провайдеры не настроены.",
        "label.admission_model": "Модель допуска",
        "label.deny_by_default": "Запрет по умолчанию",
        "label.explicit_user_consent_required": "Требуется явное согласие",
        "label.pairing_required": "Требуется pairing",
        "label.allowlisted_commands_only": "Только allowlist команды",
        "label.root_profile_gated": "Root профиль под гейтом",
        "label.approval_ticket_required": "Требуется approval ticket",
        "label.rollback_instruction_required": "Требуется rollback-инструкция",
        "label.active_trust_state": "Текущее доверие",
        "label.active_runtime_state": "Текущий рантайм",
        "label.trust_levels": "Уровни доверия",
        "label.required_capabilities": "Требуемые capability",
        "label.capability_contract": "Capability контракт",
        "updates.placeholder": "Обновления остаются policy-gated с режимом read-only в локальной консоли.",
        "label.update_channel": "Канал обновлений",
        "label.remote_update_allowed": "Удаленное обновление",
        "label.policy": "Политика",
        "label.note": "Примечание",
        "dialog.restart.title": "Перезапустить сервис агента?",
        "dialog.restart.body": "Действие перезапустит iuve-connect-desktop-agent.service для текущего пользователя.",
        "dialog.confirm": "Подтвердить",
        "dialog.cancel": "Отмена",
        "dialog.export.title": "Диагностика экспортирована",
        "dialog.export.body": "Сохранено в: {path}",
        "dialog.ok": "OK",
        "dialog.update.check.title": "Проверка обновления",
        "dialog.update.check.body": "Статус: {status}\nПричина: {reason}",
        "dialog.update.available.title": "Доступно обновление",
        "dialog.update.available.body": "Доступна более новая версия: {version}. Установить сейчас?",
        "dialog.update.install": "Установить обновление",
        "dialog.update.result.title": "Результат обновления",
        "dialog.update.result.body": "Статус: {status}\nПричина: {reason}",
        "updates.page.title": "Обновления агента",
        "updates.page.subtitle": "Безопасные policy-gated обновления с явным pairing и согласием.",
        "updates.status.title": "Статус обновления",
        "updates.troubleshooting.title": "Устранение проблем",
        "updates.pairing.required.hint": "Спарьте устройство, чтобы включить проверку обновлений.",
        "updates.pairing.required.title": "Требуется pairing",
        "updates.pairing.required.message": "Устройство не спарено. Выполните pairing перед проверкой обновлений.",
        "updates.pairing.required.pair": "Спарить устройство",
        "updates.pairing.required.help": "Открыть помощь по pairing",
        "updates.check.available": "Доступна более новая версия.",
        "updates.check.available_version": "Доступно обновление: {version}",
        "updates.check.up_to_date": "Установлена актуальная версия агента.",
        "updates.check.up_to_date_version": "У вас установлена последняя версия ({version}).",
        "updates.check.signature_blocked": "Установка заблокирована: устройство не может ставить неподписанные stable-обновления.",
        "updates.check.invalid_release_checksum": "Метаданные релиза неполные (нет SHA256 checksum). Повторите позже.",
        "updates.check.missing_release_version": "Метаданные релиза неполные (нет версии). Повторите позже.",
        "updates.check.channel_disabled": "Обновления отключены на этом устройстве (канал: disabled).",
        "updates.check.channel_mismatch": "Канал релиза не совпадает с настроенным каналом обновлений.",
        "updates.check.unsupported_package": "Формат пакета релиза не поддерживается на этом устройстве.",
        "updates.check.checksum_mismatch": "Скачанный пакет не прошёл проверку checksum. Повторите позже.",
        "updates.check.dpkg_not_found": "dpkg не найден в системе. Установите вручную через apt.",
        "updates.check.release_unavailable": "На stable-канале пока нет доступного для установки релиза.",
        "updates.check.release_download_failed": "Не удалось скачать пакет релиза. Проверьте сеть и повторите.",
        "updates.check.temporary_unavailable_detail": "Проверка обновлений не удалась: {detail}",
        "updates.check.release_lookup_failed": "Не удалось получить информацию о релизе. Повторите позже.",
        "updates.check.update_check_exception": "Проверка обновлений завершилась внутренней ошибкой. Повторите позже.",
        "updates.check.temporary_unavailable": "Проверка обновлений временно недоступна. Повторите позже.",
        "updates.status.version": "Текущая версия",
        "updates.status.pairing": "Статус pairing",
        "updates.status.channel": "Канал",
        "updates.actions.title": "Действия",
        "updates.policy.read_only_visibility": "Только просмотр обновлений (полномочия отдельно)",
        "updates.policy.trusted_self_update": "Доверенное устройство может обновляться с официального stable-канала (проверка checksum).",
        "updates.policy.paired_official_self_update": "Спаренное устройство может обновляться с официального stable-канала (checksum; trust может быть в ожидании).",
        "updates.policy.pairing_not_trusted": "Pairing выполнен — текущий trust не разрешает self-update.",
        "updates.policy.pairing_required": "Выполните pairing для проверки и установки обновлений.",
        "updates.policy.channel_disabled": "Канал обновлений отключён на этом устройстве.",
        "updates.policy.revoked_no_update": "Trust устройства отозван — self-update недоступен.",
        "updates.check.install_started": "Загрузка и установка обновления. Может потребоваться пароль администратора.",
        "updates.check.install_failed": "Не удалось установить обновление. Попробуйте: sudo dpkg -i ./iuve-connect-desktop-agent_{version}_all.deb",
        "updates.check.install_failed_detail": "Не удалось установить обновление ({version}): {detail}",
        "updates.check.already_installed_version": "Версия {version} уже установлена. Обновление не требуется.",
        "updates.check.privilege_installer_unavailable": "Нужны права администратора. Установите вручную: sudo dpkg -i <скачанный.deb>",
        "updates.check.installed": "Обновление установлено. При необходимости перезапустите сервис агента.",
        "updates.note.non_autonomous": "Операции обновления остаются gated и неавтономными.",
        "updates.note.discover_troubleshooting": "Если Discover не устанавливает пакет из-за ошибок сторонних APT-репозиториев, исправьте системные источники или выполните: sudo dpkg -i ./iuve-connect-desktop-agent_{version}_all.deb",
        "cap.section.title": "Центр управления полномочиями",
        "cap.section.subtitle": "Все полномочия выключены по умолчанию. Требуется локальное согласие.",
        "cap.file_access": "Доступ к файлам",
        "cap.application_control": "Управление приложениями",
        "cap.mouse_control": "Управление мышью",
        "cap.keyboard_control": "Управление клавиатурой",
        "cap.network_control": "Сетевые операции",
        "cap.software_management": "Управление ПО",
        "cap.root_operations": "Root операции",
        "cap.screen_vision": "Просмотр экрана (vision)",
        "cap.grant": "Выдать",
        "cap.revoke": "Отозвать",
        "cap.expires": "Истекает",
        "cap.granted_at": "Выдано",
        "cap.no_expiry": "Без ограничения",
        "cap.status.enabled": "Разрешено",
        "cap.status.disabled": "Запрещено",
        "cap.status.expired": "Истёк срок",
        "cap.risk.low": "Низкий риск",
        "cap.risk.medium": "Средний риск",
        "cap.risk.high": "Высокий риск",
        "cap.risk.critical": "КРИТИЧЕСКИЙ",
        "cap.expiry.15m": "15 минут",
        "cap.expiry.1h": "1 час",
        "cap.expiry.8h": "8 часов",
        "cap.expiry.permanent": "Постоянно",
        "cap.expiry.24h": "24 часа",
        "cap.expiry.reboot": "До перезагрузки",
        "cap.expiry.one_shot": "Только на 1 раз",
        "cap.page.title": "Безопасный допуск и полномочия агента",
        "cap.page.subtitle": "Управляйте полномочиями IuVe AI на этом устройстве. Все высокорискованные действия требуют явного согласия и записываются в аудит.",
        "cap.trust_badge.label": "Текущий уровень доверия",
        "cap.trust_base": "Базовый уровень",
        "cap.avatar.mode.label": "Режим аватара",
        "cap.avatar.mode.inactive": "Не активен",
        "cap.avatar.mode.enabled": "Активен",
        "cap.root_session.label": "Root-сессия",
        "cap.root_session.none": "Не активна",
        "cap.capabilities_count": "Активные выдачи: {granted}/{total}",
        "cap.canonical_count": "{granted}/{total}",
        "avatar.device_context.scan.just_now": "только что",
        "avatar.device_context.scan.minutes_ago": "{m} мин назад",
        "avatar.device_context.scan.hours_ago": "{h} ч назад",
        "cap.expires_in.label": "Истекает через",
        "cap.expires_in.none": "Нет активных выдач",
        "cap.expires_in.expired": "Истекло",
        "cap.expires_in.minutes": "{m} мин",
        "cap.expires_in.hours": "{h} ч",
        "avatar.card.trust": "Уровень доверия",
        "avatar.card.avatar": "Режим аватара",
        "avatar.card.root": "Root-сессия",
        "avatar.card.capabilities": "Активные выдачи",
        "footer.connected": "Подключение",
        "footer.trust": "Доверие",
        "footer.heartbeat": "Heartbeat",
        "footer.backend": "Бэкенд",
        "footer.expires": "Истекает через",
        "cap.table.title": "Управление полномочиями (Capability Control Center)",
        "cap.col.permission": "Полномочие",
        "cap.col.risk": "Риск",
        "cap.col.status": "Статус",
        "cap.col.expiry": "Срок действия",
        "cap.col.actions": "Действия",
        "cap.policy.link": "О политике допуска",
        "cap.active_permissions.title": "Выданные полномочия",
        "cap.no_active_permissions": "Активных полномочий нет",
        "cap.no_active_permissions.sub": "Все полномочия выключены. Агент работает в безопасном режиме.",
        "cap.audit.open": "Открыть аудит полномочий",
        "cap.audit.dialog.title": "Аудит полномочий",
        "cap.audit.empty": "Аудит пуст.",
        "cap.status_bar.model": "Модель допуска",
        "cap.status_bar.consent": "Явное согласие",
        "cap.status_bar.consent_required": "✗ Требуется",
        "cap.status_bar.heartbeat": "Последний heartbeat",
        "cap.status_bar.never": "Никогда",
        "cap.description.file_access": "Чтение/запись файлов пользователя",
        "cap.description.application_control": "Запуск, закрытие, фокус окон",
        "cap.description.mouse_control": "Перемещение курсора, клики",
        "cap.description.keyboard_control": "Ввод текста, нажатия клавиш",
        "cap.description.network_control": "Проверки сети, диагностика",
        "cap.description.software_management": "Установка, обновление программ",
        "cap.description.root_operations": "sudo, пакеты, службы, настройки системы",
        "cap.description.screen_vision": "Ограниченный снимок экрана для проверки результата (только чтение, без трансляции)",
        "cap.granted_by_label": "Выдано",
        "cap.granted_at_label": "Выдано в",
        "cap.expires_at_label": "Истекает",
        "cap.risk_level_label": "Уровень риска",
        "cap.refresh": "Обновить",
        "cap.col.grant": "Выдать",
        "cap.status.not_granted": "Не выдано",
        "cap.status.session": "Сессия (временно)",
        "cap.status.blocked_plan": "Заблокировано тарифом",
        "cap.grant_selection.title": "Выберите полномочия для выдачи",
        "cap.grant_selection.hint": "Отметьте разрешения, которые хотите выдать. Неотмеченные остаются запрещёнными до явной выдачи.",
        "cap.grant_selection.apply": "Применить полномочия",
        "cap.grant_selection.selected": "Выбрано: {selected}/{total}",
        "cap.grant_selection.confirm.title": "Применить выбранные полномочия?",
        "cap.grant_selection.confirm.body": "Вы собираетесь выдать {count} полномочий на этом устройстве. Состояние будет синхронизировано с аккаунтом.",
        "cap.grant_selection.confirm.high_risk": "Высокорисковые полномочия: {caps}",
        "cap.grant_selection.empty.title": "Полномочия не выбраны",
        "cap.grant_selection.empty.body": "Выберите хотя бы одно полномочие или используйте пресет.",
        "cap.preset.minimal": "Минимальный",
        "cap.preset.standard": "Стандартный",
        "cap.preset.assistant": "Режим помощника",
        "cap.preset.full": "Полный",
        "cap.preset.expert": "Эксперт",
        "cap.preset.minimal.summary": "Только файлы и безопасная диагностика.",
        "cap.preset.standard.summary": "Файлы, сайты, приложения и базовая автоматизация.",
        "cap.preset.assistant.summary": "Повседневная помощь на ПК с подтверждениями для рискованных действий.",
        "cap.preset.full.summary": "Автоматизация рабочего стола, просмотр экрана и управление ПО.",
        "cap.preset.expert.summary": "Расширенный контроль — Stop Zone защищает публикации, платежи и системные изменения.",
        "cap.plain.file_access": "IuVe может работать с файлами в рабочей области IuVe.",
        "cap.plain.application_control": "IuVe может открывать приложения, когда вы одобряете задачу.",
        "cap.plain.mouse_control": "IuVe может двигать мышь только с вашего одобрения.",
        "cap.plain.keyboard_control": "IuVe может печатать текст только с вашего одобрения.",
        "cap.plain.network_control": "IuVe может выполнять безопасные сетевые проверки и открывать разрешённые сайты.",
        "cap.plain.software_management": "IuVe может проверять обновления — установка ПО всё равно требует подтверждения.",
        "cap.plain.root_operations": "Системные действия требуют отдельного подтверждения.",
        "cap.plain.screen_vision": "IuVe может смотреть на экран, чтобы понять, что открыто.",
        "cap.preset.confirm.body": "Пресет «{preset}» выбран. Подтвердите применение полномочий.",
        "cap.grant_wizard.title": "Настройка полномочий агента",
        "cap.grant_wizard.body": "IuVe работает в безопасном режиме, пока вы не выберете полномочия. Отметьте нужные в списке и нажмите «Применить полномочия».",
        "cap.grant_wizard.open": "Выбрать полномочия",
        "cap.grant_wizard.later": "Позже",
        "cap.revoke_all": "Отозвать все",
        "cap.revoke_all_sessions": "Отозвать все сессии",
        "cap.revoke_all_grants": "Сбросить полномочия",
        "cap.action_sessions.title": "Временные сессии задач",
        "cap.action_sessions.subtitle": "Временный доступ на одну задачу. По истечении времени доступ закрывается автоматически.",
        "cap.action_sessions.empty": "Нет активных сессий. Выберите задачу ниже — меньше подтверждений только для неё.",
        "cap.action_sessions.group.common": "Обычные задачи",
        "cap.action_sessions.group.advanced": "Расширенные",
        "cap.action_sessions.start.confirm": "Запустить сессию",
        "cap.action_sessions.revoke": "Отозвать",
        "cap.action_sessions.active.title": "Сейчас активно",
        "cap.action_sessions.running.title": "Сейчас выполняется",
        "cap.action_sessions.active.row": "{title} — осталось {remaining}",
        "cap.action_sessions.cloud.title": "Подсказки от облака",
        "cap.action_sessions.cloud.empty": "Нет ожидающих подсказок от backend.",
        "cap.action_sessions.card.files.user_title": "Файлы и папки",
        "cap.action_sessions.card.files.duration": "2 ч",
        "cap.action_sessions.card.files.summary": "Чтение, запись и организация файлов в рабочей области IuVe",
        "cap.action_sessions.card.websites.user_title": "Помощь в браузере",
        "cap.action_sessions.card.websites.duration": "1 ч",
        "cap.action_sessions.card.websites.summary": "Открытие сайтов, навигация и ввод в формах браузера",
        "cap.action_sessions.card.office_documents.user_title": "Офисные документы",
        "cap.action_sessions.card.office_documents.duration": "1 ч",
        "cap.action_sessions.card.office_documents.summary": "LibreOffice, Writer и редактирование документов на ПК",
        "cap.action_sessions.card.maintenance.user_title": "Обслуживание ПК",
        "cap.action_sessions.card.maintenance.duration": "30 мин",
        "cap.action_sessions.card.maintenance.summary": "Безопасные проверки и dry-run пакетов",
        "cap.action_sessions.card.development.user_title": "Разработка",
        "cap.action_sessions.card.development.duration": "2 ч",
        "cap.action_sessions.card.development.summary": "Код в IDE с файлами проекта",
        "cap.action_sessions.card.full_assistance.user_title": "Полная помощь",
        "cap.action_sessions.card.full_assistance.duration_label": "30 / 60 / 120 мин",
        "cap.action_sessions.card.full_assistance.summary": "Файлы, сайты, приложения и рабочий стол на ограниченное время",
        "cap.action_sessions.card.full_assistance.choose.title": "На сколько?",
        "cap.action_sessions.card.full_assistance.choose.body": "Выберите, как долго IuVe может помогать с повседневными задачами на ПК.",
        "cap.action_sessions.card.full_assistance.duration_option": "{minutes} минут",
        "cap.action_sessions.card.full_assistance.title": "Запустить полную помощь на {minutes} минут?",
        "cap.action_sessions.card.full_assistance.body": "На {minutes} минут IuVe может помогать с файлами, сайтами, приложениями и рабочим столом. Публикации, платежи и системные изменения всё равно требуют подтверждения.",
        "cap.action_sessions.card.web_apps.user_title": "Сайты и программы",
        "cap.action_sessions.card.web_apps.duration": "1 ч",
        "cap.action_sessions.card.web_apps.summary": "Открытие сайтов или запуск программ на ПК",
        "cap.action_sessions.card.web_apps.choose.title": "Какую сессию запустить?",
        "cap.action_sessions.card.web_apps.choose.body": "Выберите сайты или программы для временной сессии.",
        "cap.action_sessions.card.desktop.user_title": "Автоматизация ввода",
        "cap.action_sessions.card.desktop.duration": "30 мин",
        "cap.action_sessions.card.desktop.summary": "Мышь и клавиатура на рабочем столе",
        "cap.action_sessions.card.coding_maintenance.user_title": "Разработка",
        "cap.action_sessions.card.coding_maintenance.duration": "2 ч",
        "cap.action_sessions.card.coding_maintenance.summary": "Код в IDE или ограниченное обслуживание ПК",
        "cap.action_sessions.card.coding_maintenance.choose.title": "Какую сессию разработки?",
        "cap.action_sessions.card.coding_maintenance.choose.body": "Выберите разработку или обслуживание ПК.",
        "cap.action_sessions.preset.files.user_title": "Работа с файлами",
        "cap.action_sessions.preset.files.summary": "Чтение и запись в рабочей области IuVe",
        "cap.action_sessions.preset.files.duration": "2 ч",
        "cap.action_sessions.preset.files.title": "Запустить сессию работы с файлами?",
        "cap.action_sessions.preset.files.body": "На 2 часа агент сможет читать и менять файлы в рабочей области IuVe. Меньше всплывающих окон для этой задачи; доступ закроется сам.",
        "cap.action_sessions.preset.web.user_title": "Сайты и ChatGPT",
        "cap.action_sessions.preset.web.summary": "Открытие сайтов и ввод в чатах браузера",
        "cap.action_sessions.preset.web.duration": "1 ч",
        "cap.action_sessions.preset.web.title": "Запустить веб-сессию?",
        "cap.action_sessions.preset.web.body": "На 1 час агент сможет открывать сайты и печатать в чатах браузера (ChatGPT и похожие). Доступ закроется автоматически.",
        "cap.action_sessions.preset.apps.user_title": "Программы",
        "cap.action_sessions.preset.apps.summary": "Запуск и переключение приложений на ПК",
        "cap.action_sessions.preset.apps.duration": "1 ч",
        "cap.action_sessions.preset.apps.title": "Запустить сессию программ?",
        "cap.action_sessions.preset.apps.body": "На 1 час агент сможет открывать и активировать программы на этом компьютере. Доступ закроется автоматически.",
        "cap.action_sessions.preset.desktop.user_title": "Мышь и клавиатура",
        "cap.action_sessions.preset.desktop.summary": "Автоматические клики и ввод с клавиатуры",
        "cap.action_sessions.preset.desktop.duration": "30 мин",
        "cap.action_sessions.preset.desktop.title": "Запустить сессию автоматизации рабочего стола?",
        "cap.action_sessions.preset.desktop.body": "На 30 минут агент сможет двигать мышь и печатать на рабочем столе. Высокий риск — постоянные разрешения всё равно нужны. Доступ закроется сам.",
        "cap.action_sessions.preset.network.user_title": "Проверка сети",
        "cap.action_sessions.preset.network.summary": "Ping, DNS и диагностика соединения",
        "cap.action_sessions.preset.network.duration": "30 мин",
        "cap.action_sessions.preset.network.title": "Запустить сессию проверки сети?",
        "cap.action_sessions.preset.network.body": "На 30 минут агент сможет выполнять безопасную сетевую диагностику (ping, DNS и т.д.). Доступ закроется автоматически.",
        "cap.action_sessions.preset.coding.user_title": "Код и Cursor",
        "cap.action_sessions.preset.coding.summary": "Файлы, IDE и клавиатура для разработки",
        "cap.action_sessions.preset.coding.duration": "2 ч",
        "cap.action_sessions.preset.coding.title": "Запустить сессию разработки?",
        "cap.action_sessions.preset.coding.body": "На 2 часа агент сможет работать с файлами проекта, открывать Cursor/IDE и печатать там. Доступ закроется автоматически.",
        "cap.action_sessions.preset.maintenance.user_title": "Обслуживание ПК",
        "cap.action_sessions.preset.maintenance.summary": "Пробная установка пакетов и ограниченное обслуживание",
        "cap.action_sessions.preset.maintenance.duration": "30 мин",
        "cap.action_sessions.preset.maintenance.title": "Запустить сессию обслуживания?",
        "cap.action_sessions.preset.maintenance.body": "На 30 минут агент сможет выполнять пробную установку пакетов (dry-run) и похожие проверки. Доступ закроется автоматически.",
        "cap.action_sessions.preset.document.user_title": "Работа с файлами",
        "cap.action_sessions.preset.document.summary": "Чтение и запись в рабочей области IuVe",
        "cap.action_sessions.preset.document.duration": "2 ч",
        "cap.action_sessions.preset.document.title": "Запустить сессию работы с файлами?",
        "cap.action_sessions.preset.document.body": "На 2 часа агент сможет читать и менять файлы в рабочей области IuVe. Доступ закроется автоматически.",
        "cap.action_sessions.preset.browser.user_title": "Сайты и ChatGPT",
        "cap.action_sessions.preset.browser.summary": "Открытие сайтов и ввод в чатах браузера",
        "cap.action_sessions.preset.browser.duration": "1 ч",
        "cap.action_sessions.preset.browser.title": "Запустить веб-сессию?",
        "cap.action_sessions.preset.browser.body": "На 1 час агент сможет открывать сайты и печатать в чатах браузера. Доступ закроется автоматически.",
        "avatar.action.cloud_suggestion.title": "Cloud suggestion",
        "avatar.action.cloud_suggestion.body": "Structured action от cloud planner.",
        "dialog.cap.revoke_all.title": "Отозвать все полномочия?",
        "dialog.cap.revoke_all.body": "Все выданные полномочия на этом устройстве будут отключены. IuVe AI перейдёт в безопасный режим до повторной выдачи разрешений.",
        "dialog.cap.revoke_all_sessions.title": "Отозвать все сессии задач?",
        "dialog.cap.revoke_all_sessions.body": "Будут завершены все временные сессии. Постоянные полномочия не изменятся.",
        "dialog.cap.revoke_all_grants.title": "Сбросить все полномочия?",
        "dialog.cap.revoke_all_grants.body": "Все постоянные полномочия на этом устройстве будут отключены. IuVe AI перейдёт в безопасный режим до повторной выдачи доступа.",
        "cap.command_log.title": "Журнал команд",
        "cap.command_log.empty": "Событий команд пока нет.",
        "cap.command_log.filter.all": "Все",
        "cap.command_log.filter.allow": "Разрешённые",
        "cap.command_log.filter.deny": "Отклонённые",
        "dialog.command.confirm.title": "Подтвердите выполнение команды",
        "dialog.command.confirm.body": "Команда: {command}\nРиск: {risk}\nИсточник: {source}\nОбоснование: {reasoning}\nОткат: {rollback}",
        "dialog.command.confirm.execute": "Выполнить",
        "dialog.command.confirm.decline": "Отклонить",
        "dialog.command.confirm.always_allow": "Всегда разрешать этот тип",
        "dialog.command.confirm.details": "Подробнее",
        "dialog.command.confirm.details.title": "Полезная нагрузка команды",
        "dialog.command.double_confirm.title": "Высокий риск — stop-zone",
        "dialog.command.double_confirm.body": "Stop-zone: {stop_zone}\nКоманда: {command}\nРиск: {risk}\n\nТребуется двойное подтверждение владельца.",
        "dialog.command.double_confirm.continue": "Перейти к проверке",
        "dialog.command.double_confirm.verify.title": "Проверка владельца",
        "dialog.command.double_confirm.verify.body": "Повторно подтвердите {command} (stop-zone: {stop_zone}).\nВведите OWNER для одобрения.",
        "dialog.command.double_confirm.verify.execute": "Подтвердить и выполнить",
        "cap.pending_confirmation.title": "Ожидает подтверждения команды",
        "cap.pending_confirmation.body": "Команда {command} ({command_id}…) ждёт вашего решения.",
        "cap.pending_confirmation.open_dialog": "Подтвердить команду",
        "cap.pending_confirmation.awaiting_agent": "Команда {command} ({command_id}…) подтверждена — ожидаем выполнение службы агента.",
        "cap.pending_confirmation.fallback_body": "Подтвердить выполнение команды {command}? (Упрощённый диалог.)",
        "dialog.cap.grant.title": "Выдать полномочие?",
        "dialog.cap.grant.body": "Выдать IuVe AI доступ: {capability}?\nУровень риска: {risk}\nИстекает: {expiry}\n\nМожно отозвать в любой момент.",
        "dialog.cap.root.title": "Root операции — КРИТИЧЕСКИЙ РИСК",
        "dialog.cap.root.body": "Это разрешение позволяет IuVe AI выполнять привилегированные операции на этом устройстве.\nВыдавайте только если полностью доверяете системе.",
        "dialog.cap.root.confirm": "Выдать Root-доступ",
        "dialog.cap.revoke.title": "Отозвать полномочие?",
        "dialog.cap.revoke.body": "Отозвать {capability}?\nIuVe AI больше не сможет использовать это полномочие.",
    },
}


_LOCALE_OVERRIDES: dict[str, dict[str, str]] = {
    "de": {
        "app.title": "IuVe Connect Agent Console",
        "nav.avatar": "Avatar",
        "nav.dashboard": "Dashboard",
        "nav.devices": "Geräte",
        "nav.diagnostics": "Diagnose",
        "nav.security": "Sicherheit",
        "nav.updates": "Updates",
        "header.refresh": "Aktualisieren",
        "header.settings": "Einstellungen",
        "header.profile": "Profil",
        "header.fullscreen.enter": "Vollbild",
        "header.fullscreen.exit": "Fenster",
        "header.device": "Gerät",
        "header.trust": "Vertrauen",
        "header.avatar_mode": "Avatar-Modus",
        "header.active_permissions": "Aktive Berechtigungen",
        "header.connection": "Verbindung",
        "header.orchestra": "Intelligenz",
        "status.orchestra.cloud_active": "Cloud Orchestra aktiv",
        "status.orchestra.local_fallback": "Lokaler Fallback-Modus",
        "status.orchestra.offline": "Offline / Server nicht erreichbar",
        "status.orchestra.cloud_active.bullet1": "Volle Cloud-Intelligenz über iuve.eu Orchestra",
        "status.orchestra.cloud_active.bullet2": "Berücksichtigt Tarif, Grants und Audit Ihres Kontos",
        "status.orchestra.cloud_active.bullet3": "Primäre Route für Avatar-Advisory und Intent-Routing",
        "status.orchestra.local_fallback.bullet1": "iuve.eu-Server nicht erreichbar oder Orchestra offline",
        "status.orchestra.local_fallback.bullet2": "Einfache Geräteaktionen funktionieren weiterhin",
        "status.orchestra.local_fallback.bullet3": "Lokales Ollama kann helfen, falls installiert (optional)",
        "status.orchestra.offline.bullet1": "Keine Cloud-Verbindung und kein lokales LLM erkannt",
        "status.orchestra.offline.bullet2": "Nur grundlegende Fast-Path-Gerätebefehle (kein AI-Advisory)",
        "status.orchestra.offline.bullet3": "Gerät koppeln und Verbindung wiederherstellen für volle Intelligenz",
        "modal.orchestra_status.title": "IuVe-Intelligenzmodus",
        "modal.orchestra_status.done": "Schließen",
        "modal.orchestra_status.check": "Orchestra prüfen",
        "status.orchestra.reason.label": "Warum lokaler Modus",
        "status.orchestra.detail.label": "Diagnose",
        "status.orchestra.reason.not_connected": "Geräteanmeldedaten fehlen im lokalen Speicher.",
        "status.orchestra.reason.backend_unreachable": "iuve.eu Health-Endpoint ist nicht erreichbar.",
        "status.orchestra.reason.account_unverified": "Backend hat das Geräteprofil nicht bestätigt.",
        "status.orchestra.reason.orchestra_disabled": "Cloud Orchestra ist auf dem Server deaktiviert.",
        "status.orchestra.reason.entitlement_denied": "Ihr Tarif enthält keine Cloud-AI-Provider.",
        "status.orchestra.reason.probe_failed": "Orchestra-Probe fehlgeschlagen trotz Pairing.",
        "avatar.conversation.title": "Unterhaltung",
        "avatar.chat.avatar": "Avatar",
        "avatar.input.placeholder": "Frag IuVe nach Zielen auf diesem Gerät…",
        "avatar.advisory.only": "Nur Hinweis. Es wurde keine Aktion ausgeführt.",
        "avatar.chat.accuracy_disclaimer": (
            "IuVeAI kann Fehler machen. Bitte prüfen Sie wichtige Informationen."
        ),
        "avatar.chat.mode.auto": "Auto",
        "avatar.chat.mode.local": "Nur lokal",
        "avatar.chat.mode.cloud_assisted": "Cloud-unterstützt",
        "avatar.action.stop": "Plan stoppen",
        "avatar.intro": "{device} | Wie kann ich heute mit diesem Gerät helfen?",
        "avatar.chat.welcome.tagline": (
            "IuVe Console bist du auf deinem Computer — mit KI-Superkräften: nenne dein Ziel, "
            "der Agent wählt Website, App oder Cloud und führt sicher mit deiner Freigabe aus."
        ),
        "avatar.chat.welcome": (
            "IuVe Console bist du auf deinem Computer — mit KI-Superkräften.\n"
            "Beschreibe dein Ziel in einfachen Worten — ohne Befehle oder Fachjargon.\n"
            "Der Agent wählt Website, App oder Cloud und schlägt einen Plan bis zum Ergebnis vor.\n"
            "Sensible Schritte laufen nur mit deiner Freigabe; alles wird protokolliert.\n"
            "Für Auto-Aktionen: vertrauenswürdiger Status und Berechtigungen im Permission Center."
        ),
        "avatar.action.send": "Senden",
        "avatar.action.cancel": "Abbrechen",
        "avatar.action.execute": "Ausführen",
        "avatar.action.execute_plan": "Plan ausführen",
        "modal.vision_fail.title": "Ergebnis auf dem Bildschirm nicht bestätigt",
        "modal.vision_fail.body": "Der Agent hat den erwarteten Text ({expected_text}) nicht gefunden. Korrigieren Sie manuell und tippen Sie auf «Erneut prüfen» (Versuch {attempt}/{max_attempts}).",
        "modal.vision_fail.ollama_hint": "Nur Entwicklung: lokales Ollama erfordert ollama pull llava und AVATAR_DESKTOP_VISION_LOCAL_ENABLED=true.",
        "modal.vision_fail.cloud_hint": "Prüfung über IuVe Orchestra Cloud…",
        "modal.vision_fail.retry": "Erneut prüfen",
        "status.model.chip.orchestra": "Orchestra",
        "status.model.chip.local": "Lokal",
        "status.model.chip.local_default": "ollama",
        "status.model.chip.rules": "Lokale Regeln",
        "status.model.chip.offline": "Offline",
        "avatar.execution.timeline.classify": "Klassifizierung",
        "avatar.execution.timeline.planner": "Planer (Orchestra)",
        "avatar.execution.timeline.planner_local": "Planer (lokaler Fallback)",
        "avatar.execution.timeline.execute": "Ausführungsschritt",
        "avatar.execution.timeline.done": "Fertig",
        "avatar.execution.timeline.error": "Fehler",
        "avatar.execution.timeline.ok": "✓",
        "avatar.execution.timeline.fail": "✗",
        "avatar.execution.timeline.layer.orchestra": "Orchestra/Backend-Schicht",
        "avatar.execution.timeline.layer.planner": "Planer-Schicht",
        "avatar.execution.timeline.layer.agent": "Desktop-Agent",
        "avatar.execution.timeline.layer.classify": "Klassifizierungsschicht",
        "avatar.chat.file_drop.chip": "Datei: {filename} · Orchestra → {routed_model}",
        "avatar.chat.file_drop.audio_stub": "Datei: {filename} · Audio-Transkription geplant (Orchestra → {routed_model})",
        "avatar.chat.file_drop.code_hint": "Datei: {filename} · Coding-Provider-Hinweis (→ {routed_model})",
        "avatar.chat.file_drop.zip_listing": "Datei: {filename} · Inhalt: {listing}",
        "avatar.chat.file_drop.unsupported": "Nicht unterstützter Dateityp: {filename}",
        "avatar.chat.file_drop.not_found": "Datei nicht gefunden: {filename}",
        "avatar.chat.file_drop.disabled": "Dateiablage ist auf diesem Gerät deaktiviert.",
        "avatar.chat.working.badge": "{count} in Arbeit",
        "avatar.chat.tag.multitask": "Multitask",
        "avatar.chat.tag.dismiss": "Kontext-Tag schließen",
        "avatar.chat.mode.hint": "IuVe wählt die KI-Route — kein manueller Modellwechsel",
        "avatar.input.attach": "Kontext anhängen oder Berechtigungen öffnen",
        "avatar.plan.preview.title": "Ausführungsplan-Vorschau",
        "avatar.plan.preview.body": "Ziel: {goal}\nSchritte ({step_count}):\n{steps}",
        "avatar.plan.preview.note": "Nur Planvorschau. Mehrschrittige Ausführung ist auf diesem Gerät deaktiviert.",
        "avatar.plan.preview.execute_note": "Plan prüfen und «Plan ausführen» drücken, um alle Schritte zu starten.",
        "avatar.plan.session.allowed": "Für diese Aufgabe erlaubt",
        "avatar.plan.session.auto_exec": "Automatische Ausführung innerhalb der gewährten Zugriffe",
        "avatar.plan.session.stop_task": "Aufgabe stoppen",
        "avatar.action.executing_plan": "Plan wird ausgeführt…",
        "avatar.chat.response.advisory_consultation_required": (
            "Diese Aufgabe braucht Beratung, keine PC-Aktionen. "
            "Der Cloud-Planer konnte sie nicht in Geräteschritte zerlegen — stellen Sie eine Folgefrage oder formulieren Sie eine konkrete Aktion."
        ),
        "avatar.chat.response.orchestra_error_detail": "Orchestra-Diagnose: {detail}",
        "avatar.chat.response.thinking": "Denke nach…",
        "avatar.chat.response.thinking_cloud": "Denke via IuVe Orchestra…",
        "avatar.chat.response.vision_required": (
            "Bildschirm-Vision ist nicht verfügbar. Erteilen Sie Bildschirm-Vision im Permission Center "
            "oder setzen Sie AVATAR_DESKTOP_VISION_ENABLED=true im Agent-Dienst."
        ),
        "avatar.chat.response.vision_flag_required": (
            "Bildschirm-Vision ist durch AVATAR_DESKTOP_VISION_ENABLED=false im Agent-Dienst blockiert. "
            "Entfernen Sie diese Einstellung oder setzen Sie true. Ihre Bildschirm-Vision-Berechtigung ist bereits aktiv."
        ),
        "avatar.chat.response.vision_grant_required": (
            "Bildschirm-Vision erfordert die Berechtigung Bildschirm-Vision. Öffnen Sie das Permission Center und aktivieren Sie "
            "«Bildschirm-Vision» (empfohlen: 1-Stunden-Aktionssession)."
        ),
    },
    "fr": {
        "app.title": "IuVe Connect Agent Console",
        "nav.avatar": "Avatar",
        "nav.dashboard": "Tableau de bord",
        "nav.devices": "Appareils",
        "nav.diagnostics": "Diagnostics",
        "nav.security": "Sécurité",
        "nav.updates": "Mises à jour",
        "header.refresh": "Actualiser",
        "header.settings": "Paramètres",
        "header.profile": "Profil",
        "header.fullscreen.enter": "Plein écran",
        "header.fullscreen.exit": "Fenêtré",
        "header.device": "Appareil",
        "header.trust": "Confiance",
        "header.avatar_mode": "Mode Avatar",
        "header.active_permissions": "Autorisations actives",
        "header.connection": "Connexion",
        "header.orchestra": "Intelligence",
        "status.orchestra.cloud_active": "Cloud Orchestra actif",
        "status.orchestra.local_fallback": "Mode secours local",
        "status.orchestra.offline": "Hors ligne / serveur indisponible",
        "status.orchestra.cloud_active.bullet1": "Intelligence cloud complète via Orchestra sur iuve.eu",
        "status.orchestra.cloud_active.bullet2": "Respecte le forfait, les grants et l'audit de votre compte",
        "status.orchestra.cloud_active.bullet3": "Route principale pour l'advisory et le routage d'intention Avatar",
        "status.orchestra.local_fallback.bullet1": "Serveur iuve.eu indisponible ou Orchestra hors ligne",
        "status.orchestra.local_fallback.bullet2": "Les actions simples sur l'appareil restent disponibles",
        "status.orchestra.local_fallback.bullet3": "Ollama local peut aider s'il est déjà installé (optionnel)",
        "status.orchestra.offline.bullet1": "Pas de cloud et aucun LLM local détecté",
        "status.orchestra.offline.bullet2": "Seules les commandes fast-path de base (pas d'advisory IA)",
        "status.orchestra.offline.bullet3": "Associez l'appareil et rétablissez la connexion pour l'intelligence complète",
        "modal.orchestra_status.title": "Mode d'intelligence IuVe",
        "modal.orchestra_status.done": "Fermer",
        "modal.orchestra_status.check": "Vérifier Orchestra",
        "status.orchestra.reason.label": "Pourquoi le mode local",
        "status.orchestra.detail.label": "Diagnostic",
        "status.orchestra.reason.not_connected": "Identifiants appareil absents du stockage local.",
        "status.orchestra.reason.backend_unreachable": "Impossible d'atteindre le health endpoint iuve.eu.",
        "status.orchestra.reason.account_unverified": "Le backend n'a pas confirmé le profil appareil.",
        "status.orchestra.reason.orchestra_disabled": "Cloud Orchestra est désactivé sur le serveur.",
        "status.orchestra.reason.entitlement_denied": "Votre forfait n'inclut pas les fournisseurs cloud IA.",
        "status.orchestra.reason.probe_failed": "La sonde Orchestra a échoué malgré le pairing.",
        "avatar.conversation.title": "Conversation",
        "avatar.chat.avatar": "Avatar",
        "avatar.input.placeholder": "Demandez à IuVe les objectifs sur cet appareil…",
        "avatar.advisory.only": "Avis uniquement. Aucune action exécutée.",
        "avatar.chat.accuracy_disclaimer": (
            "IuVeAI peut commettre des erreurs. Nous recommandons de vérifier les informations importantes."
        ),
        "avatar.chat.mode.auto": "Auto",
        "avatar.chat.mode.local": "Local seulement",
        "avatar.chat.mode.cloud_assisted": "Avec cloud",
        "avatar.action.stop": "Arrêter le plan",
        "avatar.intro": "{device} | Comment puis-je aider avec cet appareil aujourd'hui ?",
        "avatar.chat.welcome.tagline": (
            "IuVe Console, c'est vous sur votre ordinateur, avec des super-pouvoirs IA : "
            "décrivez votre objectif — l'agent choisit le site, l'app ou le cloud et agit en sécurité avec votre accord."
        ),
        "avatar.chat.welcome": (
            "IuVe Console, c'est vous sur votre ordinateur, avec des super-pouvoirs IA.\n"
            "Décrivez votre objectif en langage simple — sans commandes ni jargon.\n"
            "L'agent choisit le site, l'app ou le cloud et propose un plan jusqu'au résultat.\n"
            "Les étapes sensibles ne s'exécutent qu'avec votre accord ; tout est audité.\n"
            "Pour l'exécution auto : état de confiance et autorisations dans le Permission Center."
        ),
        "avatar.action.send": "Envoyer",
        "avatar.action.cancel": "Annuler",
        "avatar.action.execute": "Exécuter",
        "avatar.action.execute_plan": "Exécuter le plan",
        "modal.vision_fail.title": "Impossible de confirmer le résultat à l'écran",
        "modal.vision_fail.body": "L'agent n'a pas trouvé le texte attendu ({expected_text}). Corrigez manuellement puis appuyez sur « Réessayer » (tentative {attempt}/{max_attempts}).",
        "modal.vision_fail.ollama_hint": "Dev uniquement : Ollama local nécessite ollama pull llava et AVATAR_DESKTOP_VISION_LOCAL_ENABLED=true.",
        "modal.vision_fail.cloud_hint": "Vérification via le cloud IuVe Orchestra…",
        "modal.vision_fail.retry": "Réessayer la vérification",
        "status.model.chip.orchestra": "Orchestra",
        "status.model.chip.local": "Local",
        "status.model.chip.local_default": "ollama",
        "status.model.chip.rules": "Règles locales",
        "status.model.chip.offline": "Hors ligne",
        "avatar.execution.timeline.classify": "Classification",
        "avatar.execution.timeline.planner": "Planificateur (Orchestra)",
        "avatar.execution.timeline.planner_local": "Planificateur (secours local)",
        "avatar.execution.timeline.execute": "Étape d'exécution",
        "avatar.execution.timeline.done": "Terminé",
        "avatar.execution.timeline.error": "Erreur",
        "avatar.execution.timeline.ok": "✓",
        "avatar.execution.timeline.fail": "✗",
        "avatar.execution.timeline.layer.orchestra": "couche Orchestra/backend",
        "avatar.execution.timeline.layer.planner": "couche planificateur",
        "avatar.execution.timeline.layer.agent": "agent de bureau",
        "avatar.execution.timeline.layer.classify": "couche de classification",
        "avatar.chat.file_drop.chip": "Fichier : {filename} · Orchestra → {routed_model}",
        "avatar.chat.file_drop.audio_stub": "Fichier : {filename} · transcription audio prévue (Orchestra → {routed_model})",
        "avatar.chat.file_drop.code_hint": "Fichier : {filename} · indication fournisseur code (→ {routed_model})",
        "avatar.chat.file_drop.zip_listing": "Fichier : {filename} · contenu : {listing}",
        "avatar.chat.file_drop.unsupported": "Type de fichier non pris en charge : {filename}",
        "avatar.chat.file_drop.not_found": "Fichier introuvable : {filename}",
        "avatar.chat.file_drop.disabled": "Le glisser-déposer de fichiers est désactivé sur cet appareil.",
        "avatar.chat.working.badge": "{count} en cours",
        "avatar.chat.tag.multitask": "Multitâche",
        "avatar.chat.tag.dismiss": "Retirer l'étiquette de contexte",
        "avatar.chat.mode.hint": "IuVe choisit la route IA — pas de sélection manuelle de modèle",
        "avatar.input.attach": "Joindre un contexte ou ouvrir les autorisations",
        "avatar.plan.preview.title": "Aperçu du plan d'exécution",
        "avatar.plan.preview.body": "Objectif : {goal}\nÉtapes ({step_count}) :\n{steps}",
        "avatar.plan.preview.note": "Aperçu uniquement. L'exécution multi-étapes est désactivée sur cet appareil.",
        "avatar.plan.preview.execute_note": "Vérifiez le plan et appuyez sur « Exécuter le plan » pour lancer toutes les étapes.",
        "avatar.plan.session.allowed": "Autorisé pour cette tâche",
        "avatar.plan.session.auto_exec": "Exécution automatique dans l'accès accordé",
        "avatar.plan.session.stop_task": "Arrêter la tâche",
        "avatar.action.executing_plan": "Exécution du plan…",
        "avatar.chat.response.advisory_consultation_required": (
            "Cette tâche nécessite une consultation, pas des actions sur le PC. "
            "Le planificateur cloud n'a pas pu la décomposer en étapes appareil — posez une question de suivi ou reformulez en action concrète."
        ),
        "avatar.chat.response.orchestra_error_detail": "Diagnostic Orchestra : {detail}",
        "avatar.chat.response.thinking": "Réflexion…",
        "avatar.chat.response.thinking_cloud": "Réflexion via IuVe Orchestra…",
        "avatar.chat.response.vision_required": (
            "La vision écran est indisponible. Accordez Vision écran dans le Permission Center "
            "ou définissez AVATAR_DESKTOP_VISION_ENABLED=true dans le service agent."
        ),
        "avatar.chat.response.vision_flag_required": (
            "La vision écran est bloquée par AVATAR_DESKTOP_VISION_ENABLED=false dans le service agent. "
            "Supprimez ce paramètre ou mettez true. Votre grant Vision écran est déjà actif."
        ),
        "avatar.chat.response.vision_grant_required": (
            "La vision écran requiert le grant Vision écran. Ouvrez le Permission Center et activez "
            "« Vision écran » (recommandé : session d'action d'1 heure)."
        ),
    },
    "es": {
        "app.title": "IuVe Connect Agent Console",
        "nav.avatar": "Avatar",
        "nav.dashboard": "Panel",
        "nav.devices": "Dispositivos",
        "nav.diagnostics": "Diagnóstico",
        "nav.security": "Seguridad",
        "nav.updates": "Actualizaciones",
        "header.refresh": "Actualizar",
        "header.settings": "Ajustes",
        "header.profile": "Perfil",
        "header.fullscreen.enter": "Pantalla completa",
        "header.fullscreen.exit": "Ventana",
        "header.device": "Dispositivo",
        "header.trust": "Confianza",
        "header.avatar_mode": "Modo Avatar",
        "header.active_permissions": "Permisos activos",
        "header.connection": "Conexión",
        "header.orchestra": "Inteligencia",
        "status.orchestra.cloud_active": "Cloud Orchestra activo",
        "status.orchestra.local_fallback": "Modo de respaldo local",
        "status.orchestra.offline": "Sin conexión / servidor no disponible",
        "status.orchestra.cloud_active.bullet1": "Inteligencia cloud completa vía Orchestra en iuve.eu",
        "status.orchestra.cloud_active.bullet2": "Respeta el plan, grants y auditoría de su cuenta",
        "status.orchestra.cloud_active.bullet3": "Ruta principal para advisory e intent en Avatar",
        "status.orchestra.local_fallback.bullet1": "Servidor iuve.eu no disponible u Orchestra fuera de línea",
        "status.orchestra.local_fallback.bullet2": "Las acciones simples del dispositivo siguen funcionando",
        "status.orchestra.local_fallback.bullet3": "Ollama local puede ayudar si ya está instalado (opcional)",
        "status.orchestra.offline.bullet1": "Sin cloud y sin LLM local detectado",
        "status.orchestra.offline.bullet2": "Solo comandos fast-path básicos (sin advisory IA)",
        "status.orchestra.offline.bullet3": "Empareje el dispositivo y restaure la conexión para inteligencia completa",
        "modal.orchestra_status.title": "Modo de inteligencia IuVe",
        "modal.orchestra_status.done": "Cerrar",
        "modal.orchestra_status.check": "Comprobar Orchestra",
        "status.orchestra.reason.label": "Por qué modo local",
        "status.orchestra.detail.label": "Diagnóstico",
        "status.orchestra.reason.not_connected": "Faltan credenciales del dispositivo en almacenamiento local.",
        "status.orchestra.reason.backend_unreachable": "No se puede alcanzar el health endpoint de iuve.eu.",
        "status.orchestra.reason.account_unverified": "El backend no confirmó el perfil del dispositivo.",
        "status.orchestra.reason.orchestra_disabled": "Cloud Orchestra está desactivado en el servidor.",
        "status.orchestra.reason.entitlement_denied": "Su plan no incluye proveedores cloud de IA.",
        "status.orchestra.reason.probe_failed": "La prueba de Orchestra falló aunque el dispositivo está paired.",
        "avatar.conversation.title": "Conversación",
        "avatar.chat.avatar": "Avatar",
        "avatar.input.placeholder": "Pregunta a IuVe sobre objetivos en este dispositivo…",
        "avatar.advisory.only": "Solo aviso. No se ejecutó ninguna acción.",
        "avatar.chat.accuracy_disclaimer": (
            "IuVeAI puede cometer errores. Le recomendamos verificar la información importante."
        ),
        "avatar.chat.mode.auto": "Auto",
        "avatar.chat.mode.local": "Solo local",
        "avatar.chat.mode.cloud_assisted": "Con nube",
        "avatar.action.stop": "Detener plan",
        "avatar.intro": "{device} | ¿Cómo puedo ayudar con este dispositivo hoy?",
        "avatar.chat.welcome.tagline": (
            "IuVe Console eres tú en tu ordenador, con superpoderes de IA: indica tu objetivo — "
            "el agente elige sitio, app o nube y lo lleva a cabo de forma segura con tu aprobación."
        ),
        "avatar.chat.welcome": (
            "IuVe Console eres tú en tu ordenador, con superpoderes de IA.\n"
            "Describe tu objetivo en palabras sencillas — sin comandos ni jerga.\n"
            "El agente elige sitio, app o nube y propone un plan hasta el resultado.\n"
            "Los pasos sensibles solo se ejecutan con tu aprobación; todo queda auditado.\n"
            "Para auto-ejecución: estado de confianza y permisos en Permission Center."
        ),
        "avatar.action.send": "Enviar",
        "avatar.action.cancel": "Cancelar",
        "avatar.action.execute": "Ejecutar",
        "avatar.action.execute_plan": "Ejecutar plan",
        "modal.vision_fail.title": "No se pudo confirmar el resultado en pantalla",
        "modal.vision_fail.body": "El agente no encontró el texto esperado ({expected_text}). Corríjalo manualmente y pulse «Reintentar» (intento {attempt}/{max_attempts}).",
        "modal.vision_fail.ollama_hint": "Solo desarrollo: Ollama local requiere ollama pull llava y AVATAR_DESKTOP_VISION_LOCAL_ENABLED=true.",
        "modal.vision_fail.cloud_hint": "Verificación vía cloud IuVe Orchestra…",
        "modal.vision_fail.retry": "Reintentar verificación",
        "status.model.chip.orchestra": "Orchestra",
        "status.model.chip.local": "Local",
        "status.model.chip.local_default": "ollama",
        "status.model.chip.rules": "Reglas locales",
        "status.model.chip.offline": "Sin conexión",
        "avatar.execution.timeline.classify": "Clasificación",
        "avatar.execution.timeline.planner": "Planificador (Orchestra)",
        "avatar.execution.timeline.planner_local": "Planificador (respaldo local)",
        "avatar.execution.timeline.execute": "Paso de ejecución",
        "avatar.execution.timeline.done": "Hecho",
        "avatar.execution.timeline.error": "Error",
        "avatar.execution.timeline.ok": "✓",
        "avatar.execution.timeline.fail": "✗",
        "avatar.execution.timeline.layer.orchestra": "capa Orchestra/backend",
        "avatar.execution.timeline.layer.planner": "capa planificador",
        "avatar.execution.timeline.layer.agent": "agente de escritorio",
        "avatar.execution.timeline.layer.classify": "capa de clasificación",
        "avatar.chat.file_drop.chip": "Archivo: {filename} · Orchestra → {routed_model}",
        "avatar.chat.file_drop.audio_stub": "Archivo: {filename} · transcripción de audio planificada (Orchestra → {routed_model})",
        "avatar.chat.file_drop.code_hint": "Archivo: {filename} · indicación de proveedor de código (→ {routed_model})",
        "avatar.chat.file_drop.zip_listing": "Archivo: {filename} · contenido: {listing}",
        "avatar.chat.file_drop.unsupported": "Tipo de archivo no compatible: {filename}",
        "avatar.chat.file_drop.not_found": "Archivo no encontrado: {filename}",
        "avatar.chat.file_drop.disabled": "Soltar archivos está desactivado en este dispositivo.",
        "avatar.chat.working.badge": "{count} en curso",
        "avatar.chat.tag.multitask": "Multitarea",
        "avatar.chat.tag.dismiss": "Quitar etiqueta de contexto",
        "avatar.chat.mode.hint": "IuVe elige la ruta de IA — no es un selector manual de modelo",
        "avatar.input.attach": "Adjuntar contexto o abrir permisos",
        "avatar.plan.preview.title": "Vista previa del plan de ejecución",
        "avatar.plan.preview.body": "Objetivo: {goal}\nPasos ({step_count}):\n{steps}",
        "avatar.plan.preview.note": "Solo vista previa. La ejecución multi-paso está desactivada en este dispositivo.",
        "avatar.plan.preview.execute_note": "Revise el plan y pulse «Ejecutar plan» para ejecutar todos los pasos.",
        "avatar.plan.session.allowed": "Permitido para esta tarea",
        "avatar.plan.session.auto_exec": "Ejecución automática dentro del acceso concedido",
        "avatar.plan.session.stop_task": "Detener tarea",
        "avatar.action.executing_plan": "Ejecutando plan…",
        "avatar.chat.response.advisory_consultation_required": (
            "Esta tarea requiere consulta, no acciones en el PC. "
            "El planificador cloud no pudo descomponerla en pasos del dispositivo — haga una pregunta de seguimiento o reformule como acción concreta."
        ),
        "avatar.chat.response.orchestra_error_detail": "Diagnóstico Orchestra: {detail}",
        "avatar.chat.response.thinking": "Pensando…",
        "avatar.chat.response.thinking_cloud": "Pensando vía IuVe Orchestra…",
        "avatar.chat.response.vision_required": (
            "La visión de pantalla no está disponible. Conceda Visión de pantalla en Permission Center "
            "o establezca AVATAR_DESKTOP_VISION_ENABLED=true en el servicio del agente."
        ),
        "avatar.chat.response.vision_flag_required": (
            "La visión de pantalla está bloqueada por AVATAR_DESKTOP_VISION_ENABLED=false en el servicio del agente. "
            "Elimine esa configuración o póngala en true. Su grant de Visión de pantalla ya está activo."
        ),
        "avatar.chat.response.vision_grant_required": (
            "La visión de pantalla requiere el grant Visión de pantalla. Abra Permission Center y active "
            "«Visión de pantalla» (recomendado: sesión de acción de 1 hora)."
        ),
    },
    "ro": {
        "app.title": "IuVe Connect Agent Console",
        "nav.avatar": "Avatar",
        "nav.dashboard": "Panou",
        "nav.devices": "Dispozitive",
        "nav.diagnostics": "Diagnostic",
        "nav.security": "Securitate",
        "nav.updates": "Actualizări",
        "header.refresh": "Reîmprospătare",
        "header.settings": "Setări",
        "header.profile": "Profil",
        "header.fullscreen.enter": "Ecran complet",
        "header.fullscreen.exit": "Fereastră",
        "header.device": "Dispozitiv",
        "header.trust": "Încredere",
        "header.avatar_mode": "Mod Avatar",
        "header.active_permissions": "Permisiuni active",
        "header.connection": "Conexiune",
        "header.orchestra": "Inteligență",
        "status.orchestra.cloud_active": "Cloud Orchestra activ",
        "status.orchestra.local_fallback": "Mod rezervă local",
        "status.orchestra.offline": "Offline / server indisponibil",
        "status.orchestra.cloud_active.bullet1": "Inteligență cloud completă prin Orchestra pe iuve.eu",
        "status.orchestra.cloud_active.bullet2": "Respectă planul, granturile și auditul contului",
        "status.orchestra.cloud_active.bullet3": "Rută principală pentru advisory și intent Avatar",
        "status.orchestra.local_fallback.bullet1": "Serverul iuve.eu este indisponibil sau Orchestra offline",
        "status.orchestra.local_fallback.bullet2": "Acțiunile simple pe dispozitiv încă funcționează",
        "status.orchestra.local_fallback.bullet3": "Ollama local poate ajuta dacă este instalat (opțional)",
        "status.orchestra.offline.bullet1": "Fără cloud și fără LLM local detectat",
        "status.orchestra.offline.bullet2": "Doar comenzi fast-path de bază (fără advisory AI)",
        "status.orchestra.offline.bullet3": "Asociați dispozitivul și restabiliți conexiunea pentru inteligență completă",
        "modal.orchestra_status.title": "Modul de inteligență IuVe",
        "modal.orchestra_status.done": "Închide",
        "modal.orchestra_status.check": "Verifică Orchestra",
        "status.orchestra.reason.label": "De ce mod local",
        "status.orchestra.detail.label": "Diagnostic",
        "status.orchestra.reason.not_connected": "Lipsesc credențialele dispozitivului în stocarea locală.",
        "status.orchestra.reason.backend_unreachable": "Nu se poate accesa health endpoint-ul iuve.eu.",
        "status.orchestra.reason.account_unverified": "Backend-ul nu a confirmat profilul dispozitivului.",
        "status.orchestra.reason.orchestra_disabled": "Cloud Orchestra este dezactivat pe server.",
        "status.orchestra.reason.entitlement_denied": "Planul dvs. nu include furnizori cloud AI.",
        "status.orchestra.reason.probe_failed": "Sonda Orchestra a eșuat deși dispozitivul este paired.",
        "avatar.conversation.title": "Conversație",
        "avatar.chat.avatar": "Avatar",
        "avatar.input.placeholder": "Întreabă IuVe despre obiective pe acest dispozitiv…",
        "avatar.advisory.only": "Doar informativ. Nicio acțiune nu a fost executată.",
        "avatar.chat.accuracy_disclaimer": (
            "IuVeAI poate greși. Vă recomandăm să verificați informațiile importante."
        ),
        "avatar.chat.mode.auto": "Auto",
        "avatar.chat.mode.local": "Doar local",
        "avatar.chat.mode.cloud_assisted": "Cu cloud",
        "avatar.action.stop": "Oprește planul",
        "avatar.intro": "{device} | Cu ce te pot ajuta pe acest dispozitiv astăzi?",
        "avatar.chat.welcome.tagline": (
            "IuVe Console ești tu pe computerul tău, cu superputeri AI: spune obiectivul — "
            "agentul alege site-ul, aplicația sau cloud-ul și duce totul la capăt în siguranță, cu aprobarea ta."
        ),
        "avatar.chat.welcome": (
            "IuVe Console ești tu pe computerul tău, cu superputeri AI.\n"
            "Descrie obiectivul în cuvinte simple — fără comenzi sau jargon.\n"
            "Agentul alege site-ul, aplicația sau cloud-ul și propune un plan până la rezultat.\n"
            "Pașii sensibili rulează doar cu aprobarea ta; totul este auditat.\n"
            "Pentru auto-execuție: stare de încredere și permisiuni în Permission Center."
        ),
        "avatar.action.send": "Trimite",
        "avatar.action.cancel": "Anulează",
        "avatar.action.execute": "Execută",
        "avatar.action.execute_plan": "Execută planul",
        "modal.vision_fail.title": "Nu s-a putut confirma rezultatul pe ecran",
        "modal.vision_fail.body": "Agentul nu a găsit textul așteptat ({expected_text}). Corectați manual și apăsați «Reîncearcă» (încercarea {attempt}/{max_attempts}).",
        "modal.vision_fail.ollama_hint": "Doar dezvoltare: Ollama local necesită ollama pull llava și AVATAR_DESKTOP_VISION_LOCAL_ENABLED=true.",
        "modal.vision_fail.cloud_hint": "Verificare prin cloud IuVe Orchestra…",
        "modal.vision_fail.retry": "Reîncearcă verificarea",
        "status.model.chip.orchestra": "Orchestra",
        "status.model.chip.local": "Local",
        "status.model.chip.local_default": "ollama",
        "status.model.chip.rules": "Reguli locale",
        "status.model.chip.offline": "Offline",
        "avatar.execution.timeline.classify": "Clasificare",
        "avatar.execution.timeline.planner": "Planificator (Orchestra)",
        "avatar.execution.timeline.planner_local": "Planificator (rezervă locală)",
        "avatar.execution.timeline.execute": "Pas de execuție",
        "avatar.execution.timeline.done": "Gata",
        "avatar.execution.timeline.error": "Eroare",
        "avatar.execution.timeline.ok": "✓",
        "avatar.execution.timeline.fail": "✗",
        "avatar.execution.timeline.layer.orchestra": "strat Orchestra/backend",
        "avatar.execution.timeline.layer.planner": "strat planificator",
        "avatar.execution.timeline.layer.agent": "agent desktop",
        "avatar.execution.timeline.layer.classify": "strat de clasificare",
        "avatar.chat.file_drop.chip": "Fișier: {filename} · Orchestra → {routed_model}",
        "avatar.chat.file_drop.audio_stub": "Fișier: {filename} · transcriere audio planificată (Orchestra → {routed_model})",
        "avatar.chat.file_drop.code_hint": "Fișier: {filename} · indiciu furnizor cod (→ {routed_model})",
        "avatar.chat.file_drop.zip_listing": "Fișier: {filename} · conținut: {listing}",
        "avatar.chat.file_drop.unsupported": "Tip de fișier neacceptat: {filename}",
        "avatar.chat.file_drop.not_found": "Fișier negăsit: {filename}",
        "avatar.chat.file_drop.disabled": "Tragerea fișierelor este dezactivată pe acest dispozitiv.",
        "avatar.chat.working.badge": "{count} în lucru",
        "avatar.chat.tag.multitask": "Multitask",
        "avatar.chat.tag.dismiss": "Elimină eticheta de context",
        "avatar.chat.mode.hint": "IuVe alege ruta AI — nu este un selector manual de model",
        "avatar.input.attach": "Atașează context sau deschide permisiunile",
        "avatar.plan.preview.title": "Previzualizare plan de execuție",
        "avatar.plan.preview.body": "Obiectiv: {goal}\nPași ({step_count}):\n{steps}",
        "avatar.plan.preview.note": "Doar previzualizare plan. Execuția multi-pas este dezactivată pe acest dispozitiv.",
        "avatar.plan.preview.execute_note": "Verificați planul și apăsați «Execută planul» pentru a rula toți pașii.",
        "avatar.plan.session.allowed": "Permis pentru această sarcină",
        "avatar.plan.session.auto_exec": "Execuție automată în accesul acordat",
        "avatar.plan.session.stop_task": "Oprește sarcina",
        "avatar.action.executing_plan": "Se execută planul…",
        "avatar.chat.response.advisory_consultation_required": (
            "Această sarcină necesită consultanță, nu acțiuni pe PC. "
            "Planificatorul cloud nu a putut o descompune în pași pe dispozitiv — puneți o întrebare de follow-up sau reformulați ca acțiune concretă."
        ),
        "avatar.chat.response.orchestra_error_detail": "Diagnostic Orchestra: {detail}",
        "avatar.chat.response.thinking": "Mă gândesc…",
        "avatar.chat.response.thinking_cloud": "Mă gândesc prin IuVe Orchestra…",
        "avatar.chat.response.vision_required": (
            "Viziunea ecranului nu este disponibilă. Acordați Viziune ecran în Permission Center "
            "sau setați AVATAR_DESKTOP_VISION_ENABLED=true în serviciul agentului."
        ),
        "avatar.chat.response.vision_flag_required": (
            "Viziunea ecranului este blocată de AVATAR_DESKTOP_VISION_ENABLED=false în serviciul agentului. "
            "Eliminați această setare sau setați true. Grantul Viziune ecran este deja activ."
        ),
        "avatar.chat.response.vision_grant_required": (
            "Viziunea ecranului necesită grantul Viziune ecran. Deschideți Permission Center și activați "
            "«Viziune ecran» (recomandat: sesiune de acțiune de 1 oră)."
        ),
    },
}

_SECURITY_TAB_I18N_OVERRIDES: dict[str, dict[str, str]] = {
    "de": {
        "security.summary.trust.title": "Vertrauen",
        "security.summary.trust.body": "Diese Installation ist ein eigenes Gerät in Ihrem Konto. Vertrauen und Berechtigungen gelten nur hier; weitere Geräte auf anderen Betriebssystemen können gekoppelt werden, sobald der jeweilige Agent verfügbar ist.",
        "security.summary.consent.title": "Zustimmung",
        "security.summary.consent.body": "Berechtigungsänderungen bleiben explizit, lokal und auditierbar.",
        "security.summary.root.title": "Root",
        "security.summary.root.body": "Root-Operationen erfordern weiterhin eine ausdrückliche Bestätigung.",
        "security.summary.audit.title": "Audit",
        "security.summary.audit.body": "Alle Erteilungen und Widerrufe sind im Audit-Protokoll sichtbar.",
        "ai_providers.title": "KI-Anbieter",
        "ai_providers.subtitle": "IuVe wählt die beste KI für jede Aufgabe. Verbinden Sie Cloud-Konten hier — Passwörter werden in IuVe nie gespeichert.",
        "ai_providers.action.refresh": "Aktualisieren",
        "cap.page.title": "Sicherheit & Agentenberechtigungen",
        "cap.page.subtitle": "Verwalten Sie IuVe-KI-Berechtigungen auf diesem Gerät. Alle risikoreichen Aktionen erfordern Ihre ausdrückliche Zustimmung.",
        "cap.table.title": "Berechtigungsverwaltung",
        "cap.col.permission": "Berechtigung",
        "cap.col.grant": "Erteilen",
        "cap.col.risk": "Risiko",
        "cap.col.status": "Status",
        "cap.col.expiry": "Läuft ab",
        "cap.col.actions": "Aktionen",
        "cap.refresh": "Aktualisieren",
        "cap.grant": "Erteilen",
        "cap.grant_selection.title": "Berechtigungen zum Erteilen wählen",
        "cap.grant_selection.hint": "Aktivieren Sie die gewünschten Berechtigungen. Nicht markierte bleiben verweigert.",
        "cap.grant_selection.apply": "Berechtigungen anwenden",
        "cap.preset.minimal": "Minimal",
        "cap.preset.standard": "Standard",
        "cap.preset.full": "Voll",
        "cap.preset.expert": "Experte",
        "cap.screen_vision": "Bildschirm-Vision",
        "cap.description.screen_vision": "Begrenzter Desktop-Screenshot zur Ergebnisprüfung (nur lesen, kein Streaming)",
    },
    "fr": {
        "security.summary.trust.title": "Confiance",
        "security.summary.trust.body": "Cette installation constitue un appareil distinct dans votre compte. La confiance et les autorisations s'appliquent ici uniquement ; vous pouvez apparier d'autres appareils sur d'autres systèmes d'exploitation lorsque leur agent sera disponible.",
        "security.summary.consent.title": "Consentement",
        "security.summary.consent.body": "Les changements d'autorisations restent explicites, locaux et auditables.",
        "security.summary.root.title": "Root",
        "security.summary.root.body": "Les opérations root restent soumises à une confirmation explicite.",
        "security.summary.audit.title": "Audit",
        "security.summary.audit.body": "Toutes les attributions et révocations sont visibles dans le journal d'audit.",
        "ai_providers.title": "Fournisseurs IA",
        "ai_providers.subtitle": "IuVe choisit la meilleure IA pour chaque tâche. Connectez vos comptes cloud ici — les mots de passe ne sont jamais stockés dans IuVe.",
        "ai_providers.action.refresh": "Actualiser",
        "cap.page.title": "Sécurité et autorisations de l'agent",
        "cap.page.subtitle": "Gérez les autorisations IuVe AI sur cet appareil. Toutes les actions à haut risque nécessitent votre consentement explicite.",
        "cap.table.title": "Gestion des autorisations",
        "cap.col.permission": "Autorisation",
        "cap.col.grant": "Accorder",
        "cap.col.risk": "Risque",
        "cap.col.status": "Statut",
        "cap.col.expiry": "Expire",
        "cap.col.actions": "Actions",
        "cap.refresh": "Actualiser",
        "cap.grant": "Accorder",
        "cap.grant_selection.title": "Choisir les autorisations à accorder",
        "cap.grant_selection.hint": "Cochez les autorisations à autoriser. Les autres restent refusées jusqu'à attribution.",
        "cap.grant_selection.apply": "Appliquer les autorisations",
        "cap.preset.minimal": "Minimal",
        "cap.preset.standard": "Standard",
        "cap.preset.full": "Complet",
        "cap.preset.expert": "Expert",
        "cap.screen_vision": "Vision écran",
        "cap.description.screen_vision": "Capture d'écran limitée pour vérifier le résultat (lecture seule, pas de streaming)",
    },
    "es": {
        "security.summary.trust.title": "Confianza",
        "security.summary.trust.body": "Esta instalación es un dispositivo propio en su cuenta. La confianza y los permisos aplican solo aquí; puede emparejar otros dispositivos en otros sistemas operativos cuando su agente esté disponible.",
        "security.summary.consent.title": "Consentimiento",
        "security.summary.consent.body": "Los cambios de permisos siguen siendo explícitos, locales y auditables.",
        "security.summary.root.title": "Root",
        "security.summary.root.body": "Las operaciones root siguen requiriendo confirmación explícita.",
        "security.summary.audit.title": "Auditoría",
        "security.summary.audit.body": "Todas las concesiones y revocaciones son visibles en el registro de auditoría.",
        "ai_providers.title": "Proveedores de IA",
        "ai_providers.subtitle": "IuVe elige la mejor IA para cada tarea. Conecte cuentas en la nube aquí — las contraseñas nunca se almacenan en IuVe.",
        "ai_providers.action.refresh": "Actualizar",
        "cap.page.title": "Seguridad y permisos del agente",
        "cap.page.subtitle": "Gestione los permisos de IuVe AI en este dispositivo. Todas las acciones de alto riesgo requieren su consentimiento explícito.",
        "cap.table.title": "Gestión de permisos",
        "cap.col.permission": "Permiso",
        "cap.col.grant": "Conceder",
        "cap.col.risk": "Riesgo",
        "cap.col.status": "Estado",
        "cap.col.expiry": "Caduca",
        "cap.col.actions": "Acciones",
        "cap.refresh": "Actualizar",
        "cap.grant": "Conceder",
        "cap.grant_selection.title": "Elija permisos para conceder",
        "cap.grant_selection.hint": "Marque los permisos que desea permitir. Los no marcados permanecen denegados.",
        "cap.grant_selection.apply": "Aplicar permisos",
        "cap.preset.minimal": "Mínimo",
        "cap.preset.standard": "Estándar",
        "cap.preset.full": "Completo",
        "cap.preset.expert": "Experto",
        "cap.screen_vision": "Visión de pantalla",
        "cap.description.screen_vision": "Captura de pantalla limitada para verificar el resultado (solo lectura, sin streaming)",
    },
    "ro": {
        "security.summary.trust.title": "Încredere",
        "security.summary.trust.body": "Această instalare este un dispozitiv distinct în contul dvs. Încrederea și permisiunile se aplică doar aici; puteți împerechea alte dispozitive pe alte sisteme de operare când agentul respectiv este disponibil.",
        "security.summary.consent.title": "Consimțământ",
        "security.summary.consent.body": "Modificările permisiunilor rămân explicite, locale și auditabile.",
        "security.summary.root.title": "Root",
        "security.summary.root.body": "Operațiunile root rămân condiționate de confirmare explicită.",
        "security.summary.audit.title": "Audit",
        "security.summary.audit.body": "Toate acordările și revocările sunt vizibile în jurnalul de audit.",
        "ai_providers.title": "Furnizori AI",
        "ai_providers.subtitle": "IuVe alege cel mai bun AI pentru fiecare sarcină. Conectați conturile cloud aici — parolele nu sunt stocate în IuVe.",
        "ai_providers.action.refresh": "Reîmprospătare",
        "cap.page.title": "Securitate și permisiuni agent",
        "cap.page.subtitle": "Gestionați permisiunile IuVe AI pe acest dispozitiv. Toate acțiunile cu risc ridicat necesită consimțământ explicit.",
        "cap.table.title": "Gestionarea permisiunilor",
        "cap.col.permission": "Permisiune",
        "cap.col.grant": "Acordă",
        "cap.col.risk": "Risc",
        "cap.col.status": "Stare",
        "cap.col.expiry": "Expiră",
        "cap.col.actions": "Acțiuni",
        "cap.refresh": "Reîmprospătare",
        "cap.grant": "Acordă",
        "cap.grant_selection.title": "Alegeți permisiunile de acordat",
        "cap.grant_selection.hint": "Bifați permisiunile de permis. Cele nebifate rămân refuzate până la acordare.",
        "cap.grant_selection.apply": "Aplică permisiunile",
        "cap.preset.minimal": "Minimal",
        "cap.preset.standard": "Standard",
        "cap.preset.full": "Complet",
        "cap.preset.expert": "Expert",
        "cap.screen_vision": "Viziune ecran",
        "cap.description.screen_vision": "Captură de ecran limitată pentru verificarea rezultatului (doar citire, fără streaming)",
    },
}

for _locale_code, _security_overrides in _SECURITY_TAB_I18N_OVERRIDES.items():
    _LOCALE_OVERRIDES.setdefault(_locale_code, {}).update(_security_overrides)

for _locale_code, _overrides in _LOCALE_OVERRIDES.items():
    TRANSLATIONS[_locale_code] = {**TRANSLATIONS["en"], **_overrides}


def supported_locales() -> tuple[str, ...]:
    return SUPPORTED_LOCALES


def is_supported_locale(code: str) -> bool:
    return normalize_language(code) in SUPPORTED_LOCALES


def detect_language() -> str:
    """Default UI language without inferring from OS locale (profile sync is source of truth)."""
    candidate = os.getenv("IUVE_AGENT_UI_LANG", "").strip()
    if candidate:
        return normalize_language(candidate)
    return "en"


def normalize_language(raw_value: str) -> str:
    if not raw_value:
        return "en"

    first = raw_value.split(":", 1)[0].strip().lower()
    if not first:
        return "en"

    first = first.split(".", 1)[0].split("@", 1)[0].replace("_", "-")
    root = first.split("-", 1)[0].strip()
    if not root:
        return "en"

    root = LANG_ALIASES.get(root, root)
    if not root.isalpha() or len(root) > 3:
        return "en"
    if root in SUPPORTED_LOCALES:
        return root
    return "en"


def _language_label(code: str) -> str:
    return LANG_DISPLAY.get(code, code.upper())


def language_options(preferred: str | None = None) -> list[tuple[str, str]]:
    preferred_code = normalize_language(preferred or detect_language())
    entries = [(code, _language_label(code)) for code in SUPPORTED_LOCALES]

    def _rank(item: tuple[str, str]) -> tuple[int, str]:
        code, label = item
        if code == preferred_code:
            return (0, label.casefold())
        if code == "en":
            return (1, label.casefold())
        return (2, label.casefold())

    entries.sort(key=_rank)
    return entries


def translate(lang: str, key: str) -> str:
    code = normalize_language(lang)
    table = TRANSLATIONS.get(code) or TRANSLATIONS["en"]
    if key in table:
        return table[key]
    fallback = TRANSLATIONS["en"].get(key)
    if fallback:
        return fallback
    token = str(key or "").strip()
    if "." in token:
        token = token.rsplit(".", 1)[-1]
    token = token.replace("_", " ").strip()
    if not token:
        return "-"
    return token.capitalize()


def human_command_step_label(lang: str, command_type: str) -> str:
    cleaned = str(command_type or "").strip().lower()
    if not cleaned:
        return "-"
    return translate(lang, f"avatar.step.{cleaned}")


def human_plan_step_status(lang: str, status: str) -> str:
    cleaned = str(status or "").strip().lower()
    web_post_key = f"avatar.web_post.status.{cleaned}"
    localized_web = translate(lang, web_post_key)
    if localized_web != web_post_key:
        return localized_web
    if cleaned in {"ok", "success", "completed", "done"}:
        return translate(lang, "avatar.plan.status.ok")
    if cleaned in {"failed", "error", "denied"}:
        return translate(lang, "avatar.plan.status.failed")
    if cleaned in {"running", "in_progress", "pending"}:
        return translate(lang, "avatar.plan.status.running")
    return cleaned or "-"


def human_execution_error_reason(lang: str, reason: str) -> str:
    """Map machine error codes to localized user-facing explanations."""
    cleaned = str(reason or "").strip()
    if not cleaned:
        return translate(lang, "avatar.chat.error.permission_denied")
    code = cleaned.split(":")[-1].strip() if ":" in cleaned else cleaned
    key = f"avatar.chat.error.{code}"
    localized = translate(lang, key)
    if localized != key:
        return localized
    return cleaned


def human_execution_outcome_label(lang: str, status: str) -> str:
    cleaned = str(status or "").strip().lower()
    key = f"avatar.execution.status.{cleaned}"
    code = normalize_language(lang)
    table = TRANSLATIONS.get(code) or TRANSLATIONS["en"]
    if key in table:
        return table[key]
    if key in TRANSLATIONS["en"]:
        return TRANSLATIONS["en"][key]
    return translate(lang, "avatar.execution.status.ok")


LANG_OPTIONS: list[tuple[str, str]] = language_options()
