{"id":894,"date":"2026-08-03T18:02:35","date_gmt":"2026-08-03T18:02:35","guid":{"rendered":"https:\/\/freewebtools.co.in\/?page_id=894"},"modified":"2026-08-03T18:02:35","modified_gmt":"2026-08-03T18:02:35","slug":"penetration-testing-report-generator-2","status":"publish","type":"page","link":"https:\/\/freewebtools.co.in\/index.php\/penetration-testing-report-generator-2\/","title":{"rendered":"Penetration Testing Report Generator"},"content":{"rendered":"\n<!-- ================================================================= -->\n<!-- PENETRATION TESTING REPORT GENERATOR - PRODUCTION FINAL MODULE -->\n<!-- ================================================================= -->\n\n<div id=\"ptg-app-wrapper\" class=\"ptg-container\">\n    <!-- Top Action Header -->\n    <div class=\"ptg-header-bar\">\n        <div class=\"ptg-header-title-box\">\n            <h2>Penetration Testing Report Generator<\/h2>\n            <p>Generate Professional Cyber Security Pentest Reports Client-Side<\/p>\n        <\/div>\n        <div class=\"ptg-header-btn-group\">\n            <button type=\"button\" id=\"ptg-btn-new\" class=\"ptg-btn ptg-btn-secondary\">New Report<\/button>\n            <button type=\"button\" id=\"ptg-btn-sample\" class=\"ptg-btn ptg-btn-info\">Load Sample<\/button>\n            <button type=\"button\" id=\"ptg-btn-save\" class=\"ptg-btn ptg-btn-success\">Save (Local)<\/button>\n            <button type=\"button\" id=\"ptg-btn-reset\" class=\"ptg-btn ptg-btn-danger\">Reset<\/button>\n            <button type=\"button\" id=\"ptg-btn-print\" class=\"ptg-btn ptg-btn-primary\">Print Report<\/button>\n            <button type=\"button\" id=\"ptg-btn-export\" class=\"ptg-btn ptg-btn-secondary\">Export HTML<\/button>\n            <button type=\"button\" id=\"ptg-btn-copy-html\" class=\"ptg-btn ptg-btn-secondary\">Copy HTML<\/button>\n            <button type=\"button\" id=\"ptg-btn-copy-text\" class=\"ptg-btn ptg-btn-secondary\">Copy Text<\/button>\n        <\/div>\n    <\/div>\n\n    <!-- Template Selector Bar -->\n    <div class=\"ptg-template-bar\">\n        <label for=\"ptg-template-select\"><strong>Report Template Style:<\/strong><\/label>\n        <select id=\"ptg-template-select\" class=\"ptg-select\">\n            <option value=\"template-1\">Template 1: Executive Modern Pentest Report<\/option>\n            <option value=\"template-2\">Template 2: OWASP Technical Standard<\/option>\n            <option value=\"template-3\">Template 3: PTES Compliance Standard<\/option>\n            <option value=\"template-4\">Template 4: Bug Bounty Concise Style<\/option>\n            <option value=\"template-5\">Template 5: Enterprise Corporate Audit<\/option>\n        <\/select>\n    <\/div>\n\n    <!-- Main Workspace Layout (Two Columns on Desktop) -->\n    <div class=\"ptg-workspace\">\n        \n        <!-- LEFT COLUMN: Input Forms & Managers -->\n        <div class=\"ptg-form-column\">\n            \n            <!-- Section: Client Details -->\n            <div class=\"ptg-card\">\n                <div class=\"ptg-card-header\"><h3>Client Details &#038; Metadata<\/h3><\/div>\n                <div class=\"ptg-card-body ptg-grid-2\">\n                    <div class=\"ptg-field\"><label>Client Name *<\/label><input type=\"text\" id=\"ptg-client-name\" class=\"ptg-input\" placeholder=\"e.g. Jane Doe\" required><\/div>\n                    <div class=\"ptg-field\"><label>Company Name *<\/label><input type=\"text\" id=\"ptg-company-name\" class=\"ptg-input\" placeholder=\"e.g. CyberCorp Global\" required><\/div>\n                    <div class=\"ptg-field\"><label>Client Contact<\/label><input type=\"text\" id=\"ptg-client-contact\" class=\"ptg-input\" placeholder=\"Contact Person\"><\/div>\n                    <div class=\"ptg-field\"><label>Email<\/label><input type=\"email\" id=\"ptg-client-email\" class=\"ptg-input\" placeholder=\"security@cybercorp.com\"><\/div>\n                    <div class=\"ptg-field\"><label>Phone<\/label><input type=\"text\" id=\"ptg-client-phone\" class=\"ptg-input\" placeholder=\"+1-555-0192\"><\/div>\n                    <div class=\"ptg-field\"><label>Assessment Type<\/label><input type=\"text\" id=\"ptg-assessment-type\" class=\"ptg-input\" value=\"Web Application &#038; API Penetration Test\"><\/div>\n                    <div class=\"ptg-field ptg-col-span-2\"><label>Assessment Scope *<\/label><input type=\"text\" id=\"ptg-assessment-scope\" class=\"ptg-input\" placeholder=\"https:\/\/app.cybercorp.com, 192.168.10.0\/24\" required><\/div>\n                    <div class=\"ptg-field\"><label>Website<\/label><input type=\"text\" id=\"ptg-website\" class=\"ptg-input\" placeholder=\"https:\/\/www.cybercorp.com\"><\/div>\n                    <div class=\"ptg-field\"><label>IP Address \/ CIDR<\/label><input type=\"text\" id=\"ptg-ip-address\" class=\"ptg-input\" placeholder=\"203.0.113.88\"><\/div>\n                    <div class=\"ptg-field\"><label>Application Name<\/label><input type=\"text\" id=\"ptg-app-name\" class=\"ptg-input\" placeholder=\"CyberPortal Enterprise\"><\/div>\n                    <div class=\"ptg-field\"><label>Version<\/label><input type=\"text\" id=\"ptg-app-version\" class=\"ptg-input\" placeholder=\"v3.1.4\"><\/div>\n                    <div class=\"ptg-field\"><label>Environment<\/label><input type=\"text\" id=\"ptg-environment\" class=\"ptg-input\" value=\"Production\"><\/div>\n                    <div class=\"ptg-field\"><label>Assessment Start Date<\/label><input type=\"date\" id=\"ptg-assessment-date\" class=\"ptg-input\"><\/div>\n                    <div class=\"ptg-field\"><label>Completion Date<\/label><input type=\"date\" id=\"ptg-completion-date\" class=\"ptg-input\"><\/div>\n                    <div class=\"ptg-field\"><label>Prepared By<\/label><input type=\"text\" id=\"ptg-prepared-by\" class=\"ptg-input\" value=\"Senior Penetration Tester\"><\/div>\n                    <div class=\"ptg-field\"><label>Reviewed By<\/label><input type=\"text\" id=\"ptg-reviewed-by\" class=\"ptg-input\" value=\"Principal Security Architect\"><\/div>\n                    <div class=\"ptg-field\"><label>Approved By<\/label><input type=\"text\" id=\"ptg-approved-by\" class=\"ptg-input\" value=\"Chief Information Security Officer\"><\/div>\n                    <div class=\"ptg-field\"><label>Report Version<\/label><input type=\"text\" id=\"ptg-report-version\" class=\"ptg-input\" value=\"1.0\"><\/div>\n                    <div class=\"ptg-field\"><label>Confidentiality Level<\/label>\n                        <select id=\"ptg-confidentiality\" class=\"ptg-select\">\n                            <option>Confidential<\/option>\n                            <option>Strictly Confidential<\/option>\n                            <option>Internal Only<\/option>\n                            <option>Restricted<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"ptg-field ptg-col-span-2\">\n                        <label>Executive Summary Overview <span id=\"ptg-exec-counter\" class=\"ptg-counter\">0\/1000 chars<\/span><\/label>\n                        <textarea id=\"ptg-exec-summary\" class=\"ptg-textarea ptg-auto-expand\" rows=\"4\" maxlength=\"1000\" placeholder=\"High-level overview of the security assessment findings...\"><\/textarea>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Section: Engagement Details -->\n            <div class=\"ptg-card\">\n                <div class=\"ptg-card-header\"><h3>Engagement Parameters &#038; Methodology<\/h3><\/div>\n                <div class=\"ptg-card-body ptg-grid-2\">\n                    <div class=\"ptg-field\"><label>Project Name<\/label><input type=\"text\" id=\"ptg-project-name\" class=\"ptg-input\" placeholder=\"Q3 Annual Security Audit\"><\/div>\n                    <div class=\"ptg-field\"><label>Testing Standard<\/label>\n                        <select id=\"ptg-testing-standard\" class=\"ptg-select\">\n                            <option>OWASP Top 10<\/option>\n                            <option>PTES<\/option>\n                            <option>NIST SP 800-115<\/option>\n                            <option>OSSTMM<\/option>\n                            <option>Custom Framework<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"ptg-field\"><label>Testing Methodology<\/label>\n                        <select id=\"ptg-methodology\" class=\"ptg-select\">\n                            <option>Black Box<\/option>\n                            <option>Gray Box<\/option>\n                            <option>White Box<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"ptg-field\"><label>Engagement Timeline<\/label><input type=\"text\" id=\"ptg-timeline\" class=\"ptg-input\" placeholder=\"10 Business Days\"><\/div>\n                    <div class=\"ptg-field ptg-col-span-2\"><label>Objectives<\/label><textarea id=\"ptg-objectives\" class=\"ptg-textarea ptg-auto-expand\" rows=\"2\" placeholder=\"Identify exploitable vulnerabilities, validate defense posture...\"><\/textarea><\/div>\n                    <div class=\"ptg-field ptg-col-span-2\"><label>Rules of Engagement<\/label><textarea id=\"ptg-roe\" class=\"ptg-textarea ptg-auto-expand\" rows=\"2\" placeholder=\"Testing restricted to off-peak hours to ensure zero downtime.\"><\/textarea><\/div>\n                    <div class=\"ptg-field\"><label>Assessment Limitations<\/label><input type=\"text\" id=\"ptg-limitations\" class=\"ptg-input\" placeholder=\"Social engineering and physical security excluded\"><\/div>\n                    <div class=\"ptg-field\"><label>Assumptions<\/label><input type=\"text\" id=\"ptg-assumptions\" class=\"ptg-input\" placeholder=\"Staging environment accurately mirrors production\"><\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Section: Attack Surface Summary -->\n            <div class=\"ptg-card\">\n                <div class=\"ptg-card-header\"><h3>Attack Surface Metrics<\/h3><\/div>\n                <div class=\"ptg-card-body ptg-grid-2\">\n                    <div class=\"ptg-field\"><label>Discovered Domains<\/label><input type=\"text\" id=\"ptg-as-domains\" class=\"ptg-input\" value=\"4\"><\/div>\n                    <div class=\"ptg-field\"><label>Subdomains Mapped<\/label><input type=\"text\" id=\"ptg-as-subdomains\" class=\"ptg-input\" value=\"18\"><\/div>\n                    <div class=\"ptg-field\"><label>Endpoints Discovered<\/label><input type=\"text\" id=\"ptg-as-endpoints\" class=\"ptg-input\" value=\"230\"><\/div>\n                    <div class=\"ptg-field\"><label>Active Services<\/label><input type=\"text\" id=\"ptg-as-services\" class=\"ptg-input\" value=\"12\"><\/div>\n                    <div class=\"ptg-field\"><label>Open Ports<\/label><input type=\"text\" id=\"ptg-as-ports\" class=\"ptg-input\" value=\"21, 22, 80, 443, 8443\"><\/div>\n                    <div class=\"ptg-field\"><label>Applications<\/label><input type=\"text\" id=\"ptg-as-apps\" class=\"ptg-input\" value=\"3\"><\/div>\n                    <div class=\"ptg-field\"><label>API Endpoints<\/label><input type=\"text\" id=\"ptg-as-apis\" class=\"ptg-input\" value=\"42 Endpoints\"><\/div>\n                    <div class=\"ptg-field\"><label>Technology Stack<\/label><input type=\"text\" id=\"ptg-as-tech\" class=\"ptg-input\" value=\"React, Python\/Django, Nginx, PostgreSQL\"><\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Section: Vulnerability Manager -->\n            <div class=\"ptg-card\">\n                <div class=\"ptg-card-header ptg-flex-between\">\n                    <h3>Vulnerability Manager<\/h3>\n                    <button type=\"button\" id=\"ptg-btn-add-vuln\" class=\"ptg-btn ptg-btn-primary\">+ Add Finding<\/button>\n                <\/div>\n                <div class=\"ptg-card-body\">\n                    <!-- Search & Filter Bar -->\n                    <div class=\"ptg-filter-bar\">\n                        <input type=\"text\" id=\"ptg-search-vuln\" class=\"ptg-input\" placeholder=\"Search vulnerability findings...\">\n                        <select id=\"ptg-filter-severity\" class=\"ptg-select\">\n                            <option value=\"\">All Severities<\/option>\n                            <option value=\"Critical\">Critical<\/option>\n                            <option value=\"High\">High<\/option>\n                            <option value=\"Medium\">Medium<\/option>\n                            <option value=\"Low\">Low<\/option>\n                            <option value=\"Informational\">Informational<\/option>\n                        <\/select>\n                        <select id=\"ptg-filter-status\" class=\"ptg-select\">\n                            <option value=\"\">All Statuses<\/option>\n                            <option value=\"Open\">Open<\/option>\n                            <option value=\"Fixed\">Fixed<\/option>\n                            <option value=\"Partially Fixed\">Partially Fixed<\/option>\n                            <option value=\"Accepted Risk\">Accepted Risk<\/option>\n                        <\/select>\n                    <\/div>\n                    <!-- Vulnerabilities List Container -->\n                    <div id=\"ptg-vuln-container\" class=\"ptg-vuln-container\"><\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Section: Tools Used & Test Cases -->\n            <div class=\"ptg-card\">\n                <div class=\"ptg-card-header\"><h3>Security Assessment Tools Checklist<\/h3><\/div>\n                <div class=\"ptg-card-body\">\n                    <p style=\"font-size: 13px; color: #555; margin-bottom: 10px;\">Select security testing utilities utilized during assessment:<\/p>\n                    <div class=\"ptg-checkbox-grid\" id=\"ptg-tools-checklist\">\n                        <label><input type=\"checkbox\" value=\"Burp Suite Professional\" checked> Burp Suite Professional<\/label>\n                        <label><input type=\"checkbox\" value=\"Nmap Port Scanner\" checked> Nmap Port Scanner<\/label>\n                        <label><input type=\"checkbox\" value=\"Nikto Web Scanner\"> Nikto Web Scanner<\/label>\n                        <label><input type=\"checkbox\" value=\"OWASP ZAP\" checked> OWASP ZAP<\/label>\n                        <label><input type=\"checkbox\" value=\"SQLMap\" checked> SQLMap<\/label>\n                        <label><input type=\"checkbox\" value=\"Hydra Brute-Forcer\"> Hydra Brute-Forcer<\/label>\n                        <label><input type=\"checkbox\" value=\"Gobuster Dir\/DNS\"> Gobuster Dir\/DNS<\/label>\n                        <label><input type=\"checkbox\" value=\"Amass Recon\"> Amass Recon<\/label>\n                        <label><input type=\"checkbox\" value=\"Nuclei Vulnerability Scanner\" checked> Nuclei Vulnerability Scanner<\/label>\n                        <label><input type=\"checkbox\" value=\"Metasploit Framework\"> Metasploit Framework<\/label>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n        <\/div>\n\n        <!-- RIGHT COLUMN: Live Professional Report Preview -->\n        <div class=\"ptg-preview-column\">\n            <div class=\"ptg-preview-sticky-box\">\n                <div class=\"ptg-preview-toolbar\">\n                    <span style=\"font-weight: 600; font-size: 14px; color: #333;\">Live Professional Report Preview<\/span>\n                    <span id=\"ptg-preview-status\" style=\"font-size: 12px; color: #28a745;\">\u25cf Live Sync Active<\/span>\n                <\/div>\n                \n                <!-- Printable & Exportable Render Area -->\n                <div id=\"ptg-report-render-area\" class=\"ptg-report-render-box template-1 ptg-report-preview\">\n                    \n                    <!-- Cover Page -->\n                    <div class=\"ptg-page ptg-cover-page\">\n                        <div class=\"ptg-cover-top\">\n                            <div class=\"ptg-cover-logo\">[ ENTERPRISE SECURITY REPORT ]<\/div>\n                            <span class=\"ptg-confidential-badge\" id=\"prev-confidential\">Confidential<\/span>\n                        <\/div>\n                        <div class=\"ptg-cover-middle\">\n                            <h1 id=\"prev-report-title\">PENETRATION TESTING REPORT<\/h1>\n                            <h2 id=\"prev-project-name\">Q3 Annual Security Audit<\/h2>\n                            <p id=\"prev-assessment-type\">Web Application &#038; API Penetration Test<\/p>\n                        <\/div>\n                        <div class=\"ptg-cover-bottom\">\n                            <table class=\"ptg-meta-table\">\n                                <tr><td><strong>Target Client:<\/strong><\/td><td id=\"prev-client-name\">CyberCorp Global<\/td><\/tr>\n                                <tr><td><strong>Scope Target:<\/strong><\/td><td id=\"prev-scope\">https:\/\/app.cybercorp.com<\/td><\/tr>\n                                <tr><td><strong>Assessment Date:<\/strong><\/td><td id=\"prev-date\">2026-08-01<\/td><\/tr>\n                                <tr><td><strong>Prepared By:<\/strong><\/td><td id=\"prev-prepared\">Senior Penetration Tester<\/td><\/tr>\n                                <tr><td><strong>Report Version:<\/strong><\/td><td id=\"prev-version\">1.0<\/td><\/tr>\n                            <\/table>\n                        <\/div>\n                    <\/div>\n                    \n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Table of Contents -->\n                    <div class=\"ptg-page\">\n                        <h3>Table of Contents<\/h3>\n                        <ul class=\"ptg-toc-list\">\n                            <li>1. Executive Summary &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; 3<\/li>\n                            <li>2. Assessment Scope &#038; Methodology &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. 4<\/li>\n                            <li>3. Risk Matrix &#038; Rating Summary &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; 5<\/li>\n                            <li>4. Attack Surface Summary &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. 6<\/li>\n                            <li>5. Detailed Vulnerability Findings &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; 7<\/li>\n                            <li>6. Remediation Roadmap &#038; Recommendations &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. 12<\/li>\n                            <li>7. Appendix &#038; Compliance Mapping (OWASP \/ NIST) &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. 14<\/li>\n                        <\/ul>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 1: Executive Summary -->\n                    <div class=\"ptg-page ptg-executive-summary\">\n                        <h3>1. Executive Summary<\/h3>\n                        <p id=\"prev-exec-summary-text\">High-level overview of the security assessment findings&#8230;<\/p>\n                        \n                        <div class=\"ptg-summary-grid\">\n                            <div class=\"ptg-summary-card\">\n                                <span class=\"ptg-sc-title\">Overall Security Posture Rating<\/span>\n                                <span class=\"ptg-sc-value\" id=\"prev-sec-rating\">Moderate Risk<\/span>\n                            <\/div>\n                            <div class=\"ptg-summary-card\">\n                                <span class=\"ptg-sc-title\">Calculated Aggregate Risk Score<\/span>\n                                <span class=\"ptg-sc-value\" id=\"prev-risk-score\">8.2 \/ 10<\/span>\n                            <\/div>\n                        <\/div>\n\n                        <h4 style=\"margin-top: 20px;\">Finding Severity Distribution<\/h4>\n                        <table class=\"ptg-dist-table\">\n                            <thead>\n                                <tr>\n                                    <th style=\"background: #721c24; color: #fff;\">Critical<\/th>\n                                    <th style=\"background: #dc3545; color: #fff;\">High<\/th>\n                                    <th style=\"background: #fd7e14; color: #fff;\">Medium<\/th>\n                                    <th style=\"background: #ffc107; color: #333;\">Low<\/th>\n                                    <th style=\"background: #17a2b8; color: #fff;\">Info<\/th>\n                                    <th style=\"background: #333; color: #fff;\">Total<\/th>\n                                <\/tr>\n                            <\/thead>\n                            <tbody>\n                                <tr>\n                                    <td id=\"count-critical\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                    <td id=\"count-high\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                    <td id=\"count-medium\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                    <td id=\"count-low\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                    <td id=\"count-info\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                    <td id=\"count-total\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                <\/tr>\n                            <\/tbody>\n                        <\/table>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 2: Engagement & Scope -->\n                    <div class=\"ptg-page ptg-methodology\">\n                        <h3>2. Assessment Scope &#038; Methodology<\/h3>\n                        <table class=\"ptg-details-table\">\n                            <tr><th>Project Name<\/th><td id=\"prev-eng-project\">Q3 Annual Security Audit<\/td><\/tr>\n                            <tr><th>Testing Standard<\/th><td id=\"prev-eng-standard\">OWASP Top 10<\/td><\/tr>\n                            <tr><th>Testing Methodology<\/th><td id=\"prev-eng-method\">Black Box<\/td><\/tr>\n                            <tr><th>Target URLs \/ IP Blocks<\/th><td id=\"prev-eng-scope\">https:\/\/app.cybercorp.com, 192.168.10.0\/24<\/td><\/tr>\n                            <tr><th>Timeline<\/th><td id=\"prev-eng-timeline\">10 Business Days<\/td><\/tr>\n                            <tr><th>Security Tools Utilized<\/th><td id=\"prev-tools-list\">Burp Suite Professional, Nmap Port Scanner, OWASP ZAP, SQLMap, Nuclei Vulnerability Scanner<\/td><\/tr>\n                        <\/table>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 3: Risk Matrix -->\n                    <div class=\"ptg-page ptg-risk-matrix\">\n                        <h3>3. Risk Matrix &#038; Impact vs Likelihood<\/h3>\n                        <p style=\"font-size: 13px; color: #555;\">Evaluated using standard CVSS v3.1 likelihood and business impact matrices.<\/p>\n                        <div class=\"ptg-matrix-box\">\n                            <table class=\"ptg-matrix-grid-table\">\n                                <tr>\n                                    <th>Impact \\ Likelihood<\/th>\n                                    <th>Low Likelihood<\/th>\n                                    <th>Medium Likelihood<\/th>\n                                    <th>High Likelihood<\/th>\n                                <\/tr>\n                                <tr>\n                                    <th>High Impact<\/th>\n                                    <td style=\"background: #ffc107;\">Medium Risk<\/td>\n                                    <td style=\"background: #fd7e14;\">High Risk<\/td>\n                                    <td style=\"background: #dc3545; color:#fff;\">Critical Risk<\/td>\n                                <\/tr>\n                                <tr>\n                                    <th>Medium Impact<\/th>\n                                    <td style=\"background: #28a745; color:#fff;\">Low Risk<\/td>\n                                    <td style=\"background: #ffc107;\">Medium Risk<\/td>\n                                    <td style=\"background: #fd7e14;\">High Risk<\/td>\n                                <\/tr>\n                                <tr>\n                                    <th>Low Impact<\/th>\n                                    <td style=\"background: #28a745; color:#fff;\">Low Risk<\/td>\n                                    <td style=\"background: #28a745; color:#fff;\">Low Risk<\/td>\n                                    <td style=\"background: #ffc107;\">Medium Risk<\/td>\n                                <\/tr>\n                            <\/table>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 4: Attack Surface Summary -->\n                    <div class=\"ptg-page\">\n                        <h3>4. Attack Surface Summary<\/h3>\n                        <table class=\"ptg-details-table\">\n                            <tr><th>Discovered Domains<\/th><td id=\"prev-as-dom\">4<\/td><\/tr>\n                            <tr><th>Subdomains Mapped<\/th><td id=\"prev-as-sub\">18<\/td><\/tr>\n                            <tr><th>Endpoints Discovered<\/th><td id=\"prev-as-end\">230<\/td><\/tr>\n                            <tr><th>Active Services<\/th><td id=\"prev-as-srv\">12<\/td><\/tr>\n                            <tr><th>Open Ports<\/th><td id=\"prev-as-prt\">21, 22, 80, 443, 8443<\/td><\/tr>\n                            <tr><th>Applications \/ APIs<\/th><td id=\"prev-as-app\">3 \/ 42 Endpoints<\/td><\/tr>\n                            <tr><th>Identified Tech Stack<\/th><td id=\"prev-as-tch\">React, Python\/Django, Nginx, PostgreSQL<\/td><\/tr>\n                        <\/table>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 5: Detailed Findings -->\n                    <div class=\"ptg-page ptg-findings\">\n                        <h3>5. Detailed Vulnerability Findings<\/h3>\n                        <div id=\"prev-findings-render-container\">\n                            <!-- Dynamic Vulnerability Items Render Here -->\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 6: Recommendations & Appendix -->\n                    <div class=\"ptg-page ptg-recommendations\">\n                        <h3>6. Remediation Roadmap &#038; Compliance<\/h3>\n                        <p>Organizations must adopt a comprehensive defense-in-depth security posture, deploying strict input sanitization, multi-factor authentication, automated patch deployment, and scheduled third-party security audits.<\/p>\n                        <h4 style=\"margin-top: 15px;\">Compliance Framework Mapping<\/h4>\n                        <ul style=\"font-size: 13px; line-height: 1.6;\">\n                            <li><strong>OWASP Top 10 (2021):<\/strong> A01:2021 &#8211; Broken Access Control, A03:2021 &#8211; Injection, A07:2021 &#8211; Identification and Authentication Failures<\/li>\n                            <li><strong>NIST SP 800-53:<\/strong> SI-2 Flaw Remediation, AC-3 Access Enforcement, SC-7 Boundary Protection<\/li>\n                            <li><strong>PCI-DSS v4.0:<\/strong> Requirement 6.2 Secure Coding &#038; Requirement 11.3 Penetration Testing<\/li>\n                        <\/ul>\n                    <\/div>\n\n                <\/div>\n            <\/div>\n        <\/div>\n\n    <\/div>\n<\/div>\n\n<!-- ================================================================= -->\n<!-- ISOLATED SCOPED STYLING (WordPress Custom HTML Block Safe) -->\n<!-- ================================================================= -->\n\n<style>\n\/* Scoped Container Namespace *\/\n#ptg-app-wrapper.ptg-container {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n    color: #333;\n    background: #f4f6f9;\n    padding: 20px;\n    box-sizing: border-box;\n    width: 100%;\n}\n#ptg-app-wrapper .ptg-header-bar {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    background: #fff;\n    padding: 20px;\n    border-radius: 8px;\n    box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n    margin-bottom: 20px;\n    flex-wrap: wrap;\n    gap: 15px;\n}\n#ptg-app-wrapper .ptg-header-title-box h2 {\n    margin: 0 0 5px 0;\n    color: #1e293b;\n    font-size: 22px;\n}\n#ptg-app-wrapper .ptg-header-title-box p {\n    margin: 0;\n    color: #64748b;\n    font-size: 14px;\n}\n#ptg-app-wrapper .ptg-header-btn-group {\n    display: flex;\n    gap: 8px;\n    flex-wrap: wrap;\n}\n#ptg-app-wrapper .ptg-btn {\n    padding: 8px 14px;\n    font-size: 13px;\n    font-weight: 600;\n    border: none;\n    border-radius: 4px;\n    cursor: pointer;\n    transition: background 0.2s;\n}\n#ptg-app-wrapper .ptg-btn-primary { background: #3b82f6; color: #fff; }\n#ptg-app-wrapper .ptg-btn-primary:hover { background: #2563eb; }\n#ptg-app-wrapper .ptg-btn-secondary { background: #64748b; color: #fff; }\n#ptg-app-wrapper .ptg-btn-secondary:hover { background: #475569; }\n#ptg-app-wrapper .ptg-btn-success { background: #10b981; color: #fff; }\n#ptg-app-wrapper .ptg-btn-success:hover { background: #059669; }\n#ptg-app-wrapper .ptg-btn-info { background: #0ea5e9; color: #fff; }\n#ptg-app-wrapper .ptg-btn-info:hover { background: #0284c7; }\n#ptg-app-wrapper .ptg-btn-danger { background: #ef4444; color: #fff; }\n#ptg-app-wrapper .ptg-btn-danger:hover { background: #dc2626; }\n\n#ptg-app-wrapper .ptg-template-bar {\n    background: #fff;\n    padding: 12px 20px;\n    border-radius: 8px;\n    box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n    margin-bottom: 20px;\n    display: flex;\n    align-items: center;\n    gap: 15px;\n}\n#ptg-app-wrapper .ptg-select, \n#ptg-app-wrapper .ptg-input, \n#ptg-app-wrapper .ptg-textarea {\n    width: 100%;\n    padding: 8px 12px;\n    border: 1px solid #cbd5e1;\n    border-radius: 4px;\n    font-size: 13px;\n    box-sizing: border-box;\n    background: #fff;\n    color: #333;\n}\n#ptg-app-wrapper .ptg-select:focus, \n#ptg-app-wrapper .ptg-input:focus, \n#ptg-app-wrapper .ptg-textarea:focus {\n    outline: none;\n    border-color: #3b82f6;\n    box-shadow: 0 0 0 2px rgba(59,130,246,0.1);\n}\n#ptg-app-wrapper .ptg-textarea {\n    resize: vertical;\n    line-height: 1.5;\n}\n#ptg-app-wrapper .ptg-counter {\n    float: right;\n    font-size: 11px;\n    color: #64748b;\n    font-weight: normal;\n}\n\n#ptg-app-wrapper .ptg-workspace {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 20px;\n}\n@media (max-width: 1024px) {\n    #ptg-app-wrapper .ptg-workspace { grid-template-columns: 1fr; }\n}\n\n#ptg-app-wrapper .ptg-form-column {\n    display: flex;\n    flex-direction: column;\n    gap: 20px;\n}\n#ptg-app-wrapper .ptg-card {\n    background: #fff;\n    border-radius: 8px;\n    box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n    overflow: hidden;\n}\n#ptg-app-wrapper .ptg-card-header {\n    background: #f8fafc;\n    padding: 15px 20px;\n    border-bottom: 1px solid #e2e8f0;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n}\n#ptg-app-wrapper .ptg-card-header h3 {\n    margin: 0;\n    font-size: 16px;\n    color: #1e293b;\n}\n#ptg-app-wrapper .ptg-card-body {\n    padding: 20px;\n}\n#ptg-app-wrapper .ptg-grid-2 {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 15px;\n}\n#ptg-app-wrapper .ptg-col-span-2 { grid-column: span 2; }\n#ptg-app-wrapper .ptg-field {\n    display: flex;\n    flex-direction: column;\n    gap: 5px;\n}\n#ptg-app-wrapper .ptg-field label {\n    font-size: 12px;\n    font-weight: 600;\n    color: #475569;\n}\n\n#ptg-app-wrapper .ptg-filter-bar {\n    display: flex;\n    gap: 10px;\n    margin-bottom: 15px;\n    flex-wrap: wrap;\n}\n#ptg-app-wrapper .ptg-vuln-container {\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\n    max-height: 500px;\n    overflow-y: auto;\n}\n#ptg-app-wrapper .ptg-vuln-item-card {\n    background: #f8fafc;\n    border: 1px solid #e2e8f0;\n    border-radius: 6px;\n    padding: 12px 15px;\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n#ptg-app-wrapper .ptg-checkbox-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 10px;\n}\n#ptg-app-wrapper .ptg-checkbox-grid label {\n    font-size: 13px;\n    color: #334155;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    cursor: pointer;\n}\n\n#ptg-app-wrapper .ptg-preview-column {\n    position: relative;\n}\n#ptg-app-wrapper .ptg-preview-sticky-box {\n    position: sticky;\n    top: 20px;\n    background: #fff;\n    border-radius: 8px;\n    box-shadow: 0 4px 6px rgba(0,0,0,0.05);\n    overflow: hidden;\n    max-height: calc(100vh - 40px);\n    display: flex;\n    flex-direction: column;\n}\n#ptg-app-wrapper .ptg-preview-toolbar {\n    background: #f1f5f9;\n    padding: 12px 20px;\n    border-bottom: 1px solid #e2e8f0;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n}\n#ptg-app-wrapper .ptg-report-render-box {\n    padding: 30px;\n    overflow-y: auto;\n    background: #fff;\n    font-size: 13px;\n    line-height: 1.6;\n    box-sizing: border-box;\n    width: 100%;\n}\n\n\/* Report Styles & Elements *\/\n#ptg-app-wrapper .ptg-page {\n    background: #fff;\n    padding: 20px;\n    margin-bottom: 20px;\n    border: 1px dashed #cbd5e1;\n    border-radius: 6px;\n    box-sizing: border-box;\n}\n#ptg-app-wrapper .ptg-cover-page {\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    min-height: 500px;\n    background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);\n    border: none;\n    padding: 40px;\n}\n#ptg-app-wrapper .ptg-cover-top {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-start;\n}\n#ptg-app-wrapper .ptg-cover-logo {\n    font-weight: bold;\n    color: #64748b;\n    font-size: 14px;\n}\n#ptg-app-wrapper .ptg-confidential-badge {\n    background: #ef4444;\n    color: #fff;\n    padding: 4px 10px;\n    border-radius: 4px;\n    font-size: 11px;\n    font-weight: bold;\n    text-transform: uppercase;\n}\n#ptg-app-wrapper .ptg-cover-middle h1 {\n    font-size: 28px;\n    color: #0f172a;\n    margin: 0 0 10px 0;\n}\n#ptg-app-wrapper .ptg-cover-middle h2 {\n    font-size: 20px;\n    color: #334155;\n    margin: 0 0 5px 0;\n}\n#ptg-app-wrapper .ptg-cover-middle p {\n    font-size: 14px;\n    color: #64748b;\n    margin: 0;\n}\n#ptg-app-wrapper .ptg-meta-table {\n    width: 100%;\n    border-collapse: collapse;\n}\n#ptg-app-wrapper .ptg-meta-table td {\n    padding: 4px 0;\n    font-size: 13px;\n    border: none !important;\n}\n#ptg-app-wrapper .ptg-toc-list {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n}\n#ptg-app-wrapper .ptg-toc-list li {\n    padding: 8px 0;\n    border-bottom: 1px solid #f1f5f9;\n    color: #334155;\n}\n#ptg-app-wrapper .ptg-summary-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 15px;\n    margin-top: 15px;\n}\n#ptg-app-wrapper .ptg-summary-card {\n    background: #f8fafc;\n    border: 1px solid #e2e8f0;\n    border-radius: 6px;\n    padding: 15px;\n    text-align: center;\n}\n#ptg-app-wrapper .ptg-sc-title {\n    display: block;\n    font-size: 12px;\n    color: #64748b;\n    margin-bottom: 5px;\n}\n#ptg-app-wrapper .ptg-sc-value {\n    font-size: 20px;\n    font-weight: bold;\n    color: #0f172a;\n}\n#ptg-app-wrapper .ptg-dist-table, \n#ptg-app-wrapper .ptg-details-table, \n#ptg-app-wrapper .ptg-matrix-grid-table {\n    width: 100%;\n    border-collapse: collapse;\n    margin-top: 10px;\n}\n#ptg-app-wrapper .ptg-dist-table th, #ptg-app-wrapper .ptg-dist-table td,\n#ptg-app-wrapper .ptg-details-table th, #ptg-app-wrapper .ptg-details-table td,\n#ptg-app-wrapper .ptg-matrix-grid-table th, #ptg-app-wrapper .ptg-matrix-grid-table td {\n    border: 1px solid #cbd5e1;\n    padding: 8px 12px;\n    font-size: 12px;\n    text-align: left;\n    word-break: break-word;\n}\n#ptg-app-wrapper .ptg-matrix-box {\n    margin-top: 15px;\n}\n\n#ptg-app-wrapper .ptg-finding-card {\n    background: #fff;\n    border: 1px solid #cbd5e1;\n    border-radius: 6px;\n    padding: 15px;\n    margin-bottom: 15px;\n}\n#ptg-app-wrapper .ptg-finding-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 10px;\n    border-bottom: 1px solid #f1f5f9;\n    padding-bottom: 8px;\n}\n#ptg-app-wrapper .ptg-severity-badge {\n    padding: 2px 8px;\n    border-radius: 4px;\n    font-size: 11px;\n    font-weight: bold;\n    color: #fff;\n}\n#ptg-app-wrapper .badge-critical { background: #721c24; }\n#ptg-app-wrapper .badge-high { background: #dc3545; }\n#ptg-app-wrapper .badge-medium { background: #fd7e14; }\n#ptg-app-wrapper .badge-low { background: #ffc107; color: #333 !important; }\n#ptg-app-wrapper .badge-info { background: #17a2b8; }\n<\/style>\n\n<!-- ================================================================= -->\n<!-- ISOLATED & STRICT CLIENT-SIDE JAVASCRIPT MODULE -->\n<!-- ================================================================= -->\n\n<script>\n(function() {\n    'use strict';\n\n    const STORAGE_KEY = 'ptg_report_generator_state_v1';\n\n    let vulnerabilities = [\n        {\n            id: 1,\n            title: \"Remote Code Execution via Insecure Deserialization\",\n            severity: \"Critical\",\n            status: \"Open\",\n            cvss: \"9.8\",\n            cwe: \"CWE-502\",\n            endpoint: \"\/api\/v1\/process-job\",\n            description: \"An unauthenticated Java deserialization flaw permits remote code execution on backend worker nodes.\",\n            impact: \"Full server compromise, data exfiltration, lateral movement.\",\n            remediation: \"Avoid native serialization mechanisms; implement safe JSON serializers or strict type whitelisting.\"\n        },\n        {\n            id: 2,\n            title: \"Broken Object Level Authorization (BOLA) in User Profile API\",\n            severity: \"High\",\n            status: \"Open\",\n            cvss: \"8.1\",\n            cwe: \"CWE-639\",\n            endpoint: \"\/api\/v1\/users\/{id}\/profile\",\n            description: \"Lack of authorization checks enables attackers to iterate through numeric user IDs and view private records.\",\n            impact: \"Mass unauthorized disclosure of personally identifiable information (PII).\",\n            remediation: \"Enforce rigorous ownership verification checks on every server-side data access request.\"\n        }\n    ];\n\n    function initApp() {\n        loadFromLocalStorage();\n        bindEvents();\n        renderVulnerabilities();\n        updatePreview();\n    }\n\n    function bindEvents() {\n        const printBtn = document.getElementById('ptg-btn-print');\n        if (printBtn) printBtn.addEventListener('click', handleIsolatedPrint);\n\n        const exportBtn = document.getElementById('ptg-btn-export');\n        if (exportBtn) exportBtn.addEventListener('click', handleHtmlExport);\n\n        const copyHtmlBtn = document.getElementById('ptg-btn-copy-html');\n        if (copyHtmlBtn) copyHtmlBtn.addEventListener('click', handleCopyHtml);\n\n        const copyTextBtn = document.getElementById('ptg-btn-copy-text');\n        if (copyTextBtn) copyTextBtn.addEventListener('click', handleCopyText);\n\n        const saveBtn = document.getElementById('ptg-btn-save');\n        if (saveBtn) saveBtn.addEventListener('click', handleManualSave);\n\n        const resetBtn = document.getElementById('ptg-btn-reset');\n        if (resetBtn) resetBtn.addEventListener('click', handleReset);\n\n        const newBtn = document.getElementById('ptg-btn-new');\n        if (newBtn) newBtn.addEventListener('click', handleNewReport);\n\n        const sampleBtn = document.getElementById('ptg-btn-sample');\n        if (sampleBtn) sampleBtn.addEventListener('click', handleLoadSample);\n\n        const addVulnBtn = document.getElementById('ptg-btn-add-vuln');\n        if (addVulnBtn) addVulnBtn.addEventListener('click', handleAddVulnerability);\n\n        \/\/ Search and filter listeners\n        const searchInput = document.getElementById('ptg-search-vuln');\n        const filterSeverity = document.getElementById('ptg-filter-severity');\n        const filterStatus = document.getElementById('ptg-filter-status');\n        if (searchInput) searchInput.addEventListener('input', renderVulnerabilities);\n        if (filterSeverity) filterSeverity.addEventListener('change', renderVulnerabilities);\n        if (filterStatus) filterStatus.addEventListener('change', renderVulnerabilities);\n\n        \/\/ Live input sync & autosave bindings\n        const inputs = document.querySelectorAll('#ptg-app-wrapper input, #ptg-app-wrapper select, #ptg-app-wrapper textarea');\n        inputs.forEach(input => {\n            input.addEventListener('input', () => {\n                updatePreview();\n                autosaveState();\n                handleAutoExpand(input);\n            });\n            input.addEventListener('change', () => {\n                updatePreview();\n                autosaveState();\n            });\n        });\n\n        const templateSelect = document.getElementById('ptg-template-select');\n        if (templateSelect) {\n            templateSelect.addEventListener('change', function(e) {\n                const renderArea = document.getElementById('ptg-report-render-area');\n                if (renderArea) {\n                    renderArea.className = 'ptg-report-render-box ptg-report-preview ' + e.target.value;\n                }\n                autosaveState();\n            });\n        }\n    }\n\n    function handleAutoExpand(textarea) {\n        if (textarea.classList.contains('ptg-auto-expand')) {\n            textarea.style.height = 'auto';\n            textarea.style.height = textarea.scrollHeight + 'px';\n        }\n        if (textarea.id === 'ptg-exec-summary') {\n            const counter = document.getElementById('ptg-exec-counter');\n            if (counter) {\n                counter.textContent = textarea.value.length + '\/1000 chars';\n            }\n        }\n    }\n\n    function updatePreview() {\n        \/\/ Sync Client & Metadata Details\n        setVal('prev-client-name', getVal('ptg-company-name') || getVal('ptg-client-name') || 'CyberCorp Global');\n        setVal('prev-scope', getVal('ptg-assessment-scope') || 'https:\/\/app.cybercorp.com');\n        setVal('prev-date', getVal('ptg-assessment-date') || '2026-08-01');\n        setVal('prev-prepared', getVal('ptg-prepared-by') || 'Senior Penetration Tester');\n        setVal('prev-version', getVal('ptg-report-version') || '1.0');\n        setVal('prev-confidential', getVal('ptg-confidentiality') || 'Confidential');\n        setVal('prev-report-title', 'PENETRATION TESTING REPORT');\n        setVal('prev-project-name', getVal('ptg-project-name') || 'Q3 Annual Security Audit');\n        setVal('prev-assessment-type', getVal('ptg-assessment-type') || 'Web Application & API Penetration Test');\n        setVal('prev-exec-summary-text', getVal('ptg-exec-summary') || 'High-level overview of the security assessment findings...');\n\n        \/\/ Sync Engagement Details\n        setVal('prev-eng-project', getVal('ptg-project-name') || 'Q3 Annual Security Audit');\n        setVal('prev-eng-standard', getVal('ptg-testing-standard') || 'OWASP Top 10');\n        setVal('prev-eng-method', getVal('ptg-methodology') || 'Black Box');\n        setVal('prev-eng-scope', getVal('ptg-assessment-scope') || 'https:\/\/app.cybercorp.com');\n        setVal('prev-eng-timeline', getVal('ptg-timeline') || '10 Business Days');\n\n        \/\/ Tools Checklist sync\n        const checkedTools = [];\n        document.querySelectorAll('#ptg-tools-checklist input:checked').forEach(cb => {\n            checkedTools.push(cb.value);\n        });\n        setVal('prev-tools-list', checkedTools.join(', '));\n\n        \/\/ Attack Surface sync\n        setVal('prev-as-dom', getVal('ptg-as-domains') || '4');\n        setVal('prev-as-sub', getVal('ptg-as-subdomains') || '18');\n        setVal('prev-as-end', getVal('ptg-as-endpoints') || '230');\n        setVal('prev-as-srv', getVal('ptg-as-services') || '12');\n        setVal('prev-as-prt', getVal('ptg-as-ports') || '21, 22, 80, 443');\n        setVal('prev-as-app', (getVal('ptg-as-apps') || '3') + ' \/ ' + (getVal('ptg-as-apis') || '42 Endpoints'));\n        setVal('prev-as-tch', getVal('ptg-as-tech') || 'React, Python\/Django');\n\n        renderSeverityCounts();\n        renderFindingsPreview();\n    }\n\n    function getVal(id) {\n        const el = document.getElementById(id);\n        return el ? el.value : '';\n    }\n\n    function setVal(id, val) {\n        const el = document.getElementById(id);\n        if (el) el.textContent = val;\n    }\n\n    function renderSeverityCounts() {\n        let counts = { Critical: 0, High: 0, Medium: 0, Low: 0, Informational: 0 };\n        vulnerabilities.forEach(v => {\n            if (counts[v.severity] !== undefined) counts[v.severity]++;\n        });\n        const total = vulnerabilities.length;\n\n        setVal('count-critical', counts.Critical);\n        setVal('count-high', counts.High);\n        setVal('count-medium', counts.Medium);\n        setVal('count-low', counts.Low);\n        setVal('count-info', counts.Informational);\n        setVal('count-total', total);\n\n        let posture = 'Secure';\n        if (counts.Critical > 0 || counts.High > 2) posture = 'High Risk';\n        else if (counts.High > 0 || counts.Medium > 3) posture = 'Moderate Risk';\n        else if (counts.Medium > 0 || counts.Low > 0) posture = 'Low Risk';\n        setVal('prev-sec-rating', posture);\n\n        let score = '2.0 \/ 10';\n        if (total > 0) {\n            let weighted = (counts.Critical * 10 + counts.High * 8 + counts.Medium * 5 + counts.Low * 2 + counts.Informational * 0.5) \/ total;\n            score = weighted.toFixed(1) + ' \/ 10';\n        }\n        setVal('prev-risk-score', score);\n    }\n\n    function renderVulnerabilities() {\n        const container = document.getElementById('ptg-vuln-container');\n        if (!container) return;\n        container.innerHTML = '';\n\n        const searchQuery = (document.getElementById('ptg-search-vuln')?.value || '').toLowerCase();\n        const filterSev = document.getElementById('ptg-filter-severity')?.value || '';\n        const filterStat = document.getElementById('ptg-filter-status')?.value || '';\n\n        const filtered = vulnerabilities.filter(v => {\n            const matchesSearch = v.title.toLowerCase().includes(searchQuery) || (v.description && v.description.toLowerCase().includes(searchQuery));\n            const matchesSev = !filterSev || v.severity === filterSev;\n            const matchesStat = !filterStat || v.status === filterStat;\n            return matchesSearch && matchesSev && matchesStat;\n        });\n\n        if (filtered.length === 0) {\n            container.innerHTML = '<p style=\"color:#64748b; font-size:13px; text-align:center; padding:15px;\">No matching vulnerabilities found.<\/p>';\n            return;\n        }\n\n        filtered.forEach((v, index) => {\n            const item = document.createElement('div');\n            item.className = 'ptg-vuln-item-card';\n            item.innerHTML = `\n                <div style=\"display:flex; justify-content:space-between; align-items:center;\">\n                    <strong>#${v.id} - ${escapeHtml(v.title)}<\/strong>\n                    <button type=\"button\" class=\"ptg-btn ptg-btn-danger\" style=\"padding: 2px 6px; font-size:11px;\" data-del-id=\"${v.id}\">Delete<\/button>\n                <\/div>\n                <div class=\"ptg-grid-2\">\n                    <div class=\"ptg-field\"><label>Title<\/label><input type=\"text\" class=\"ptg-input vuln-input\" data-field=\"title\" data-id=\"${v.id}\" value=\"${escapeHtml(v.title)}\"><\/div>\n                    <div class=\"ptg-field\"><label>Severity<\/label>\n                        <select class=\"ptg-select vuln-input\" data-field=\"severity\" data-id=\"${v.id}\">\n                            <option ${v.severity==='Critical'?'selected':''}>Critical<\/option>\n                            <option ${v.severity==='High'?'selected':''}>High<\/option>\n                            <option ${v.severity==='Medium'?'selected':''}>Medium<\/option>\n                            <option ${v.severity==='Low'?'selected':''}>Low<\/option>\n                            <option ${v.severity==='Informational'?'selected':''}>Informational<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"ptg-field\"><label>Status<\/label>\n                        <select class=\"ptg-select vuln-input\" data-field=\"status\" data-id=\"${v.id}\">\n                            <option ${v.status==='Open'?'selected':''}>Open<\/option>\n                            <option ${v.status==='Fixed'?'selected':''}>Fixed<\/option>\n                            <option ${v.status==='Partially Fixed'?'selected':''}>Partially Fixed<\/option>\n                            <option ${v.status==='Accepted Risk'?'selected':''}>Accepted Risk<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"ptg-field\"><label>Endpoint \/ Target<\/label><input type=\"text\" class=\"ptg-input vuln-input\" data-field=\"endpoint\" data-id=\"${v.id}\" value=\"${escapeHtml(v.endpoint || '')}\"><\/div>\n                    <div class=\"ptg-field ptg-col-span-2\"><label>Description<\/label><textarea class=\"ptg-textarea vuln-input\" data-field=\"description\" data-id=\"${v.id}\" rows=\"2\">${escapeHtml(v.description || '')}<\/textarea><\/div>\n                    <div class=\"ptg-field ptg-col-span-2\"><label>Impact<\/label><input type=\"text\" class=\"ptg-input vuln-input\" data-field=\"impact\" data-id=\"${v.id}\" value=\"${escapeHtml(v.impact || '')}\"><\/div>\n                    <div class=\"ptg-field ptg-col-span-2\"><label>Remediation<\/label><input type=\"text\" class=\"ptg-input vuln-input\" data-field=\"remediation\" data-id=\"${v.id}\" value=\"${escapeHtml(v.remediation || '')}\"><\/div>\n                <\/div>\n            `;\n            container.appendChild(item);\n        });\n\n        \/\/ Bind delete & update handlers\n        container.querySelectorAll('[data-del-id]').forEach(btn => {\n            btn.addEventListener('click', function() {\n                const id = parseInt(this.getAttribute('data-del-id'));\n                vulnerabilities = vulnerabilities.filter(x => x.id !== id);\n                renderVulnerabilities();\n                updatePreview();\n                autosaveState();\n            });\n        });\n\n        container.querySelectorAll('.vuln-input').forEach(input => {\n            input.addEventListener('input', function() {\n                const id = parseInt(this.getAttribute('data-id'));\n                const field = this.getAttribute('data-field');\n                const vuln = vulnerabilities.find(x => x.id === id);\n                if (vuln) {\n                    vuln[field] = this.value;\n                    updatePreview();\n                    autosaveState();\n                }\n            });\n        });\n    }\n\n    function renderFindingsPreview() {\n        const container = document.getElementById('prev-findings-render-container');\n        if (!container) return;\n        container.innerHTML = '';\n\n        if (vulnerabilities.length === 0) {\n            container.innerHTML = '<p style=\"color:#64748b;\">No vulnerability findings recorded.<\/p>';\n            return;\n        }\n\n        vulnerabilities.forEach((v, index) => {\n            const card = document.createElement('div');\n            card.className = 'ptg-finding-card';\n            const badgeClass = 'badge-' + (v.severity ? v.severity.toLowerCase() : 'info');\n            card.innerHTML = `\n                <div class=\"ptg-finding-header\">\n                    <strong>5.${index + 1} ${escapeHtml(v.title)}<\/strong>\n                    <span class=\"ptg-severity-badge ${badgeClass}\">${escapeHtml(v.severity)} [${escapeHtml(v.status)}]<\/span>\n                <\/div>\n                <p><strong>Affected Endpoint:<\/strong> ${escapeHtml(v.endpoint || 'N\/A')}<\/p>\n                <p><strong>Description:<\/strong> ${escapeHtml(v.description || 'N\/A')}<\/p>\n                <p><strong>Business Impact:<\/strong> ${escapeHtml(v.impact || 'N\/A')}<\/p>\n                <p><strong>Remediation Guidance:<\/strong> ${escapeHtml(v.remediation || 'N\/A')}<\/p>\n            `;\n            container.appendChild(card);\n        });\n    }\n\n    function handleAddVulnerability() {\n        const newId = vulnerabilities.length > 0 ? Math.max(...vulnerabilities.map(x => x.id)) + 1 : 1;\n        vulnerabilities.push({\n            id: newId,\n            title: \"New Vulnerability Finding\",\n            severity: \"Medium\",\n            status: \"Open\",\n            cvss: \"5.3\",\n            cwe: \"CWE-200\",\n            endpoint: \"\/api\/v1\/resource\",\n            description: \"Detailed technical description of the discovered vulnerability...\",\n            impact: \"Potential compromise of confidentiality or integrity.\",\n            remediation: \"Apply necessary security patches and input validation controls.\"\n        });\n        renderVulnerabilities();\n        updatePreview();\n        autosaveState();\n    }\n\n    function handleIsolatedPrint(e) {\n        if (e) e.preventDefault();\n        const previewContainer = document.querySelector('.ptg-report-preview');\n        if (!previewContainer) {\n            alert('Error: Report preview container not found.');\n            return;\n        }\n\n        const iframe = document.createElement('iframe');\n        iframe.style.position = 'fixed';\n        iframe.style.right = '0';\n        iframe.style.bottom = '0';\n        iframe.style.width = '0';\n        iframe.style.height = '0';\n        iframe.style.border = '0';\n        document.body.appendChild(iframe);\n\n        const doc = iframe.contentWindow.document;\n        doc.open();\n        doc.write('<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Penetration Testing Report<\/title>');\n        doc.write(`\n            <style>\n                @page { size: A4 portrait; margin: 15mm; }\n                body { font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; font-size: 11pt; color: #000; background: #fff; margin: 0; padding: 0; line-height: 1.5; }\n                .ptg-report-preview { width: 100% !important; margin: 0 !important; padding: 0 !important; box-shadow: none !important; border: none !important; }\n                .ptg-page { page-break-before: always; break-before: page; padding: 20px 0; box-sizing: border-box; border: none !important; }\n                .ptg-cover-page { page-break-before: avoid; break-before: avoid; min-height: 90vh; display: flex; flex-direction: column; justify-content: space-between; background: #f8fafc !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; padding: 40px; }\n                .ptg-cover-top { display: flex; justify-content: space-between; align-items: flex-start; }\n                .ptg-confidential-badge { background: #ef4444; color: #fff; padding: 4px 10px; border-radius: 4px; font-size: 11px; font-weight: bold; text-transform: uppercase; -webkit-print-color-adjust: exact; print-color-adjust: exact; }\n                .ptg-summary-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-top: 15px; }\n                .ptg-summary-card { background: #f8fafc; border: 1px solid #cbd5e1; border-radius: 6px; padding: 15px; text-align: center; -webkit-print-color-adjust: exact; print-color-adjust: exact; }\n                table { width: 100%; border-collapse: collapse; margin-top: 10px; }\n                th, td { border: 1px solid #cbd5e1; padding: 8px 12px; font-size: 11pt; text-align: left; word-break: break-word; }\n                th { background: #f1f5f9; -webkit-print-color-adjust: exact; print-color-adjust: exact; }\n                .badge-critical { background: #721c24 !important; color: #fff !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; padding: 2px 6px; border-radius: 4px; font-weight: bold; }\n                .badge-high { background: #dc3545 !important; color: #fff !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; padding: 2px 6px; border-radius: 4px; font-weight: bold; }\n                .badge-medium { background: #fd7e14 !important; color: #fff !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; padding: 2px 6px; border-radius: 4px; font-weight: bold; }\n                .badge-low { background: #ffc107 !important; color: #333 !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; padding: 2px 6px; border-radius: 4px; font-weight: bold; }\n                .badge-info { background: #17a2b8 !important; color: #fff !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; padding: 2px 6px; border-radius: 4px; font-weight: bold; }\n            <\/style>\n        `);\n        doc.write('<\/head><body>');\n        doc.write(previewContainer.outerHTML);\n        doc.write('<\/body><\/html>');\n        doc.close();\n\n        iframe.contentWindow.onload = function() {\n            setTimeout(() => {\n                iframe.contentWindow.focus();\n                iframe.contentWindow.print();\n                setTimeout(() => { document.body.removeChild(iframe); }, 1000);\n            }, 500);\n        };\n    }\n\n    function handleHtmlExport() {\n        const previewContainer = document.querySelector('.ptg-report-preview');\n        if (!previewContainer) return;\n        const htmlContent = '<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Penetration Testing Report<\/title><\/head><body>' + previewContainer.outerHTML + '<\/body><\/html>';\n        const blob = new Blob([htmlContent], { type: 'text\/html' });\n        const url = URL.createObjectURL(blob);\n        const a = document.createElement('a');\n        a.href = url;\n        a.download = 'Penetration_Testing_Report.html';\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n        URL.revokeObjectURL(url);\n    }\n\n    function handleCopyHtml() {\n        const previewContainer = document.querySelector('.ptg-report-preview');\n        if (!previewContainer) return;\n        navigator.clipboard.writeText(previewContainer.outerHTML).then(() => {\n            alert('Report HTML markup copied to clipboard successfully.');\n        }).catch(err => {\n            alert('Failed to copy HTML: ' + err);\n        });\n    }\n\n    function handleCopyText() {\n        const previewContainer = document.querySelector('.ptg-report-preview');\n        if (!previewContainer) return;\n        navigator.clipboard.writeText(previewContainer.innerText).then(() => {\n            alert('Report text content copied to clipboard successfully.');\n        }).catch(err => {\n            alert('Failed to copy text: ' + err);\n        });\n    }\n\n    function autosaveState() {\n        try {\n            const state = {\n                clientName: getVal('ptg-client-name'),\n                companyName: getVal('ptg-company-name'),\n                clientContact: getVal('ptg-client-contact'),\n                clientEmail: getVal('ptg-client-email'),\n                clientPhone: getVal('ptg-client-phone'),\n                assessmentType: getVal('ptg-assessment-type'),\n                assessmentScope: getVal('ptg-assessment-scope'),\n                website: getVal('ptg-website'),\n                ipAddress: getVal('ptg-ip-address'),\n                appName: getVal('ptg-app-name'),\n                appVersion: getVal('ptg-app-version'),\n                environment: getVal('ptg-environment'),\n                assessmentDate: getVal('ptg-assessment-date'),\n                completionDate: getVal('ptg-completion-date'),\n                preparedBy: getVal('ptg-prepared-by'),\n                reviewedBy: getVal('ptg-reviewed-by'),\n                approvedBy: getVal('ptg-approved-by'),\n                reportVersion: getVal('ptg-report-version'),\n                confidentiality: getVal('ptg-confidentiality'),\n                execSummary: getVal('ptg-exec-summary'),\n                projectName: getVal('ptg-project-name'),\n                testingStandard: getVal('ptg-testing-standard'),\n                methodology: getVal('ptg-methodology'),\n                timeline: getVal('ptg-timeline'),\n                objectives: getVal('ptg-objectives'),\n                roe: getVal('ptg-roe'),\n                limitations: getVal('ptg-limitations'),\n                assumptions: getVal('ptg-assumptions'),\n                asDomains: getVal('ptg-as-domains'),\n                asSubdomains: getVal('ptg-as-subdomains'),\n                asEndpoints: getVal('ptg-as-endpoints'),\n                asServices: getVal('ptg-as-services'),\n                asPorts: getVal('ptg-as-ports'),\n                asApps: getVal('ptg-as-apps'),\n                asApis: getVal('ptg-as-apis'),\n                asTech: getVal('ptg-as-tech'),\n                template: document.getElementById('ptg-template-select')?.value || 'template-1',\n                vulnerabilities: vulnerabilities\n            };\n            localStorage.setItem(STORAGE_KEY, JSON.stringify(state));\n        } catch (e) {\n            console.error('LocalStorage save failed:', e);\n        }\n    }\n\n    function loadFromLocalStorage() {\n        try {\n            const saved = localStorage.getItem(STORAGE_KEY);\n            if (!saved) return;\n            const data = JSON.parse(saved);\n\n            setInputValue('ptg-client-name', data.clientName);\n            setInputValue('ptg-company-name', data.companyName);\n            setInputValue('ptg-client-contact', data.clientContact);\n            setInputValue('ptg-client-email', data.clientEmail);\n            setInputValue('ptg-client-phone', data.clientPhone);\n            setInputValue('ptg-assessment-type', data.assessmentType);\n            setInputValue('ptg-assessment-scope', data.assessmentScope);\n            setInputValue('ptg-website', data.website);\n            setInputValue('ptg-ip-address', data.ipAddress);\n            setInputValue('ptg-app-name', data.appName);\n            setInputValue('ptg-app-version', data.appVersion);\n            setInputValue('ptg-environment', data.environment);\n            setInputValue('ptg-assessment-date', data.assessmentDate);\n            setInputValue('ptg-completion-date', data.completionDate);\n            setInputValue('ptg-prepared-by', data.preparedBy);\n            setInputValue('ptg-reviewed-by', data.reviewedBy);\n            setInputValue('ptg-approved-by', data.approvedBy);\n            setInputValue('ptg-report-version', data.reportVersion);\n            setInputValue('ptg-confidentiality', data.confidentiality);\n            setInputValue('ptg-exec-summary', data.execSummary);\n            setInputValue('ptg-project-name', data.projectName);\n            setInputValue('ptg-testing-standard', data.testingStandard);\n            setInputValue('ptg-methodology', data.methodology);\n            setInputValue('ptg-timeline', data.timeline);\n            setInputValue('ptg-objectives', data.objectives);\n            setInputValue('ptg-roe', data.roe);\n            setInputValue('ptg-limitations', data.limitations);\n            setInputValue('ptg-assumptions', data.assumptions);\n            setInputValue('ptg-as-domains', data.asDomains);\n            setInputValue('ptg-as-subdomains', data.asSubdomains);\n            setInputValue('ptg-as-endpoints', data.asEndpoints);\n            setInputValue('ptg-as-services', data.asServices);\n            setInputValue('ptg-as-ports', data.asPorts);\n            setInputValue('ptg-as-apps', data.asApps);\n            setInputValue('ptg-as-apis', data.asApis);\n            setInputValue('ptg-as-tech', data.asTech);\n\n            if (data.template) {\n                const ts = document.getElementById('ptg-template-select');\n                if (ts) {\n                    ts.value = data.template;\n                    const renderArea = document.getElementById('ptg-report-render-area');\n                    if (renderArea) renderArea.className = 'ptg-report-render-box ptg-report-preview ' + data.template;\n                }\n            }\n\n            if (data.vulnerabilities && Array.isArray(data.vulnerabilities)) {\n                vulnerabilities = data.vulnerabilities;\n            }\n        } catch (e) {\n            console.error('LocalStorage load failed:', e);\n        }\n    }\n\n    function setInputValue(id, val) {\n        if (val !== undefined && val !== null) {\n            const el = document.getElementById(id);\n            if (el) {\n                el.value = val;\n                handleAutoExpand(el);\n            }\n        }\n    }\n\n    function handleManualSave() {\n        autosaveState();\n        alert('Report data successfully saved to browser local storage.');\n    }\n\n    function handleReset() {\n        if (confirm('Are you sure you want to clear all inputs and reset the report?')) {\n            localStorage.removeItem(STORAGE_KEY);\n            document.querySelectorAll('#ptg-app-wrapper input:not([type=\"checkbox\"]), #ptg-app-wrapper textarea').forEach(el => {\n                el.value = '';\n                handleAutoExpand(el);\n            });\n            vulnerabilities = [];\n            renderVulnerabilities();\n            updatePreview();\n        }\n    }\n\n    function handleNewReport() {\n        handleReset();\n    }\n\n    function handleLoadSample() {\n        setInputValue('ptg-client-name', 'Jane Doe');\n        setInputValue('ptg-company-name', 'CyberCorp Global');\n        setInputValue('ptg-project-name', 'Q3 Annual Security Audit');\n        setInputValue('ptg-assessment-scope', 'https:\/\/app.cybercorp.com, 192.168.10.0\/24');\n        setInputValue('ptg-assessment-date', '2026-08-01');\n        setInputValue('ptg-completion-date', '2026-08-10');\n        setInputValue('ptg-exec-summary', 'During the Q3 2026 security assessment, our team identified several high-risk attack vectors including insecure deserialization and authorization bypasses that could allow unauthorized actors to compromise backend infrastructure.');\n        \n        vulnerabilities = [\n            {\n                id: 1,\n                title: \"Remote Code Execution via Insecure Deserialization\",\n                severity: \"Critical\",\n                status: \"Open\",\n                cvss: \"9.8\",\n                cwe: \"CWE-502\",\n                endpoint: \"\/api\/v1\/process-job\",\n                description: \"An unauthenticated Java deserialization flaw permits remote code execution on backend worker nodes.\",\n                impact: \"Full server compromise, data exfiltration, lateral movement.\",\n                remediation: \"Avoid native serialization mechanisms; implement safe JSON serializers or strict type whitelisting.\"\n            },\n            {\n                id: 2,\n                title: \"Broken Object Level Authorization (BOLA) in User Profile API\",\n                severity: \"High\",\n                status: \"Open\",\n                cvss: \"8.1\",\n                cwe: \"CWE-639\",\n                endpoint: \"\/api\/v1\/users\/{id}\/profile\",\n                description: \"Lack of authorization checks enables attackers to iterate through numeric user IDs and view private records.\",\n                impact: \"Mass unauthorized disclosure of personally identifiable information (PII).\",\n                remediation: \"Enforce rigorous ownership verification checks on every server-side data access request.\"\n            }\n        ];\n\n        renderVulnerabilities();\n        updatePreview();\n        autosaveState();\n        alert('Sample professional penetration test data successfully loaded.');\n    }\n\n    function escapeHtml(str) {\n        if (!str) return '';\n        return String(str).replace(\/&\/g, \"&amp;\").replace(\/<\/g, \"&lt;\").replace(\/>\/g, \"&gt;\").replace(\/\"\/g, \"&quot;\").replace(\/'\/g, \"&#039;\");\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', initApp);\n    } else {\n        initApp();\n    }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Penetration Testing Report Generator Generate Professional Cyber Security Pentest Reports Client-Side New Report Load Sample Save (Local) Reset Print Report Export HTML Copy HTML Copy Text Report Template Style: Template 1: Executive Modern Pentest ReportTemplate 2: OWASP Technical StandardTemplate 3: PTES Compliance StandardTemplate 4: Bug Bounty Concise StyleTemplate 5: Enterprise Corporate Audit Client Details &#038; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-894","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/comments?post=894"}],"version-history":[{"count":1,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/894\/revisions"}],"predecessor-version":[{"id":895,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/894\/revisions\/895"}],"wp:attachment":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/media?parent=894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}