# Copyright (C) 2026 Stefan Kogelgruber
# This file is distributed under the GPL v2 or later.
msgid ""
msgstr ""
"Project-Id-Version: Brainwerk Security Suite 0.17.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/i18n-sec\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2026-08-02T13:45:50+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.12.0\n"
"X-Domain: brainwerk-security-suite\n"

#. Plugin Name of the plugin
#: brainwerk-security-suite.php
#: admin/class-shieldforge-admin.php:114
#: admin/class-shieldforge-admin.php:115
#: admin/class-shieldforge-admin.php:126
#: admin/class-shieldforge-admin.php:127
#: admin/class-shieldforge-admin.php:196
#: includes/class-shieldforge-badge.php:40
msgid "Brainwerk Security Suite"
msgstr ""

#. Description of the plugin
#: brainwerk-security-suite.php
msgid "Privacy-first WordPress security suite, designed for EU compliance and Multisite installations. Lightweight, transparent, GDPR-ready."
msgstr ""

#. Author of the plugin
#: brainwerk-security-suite.php
msgid "Stefan Kogelgruber"
msgstr ""

#. Author URI of the plugin
#: brainwerk-security-suite.php
msgid "https://brainwerk.at"
msgstr ""

#: admin/class-shieldforge-admin.php:28
msgid "Dashboard"
msgstr ""

#: admin/class-shieldforge-admin.php:29
msgid "Login & Auth"
msgstr ""

#: admin/class-shieldforge-admin.php:30
#: admin/class-shieldforge-dashboard-widget.php:239
msgid "2FA"
msgstr ""

#: admin/class-shieldforge-admin.php:31
#: admin/class-shieldforge-dashboard-widget.php:224
#: admin/views/page-dashboard.php:79
msgid "Hardening"
msgstr ""

#: admin/class-shieldforge-admin.php:32
msgid "Hardening+"
msgstr ""

#: admin/class-shieldforge-admin.php:33
msgid "Firewall"
msgstr ""

#: admin/class-shieldforge-admin.php:34
#: admin/class-shieldforge-dashboard-widget.php:234
msgid "Scanner"
msgstr ""

#: admin/class-shieldforge-admin.php:35
msgid "Vulnerabilities"
msgstr ""

#: admin/class-shieldforge-admin.php:36
msgid "Anomaly (beta)"
msgstr ""

#: admin/class-shieldforge-admin.php:37
#: admin/views/page-incident.php:18
msgid "Incident Response"
msgstr ""

#: admin/class-shieldforge-admin.php:38
msgid "Audit"
msgstr ""

#: admin/class-shieldforge-admin.php:39
msgid "Logs"
msgstr ""

#: admin/class-shieldforge-admin.php:40
msgid "Notifications"
msgstr ""

#: admin/class-shieldforge-admin.php:41
#: admin/views/page-multisite.php:15
msgid "Multisite"
msgstr ""

#: admin/class-shieldforge-admin.php:42
msgid "Threat Network"
msgstr ""

#: admin/class-shieldforge-admin.php:43
msgid "Privacy / GDPR"
msgstr ""

#: admin/class-shieldforge-admin.php:44
msgid "Tools"
msgstr ""

#: admin/class-shieldforge-admin.php:45
#: admin/views/page-license.php:24
msgid "License"
msgstr ""

#: admin/class-shieldforge-admin.php:46
#: admin/views/page-modules.php:30
msgid "Extra Modules"
msgstr ""

#: admin/class-shieldforge-admin.php:59
msgid "Operations"
msgstr ""

#: admin/class-shieldforge-admin.php:63
msgid "Setup & Hardening"
msgstr ""

#: admin/class-shieldforge-admin.php:67
msgid "Detection & Response"
msgstr ""

#: admin/class-shieldforge-admin.php:71
msgid "Records & Alerts"
msgstr ""

#: admin/class-shieldforge-admin.php:75
msgid "System"
msgstr ""

#: admin/class-shieldforge-admin.php:79
msgid "Advanced"
msgstr ""

#: admin/class-shieldforge-admin.php:169
msgid "Remove this block?"
msgstr ""

#: admin/class-shieldforge-admin.php:170
msgid "Block this IP?"
msgstr ""

#: admin/class-shieldforge-admin.php:171
msgid "Request failed."
msgstr ""

#: admin/class-shieldforge-admin.php:189
msgid "You do not have permission to access this page."
msgstr ""

#: admin/class-shieldforge-admin.php:261
msgid "This section is coming soon."
msgstr ""

#: admin/class-shieldforge-admin.php:347
msgid "Settings saved."
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:35
msgid "Brainwerk Security Suite — Security Overview"
msgstr ""

#. translators: %d: threat score
#: admin/class-shieldforge-dashboard-widget.php:63
#, php-format
msgid "Threat level CRITICAL (%d/100) — review attacker activity."
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:72
#, php-format
msgid "Threat level HIGH (%d/100) — review the activity log."
msgstr ""

#. translators: %d: lockout count
#: admin/class-shieldforge-dashboard-widget.php:85
#, php-format
msgid "%d brute-force lockouts in 24h — check the firewall list."
msgstr ""

#. translators: %d: failed login count
#: admin/class-shieldforge-dashboard-widget.php:98
#, php-format
msgid "%d failed logins in 24h — consider tightening the brute-force threshold."
msgstr ""

#. translators: %d: vulnerability count on active components
#: admin/class-shieldforge-dashboard-widget.php:115
#, php-format
msgid "%d known vulnerability on an active plugin/theme/core. Update or replace ASAP."
msgid_plural "%d known vulnerabilities on active plugins/themes/core. Update or replace ASAP."
msgstr[0] ""
msgstr[1] ""

#. translators: %d: malware-suspect hit count
#: admin/class-shieldforge-dashboard-widget.php:129
#, php-format
msgid "%d suspicious code pattern detected by the scanner — investigate immediately."
msgid_plural "%d suspicious code patterns detected by the scanner — investigate immediately."
msgstr[0] ""
msgstr[1] ""

#. translators: 1: changed count, 2: missing count
#: admin/class-shieldforge-dashboard-widget.php:142
#, php-format
msgid "%1$d files changed and %2$d missing in 24h — verify against intentional updates."
msgstr ""

#. translators: %d: changed file count
#: admin/class-shieldforge-dashboard-widget.php:153
#, php-format
msgid "%d file changed since the last scan — review on the Scanner tab."
msgid_plural "%d files changed since the last scan — review on the Scanner tab."
msgstr[0] ""
msgstr[1] ""

#. translators: %d: anomaly count
#: admin/class-shieldforge-dashboard-widget.php:166
#, php-format
msgid "%d anomalous login flagged — verify it is legitimate."
msgid_plural "%d anomalous logins flagged — verify they are legitimate."
msgstr[0] ""
msgstr[1] ""

#: admin/class-shieldforge-dashboard-widget.php:181
msgid "You do not have 2FA enabled. Set it up on your profile — single biggest defense against password attacks."
msgstr ""

#. translators: 1: admin username, 2: hit count
#: admin/class-shieldforge-dashboard-widget.php:197
#, php-format
msgid "Your own admin username \"%1$s\" is being targeted (%2$d attempts in 24h)."
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:214
msgid "BF"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:216
msgid "Brute-force protection (IP-based)"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:219
msgid "Account-lock"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:221
msgid "Account-based lockout"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:226
msgid "Hardening (XML-RPC, version, REST, headers)"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:229
msgid "Anomaly"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:231
#: admin/views/page-anomaly.php:65
msgid "Anomaly detection"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:236
msgid "File-integrity + malware-pattern scanner"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:241
msgid "Two-factor authentication module"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:244
msgid "Vuln-DB"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:246
msgid "Plugin/theme/core vulnerability scanner"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:249
msgid "Anonymize"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:251
#: includes/class-shieldforge-sanity.php:221
#: includes/class-shieldforge-tools.php:104
msgid "IP anonymization (GDPR)"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:254
msgid "Digest"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:256
#: includes/class-shieldforge-sanity.php:37
msgid "Daily digest e-mail"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:276
msgid "Calm"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:277
msgid "Elevated"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:278
msgid "High"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:279
msgid "Critical"
msgstr ""

#. translators: 1: anomalies in 24h, 2: distinct attacker IPs in 24h
#: admin/class-shieldforge-dashboard-widget.php:297
#, php-format
msgid "%1$d anomalies · %2$d distinct attackers (24h)"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:308
msgid "Action items"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:321
msgid "Logins"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:325
msgid "Failed"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:329
#: admin/views/page-multisite.php:42
#: admin/views/page-multisite.php:58
msgid "Lockouts"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:333
msgid "Probes"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:349
msgid "Top attackers (24h)"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:362
msgid "Targeted users (24h)"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:377
msgid "Recent events"
msgstr ""

#: admin/class-shieldforge-dashboard-widget.php:397
msgid "Open Brainwerk Security Suite"
msgstr ""

#: admin/views/page-anomaly.php:15
msgid "Baseline cleared."
msgstr ""

#. translators: 1: anomalies in 24h, 2: top attacker IP or "none"
#: admin/views/page-anomaly.php:54
#, php-format
msgid "%1$d anomalous logins in the last 24h. Top attacker IP: %2$s"
msgstr ""

#: admin/views/page-anomaly.php:56
msgid "none"
msgstr ""

#: admin/views/page-anomaly.php:65
msgid "beta"
msgstr ""

#: admin/views/page-anomaly.php:67
msgid "A lightweight, explainable Z-score model that flags logins outside a user's normal pattern (hour of day, IP family, user-agent class)."
msgstr ""

#: admin/views/page-anomaly.php:79
msgid "Enable"
msgstr ""

#: admin/views/page-anomaly.php:83
msgid "Record baselines on every successful login."
msgstr ""

#: admin/views/page-anomaly.php:88
msgid "Alert threshold"
msgstr ""

#: admin/views/page-anomaly.php:91
msgid "Score 0–100. Above this value, the event is logged as severity HIGH."
msgstr ""

#: admin/views/page-anomaly.php:95
msgid "Block threshold (future)"
msgstr ""

#: admin/views/page-anomaly.php:98
msgid "Reserved for a later release. Currently informational only."
msgstr ""

#: admin/views/page-anomaly.php:104
#: admin/views/page-audit.php:290
#: admin/views/page-hardening-plus.php:68
#: admin/views/page-hardening-plus.php:116
#: admin/views/page-hardening-plus.php:163
#: admin/views/page-hardening-plus.php:245
#: admin/views/page-scanner.php:303
#: admin/views/page-scanner.php:339
#: admin/views/page-threat-network.php:997
#: admin/views/page-threat-network.php:1045
#: admin/views/page-twofactor.php:111
#: admin/views/page-vulnerabilities.php:243
msgid "Save"
msgstr ""

#: admin/views/page-anomaly.php:110
msgid "Baseline status"
msgstr ""

#: admin/views/page-anomaly.php:114
#, php-format
msgid "%1$s baseline record across %2$s user."
msgid_plural "%1$s baseline records across %2$s users."
msgstr[0] ""
msgstr[1] ""

#: admin/views/page-anomaly.php:119
msgid "scoring becomes meaningful after ~5 logins per user."
msgstr ""

#: admin/views/page-anomaly.php:126
#: admin/views/page-anomaly.php:171
#: admin/views/page-logs.php:74
#: admin/views/page-twofactor.php:124
#: includes/class-shieldforge-admin-intros.php:215
msgid "User"
msgstr ""

#: admin/views/page-anomaly.php:127
msgid "Tracked metrics"
msgstr ""

#: admin/views/page-anomaly.php:128
msgid "Total samples"
msgstr ""

#: admin/views/page-anomaly.php:129
msgid "Last update (UTC)"
msgstr ""

#: admin/views/page-anomaly.php:149
msgid "Clear all baseline data? Users will need to log in a few times before scoring is meaningful again."
msgstr ""

#: admin/views/page-anomaly.php:152
msgid "Reset baseline"
msgstr ""

#: admin/views/page-anomaly.php:158
msgid "Recent anomalies"
msgstr ""

#: admin/views/page-anomaly.php:161
msgid "No anomalous logins yet. Once a user has at least 5 successful logins, future logins outside their normal pattern will appear here."
msgstr ""

#: admin/views/page-anomaly.php:165
msgid "Score is the maximum across all tracked metrics. The \"top metric\" column shows which signal drove the score, with observed value vs. baseline mean ± stddev."
msgstr ""

#: admin/views/page-anomaly.php:170
#: admin/views/page-logs.php:70
#: admin/views/page-threat-network.php:1069
msgid "When (UTC)"
msgstr ""

#: admin/views/page-anomaly.php:172
#: admin/views/page-audit.php:197
#: admin/views/page-dashboard.php:191
#: admin/views/page-dashboard.php:233
#: admin/views/page-firewall.php:43
#: admin/views/page-logs.php:47
#: admin/views/page-logs.php:73
#: admin/views/page-modules.php:73
#: admin/views/page-modules.php:158
#: includes/class-shieldforge-admin-intros.php:112
#: includes/class-shieldforge-admin-intros.php:195
#: includes/class-shieldforge-admin-intros.php:214
msgid "IP"
msgstr ""

#: admin/views/page-anomaly.php:173
msgid "Score"
msgstr ""

#: admin/views/page-anomaly.php:174
msgid "Top metric"
msgstr ""

#: admin/views/page-anomaly.php:175
msgid "Observed vs. baseline"
msgstr ""

#: admin/views/page-anomaly.php:228
msgid "Upgrade anomaly detection in Pro"
msgstr ""

#: admin/views/page-anomaly.php:229
msgid "The free build flags outliers using fixed Z-score thresholds. Pro adds per-user adaptive thresholds, geo-velocity (\"impossible travel\"), and step-up auth challenges instead of just logging."
msgstr ""

#: admin/views/page-anomaly.php:231
msgid "Per-user adaptive thresholds"
msgstr ""

#: admin/views/page-anomaly.php:232
msgid "Geo-velocity / impossible-travel detection"
msgstr ""

#: admin/views/page-anomaly.php:233
msgid "Step-up challenge (2FA prompt) on suspicious logins"
msgstr ""

#: admin/views/page-audit.php:31
msgid "Logout"
msgstr ""

#: admin/views/page-audit.php:32
msgid "Post updated"
msgstr ""

#: admin/views/page-audit.php:33
msgid "Post trashed"
msgstr ""

#: admin/views/page-audit.php:34
msgid "Post deleted"
msgstr ""

#: admin/views/page-audit.php:35
msgid "User registered"
msgstr ""

#: admin/views/page-audit.php:36
msgid "User deleted"
msgstr ""

#: admin/views/page-audit.php:37
msgid "User profile updated"
msgstr ""

#: admin/views/page-audit.php:38
msgid "Role changed"
msgstr ""

#: admin/views/page-audit.php:39
msgid "Admin created"
msgstr ""

#: admin/views/page-audit.php:40
msgid "Plugin activated"
msgstr ""

#: admin/views/page-audit.php:41
msgid "Plugin deactivated"
msgstr ""

#: admin/views/page-audit.php:42
msgid "Plugin updated"
msgstr ""

#: admin/views/page-audit.php:43
msgid "Theme switched"
msgstr ""

#: admin/views/page-audit.php:44
msgid "Theme updated"
msgstr ""

#: admin/views/page-audit.php:45
msgid "Core updated"
msgstr ""

#: admin/views/page-audit.php:46
msgid "Option changed"
msgstr ""

#: admin/views/page-audit.php:73
msgid "fields: "
msgstr ""

#: admin/views/page-audit.php:94
msgid "WordPress"
msgstr ""

#: admin/views/page-audit.php:130
msgid "system / cron"
msgstr ""

#: admin/views/page-audit.php:141
msgid "Audit trail"
msgstr ""

#: admin/views/page-audit.php:143
msgid "Who changed what, when. Covers post edits, user changes, plugin/theme/core updates, and security-sensitive option changes. Useful for incident response and DSGVO Art. 32 compliance."
msgstr ""

#: admin/views/page-audit.php:155
msgid "(last 7 days)"
msgstr ""

#: admin/views/page-audit.php:161
msgid "Recent audit events"
msgstr ""

#: admin/views/page-audit.php:167
msgid "Filter by type:"
msgstr ""

#: admin/views/page-audit.php:169
msgid "All audit events"
msgstr ""

#: admin/views/page-audit.php:178
msgid "clear"
msgstr ""

#: admin/views/page-audit.php:185
msgid "No audit events yet."
msgstr ""

#: admin/views/page-audit.php:186
msgid "The audit trail starts recording from now. Edit a post, change a setting, deactivate a plugin — anything you do shows up here. Useful for \"who changed what when\" investigations."
msgstr ""

#: admin/views/page-audit.php:187
msgid "Edit my profile (test it)"
msgstr ""

#: admin/views/page-audit.php:193
#: admin/views/page-scanner.php:190
#: includes/class-shieldforge-admin-intros.php:135
#: includes/class-shieldforge-admin-intros.php:191
#: includes/class-shieldforge-admin-intros.php:211
msgid "When"
msgstr ""

#: admin/views/page-audit.php:194
#: includes/class-shieldforge-admin-intros.php:192
msgid "Who"
msgstr ""

#: admin/views/page-audit.php:195
#: admin/views/page-logs.php:76
#: admin/views/page-scanner.php:371
#: admin/views/page-tools.php:111
#: includes/class-shieldforge-admin-intros.php:115
#: includes/class-shieldforge-admin-intros.php:193
msgid "Action"
msgstr ""

#: admin/views/page-audit.php:196
#: includes/class-shieldforge-admin-intros.php:194
msgid "What"
msgstr ""

#: admin/views/page-audit.php:217
msgid "Previous"
msgstr ""

#: admin/views/page-audit.php:220
msgid "Next"
msgstr ""

#. translators: %d: page number
#: admin/views/page-audit.php:224
#, php-format
msgid "Page %d"
msgstr ""

#: admin/views/page-audit.php:231
msgid "Audit settings"
msgstr ""

#: admin/views/page-audit.php:243
msgid "Enable audit log"
msgstr ""

#: admin/views/page-audit.php:247
msgid "Master toggle. Off = no audit hooks register at all (zero overhead)."
msgstr ""

#: admin/views/page-audit.php:252
msgid "Track post changes"
msgstr ""

#: admin/views/page-audit.php:256
msgid "post_updated, wp_trash_post, before_delete_post (skips revisions, auto-drafts, nav-menu-items)"
msgstr ""

#: admin/views/page-audit.php:261
msgid "Track user changes"
msgstr ""

#: admin/views/page-audit.php:265
msgid "profile_update, deleted_user (logouts always logged)"
msgstr ""

#: admin/views/page-audit.php:270
msgid "Track option changes"
msgstr ""

#: admin/views/page-audit.php:274
msgid "Whitelist of security-sensitive keys: siteurl, home, admin_email, users_can_register, default_role, blogname, registration (network), site_admins (network)."
msgstr ""

#: admin/views/page-audit.php:279
msgid "Track updates"
msgstr ""

#: admin/views/page-audit.php:283
msgid "Plugin / theme / core updates via the WordPress updater."
msgstr ""

#: admin/views/page-dashboard.php:29
msgid "All systems calm"
msgstr ""

#: admin/views/page-dashboard.php:30
msgid "Slightly elevated activity"
msgstr ""

#: admin/views/page-dashboard.php:31
msgid "High threat level — review now"
msgstr ""

#: admin/views/page-dashboard.php:32
msgid "CRITICAL — investigate immediately"
msgstr ""

#: admin/views/page-dashboard.php:77
msgid "Login Logging"
msgstr ""

#: admin/views/page-dashboard.php:78
#: admin/views/page-login.php:36
msgid "Brute-Force Protection"
msgstr ""

#: admin/views/page-dashboard.php:80
msgid "404 Probing Tracking"
msgstr ""

#: admin/views/page-dashboard.php:81
msgid "Email Notifications"
msgstr ""

#: admin/views/page-dashboard.php:82
msgid "Daily Digest"
msgstr ""

#: admin/views/page-dashboard.php:83
msgid "IP Anonymization (GDPR)"
msgstr ""

#: admin/views/page-dashboard.php:84
msgid "Anomaly Detection"
msgstr ""

#: admin/views/page-dashboard.php:95
msgid "/ 100"
msgstr ""

#. translators: 1: failed-login count 24h, 2: lockouts, 3: distinct-attacker-IPs
#: admin/views/page-dashboard.php:106
#, php-format
msgid "Last 24h: %1$d failed logins, %2$d lockouts, %3$d distinct attacker IPs."
msgstr ""

#. translators: %d: action item count
#: admin/views/page-dashboard.php:122
#, php-format
msgid "%d thing needs your attention"
msgid_plural "%d things need your attention"
msgstr[0] ""
msgstr[1] ""

#: admin/views/page-dashboard.php:138
msgid "✓ No outstanding action items. Everything that should be on is on, and no recent activity is noisy enough to act on."
msgstr ""

#: admin/views/page-dashboard.php:146
msgid "Last 24 hours"
msgstr ""

#: admin/views/page-dashboard.php:150
msgid "Successful logins"
msgstr ""

#: admin/views/page-dashboard.php:154
#: admin/views/page-multisite.php:41
#: admin/views/page-multisite.php:57
msgid "Failed logins"
msgstr ""

#: admin/views/page-dashboard.php:161
msgid "Lockouts triggered"
msgstr ""

#: admin/views/page-dashboard.php:165
msgid "Probing 404s"
msgstr ""

#: admin/views/page-dashboard.php:171
msgid "Module status"
msgstr ""

#: admin/views/page-dashboard.php:176
msgid "On"
msgstr ""

#: admin/views/page-dashboard.php:176
#: admin/views/page-threat-network.php:911
msgid "Off"
msgstr ""

#: admin/views/page-dashboard.php:185
msgid "Top attacker IPs (24h)"
msgstr ""

#: admin/views/page-dashboard.php:187
msgid "Quiet day — nothing to flag."
msgstr ""

#: admin/views/page-dashboard.php:192
msgid "Hits"
msgstr ""

#: admin/views/page-dashboard.php:207
msgid "Plugin language"
msgstr ""

#: admin/views/page-dashboard.php:209
msgid "Language of the Brainwerk Security Suite admin pages. \"WordPress default\" follows your site / profile language; picking a language overrides it for this plugin only."
msgstr ""

#: admin/views/page-dashboard.php:222
msgid "Apply"
msgstr ""

#: admin/views/page-dashboard.php:227
#: admin/views/page-firewall.php:31
msgid "Active blocks"
msgstr ""

#: admin/views/page-dashboard.php:229
msgid "No IPs are currently blocked."
msgstr ""

#: admin/views/page-dashboard.php:234
#: admin/views/page-firewall.php:44
#: admin/views/page-firewall.php:82
#: includes/class-shieldforge-admin-intros.php:113
msgid "Reason"
msgstr ""

#: admin/views/page-dashboard.php:235
msgid "Until"
msgstr ""

#: admin/views/page-firewall.php:20
#, php-format
msgid "IP %s blocked for %d minutes."
msgstr ""

#: admin/views/page-firewall.php:35
msgid "No active IP blocks."
msgstr ""

#: admin/views/page-firewall.php:36
msgid "Either nobody has tripped your brute-force threshold, or every block has expired. The Logs tab shows historic blocks with one-click \"Block this IP again\" actions if you need them."
msgstr ""

#: admin/views/page-firewall.php:37
msgid "Open Logs"
msgstr ""

#: admin/views/page-firewall.php:45
msgid "Until (UTC)"
msgstr ""

#: admin/views/page-firewall.php:46
#: admin/views/page-scanner.php:194
#: includes/class-shieldforge-admin-intros.php:139
#: includes/class-shieldforge-admin-intros.php:217
msgid "Actions"
msgstr ""

#: admin/views/page-firewall.php:57
msgid "Unblock"
msgstr ""

#: admin/views/page-firewall.php:68
msgid "Add manual block"
msgstr ""

#: admin/views/page-firewall.php:74
msgid "IP address"
msgstr ""

#: admin/views/page-firewall.php:78
msgid "Minutes"
msgstr ""

#: admin/views/page-firewall.php:87
msgid "Block IP"
msgstr ""

#: admin/views/page-firewall.php:93
msgid "Crawler & traffic rate limiting"
msgstr ""

#: admin/views/page-firewall.php:95
msgid "Throttles anonymous clients that exceed a requests-per-minute budget (HTTP 429; repeated offenders are banned). Genuine search engines (Google, Bing, Apple, Yandex, Baidu) are verified via reverse DNS and never throttled — clients faking a search-engine identity can be blocked outright. Logged-in users and whitelisted IPs are always exempt."
msgstr ""

#: admin/views/page-firewall.php:105
msgid "Enable rate limiting"
msgstr ""

#: admin/views/page-firewall.php:109
msgid "Count anonymous front-end requests per IP and throttle clients above the limits"
msgstr ""

#: admin/views/page-firewall.php:111
msgid "Counters live in short-lived transients keyed by an IP hash — no plain-text IPs, no extra tables. On high-traffic sites a persistent object cache is recommended."
msgstr ""

#: admin/views/page-firewall.php:115
msgid "Limit for visitors (requests/min)"
msgstr ""

#: admin/views/page-firewall.php:118
msgid "A human barely exceeds 60 page views per minute; 240 leaves generous headroom for prefetching and asset-generating plugins."
msgstr ""

#: admin/views/page-firewall.php:122
msgid "Limit for crawlers (requests/min)"
msgstr ""

#: admin/views/page-firewall.php:125
msgid "Applies to clients whose user agent identifies as a bot/crawler/script. Verified search engines are exempt."
msgstr ""

#: admin/views/page-firewall.php:129
msgid "Ban duration (minutes)"
msgstr ""

#: admin/views/page-firewall.php:132
msgid "Applied after 3 limit violations within 15 minutes. The ban also appears under \"Active blocks\" above."
msgstr ""

#: admin/views/page-firewall.php:136
msgid "Search-engine verification"
msgstr ""

#: admin/views/page-firewall.php:140
msgid "Verify claimed search-engine crawlers via reverse DNS (result cached for a week)"
msgstr ""

#: admin/views/page-firewall.php:145
msgid "Block clients that fake a search-engine identity (403 + IP block)"
msgstr ""

#: admin/views/page-firewall.php:151
msgid "Save rate limiting"
msgstr ""

#: admin/views/page-firewall.php:157
msgid "Whitelist (CIDR or single IP, one per line)"
msgstr ""

#: admin/views/page-firewall.php:166
msgid "Save whitelist"
msgstr ""

#: admin/views/page-hardening-plus.php:38
msgid "\"Secured by\" footer badge"
msgstr ""

#: admin/views/page-hardening-plus.php:40
msgid "Shows a small trust badge in your site footer that signals visitors the site is protected. Off by default — turn it on if you want to display it."
msgstr ""

#: admin/views/page-hardening-plus.php:48
msgid "Show footer badge"
msgstr ""

#: admin/views/page-hardening-plus.php:52
msgid "Display the badge in the front-end footer"
msgstr ""

#: admin/views/page-hardening-plus.php:55
#: admin/views/page-hardening-plus.php:110
msgid "Preview:"
msgstr ""

#. translators: %s: product/brand name, e.g. "Brainwerk Security Suite"
#: admin/views/page-hardening-plus.php:59
#: includes/class-shieldforge-badge.php:48
#, php-format
msgid "Secured by %s"
msgstr ""

#: admin/views/page-hardening-plus.php:62
msgid "The badge links to brainwerk.at and shows \"… Pro\" automatically on Pro installs. With Pro whitelabel active, the brand name follows your custom brand."
msgstr ""

#: admin/views/page-hardening-plus.php:74
#: includes/class-shieldforge-admin-intros.php:89
msgid "Custom login URL"
msgstr ""

#: admin/views/page-hardening-plus.php:76
msgid "Rewrite wp-login.php to a custom path. Cuts ~90% of brute-force bot traffic at the door — they all hit /wp-login.php blindly. Direct access to /wp-login.php returns a 404 instead."
msgstr ""

#: admin/views/page-hardening-plus.php:79
msgid "Lockout-recovery:"
msgstr ""

#: admin/views/page-hardening-plus.php:80
msgid "If you forget your slug, add this to wp-config.php and visit /wp-login.php?shieldforge_rescue=YOUR_TOKEN to bypass:"
msgstr ""

#: admin/views/page-hardening-plus.php:92
msgid "Enable custom login URL"
msgstr ""

#: admin/views/page-hardening-plus.php:96
msgid "Off by default — set the slug below first, then enable."
msgstr ""

#: admin/views/page-hardening-plus.php:101
msgid "Slug"
msgstr ""

#: admin/views/page-hardening-plus.php:107
msgid "Letters, numbers, dash, underscore. Avoid common words (admin, login, secure). Example: kogi-portal, schul-zugang."
msgstr ""

#: admin/views/page-hardening-plus.php:122
#: includes/class-shieldforge-admin-intros.php:91
msgid "Honeypot anti-bot"
msgstr ""

#: admin/views/page-hardening-plus.php:124
msgid "Adds a hidden field to login/register/comment forms. Bots fill every visible field — submissions with the hidden field non-empty are blocked. 100% local, no reCAPTCHA, no Google data transfer."
msgstr ""

#: admin/views/page-hardening-plus.php:136
msgid "Master toggle"
msgstr ""

#: admin/views/page-hardening-plus.php:140
msgid "Enable honeypot anti-bot."
msgstr ""

#: admin/views/page-hardening-plus.php:145
msgid "Surfaces"
msgstr ""

#: admin/views/page-hardening-plus.php:149
msgid "Login + lost-password form"
msgstr ""

#: admin/views/page-hardening-plus.php:153
msgid "Registration form"
msgstr ""

#: admin/views/page-hardening-plus.php:157
msgid "Comment form"
msgstr ""

#: admin/views/page-hardening-plus.php:169
msgid "Security HTTP headers"
msgstr ""

#: admin/views/page-hardening-plus.php:171
msgid "Per-header toggles. Each header is set only if your server (nginx/Apache) doesn't already send it — we never override a stricter policy."
msgstr ""

#: admin/views/page-hardening-plus.php:189
msgid "block MIME-sniff attacks"
msgstr ""

#: admin/views/page-hardening-plus.php:197
msgid "block clickjacking"
msgstr ""

#: admin/views/page-hardening-plus.php:213
msgid "disable geolocation, microphone, camera by default"
msgstr ""

#: admin/views/page-hardening-plus.php:221
msgid "force HTTPS for 1 year (HTTPS-only)"
msgstr ""

#: admin/views/page-hardening-plus.php:229
msgid "Enable CSP (off by default — wrong policy can break a site)"
msgstr ""

#: admin/views/page-hardening-plus.php:234
msgid "Report-Only mode (logs violations but does not enforce — recommended for testing)"
msgstr ""

#: admin/views/page-hardening-plus.php:239
msgid "Default policy is permissive enough for most WordPress + page-builder sites. Tighten gradually with Report-Only mode on, watching browser-console violations."
msgstr ""

#: admin/views/page-hardening.php:14
msgid "Disable XML-RPC"
msgstr ""

#: admin/views/page-hardening.php:15
msgid "Closes a common attack surface used by amplification and brute-force bots. Disable only if Jetpack/legacy app login is required."
msgstr ""

#: admin/views/page-hardening.php:18
msgid "Disable file editor in admin"
msgstr ""

#: admin/views/page-hardening.php:19
msgid "Sets DISALLOW_FILE_EDIT — prevents attackers with a stolen admin account from injecting code via the theme/plugin editor."
msgstr ""

#: admin/views/page-hardening.php:22
msgid "Hide WordPress version"
msgstr ""

#: admin/views/page-hardening.php:23
msgid "Removes the generator meta tag and version from RSS to make automated CVE scans harder."
msgstr ""

#: admin/views/page-hardening.php:26
msgid "Block author enumeration"
msgstr ""

#: admin/views/page-hardening.php:27
msgid "Stops \"?author=1\" tricks and removes /wp-json/wp/v2/users for anonymous users — both leak usernames."
msgstr ""

#: admin/views/page-hardening.php:30
msgid "Send security headers"
msgstr ""

#: admin/views/page-hardening.php:31
msgid "Adds X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy, and HSTS (when on HTTPS)."
msgstr ""

#: admin/views/page-hardening.php:34
msgid "Restrict REST API for anonymous users"
msgstr ""

#: admin/views/page-hardening.php:35
msgid "Blocks anonymous access to /wp-json/wp/v2/users, which often leaks usernames."
msgstr ""

#: admin/views/page-hardening.php:47
msgid "Hardening Toggles"
msgstr ""

#: admin/views/page-hardening.php:62
#: admin/views/page-incident.php:50
#: admin/views/page-login.php:119
#: admin/views/page-notifications.php:62
#: admin/views/page-privacy.php:63
msgid "Save changes"
msgstr ""

#: admin/views/page-incident.php:20
msgid "Forensische Triage, Beweissicherung, gestufter Lockdown und deutschsprachiger Vorfalls-Report nach Anzeichen einer Kompromittierung. Das Modul erkennt, sichert, sperrt und meldet — es bereinigt NICHT selbsttätig (human-gated)."
msgstr ""

#: admin/views/page-incident.php:23
msgid "Status:"
msgstr ""

#: admin/views/page-incident.php:24
msgid "Modul-Gerüst aktiv (Phase 0). Automatische Auslöser, Engine und Lockdown folgen in den nächsten Phasen."
msgstr ""

#: admin/views/page-incident.php:27
msgid "Offene Vorfälle:"
msgstr ""

#: admin/views/page-incident.php:40
msgid "Automatische Reaktion"
msgstr ""

#: admin/views/page-incident.php:43
msgid "Incident-Erkennung &amp; automatische Reaktion aktivieren"
msgstr ""

#: admin/views/page-incident.php:46
msgid "Default AUS. Wenn aktiviert, korreliert ShieldForge Kompromittierungs-Indikatoren und kann (in späteren Phasen) gestuft in einen gesicherten Zustand fallen — immer mit garantiertem Recovery-Pfad. Der manuelle Audit unten funktioniert unabhängig von dieser Einstellung."
msgstr ""

#: admin/views/page-incident.php:54
msgid "Manueller Notfall-Audit"
msgstr ""

#: admin/views/page-incident.php:56
msgid "Startet eine read-only forensische Triage der Instanz (Datei-/DB-Integrität, Persistenz-Orte, Korrelation mit den Angriffs-Logs). In Phase 0 ist dies ein Gerüst-Button — es wird nichts gescannt oder verändert."
msgstr ""

#: admin/views/page-incident.php:63
msgid "Notfall-Audit starten"
msgstr ""

#: admin/views/page-incident.php:69
msgid "Vorfälle"
msgstr ""

#: admin/views/page-incident.php:71
msgid "Keine Vorfälle erfasst."
msgstr ""

#: admin/views/page-incident.php:76
#: admin/views/page-modules.php:73
#: admin/views/page-modules.php:158
msgid "Zeit"
msgstr ""

#: admin/views/page-incident.php:77
msgid "Konfidenz"
msgstr ""

#: admin/views/page-incident.php:78
#: admin/views/page-modules.php:73
#: admin/views/page-tools.php:55
#: admin/views/page-twofactor.php:125
msgid "Status"
msgstr ""

#: admin/views/page-incident.php:79
msgid "Auslöser"
msgstr ""

#: admin/views/page-incident.php:80
msgid "Zusammenfassung"
msgstr ""

#: admin/views/page-license.php:26
#: admin/views/partials/upgrade-hint.php:28
msgid "Pro"
msgstr ""

#: admin/views/page-license.php:28
msgid "Free"
msgstr ""

#: admin/views/page-license.php:34
msgid "SHIELDFORGE_FORCE_PRO override is active."
msgstr ""

#: admin/views/page-license.php:35
msgid "Pro features are unlocked locally without a license check. Remove the constant from wp-config.php to switch back to the standard licensing flow."
msgstr ""

#: admin/views/page-license.php:39
msgid "Brainwerk Security Suite Pro is active on this site."
msgstr ""

#: admin/views/page-license.php:42
#, php-format
msgid "Manage your subscription and download future updates at %s."
msgstr ""

#: admin/views/page-license.php:49
msgid "Brainwerk Security Suite is fully functional on the free tier. Upgrade to Pro to unlock 2FA-Passkeys, Geo-Blocking, Cloud Threat Intel, multisite aggregate dashboards, AI-assisted incident analysis (BYOK or self-hosted), Slack/Discord/Telegram/Teams notifications, and white-label mode."
msgstr ""

#: admin/views/page-license.php:53
msgid "View Pro plans →"
msgstr ""

#: admin/views/page-license.php:56
msgid "Documentation"
msgstr ""

#: admin/views/page-license.php:60
msgid "After purchase you will receive the Brainwerk Security Suite Pro plugin (.zip) plus a license key. Install the Pro plugin alongside this free one — activation happens inside the Pro plugin."
msgstr ""

#: admin/views/page-license.php:66
msgid "Pro features"
msgstr ""

#: admin/views/page-license.php:68
msgid "WebAuthn / Passkeys"
msgstr ""

#: admin/views/page-license.php:68
msgid "phishing-resistant login with hardware keys, Face ID, Touch ID, Windows Hello."
msgstr ""

#: admin/views/page-license.php:69
msgid "Geo-IP blocking"
msgstr ""

#: admin/views/page-license.php:69
msgid "country allow/deny lists on login, register, comment, REST."
msgstr ""

#: admin/views/page-license.php:70
msgid "Cloud Threat Intel"
msgstr ""

#: admin/views/page-license.php:70
msgid "Spamhaus DROP synced daily, EU-hosted relay."
msgstr ""

#: admin/views/page-license.php:71
msgid "AI Backend (BYOK or self-hosted)"
msgstr ""

#: admin/views/page-license.php:71
msgid "Mistral (EU) or local Ollama analyse flagged security events on demand. No data leaves your stack unless you opt in."
msgstr ""

#: admin/views/page-license.php:72
msgid "Slack / Discord / Telegram / Teams"
msgstr ""

#: admin/views/page-license.php:72
msgid "real-time channel notifications for incidents and digest reports."
msgstr ""

#: admin/views/page-license.php:73
msgid "Multisite aggregate dashboard"
msgstr ""

#: admin/views/page-license.php:73
msgid "cross-site attacker view, per-site threat scores, network-wide 2FA coverage."
msgstr ""

#: admin/views/page-license.php:74
msgid "White-label mode"
msgstr ""

#: admin/views/page-license.php:74
msgid "rebrand the plugin in admin for client installs."
msgstr ""

#: admin/views/page-login.php:26
msgid "Login Activity Logging"
msgstr ""

#: admin/views/page-login.php:30
msgid "Log every login attempt (success and failure)"
msgstr ""

#: admin/views/page-login.php:32
msgid "Stored in the database, respects the IP-anonymization setting under Privacy."
msgstr ""

#: admin/views/page-login.php:40
msgid "Block IPs after too many failed logins"
msgstr ""

#: admin/views/page-login.php:45
msgid "Failure threshold"
msgstr ""

#: admin/views/page-login.php:50
msgid "Number of failed logins from the same IP that triggers a block."
msgstr ""

#: admin/views/page-login.php:54
#: admin/views/page-login.php:101
msgid "Window (minutes)"
msgstr ""

#: admin/views/page-login.php:62
#: admin/views/page-login.php:109
msgid "Lockout duration (minutes)"
msgstr ""

#: admin/views/page-login.php:70
msgid "IP whitelist"
msgstr ""

#: admin/views/page-login.php:75
msgid "One IP or CIDR per line. These addresses are never blocked."
msgstr ""

#: admin/views/page-login.php:82
msgid "Account-based Lockout"
msgstr ""

#: admin/views/page-login.php:83
msgid "IP-based protection above blocks one source. This rule blocks one ACCOUNT regardless of source IP — defense against credential-stuffing botnets that rotate addresses."
msgstr ""

#: admin/views/page-login.php:87
msgid "Lock individual accounts after too many failed logins"
msgstr ""

#: admin/views/page-login.php:92
msgid "Failure threshold (per account)"
msgstr ""

#: admin/views/page-login.php:97
msgid "Total failed attempts on the same username (across all IPs) before the account is locked."
msgstr ""

#: admin/views/page-logs.php:37
msgid "Event log"
msgstr ""

#: admin/views/page-logs.php:43
msgid "Event type"
msgstr ""

#: admin/views/page-logs.php:50
msgid "Filter"
msgstr ""

#: admin/views/page-logs.php:51
msgid "Reset"
msgstr ""

#: admin/views/page-logs.php:55
#, php-format
msgid "%1$s entries · page %2$s of %3$s"
msgstr ""

#: admin/views/page-logs.php:65
msgid "No events match the current filters."
msgstr ""

#: admin/views/page-logs.php:71
#: includes/class-shieldforge-admin-intros.php:212
msgid "Event"
msgstr ""

#: admin/views/page-logs.php:72
msgid "Sev."
msgstr ""

#: admin/views/page-logs.php:75
msgid "Request"
msgstr ""

#: admin/views/page-logs.php:93
msgid "Block 60m"
msgstr ""

#: admin/views/page-logs.php:112
msgid "« Prev"
msgstr ""

#: admin/views/page-logs.php:113
msgid "Next »"
msgstr ""

#: admin/views/page-modules.php:13
msgid "Einstellungen gespeichert."
msgstr ""

#: admin/views/page-modules.php:17
msgid "Export-Anfrage versendet — User bekommt Bestätigungsmail mit Download-Link."
msgstr ""

#: admin/views/page-modules.php:17
msgid "Lösch-Anfrage versendet — User bekommt Bestätigungsmail."
msgstr ""

#: admin/views/page-modules.php:31
msgid "9 zusätzliche Module für Defense-in-Depth. Alle standardmäßig OFF. Per Toggle einzeln scharf schalten."
msgstr ""

#: admin/views/page-modules.php:37
msgid "HTTP-Security-Headers"
msgstr ""

#: admin/views/page-modules.php:37
#: admin/views/page-modules.php:51
#: admin/views/page-modules.php:58
#: admin/views/page-modules.php:65
#: admin/views/page-modules.php:102
#: admin/views/page-modules.php:118
#: admin/views/page-modules.php:125
msgid "AN"
msgstr ""

#: admin/views/page-modules.php:37
#: admin/views/page-modules.php:51
#: admin/views/page-modules.php:58
#: admin/views/page-modules.php:65
#: admin/views/page-modules.php:102
#: admin/views/page-modules.php:118
#: admin/views/page-modules.php:125
msgid "AUS"
msgstr ""

#: admin/views/page-modules.php:38
msgid "Sendet OWASP-empfohlene Response-Header: X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, HSTS, COOP, CORP. Empfohlen: alle an."
msgstr ""

#: admin/views/page-modules.php:39
#: admin/views/page-modules.php:60
#: admin/views/page-modules.php:67
#: admin/views/page-modules.php:104
msgid "Modul aktiv"
msgstr ""

#: admin/views/page-modules.php:40
msgid "X-Frame-Options: SAMEORIGIN (Clickjacking-Schutz)"
msgstr ""

#: admin/views/page-modules.php:41
msgid "X-Content-Type-Options: nosniff (MIME-Sniffing)"
msgstr ""

#: admin/views/page-modules.php:42
msgid "Referrer-Policy: strict-origin-when-cross-origin"
msgstr ""

#: admin/views/page-modules.php:43
msgid "Permissions-Policy (Kamera/Mikro/GPS deny)"
msgstr ""

#: admin/views/page-modules.php:44
msgid "Strict-Transport-Security (nur HTTPS)"
msgstr ""

#: admin/views/page-modules.php:45
msgid "Cross-Origin-Opener-Policy: same-origin"
msgstr ""

#: admin/views/page-modules.php:46
msgid "Cross-Origin-Resource-Policy: same-site"
msgstr ""

#: admin/views/page-modules.php:51
msgid "HaveIBeenPwned-Passwort-Check"
msgstr ""

#: admin/views/page-modules.php:52
msgid "Prüft neue Passwörter gegen ~12 Mrd. geleakte Passwörter. <strong>Privacy via k-Anonymity</strong>: nur SHA1-Präfix wird gesendet — HIBP sieht NIE das echte Passwort."
msgstr ""

#: admin/views/page-modules.php:53
msgid "<strong>Modul aktiv</strong> — User mit kompromittiertem Passwort werden zur Änderung gezwungen"
msgstr ""

#: admin/views/page-modules.php:58
msgid "Trusted Devices"
msgstr ""

#: admin/views/page-modules.php:59
msgid "Fingerprint = SHA256(UA + IP-Subnet + Accept-Language). Bei Login von <strong>neuem Gerät</strong>: Mail-Benachrichtigung an User (Account-Takeover-Frühwarnung). Max 20 Devices/User."
msgstr ""

#: admin/views/page-modules.php:65
msgid "Live Traffic Monitor"
msgstr ""

#: admin/views/page-modules.php:66
msgid "Speichert letzte 1000 „interessante\" Requests (Login, POST, Admin, AJAX, XML-RPC) für Forensik. Ring-Buffer — auto-cleanup."
msgstr ""

#: admin/views/page-modules.php:71
msgid "Letzte 10 Requests anzeigen"
msgstr ""

#: admin/views/page-modules.php:73
msgid "Method"
msgstr ""

#: admin/views/page-modules.php:73
#: admin/views/page-modules.php:158
msgid "Pfad"
msgstr ""

#: admin/views/page-modules.php:92
msgid "Core-File-Compare"
msgstr ""

#: admin/views/page-modules.php:92
msgid "aktiv (manual)"
msgstr ""

#: admin/views/page-modules.php:93
msgid "Vergleicht alle WordPress-Core-Files (wp-admin/, wp-includes/) gegen das offizielle MD5-Manifest von wordpress.org. Findet modifizierte / fehlende / extra Files. <strong>Datenschutz</strong>: kein Upload, alles lokal."
msgstr ""

#: admin/views/page-modules.php:95
msgid "Jetzt Core-Files prüfen"
msgstr ""

#: admin/views/page-modules.php:102
msgid "CAPTCHA (hCaptcha / Turnstile)"
msgstr ""

#: admin/views/page-modules.php:103
msgid "<strong>Privacy-First:</strong> hCaptcha (EU-friendly) ODER Cloudflare Turnstile (kein Cookie) statt Google reCAPTCHA. Auf Login/Register/Lost-Password."
msgstr ""

#: admin/views/page-modules.php:105
msgid "Provider:"
msgstr ""

#: admin/views/page-modules.php:107
msgid "hCaptcha (Empfehlung — EU)"
msgstr ""

#: admin/views/page-modules.php:108
msgid "Cloudflare Turnstile"
msgstr ""

#: admin/views/page-modules.php:111
msgid "Site-Key:"
msgstr ""

#: admin/views/page-modules.php:112
msgid "Secret-Key:"
msgstr ""

#: admin/views/page-modules.php:113
msgid "Site-Key + Secret-Key holen: <a href=\"https://www.hcaptcha.com/\" target=\"_blank\" rel=\"noopener\">hCaptcha.com</a> (gratis) oder <a href=\"https://www.cloudflare.com/products/turnstile/\" target=\"_blank\" rel=\"noopener\">Cloudflare Turnstile</a>."
msgstr ""

#: admin/views/page-modules.php:118
msgid "Magic Login Links"
msgstr ""

#: admin/views/page-modules.php:119
msgid "Passwordless Login via E-Mail. User klickt „Magic-Link\" am wp-login.php → bekommt 15-Min-gültigen Single-Use-Link per Mail. Rate-Limit: 3 Anforderungen/h. User-Enumeration-Schutz."
msgstr ""

#: admin/views/page-modules.php:120
msgid "<strong>Modul aktiv</strong> (Mail-Versand muss funktionieren!)"
msgstr ""

#: admin/views/page-modules.php:125
msgid "WAF — Web Application Firewall"
msgstr ""

#: admin/views/page-modules.php:126
msgid "40+ kuratierte Regex-Signaturen für SQLi, XSS, LFI, RCE, SSRF, XXE, Cmdi, WP-User-Enum, Scanner-UAs. Blockiert mit 403. <strong>Kann False-Positives erzeugen</strong> — mit Level 1 starten, Whitelist pflegen."
msgstr ""

#: admin/views/page-modules.php:127
msgid "WAF aktiv"
msgstr ""

#: admin/views/page-modules.php:128
msgid "Paranoia-Level:"
msgstr ""

#: admin/views/page-modules.php:130
msgid "1 — Low (sicher, ~95 % Treffer, <0.1 % FP) ← Empfehlung"
msgstr ""

#: admin/views/page-modules.php:131
msgid "2 — Medium (zusätzliche Heuristik)"
msgstr ""

#: admin/views/page-modules.php:132
msgid "3 — High (aggressiv, FP-Whitelist nötig)"
msgstr ""

#: admin/views/page-modules.php:135
msgid "Admins (manage_options) von WAF ausnehmen"
msgstr ""

#: admin/views/page-modules.php:136
msgid "IP bei WAF-Treffer 24h sperren (sehr aggressiv!)"
msgstr ""

#: admin/views/page-modules.php:137
msgid "Pfad-Whitelist (eine Zeile pro Pfad — z. B. <code>/anmeldung/</code>):"
msgstr ""

#: admin/views/page-modules.php:144
msgid "WAF — letzte Blocks & False-Positive-Whitelist"
msgstr ""

#: admin/views/page-modules.php:145
msgid "Hier siehst du die letzten 30 WAF-Blocks. Wenn ein eigener legitimer Pfad fälschlich geblockt wurde, klicke „Whitelisten\" — der Pfad wird in <code>waf_path_whitelist</code> aufgenommen und beim nächsten Aufruf nicht mehr geprüft."
msgstr ""

#: admin/views/page-modules.php:155
msgid "Keine WAF-Blocks bisher — entweder keine Angriffe oder WAF nicht lange genug aktiv."
msgstr ""

#: admin/views/page-modules.php:158
msgid "Regel"
msgstr ""

#: admin/views/page-modules.php:158
msgid "Aktion"
msgstr ""

#: admin/views/page-modules.php:173
msgid "schon whitelisted"
msgstr ""

#: admin/views/page-modules.php:179
msgid "Diesen Pfad zur WAF-Whitelist hinzufügen"
msgstr ""

#: admin/views/page-modules.php:179
msgid "Whitelisten"
msgstr ""

#: admin/views/page-modules.php:188
msgid "Aktuelle Whitelist:"
msgstr ""

#: admin/views/page-modules.php:195
msgid "DSGVO-Privacy-Dashboard"
msgstr ""

#: admin/views/page-modules.php:195
msgid "immer aktiv"
msgstr ""

#: admin/views/page-modules.php:196
msgid "Datenkarte + DSGVO-Art.-15-Auskunft + Art.-17-Löschung in einem Klick."
msgstr ""

#: admin/views/page-modules.php:200
msgid "Datenkarte — wo werden welche personenbezogenen Daten gespeichert?"
msgstr ""

#: admin/views/page-modules.php:202
msgid "Kategorie"
msgstr ""

#: admin/views/page-modules.php:202
msgid "Tabelle"
msgstr ""

#: admin/views/page-modules.php:202
msgid "Felder"
msgstr ""

#: admin/views/page-modules.php:202
msgid "Zeilen"
msgstr ""

#: admin/views/page-modules.php:202
msgid "Rechtsgrundlage"
msgstr ""

#: admin/views/page-modules.php:220
msgid "DSGVO Art. 15 — Auskunft"
msgstr ""

#: admin/views/page-modules.php:221
msgid "Schickt eine Bestätigungsmail an die angegebene Adresse. Nach Bestätigung kann der User alle zu ihm gespeicherten Daten herunterladen (WP-Core-Mechanik)."
msgstr ""

#: admin/views/page-modules.php:225
#: admin/views/page-modules.php:235
msgid "user@example.com"
msgstr ""

#: admin/views/page-modules.php:226
msgid "Anfrage starten"
msgstr ""

#: admin/views/page-modules.php:230
msgid "DSGVO Art. 17 — Löschung"
msgstr ""

#: admin/views/page-modules.php:231
msgid "Startet Lösch-Workflow für alle Daten dieser E-Mail. User bekommt Bestätigungsmail zur Authorisierung."
msgstr ""

#: admin/views/page-modules.php:236
msgid "Löschen starten"
msgstr ""

#: admin/views/page-modules.php:245
msgid "Alle Modul-Einstellungen speichern"
msgstr ""

#: admin/views/page-modules.php:256
msgid "Läuft… (kann 10-30 Sekunden dauern)"
msgstr ""

#: admin/views/page-modules.php:257
msgid "Fehler:"
msgstr ""

#: admin/views/page-modules.php:258
msgid "unbekannt"
msgstr ""

#: admin/views/page-modules.php:259
#, php-format
msgid "✓ Alle %d Core-Files unverändert"
msgstr ""

#: admin/views/page-modules.php:260
#, php-format
msgid "⚠ %d Auffälligkeiten:"
msgstr ""

#: admin/views/page-modules.php:261
#, php-format
msgid "%d modifizierte Files"
msgstr ""

#: admin/views/page-modules.php:262
#, php-format
msgid "%d fehlende Files"
msgstr ""

#: admin/views/page-modules.php:263
#, php-format
msgid "%d extra Files (verdächtig!)"
msgstr ""

#: admin/views/page-multisite.php:17
msgid "This installation is not a Multisite network. The Multisite features (per-site stats, network-wide blocks, per-site overrides) are unavailable."
msgstr ""

#: admin/views/page-multisite.php:29
#, php-format
msgid "Override cleared for site #%d."
msgstr ""

#: admin/views/page-multisite.php:38
msgid "Network totals (last 24 h)"
msgstr ""

#: admin/views/page-multisite.php:40
msgid "Sites"
msgstr ""

#: admin/views/page-multisite.php:43
#: admin/views/page-multisite.php:59
msgid "404 probes"
msgstr ""

#: admin/views/page-multisite.php:48
msgid "Per-site activity"
msgstr ""

#: admin/views/page-multisite.php:50
msgid "No sites found."
msgstr ""

#: admin/views/page-multisite.php:56
msgid "Site"
msgstr ""

#: admin/views/page-multisite.php:60
msgid "Override"
msgstr ""

#: admin/views/page-multisite.php:76
msgid "Clear override and revert to network defaults?"
msgstr ""

#: admin/views/page-multisite.php:80
msgid "Clear"
msgstr ""

#: admin/views/page-notifications.php:26
msgid "Email notifications"
msgstr ""

#: admin/views/page-notifications.php:30
msgid "Send email alerts on critical events"
msgstr ""

#: admin/views/page-notifications.php:35
msgid "Recipient"
msgstr ""

#: admin/views/page-notifications.php:42
msgid "Quiet hours"
msgstr ""

#: admin/views/page-notifications.php:47
msgid "During these hours only critical alerts are sent. Daily digest is unaffected."
msgstr ""

#: admin/views/page-notifications.php:54
#: includes/class-shieldforge-admin-intros.php:227
msgid "Daily digest"
msgstr ""

#: admin/views/page-notifications.php:58
msgid "Send a daily summary email at 07:00"
msgstr ""

#: admin/views/page-privacy.php:24
msgid "Privacy controls (GDPR)"
msgstr ""

#: admin/views/page-privacy.php:29
msgid "Anonymize IP addresses in stored logs"
msgstr ""

#: admin/views/page-privacy.php:31
msgid "IPv4: last octet zeroed. IPv6: kept to /64. Original IPs are never written when this is on."
msgstr ""

#: admin/views/page-privacy.php:36
msgid "Pseudonymize usernames in logs"
msgstr ""

#: admin/views/page-privacy.php:38
msgid "Stores a salted HMAC instead of the username — useful for shared environments."
msgstr ""

#: admin/views/page-privacy.php:42
msgid "Log retention (days)"
msgstr ""

#: admin/views/page-privacy.php:47
msgid "Older events are deleted automatically by a daily cron job."
msgstr ""

#: admin/views/page-privacy.php:54
msgid "Data map"
msgstr ""

#: admin/views/page-privacy.php:55
msgid "Brainwerk Security Suite stores the following data locally — nothing is transmitted to any third-party service in the free version."
msgstr ""

#: admin/views/page-privacy.php:57
msgid "Login attempts, hardening blocks, probing 404s, role changes. IPs anonymized when enabled. Auto-deleted after retention period."
msgstr ""

#: admin/views/page-privacy.php:58
msgid "Currently blocked IPs (raw IP required to enforce blocking). Auto-removed when block expires."
msgstr ""

#: admin/views/page-privacy.php:59
msgid "Per-user statistical baseline for anomaly detection (login times, network ranges)."
msgstr ""

#: admin/views/page-privacy.php:73
msgid "Privacy-policy snippet"
msgstr ""

#: admin/views/page-privacy.php:75
msgid "Copy this snippet into your privacy policy. It reflects the current Brainwerk Security Suite settings."
msgstr ""

#: admin/views/page-privacy.php:80
msgid "Copy"
msgstr ""

#: admin/views/page-privacy.php:84
msgid "Rendered preview"
msgstr ""

#: admin/views/page-scanner.php:17
msgid "critical"
msgstr ""

#: admin/views/page-scanner.php:18
msgid "high"
msgstr ""

#: admin/views/page-scanner.php:19
msgid "warn"
msgstr ""

#: admin/views/page-scanner.php:20
msgid "info"
msgstr ""

#: admin/views/page-scanner.php:33
msgid "Baseline cleared. The next scheduled scan will rebuild it."
msgstr ""

#. translators: 1: hashed files this run, 2: errors, 3: finished bool
#: admin/views/page-scanner.php:40
#, php-format
msgid "Baseline run: %1$d files hashed, %2$d errors, finished: %3$s."
msgstr ""

#: admin/views/page-scanner.php:43
msgid "yes"
msgstr ""

#: admin/views/page-scanner.php:43
msgid "no (continues next cron tick)"
msgstr ""

#. translators: %1$d scanned, %2$d added, %3$d changed, %4$d missing, %5$d malware suspects
#: admin/views/page-scanner.php:50
#, php-format
msgid "Scan run: %1$d files scanned, %2$d added, %3$d changed, %4$d missing, %5$d suspicious-pattern hits."
msgstr ""

#. translators: %s: path
#: admin/views/page-scanner.php:64
#, php-format
msgid "Path whitelisted: %s"
msgstr ""

#. translators: %s: path
#: admin/views/page-scanner.php:75
#, php-format
msgid "Re-baselined: %s"
msgstr ""

#: admin/views/page-scanner.php:98
#: admin/views/page-vulnerabilities.php:43
msgid "not scheduled"
msgstr ""

#: admin/views/page-scanner.php:99
#: admin/views/page-scanner.php:100
#: admin/views/page-twofactor.php:139
#: admin/views/page-vulnerabilities.php:40
msgid "never"
msgstr ""

#. translators: 1: changed, 2: added, 3: missing, 4: malware-suspect (24h)
#: admin/views/page-scanner.php:110
#, php-format
msgid "Last 24h: %1$d changed, %2$d added, %3$d missing, %4$d suspicious patterns."
msgstr ""

#: admin/views/page-scanner.php:123
msgid "File-Integrity Monitor"
msgstr ""

#: admin/views/page-scanner.php:125
msgid "Hashes every PHP file under WordPress core, plugins, mu-plugins and themes, then re-checks them daily. Detects added, modified or deleted files and runs a suspicious-pattern scan against new and modified files."
msgstr ""

#: admin/views/page-scanner.php:126
msgid "All scanning is local — no file contents leave your server."
msgstr ""

#: admin/views/page-scanner.php:131
msgid "Tracked files"
msgstr ""

#: admin/views/page-scanner.php:132
msgid "Phase"
msgstr ""

#: admin/views/page-scanner.php:132
#, php-format
msgid "cursor at file #%d"
msgstr ""

#: admin/views/page-scanner.php:133
#: admin/views/page-vulnerabilities.php:63
msgid "Last scan"
msgstr ""

#: admin/views/page-scanner.php:134
msgid "Last baseline build"
msgstr ""

#: admin/views/page-scanner.php:135
#: admin/views/page-vulnerabilities.php:78
msgid "Next scheduled run"
msgstr ""

#: admin/views/page-scanner.php:141
msgid "Run scan now"
msgstr ""

#: admin/views/page-scanner.php:142
msgid "Rebuild baseline"
msgstr ""

#: admin/views/page-scanner.php:143
msgid "Clear the entire baseline?"
msgstr ""

#: admin/views/page-scanner.php:143
msgid "Clear baseline"
msgstr ""

#: admin/views/page-scanner.php:146
msgid "Manual runs are time-budgeted to ~45s. Long sites resume on the next cron tick."
msgstr ""

#: admin/views/page-scanner.php:151
msgid "Findings (last 7 days)"
msgstr ""

#. translators: 1: changed, 2: added, 3: missing, 4: malware-suspect
#: admin/views/page-scanner.php:156
#, php-format
msgid "%1$d changed · %2$d added · %3$d missing · %4$d suspicious patterns."
msgstr ""

#: admin/views/page-scanner.php:168
msgid "No file-integrity findings yet — that's good news."
msgstr ""

#: admin/views/page-scanner.php:170
msgid "No baseline has been built yet. The scanner needs to fingerprint every PHP file once before it can detect changes. The first scheduled scan runs at 03:30, or you can build it on demand."
msgstr ""

#: admin/views/page-scanner.php:173
msgid "Rebuild baseline now"
msgstr ""

#. translators: %s: tracked files count
#: admin/views/page-scanner.php:178
#, php-format
msgid "The baseline is in place (%s files tracked) and the daily scan has nothing unusual to report."
msgstr ""

#: admin/views/page-scanner.php:182
msgid "Re-scan now anyway"
msgstr ""

#: admin/views/page-scanner.php:191
#: includes/class-shieldforge-admin-intros.php:136
msgid "Type"
msgstr ""

#: admin/views/page-scanner.php:192
#: includes/class-shieldforge-admin-intros.php:137
msgid "Path / Detail"
msgstr ""

#: admin/views/page-scanner.php:193
#: includes/class-shieldforge-admin-intros.php:138
#: includes/class-shieldforge-admin-intros.php:213
msgid "Severity"
msgstr ""

#. translators: 1: rule id, 2: line number
#: admin/views/page-scanner.php:214
#, php-format
msgid "rule: %1$s · line %2$d"
msgstr ""

#: admin/views/page-scanner.php:225
#, php-format
msgid "size: %1$d → %2$d bytes"
msgstr ""

#: admin/views/page-scanner.php:235
msgid "Accept current state as the new baseline"
msgstr ""

#: admin/views/page-scanner.php:235
msgid "Re-baseline"
msgstr ""

#: admin/views/page-scanner.php:241
msgid "Stop alerting for this path"
msgstr ""

#: admin/views/page-scanner.php:241
msgid "Whitelist"
msgstr ""

#: admin/views/page-scanner.php:253
msgid "Scanner settings"
msgstr ""

#: admin/views/page-scanner.php:262
#: admin/views/page-vulnerabilities.php:207
msgid "Enable scanner"
msgstr ""

#: admin/views/page-scanner.php:266
msgid "Run the daily integrity scan via wp-cron."
msgstr ""

#: admin/views/page-scanner.php:271
msgid "Pattern scanner"
msgstr ""

#: admin/views/page-scanner.php:275
msgid "Also run suspicious-code pattern checks against new and modified files."
msgstr ""

#: admin/views/page-scanner.php:280
msgid "Max file size (KB)"
msgstr ""

#: admin/views/page-scanner.php:283
msgid "Files larger than this are skipped (cheap defense against accidental scanning of huge data dumps)."
msgstr ""

#: admin/views/page-scanner.php:287
msgid "Extra skip directories"
msgstr ""

#: admin/views/page-scanner.php:290
msgid "One path segment per line, relative to the WordPress root. Sensible defaults already cover uploads/, cache/, .git, node_modules and the like."
msgstr ""

#: admin/views/page-scanner.php:294
msgid "Tracked extensions"
msgstr ""

#: admin/views/page-scanner.php:297
msgid "One extension per line. Default: php, phtml, phar, inc. .htaccess and wp-config.php are always tracked."
msgstr ""

#: admin/views/page-scanner.php:316
msgid "Repo integrity — plugins & themes vs. wordpress.org"
msgstr ""

#: admin/views/page-scanner.php:318
msgid "Compares every installed plugin (official checksums API) and theme (original release ZIP) against the wordpress.org distribution. Modified, missing or extra files are reported so you can react. Packages that are not hosted on wordpress.org are listed as \"unverifiable\" and never touched."
msgstr ""

#: admin/views/page-scanner.php:321
msgid "To restore a tampered package, reinstall it the standard WordPress way — deactivate & delete it, then install the clean copy from wordpress.org (your settings are kept in the database)."
msgstr ""

#: admin/views/page-scanner.php:322
msgid "Add / reinstall plugins"
msgstr ""

#: admin/views/page-scanner.php:326
#: admin/views/page-vulnerabilities.php:84
#: admin/views/page-vulnerabilities.php:181
msgid "Scan now"
msgstr ""

#: admin/views/page-scanner.php:337
msgid "Run automatically every night (daily cron, 03:40)"
msgstr ""

#: admin/views/page-scanner.php:346
msgid "Last scan:"
msgstr ""

#. translators: 1: ok count, 2: mismatch count, 3: unverifiable count, 4: flagged file count
#: admin/views/page-scanner.php:351
#, php-format
msgid "%1$d packages clean, %2$d with deviations (%4$d files), %3$d unverifiable."
msgstr ""

#: admin/views/page-scanner.php:363
msgid "All verifiable packages match the official wordpress.org distribution."
msgstr ""

#: admin/views/page-scanner.php:368
msgid "Package"
msgstr ""

#: admin/views/page-scanner.php:369
msgid "File"
msgstr ""

#: admin/views/page-scanner.php:370
msgid "Finding"
msgstr ""

#: admin/views/page-scanner.php:377
msgid "modified"
msgstr ""

#: admin/views/page-scanner.php:378
msgid "missing"
msgstr ""

#: admin/views/page-scanner.php:379
msgid "extra file (not in official package — inspect!)"
msgstr ""

#: admin/views/page-scanner.php:387
msgid "reinstall package"
msgstr ""

#: admin/views/page-scanner.php:389
msgid "manual review"
msgstr ""

#. translators: %d: package count
#: admin/views/page-scanner.php:405
#, php-format
msgid "%d packages not verifiable (not on wordpress.org)"
msgstr ""

#: admin/views/page-scanner.php:414
msgid "No scan yet — click \"Scan now\" for the first run."
msgstr ""

#: admin/views/page-scanner.php:424
msgid "Scanning… themes are downloaded once for comparison, this can take a minute."
msgstr ""

#: admin/views/page-scanner.php:425
msgid "Scan failed."
msgstr ""

#: admin/views/page-threat-network.php:61
msgid "NIEDRIG"
msgstr ""

#: admin/views/page-threat-network.php:62
msgid "MITTEL"
msgstr ""

#: admin/views/page-threat-network.php:63
#: admin/views/page-threat-network.php:64
msgid "HOCH"
msgstr ""

#: admin/views/page-threat-network.php:81
#, php-format
msgid "aktualisiert vor %s"
msgstr ""

#: admin/views/page-threat-network.php:99
msgid "Netz-Gesamtbild derzeit nicht erreichbar — es werden lokale Daten angezeigt."
msgstr ""

#: admin/views/page-threat-network.php:102
msgid "Netz-Gesamtbild ist nur mit aktiver Teilnahme am Threat-Network verfügbar."
msgstr ""

#: admin/views/page-threat-network.php:202
msgid "steigend"
msgstr ""

#: admin/views/page-threat-network.php:203
msgid "fallend"
msgstr ""

#: admin/views/page-threat-network.php:204
msgid "stabil"
msgstr ""

#: admin/views/page-threat-network.php:222
#: admin/views/page-threat-network.php:584
#: admin/views/page-threat-network.php:749
msgid "Netz-Gesamtbild"
msgstr ""

#: admin/views/page-threat-network.php:225
#: admin/views/page-threat-network.php:583
#: admin/views/page-threat-network.php:748
msgid "Meine Site"
msgstr ""

#: admin/views/page-threat-network.php:237
msgid "SQL-Injection"
msgstr ""

#: admin/views/page-threat-network.php:238
msgid "Cross-Site-Scripting (XSS)"
msgstr ""

#: admin/views/page-threat-network.php:239
msgid "Local File Inclusion (LFI)"
msgstr ""

#: admin/views/page-threat-network.php:240
msgid "Remote Code Execution (RCE)"
msgstr ""

#: admin/views/page-threat-network.php:241
msgid "Path Traversal"
msgstr ""

#: admin/views/page-threat-network.php:242
msgid "Auth-Bypass"
msgstr ""

#: admin/views/page-threat-network.php:243
msgid "Server-Side Request Forgery (SSRF)"
msgstr ""

#: admin/views/page-threat-network.php:244
msgid "Object-Injection"
msgstr ""

#: admin/views/page-threat-network.php:245
msgid "File-Upload-Exploit"
msgstr ""

#: admin/views/page-threat-network.php:248
msgid "WPScan"
msgstr ""

#: admin/views/page-threat-network.php:249
msgid "sqlmap"
msgstr ""

#: admin/views/page-threat-network.php:250
msgid "Nuclei"
msgstr ""

#: admin/views/page-threat-network.php:251
msgid "Nikto"
msgstr ""

#: admin/views/page-threat-network.php:252
msgid "curl"
msgstr ""

#: admin/views/page-threat-network.php:253
msgid "wget"
msgstr ""

#: admin/views/page-threat-network.php:254
msgid "python-requests"
msgstr ""

#: admin/views/page-threat-network.php:255
msgid "Go-http"
msgstr ""

#: admin/views/page-threat-network.php:256
msgid "libwww"
msgstr ""

#: admin/views/page-threat-network.php:257
msgid "Headless-Chrome"
msgstr ""

#: admin/views/page-threat-network.php:258
msgid "generischer Bot"
msgstr ""

#: admin/views/page-threat-network.php:259
msgid "sonstiges Werkzeug"
msgstr ""

#. translators: 1: CVE id, 2: events in the last hour, 3: number of sites, 4: ratio over baseline
#: admin/views/page-threat-network.php:294
#, php-format
msgid "⚠ Frühwarnung: Aktive Ausnutzung von %1$s — %2$d Angriffe in der letzten Stunde über %3$d Sites (Faktor %4$s× über Normal). Jetzt aktualisieren."
msgstr ""

#. translators: 1: attack class label, 2: events in the last hour, 3: number of sites, 4: ratio over baseline
#: admin/views/page-threat-network.php:301
#, php-format
msgid "⚠ Frühwarnung: Anstieg von %1$s-Angriffen — %2$d Angriffe in der letzten Stunde über %3$d Sites (Faktor %4$s× über Normal). Jetzt aktualisieren."
msgstr ""

#. translators: 1: plugin/theme slug, 2: events in the last hour, 3: number of sites, 4: ratio over baseline
#: admin/views/page-threat-network.php:307
#, php-format
msgid "⚠ Frühwarnung: Aktive Angriffswelle auf Plugin »%1$s« — %2$d Angriffe in der letzten Stunde über %3$d Sites (Faktor %4$s× über Normal). Jetzt aktualisieren."
msgstr ""

#: admin/views/page-threat-network.php:324
msgid "Schatten"
msgstr ""

#: admin/views/page-threat-network.php:325
msgid "Canary"
msgstr ""

#: admin/views/page-threat-network.php:326
#: admin/views/page-threat-network.php:439
msgid "Aktiv"
msgstr ""

#: admin/views/page-threat-network.php:367
msgid "Threat Intelligence — Kommandozentrale"
msgstr ""

#: admin/views/page-threat-network.php:368
msgid "Brainwerk Security Suite · Privacy-first · EU-gehostet"
msgstr ""

#: admin/views/page-threat-network.php:377
msgid "Netzwerk verbunden"
msgstr ""

#: admin/views/page-threat-network.php:378
msgid "Netzwerk getrennt"
msgstr ""

#: admin/views/page-threat-network.php:393
#, php-format
msgid "+%d weitere Frühwarnungen"
msgstr ""

#: admin/views/page-threat-network.php:402
msgid "Angriffe (24h)"
msgstr ""

#: admin/views/page-threat-network.php:406
msgid "Blockiert"
msgstr ""

#: admin/views/page-threat-network.php:410
msgid "Eindeutige Angreifer"
msgstr ""

#: admin/views/page-threat-network.php:414
msgid "Bedrohungs-Score"
msgstr ""

#: admin/views/page-threat-network.php:419
msgid "Feed-Indikatoren aktiv"
msgstr ""

#: admin/views/page-threat-network.php:427
msgid "Angriffs-Aktivität"
msgstr ""

#: admin/views/page-threat-network.php:428
msgid "24 Stunden, stündlich (WARN und höher)"
msgstr ""

#: admin/views/page-threat-network.php:432
#: admin/views/page-threat-network.php:519
#: admin/views/page-threat-network.php:537
#: admin/views/page-threat-network.php:555
#: admin/views/page-threat-network.php:576
#: admin/views/page-threat-network.php:622
#: admin/views/page-threat-network.php:645
#: admin/views/page-threat-network.php:668
#: admin/views/page-threat-network.php:697
#: admin/views/page-threat-network.php:714
#: admin/views/page-threat-network.php:788
msgid "Noch keine Daten — der Sensor sammelt."
msgstr ""

#: admin/views/page-threat-network.php:436
msgid "Threat-Netzwerk"
msgstr ""

#: admin/views/page-threat-network.php:438
msgid "Teilnahme"
msgstr ""

#: admin/views/page-threat-network.php:439
msgid "Aus"
msgstr ""

#: admin/views/page-threat-network.php:440
msgid "Feed-Version"
msgstr ""

#: admin/views/page-threat-network.php:442
msgid "Aktualisiert"
msgstr ""

#: admin/views/page-threat-network.php:444
msgid "Virtual-Patch-Regeln"
msgstr ""

#: admin/views/page-threat-network.php:446
msgid "Sensoren im Netz"
msgstr ""

#: admin/views/page-threat-network.php:451
msgid "Ed25519-Signatur verifiziert"
msgstr ""

#: admin/views/page-threat-network.php:452
msgid "ja"
msgstr ""

#: admin/views/page-threat-network.php:452
msgid "nein"
msgstr ""

#: admin/views/page-threat-network.php:460
msgid "Frühwarnungen (Netz)"
msgstr ""

#: admin/views/page-threat-network.php:461
msgid "Netzweite Angriffswellen mit auffälliger Rate gegenüber dem Normalwert"
msgstr ""

#. translators: 1: events in the last hour, 2: ratio over baseline, 3: number of sites
#: admin/views/page-threat-network.php:477
#, php-format
msgid "%1$d× / Faktor %2$s× / %3$d Sites"
msgstr ""

#: admin/views/page-threat-network.php:485
msgid "Keine aktiven Frühwarnungen — alles ruhig."
msgstr ""

#: admin/views/page-threat-network.php:493
msgid "Angriffsarten"
msgstr ""

#: admin/views/page-threat-network.php:496
#: admin/views/page-threat-network.php:797
msgid "Brute-Force"
msgstr ""

#: admin/views/page-threat-network.php:497
#: admin/views/page-threat-network.php:802
msgid "Honeypot"
msgstr ""

#: admin/views/page-threat-network.php:498
msgid "Probing"
msgstr ""

#: admin/views/page-threat-network.php:499
msgid "WAF"
msgstr ""

#: admin/views/page-threat-network.php:500
msgid "Malware"
msgstr ""

#: admin/views/page-threat-network.php:501
#: admin/views/page-threat-network.php:822
msgid "Anomalie"
msgstr ""

#: admin/views/page-threat-network.php:524
msgid "Top-Angreifer-IPs"
msgstr ""

#: admin/views/page-threat-network.php:542
msgid "Angegriffene Benutzernamen"
msgstr ""

#: admin/views/page-threat-network.php:562
msgid "Herkunft der Angriffe"
msgstr ""

#: admin/views/page-threat-network.php:563
msgid "Angreifer-Länder, 24h, lokal aufgelöst (keine externen Abfragen)"
msgstr ""

#: admin/views/page-threat-network.php:604
msgid "Meistangegriffene Plugins/Themes"
msgstr ""

#: admin/views/page-threat-network.php:606
#: admin/views/page-threat-network.php:629
#: admin/views/page-threat-network.php:652
#: admin/views/page-threat-network.php:678
msgid "7 Tage, Netz-Gesamtbild"
msgstr ""

#: admin/views/page-threat-network.php:607
#: admin/views/page-threat-network.php:630
msgid "7 Tage, lokal erkannt"
msgstr ""

#: admin/views/page-threat-network.php:627
msgid "Angriffsklassen"
msgstr ""

#: admin/views/page-threat-network.php:650
msgid "Angreifer-Werkzeuge"
msgstr ""

#: admin/views/page-threat-network.php:653
msgid "7 Tage, lokal erkannt (User-Agent)"
msgstr ""

#: admin/views/page-threat-network.php:676
msgid "Angreifer-Netze (Provider)"
msgstr ""

#: admin/views/page-threat-network.php:679
msgid "7 Tage, lokal aufgelöst (keine externen Abfragen)"
msgstr ""

#: admin/views/page-threat-network.php:702
msgid "Tageszeit-Muster"
msgstr ""

#: admin/views/page-threat-network.php:704
msgid "24 Stunden, Netz-Gesamtbild (UTC)"
msgstr ""

#: admin/views/page-threat-network.php:705
msgid "24 Stunden, lokal (UTC)"
msgstr ""

#: admin/views/page-threat-network.php:711
#, php-format
msgid "Spitze um %02d:00 UTC"
msgstr ""

#: admin/views/page-threat-network.php:719
msgid "Angriffs-Tempo"
msgstr ""

#: admin/views/page-threat-network.php:721
msgid "Netz-Gesamtbild, letzte Stunde vs. vorherige"
msgstr ""

#: admin/views/page-threat-network.php:722
msgid "Meine Site, letzte Stunde vs. vorherige"
msgstr ""

#. translators: 1: events in the last hour, 2: events in the previous hour
#: admin/views/page-threat-network.php:733
#, php-format
msgid "%1$d letzte Stunde · %2$d Stunde davor"
msgstr ""

#: admin/views/page-threat-network.php:744
msgid "Angriffs-Korridore"
msgstr ""

#: admin/views/page-threat-network.php:745
msgid "Herkunfts- zu Ziel-Länder, letzte 7 Tage. Keine Kartenkacheln — ein datenbasiertes Chord-Diagramm."
msgstr ""

#: admin/views/page-threat-network.php:762
msgid "Herkunft → Ziel"
msgstr ""

#: admin/views/page-threat-network.php:763
msgid "Ereignisse"
msgstr ""

#: admin/views/page-threat-network.php:764
msgid "Top-CVE"
msgstr ""

#: admin/views/page-threat-network.php:765
msgid "Top-Endpunktklasse"
msgstr ""

#: admin/views/page-threat-network.php:794
msgid "Angriffsarten — kurz erklärt"
msgstr ""

#: admin/views/page-threat-network.php:798
msgid "Automatisiertes Durchprobieren von Passwörtern gegen den Login."
msgstr ""

#: admin/views/page-threat-network.php:799
msgid "Schutz: Sperren nach Fehlversuchen, 2FA."
msgstr ""

#: admin/views/page-threat-network.php:803
msgid "Ein unsichtbares Köder-Feld — nur Bots füllen es aus."
msgstr ""

#: admin/views/page-threat-network.php:804
msgid "Schutz: Einreichung wird stumm verworfen."
msgstr ""

#: admin/views/page-threat-network.php:807
msgid "Probing/404"
msgstr ""

#: admin/views/page-threat-network.php:808
msgid "Scanner suchen nach bekannten Pfaden und Sicherheitslücken."
msgstr ""

#: admin/views/page-threat-network.php:809
msgid "Schutz: Muster-Erkennung, Rate-Limiting."
msgstr ""

#: admin/views/page-threat-network.php:812
msgid "WAF-Block"
msgstr ""

#: admin/views/page-threat-network.php:813
msgid "Eine Anfrage passte zu einer bekannten Angriffssignatur und wurde geblockt."
msgstr ""

#: admin/views/page-threat-network.php:814
msgid "Schutz: Signierte Virtual-Patch-Regeln aus dem Netzwerk."
msgstr ""

#: admin/views/page-threat-network.php:817
msgid "Malware-Fund"
msgstr ""

#: admin/views/page-threat-network.php:818
msgid "Verdächtiger Code-Fund im Dateisystem — möglicher Kompromittierungshinweis."
msgstr ""

#: admin/views/page-threat-network.php:819
msgid "Schutz: Datei-Integritätsscan, Scanner-Tab prüfen."
msgstr ""

#: admin/views/page-threat-network.php:823
msgid "Ein Login weicht stark vom gewohnten Verhalten des Kontos ab."
msgstr ""

#: admin/views/page-threat-network.php:824
msgid "Schutz: Statistische Verhaltensanalyse, Benachrichtigung."
msgstr ""

#: admin/views/page-threat-network.php:831
msgid "Immunisierungen"
msgstr ""

#: admin/views/page-threat-network.php:832
msgid "Netzweit reifende Schutzregeln — vom stillen Mitlesen bis zur aktiven Blockade."
msgstr ""

#. translators: %s: plain-language explanation of the newly active immun rule
#: admin/views/page-threat-network.php:840
#, php-format
msgid "✓ Neue Immunisierung aktiv: %s"
msgstr ""

#: admin/views/page-threat-network.php:849
msgid "Netz-Immunisierungen sind deaktiviert (Einstellung „intel_immunize“)."
msgstr ""

#: admin/views/page-threat-network.php:851
msgid "Nur mit aktiver Teilnahme am Threat-Network verfügbar — siehe „Teilnahme & Datenschutz“ unten."
msgstr ""

#: admin/views/page-threat-network.php:853
msgid "Derzeit keine Netz-Immunisierungen aktiv."
msgstr ""

#: admin/views/page-threat-network.php:858
msgid "Stufe"
msgstr ""

#: admin/views/page-threat-network.php:859
msgid "Warum bin ich davon geschützt?"
msgstr ""

#: admin/views/page-threat-network.php:860
msgid "Ziel / Muster"
msgstr ""

#: admin/views/page-threat-network.php:861
msgid "Reife (lokal)"
msgstr ""

#. translators: 1: shadow hit count, 2: canary hit count, 3: false-positive-suspected count
#: admin/views/page-threat-network.php:886
#, php-format
msgid "Schatten-Treffer: %1$d · Canary-Treffer: %2$d · FP-Verdacht: %3$d"
msgstr ""

#: admin/views/page-threat-network.php:902
msgid "Teilnahme & Datenschutz"
msgstr ""

#: admin/views/page-threat-network.php:906
msgid "Participation"
msgstr ""

#: admin/views/page-threat-network.php:909
msgid "Opted in"
msgstr ""

#: admin/views/page-threat-network.php:916
msgid "Registration"
msgstr ""

#: admin/views/page-threat-network.php:919
msgid "Registered"
msgstr ""

#: admin/views/page-threat-network.php:922
msgid "Not registered"
msgstr ""

#: admin/views/page-threat-network.php:927
msgid "Correlation salt"
msgstr ""

#: admin/views/page-threat-network.php:930
msgid "Current"
msgstr ""

#: admin/views/page-threat-network.php:931
#, php-format
msgid "epoch %s"
msgstr ""

#: admin/views/page-threat-network.php:933
msgid "Stale — refresh below"
msgstr ""

#: admin/views/page-threat-network.php:935
msgid "Local placeholder (no cross-site correlation until registered)"
msgstr ""

#: admin/views/page-threat-network.php:940
msgid "Queue"
msgstr ""

#: admin/views/page-threat-network.php:944
#, php-format
msgid "%1$d pending · %2$d sent total · %3$d dropped"
msgstr ""

#: admin/views/page-threat-network.php:956
msgid "Send queued now"
msgstr ""

#: admin/views/page-threat-network.php:961
msgid "Refresh salt"
msgstr ""

#: admin/views/page-threat-network.php:963
msgid "Unregister this site? No further data will be sent."
msgstr ""

#: admin/views/page-threat-network.php:966
msgid "Unregister"
msgstr ""

#: admin/views/page-threat-network.php:976
msgid "Serverstandort-Ländercode"
msgstr ""

#: admin/views/page-threat-network.php:982
msgid "Manuelle Vorgabe (2-stelliger Ländercode) für die \"Ziel\"-Achse der Angriffs-Korridore. Hat Vorrang vor der automatischen Erkennung. Leer lassen zum Deaktivieren."
msgstr ""

#: admin/views/page-threat-network.php:986
msgid "Automatische Erkennung"
msgstr ""

#: admin/views/page-threat-network.php:991
msgid "Serverstandort automatisch erkennen (einmaliger Abruf der eigenen Server-IP über api.ipify.org)"
msgstr ""

#: admin/views/page-threat-network.php:993
msgid "Standardmäßig aus — ohne Ländercode-Vorgabe und ohne automatische Erkennung macht das Plugin keinen ausgehenden Aufruf und zeigt den Serverstandort als \"Unbekannt\"."
msgstr ""

#: admin/views/page-threat-network.php:1008
msgid "Participation (opt-in)"
msgstr ""

#: admin/views/page-threat-network.php:1011
msgid "Contribute privacy-preserving threat telemetry to the network"
msgstr ""

#: admin/views/page-threat-network.php:1014
msgid "When on, attack indicators (never raw IPs or personal data) are queued and sent to the EU-hosted central network so every participating site is protected by what the others see. Default off."
msgstr ""

#: admin/views/page-threat-network.php:1018
msgid "Also allow my indicators in the shared redistribution feed"
msgstr ""

#: admin/views/page-threat-network.php:1023
msgid "Connection"
msgstr ""

#: admin/views/page-threat-network.php:1026
#: admin/views/page-vulnerabilities.php:234
msgid "API endpoint"
msgstr ""

#: admin/views/page-threat-network.php:1030
msgid "EU-hosted central network. Change only if you run your own instance."
msgstr ""

#: admin/views/page-threat-network.php:1034
msgid "Register token"
msgstr ""

#: admin/views/page-threat-network.php:1038
msgid "One-time bootstrap token from the network operator. Needed once to register this site."
msgstr ""

#: admin/views/page-threat-network.php:1051
msgid "Register this site"
msgstr ""

#: admin/views/page-threat-network.php:1052
msgid "Save the API endpoint + register token above first, then register. Registration exchanges the token for a pseudonymous site identity and secret."
msgstr ""

#: admin/views/page-threat-network.php:1056
msgid "Register now"
msgstr ""

#: admin/views/page-threat-network.php:1062
msgid "Transparency — what gets sent"
msgstr ""

#: admin/views/page-threat-network.php:1063
msgid "The most recent items queued for the network. Only the fields listed leave your site; identifiers are salted hashes, never raw values."
msgstr ""

#: admin/views/page-threat-network.php:1065
msgid "Nothing queued yet."
msgstr ""

#: admin/views/page-threat-network.php:1070
msgid "Category"
msgstr ""

#: admin/views/page-threat-network.php:1071
msgid "Fields sent"
msgstr ""

#: admin/views/page-threat-network.php:1072
msgid "IP indicator"
msgstr ""

#: admin/views/page-tools.php:21
msgid "Test mail sent."
msgstr ""

#: admin/views/page-tools.php:24
#, php-format
msgid "Removed %d log entries."
msgstr ""

#: admin/views/page-tools.php:27
msgid "Settings reset to defaults."
msgstr ""

#: admin/views/page-tools.php:40
msgid "Settings imported."
msgstr ""

#: admin/views/page-tools.php:51
msgid "Health check"
msgstr ""

#: admin/views/page-tools.php:54
#: admin/views/page-tools.php:109
msgid "Check"
msgstr ""

#: admin/views/page-tools.php:56
#: admin/views/page-tools.php:110
msgid "Detail"
msgstr ""

#: admin/views/page-tools.php:83
msgid "Pre-launch sanity check"
msgstr ""

#: admin/views/page-tools.php:85
msgid "Walks through every module and reports misconfigurations or hygiene issues that would embarrass a reviewer or trip up a customer. Read-only — runs no actions on its own."
msgstr ""

#: admin/views/page-tools.php:89
msgid "OK"
msgstr ""

#: admin/views/page-tools.php:90
msgid "Warnings"
msgstr ""

#: admin/views/page-tools.php:91
msgid "Failures"
msgstr ""

#: admin/views/page-tools.php:95
msgid "✓ Ready to ship."
msgstr ""

#: admin/views/page-tools.php:97
msgid "Only soft warnings — review before going live."
msgstr ""

#: admin/views/page-tools.php:99
msgid "Critical issues — fix before going live."
msgstr ""

#: admin/views/page-tools.php:124
msgid "Fix →"
msgstr ""

#: admin/views/page-tools.php:134
msgid "Send test mail"
msgstr ""

#: admin/views/page-tools.php:140
msgid "Send"
msgstr ""

#: admin/views/page-tools.php:146
msgid "Settings export / import"
msgstr ""

#: admin/views/page-tools.php:150
msgid "Download settings.json"
msgstr ""

#: admin/views/page-tools.php:159
msgid "Import settings"
msgstr ""

#: admin/views/page-tools.php:165
msgid "Maintenance"
msgstr ""

#: admin/views/page-tools.php:169
msgid "Run log cleanup now"
msgstr ""

#: admin/views/page-tools.php:171
msgid "Reset all settings to defaults?"
msgstr ""

#: admin/views/page-tools.php:174
msgid "Reset to defaults"
msgstr ""

#. translators: %s: username
#: admin/views/page-twofactor.php:20
#, php-format
msgid "2FA disabled (rescue) for user: %s"
msgstr ""

#: admin/views/page-twofactor.php:59
msgid "Your account does not have 2FA enabled yet."
msgstr ""

#: admin/views/page-twofactor.php:60
msgid "This tab is the admin overview — the actual setup form is on your user profile."
msgstr ""

#: admin/views/page-twofactor.php:63
msgid "Set up 2FA on my profile →"
msgstr ""

#: admin/views/page-twofactor.php:70
#: includes/class-shieldforge-twofactor.php:424
msgid "Two-factor authentication"
msgstr ""

#: admin/views/page-twofactor.php:72
msgid "Standard TOTP (RFC 6238): works with Google Authenticator, Authy, Microsoft Authenticator, 2FAS, FreeOTP, Aegis. Each user enrolls themselves on their own profile page."
msgstr ""

#: admin/views/page-twofactor.php:73
msgid "No external services involved — secrets and recovery codes never leave your database."
msgstr ""

#: admin/views/page-twofactor.php:83
msgid "Enable 2FA module"
msgstr ""

#: admin/views/page-twofactor.php:87
msgid "Allow users to enable two-factor authentication on their profile."
msgstr ""

#: admin/views/page-twofactor.php:92
msgid "Force 2FA for these roles"
msgstr ""

#: admin/views/page-twofactor.php:104
msgid "Users in these roles see a warning on their profile until they complete setup. Setup is still self-service — admins cannot enroll on someone's behalf."
msgstr ""

#: admin/views/page-twofactor.php:117
msgid "Users with 2FA configured"
msgstr ""

#: admin/views/page-twofactor.php:119
msgid "No users have set up 2FA yet. Each user enables it from their own profile page (Users → Profile → Two-factor authentication)."
msgstr ""

#: admin/views/page-twofactor.php:126
msgid "Recovery codes"
msgstr ""

#: admin/views/page-twofactor.php:127
msgid "Last used"
msgstr ""

#: admin/views/page-twofactor.php:128
msgid "Rescue action"
msgstr ""

#: admin/views/page-twofactor.php:139
#: admin/views/page-vulnerabilities.php:39
msgid "ago"
msgstr ""

#: admin/views/page-twofactor.php:150
#: admin/views/page-vulnerabilities.php:126
msgid "active"
msgstr ""

#: admin/views/page-twofactor.php:152
msgid "pending setup"
msgstr ""

#: admin/views/page-twofactor.php:163
#, php-format
msgid "Disable 2FA for %s? Use only when the user lost both their authenticator and recovery codes."
msgstr ""

#: admin/views/page-twofactor.php:163
msgid "Rescue: disable"
msgstr ""

#: admin/views/page-twofactor.php:171
msgid "Capped at 100 rows. Use the user-edit screen for individual user management."
msgstr ""

#. translators: 1: queries, 2: errors, 3: plugins-affected, 4: themes-affected, 5: core-affected
#: admin/views/page-vulnerabilities.php:18
#, php-format
msgid "Vulnerability scan complete: %1$d queries, %2$d errors, %3$d plugins / %4$d themes / %5$d core hits."
msgstr ""

#: admin/views/page-vulnerabilities.php:27
msgid "Vulnerability cache cleared."
msgstr ""

#: admin/views/page-vulnerabilities.php:47
msgid "Plugin / Theme / Core vulnerabilities"
msgstr ""

#: admin/views/page-vulnerabilities.php:49
msgid "Daily check against an EU-hosted vulnerability API (default: shieldforge-intel.brainwerk.at — no API key, self-hostable). Each scan sends only the slug + version of installed components. No site URL, no admin email, no IPs."
msgstr ""

#: admin/views/page-vulnerabilities.php:55
msgid "The vulnerability scanner is off by default."
msgstr ""

#: admin/views/page-vulnerabilities.php:56
msgid "It is the only feature that automatically contacts an external service. Enable it below to consent to the daily lookup (slug + version only). You can also run a one-off check with “Scan now” without turning on the daily schedule."
msgstr ""

#: admin/views/page-vulnerabilities.php:64
msgid "Queries last run"
msgstr ""

#: admin/views/page-vulnerabilities.php:65
msgid "Findings (cached)"
msgstr ""

#. translators: 1: plugins-affected, 2: themes-affected, 3: core-affected
#: admin/views/page-vulnerabilities.php:70
#, php-format
msgid "%1$d plugins, %2$d themes, %3$d core"
msgstr ""

#: admin/views/page-vulnerabilities.php:85
msgid "Clear cached vulnerability data and dedup state?"
msgstr ""

#: admin/views/page-vulnerabilities.php:85
msgid "Clear cache"
msgstr ""

#: admin/views/page-vulnerabilities.php:88
msgid "Manual scans hit the API in real time and may take ~10–60s depending on how many plugins are installed."
msgstr ""

#: admin/views/page-vulnerabilities.php:103
#: includes/class-shieldforge-admin-intros.php:157
msgid "Component"
msgstr ""

#: admin/views/page-vulnerabilities.php:104
#: includes/class-shieldforge-admin-intros.php:158
msgid "Version"
msgstr ""

#: admin/views/page-vulnerabilities.php:105
#: includes/class-shieldforge-admin-intros.php:159
msgid "Active"
msgstr ""

#: admin/views/page-vulnerabilities.php:106
#: includes/class-shieldforge-admin-intros.php:160
msgid "Vulnerability"
msgstr ""

#: admin/views/page-vulnerabilities.php:107
#: includes/class-shieldforge-admin-intros.php:161
msgid "Fixed in"
msgstr ""

#: admin/views/page-vulnerabilities.php:108
#: includes/class-shieldforge-admin-intros.php:162
msgid "Sources"
msgstr ""

#: admin/views/page-vulnerabilities.php:128
msgid "inactive"
msgstr ""

#: admin/views/page-vulnerabilities.php:138
msgid "No patch available"
msgstr ""

#: admin/views/page-vulnerabilities.php:177
msgid "No vulnerability scan has run yet."
msgstr ""

#: admin/views/page-vulnerabilities.php:178
msgid "The scanner queries a public CVE database for every plugin/theme/core component on your site. The next scheduled run is at 04:30, but you can run it on demand."
msgstr ""

#: admin/views/page-vulnerabilities.php:186
msgid "Vulnerable plugins"
msgstr ""

#: admin/views/page-vulnerabilities.php:187
msgid "Vulnerable themes"
msgstr ""

#: admin/views/page-vulnerabilities.php:188
msgid "Vulnerable WordPress core"
msgstr ""

#: admin/views/page-vulnerabilities.php:191
msgid "No known vulnerabilities found in the installed components. ✓"
msgstr ""

#: admin/views/page-vulnerabilities.php:197
msgid "Settings"
msgstr ""

#: admin/views/page-vulnerabilities.php:211
msgid "Run the daily vulnerability check."
msgstr ""

#: admin/views/page-vulnerabilities.php:216
msgid "Check themes"
msgstr ""

#: admin/views/page-vulnerabilities.php:220
msgid "Also query the API for installed themes."
msgstr ""

#: admin/views/page-vulnerabilities.php:225
msgid "Check WordPress core"
msgstr ""

#: admin/views/page-vulnerabilities.php:229
msgid "Also check the running WordPress core version."
msgstr ""

#: admin/views/page-vulnerabilities.php:237
msgid "Override only if you mirror the API privately. Empty uses wpvulnerability.net."
msgstr ""

#: admin/views/partials/upgrade-hint.php:20
msgid "Unlock more in Brainwerk Security Suite Pro"
msgstr ""

#: admin/views/partials/upgrade-hint.php:21
msgid "The free build covers logging, brute-force protection, hardening, and basic anomaly detection. Pro adds adaptive thresholds, geo blocking, 2FA / WebAuthn, chat-app alerts and a multisite aggregate dashboard."
msgstr ""

#: admin/views/partials/upgrade-hint.php:40
msgid "See license options"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:35
msgid "<strong>The \"is anything on fire?\" overview.</strong> Live security status of your site at a glance — threat level, recent attacker activity, and what (if anything) needs your attention."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:37
msgid "What you see here"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:38
msgid "A threat-score from 0 to 100 (calm / elevated / high / critical), action items pulled from the last 24 hours, brute-force lockouts, anomalous logins, top attacker IPs and which usernames they are guessing. The same overview also appears as a widget on your main WordPress dashboard."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:39
msgid "Should I do anything?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:40
msgid "On a calm day: nothing. The score stays low, no action items, and you can close the tab. On a busy day, the action items are clickable shortcuts that take you to the relevant tool — no detective work required."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:41
msgid "How the score is calculated"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:42
msgid "Four signal groups, each capped at 25 points so no single noisy signal can push the score on its own: failed-login volume, distinct attacker IPs, probing density (bots scanning your site for known files), and escalation signals (lockouts + anomalies + file changes + malware hits). The breakdown is shown in the daily digest email."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:48
msgid "<strong>Stops password-guessing attacks.</strong> When someone (or a bot) tries to log in too often with the wrong password, Brainwerk Security Suite locks them out — by IP and by account."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:50
msgid "Why two kinds of lockout?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:51
msgid "IP-based lockout works against a single attacker hammering your site from one IP. But modern botnets rotate through hundreds of IPs to avoid that — so we ALSO lock the targeted account itself. After a configurable number of failed attempts, that username is locked for a configurable window. Attackers can't bypass it just by changing IP."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:52
msgid "Safe defaults"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:53
msgid "5 wrong tries within 5 minutes locks the IP for 30 minutes. 8 wrong tries within 15 minutes locks the account for 15 minutes. These defaults catch automated attacks without locking out real users who fat-fingered their password."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:54
msgid "I'm on a CDN — will it see real IPs?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:55
msgid "If your nginx/Apache forwards the original client IP via PROXY-protocol or X-Forwarded-For, yes. The \"Healthcheck\" banner at the top warns you if all visitors arrive as 127.0.0.1 — that means the chain is hiding the real IP and brute-force protection would be useless without fixing the proxy first."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:61
msgid "<strong>Two-factor authentication (2FA) — the single biggest defense against stolen passwords.</strong> Even if someone gets your password, they still need a 6-digit code from your phone to log in."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:63
msgid "How does it work?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:64
msgid "You install a free authenticator app on your phone (Google Authenticator, Microsoft Authenticator, Authy, 2FAS — any of them). It generates a 6-digit code that changes every 30 seconds. When you log in, you enter your password as usual, then the current code from the app. Without the phone in hand, your password is useless to an attacker."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:65
msgid "What if I lose my phone?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:66
msgid "When you set up 2FA, you get 8 single-use recovery codes. Save them in your password manager or print them out. Each one can be used exactly once instead of an authenticator code. If you lose all 8 recovery codes too, an admin (with manage_network_options capability) can disable 2FA for any user from this tab."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:67
msgid "Setting it up"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:68
msgid "This tab is the admin overview. The actual setup form is on each user's own profile page — only you have the device, only you can enroll it. If \"Force 2FA for these roles\" is enabled, users in those roles see a warning until they finish setup."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:74
msgid "<strong>Closes off WordPress's \"default doors\" that attackers always try first.</strong> Each toggle here disables a feature that 99% of sites don't use but that 100% of bots probe for."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:76
msgid "What gets turned off?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:77
msgid "XML-RPC (a legacy API used by very old mobile apps — modern apps use REST). The in-admin file editor (lets a logged-in admin edit theme/plugin files directly — usable as a one-click backdoor if your account is hijacked). Author enumeration (visiting /?author=1 reveals usernames). The WordPress version string in the page source (lets bots match against vulnerability databases). REST API access for anonymous visitors to sensitive endpoints (users, comments, search)."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:78
msgid "Will this break my site?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:79
msgid "Almost never. None of these are used by normal visitors or modern themes/plugins. The few cases where it matters: if you use Jetpack with the WordPress mobile app or a third-party scheduler that POSTs via XML-RPC, you may need to leave XML-RPC on. Test after enabling each toggle if you have a complex setup."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:80
msgid "What about more advanced hardening?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:81
msgid "See the \"Hardening+\" tab for custom login URL, honeypot anti-bot, and Content-Security-Policy headers — those are riskier (lockout potential) so they live separately and ship default-OFF."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:87
msgid "<strong>Three layered defenses for sites that want more than the basics.</strong> Each can lock you out if misconfigured — read carefully before enabling."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:90
msgid "Move /wp-login.php to a path of your choosing. Bots blindly hammer /wp-login.php — they'll get a 404 and move on. Crucial lockout-recovery: add a SHIELDFORGE_LOGIN_RESCUE constant to wp-config.php BEFORE enabling this. If you forget your slug, the rescue token brings you back."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:92
msgid "A hidden field is added to login / register / comment forms. Real users never see it. Bots fill every visible field — submissions with the hidden field non-empty are blocked. 100% local, no Google reCAPTCHA, no third-party data transfer. Stops the dumb mass-bot 90% with zero user friction."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:93
msgid "Security HTTP headers (incl. CSP)"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:94
msgid "Each header is set ONLY if your nginx/Apache doesn't already send it. CSP (Content-Security-Policy) is off by default because a wrong policy can blank out your site — turn it on in Report-Only mode first, watch the browser console for violations, then enforce."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:100
msgid "<strong>Currently-blocked IPs and how long they stay blocked.</strong> This is the live consequence of the brute-force protection on the Login tab."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:102
msgid "How does an IP get on this list?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:103
msgid "Either automatically (it tripped the brute-force threshold and got auto-blocked for the configured lockout duration) or manually (you clicked \"Block this IP\" on the Logs tab)."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:104
msgid "Can I unblock someone?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:105
msgid "Yes — every row has an \"Unblock\" link. Useful when you locked yourself out by typing your own password wrong too many times."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:106
msgid "Does this stop ALL traffic from the IP?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:107
msgid "No — only login attempts. The block prevents further password guessing but doesn't stop the IP from reading public pages. For full IP-blocking, use a Pro feature like Geo-blocking or Cloud Threat Intel, or block at the firewall/CDN layer."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:108
msgid "Crawler rate-limiting (further down this page)"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:109
msgid "Caps how many requests per minute a single IP may make — with separate, stricter budgets for crawlers. Genuine search engines (Google, Bing, Apple, Yandex, Baidu) are verified via reverse-DNS and never throttled; bots FAKING a Googlebot user-agent are blocked outright. Logged-in users and whitelisted IPs are always exempt. Off by default."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:112
msgid "The blocked source IP (or anonymized /24 if IP anonymization is on)."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:113
msgid "Why the block was created — typically `bf_threshold` (brute-force) or `admin_quick_block` (you blocked manually)."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:114
msgid "Blocked until"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:114
msgid "When the block expires automatically. After this time the IP can attempt logins again."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:115
msgid "\"Unblock\" removes the entry immediately — useful if you locked yourself out."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:121
msgid "<strong>Knows what every PHP file on your site SHOULD look like, and tells you when one suddenly changes.</strong> The earliest warning that something compromised your site."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:123
msgid "How does it know what is \"normal\"?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:124
msgid "On the first run, it computes a SHA-256 hash of every PHP file under WordPress core, your plugins, your themes, and mu-plugins. That's your \"baseline\" — typically 5,000 to 15,000 files. After that, the daily scan re-hashes everything and tells you about anything that was added, modified, or deleted."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:125
msgid "But files change all the time when I update plugins!"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:126
msgid "Right — every time WordPress installs an update, hundreds of files change. The scanner picks those up too, but they appear bunched up at the time of the update — you'll recognize them. The dangerous ones are the changes that happen WITHOUT an update — those are the ones to investigate."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:127
msgid "And the malware-pattern checks?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:128
msgid "For every new or changed file, Brainwerk Security Suite runs 16 regex rules looking for hostile patterns: eval(base64_decode(...)), known web shells (c99/r57/WSO), inline admin-user-creation, password-cookie hijacks. Findings show the exact line and code snippet. False-positive rate is very low."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:129
msgid "Privacy"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:130
msgid "100% local. No file contents leave your server. The scan results stay in your own database."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:131
msgid "Repository integrity check (further down this page)"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:132
msgid "Compares every wp.org-hosted plugin and theme file against the official checksums from wordpress.org. A modified, missing or extra file means someone may have tampered with the package — it is reported here so you can inspect it and reinstall the clean copy from wordpress.org the standard way. Plugins/themes NOT from wp.org are listed as \"unverifiable\" and never touched."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:135
msgid "UTC timestamp of when the scanner found the change."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:136
msgid "What changed: <code>file added</code> (new file appeared), <code>file changed</code> (existing file modified), <code>file missing</code> (file deleted), <code>malware suspect</code> (suspicious code pattern detected)."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:137
msgid "Path of the affected file relative to your WordPress root. For malware hits the rule ID and a code snippet are shown below the path."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:138
msgid "<code>info</code> = informational, <code>warn</code> = worth checking, <code>high</code> = file in WP core or admin (very suspicious), <code>critical</code> = known web shell signature."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:139
msgid "\"Re-baseline\" accepts the current state as the new normal (the change won't be reported again). \"Whitelist\" suppresses all future alerts for this exact path."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:145
msgid "<strong>Tells you which of your installed plugins/themes have known security holes — and which version fixes them.</strong> Most WordPress hacks happen via outdated plugins; this tab tells you which ones to update first."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:147
msgid "Where does the data come from?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:148
msgid "A daily check against the wpvulnerability.net public database (free, EU-hosted, no API key). For every plugin and theme installed on your site, Brainwerk Security Suite sends ONLY the slug + version (e.g. \"contact-form-7 / 5.3.1\") — no site URL, no admin email, no IP. The response is a list of CVE-IDs that affect your version, with the version that fixes them."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:149
msgid "Active vs inactive plugins"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:150
msgid "Vulnerabilities on ACTIVE components are dangerous — fix immediately. Vulnerabilities on INACTIVE plugins are usually unreachable but still worth removing (less attack surface, fewer files to maintain). The dashboard widget only nags about active critical ones to avoid alert fatigue."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:151
msgid "CVSS scores explained"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:152
msgid "CVSS is a 0-10 severity score. 9.0+ = critical (often remote code execution), 7.0-8.9 = high, 4.0-6.9 = medium, below 4.0 = low. Anything 7.0+ on an active plugin should be patched this week, not \"soon\"."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:153
msgid "Disable the scan"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:154
msgid "If you want fully air-gapped operation, untick \"Enable scanner\" below — no outbound calls at all. Brainwerk Security Suite stays useful but you lose the early-warning on plugin CVEs."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:157
msgid "Plugin / theme name with its slug below (the slug is what we send to the vulnerability API)."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:158
msgid "The version installed on your site right now. Compare to \"Fixed in\" below to see if you need to update."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:159
msgid "<code>active</code> (red dot) = currently in use — patch THIS WEEK. <code>inactive</code> = installed but not running — not exploitable but still worth removing."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:160
msgid "Short name of the CVE. The badge next to it is the CVSS score (0–10): 9.0+ critical, 7.0–8.9 high, 4.0–6.9 medium. \"No patch available\" means the vendor has not released a fix yet."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:161
msgid "The plugin/theme version that fixes this CVE. Update to this version (or newer) to close the hole."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:162
msgid "Public CVE-IDs (clickable, opens the official advisory). EUVD = EU Vulnerability Database mirror."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:168
msgid "<strong>Spots logins that look unusual for a given user — without sending data to any cloud.</strong> \"You normally log in from Vienna at 9am — this 3am attempt from Russia looks weird.\""
msgstr ""

#: includes/class-shieldforge-admin-intros.php:170
msgid "How does it learn what's \"normal\"?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:171
msgid "After each successful login, Brainwerk Security Suite updates a small per-user statistical baseline: which hours of the day you usually log in, which IP family (residential / datacenter / mobile / unknown), and which type of browser (modern / legacy / bot-like). The baseline becomes meaningful after about 5 logins per user."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:172
msgid "How does scoring work?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:173
msgid "Each new login is compared to the baseline using a Z-score (how far is this from your normal pattern). A score of 0-100 is computed; above the alert threshold the event is logged as severity HIGH and shown in the digest with an explanation (\"logged in at 3am from a datacenter IP — your usual is daytime from a residential IP\")."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:174
msgid "No cloud, no AI"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:175
msgid "This is pure local statistics. No machine learning, no model server, no data leaves the site. Explainable: every flagged event tells you which signal triggered it."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:181
msgid "<strong>Who changed what, when.</strong> A complete trail of post edits, user changes, plugin/theme updates, and security-relevant setting changes. Useful for incident response and DSGVO Art. 32 compliance."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:183
msgid "What gets recorded?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:184
msgid "Post edits (who edited which post, what fields changed — but NOT the post body, for privacy + log size). User changes (someone updated their email, role, password). Plugin/theme/core updates. Security-sensitive options (siteurl, admin_email, \"anyone can register\", default-role-for-new-users, network site_admins)."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:185
msgid "What does NOT get recorded?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:186
msgid "The actual content of post edits (avoid leaking drafts into logs). Password values (only \"[changed]\" markers). Hundreds of harmless WordPress option-write spam (transients, cache markers). Auto-drafts and revisions and nav-menu items (skipped by default — too noisy)."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:187
msgid "When is this useful?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:188
msgid "Three scenarios: (1) Something broke yesterday — the audit log shows what was changed. (2) Compliance — DSGVO Art. 32 requires \"measures for security of processing\" and a paper trail is one. (3) Incident response after a hack — see exactly what the attacker touched after they got in."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:191
msgid "UTC timestamp of when the change happened."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:192
msgid "The user who made the change (clickable — links to the user-edit screen). \"system / cron\" means it was an automated WP process, not a person."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:193
msgid "Type of change: <code>post updated</code>, <code>user profile updated</code>, <code>option changed</code>, <code>plugin activated</code>, etc."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:194
msgid "The specific object changed: post title and ID, plugin file, option name with old→new values. For password and similar sensitive fields you only see \"[changed]\"."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:195
msgid "Source IP of the change (anonymized to /24 by default). Useful when investigating \"who did this from where\"."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:201
msgid "<strong>The raw event stream — every login, block, anomaly, file change, vulnerability finding.</strong> Where you go when you need to dig into \"what happened at 03:47 last Tuesday\"."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:203
msgid "Filter and search"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:204
msgid "You can narrow the list by event type, severity, IP, username, or date range. Click \"Block this IP\" or \"Unblock\" inline — no need to switch tabs. The default view is the latest 50; pagination shows older entries."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:205
msgid "How long are logs kept?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:206
msgid "Configurable retention, default 30 days. A daily cleanup cron drops anything older. If you want to keep them longer for compliance, increase the retention setting on the Privacy / GDPR tab."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:207
msgid "Audit-only view?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:208
msgid "For who-changed-what queries (post edits, user changes, plugin updates), use the Audit tab — it shows the same data filtered to just the audit-trail events with prettier per-event-type rendering."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:211
msgid "Server timestamp in UTC. Note: NOT in your local timezone — this avoids ambiguity when investigating across time zones / daylight savings."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:212
msgid "What happened. Common ones: <code>login_success</code>, <code>login_failure</code>, <code>login_blocked</code> (BF lockout active), <code>bruteforce_lockout</code> (a new IP just got blocked), <code>probing_404</code> (bot tried a known sensitive URL), <code>anomaly_detected</code> (login that doesn't match the user's usual pattern), <code>hardening_block</code> (REST/honeypot/geo-block fired), <code>file_added/changed/missing</code>, <code>malware_suspect</code>, <code>vulnerability_found</code>, <code>2fa_required/passed/failed</code>."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:213
msgid "<code>info</code> = normal activity, <code>warn</code> = worth a glance, <code>high</code> = important investigate, <code>critical</code> = fire-on-the-roof. Severity decides which events trigger real-time email and dashboard nags."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:214
msgid "Source IP of the request. Anonymized to /24 (IPv4) or /64 (IPv6) by default — turn that off in Privacy / GDPR if you need full IPs for forensics."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:215
msgid "Username being attempted (for login events) or the user who triggered the event. May be hashed if pseudonymization is enabled."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:216
msgid "Context"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:216
msgid "JSON blob with event-specific extras: paths for file events, CVE IDs for vulnerability events, the rule that matched for malware, the score breakdown for anomalies. The \"_v\" field is the plugin version that wrote the event — useful when triaging post-update bugs."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:217
msgid "\"Block this IP\" creates a manual firewall block on the IP for the configured lockout duration. \"Unblock\" removes an existing block. No \"delete event\" — events stay until the retention cutoff."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:223
msgid "<strong>Email alerts on critical events + a daily summary.</strong> The daily digest is the single most important email — pure ASCII, works with every mail provider, and tells you in 30 seconds if something needs attention."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:225
msgid "Real-time alerts"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:226
msgid "Sent immediately when critical events fire: brute-force lockouts, new admin users, anomalous logins, malware-pattern hits. Quiet hours can suppress non-critical alerts overnight, with critical ones overriding the silence."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:228
msgid "One email per day with the threat score, 24h-vs-7d trend, top attacker IPs, top targeted usernames, top probing patterns, vulnerable active components, and an ASCII heatmap of the last 24 hours. Pure-ASCII so it survives every mail pipeline (php mail / classic SMTP / OAuth-SMTP / Microsoft Graph) without character corruption."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:229
msgid "Where is this digest from?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:230
msgid "Same data the dashboard widget shows, formatted for inbox consumption. The bottom of every email tells the recipient how to disable it — important so you don't train people to ignore them."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:236
msgid "<strong>Network-wide settings + per-site overrides for WordPress Multisite installations.</strong> Configure once at the network level, override only where needed."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:238
msgid "How configuration cascades"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:239
msgid "On Multisite, Brainwerk Security Suite stores defaults in network-options (sitemeta), and any setting saved at a single-site level overrides them just for that site. Most network admins set strict defaults and let nothing override; agencies that host clients on subsites can give each client their own thresholds."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:240
msgid "Aggregate dashboard"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:241
msgid "The cross-site stats appear in the network-admin dashboard widget — you see \"12 lockouts across 7 sites in the last 24h\" instead of 12 separate single-site widgets."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:242
msgid "Single-site install?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:243
msgid "This tab is only meaningful on Multisite. On a single-site install you can ignore it — every setting saves to that one site's options."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:249
msgid "<strong>What data Brainwerk Security Suite stores about your visitors, and your DSGVO/GDPR controls for it.</strong> This is the page you copy-paste from when updating your site's privacy policy."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:251
msgid "Default-on privacy"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:252
msgid "IP anonymization is on by default — IPv4 addresses are stored as /24 (e.g. 1.2.3.0), IPv6 as /64. Username pseudonymization is off by default but can be turned on if you want only hashed usernames in the log. Log retention is 30 days; older entries are auto-deleted."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:253
msgid "Privacy-policy snippet generator"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:254
msgid "The generator produces ready-to-paste DE/EN text describing what Brainwerk Security Suite stores and for how long. Copy it into your \"Datenschutzerklärung\" / \"Privacy Policy\" page so you have an honest, accurate disclosure."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:255
msgid "External services"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:256
msgid "The free plugin makes ONE outbound call: the daily vulnerability check sends slug+version of installed plugins/themes to wpvulnerability.net. Nothing else leaves your server. You can disable the scanner under \"Vulnerabilities → Settings\" if you prefer fully air-gapped operation."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:262
msgid "<strong>Manual one-shot actions.</strong> Send a test email, force a log cleanup, retroactively anonymize old log entries — things you do once or twice, not in daily operation."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:264
msgid "Test the alert email"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:265
msgid "Sends a sample notification to the address configured under Notifications. Use this to verify the email pipeline works (SMTP, Office 365 Graph, whatever you use) BEFORE a real attack — better to find out the email goes to spam now than during an incident."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:266
msgid "Cleanup logs now"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:267
msgid "Manually trigger the daily retention-cleanup. Useful right after you reduced the retention setting and want the older entries gone immediately."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:268
msgid "Retroactive IP anonymization"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:269
msgid "If you turned anonymization ON after the plugin had already been collecting raw IPs, this rewrites the historical entries to the anonymized form. One-time operation — safe to run, irreversible."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:275
msgid "<strong>The \"we think we've been hacked — now what?\" module.</strong> Forensic triage, evidence preservation, staged lockdown and a written incident report. It detects, preserves and reports — it never auto-deletes anything."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:277
msgid "What is an \"incident\" here?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:278
msgid "A suspected compromise: a web shell finding, an unexplained admin user, files changing without an update. Instead of panicking, you start a structured response from this tab: collect the facts, secure the evidence, optionally restrict the site, and get a report you can hand to your host, your boss, or the data-protection officer."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:279
msgid "Why no automatic cleanup?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:280
msgid "Deliberate design decision: every destructive action is human-gated. Automated \"cleaners\" routinely delete the evidence you need to understand HOW the attacker got in — and if you don't know that, they'll be back through the same door. This module preserves first, and lets YOU decide what to remove."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:281
msgid "Current status of the module"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:282
msgid "The foundation is live: incident records, the opt-in toggle and the manual audit trigger. Automated triggers, the forensic engine and the staged lockdown ship in upcoming phases — each one opt-in. Until then the tab is safe to leave disabled."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:288
msgid "<strong>Optional, privacy-preserving attack-data sharing between Brainwerk Security Suite sites.</strong> Your site reports anonymized attacker indicators; in return it receives a signed feed of threats seen across the network — including virtual-patch firewall rules."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:290
msgid "What exactly leaves my server?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:291
msgid "Only verified facts about blocked attacks: an irreversibly hashed IP indicator (rotating weekly salt — no raw IPs, not even reversible by us), the attack category, the matched rule, HTTP method and status. No URLs with visitor data, no usernames, no e-mail addresses. The \"What was sent\" audit list on this tab shows every single event, so you can verify this claim yourself."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:292
msgid "What do I get back?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:293
msgid "A cryptographically signed (Ed25519) intel feed: attacker indicators observed on multiple sites, and curated firewall rules (\"virtual patches\") for actively exploited vulnerabilities. The plugin verifies the signature against a pinned public key before applying anything — a tampered or spoofed feed is rejected outright (fail-closed)."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:294
msgid "Is this on by default?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:295
msgid "No. Everything here is opt-in: sharing is off until you enable it, and IP-blocking based on the received feed is a second, separate opt-in. Applying the virtual-patch rules is on once you join, because that's the main benefit and carries no privacy cost."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:296
msgid "EU hosting"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:297
msgid "The central endpoint is operated on EU infrastructure under GDPR. Retention on the server is time-limited; indicators age out automatically."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:303
msgid "<strong>Nine self-contained extra modules, each with its own toggle — all OFF by default.</strong> Pwned-password check, extra security headers, local CAPTCHA, live traffic view, core file compare, privacy dashboard, trusted devices, magic login links, and the Web Application Firewall."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:305
msgid "Why a separate page?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:306
msgid "These optional modules add extra layers of protection — each is off by default. Each card on this page is one module — a toggle, its settings, and where applicable a small data view. Enable only what you need; every module you leave off costs zero performance."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:307
msgid "Which ones are worth turning on first?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:308
msgid "For most sites: the WAF (blocks SQL-injection, XSS and traversal patterns before WordPress processes them — start with paranoia level 1), the Pwned-password check (rejects passwords that appeared in public breaches, checked via k-anonymity — the password itself never leaves your server), and the local CAPTCHA (pure-PHP arithmetic puzzle, no Google services, no consent banner needed)."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:309
msgid "Anything with lockout potential?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:310
msgid "The WAF on a high paranoia level can block legitimate requests of unusual plugins — watch the Firewall tab after enabling and lower the level if you see false positives. Magic login links replace passwords with e-mailed one-time links; make sure your site can reliably send mail before relying on them."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:316
msgid "<strong>Upgrade to Brainwerk Security Suite Pro.</strong> The free plugin works on its own — Pro adds WebAuthn / Passkeys, geo-blocking, EU-hosted cloud threat intel, AI-assisted incident analysis (BYOK Mistral or self-hosted Ollama), Slack/Discord/Telegram/Teams notifications, multisite aggregate dashboard, and white-label mode."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:318
msgid "Where do I get Pro?"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:319
msgid "From security-suite.brainwerk.at. Brainwerk Security Suite Pro is a separate plugin (.zip) that you install alongside this free one — license activation happens inside the Pro plugin, no key has to be entered here."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:320
msgid "Pricing model"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:321
msgid "Per-installation tiers (1 site / 5 sites / unlimited). Annual subscription with continued updates and priority support. Sold through Freemius — EU-friendly checkout, full GDPR documentation."
msgstr ""

#: includes/class-shieldforge-admin-intros.php:360
msgid "Read more about what this tool is for"
msgstr ""

#: includes/class-shieldforge-admin-intros.php:384
msgid "Columns explained"
msgstr ""

#: includes/class-shieldforge-ajax.php:27
msgid "Invalid nonce."
msgstr ""

#: includes/class-shieldforge-ajax.php:30
#: includes/class-shieldforge-twofactor-profile.php:204
#: includes/class-shieldforge-twofactor-profile.php:227
#: includes/class-shieldforge-twofactor-profile.php:240
msgid "Insufficient permissions."
msgstr ""

#: includes/class-shieldforge-ajax.php:39
#: includes/class-shieldforge-ajax.php:57
msgid "Invalid IP."
msgstr ""

#. translators: 1: z-score, 2: classification label
#: includes/class-shieldforge-anomaly.php:154
#, php-format
msgid "Z-score %1$s (%2$s)"
msgstr ""

#: includes/class-shieldforge-anomaly.php:294
#: includes/class-shieldforge-anomaly.php:299
#: includes/class-shieldforge-anomaly.php:302
msgid "unknown"
msgstr ""

#: includes/class-shieldforge-anomaly.php:295
msgid "desktop browser"
msgstr ""

#: includes/class-shieldforge-anomaly.php:296
msgid "mobile browser"
msgstr ""

#: includes/class-shieldforge-anomaly.php:297
msgid "CLI / script"
msgstr ""

#: includes/class-shieldforge-anomaly.php:298
msgid "bot / crawler"
msgstr ""

#: includes/class-shieldforge-anomaly.php:307
msgid "login hour (UTC)"
msgstr ""

#: includes/class-shieldforge-anomaly.php:308
msgid "IP family (4 / 6)"
msgstr ""

#: includes/class-shieldforge-anomaly.php:309
msgid "user-agent class"
msgstr ""

#: includes/class-shieldforge-anomaly.php:323
msgid "no IP"
msgstr ""

#: includes/class-shieldforge-badge.php:38
msgid "Brainwerk Security Suite Pro"
msgstr ""

#: includes/class-shieldforge-bruteforce.php:43
msgid "<strong>Access denied.</strong> Too many failed login attempts. Try again later."
msgstr ""

#: includes/class-shieldforge-bruteforce.php:56
msgid "<strong>Access denied.</strong> This account has been temporarily locked due to repeated failed sign-ins. Try again later."
msgstr ""

#: includes/class-shieldforge-captcha.php:94
msgid "<strong>Sicherheits-Check fehlgeschlagen.</strong> Bitte CAPTCHA erneut bestätigen."
msgstr ""

#: includes/class-shieldforge-captcha.php:103
msgid "CAPTCHA-Check fehlgeschlagen. Bitte erneut versuchen."
msgstr ""

#: includes/class-shieldforge-captcha.php:113
#: includes/class-shieldforge-captcha.php:115
msgid "CAPTCHA-Check fehlgeschlagen."
msgstr ""

#: includes/class-shieldforge-hardening.php:148
msgid "REST API access for anonymous users is restricted."
msgstr ""

#: includes/class-shieldforge-healthcheck.php:162
msgid "Server sees every visitor as 127.0.0.1 — IP-based protection is broken."
msgstr ""

#: includes/class-shieldforge-healthcheck.php:163
msgid "Your web server is running behind a proxy or multiplexer (typical: sslh, Cloudflare Tunnel, nginx-stream, Apache mod_proxy) that does not forward the original client IP. Brainwerk Security Suite therefore counts every brute-force attempt against the same bucket — five failed logins from any visitor will lock out 127.0.0.1, which silently blocks every user including yourself. Probing detection, anomaly scoring and threat intel are equally affected."
msgstr ""

#: includes/class-shieldforge-healthcheck.php:164
msgid "Either (a) configure your proxy to forward the real client IP via PROXY-protocol or X-Forwarded-For header AND set <code>define('SHIELDFORGE_TRUSTED_PROXIES', array('127.0.0.1'));</code> in wp-config.php, or (b) keep brute-force protection disabled until the proxy is fixed."
msgstr ""

#: includes/class-shieldforge-healthcheck.php:175
msgid "Privacy: IP anonymization is OFF."
msgstr ""

#: includes/class-shieldforge-healthcheck.php:176
msgid "Full IP addresses are stored in the Brainwerk Security Suite log. In the EU this is personal data under GDPR and requires either a documented lawful basis or anonymization. Brainwerk Security Suite ships with anonymization on by default for this reason."
msgstr ""

#: includes/class-shieldforge-healthcheck.php:177
msgid "Enable \"Anonymize IP addresses\" in the Privacy / GDPR tab unless you have a documented legal basis to keep full IPs."
msgstr ""

#: includes/class-shieldforge-healthcheck.php:188
msgid "Brute-force protection is currently disabled."
msgstr ""

#: includes/class-shieldforge-healthcheck.php:189
msgid "Failed login events are still being logged for visibility, but no IP will be locked out after repeated failures. Re-enable this only after verifying the server passes the IP-masking check above."
msgstr ""

#: includes/class-shieldforge-healthcheck.php:190
msgid "Re-enable in the Login & Auth tab."
msgstr ""

#: includes/class-shieldforge-healthcheck.php:234
msgid "Dismiss this notice"
msgstr ""

#: includes/class-shieldforge-honeypot.php:69
msgid "Leave this field empty"
msgstr ""

#: includes/class-shieldforge-honeypot.php:94
#: includes/class-shieldforge-honeypot.php:104
msgid "Submission blocked: bot heuristic triggered."
msgstr ""

#: includes/class-shieldforge-honeypot.php:118
msgid "Submission blocked."
msgstr ""

#: includes/class-shieldforge-honeypot.php:119
msgid "Blocked"
msgstr ""

#: includes/class-shieldforge-i18n.php:129
msgid "WordPress default (automatic)"
msgstr ""

#: includes/class-shieldforge-incident.php:107
msgid "You do not have permission to do this."
msgstr ""

#: includes/class-shieldforge-incident.php:127
msgid "Notfall-Audit angefordert. Das Modul-Gerüst ist aktiv — die Forensik-/Triage-Engine wird in einer späteren Phase ergänzt (es wurde nichts gescannt oder verändert)."
msgstr ""

#: includes/class-shieldforge-login-url.php:149
msgid "The requested page could not be found."
msgstr ""

#: includes/class-shieldforge-magic-link.php:43
msgid "🔗 Stattdessen per Magic-Link einloggen (passwortlos)"
msgstr ""

#: includes/class-shieldforge-magic-link.php:55
msgid "Magic-Link anfordern"
msgstr ""

#: includes/class-shieldforge-magic-link.php:58
msgid "Benutzername oder E-Mail-Adresse"
msgstr ""

#: includes/class-shieldforge-magic-link.php:59
msgid "Magic-Link senden"
msgstr ""

#: includes/class-shieldforge-magic-link.php:60
msgid "Wir schicken einen einmaligen Anmelde-Link an die hinterlegte E-Mail-Adresse. Der Link ist 15 Minuten gültig."
msgstr ""

#: includes/class-shieldforge-magic-link.php:61
msgid "← Zurück zum normalen Login"
msgstr ""

#: includes/class-shieldforge-magic-link.php:86
#, php-format
msgid "[%s] Ihr Magic-Login-Link"
msgstr ""

#: includes/class-shieldforge-magic-link.php:87
#: includes/class-shieldforge-trusted-devices.php:90
#, php-format
msgid "Hallo %s,"
msgstr ""

#: includes/class-shieldforge-magic-link.php:88
msgid "Klicken Sie innerhalb der nächsten 15 Minuten auf folgenden Link, um sich einzuloggen — kein Passwort nötig:"
msgstr ""

#: includes/class-shieldforge-magic-link.php:89
msgid "Jetzt einloggen"
msgstr ""

#: includes/class-shieldforge-magic-link.php:90
msgid "Sie haben diesen Link nicht angefordert? Dann ignorieren Sie diese Mail — niemand kann mit Ihrem Account einloggen ohne diesen Link UND Ihren ggf. konfigurierten 2FA-Code."
msgstr ""

#: includes/class-shieldforge-magic-link.php:99
msgid "Magic-Link versandt"
msgstr ""

#: includes/class-shieldforge-magic-link.php:101
msgid "✓ Falls dieser Account existiert, ist eine Mail mit Login-Link unterwegs."
msgstr ""

#: includes/class-shieldforge-magic-link.php:102
msgid "Prüfen Sie Ihren Posteingang (auch Spam-Ordner). Der Link ist 15 Minuten gültig."
msgstr ""

#: includes/class-shieldforge-magic-link.php:104
msgid "← Zurück zum Login"
msgstr ""

#: includes/class-shieldforge-magic-link.php:111
msgid "Ungültiger Magic-Link."
msgstr ""

#: includes/class-shieldforge-magic-link.php:115
msgid "Link bereits verwendet oder abgelaufen."
msgstr ""

#: includes/class-shieldforge-magic-link.php:119
msgid "Magic-Link abgelaufen. Bitte erneut anfordern."
msgstr ""

#: includes/class-shieldforge-magic-link.php:123
msgid "Ungültiger Token."
msgstr ""

#: includes/class-shieldforge-magic-link.php:128
msgid "User nicht gefunden."
msgstr ""

#. translators: %s: site name
#: includes/class-shieldforge-notifications.php:27
#, php-format
msgid "[%s] Brainwerk Security Suite: brute-force lockout triggered"
msgstr ""

#. translators: 1: IP, 2: failure count, 3: username
#: includes/class-shieldforge-notifications.php:32
#, php-format
msgid "A brute-force lockout was triggered.\\n\\nIP: %1$s\\nFailed attempts: %2$d\\nLast tried username: %3$s\\n"
msgstr ""

#: includes/class-shieldforge-notifications.php:42
#, php-format
msgid "[%s] Brainwerk Security Suite: new administrator created"
msgstr ""

#: includes/class-shieldforge-notifications.php:44
#, php-format
msgid ""
"A new user with role '%1$s' was created.\n"
"\n"
"User: %2$s (ID %3$d)\n"
"Email: %4$s\n"
"Created by: %5$s\n"
""
msgstr ""

#: includes/class-shieldforge-notifications.php:55
#, php-format
msgid "[%s] Brainwerk Security Suite: probing burst detected"
msgstr ""

#: includes/class-shieldforge-notifications.php:57
#, php-format
msgid ""
"An IP triggered the probing alert threshold.\n"
"\n"
"IP: %1$s\n"
"Probing 404s in last hour: %2$d\n"
""
msgstr ""

#. translators: 1: site name, 2: threat label, 3: numeric score
#: includes/class-shieldforge-notifications.php:115
#, php-format
msgid "[%1$s] Brainwerk Security Suite digest - %2$s threat (%3$d/100)"
msgstr ""

#: includes/class-shieldforge-onboarding.php:97
msgid "Welcome to Brainwerk Security Suite."
msgstr ""

#: includes/class-shieldforge-onboarding.php:98
msgid "A short setup wizard will help you tune the privacy, login, and notification defaults."
msgstr ""

#: includes/class-shieldforge-onboarding.php:101
msgid "Start setup"
msgstr ""

#: includes/class-shieldforge-onboarding.php:102
msgid "Skip"
msgstr ""

#: includes/class-shieldforge-privacy-dashboard.php:39
msgid "Vertrag (Schul-Anmeldung) bzw. berechtigtes Interesse (Admin-Konten)"
msgstr ""

#: includes/class-shieldforge-privacy-dashboard.php:40
msgid "Vertrag"
msgstr ""

#: includes/class-shieldforge-privacy-dashboard.php:41
msgid "Einwilligung des Kommentierenden"
msgstr ""

#: includes/class-shieldforge-privacy-dashboard.php:43
msgid "Berechtigtes Interesse (Brute-Force-Schutz, Art. 6 Abs. 1 lit. f DSGVO)"
msgstr ""

#: includes/class-shieldforge-privacy-dashboard.php:44
msgid "Berechtigtes Interesse"
msgstr ""

#: includes/class-shieldforge-privacy-dashboard.php:45
msgid "Rechtliche Verpflichtung (Nachvollziehbarkeit Admin-Aktionen)"
msgstr ""

#: includes/class-shieldforge-privacy-dashboard.php:47
msgid "Berechtigtes Interesse (Reichweitenmessung, anonymisiert)"
msgstr ""

#: includes/class-shieldforge-privacy-dashboard.php:49
msgid "Vertrag (Schulanmeldung)"
msgstr ""

#: includes/class-shieldforge-privacy-dashboard.php:80
#: includes/class-shieldforge-privacy-dashboard.php:96
msgid "Bitte gültige E-Mail-Adresse angeben."
msgstr ""

#. translators: %s: number of times leaked
#: includes/class-shieldforge-pwned.php:43
#, php-format
msgid "<strong>Sicherheitswarnung:</strong> Dieses Passwort taucht <strong>%s mal</strong> in bekannten Daten-Leaks auf (Quelle: HaveIBeenPwned). Bitte wählen Sie ein anderes Passwort."
msgstr ""

#: includes/class-shieldforge-pwned.php:58
#, php-format
msgid "Dieses Passwort taucht %s mal in bekannten Daten-Leaks auf. Bitte ein anderes wählen."
msgstr ""

#: includes/class-shieldforge-pwned.php:71
#, php-format
msgid "Dieses Passwort wurde %s mal geleakt. Bitte ein anderes wählen."
msgstr ""

#: includes/class-shieldforge-quick-setup.php:33
msgid "School / Education"
msgstr ""

#: includes/class-shieldforge-quick-setup.php:35
msgid "Multiple staff accounts, occasional content edits, low e-commerce surface. Forced 2FA for admins + editors, audit log on, vuln scanner on."
msgstr ""

#: includes/class-shieldforge-quick-setup.php:67
msgid "Agency / Multi-client"
msgstr ""

#: includes/class-shieldforge-quick-setup.php:69
msgid "You manage many client sites. Maximum hardening, mandatory 2FA for ALL roles, every detection module on, audit-log retention longer."
msgstr ""

#: includes/class-shieldforge-quick-setup.php:103
msgid "E-commerce / Shop"
msgstr ""

#: includes/class-shieldforge-quick-setup.php:105
msgid "Customer accounts, payment processing. Honeypot on every form, anomaly detection on, force 2FA for shop managers."
msgstr ""

#: includes/class-shieldforge-quick-setup.php:134
msgid "Personal blog / Portfolio"
msgstr ""

#: includes/class-shieldforge-quick-setup.php:136
msgid "One-or-two-person setup, comment spam is the main worry. Lighter defaults, honeypot on comments, no forced 2FA for casual contributors."
msgstr ""

#. translators: %s: profile label
#: includes/class-shieldforge-quick-setup.php:203
#, php-format
msgid "Quick-setup profile applied: %s. You can fine-tune any individual setting from here."
msgstr ""

#: includes/class-shieldforge-quick-setup.php:235
msgid "Quick start: pick a site profile"
msgstr ""

#: includes/class-shieldforge-quick-setup.php:236
msgid "One click sets sensible defaults for your site type. You can fine-tune any individual setting later."
msgstr ""

#: includes/class-shieldforge-quick-setup.php:241
msgid "Hide this banner — you can re-open it from the Tools tab"
msgstr ""

#: includes/class-shieldforge-quick-setup.php:254
msgid "Apply this profile →"
msgstr ""

#: includes/class-shieldforge-sanity.php:38
msgid "Daily log cleanup"
msgstr ""

#: includes/class-shieldforge-sanity.php:39
msgid "Daily file-integrity scan"
msgstr ""

#: includes/class-shieldforge-sanity.php:40
msgid "Daily vulnerability scan"
msgstr ""

#: includes/class-shieldforge-sanity.php:61
msgid "Healthcheck finding"
msgstr ""

#: includes/class-shieldforge-sanity.php:102
#: includes/class-shieldforge-sanity.php:114
msgid "Plugin-header version vs. SHIELDFORGE_VERSION constant"
msgstr ""

#. translators: 1: header version, 2: constant version
#: includes/class-shieldforge-sanity.php:106
#, php-format
msgid "Header says %1$s but constant is %2$s. Re-run bin/bump-version to re-sync."
msgstr ""

#: includes/class-shieldforge-sanity.php:116
#, php-format
msgid "Both at %s."
msgstr ""

#: includes/class-shieldforge-sanity.php:130
msgid "Database schema migration pending"
msgstr ""

#: includes/class-shieldforge-sanity.php:132
#, php-format
msgid "DB at v%1$s, code expects v%2$s. Visit any wp-admin page to trigger admin_init migration."
msgstr ""

#: includes/class-shieldforge-sanity.php:138
msgid "Database schema migration"
msgstr ""

#: includes/class-shieldforge-sanity.php:140
#, php-format
msgid "DB schema at v%s — current."
msgstr ""

#: includes/class-shieldforge-sanity.php:152
#, php-format
msgid "Next run in %s."
msgstr ""

#: includes/class-shieldforge-sanity.php:160
msgid "Cron hook not scheduled. Deactivate + reactivate plugin to repair."
msgstr ""

#: includes/class-shieldforge-sanity.php:183
#: includes/class-shieldforge-sanity.php:191
msgid "Required database tables"
msgstr ""

#: includes/class-shieldforge-sanity.php:185
#, php-format
msgid "Missing: %s. Reactivate plugin to recreate."
msgstr ""

#: includes/class-shieldforge-sanity.php:193
#, php-format
msgid "All %d core tables present."
msgstr ""

#: includes/class-shieldforge-sanity.php:202
#: includes/class-shieldforge-sanity.php:210
msgid "SHIELDFORGE_FORCE_PRO override"
msgstr ""

#: includes/class-shieldforge-sanity.php:204
msgid "Constant is set in wp-config.php — Pro features are unlocked WITHOUT a real licence. Fine for testing, remove for production."
msgstr ""

#: includes/class-shieldforge-sanity.php:212
msgid "Not set — Pro features gate on real licence as intended."
msgstr ""

#: includes/class-shieldforge-sanity.php:224
msgid "On — IPv4 anonymized to /24, IPv6 to /64."
msgstr ""

#: includes/class-shieldforge-sanity.php:225
msgid "Off — full IPs are stored. Verify your privacy policy reflects this; you may need explicit user consent under GDPR."
msgstr ""

#: includes/class-shieldforge-sanity.php:235
#: includes/class-shieldforge-sanity.php:244
#: includes/class-shieldforge-sanity.php:252
msgid "Log retention window"
msgstr ""

#: includes/class-shieldforge-sanity.php:237
#, php-format
msgid "Only %d days — may be too short for incident-response forensics."
msgstr ""

#: includes/class-shieldforge-sanity.php:246
#, php-format
msgid "%d days is unusually long. GDPR data-minimization principles suggest the shortest period that still meets your business need."
msgstr ""

#: includes/class-shieldforge-sanity.php:254
#, php-format
msgid "%d days — sensible default."
msgstr ""

#: includes/class-shieldforge-sanity.php:265
msgid "Brute-force protection"
msgstr ""

#: includes/class-shieldforge-sanity.php:267
msgid "OFF — site is wide open to password-guessing. Turn on under Anmeldung tab."
msgstr ""

#: includes/class-shieldforge-sanity.php:274
msgid "Core hardening (XML-RPC etc.)"
msgstr ""

#: includes/class-shieldforge-sanity.php:276
msgid "XML-RPC is on. Most sites don't need it; it's a common brute-force vector. Turn off under Härtung tab unless you use Jetpack mobile / mobile WordPress apps."
msgstr ""

#: includes/class-shieldforge-sanity.php:282
msgid "Critical security modules"
msgstr ""

#: includes/class-shieldforge-sanity.php:284
msgid "Brute-force + XML-RPC hardening both active."
msgstr ""

#: includes/class-shieldforge-sanity.php:303
msgid "2FA users with no recovery codes"
msgstr ""

#. translators: 1: count, 2: usernames
#: includes/class-shieldforge-sanity.php:307
#, php-format
msgid "%1$d user (%2$s) has 2FA enabled but no recovery codes — they will be locked out if they lose their authenticator."
msgid_plural "%1$d users (%2$s) have 2FA enabled but no recovery codes — they will be locked out if they lose their authenticator."
msgstr[0] ""
msgstr[1] ""

#: includes/class-shieldforge-sanity.php:316
msgid "2FA recovery codes"
msgstr ""

#: includes/class-shieldforge-sanity.php:318
msgid "Every 2FA-enrolled user has recovery codes on file."
msgstr ""

#: includes/class-shieldforge-sanity.php:348
msgid "Administrators without a second factor"
msgstr ""

#: includes/class-shieldforge-sanity.php:351
#, php-format
msgid "%d admin without 2FA / Passkey: %s. Highest-leverage account on the site — should be protected."
msgid_plural "%d admins without 2FA / Passkey: %s. Highest-leverage accounts on the site — should be protected."
msgstr[0] ""
msgstr[1] ""

#: includes/class-shieldforge-sanity.php:360
msgid "Administrators with a second factor"
msgstr ""

#: includes/class-shieldforge-sanity.php:362
msgid "Every administrator has 2FA or a Passkey enabled."
msgstr ""

#: includes/class-shieldforge-sanity.php:381
msgid "Test fixtures in plugins directory"
msgstr ""

#: includes/class-shieldforge-sanity.php:383
#, php-format
msgid "Found: %s. Delete before going live."
msgstr ""

#: includes/class-shieldforge-sanity.php:389
msgid "Test fixtures"
msgstr ""

#: includes/class-shieldforge-sanity.php:391
msgid "No leftover test files in the plugins directory."
msgstr ""

#: includes/class-shieldforge-sanity.php:401
msgid "wp.org readme.txt"
msgstr ""

#: includes/class-shieldforge-sanity.php:403
msgid "readme.txt is missing — wp.org requires it."
msgstr ""

#: includes/class-shieldforge-sanity.php:413
#: includes/class-shieldforge-sanity.php:421
#: includes/class-shieldforge-sanity.php:429
msgid "readme.txt Stable tag"
msgstr ""

#: includes/class-shieldforge-sanity.php:415
#, php-format
msgid "Stable tag is %1$s but plugin is %2$s. Bump readme before tagging the wp.org release."
msgstr ""

#: includes/class-shieldforge-sanity.php:423
#, php-format
msgid "Matches plugin version (%s)."
msgstr ""

#: includes/class-shieldforge-sanity.php:431
msgid "No \"Stable tag:\" line found in readme.txt."
msgstr ""

#: includes/class-shieldforge-sanity.php:448
#: includes/class-shieldforge-sanity.php:456
msgid "Translation files"
msgstr ""

#: includes/class-shieldforge-sanity.php:450
#, php-format
msgid "Missing: %s."
msgstr ""

#: includes/class-shieldforge-sanity.php:458
msgid "POT + DE PO/MO files all present in languages/."
msgstr ""

#: includes/class-shieldforge-threat-intel.php:146
msgid "Failed-login volume"
msgstr ""

#: includes/class-shieldforge-threat-intel.php:152
msgid "Distinct attacker IPs"
msgstr ""

#: includes/class-shieldforge-threat-intel.php:158
msgid "Probing 404 density"
msgstr ""

#: includes/class-shieldforge-threat-intel.php:174
msgid "Escalation signals (lockouts, anomalies, blocks, file changes, malware suspects)"
msgstr ""

#: includes/class-shieldforge-threat-intel.php:466
msgid "24-Stunden-Angriffsaktivität"
msgstr ""

#: includes/class-shieldforge-threat-intel.php:830
msgid "Angriffs-Korridore: Herkunfts- zu Ziel-Ländern"
msgstr ""

#: includes/class-shieldforge-tools.php:24
msgid "No valid recipient address."
msgstr ""

#: includes/class-shieldforge-tools.php:26
#, php-format
msgid "[%s] Brainwerk Security Suite test mail"
msgstr ""

#: includes/class-shieldforge-tools.php:27
msgid ""
"This is a Brainwerk Security Suite test message.\n"
"\n"
"If you received this, alert delivery is working."
msgstr ""

#: includes/class-shieldforge-tools.php:29
msgid "wp_mail() returned false."
msgstr ""

#: includes/class-shieldforge-tools.php:44
msgid "Invalid import payload."
msgstr ""

#: includes/class-shieldforge-tools.php:47
msgid "Payload is not from Brainwerk Security Suite."
msgstr ""

#: includes/class-shieldforge-tools.php:75
msgid "Database tables present"
msgstr ""

#: includes/class-shieldforge-tools.php:77
msgid "shieldforge_log not found — re-activate the plugin."
msgstr ""

#: includes/class-shieldforge-tools.php:81
msgid "Daily digest cron scheduled"
msgstr ""

#: includes/class-shieldforge-tools.php:85
#: includes/class-shieldforge-tools.php:93
msgid "Not scheduled"
msgstr ""

#: includes/class-shieldforge-tools.php:89
msgid "Cleanup cron scheduled"
msgstr ""

#: includes/class-shieldforge-tools.php:98
msgid "Notification address set"
msgstr ""

#: includes/class-shieldforge-tools.php:100
msgid "No address configured"
msgstr ""

#: includes/class-shieldforge-tools.php:107
msgid "Enabled"
msgstr ""

#: includes/class-shieldforge-tools.php:108
msgid "Disabled — full IPs will be stored"
msgstr ""

#: includes/class-shieldforge-trusted-devices.php:89
#, php-format
msgid "[%s] Neuer Login von unbekanntem Gerät"
msgstr ""

#: includes/class-shieldforge-trusted-devices.php:91
msgid "Es hat sich jemand mit Ihrem Account eingeloggt — von einem Gerät, das wir bisher nicht gesehen haben."
msgstr ""

#: includes/class-shieldforge-trusted-devices.php:92
msgid "Details:"
msgstr ""

#: includes/class-shieldforge-trusted-devices.php:93
msgid "Zeit:"
msgstr ""

#: includes/class-shieldforge-trusted-devices.php:94
msgid "IP (anonymisiert):"
msgstr ""

#: includes/class-shieldforge-trusted-devices.php:95
msgid "Gerät:"
msgstr ""

#: includes/class-shieldforge-trusted-devices.php:97
msgid "<strong>Waren Sie das?</strong> Dann ist alles in Ordnung. Sie können diese Mail ignorieren."
msgstr ""

#: includes/class-shieldforge-trusted-devices.php:98
msgid "<strong>Waren Sie das nicht?</strong> Ändern Sie sofort Ihr Passwort und aktivieren Sie Zwei-Faktor-Authentifizierung (2FA). Verständigen Sie ggf. die Administration."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:85
msgid "Two-factor authentication (Brainwerk Security Suite)"
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:89
msgid "Site policy requires two-factor authentication for your role. Set it up below."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:95
msgid "2FA is active."
msgstr ""

#. translators: %d: remaining recovery codes
#: includes/class-shieldforge-twofactor-profile.php:99
#, php-format
msgid "%d recovery code left."
msgid_plural "%d recovery codes left."
msgstr[0] ""
msgstr[1] ""

#: includes/class-shieldforge-twofactor-profile.php:105
msgid "You are running low on recovery codes. Generate a fresh batch to avoid being locked out."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:113
msgid "Generate fresh recovery codes? Existing codes will stop working immediately."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:114
msgid "Really disable 2FA for this account? You will lose phishing-resistant login."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:125
msgid "Regenerate recovery codes"
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:134
msgid "Disable two-factor"
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:140
msgid "This user has not set up 2FA yet. Only the user themselves can enable it."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:150
msgid "Step 1."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:150
msgid "Open your authenticator app (Google Authenticator, Microsoft Authenticator, Authy, 2FAS, Aegis, FreeOTP) and add a new account using the secret below."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:152
msgid "Setup secret (case-insensitive, spaces ignored):"
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:157
msgid "Algorithm: SHA-1 · Digits: 6 · Period: 30s"
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:159
msgid "Open in app (mobile only)"
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:170
msgid "Step 2."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:170
msgid "Enter the 6-digit code your app shows right now."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:186
msgid "Confirm and enable 2FA"
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:209
msgid "Only the user can complete their own 2FA setup."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:243
msgid "Only the user can regenerate their own recovery codes."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:270
msgid "Two-factor authentication disabled."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:273
msgid "That code did not match. Check your device clock and try again."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:281
msgid "Save these recovery codes now — they are shown only once."
msgstr ""

#: includes/class-shieldforge-twofactor-profile.php:282
msgid "Each code works exactly once. Store them somewhere safe (password manager, printed copy in a drawer). Without them, losing your authenticator means losing access."
msgstr ""

#: includes/class-shieldforge-twofactor.php:373
msgid "Too many invalid codes. Please wait a few minutes and try again."
msgstr ""

#: includes/class-shieldforge-twofactor.php:398
msgid "Invalid 2FA code. Try again or use a recovery code."
msgstr ""

#: includes/class-shieldforge-twofactor.php:422
msgid "Unable to render 2FA form (login subsystem unavailable)."
msgstr ""

#: includes/class-shieldforge-twofactor.php:428
msgid "Authentication code"
msgstr ""

#: includes/class-shieldforge-twofactor.php:440
msgid "Enter the 6-digit code from your authenticator app, or one of your recovery codes (e.g. ABCD-EFGH)."
msgstr ""

#: includes/class-shieldforge-twofactor.php:444
msgid "Verify"
msgstr ""

#: includes/class-shieldforge-twofactor.php:448
msgid "Back to login"
msgstr ""

#: includes/sensor/class-shieldforge-sensor.php:61
msgid "Every 5 minutes (ShieldForge sensor)"
msgstr ""

#: includes/sensor/class-shieldforge-sensor.php:102
msgid "Site registered with the Threat Network."
msgstr ""

#: includes/sensor/class-shieldforge-sensor.php:103
#, php-format
msgid "Registration failed: %s"
msgstr ""

#: includes/sensor/class-shieldforge-sensor.php:107
msgid "This site is no longer registered. No further data will be sent."
msgstr ""

#: includes/sensor/class-shieldforge-sensor.php:112
msgid "Network salt refreshed."
msgstr ""

#: includes/sensor/class-shieldforge-sensor.php:113
#, php-format
msgid "Salt refresh failed: %s"
msgstr ""

#: includes/sensor/class-shieldforge-sensor.php:118
#, php-format
msgid "Sent %d event(s) to the Threat Network."
msgstr ""

#: includes/sensor/class-shieldforge-sensor.php:119
#, php-format
msgid "Send failed: %s"
msgstr ""
