diff --git a/AppImage/components/security.tsx b/AppImage/components/security.tsx index 8989d779..d8597db5 100644 --- a/AppImage/components/security.tsx +++ b/AppImage/components/security.tsx @@ -875,28 +875,28 @@ export function Security() { Security Audit Report - ${report.hostname || "ProxMenux"}
-
- ProxMenux Security Report - Press Ctrl+P or use the button to save as PDF +
+ ProxMenux Security Audit Report + Use Print / Save as PDF to download
- +
@@ -1041,7 +1041,7 @@ export function Security() {

${hasAdjustment ? `
-
+
Lynis raw: ${rawScore}/100 PVE adjusted: ${displayScore}/100
@@ -1110,9 +1110,9 @@ export function Security() {
4. Warnings (${report.warnings.length}${(report.proxmox_expected_warnings ?? 0) > 0 ? ` - ${actionableWarnings} actionable` : ""})
-

Issues that require attention and may represent security vulnerabilities.

+

Issues that require attention and may represent security vulnerabilities.

${report.warnings.length === 0 ? - '
No warnings detected.
' : + '
No warnings detected. System appears to be well-configured.
' : report.warnings.map((w, i) => `
@@ -1131,9 +1131,9 @@ export function Security() {
5. Suggestions (${report.suggestions.length}${(report.proxmox_expected_suggestions ?? 0) > 0 ? ` - ${actionableSuggestions} actionable` : ""})
-

Recommended improvements to strengthen security.${(report.proxmox_expected_suggestions ?? 0) > 0 ? ` ${report.proxmox_expected_suggestions} are expected in Proxmox VE.` : ""}

+

Recommended improvements to strengthen your system's security posture.${(report.proxmox_expected_suggestions ?? 0) > 0 ? ` ${report.proxmox_expected_suggestions} items are expected behavior in Proxmox VE.` : ""}

${report.suggestions.length === 0 ? - '
No suggestions. Fully hardened.
' : + '
No suggestions. System is fully hardened.
' : report.suggestions.map((s, i) => `
@@ -1153,7 +1153,7 @@ export function Security() { ${(report.sections && report.sections.length > 0) ? `
6. Detailed Security Checks (${report.sections.length} categories)
-

All security checks performed, organized by category.

+

Complete list of all security checks performed during the audit, organized by category.

${report.sections.map((section, sIdx) => `
@@ -3152,26 +3152,10 @@ ${(report.sections && report.sections.length > 0) ? ` onClick={(e) => { e.stopPropagation() const html = generatePrintableReport(lynisReport) + // Use Blob URL to open preview in new tab (Safari-safe, no document.write) const blob = new Blob([html], { type: "text/html;charset=utf-8" }) const url = URL.createObjectURL(blob) - // Use a hidden iframe for Safari compatibility - let iframe = document.getElementById("pmx-print-frame") as HTMLIFrameElement | null - if (iframe) iframe.remove() - iframe = document.createElement("iframe") - iframe.id = "pmx-print-frame" - iframe.style.cssText = "position:fixed;right:0;bottom:0;width:0;height:0;border:none;opacity:0;pointer-events:none;" - document.body.appendChild(iframe) - iframe.src = url - iframe.onload = () => { - setTimeout(() => { - try { - iframe?.contentWindow?.print() - } catch { - // Fallback: open in new tab - window.open(url, "_blank") - } - }, 300) - } + window.open(url, "_blank") }} className="h-7 gap-1.5 px-2.5 text-xs border-cyan-500/30 text-cyan-500 hover:text-cyan-400 hover:bg-cyan-500/10" title="Print / Save as PDF"