{
  "common": {
    "refresh": "Refresh",
    "loading": "Loading",
    "cancel": "Cancel",
    "confirm": "Confirm",
    "approve": "Approve",
    "deny": "Deny",
    "reject": "Reject",
    "clear": "Clear",
    "reset": "Reset",
    "close": "Close",
    "save": "Save",
    "edit": "Edit",
    "delete": "Delete",
    "search": "Search",
    "next_step": "Next",
    "second_confirm": "Confirm",
    "rethink": "Reconsider",
    "ipc_error": "IPC Error"
  },
  "nav": {
    "protection": "Protection",
    "approvals": "Approvals",
    "activity": "Activity",
    "servers": "Servers",
    "sessions": "Sessions",
    "privacy": "Privacy"
  },
  "protection": {
    "page_title": "Protection Overview",
    "subtitle": "What Vigil has caught for you, from the local audit ledger (same data as `vigil-hub inspect protection`).",
    "secrets_blocked": "Secrets blocked at input",
    "secrets_blocked_hint": "Raw secrets denied before reaching the server or model.",
    "leaks_detected": "Tool-result leaks detected",
    "leaks_detected_hint": "Secrets found in tool output; redacted before the agent when result redaction is on.",
    "aliases_withheld": "Secret aliases withheld",
    "aliases_withheld_hint": "secret:// placeholders that did not resolve, so the call was denied.",
    "events_audited": "Events audited",
    "events_audited_hint": "Across {sessions} session(s) — Vigil is recording activity.",
    "chain_ok_title": "Audit chain intact",
    "chain_ok_body": "The audit log has not been tampered with — the tamper-evident hash chain verifies.",
    "chain_bad_title": "Audit chain broken",
    "chain_bad_body": "The audit log failed hash-chain verification (possible tampering). Recent details are hidden for safety.",
    "recent_title": "Recent protection events",
    "recent_empty": "No protection events yet. Route your MCP tools through Vigil and use your agent normally — Vigil records and redacts as they run.",
    "recent_suppressed": "Recent details are hidden because the audit chain failed verification (a tampered log could contain injected secrets).",
    "loading_failed": "Could not load the protection summary."
  },
  "sidebar": {
    "app_title": "Vigils Desktop",
    "app_subtitle": "local AI control plane",
    "shortcuts_button": "⌨ Shortcuts",
    "theme_dark": "Dark",
    "theme_light": "Light",
    "theme_system": "System",
    "theme_tooltip": "Theme: {label} (click to cycle)",
    "language_tooltip": "Language: {label} (click to toggle)"
  },
  "approval": {
    "page_title": "Approval Queue",
    "pending_count": "{count} pending",
    "col_approval_id": "Approval ID",
    "col_title": "Title",
    "col_summary": "Summary",
    "col_status": "Status",
    "col_expires": "Expires",
    "status_expired": "Expired",
    "empty_description": "No pending approvals",
    "empty_extra": "Risky tool calls awaiting human review will appear here.",
    "scope_modal_title": "Select approval scope",
    "scope_modal_title_bulk": "Select approval scope — bulk {count} items",
    "scope_modal_hint_single": "Dispatcher requires a scope for every Approve action. The selected scope applies to this approval.",
    "scope_modal_hint_bulk": "Dispatcher requires a scope for every Approve action. The selected scope applies to the {count} selected approvals.",
    "scope_once": "Once",
    "scope_once_desc": "Only this invocation passes; consumed on use",
    "scope_this_session": "ThisSession",
    "scope_this_session_desc": "Auto-pass subsequent calls in the same session matching (server_id, tool_name, args_hash)",
    "confirm_approve_title": "Confirm approval?",
    "confirm_approve_content": "This action is written to the audit ledger and cannot be undone.\nApproval ID: {id}\nScope: {scope}",
    "confirm_deny_title": "Confirm denial?",
    "confirm_cancel_title": "Confirm cancellation?",
    "confirm_deny_content": "This action is written to the audit ledger and cannot be undone.\nApproval ID: {id}",
    "bulk_selected": "Selected {count} approvals",
    "bulk_approve": "Bulk Approve",
    "bulk_deny": "Bulk Deny",
    "bulk_clear": "Clear selection",
    "bulk_approve_confirm_title": "Approve {count} approvals?",
    "bulk_approve_confirm_content": "Each item is written independently to the audit ledger (per-event hash chain). Cannot be undone.\nScope: {scope}",
    "bulk_approve_button": "Approve all ({count})",
    "bulk_deny_confirm_title": "Deny {count} approvals?",
    "bulk_deny_confirm_content": "Each item is written independently to the audit ledger (per-event hash chain). Cannot be undone.",
    "bulk_deny_button": "Deny all ({count})"
  },
  "activity": {
    "page_title": "Activity Feed",
    "count_live": "{count} events, live feed",
    "count_search": "{count} events, search mode",
    "search_placeholder": "FTS5 query — e.g. \"token\" / task AND approved / prefix*",
    "search_button": "Search",
    "back_to_feed": "Back to feed",
    "search_error": "Search error: {msg}",
    "session_filter_placeholder": "Session filter (empty = all)",
    "type_filter_placeholder": "Event type filter",
    "reset_filters": "Reset filters",
    "empty_no_hits": "No search hits",
    "empty_no_events": "No recent events",
    "empty_hits_extra": "Try different keywords or clear search.",
    "empty_events_extra": "Connect an AI agent (Claude Code / Cursor / Zed) to start logging events."
  },
  "session": {
    "page_title": "Session Replay",
    "verify_chain_button": "Verify ledger chain",
    "source_filter_placeholder": "Source filter (mcp_hub / desktop / ...)",
    "verify_on_replay": "Verify chain on replay",
    "reset_filters": "Reset filters",
    "chain_ok": "Ledger chain: OK",
    "chain_broken": "Ledger chain: BROKEN",
    "chain_verify_failed": "chain_verify_failed",
    "first_broken_event": "first broken event_id = {id}",
    "export_md": "Export Markdown",
    "export_html": "Export HTML",
    "export_error": "Export error: {msg}",
    "sessions_card_title": "Sessions",
    "empty_no_sessions": "No sessions yet",
    "empty_sessions_extra": "Connect an AI agent (e.g. Claude Code / Cursor) to start logging sessions.",
    "replay_loading": "Loading replay…",
    "replay_no_events": "No events in this session"
  },
  "privacy": {
    "page_title": "Privacy Findings",
    "page_subtitle_1": "Sensitive hits intercepted by Vigils across firewall preflight, extension paste, and credential scans.",
    "page_subtitle_strong": "Raw text is never persisted",
    "page_subtitle_2": "— this panel shows only label / count / fingerprint metadata.",
    "load_error": "Failed to load Privacy Findings: {msg}",
    "by_label_title": "By Label (global aggregate)",
    "by_label_empty": "No PII hits yet (or firewall preflight hasn't run)",
    "recent_scans_title": "Recent Scans",
    "col_time": "Time",
    "col_source": "Source",
    "col_findings": "Findings",
    "col_scan_id": "Scan ID",
    "col_session": "Session",
    "col_fingerprint": "Fingerprint"
  },
  "server": {
    "page_title": "Server Registry",
    "tab_servers": "Servers",
    "tab_tool_approvals": "Tool Approvals",
    "tab_drift": "Drift",
    "empty_no_servers": "No MCP servers registered",
    "empty_servers_extra": "Add an MCP server via vigil-hub add-remote-mcp or local stdio to see it here.",
    "empty_no_tool_approvals": "No pending tool approvals",
    "empty_no_drift": "No drift items",
    "approve": "Approve",
    "reject": "Reject",
    "approve_drift": "Approve drift",
    "reject_drift": "Reject drift",
    "count_summary": "{approved} approved, {pending} pending tools, {drifted} drifted",
    "servers_register_cta": "Register via CLI or `vigil-hub serve --stdio` — see docs / Getting Started.",
    "pending_tools_tab": "Pending tools",
    "drifted_tools_label": "Drifted tools (descriptor drift)",
    "drifted_servers_label": "Drifted servers (argv drift)",
    "onboarding_title": "Server Onboarding",
    "onboarding_loading": "Loading…",
    "onboarding_no_data": "No onboarding data"
  },
  "detail": {
    "drawer_title": "Approval Detail",
    "loading": "Loading…",
    "status_pending": "Pending",
    "status_approved": "Approved",
    "status_denied": "Denied",
    "status_cancelled": "Cancelled",
    "status_expired": "Expired",
    "label_approval_id": "Approval ID",
    "label_session": "Session",
    "label_decision_id": "Decision ID",
    "label_invocation_id": "Invocation ID",
    "label_title": "Title",
    "label_summary": "Summary",
    "label_expires_at": "Expires At",
    "privacy_findings_title": "Privacy Findings",
    "privacy_findings_note": "PII / credential types and counts intercepted by Vigils in this session; raw text is never persisted.",
    "effect_vector_title": "Effect Vector",
    "effect_kinds_label": "Inferred side-effect types",
    "effect_destructive": "Destructive",
    "effect_reversible": "Reversible",
    "effect_none": "— No side effects inferred (pure computation)",
    "effect_raw_summary": "Raw JSON (transparency note — click to expand)",
    "effect_paths_read": "Read paths",
    "effect_paths_write": "Write paths",
    "effect_network_hosts": "Network targets",
    "effect_secret_refs": "Referenced secrets (alias)",
    "effect_recipients": "External recipients",
    "resolved_note": "This request is resolved — resolution details require a separate query (coming in later α)."
  },
  "eventModal": {
    "title": "Event Detail",
    "loading": "Loading…",
    "no_event": "No event selected",
    "label_event_id": "Event ID",
    "label_session": "Session",
    "label_type": "Type",
    "label_created_at": "Created At",
    "label_prev_hash": "Prev Hash",
    "label_event_hash": "Event Hash",
    "redacted_summary_title": "Redacted Summary",
    "payload_title": "Payload (JCS-normalized, redacted)"
  },
  "shortcuts": {
    "modal_title": "Keyboard shortcuts",
    "footnote": "Press ? anytime to toggle this help. Shortcuts are disabled while typing in an input.",
    "group_navigation": "Navigation",
    "group_global": "Global",
    "group_approval_queue": "Approval Queue",
    "go_activity": "Go to Activity Feed",
    "go_approvals": "Go to Approval Queue",
    "go_servers": "Go to Server Registry",
    "go_sessions": "Go to Session Replay",
    "go_privacy": "Go to Privacy Findings",
    "focus_search": "Focus search input (current page)",
    "toggle_help": "Show / hide this help",
    "close": "Close help / drawers",
    "next_approval": "Next pending approval",
    "prev_approval": "Previous pending approval",
    "open_drawer": "Open detail drawer for selected row",
    "approve_selected": "Approve selected (opens scope modal)",
    "deny_selected": "Deny selected (confirm)",
    "cancel_selected": "Cancel selected (confirm)"
  },
  "onboardingCard": {
    "drift_alert_title": "Command drift detected",
    "drift_alert_body": "This server's launch argv has drifted; the new hash awaits approval. The runner spawn path is fail-closed.",
    "label_server_id": "Server ID",
    "label_transport": "Transport",
    "label_trust_level": "Trust Level",
    "label_first_seen": "First Seen",
    "label_url": "URL",
    "label_command_hash": "Command hash",
    "label_pending_hash": "Pending hash (new)",
    "label_sandbox_profile": "Sandbox profile",
    "sandbox_inherit_default": "— (inherits default least privilege)",
    "argv_title": "Command argv (exact)",
    "argv_non_stdio": "— (non-stdio transport)",
    "env_keys_title": "Requested env keys",
    "env_keys_pending": "Awaiting lease analysis (I06) — visible after first spawn",
    "env_keys_none": "— (explicitly no env needs)",
    "approve_drift": "Approve drift",
    "reject_drift": "Reject drift",
    "confirm_approve_title": "Approve command drift?",
    "confirm_approve_content": "Server {serverId}'s argv will be accepted as new hash {hash}. The decision is recorded as an audit event.",
    "confirm_reject_title": "Reject command drift?",
    "confirm_reject_content": "Reject the new argv and restore old hash {hash}. The next spawn stays blocked until accepted or cleared."
  },
  "notImplemented": {
    "badge": "Not implemented yet",
    "body": "The route for this page is not implemented yet; it will be filled in by a later sub-iteration."
  }
}
