import type { Messages } from '../types'; export const enCoreMessages: Messages = { // Common 'common.save': 'Save', 'common.cancel': 'Cancel', 'common.close': 'Close', 'common.reset': 'Reset', 'common.zoomIn': 'Zoom in', 'common.zoomOut': 'Zoom out', 'common.settings': 'Settings', 'common.search': 'Search', 'common.searchPlaceholder': 'Search...', 'common.connect': 'Connect', 'common.terminal': 'Terminal', 'common.create': 'Create', 'common.import': 'Import', 'common.generate': 'Generate', 'common.delete': 'Delete', 'common.edit': 'Edit', 'common.clear': 'Clear', 'common.optional': 'Optional', 'common.selectPlaceholder': 'Select...', 'common.add': 'Add', 'common.rename': 'Rename', 'common.refresh': 'Refresh', 'common.continue': 'Continue', 'common.enabled': 'Enabled', 'common.disabled': 'Disabled', 'common.error': 'Error', 'common.validation': 'Validation', 'common.unknownError': 'Unknown error', 'common.noResultsFound': 'No results found', 'common.back': 'Back', 'common.apply': 'Apply', 'common.use': 'Use', 'common.useGlobal': 'Use global', 'common.saveChanges': 'Save Changes', 'common.advanced': 'Advanced', 'common.left': 'Left', 'common.right': 'Right', 'common.more': 'More', // Dense toolbar customize (show / collapse / hide) 'toolbar.layout.customize': 'Customize toolbar', 'toolbar.layout.show': 'Show', 'toolbar.layout.collapse': 'Collapse', 'toolbar.layout.hide': 'Hide', 'toolbar.layout.moveEarlier': 'Move earlier', 'toolbar.layout.moveLater': 'Move later', 'toolbar.layout.reset': 'Reset to default', 'common.selectAHost': 'Select a host', 'common.selectAHostPlaceholder': 'Select a host...', 'sort.manual': 'Manual order', 'sort.az': 'A-z', 'sort.za': 'Z-a', 'sort.newest': 'Newest to oldest', 'sort.oldest': 'Oldest to newest', 'sort.group': 'By group', 'field.label': 'Label', 'field.type': 'Type', 'auth.keyType': 'Type {type}', 'auth.showAllKeys': 'Show all keys', // Dialogs / prompts 'confirm.deleteHost': 'Delete Host "{name}"?', 'confirm.deleteIdentity': 'Delete Identity "{name}"?', 'confirm.removeProvider': 'Remove provider "{name}"?', 'confirm.closeBusyTerminal.title': 'Confirm close', 'confirm.closeBusyTerminal.message': 'Process "{command}" is still running and will be terminated.', 'confirm.closeBusyTerminal.messageWithMore': 'Process "{command}" and {count} other running process(es) will be terminated.', 'confirm.closeBusyTerminal.cancel': 'Cancel', 'confirm.closeBusyTerminal.close': 'Close', 'dialog.createWorkspace.title': 'Create Workspace', 'dialog.renameWorkspace.title': 'Rename workspace', 'dialog.renameSession.title': 'Rename session', 'field.name': 'Name', 'field.selectHosts': 'Select Hosts', 'placeholder.workspaceName': 'Workspace name', 'placeholder.sessionName': 'Session name', 'placeholder.searchHosts': 'Search hosts...', 'toast.settingsUnavailable': 'Settings window is unavailable on this platform.', 'credentials.protectionUnavailable.title': 'Credential Protection Unavailable', 'credentials.protectionUnavailable.message': 'Saved passwords and keys cannot be auto-decrypted on this device. Re-enter credentials before connecting.', 'credentials.protectionUnavailable.action': 'Open Settings', // App Lock 'appLock.title': 'NetMesh is locked', 'appLock.reason.default': 'Enter your lock password to continue.', 'appLock.reason.startup': 'NetMesh locks each time this window opens.', 'appLock.reason.idle': 'NetMesh locked after the inactivity timeout.', 'appLock.reason.manual': 'NetMesh was locked manually.', 'appLock.passwordLabel': 'Lock password', 'appLock.passwordPlaceholder': 'Enter password to unlock', 'appLock.unlock': 'Unlock', 'appLock.unlocking': 'Unlocking...', 'appLock.usePassword': 'Use password instead', 'appLock.error.emptyPassword': 'Enter the lock password.', 'appLock.error.incorrectPassword': 'Incorrect lock password.', 'appLock.systemUnlock.unlockWith': 'Unlock with {label}', 'appLock.systemUnlock.preparing': 'Preparing {label}...', 'appLock.systemUnlock.verifying': 'Waiting for {label}...', 'appLock.systemUnlock.error': 'System unlock was not completed. Use the lock password to continue.', 'appLock.logoLabel': 'NetMesh', 'appLock.reset.title': 'Reset App Lock', 'appLock.reset.description': 'This removes the current lock password and turns off App Lock. Set a new password from Settings when you need it again.', 'appLock.reset.cancel': 'Cancel', 'appLock.reset.confirm': 'Reset App Lock', 'appLock.reset.resetting': 'Resetting...', 'appLock.reset.error': 'Could not reset App Lock. Try again.', 'topTabs.lockApp': 'Lock NetMesh', // Settings shell 'settings.title': 'Settings', 'settings.tab.application': 'Application', 'settings.tab.appearance': 'Appearance', 'settings.tab.terminal': 'Terminal', 'settings.tab.shortcuts': 'Shortcuts', 'settings.tab.ai': 'AI', 'settings.tab.syncCloud': 'Sync & Cloud', 'settings.tab.system': 'System', 'settings.search.open': 'Search settings', 'settings.search.placeholder': 'Search settings…', 'settings.search.noResults': 'No matching settings', // Settings > System 'settings.system.title': 'System', 'settings.system.description': 'System information and temporary file management.', 'settings.system.tempDirectory': 'Temporary Files', 'settings.system.location': 'Location', 'settings.system.fileCount': 'Files', 'settings.system.totalSize': 'Size', 'settings.system.openFolder': 'Open folder', 'settings.system.refresh': 'Refresh', 'settings.system.clearTempFiles': 'Clear temp files', 'settings.system.clearing': 'Clearing...', 'settings.system.clearResult': 'Deleted {deleted} file(s), {failed} failed.', 'settings.system.tempDirectoryHint': 'Temporary files are created when opening remote files with external applications. They are automatically cleaned up when SFTP sessions close.', 'settings.system.credentials.title': 'Credential Protection', 'settings.system.credentials.status': 'Status', 'settings.system.credentials.checking': 'Checking...', 'settings.system.credentials.available': 'Available (OS keychain ready)', 'settings.system.credentials.unavailable': 'Unavailable (cannot decrypt saved credentials)', 'settings.system.credentials.unknown': 'Unknown (not supported in this environment)', 'settings.system.credentials.unavailableHint': 'Credentials encrypted on another user profile or machine cannot be decrypted here. Re-enter and save credentials on this device.', 'settings.system.credentials.portabilityHint': 'Cloud Sync is portable because it uses your master key encryption. Local safeStorage encryption is device/user scoped.', // Settings > System > App Lock 'settings.appLock.title': 'App Lock', 'settings.appLock.description': 'Require a local lock password when NetMesh opens, after inactivity, or when you lock it manually.', 'settings.appLock.setupTitle': 'Set a lock password', 'settings.appLock.setupDescription': 'Create the password below. App Lock turns on immediately after it is saved.', 'settings.appLock.manageTitle': 'App Lock is ready', 'settings.appLock.enabledStatus': 'Enabled. NetMesh locks on startup, after inactivity, and when you lock it manually.', 'settings.appLock.disabledStatus': 'Password saved, but App Lock is currently off.', 'settings.appLock.disableTitle': 'Turn off App Lock', 'settings.appLock.disableDescription': 'Enter the current lock password to stop locking NetMesh. The saved password will be removed; turning App Lock on again requires creating a new one.', 'settings.appLock.disable': 'Turn off App Lock', 'settings.appLock.disabling': 'Turning off...', 'settings.appLock.setupPasswordTitle': 'Create lock password', 'settings.appLock.setupPasswordDescription': 'This password is required to unlock NetMesh and to change or turn off App Lock later.', 'settings.appLock.changePasswordTitle': 'Change lock password', 'settings.appLock.changePasswordDescription': 'Enter the current lock password, then choose a new one.', 'settings.appLock.enable': 'Enable app lock', 'settings.appLock.enableDesc': 'Lock on startup and after the selected inactivity timeout.', 'settings.appLock.timeout': 'Inactivity timeout', 'settings.appLock.timeoutDesc': 'Lock after inactivity, or when the window is closed to the tray. Never skips both.', 'settings.appLock.timeout.0': 'Never lock automatically', 'settings.appLock.timeout.1': '1 minute', 'settings.appLock.timeout.5': '5 minutes', 'settings.appLock.timeout.15': '15 minutes', 'settings.appLock.timeout.30': '30 minutes', 'settings.appLock.timeout.60': '60 minutes', 'settings.appLock.systemUnlock.label': '{label} unlock', 'settings.appLock.systemUnlock.desc': 'Use {label} as an alternate way to unlock NetMesh on this device.', 'settings.appLock.systemUnlock.unavailableDesc': '{label} is not available on this device right now.', 'settings.appLock.systemUnlock.unavailable': 'System unlock is not available on this device.', 'settings.appLock.systemUnlock.locked': 'Unlock NetMesh before changing system unlock.', 'settings.appLock.systemUnlock.autoPrompt.label': 'Open {label} automatically', 'settings.appLock.systemUnlock.autoPrompt.desc': 'Show the {label} prompt automatically when NetMesh is waiting to unlock.', 'settings.appLock.currentPassword': 'Current password', 'settings.appLock.currentPasswordPlaceholder': 'Required to disable or replace', 'settings.appLock.currentPasswordForDisablePlaceholder': 'Current password to turn off App Lock', 'settings.appLock.currentPasswordForChangePlaceholder': 'Current password to change it', 'settings.appLock.newPassword': 'New password', 'settings.appLock.newPasswordPlaceholder': 'Set lock password', 'settings.appLock.confirmPassword': 'Confirm password', 'settings.appLock.confirmPasswordPlaceholder': 'Repeat password', 'settings.appLock.savePassword': 'Set and enable', 'settings.appLock.savingPassword': 'Saving...', 'settings.appLock.passwordSet': 'Password configured', 'settings.appLock.replacePassword': 'Replace password', 'settings.appLock.enableAfterPassword': 'Set a lock password before enabling app lock.', 'settings.appLock.localOnlyHint': 'Device-local privacy lock. It is not synced and is not an OS security boundary.', 'settings.appLock.validation.currentRequired': 'Enter the current lock password.', 'settings.appLock.validation.newRequired': 'Enter a new lock password.', 'settings.appLock.validation.confirmRequired': 'Confirm the new lock password.', 'settings.appLock.validation.mismatch': 'The new passwords do not match.', 'settings.appLock.validation.incorrect': 'The current lock password is incorrect.', // Settings > System > Auto Launch 'settings.autoLaunch.title': 'Launch at Login', 'settings.autoLaunch.enabled': 'Launch at system startup', 'settings.autoLaunch.enabledDesc': 'Automatically start NetMesh when you log in, hidden in the system tray.', 'settings.autoLaunch.unsupportedDesc': 'Not available on this platform or in a development build.', // Settings > System > Network Proxy 'settings.system.networkProxy.title': 'Network Proxy', 'settings.system.networkProxy.description': 'HTTP(S) proxy for cloud sync and AI providers. This is separate from SSH ProxyJump / ProxyCommand profiles.', 'settings.system.networkProxy.mode': 'Proxy mode', 'settings.system.networkProxy.mode.system': 'Use system proxy', 'settings.system.networkProxy.mode.direct': 'Direct (no proxy)', 'settings.system.networkProxy.mode.custom': 'Custom proxy', 'settings.system.networkProxy.url': 'Proxy URL', 'settings.system.networkProxy.url.placeholder': 'http://127.0.0.1:7890', 'settings.system.networkProxy.url.desc': 'Supports http://, https://, and socks5:// host:port URLs. Proxy credentials in the URL are not supported.', 'settings.system.networkProxy.bypass': 'Bypass list', 'settings.system.networkProxy.bypass.placeholder': ',localhost,127.0.0.1', 'settings.system.networkProxy.bypass.desc': 'Comma-separated hosts that skip the proxy. Use for loopback and LAN names.', 'settings.system.networkProxy.hint': 'Affects Google Drive / OneDrive / GitHub sync login and AI provider requests. Does not change SSH connections.', // Settings > System > Crash Logs 'settings.system.crashLogs.title': 'Crash Logs', 'settings.system.crashLogs.description': 'View error logs from the main process to help diagnose unexpected behavior.', 'settings.system.crashLogs.noLogs': 'No crash logs found.', 'settings.system.crashLogs.entries': '{count} entries', 'settings.system.crashLogs.clear': 'Clear all logs', 'settings.system.crashLogs.cleared': 'Cleared {count} log file(s).', 'settings.system.crashLogs.source': 'Source', 'settings.system.crashLogs.time': 'Time', 'settings.system.crashLogs.message': 'Message', 'settings.system.crashLogs.stack': 'Stack Trace', 'settings.system.crashLogs.hint': 'Crash logs are retained for 30 days and automatically rotated.', 'settings.system.crashLogs.collapse': 'Collapse', 'settings.system.crashLogs.expand': 'Show details', // Settings > System > Software Update 'settings.update.title': 'Software Update', 'settings.update.currentVersion': 'Current version', 'settings.update.checkForUpdates': 'Check for Updates', 'settings.update.checking': 'Checking...', 'settings.update.upToDate': 'You are using the latest version.', 'settings.update.available': 'New version {version} is available.', 'settings.update.download': 'Download Update', 'settings.update.downloading': 'Downloading... {percent}%', 'settings.update.readyToInstall': 'Update downloaded and ready to install.', 'settings.update.restartNow': 'Restart to Update', 'settings.update.error': 'Failed to check for updates.', 'settings.update.downloadError': 'Download failed.', 'settings.update.manualDownload': 'Download from GitHub', 'settings.update.manualDownloadHint': 'Auto-update is not available on this platform. Download the latest version from GitHub.', 'settings.update.hint': 'NetMesh checks for updates from GitHub Releases.', 'settings.update.lastCheckedJustNow': 'just now', 'settings.update.lastCheckedMinutesAgo': '{n} min ago', 'settings.update.lastCheckedHoursAgo': '{n} hr ago', 'settings.update.lastCheckedPrefix': 'Last checked: ', 'settings.update.autoUpdateEnabled': 'Automatic Updates', 'settings.update.autoUpdateEnabledDesc': 'Automatically check and download updates when available.', // Settings > Session Restore 'settings.sessionRestore.title': 'Session Restore', 'settings.sessionRestore.startupLanding': 'On launch', 'settings.sessionRestore.startupLandingDesc': 'Choose whether to open the host home page or a local terminal when NetMesh starts with no restored sessions.', 'settings.sessionRestore.startupLanding.vault': 'Home (hosts)', 'settings.sessionRestore.startupLanding.localTerminal': 'Local terminal', 'settings.sessionRestore.restorePreviousSession': 'Restore previous tabs and workspaces', 'settings.sessionRestore.restorePreviousSessionDesc': 'Reopen terminal tabs and workspace layouts from the last app session.', 'settings.sessionRestore.restoreTerminalCwd': 'Restore terminal working directory', 'settings.sessionRestore.restoreTerminalCwdDesc': 'When reconnecting a restored terminal, try to return to its last known directory without blocking the connection.', 'terminal.restore.placeholder.title': 'Restored session', 'terminal.restore.placeholder.desc': 'This terminal is disconnected. Reconnect when you are ready to start a new shell for this tab.', 'terminal.restore.placeholder.reconnect': 'Reconnect', 'terminal.restore.cwdLog': 'Restoring working directory: {cwd}', // Settings > Session Logs 'settings.sessionLogs.title': 'Session Logs', 'settings.sessionLogs.description': 'Configure session log export and auto-save settings.', 'settings.sessionLogs.autoSave': 'Auto-Save', 'settings.sessionLogs.enableAutoSave': 'Enable auto-save', 'settings.sessionLogs.enableAutoSaveDesc': 'Automatically save session logs when terminal sessions end.', 'settings.sessionLogs.directory': 'Save Directory', 'settings.sessionLogs.noDirectory': 'No directory selected', 'settings.sessionLogs.browse': 'Browse', 'settings.sessionLogs.openFolder': 'Open folder', 'settings.sessionLogs.directoryHint': 'Logs will be organized by host in subdirectories.', 'settings.sessionLogs.format': 'Log Format', 'settings.sessionLogs.formatDesc': 'Choose the format for saved log files.', 'settings.sessionLogs.formatTxt': 'Plain Text (.txt)', 'settings.sessionLogs.formatRaw': 'Raw with ANSI (.log)', 'settings.sessionLogs.formatHtml': 'HTML (.html)', 'settings.sessionLogs.timestamps': 'Add timestamps', 'settings.sessionLogs.timestampsDesc': 'Prefix each line in plain text and HTML logs with the local time.', 'settings.sessionLogs.hint': 'Session logs capture all terminal output for troubleshooting and auditing purposes.', 'settings.sessionLogs.clearAll': 'Clear all logs', 'settings.sessionLogs.clearAllDesc': 'Delete all saved session log files and host subdirectories from the save directory.', 'settings.sessionLogs.clearConfirm': 'This will permanently delete all session log files in the save directory. This cannot be undone. Continue?', // Settings > SSH Debug Logs 'settings.sshDebugLogs.title': 'SSH Debug Logs', 'settings.sshDebugLogs.enable': 'Enable SSH debug logs', 'settings.sshDebugLogs.enableDesc': 'Record connection, auth, handshake, disconnect, and error reasons without saving terminal output.', 'settings.sshDebugLogs.location': 'Log Location', 'settings.sshDebugLogs.status': 'Status', 'settings.sshDebugLogs.statusOn': 'On', 'settings.sshDebugLogs.statusOff': 'Off', 'settings.sshDebugLogs.size': 'Size', 'settings.sshDebugLogs.hint': 'When enabled, newly started SSH connections write diagnostic events for bastion, auth, and unexpected disconnect troubleshooting.', // Settings > Global Hotkey (Quake Mode) 'settings.globalHotkey.title': 'Global Hotkey', 'settings.globalHotkey.toggleWindow': 'Toggle Window', 'settings.globalHotkey.toggleWindowDesc': 'Press a key combination to set a global shortcut for showing/hiding the window.', 'settings.globalHotkey.notSet': 'Not set', 'settings.globalHotkey.reset': 'Reset to default', 'settings.globalHotkey.closeToTray': 'Close to System Tray', 'settings.globalHotkey.closeToTrayDesc': 'When enabled, closing the window will minimize to the system tray instead of quitting.', 'settings.globalHotkey.enabled': 'Enable Global Hotkey', 'settings.globalHotkey.enabledDesc': 'Register system-wide keyboard shortcuts. When disabled, all global hotkeys are unregistered.', 'settings.globalHotkey.hint': 'Global hotkey works system-wide to quickly show or hide the window (Quake-style terminal).', // Tray Panel 'tray.openMainWindow': 'Open Main Window', 'tray.sessions': 'Sessions', 'tray.portForwarding': 'Port Forwarding', 'tray.status.connected': 'Connected', 'tray.status.connecting': 'Connecting', 'tray.status.disconnected': 'Disconnected', 'tray.status.active': 'Active', 'tray.status.inactive': 'Inactive', 'tray.status.error': 'Error', 'tray.status.unknown': 'Unknown', 'tray.recentHosts': 'Recent Hosts', 'tray.empty.title': 'Nothing here yet', 'tray.empty.subtitle': 'Go connect to a server, they miss you 🚀', 'tray.quit': 'Quit NetMesh', 'tray.closeSession': 'Close session', // Vault Sidebar 'vault.sidebar.collapse': 'Collapse sidebar', 'vault.sidebar.expand': 'Expand sidebar', 'vault.sidebar.resize': 'Resize sidebar', // Settings > Application 'settings.application.checkUpdates': 'Check for updates', 'settings.application.reportProblem': 'Report a problem', 'settings.application.reportProblem.subtitle': 'Generate a pre-filled GitHub issue', 'settings.application.community': 'Community', 'settings.application.community.subtitle': 'On GitHub Discussions', 'settings.application.github': 'GitHub', 'settings.application.github.subtitle': 'Source code', 'settings.application.whatsNew': "What's new", 'settings.application.whatsNew.subtitle': 'Show release notes', 'settings.application.openExternal.failedTitle': 'Cannot open link', 'settings.application.openExternal.failedBody': 'The link could not be opened in either the system browser or the built-in browser window.', 'settings.vault.title': 'Vault', 'settings.vault.showRecentHosts': 'Show recently connected hosts', 'settings.vault.showRecentHostsDesc': 'Display a section of recently connected hosts at the top of the vault', 'settings.vault.selectBeforeConnect': 'Select host before connecting', 'settings.vault.selectBeforeConnectDesc': 'Click once to select a host (accent highlight in grid view), click again to connect. Groups work the same way. Default remains single-click connect.', 'settings.vault.showOnlyUngroupedHostsInRoot': 'Only show ungrouped hosts at root', 'settings.vault.showOnlyUngroupedHostsInRootDesc': 'When enabled, the root host list only shows hosts without a group. Open a group from the sidebar to see grouped hosts.', 'settings.vault.showSftpTab': 'Show SFTP tab', 'settings.vault.showSftpTabDesc': 'Display the standalone SFTP view in the top tab bar. When hidden, use the in-session SFTP side panel instead.', 'settings.vault.showHostTreeSidebar': 'Show host list sidebar', 'settings.vault.showHostTreeSidebarDesc': 'Display the host list sidebar and its top-bar toggle on terminal and editor tabs.', 'settings.vault.autoImportSystemKnownHosts': 'Auto-import system known_hosts', 'settings.vault.autoImportSystemKnownHostsDesc': 'When Vault loads, silently import entries from the OpenSSH known_hosts file. Turn this off to keep NetMesh known hosts separate; Scan System still imports on demand.', 'settings.vault.notesFont': 'Code font', 'settings.vault.notesFontDesc': 'Font family used for code blocks and inline code in notes', 'settings.vault.notesFontSize': 'Note font size', 'settings.vault.notesFontSizeDesc': 'Font size used for note body text', 'settings.vault.notesCodeFontSize': 'Code font size', 'settings.vault.notesCodeFontSizeDesc': 'Font size used for code blocks and inline code in notes', // Update notifications 'update.available.title': 'Update Available', 'update.available.message': 'A new version {version} is available. Click to download.', 'update.checking': 'Checking for updates...', 'update.upToDate.title': 'Up to Date', 'update.upToDate.message': 'You are running the latest version ({version}).', 'update.error': 'Failed to check for updates', 'update.downloadNow': 'Download Now', 'update.viewInSettings': 'View in Settings', 'update.readyToInstall.title': 'Update Ready', 'update.readyToInstall.message': 'Version {version} downloaded and ready to install.', 'update.restartNow': 'Restart Now', 'update.downloadFailed.title': 'Update Failed', 'update.downloadFailed.message': 'Failed to download update. You can download it manually.', 'update.needsSave.title': 'Unsaved Changes', 'update.needsSave.message': 'Save your open editors first, then click Restart Now again to install the update.', 'update.openReleases': 'Open Releases', 'update.remindLater': 'Remind Later', 'update.skipVersion': 'Skip This Version', // Settings > Appearance 'settings.appearance.uiTheme': 'UI Theme', 'settings.appearance.theme': 'Theme', 'settings.appearance.theme.desc': 'Choose light, dark, or follow system preference', 'settings.appearance.theme.light': 'Light', 'settings.appearance.theme.dark': 'Dark', 'settings.appearance.theme.system': 'System', 'settings.appearance.accentColor': 'Accent Color', 'settings.appearance.customColor': 'Custom color', 'settings.appearance.accentColor.mode': 'Use custom accent', 'settings.appearance.accentColor.mode.desc': 'Override the theme accent color', 'settings.appearance.accentColor.custom': 'Custom accent', 'settings.appearance.themeColor': 'Theme Color', 'settings.appearance.themeColor.desc': 'Pick a preset palette for each theme', 'settings.appearance.themeColor.light': 'Light palette', 'settings.appearance.themeColor.dark': 'Dark palette', 'settings.appearance.customCss': 'Custom CSS', 'settings.appearance.customCss.desc': 'Add custom CSS to personalize the app appearance. Changes apply immediately.', 'settings.appearance.customCss.help.ariaLabel': 'Custom CSS help', 'settings.appearance.customCss.help.title': 'Custom CSS guide', 'settings.appearance.customCss.help.body': `Major UI regions expose a \`data-section\` attribute you can target. Changes apply as soon as you edit the CSS. ### How to select Use attribute selectors: \`\`\`css [data-section="terminal-side-panel"] { border: 2px solid #00c851 !important; border-radius: 6px !important; } \`\`\` Some rows and panes also support state hooks such as \`[data-selected="true"]\` or \`[data-focused="true"]\`. Because many styles come from Tailwind utilities, you often need \`!important\` to override them. ### Top tabs - \`top-tabs\` - \`top-tabs-toolbar-actions\` — Right-side menu and utility toolbar - \`top-tabs-host-tree-toggle\` - \`top-tabs-quick-switcher-toggle\` ### Vault - \`vault-view\` - \`vault-sidebar\` - \`vault-main\` - \`vault-hosts-header\` - \`vault-host-list\` ### Terminal workspace - \`terminal-workspace\` - \`terminal-toolbar\` — Terminal action toolbar - \`terminal-toolbar-menu\` — Terminal toolbar overflow and submenu - \`terminal-workspace-sidebar\` — Focus-mode terminal list - \`terminal-host-tree-sidebar\` - \`terminal-host-tree-sidebar-content\` - \`terminal-host-tree-sidebar-row\` - \`terminal-split-pane\` - \`terminal-split-resizer\` ### Terminal side panel - \`terminal-side-panel\` — SFTP / Scripts / Theme / AI panel (only present while open) - \`terminal-side-panel-tabs\` - \`terminal-side-panel-content\` ### SFTP - \`terminal-sftp-panel\` - \`terminal-sftp-host-header\` - \`terminal-sftp-pane\` - \`terminal-sftp-toolbar\` - \`terminal-sftp-path\` - \`terminal-sftp-filter-bar\` - \`terminal-sftp-list\` - \`terminal-sftp-list-header\` - \`terminal-sftp-list-row\` - \`terminal-sftp-tree\` - \`terminal-sftp-tree-row\` - \`terminal-sftp-transfer-queue\` - \`terminal-sftp-transfer-row\` ### Detail / tool panels - \`snippets-panel\` - \`host-details-panel\` - \`group-details-panel\` - \`serial-host-details-panel\` - \`ai-chat-panel\` ### Examples Increase menu and toolbar icon sizes: \`\`\`css [data-section="top-tabs-toolbar-actions"] button > svg, [data-section="terminal-toolbar"] button > svg, [data-section="terminal-toolbar-menu"] button > svg, [data-section="terminal-toolbar"] button [data-plugin-icon-kind="package"] { width: 20px !important; height: 20px !important; } \`\`\` Hide the host-list toggle in the top tab bar: \`\`\`css [data-section="top-tabs-host-tree-toggle"] { width: 0 !important; opacity: 0 !important; pointer-events: none !important; } \`\`\` Style selected SFTP file rows: \`\`\`css [data-section="terminal-sftp-list-row"][data-selected="true"] { background-color: #00c851 !important; color: #001b10 !important; } \`\`\` Highlight the focused split pane: \`\`\`css [data-section="terminal-split-pane"][data-focused="true"] { outline: 2px solid hsl(var(--primary)) !important; outline-offset: -2px; } \`\`\` `, 'settings.appearance.customCss.placeholder': '/* Examples — use !important to beat Tailwind utility specificity */\n\n/* Hide the host-list toggle in the top tab bar */\n[data-section="top-tabs-host-tree-toggle"] {\n width: 0 !important;\n opacity: 0 !important;\n pointer-events: none !important;\n}\n\n/* Hide the plus button that opens the quick switcher */\n[data-section="top-tabs-quick-switcher-toggle"] {\n display: none !important;\n}\n\n/* Border around the SFTP / side panel (does not linger after closing) */\n[data-section="terminal-side-panel"] {\n border: 2px solid #00c851 !important;\n border-radius: 6px !important;\n}\n\n/* Change the whole side panel background, not only the top tabs */\n[data-section="terminal-side-panel"],\n[data-section="terminal-side-panel-tabs"],\n[data-section="terminal-side-panel-content"],\n[data-section="terminal-sftp-panel"],\n[data-section="terminal-sftp-pane"],\n[data-section="terminal-sftp-list"],\n[data-section="terminal-sftp-tree"],\n[data-section="terminal-sftp-transfer-queue"] {\n background-color: #1c384a !important;\n}\n\n/* Style selected SFTP file rows */\n[data-section="terminal-sftp-list-row"][data-selected="true"] {\n background-color: #00c851 !important;\n color: #001b10 !important;\n}\n\n/* Thicker split dividers */\n[data-section="terminal-split-resizer-bar"] {\n background-color: hsl(var(--primary)) !important;\n transform: scale(2) !important;\n}\n\n/* Highlight the focused split pane */\n[data-section="terminal-split-pane"][data-focused="true"] {\n outline: 2px solid hsl(var(--primary)) !important;\n outline-offset: -2px;\n}\n\n/* Or use Settings → Terminal → Workspace Focus Indicator → Border on focused pane */', 'settings.appearance.language': 'Language', 'settings.appearance.language.desc': 'Choose the UI language', 'settings.appearance.uiFont': 'Interface Font', 'settings.appearance.uiFont.desc': 'Choose the font for the application interface', 'settings.appearance.windowOpacity': 'Window Opacity', 'settings.appearance.windowOpacity.desc': 'Adjust the transparency of the entire application window. Lower values also fade terminal text. Some Linux desktop environments may not support this.', 'settings.appearance.appIcon': 'App Icon', 'settings.appearance.appIcon.desc': 'Choose a dock/taskbar icon style to make NetMesh easier to spot when switching apps. Applies at runtime; the installed app bundle icon is unchanged.', 'settings.appearance.appIcon.original': 'Original', 'settings.appearance.appIcon.bright': 'Bright', 'settings.appearance.appIcon.dark': 'Dark', 'settings.appearance.appIcon.colorful': 'Colorful', 'settings.appearance.appIcon.highContrast': 'High contrast', 'settings.appearance.appIcon.group.classic': 'Colored backgrounds', 'settings.appearance.appIcon.group.white': 'White background', 'settings.appearance.appIcon.group.special': 'Hidden', 'settings.appearance.appIcon.whiteNavy': 'White · Navy cat', 'settings.appearance.appIcon.whiteSky': 'White · Sky cat', 'settings.appearance.appIcon.whiteRose': 'White · Rose cat', 'settings.appearance.appIcon.whiteEmerald': 'White · Emerald cat', 'settings.appearance.appIcon.whiteAmber': 'White · Amber cat', 'settings.appearance.appIcon.whiteViolet': 'White · Violet cat', 'settings.appearance.appIcon.rainbow': 'Rainbow cat', // Settings > Terminal 'settings.terminal.section.theme': 'Terminal Theme', 'settings.terminal.themeModal.title': 'Select Theme', 'settings.terminal.themeModal.darkThemes': 'Dark Themes', 'settings.terminal.themeModal.lightThemes': 'Light Themes', 'settings.terminal.theme.selectButton': 'Select Theme', 'settings.terminal.theme.followApp': 'Follow Application Theme', 'settings.terminal.theme.followApp.desc': 'Automatically match the terminal background to the current app theme for a seamless look.', 'settings.terminal.theme.darkTheme': 'Dark mode terminal theme', 'settings.terminal.theme.lightTheme': 'Light mode terminal theme', 'settings.terminal.theme.auto': 'Auto (match app theme)', 'settings.terminal.theme.autoDesc': 'Follows the active UI theme preset', 'settings.terminal.section.font': 'Font', 'settings.terminal.section.cursor': 'Cursor', 'settings.terminal.section.keyboard': 'Keyboard', 'settings.terminal.section.accessibility': 'Accessibility', 'settings.terminal.section.behavior': 'Behavior', 'settings.terminal.section.sidePanel': 'Side Panel', 'settings.terminal.section.scrollback': 'Scrollback', 'settings.terminal.section.keywordHighlight': 'Keyword highlighting', 'settings.terminal.font.family': 'Font', 'settings.terminal.font.family.desc': 'Terminal font family', 'settings.terminal.font.cjk': 'CJK font', 'settings.terminal.font.cjk.desc': 'Font used for Chinese / Japanese / Korean characters; "Auto" picks one based on the primary font', 'settings.terminal.font.cjk.option.auto': 'Auto · paired with the primary font', 'settings.terminal.font.cjk.option.sarasaSC': 'Sarasa Mono SC (Iosevka + Source Han SC)', 'settings.terminal.font.cjk.option.sarasaTC': 'Sarasa Mono TC (Iosevka + Source Han TC)', 'settings.terminal.font.cjk.option.mapleCN': 'Maple Mono CN', 'settings.terminal.font.cjk.option.sourceHan': 'Source Han Mono SC', 'settings.terminal.font.cjk.option.notoCJK': 'Noto Sans Mono CJK SC', 'settings.terminal.font.cjk.option.lxgwWenkai': 'LXGW WenKai Mono', 'settings.terminal.font.cjk.option.simSun': 'SimSun', 'settings.terminal.font.cjk.option.legacy': '{font} · not recommended (proportional font)', 'settings.terminal.font.cjk.option.recommended': 'Recommended for terminal alignment', 'settings.terminal.font.cjk.option.installed': 'Installed font', 'settings.terminal.font.cjk.option.unverified': 'Availability could not be checked', 'settings.terminal.font.cjk.option.unavailable': 'Not installed on this device', 'settings.terminal.font.cjk.searchPlaceholder': 'Search installed fonts…', 'settings.terminal.font.cjk.empty': 'No matching installed fonts', 'settings.terminal.font.cjk.useCustom': 'Use font', 'settings.terminal.font.cjk.refresh': 'Refresh installed fonts', 'settings.terminal.font.cjk.alignmentWarning': 'This font is not verified as monospaced. Check the preview for column alignment.', 'settings.terminal.font.cjk.unavailableWarning': 'This font is not installed on this device. NetMesh will keep the setting and use a safe fallback.', 'settings.terminal.font.size': 'Font size', 'settings.terminal.font.size.desc': 'Terminal text size', 'settings.terminal.font.weight': 'Font weight', 'settings.terminal.font.weight.desc': 'Weight for regular text (100-900)', 'settings.terminal.font.weight.thin': 'Thin', 'settings.terminal.font.weight.extraLight': 'Extra Light', 'settings.terminal.font.weight.light': 'Light', 'settings.terminal.font.weight.normal': 'Normal', 'settings.terminal.font.weight.medium': 'Medium', 'settings.terminal.font.weight.semiBold': 'Semi Bold', 'settings.terminal.font.weight.bold': 'Bold', 'settings.terminal.font.weight.extraBold': 'Extra Bold', 'settings.terminal.font.weight.black': 'Black', 'settings.terminal.font.weightBold': 'Bold font weight', 'settings.terminal.font.weightBold.desc': 'Weight for bold text (100-900)', 'settings.terminal.font.smoothing': 'Font smoothing', 'settings.terminal.font.smoothing.desc': 'Use native macOS font anti-aliasing', 'settings.terminal.font.linePadding': 'Line padding', 'settings.terminal.font.linePadding.desc': 'Additional space between lines (0-10)', 'settings.terminal.font.emulationType': 'Terminal emulation type', 'settings.terminal.cursor.style': 'Cursor style', 'settings.terminal.cursor.style.block': 'Block', 'settings.terminal.cursor.style.bar': 'Bar', 'settings.terminal.cursor.style.underline': 'Underline', 'settings.terminal.cursor.blink': 'Cursor blink', 'settings.terminal.cursor.highlightLine': 'Highlight current line', 'settings.terminal.cursor.highlightLine.desc': 'Shade the row under the cursor so the active line is easier to find', 'settings.terminal.keyboard.altAsMeta': 'Use Option as Meta key', 'settings.terminal.keyboard.altAsMeta.desc': 'Use Option (Alt) as the Meta key instead of for special characters', 'settings.terminal.keyboard.optionArrowWordJump': 'Option+←/→ jumps by word', 'settings.terminal.keyboard.optionArrowWordJump.desc': 'Send Meta-b / Meta-f on Option+Left/Right so the shell moves by word, instead of the default ^[[1;3D / ^[[1;3C', 'settings.terminal.keyboard.kittyProtocol': 'Kitty keyboard protocol', 'settings.terminal.keyboard.kittyProtocol.desc': 'Enable Kitty keyboard protocol support.', 'settings.terminal.accessibility.minimumContrastRatio': 'Minimum contrast ratio', 'settings.terminal.sidePanel.autoOpen': 'Open side panel with terminal', 'settings.terminal.sidePanel.autoOpen.desc': 'Automatically open a side panel when a terminal connects.', 'settings.terminal.sidePanel.autoOpenPane': 'Default side panel', 'settings.terminal.sidePanel.autoOpenPane.desc': 'Choose which panel opens first.', 'settings.terminal.sidePanel.pane.sftp': 'SFTP', 'settings.terminal.sidePanel.pane.scripts': 'Scripts', 'settings.terminal.sidePanel.pane.history': 'History', 'settings.terminal.sidePanel.pane.theme': 'Theme', 'settings.terminal.sidePanel.pane.system': 'System', 'settings.terminal.sidePanel.pane.notes': 'Notes', 'settings.terminal.sidePanel.pane.ai': 'AI', 'settings.terminal.accessibility.minimumContrastRatio.desc': 'Adjust colors to meet contrast requirements (1 = disabled, 21 = max)', 'settings.terminal.behavior.rightClick': 'Right-click behavior', 'settings.terminal.behavior.rightClick.desc': 'Action when right-clicking in terminal', 'settings.terminal.behavior.rightClick.fullscreenMenu': 'Show menu over fullscreen apps', 'settings.terminal.behavior.rightClick.fullscreenMenu.desc': 'Show the context menu even when tmux, vim or other fullscreen apps take over the mouse. When off, right-click is passed to the app (Shift+Right-Click still opens the menu).', 'settings.terminal.behavior.autoCloseOnExit': 'Auto-close terminal on exit', 'settings.terminal.behavior.autoCloseOnExit.desc': 'Allow terminal tabs and windows to close automatically after session exit. Turn this off to keep them open after every exit.', 'settings.terminal.behavior.disconnectedNotice': 'When a connection disconnects', 'settings.terminal.behavior.disconnectedNotice.desc': 'Show a compact notice inside established terminals, or use the full disconnected dialog. Initial connection failures still use the dialog.', 'settings.terminal.behavior.disconnectedNotice.terminal': 'Terminal notice', 'settings.terminal.behavior.disconnectedNotice.dialog': 'Dialog', 'settings.terminal.behavior.rightClick.menu': 'Show menu', 'settings.terminal.behavior.rightClick.paste': 'Paste', 'settings.terminal.behavior.rightClick.selectWord': 'Select word', 'settings.terminal.behavior.copyOnSelect': 'Copy on select', 'settings.terminal.behavior.copyOnSelect.desc': 'Automatically copy selected text. In tmux/vim with mouse mode, hold Option on macOS or Shift on Windows/Linux to select', 'settings.terminal.behavior.normalizeTextOnCopy': 'Normalize terminal text on copy', 'settings.terminal.behavior.normalizeTextOnCopy.desc': 'When copying from the terminal, strip display-only trailing padding and join soft-wrapped rows so pasted text matches logical output. Turn off to copy the raw screen selection (including TUI padding and visual wraps).', 'settings.terminal.behavior.middleClickPaste': 'Middle-click paste', 'settings.terminal.behavior.middleClickPaste.desc': 'Paste clipboard content on middle-click', 'settings.terminal.behavior.middleClick': 'Middle-click behavior', 'settings.terminal.behavior.middleClick.desc': 'Action when middle-clicking in terminal', 'settings.terminal.behavior.middleClick.menu': 'Show menu', 'settings.terminal.behavior.middleClick.paste': 'Paste', 'settings.terminal.behavior.middleClick.disabled': 'Do nothing', 'settings.terminal.behavior.wordSeparators': 'Word separators', 'settings.terminal.behavior.wordSeparators.desc': 'Characters treated as word boundaries for double-click selection. Spaces count too; add =, comma, or : for strings like uid=name.', 'settings.terminal.behavior.bracketedPaste': 'Bracketed paste mode', 'settings.terminal.behavior.bracketedPaste.desc': 'Wrap pasted text with escape sequences so the shell can distinguish paste from typed input. Disable if you see ^[[200~ artifacts.', 'settings.terminal.behavior.autoUploadClipboardImage': 'Auto-upload clipboard images on paste', 'settings.terminal.behavior.autoUploadClipboardImage.desc': 'When the clipboard holds an image, pasting in a remote session uploads it via SFTP to .NetMesh-paste-images/ under the remote working directory and inserts the remote path instead of pasting text.', 'settings.terminal.behavior.shiftEnterNewline': 'Shift+Enter text', 'settings.terminal.behavior.shiftEnterNewline.desc': 'Send configured text instead of normal Enter when pressing Shift+Enter in the terminal.', 'settings.terminal.behavior.shiftEnterNewlineText': 'Text to send', 'settings.terminal.behavior.shiftEnterNewlineText.desc': 'Use \\n for newline, \\t for tab, and \\\\ for backslash.', 'settings.terminal.behavior.clearWipesScrollback': '`clear` wipes scrollback', 'settings.terminal.behavior.clearWipesScrollback.desc': 'Make `clear` also wipe the scrollback buffer (POSIX default). Disable to keep history visible after `clear`.', 'settings.terminal.behavior.preserveSelectionOnInput': 'Keep selection while typing', 'settings.terminal.behavior.preserveSelectionOnInput.desc': 'Don\'t clear mouse-selected text when typing — useful for selecting a path then pasting it after a command prefix like `sz `.', 'settings.terminal.behavior.forcePromptNewLine': 'Prompt on a new line', 'settings.terminal.behavior.forcePromptNewLine.desc': 'When the final line of command output is not terminated by a newline, move the recognized shell prompt to the next visual line.', 'settings.terminal.behavior.dynamicTabTitle': 'Dynamic tab title', 'settings.terminal.behavior.dynamicTabTitle.desc': 'Choose when session tabs should follow shell-reported window titles and update coding-CLI icons. Disabled also stops live icon detection.', 'settings.terminal.behavior.dynamicTabTitle.off': 'Disabled', 'settings.terminal.behavior.dynamicTabTitle.agent': 'Agents only', 'settings.terminal.behavior.dynamicTabTitle.all': 'All sessions', 'settings.terminal.behavior.oscNotifications': 'OSC desktop notifications', 'settings.terminal.behavior.oscNotifications.desc': 'Show a system notification when a program emits OSC 9, OSC 777 notify, or kitty OSC 99. Used by Codex and other agents for turn-complete and approval alerts.', 'settings.terminal.behavior.oscNotifications.off': 'Disabled', 'settings.terminal.behavior.oscNotifications.unfocused': 'When unfocused', 'settings.terminal.behavior.oscNotifications.always': 'Always', 'settings.terminal.behavior.osc52Clipboard': 'OSC-52 clipboard', 'settings.terminal.behavior.osc52Clipboard.desc': 'Allow remote programs (tmux, vim, etc.) to access the local clipboard via OSC-52 escape sequences.', 'settings.terminal.behavior.osc52Clipboard.off': 'Disabled', 'settings.terminal.behavior.osc52Clipboard.writeOnly': 'Write only', 'settings.terminal.behavior.osc52Clipboard.readWrite': 'Read & Write', 'settings.terminal.behavior.osc52Clipboard.prompt': 'Write + Prompt on Read', 'terminal.osc52.readPrompt.title': 'Clipboard Read Request', 'terminal.osc52.readPrompt.desc': 'A remote program is requesting to read your clipboard. Allow?', 'terminal.osc52.readPrompt.allow': 'Allow', 'terminal.osc52.readPrompt.deny': 'Deny', 'settings.terminal.behavior.scrollOnInput': 'Scroll on input', 'settings.terminal.behavior.scrollOnInput.desc': 'Scroll terminal to bottom when typing', 'settings.terminal.behavior.scrollOnOutput': 'Scroll on output', 'settings.terminal.behavior.scrollOnOutput.desc': 'Scroll terminal to bottom when new output arrives', 'settings.terminal.behavior.scrollOnKeyPress': 'Scroll on key press', 'settings.terminal.behavior.scrollOnKeyPress.desc': 'Scroll terminal to bottom when pressing a key (e.g., Enter)', 'settings.terminal.behavior.scrollOnPaste': 'Scroll on paste', 'settings.terminal.behavior.scrollOnPaste.desc': 'Scroll terminal to bottom when pasting text', 'settings.terminal.behavior.smoothScrolling': 'Smooth scrolling', 'settings.terminal.behavior.smoothScrolling.desc': 'Animate terminal viewport scrolling instead of jumping instantly', 'settings.terminal.behavior.linkModifier': 'Link modifier key', 'settings.terminal.behavior.linkModifier.desc': 'Hold this key to click on links in terminal', 'settings.terminal.behavior.linkModifier.none': 'None (click directly)', 'settings.terminal.behavior.linkModifier.ctrl': 'Ctrl', 'settings.terminal.behavior.linkModifier.alt': 'Alt / Option', 'settings.terminal.behavior.linkModifier.meta': 'Cmd / Win', 'settings.terminal.scrollback.desc': 'Limit number of terminal rows. Set to 0 for no limit.', 'settings.terminal.scrollback.rows': 'Number of rows *', 'settings.terminal.section.startupCommand': 'Startup command', 'settings.terminal.startupCommandDelay.label': 'Startup command delay (ms)', 'settings.terminal.startupCommandDelay.desc': 'How long to wait after connecting before sending the startup command. Also used between lines when the startup command has multiple lines. Increase for slow connections.', 'settings.terminal.keywordHighlight.title': 'Keyword highlighting', 'settings.terminal.keywordHighlight.resetColors': 'Reset to default colors', 'settings.terminal.keywordHighlight.resetDefaults': 'Reset built-ins to defaults', 'settings.terminal.keywordHighlight.resetBuiltIn': 'Restore default label and patterns', 'settings.terminal.keywordHighlight.addCustom': 'Add Custom Rule', 'settings.terminal.keywordHighlight.editCustom': 'Edit Rule', 'settings.terminal.keywordHighlight.editBuiltIn': 'Edit Built-in Rule', 'settings.terminal.keywordHighlight.labelField': 'Label & Color', 'settings.terminal.keywordHighlight.labelPlaceholder': 'Label (e.g., Down)', 'settings.terminal.keywordHighlight.patternField': 'Regex Patterns', 'settings.terminal.keywordHighlight.patternPlaceholder': 'One regex per line (e.g., \\bdown\\b)', 'settings.terminal.keywordHighlight.patternHint': 'One regex per line. Patterns are matched case-insensitively with the global flag.', 'settings.terminal.keywordHighlight.invalidPattern': 'Invalid regex pattern', 'settings.terminal.keywordHighlight.preview': 'Preview', 'settings.terminal.section.localShell': 'Local Shell', 'settings.terminal.localShell.shell': 'Shell executable', 'settings.terminal.localShell.shell.desc': 'Path to the shell executable (e.g., /bin/zsh, pwsh.exe). Leave empty for system default.', 'settings.terminal.localShell.shell.placeholder': 'System default', 'settings.terminal.localShell.shell.detected': 'Detected', 'settings.terminal.localShell.shell.notFound': 'Shell executable not found', 'settings.terminal.localShell.shell.isDirectory': 'Path is a directory, not an executable', 'settings.terminal.localShell.shell.default': 'System Default', 'settings.terminal.localShell.shell.custom': 'Custom...', 'settings.terminal.localShell.shell.customPath': 'Shell executable path', 'settings.terminal.localShell.shell.customArgs': 'Launch arguments', 'settings.terminal.localShell.shell.customArgs.placeholder': 'e.g. --login -i', 'settings.terminal.localShell.shell.customArgs.desc': 'Arguments passed to the shell. Some shells need them to work — e.g. msys2 bash requires --login -i to load the environment.', 'settings.terminal.localShell.shell.commonPaths': 'Common paths', 'settings.terminal.localShell.shell.pathValid': 'Path valid', 'settings.terminal.localShell.startDir': 'Starting directory', 'settings.terminal.localShell.startDir.desc': 'Directory to start in when opening a local terminal. Leave empty for home directory.', 'settings.terminal.localShell.startDir.placeholder': 'Home directory', 'settings.terminal.localShell.startDir.notFound': 'Directory not found', 'settings.terminal.localShell.startDir.isFile': 'Path is a file, not a directory', 'settings.terminal.section.connection': 'Connection', 'settings.terminal.connection.verifyHostKeys': 'Verify SSH host keys', 'settings.terminal.connection.verifyHostKeys.desc': 'Ask before connecting to a new or changed SSH host key. Turn this off only for trusted private networks.', 'settings.terminal.connection.sshAutoReconnectEnabled': 'Automatically reconnect SSH sessions', 'settings.terminal.connection.sshAutoReconnectEnabled.desc': 'When turned on, established SSH sessions that drop unexpectedly try to reconnect every 5 seconds until the tab is closed or the connection succeeds.', 'settings.terminal.connection.keepaliveInterval': 'Keepalive Interval', 'settings.terminal.connection.keepaliveInterval.desc': 'How often (in seconds) to send SSH-level keepalive packets. Set to 0 to disable globally — note that individual hosts can override this in their own settings.', 'settings.terminal.connection.keepaliveCountMax': 'Max unanswered keepalives', 'settings.terminal.connection.keepaliveCountMax.desc': 'Unanswered keepalives before the connection is declared dead. Higher values are more forgiving of brief network glitches and SSH servers that respond slowly.', 'settings.terminal.connection.x11Display': 'X11 display', 'settings.terminal.connection.x11Display.desc': 'Optional local display address for X11 forwarding. Leave empty to use the system default.', 'settings.terminal.connection.x11Display.placeholder': 'Auto (:0 or DISPLAY)', 'settings.terminal.section.serverStats': 'Server Stats (Linux)', 'settings.terminal.hostInfoBar.show': 'Show host information bar', 'settings.terminal.hostInfoBar.show.desc': 'Show the host address and server information above the terminal. Action buttons remain available when hidden.', 'settings.terminal.hostInfoBar.titleMode': 'Host information title', 'settings.terminal.hostInfoBar.titleMode.desc': 'Choose whether the bar shows the connection address (user@host) or the vault host label.', 'settings.terminal.hostInfoBar.titleMode.address': 'Connection address', 'settings.terminal.hostInfoBar.titleMode.label': 'Host label', 'settings.terminal.section.systemManager': 'System Manager', 'settings.terminal.systemManager.processRefreshInterval': 'Process list refresh', 'settings.terminal.systemManager.processRefreshInterval.desc': 'How often to refresh the process list in the system manager side panel.', 'settings.terminal.systemManager.tmuxRefreshInterval': 'tmux session refresh', 'settings.terminal.systemManager.tmuxRefreshInterval.desc': 'How often to refresh the tmux session list.', 'settings.terminal.systemManager.dockerListRefreshInterval': 'Docker container list refresh', 'settings.terminal.systemManager.dockerListRefreshInterval.desc': 'How often to refresh the Docker container list.', 'settings.terminal.systemManager.dockerStatsRefreshInterval': 'Docker stats refresh', 'settings.terminal.systemManager.dockerStatsRefreshInterval.desc': 'How often to refresh Docker container CPU/memory/network stats.', 'settings.terminal.serverStats.show': 'Show Server Stats', 'settings.terminal.serverStats.show.desc': 'Display CPU, memory, and disk usage in the terminal statusbar (Linux servers only).', 'settings.terminal.serverStats.refreshInterval': 'Refresh Interval', 'settings.terminal.serverStats.refreshInterval.desc': 'How often to refresh server stats.', 'settings.terminal.serverStats.seconds': 'seconds', // Settings > Terminal > Rendering 'settings.terminal.section.rendering': 'Rendering', 'settings.terminal.rendering.renderer': 'Renderer', 'settings.terminal.rendering.renderer.desc': 'Choose the terminal rendering technology. Auto will use DOM on low-memory devices. Changes take effect on new terminal sessions.', 'settings.terminal.rendering.auto': 'Auto', 'settings.terminal.rendering.hibernateHiddenTabs': 'Hibernate hidden tabs', 'settings.terminal.rendering.hibernateHiddenTabs.desc': 'Dispose the terminal renderer for off-screen tabs to save memory while keeping the SSH session connected. Skipped during file transfers.', 'settings.terminal.rendering.hibernateHiddenTabsDelay': 'Hibernate delay', 'settings.terminal.rendering.hibernateHiddenTabsDelay.desc': 'How long a tab must stay off-screen before its renderer is released (5–600 seconds).', 'settings.terminal.rendering.hibernateSkipAltScreen': 'Skip hibernate on full-screen apps', 'settings.terminal.rendering.hibernateSkipAltScreen.desc': 'Keep the terminal renderer alive while vim, htop, or agent TUIs own the alternate screen buffer.', 'settings.terminal.rendering.hibernateKeepRendererCount': 'Keep hidden renderers', 'settings.terminal.rendering.hibernateKeepRendererCount.desc': 'How many off-screen tabs keep their renderer alive (WebGL suspended) before full hibernate.', 'settings.terminal.rendering.hibernateReplayChunkBytes': 'Wake replay chunk size', 'settings.terminal.rendering.hibernateReplayChunkBytes.desc': 'Bytes replayed per animation frame when restoring a hibernated terminal (4–64 KB).', 'settings.terminal.rendering.hibernatePreferWasmSerialize': 'Prefer WASM serialize', 'settings.terminal.rendering.hibernatePreferWasmSerialize.desc': 'Use WASM terminal serialization when available; falls back to the JS serializer.', // Settings > Terminal > Inline Images 'settings.terminal.section.inlineImages': 'Inline Images', 'settings.terminal.inlineImages.enabled': 'Render inline images', 'settings.terminal.inlineImages.enabled.desc': 'Draw real images sent by remote programs (kitten icat, chafa, image previews in file managers and TUIs). Changes take effect on new terminal sessions.', 'settings.terminal.inlineImages.kitty': 'Kitty graphics protocol', 'settings.terminal.inlineImages.kitty.desc': 'Accept Kitty graphics sequences, including direct/stream transmission over SSH.', 'settings.terminal.inlineImages.sixel': 'SIXEL', 'settings.terminal.inlineImages.sixel.desc': 'Accept SIXEL graphics, used by img2sixel, mpv, gnuplot and older DEC-style tools.', 'settings.terminal.inlineImages.iip': 'iTerm inline image protocol', 'settings.terminal.inlineImages.iip.desc': "Accept iTerm2's OSC 1337 inline image sequences (PNG, JPEG, first frame of GIF).", 'settings.terminal.inlineImages.storageLimit': 'Image cache per terminal', 'settings.terminal.inlineImages.storageLimit.desc': 'Memory each terminal may keep for decoded images before the oldest ones are evicted (8–512 MB).', 'settings.terminal.inlineImages.maxMegapixels': 'Maximum image size', 'settings.terminal.inlineImages.maxMegapixels.desc': 'Largest single image that will be decoded; bigger images are discarded without touching the terminal buffer (1–64 MP, 16 MP is 4096 × 4096).', 'settings.terminal.inlineImages.sequenceLimit': 'Maximum sequence size', 'settings.terminal.inlineImages.sequenceLimit.desc': 'Largest single image escape sequence accepted before decoding starts (1–64 MB).', 'settings.terminal.inlineImages.unit.mb': 'MB', 'settings.terminal.inlineImages.unit.megapixels': 'MP', 'settings.terminal.inlineImages.hibernateNote': 'Tabs that have drawn an inline image keep their renderer instead of hibernating, because hibernation restores text only.', // Settings > Terminal > Workspace Focus Indicator 'settings.terminal.section.workspaceFocus': 'Workspace Focus Indicator', 'settings.terminal.workspaceFocus.style': 'Focus indicator style', 'settings.terminal.workspaceFocus.style.desc': 'How to indicate which pane is focused in split view.', 'settings.terminal.workspaceFocus.dim': 'Dim unfocused panes', 'settings.terminal.workspaceFocus.border': 'Border on focused pane', // Settings > Terminal > Autocomplete 'settings.terminal.section.autocomplete': 'Autocomplete', 'settings.terminal.autocomplete.enabled': 'Enable autocomplete', 'settings.terminal.autocomplete.enabled.desc': 'Show command suggestions based on history and command specs as you type.', 'settings.terminal.autocomplete.ghostText': 'Ghost text', 'settings.terminal.autocomplete.ghostText.desc': 'Show inline gray suggestion text after the cursor (like fish shell).', 'settings.terminal.autocomplete.popupMenu': 'Popup menu', 'settings.terminal.autocomplete.popupMenu.desc': 'Show a floating list of multiple suggestions.', 'settings.terminal.autocomplete.historyScope': 'History suggestion scope', 'settings.terminal.autocomplete.historyScope.desc': 'Choose whether autocomplete history suggestions come from the current host only, or from commands recorded on all hosts.', 'settings.terminal.autocomplete.historyScope.host': 'Current host', 'settings.terminal.autocomplete.historyScope.global': 'All hosts', // Settings > Terminal > Password prompt assist (sudo/su) 'settings.terminal.section.passwordPromptAssist': 'Password prompt assist', 'settings.terminal.passwordPromptAssist.mode': 'Assist mode', 'settings.terminal.passwordPromptAssist.mode.desc': 'When sudo or su asks for a password, offer a saved credential. Never auto-sends without confirmation.', 'settings.terminal.passwordPromptAssist.off': 'Off', 'settings.terminal.passwordPromptAssist.hint': 'Quick fill (Enter)', 'settings.terminal.passwordPromptAssist.picker': 'Credential picker', // Settings > Shortcuts 'settings.shortcuts.section.scheme': 'Hotkey Scheme', 'settings.shortcuts.scheme.label': 'Keyboard shortcuts', 'settings.shortcuts.scheme.desc': 'Choose which keyboard layout to use for shortcuts', 'settings.shortcuts.scheme.disabled': 'Disabled', 'settings.shortcuts.scheme.mac': 'Mac (Cmd)', 'settings.shortcuts.scheme.pc': 'PC (Ctrl)', 'settings.shortcuts.disableTerminalFontZoom.label': 'Disable terminal zoom', 'settings.shortcuts.disableTerminalFontZoom.desc': 'Turn off terminal font zoom shortcuts, including Cmd/Ctrl + mouse wheel.', 'settings.shortcuts.shellOnlyTabNumberShortcuts.label': 'Tab shortcuts skip pinned tabs', 'settings.shortcuts.shellOnlyTabNumberShortcuts.desc': 'When enabled, Cmd/Ctrl+[1...9] and Ctrl+Tab switch only work tabs (terminals, workspaces, editors), not the pinned Vault or SFTP tabs.', 'settings.shortcuts.showTabNumberBadges.label': 'Show tab number badges', 'settings.shortcuts.showTabNumberBadges.desc': 'While holding Cmd/Ctrl, show 1-9 on tabs that match Cmd/Ctrl+[1...9], so you can jump accurately.', 'settings.shortcuts.section.custom': 'Custom Shortcuts', 'settings.shortcuts.resetAll': 'Reset All', 'settings.shortcuts.recording': 'Press keys...', 'settings.shortcuts.none': 'None', 'settings.shortcuts.setDisabled': 'Set to disabled', 'settings.shortcuts.category.tabs': 'Tabs', 'settings.shortcuts.category.terminal': 'Terminal', 'settings.shortcuts.category.navigation': 'Navigation', 'settings.shortcuts.category.app': 'App', 'settings.shortcuts.category.sftp': 'SFTP', // Context menus / common actions 'action.newHost': 'New Host', 'action.newSubfolder': 'New Subfolder', 'action.copyPublicKey': 'Copy Public Key', 'action.keyExport': 'Key Export', 'action.edit': 'Edit', 'action.delete': 'Delete', 'action.duplicate': 'Duplicate', 'action.open': 'Open', 'action.copy': 'Copy', 'action.run': 'Run', 'action.start': 'Start', 'action.stop': 'Stop', 'action.remove': 'Remove', 'action.convertToHost': 'Convert to Host', // Sync 'sync.cloudSync': 'Cloud Sync', 'sync.settings': 'Sync Settings', 'sync.active': 'Cloud Sync Active', 'sync.pending': 'Changes pending sync', 'sync.syncing': 'Syncing...', 'sync.error': 'Sync Error', 'sync.notConfigured': 'Not Configured', 'sync.failed': 'Sync failed', 'sync.connected': 'Connected', 'sync.syncNow': 'Sync Now', 'sync.recentActivity': 'Recent activity', 'sync.history.uploaded': 'Uploaded', 'sync.history.downloaded': 'Downloaded', 'sync.history.resolved': 'Resolved', 'sync.toast.completedMessage': 'Sync completed successfully', 'sync.toast.errorTitle': 'Sync Error', 'sync.autoSync.failedTitle': 'Sync failed', 'sync.autoSync.inspectFailedTitle': 'Sync paused', 'sync.autoSync.inspectFailedMessage': 'Could not reach the cloud to check for changes. Auto-sync will retry when data changes or the app is restarted.', 'sync.autoSync.syncedTitle': 'Synced from cloud', 'sync.autoSync.syncedMessage': 'Your data has been updated from the cloud.', 'sync.autoSync.noProvider': 'No cloud provider connected. Open Settings → Sync & Cloud to connect one.', 'sync.autoSync.alreadySyncing': 'Sync is already in progress.', 'sync.autoSync.restoreInProgress': 'A vault restore is in progress in another window. Please wait for it to finish.', 'sync.autoSync.interruptedApplyTitle': 'Sync paused — previous restore interrupted', 'sync.autoSync.interruptedApplyMessage': 'A previous restore did not finish cleanly, so the local vault may be inconsistent. Open Settings → Sync & Cloud → Restore and apply a protective backup before auto-sync resumes.', 'sync.autoSync.vaultLocked': 'Vault is locked. Open Settings → Sync & Cloud to unlock.', 'sync.autoSync.conflictDetected': 'Sync conflict detected. Open Settings → Sync & Cloud to resolve.', 'sync.autoSync.syncFailed': 'Sync failed', 'sync.autoSync.restoredTitle': 'Vault restored', 'sync.autoSync.restoredMessage': 'Your vault has been restored from the cloud.', 'sync.autoSync.keptLocalTitle': 'Kept local vault', 'sync.autoSync.keptLocalMessage': 'Your empty local vault was kept. Cloud data was not applied.', 'sync.autoSync.emptyVaultConflict.title': 'Empty Vault Detected', 'sync.autoSync.emptyVaultConflict.description': 'Your local vault is empty, but the cloud has data. This usually happens after an update or storage reset. What would you like to do?', 'sync.autoSync.emptyVaultConflict.cloudLabel': 'Cloud', 'sync.autoSync.emptyVaultConflict.restore': 'Restore from Cloud', 'sync.autoSync.emptyVaultConflict.restoreDesc': 'Recommended — recover your hosts, keys, and snippets from the cloud backup', 'sync.autoSync.emptyVaultConflict.keepEmpty': 'Keep Empty', 'sync.autoSync.emptyVaultConflict.keepEmptyDesc': 'Start fresh with an empty vault', 'sync.autoSync.emptyVaultConflict.cloudSummary': '{hosts} hosts, {keys} keys, {snippets} snippets, {notes} notes, {proxyProfiles} proxies', 'sync.autoSync.emptyVaultManual': 'Cannot sync: the local vault is empty. Restore from a local backup or enable Force Push in the sync panel first.', 'sync.blocked.title': 'Sync paused', 'sync.blocked.reason.bulkShrink': 'Would delete {lost} of {baseCount} {entityType} from cloud ({percent}% reduction).', 'sync.blocked.reason.largeShrink': 'Would delete {lost} {entityType} from cloud.', 'sync.blocked.detail': 'This is usually caused by a degraded local state (keychain failure, partial data load). Restore from a local backup, or force-push if you truly meant to remove these entries.', 'sync.blocked.restoreButton': 'Restore from local backup', 'sync.blocked.forcePushButton': 'Force push anyway', 'sync.forcePush.title': 'Confirm force push', 'sync.forcePush.body': 'You are about to remove {lost} {entityType} from the cloud. This cannot be undone. Proceed?', 'sync.forcePush.confirm': 'Yes, push anyway', 'sync.forcePush.cancel': 'Cancel', 'sync.entityType.hosts': 'hosts', 'sync.entityType.keys': 'keys', 'sync.entityType.identities': 'identities', 'sync.entityType.proxyProfiles': 'proxy profiles', 'sync.entityType.snippets': 'snippets', 'sync.entityType.customGroups': 'groups', 'sync.entityType.snippetPackages': 'snippet packages', 'sync.entityType.knownHosts': 'known-host entries', 'sync.entityType.portForwardingRules': 'port-forwarding rules', 'sync.entityType.groupConfigs': 'group configs', 'sync.credentialsUnavailable': 'This device cannot decrypt some saved credentials. Re-enter credentials locally before syncing.', 'time.never': 'Never', 'time.justNow': 'Just now', 'time.minutesAgo': '{minutes}m ago', // Vault navigation 'vault.nav.hosts': 'Hosts', 'vault.nav.keychain': 'Keychain', 'vault.nav.proxies': 'Proxies', 'vault.nav.portForwarding': 'Port Forwarding', 'vault.nav.snippets': 'Scripts', 'vault.nav.notes': 'Notes', 'vault.nav.knownHosts': 'Known Hosts', 'vault.nav.logs': 'Logs', 'proxyProfiles.action.add': 'Add Proxy', 'proxyProfiles.search.placeholder': 'Search proxies…', 'proxyProfiles.section.proxies': 'Proxies', 'proxyProfiles.count.items': '{count} items', 'proxyProfiles.empty.title': 'No Proxies', 'proxyProfiles.empty.desc': 'Create reusable HTTP, SOCKS5, or command proxies and select them from host details.', 'proxyProfiles.usage': '{count} linked', 'proxyProfiles.copyName': '{name} Copy', 'proxyProfiles.panel.newTitle': 'New Proxy', 'proxyProfiles.field.name': 'Proxy name', 'proxyProfiles.error.required': 'Name and proxy details are required.', 'proxyProfiles.error.port': 'Port must be between 1 and 65535.', 'proxyProfiles.viewMode': 'Proxy view mode', 'proxyProfiles.delete.title': 'Delete proxy?', 'proxyProfiles.delete.desc': 'Deleting "{name}" will unlink it from {count} host or group settings.', 'vault.groups.title': 'Groups', 'vault.groups.total': '{count} total', 'vault.groups.hostsCount': '{count} Hosts', 'vault.groups.newSubgroup': 'New Subgroup', 'vault.groups.rename': 'Rename Group', 'vault.groups.unnamed': 'Unnamed Group', 'vault.groups.delete': 'Delete Group', 'vault.groups.createSubfolder': 'Create Subfolder', 'vault.groups.createRoot': 'Create Root Group', 'vault.groups.createDialog.desc': 'Create a new group for organizing hosts.', 'vault.groups.renameDialogTitle': 'Rename Group', 'vault.groups.renameDialog.desc': 'Rename an existing group.', 'vault.groups.deleteDialogTitle': 'Delete Group', 'vault.groups.deleteDialog.desc': 'This will permanently delete the group and move all hosts to the root level.', 'vault.groups.deleteDialog.managedDesc': 'This is a managed SSH config group. Deleting it will also delete all hosts and unlink from the source file.', 'vault.groups.deleteDialog.deleteHosts': 'Also delete all hosts in this group', 'vault.groups.deleteDialog.bulkTitle': 'Delete Selected Groups', 'vault.groups.deleteDialog.bulkDesc': 'This will permanently delete the selected groups and move their hosts to the root level.', 'vault.groups.deleteDialog.bulkDeleteHosts': 'Also delete all hosts in the selected groups', 'vault.groups.selectedCount': '{count} groups selected', 'vault.groups.deleteMultiple.success': 'Deleted {count} selected items', 'vault.groups.ungrouped': 'Ungrouped', 'vault.groups.field.name': 'Group Name', 'vault.groups.placeholder.example': 'e.g. Production', 'vault.groups.parentLabel': 'Parent', 'vault.groups.pathLabel': 'Path', 'vault.groups.settings': 'Group Settings', 'vault.groups.details': 'Group Details', 'vault.groups.details.general': 'General', 'vault.groups.details.ssh': 'SSH', 'vault.groups.details.telnet': 'Telnet', 'vault.groups.details.advanced': 'Advanced', 'vault.groups.details.appearance': 'Appearance', 'vault.groups.details.mosh': 'Mosh', 'vault.groups.details.parentGroup': 'Parent Group', 'vault.groups.details.none': 'None', 'vault.groups.details.inherited': 'Inherited from group', 'vault.groups.details.addProtocol': 'Add Protocol', 'vault.groups.details.removeProtocol': 'Remove Protocol', 'vault.groups.details.fontFamily': 'Font Family', 'vault.groups.details.fontSize': 'Font Size', 'vault.groups.errors.required': 'Group name is required.', 'vault.groups.errors.invalidChars': "Group name cannot include '/' or '\\\\'.", 'vault.groups.errors.duplicatePath': 'A group with this name already exists at this location.', 'vault.deleteConfirm.title': 'Delete "{name}"?', 'vault.deleteConfirm.desc': 'This action cannot be undone.', 'vault.deleteConfirm.packageDesc': 'This will remove the script package. Scripts inside it will stay saved and move out of the package.', 'vault.deleteConfirm.noteGroupDesc': 'This will remove the folder. Notes inside it will stay saved and move out of the folder.', 'vault.deleteConfirm.portForwardingDesc': 'This will delete the port forwarding rule.', 'vault.managedSource.unmanage': 'Unmanage', 'vault.managedSource.unmanageSuccess': 'Successfully unmanaged group', 'vault.hosts.header.entries': '{count} entries', 'vault.hosts.header.live': '{count} live', // Vault hosts header/actions 'vault.hosts.search.placeholder': 'Find a host or ssh user@hostname / ssh -p 2222 user@hostname...', 'vault.hosts.connect': 'Connect', 'vault.hosts.openSftp': 'Open SFTP', 'vault.view.grid': 'Grid', 'vault.view.list': 'List', 'vault.view.tree': 'Tree', 'vault.tree.expandAll': 'Expand All', 'vault.tree.collapseAll': 'Collapse All', 'vault.hosts.newHost': 'New Host', 'vault.hosts.newGroup': 'New Group', 'vault.hosts.import': 'Import', 'vault.hosts.export': 'Export', 'vault.hosts.export.toast.success': 'Exported {count} hosts to CSV', 'vault.hosts.export.toast.successWithSkipped': 'Exported {count} hosts to CSV ({skipped} unsupported hosts skipped)', 'vault.hosts.export.toast.passphrasesSkipped': '{count} saved key passphrases could not be read and were left blank', 'vault.hosts.export.toast.noHosts': 'No hosts to export', 'vault.hosts.allHosts': 'All hosts', 'vault.hosts.pinned': 'Pinned', 'vault.hosts.recentlyConnected': 'Recently Connected', 'vault.hosts.pinToTop': 'Pin to Top', 'vault.hosts.unpin': 'Unpin', 'vault.hosts.copyCredentials': 'Copy Credentials', 'vault.hosts.copyCredentials.toast.success': 'Credentials copied to clipboard', 'vault.hosts.copyCredentials.toast.noPassword': 'No password saved for this host', 'vault.hosts.multiSelect': 'Multi-select', 'vault.hosts.selected': '{count} selected', 'vault.hosts.selectedSummary': '{hosts} hosts and {groups} groups selected', 'vault.hosts.selectAll': 'Select All', 'vault.hosts.deselectAll': 'Deselect All', 'vault.hosts.deleteSelected': 'Delete ({count})', 'vault.hosts.deleteMultiple.success': 'Deleted {count} hosts', 'vault.hosts.connectSelected': 'Connect ({count})', 'vault.hosts.connectMultiple.success': 'Connecting {count} hosts', 'vault.hosts.moveToGroup.success': 'Moved {host} to {group}', 'vault.hosts.errors.nameRequired': 'Host name is required.', 'vault.hosts.empty.title': 'Set up your hosts', 'vault.hosts.empty.desc': 'Save hosts to quickly connect to your servers, VMs, and containers.', 'deepLink.ssh.invalid': 'Invalid ssh:// link', 'deepLink.telnet.invalid': 'Invalid telnet:// link', 'deepLink.jms.invalid': 'Invalid JumpServer link', 'deepLink.jms.unsupported': 'Unsupported JumpServer protocol: {{protocol}}', 'settings.tab.plugins': 'Plugins', 'settings.plugins.title': 'Plugin settings', 'settings.plugins.description': 'Native, validated settings contributed by development plugins.', 'settings.plugins.loading': 'Loading plugin settings…', 'settings.plugins.empty': 'No enabled plugin contributes settings.', 'settings.plugins.scopeContext': 'Open this setting in its {scope} context.', 'settings.plugins.pressKeybinding': 'Press a key combination', 'settings.plugins.validJsonArray': 'Enter a valid JSON array.', 'settings.plugins.browse': 'Browse', 'settings.plugins.restartRequired': 'Restart required', 'settings.plugins.saving': 'Saving…', 'settings.plugins.storedSecurely': 'Stored securely', 'settings.plugins.configuredReplacement': 'Configured — enter a replacement', 'settings.plugins.moveItemUp': 'Move {label} item {index} up', 'settings.plugins.moveItemDown': 'Move {label} item {index} down', 'settings.plugins.addItem': 'Add item', 'settings.plugins.removeItem': 'Remove item', 'settings.plugins.scopeTargets': 'Plugin setting scopes', 'settings.plugins.scopeTarget': '{scope} target', 'settings.plugins.noScopeTargets': 'No available targets', 'settings.plugins.thisDevice': 'This device', 'plugins.authentication.description': 'Complete the authentication request in this NetMesh dialog.', 'plugins.authentication.value': 'Value', 'plugins.authentication.password': 'Password', 'plugins.authentication.code': 'One-time code', 'plugins.authentication.deviceCode': 'Device code', 'plugins.authentication.openBrowser': 'Open browser', 'plugins.authentication.invalidUrl': 'The authentication provider returned an unsafe or invalid URL.', 'plugins.authentication.responseFailed': 'Could not send the authentication response. Try again or cancel the request.', 'plugins.authentication.responseFailedWithMessage': 'Could not send the authentication response: {message}. Try again or cancel the request.', 'plugins.authentication.continue': 'Continue', };