'Control Plane', 'login_heading' => 'Sign in', 'login_subtitle' => 'Access to the Clusev panel.', 'email' => 'Email', 'password' => 'Password', 'toggle_password' => 'Show password', 'hide_password' => 'Hide password', 'remember_me' => 'Stay signed in', 'login_submit' => 'Sign in', 'checking' => 'Checking…', 'secured' => 'Secured', 'security_note' => 'Connection over SSH · 2FA required · every action lands in the audit log.', // ── Password change ────────────────────────────────────────────────── 'security' => 'Security', 'password_change_heading' => 'Change password', 'password_change_subtitle' => 'Set your own password (min. 12 characters, upper/lowercase + a digit).', 'current_password' => 'Current password', 'new_password' => 'New password', 'confirm_new_password' => 'Confirm new password', 'save_and_continue' => 'Save & continue', 'saving' => 'Saving…', // ── Two-factor (shared label) ──────────────────────────────────────── 'two_factor' => 'Two-factor', // ── 2FA challenge ──────────────────────────────────────────────────── 'challenge_heading' => 'Verification', 'challenge_subtitle' => '6-digit code from your authenticator app.', 'code' => 'Code', 'back_to_login' => 'Back to sign in', // ── 2FA setup ──────────────────────────────────────────────────────── 'setup_heading' => 'Set up', 'setup_subtitle' => 'Scan the code with an authenticator app (Aegis, Google Authenticator, …) and confirm with a code.', 'qr_alt' => '2FA QR code', 'secret_manual' => 'Secret (manual)', 'confirmation_code' => 'Confirmation code', 'activate' => 'Activate', // ── Brand panel (auth layout) ──────────────────────────────────────── 'brand_headline_lead' => 'One console for your', 'brand_headline_accent' => 'entire fleet', 'brand_tagline' => 'Agentless over SSH. Metrics, services, files and a gapless audit log — securely controlled from one panel.', 'terminal_title' => 'clusev · security model', 'terminal_ssh' => 'agentless · exec + SFTP over phpseclib', 'terminal_key' => 'host keys pinned via TOFU', 'terminal_2fa' => 'enforced on every login', 'terminal_log' => 'every action in the audit log', 'terminal_core' => 'Open Core · AGPL-licensed', 'footer_copyright' => '© :year Clusev · Fleet Control', 'footer_operational' => 'operational', // ── Page titles ────────────────────────────────────────────────────── 'title_login' => 'Sign in — Clusev', 'title_password_change' => 'Change password — Clusev', 'title_challenge' => 'Verification — Clusev', 'title_setup' => 'Set up 2FA — Clusev', // ── Validation / error messages ────────────────────────────────────── 'too_many_attempts' => 'Too many attempts. Please try again in :seconds seconds.', 'invalid_credentials' => 'These credentials are incorrect.', 'session_expired' => 'Session expired. Please sign in again.', 'invalid_code' => 'Invalid code.', 'code_mismatch' => 'Code does not match — check your authenticator app’s time.', // ── Validation attribute names ─────────────────────────────────────── 'attr_current_password' => 'current password', 'attr_new_password' => 'new password', // ── 2FA backup (recovery) codes ────────────────────────────────────── 'challenge_recovery_hint' => 'Lost your authenticator? Enter one of your backup codes.', 'challenge_key_subtitle' => 'Confirm with your security key or a backup code.', 'challenge_backup_label' => 'Backup code', 'challenge_backup_placeholder' => 'xxxxxxxxxx-xxxxxxxxxx', 'challenge_backup_only_hint' => 'No authenticator needed — use a security key or a backup code.', 'recovery_heading' => 'Backup codes', 'recovery_subtitle' => 'Use these one-time codes to sign in when you do not have your authenticator.', 'recovery_warning' => 'Save these codes somewhere safe now — each works exactly once. Download them while they are shown.', 'recovery_download' => 'Download as file', 'recovery_regenerate' => 'Regenerate', 'recovery_regenerate_confirm' => 'Generate new codes? The old ones stop working.', 'recovery_regenerated' => 'New backup codes generated.', 'recovery_done' => 'Saved — continue', 'recovery_manage' => 'Manage backup codes', 'recovery_hidden_notice' => 'For security, backup codes are shown only once, at creation. Generate a new set to see them — the old ones stop working.', // ── Forgot / reset password ────────────────────────────────────────── 'title_forgot' => 'Forgot password — Clusev', 'forgot_link' => 'Forgot password?', 'forgot_heading' => 'Reset password', 'forgot_subtitle' => 'Reset your password with your 2FA code or a backup code.', 'forgot_code' => '2FA code or backup code', 'forgot_code_hint' => 'Your 6-digit authenticator code or one of your backup codes.', 'forgot_submit' => 'Reset password', 'forgot_send_email' => 'Email me a reset link', 'reset_invalid' => 'Invalid email or code.', 'reset_done' => 'Password changed. Please sign in again.', 'reset_link_sent' => 'If the email exists, a reset link has been sent.', 'reset_token_invalid' => 'Reset link is invalid or expired.', 'reset_no_2fa_note' => 'Without 2FA, recovery is only possible via the email link (if SMTP is configured) or the clusev:reset-admin command.', // ── WebAuthn / security keys ───────────────────────────────────────── 'webauthn_login' => 'Sign in with a security key', 'webauthn_failed' => 'Could not verify the security key.', 'webauthn_title' => 'Security keys', 'webauthn_subtitle' => 'Hardware keys (e.g. YubiKey) — as the only factor, with TOTP, or both.', 'webauthn_unavailable' => 'Security keys are only available when the panel runs under a domain with HTTPS.', 'webauthn_name' => 'Label', 'webauthn_name_placeholder' => 'e.g. YubiKey 5C', 'webauthn_add' => 'Add security key', 'webauthn_added' => 'Security key added.', 'webauthn_removed' => 'Security key removed.', 'webauthn_none' => 'No security key registered yet.', 'webauthn_added_on' => 'Added :date', 'webauthn_last_used' => 'Last used :date', 'webauthn_never_used' => 'Not used yet', 'webauthn_remove_confirm' => 'Remove this security key?', ];