{
  "cat": {
    "core": "Control plane",
    "security": "Permissions & security",
    "binaries": "System software",
    "hosting": "Runtimes",
    "dns": "DNS",
    "email": "Email",
    "isolation": "Project isolation",
    "ops": "Ops"
  },
  "level": {
    "ready": "Ready",
    "degraded": "Degraded",
    "missing": "Missing",
    "unknown": "Unknown"
  },
  "severity": {
    "critical": "Critical",
    "recommended": "Recommended",
    "optional": "Optional"
  },
  "fix": "Fix",
  "passed": "Pass",
  "checkFailed": "Readiness check failed",
  "gatePass": "Gate passed · {{pct}}%",
  "gateFail": "Not ready · {{pct}}%",
  "gateBlocked": "Not passed · {{n}} missing",
  "executeOn": "On",
  "executeOff": "Off",
  "blockers": "Blockers",
  "blockersHint": "Blockers are the critical subset of Missing — not extra checks.",
  "requireAdminTotp": "require admin 2FA policy",
  "listenBind": "listen address",
  "item": { "admin2fa": "Admin two-factor" },
  "dataDirPerms": "panel data-directory permissions",
  "mode750": "mode 750",
  "totalChecks": "All checks",
  "totalChecksHint": "Ready + degraded + missing = this total. Blockers are the critical missing subset.",
  "probing": "Probing…",
  "reprobe": "Re-probe",
  "exportReport": "Export report",
  "exportStarted": "Downloading {{name}}",
  "firstBlocker": "Fix first blocker",
  "viewRecommended": "View recommended",
  "loadingProbe": "Probing host capabilities…",
  "priorityTab": "Priority fixes",
  "checklistTab": "Full checklist",
  "summaryTab": "Summary & shortcuts",
  "priorityTitle": "Priority fixes",
  "prioritySub": "Handle in order; re-probe after clearing blockers",
  "nItems": "{{count}} items",
  "noHardBlockers": "No hard blockers",
  "noHardBlockersTitle": "No hard blockers",
  "prodGate": "Production gate",
  "gatePassed": "passed",
  "gateMaybePerm": "may still fail due to permissions",
  "viewDegradedHint": "Review degraded recommendations (mail, DNS, optional runtimes).",
  "viewDegraded": "View degraded",
  "fullChecklist": "Full checklist",
  "showing": "Showing {{shown}} / {{total}}",
  "filterAria": "Status filter",
  "all": "All",
  "category": "Category",
  "allCategories": "All categories",
  "searchPh": "Title, detail, id, fix hint…",
  "quickCatAria": "Quick categories",
  "noMatchTitle": "No matching items",
  "noMatchDesc": "Clear search or change filters.",
  "resetFilters": "Reset filters",
  "summary": "Summary",
  "shortcuts": "Shortcuts",
  "opsShortcutsAria": "Ops shortcuts",
  "scHost": "Host settings",
  "scHostD": "hostname · power · NTP",
  "scUnit": "Control-plane unit",
  "scUnitD": "systemd install / enable",
  "scServices": "Service matrix",
  "scServicesD": "nginx · DB · lifecycle",
  "scMetrics": "Host metrics",
  "scMetricsD": "load · memory · alerts",
  "scProtection": "Defense center",
  "scProtectionD": "response · UFW · fail2ban",
  "policyNote": "Policy: mail PTR / port 25 / registrar DNS are never auto-claimed complete. HTTP 503 = not ready but full report (not a fake success).",
  "notProbedTitle": "Not probed yet",
  "notProbedDesc": "Click “Re-probe” to start a read-only readiness check.",
  "runCheck": "Run readiness check",
  "reportFormatError": "Invalid readiness report format",
  "checkFailedHttp": "Readiness check failed ({{status}})",
  "itemAdminPassword": "Admin password strength",
  "itemAdminPasswordWeak": "{{count}} admin(s) flagged must_change_password / insecure bootstrap — change before production",
  "itemAdminPasswordOk": "No bootstrap/weak-password flag on admin accounts",
  "itemAdminPasswordFix": "Change admin password (Security / Users)",
  "itemListenBind": "Control plane listen bind",
  "itemListenBindPublic": "Listen may be public (0.0.0.0/::). Prefer 127.0.0.1 + reverse proxy / firewall.",
  "itemListenBindLoopback": "Prefer loopback bind (default 127.0.0.1)",
  "itemDataDirPerms": "dataDir permissions",
  "itemDataDirWorldW": "chmod 750 (or 700) dataDir; chown to panel user",
  "itemDataDirOtherR": "Prefer chmod 750 dataDir so other users cannot read control-plane JSON",
  "itemRustToolchain": "Rust toolchain",
  "itemWebBuildFix": "Click “Fix now” to build the Web UI (requires monorepo on this host), or run: pnpm --filter ysk-server-web build",
  "itemWebBuildManual": "No monorepo or packaged SPA on this host — one-click fix is unavailable. On a machine with source: pnpm --filter ysk-server-web build, then copy apps/web/dist/* into dataDir/web (e.g. /var/lib/ysk-server/web), or set YSK_WEB_ROOT and restart.",
  "itemStateStore": "Control-plane state store",
  "itemStateStoreSqliteHint": "Optional: YSK_STORE=sqlite for WAL document store",
  "itemBackupFreshness": "Last full backup run",
  "itemBackupNone": "No last_backup_run recorded — run backup all or schedule",
  "itemBackupFix": "ysk-server backup all · backup schedule --install",
  "itemFleetSessions": "Fleet agent sessions",
  "itemFleetNone": "Optional for single-host; multi-edge needs agent run + heartbeat",
  "itemFleetNoHb": "Sessions registered but not heartbeating — start edge agent",
  "itemPdnsutil": "pdnsutil (PowerDNS)",
  "apachePort80Title": "Apache vs public :80",
  "apachePort80Detail": "Apache is listening on :80 and Nginx is not on public HTTP — conflicts with Nginx-as-edge topology.",
  "apachePort80Both": "Both Apache and Nginx appear on :80 — rebind Apache to 127.0.0.1:8080.",
  "apachePort80Ok": "Apache is running but not solely owning public :80 (topology OK).",
  "apachePort80Fix": "Install rebind helpers exist; disable Apache vhosts on 80 or verify with ss -lntp after reload.",
  "fixNow": "Fix now",
  "fixFailed": "Fix failed",
  "fixDone": "dataDir permissions hardened (chmod 750)",
  "fixDoneWebUi": "Web UI built / installed",
  "rootLabel": "Superuser",
  "techDetails": "Technical details",
  "missingOwner": "No panel owner assigned (package quota attribution)",
  "notOsProvisioned": "OS user pending (home not provisioned)",
  "isolationPendingOs": "Same as project status: OS user pending. Open Isolation to provision the system user and home.",
  "ondrejNone": "No ondrej Launchpad PHP sources detected",
  "ondrejFound": "Found legacy ondrej/php sources that conflict with packages.sury.org: {{paths}}",
  "ondrejTitle": "PHP apt source (ondrej residual)",
  "systemctlActive": "Service is running",
  "systemctlStatus": "Service status: {{status}}",
  "binInPath": "{{bin}} in PATH",
  "leftoverApache": "Apache leftover default site",
  "leftoverVsftpd": "vsftpd unit failed",
  "leftoverCli": "Stale leftover CLI",
  "leftoverNginx": "Nginx catch-all missing",
  "leftoverDovecot": "Dovecot TLS points at missing cert",
  "leftoverOther": "Host leftover",
  "leftoverApply": "Leftover apply",
  "isolationOwnerDegrades": "Missing owner_user_id affects package quota attribution — status is degraded, not ready."
}
