{"project":{"id":"6I970cB","userId":"ken.ellis@gmail.com","username":null,"userPicture":null,"name":"Skill Proficiency App - Single Page Prototype","thumbnail":"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","visible":true,"contributors":"","githubRepo":null,"forkedFrom":null,"isTemplate":false,"tags":"","files":{"folder":"","files":[{"name":"assessment.html","content":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Self-Assessment - Skill Proficiency App</title>\n  <link rel=\"stylesheet\" href=\"css/styles.css\">\n  <script src=\"https://unpkg.com/lucide@latest/dist/umd/lucide.js\"></script>\n</head>\n<body>\n\n  <main class=\"assessment-container\">\n    <div class=\"top-nav\">\n      <a href=\"index.html\" class=\"back-link\"><i data-lucide=\"arrow-left\"></i> Back to Home</a>\n    </div>\n\n    <div class=\"user-banner\">\n      <div class=\"user-info-grid\">\n        <div><i data-lucide=\"user\"></i> <strong>Name:</strong> <span id=\"demo-name\">Jack Smith</span></div>\n        <div><i data-lucide=\"mail\"></i> <strong>Email:</strong> <span id=\"demo-email\">jack.smith@companybank.com</span></div>\n        <div><i data-lucide=\"briefcase\"></i> <strong>Role:</strong> <span id=\"demo-title\">Senior Analyst</span></div>\n        <div><i data-lucide=\"building-2\"></i> <strong>Division:</strong> Assurance</div>\n        <div><i data-lucide=\"building\"></i> <strong>Company:</strong> Company Bank</div>\n      </div>\n    </div>\n\n    <section class=\"instructions-section\">\n      <h2>How it works</h2>\n      <p>Review each skill below and select the proficiency level (Foundational - Expert) that best describes your current capabilities. Refer to the Proficiency Scale for guidance. Once all skills are rated, submit your assessment to receive targeted training recommendations.</p>\n    </section>\n\n    <section class=\"legend-section\">\n      <h2>Proficiency Scale</h2>\n      <div id=\"scale-legend\" class=\"scale-grid\"></div>\n    </section>\n    <form id=\"assessment-form\" class=\"assessment-form\">\n      <div class=\"form-header\">\n        <div class=\"fh-left\">Skill & Description</div>\n        <div class=\"fh-right\">Your Rating</div>\n      </div>\n      \n      <div id=\"skills-container\" class=\"skills-list\">\n        <!-- Dynamically populated -->\n      </div>\n      \n      <div class=\"form-actions\">\n        <button type=\"submit\" class=\"btn btn-large\">Submit Assessment</button>\n      </div>\n    </form>\n  </main>\n\n  <script>\n    lucide.createIcons();\n  </script>\n  <script type=\"module\" src=\"js/assessment.js\"></script>\n</body>\n</html>"},{"name":"index.html","content":"<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Skill Proficiency Assessment Prototype</title>\n  <link rel=\"stylesheet\" href=\"css/styles.css\">\n  <script src=\"https://unpkg.com/lucide@latest/dist/umd/lucide.js\"></script>\n</head>\n\n<body>\n\n  <!-- Demo Notice per instructions -->\n  <div class=\"demo-notice\">\n    <strong>Demo:</strong> Functionality of the app will be determined based on role-based access controls inherited\n    from a single-sign-on integration (to be developed in future).\n  </div>\n\n  <header>\n    <h1>Capability Matrix Tool</h1>\n    <p>Assess your capabilities and discover targeted training.</p>\n  </header>\n\n  <main class=\"container\">\n    <div class=\"card\">\n      <i data-lucide=\"clipboard-list\" style=\"width: 48px; height: 48px; color: var(--color-red); margin-bottom: 1rem;\"></i>\n      <h2>Reviewer</h2>\n      <p>Complete your self-assessment to identify your current proficiency levels and receive personalized training\n        recommendations.</p>\n      <a href=\"assessment.html?role=reviewer\" class=\"btn\">Begin Self-Assessment</a>\n    </div>\n\n\n    <div class=\"card\">\n      <i data-lucide=\"bar-chart-2\" style=\"width: 48px; height: 48px; color: var(--color-red); margin-bottom: 1rem;\"></i>\n      <h2>Manager</h2>\n      <p>Access aggregate reports and analyze the team's overall proficiency metrics across various roles and skills.\n      </p>\n      <a href=\"reporting.html\" class=\"btn\">Reporting</a>\n    </div>\n  </main>\n\n  <script>\n    lucide.createIcons();\n  </script>\n</body>\n\n</html>"},{"name":"README.md","content":"# Blnq Project\n"},{"name":"reporting.html","content":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Manager Reporting - Skill Proficiency Assessment</title>\n  <link rel=\"stylesheet\" href=\"css/styles.css\">\n  <script src=\"https://unpkg.com/lucide@latest/dist/umd/lucide.js\"></script>\n</head>\n<body class=\"manager-reporting-page\">\n\n  <!-- Demo Notice per instructions -->\n  <div class=\"demo-notice\" style=\"background: var(--color-text-dark); color: var(--color-white); text-align: center; padding: 0.5rem; font-size: 0.85rem; border-bottom: 1px solid var(--color-gray-medium);\">\n    <strong>Manager View:</strong> Highly polished export utility for leaders & HR managers.\n  </div>\n  <header class=\"app-header\">\n    <div class=\"header-container\">\n      <div class=\"header-left\">\n        <a href=\"index.html\" class=\"back-link\">\n          <i data-lucide=\"arrow-left\"></i> Back to Hub\n        </a>\n        <h1>Manager Reporting & Exports</h1>\n        <p class=\"subtitle\">Access, filter, and export assessment reports across Regions, Skills, and Managers.</p>\n      </div>\n      <div class=\"header-right\">\n        <span class=\"role-badge manager-badge\">\n          <i data-lucide=\"shield-check\"></i> Manager Access\n        </span>\n      </div>\n    </div>\n  </header>\n\n  <main class=\"main-content\">\n    <div class=\"reporting-container\">\n      \n      <!-- Report Selection Cards -->\n      <section class=\"report-selection-section\">\n        <h2>Select Report Category</h2>\n        <p class=\"section-desc\">Choose a reporting perspective below to preview live data and generate custom CSV exports.</p>\n        \n        <div class=\"report-cards-grid\">\n          <!-- Card 1: Region -->\n          <div class=\"report-card active\" data-report-type=\"region\">\n            <div class=\"card-icon-wrapper\">\n              <i data-lucide=\"globe\"></i>\n            </div>\n            <div class=\"card-info\">\n              <h3>Report by Region</h3>\n              <p>Analysis of average skill proficiencies and competency distributions grouped by geographical region (AMER, EMEA, APAC).</p>\n            </div>\n            <button class=\"btn btn-secondary card-action\" onclick=\"setActiveReport('region')\">\n              <i data-lucide=\"eye\"></i> Select Report\n            </button>\n          </div>\n\n          <!-- Card 2: Skill -->\n          <div class=\"report-card\" data-report-type=\"skill\">\n            <div class=\"card-icon-wrapper\">\n              <i data-lucide=\"award\"></i>\n            </div>\n            <div class=\"card-info\">\n              <h3>Report by Skill</h3>\n              <p>Detailed performance index per skill, identifying key strengths, development gaps, and expert counts across the taxonomy.</p>\n            </div>\n            <button class=\"btn btn-secondary card-action\" onclick=\"setActiveReport('skill')\">\n              <i data-lucide=\"eye\"></i> Select Report\n            </button>\n          </div>\n\n          <!-- Card 3: Manager -->\n          <div class=\"report-card\" data-report-type=\"manager\">\n            <div class=\"card-icon-wrapper\">\n              <i data-lucide=\"users\"></i>\n            </div>\n            <div class=\"card-info\">\n              <h3>Report by Manager</h3>\n              <p>Team assessment summaries organized by direct managers, highlighting team-level capabilities and target alignments.</p>\n            </div>\n            <button class=\"btn btn-secondary card-action\" onclick=\"setActiveReport('manager')\">\n              <i data-lucide=\"eye\"></i> Select Report\n            </button>\n          </div>\n        </div>\n      </section>\n\n      <!-- Active Report Preview & Action -->\n      <section class=\"report-preview-section\">\n        <div class=\"preview-header\">\n          <div class=\"preview-title-block\">\n            <h2 id=\"active-report-title\">Report by Region</h2>\n            <p id=\"active-report-desc\">Detailed view of self-assessment outputs grouped by office region.</p>\n          </div>\n          <div class=\"preview-actions\">\n            <div class=\"search-box\">\n              <i data-lucide=\"search\" class=\"search-icon\"></i>\n              <input type=\"text\" id=\"report-search\" placeholder=\"Search preview data...\" oninput=\"filterReportPreview()\">\n            </div>\n            <button class=\"btn btn-primary\" id=\"btn-export-csv\" onclick=\"triggerCSVDownload()\">\n              <i data-lucide=\"download\"></i> Export to CSV\n            </button>\n          </div>\n        </div>\n\n        <div class=\"preview-table-wrapper\" tabindex=\"0\" role=\"region\" aria-label=\"Report Data Preview Table\">\n          <table class=\"preview-table\" id=\"preview-table\">\n            <thead>\n              <tr id=\"table-headers\">\n                <!-- Populated via JS -->\n              </tr>\n            </thead>\n            <tbody id=\"table-body\">\n              <!-- Populated via JS -->\n            </tbody>\n          </table>\n          <div id=\"no-results-msg\" class=\"no-results-message hidden\">\n            <i data-lucide=\"alert-circle\"></i>\n            <p>No matching data found for your search query.</p>\n          </div>\n        </div>\n\n        <div class=\"preview-footer\">\n          <span id=\"record-count\">Showing 0 records</span>\n          <span class=\"preview-badge\"><i data-lucide=\"info\"></i> Table displays a complete preview. CSV export includes all matching metadata.</span>\n        </div>\n      </section>\n\n    </div>\n  </main>\n\n  <footer class=\"app-footer-bottom\">\n    <div class=\"container\">\n      <p>&copy; 2025 Assurance & Review Skill Assessment Center. Confidential Manager Portal.</p>\n    </div>\n  </footer>\n\n  <script type=\"module\" src=\"js/reporting.js\"></script>\n</body>\n</html>\n"},{"name":"results.html","content":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Assessment Results - Skill Proficiency Assessment</title>\n  <link rel=\"stylesheet\" href=\"css/styles.css\">\n  <script src=\"https://unpkg.com/lucide@latest/dist/umd/lucide.js\"></script>\n</head>\n<body>\n\n  <header class=\"app-header\">\n    <div class=\"header-container\">\n      <div class=\"header-left\">\n        <a href=\"index.html\" class=\"back-link\">\n          <i data-lucide=\"arrow-left\"></i> Back to Hub\n        </a>\n        <h1>Your Self-Assessment Results</h1>\n        <p class=\"subtitle\" id=\"results-subtitle\">Individual proficiency review and development analysis.</p>\n      </div>\n      <div class=\"header-right\">\n        <span class=\"role-badge\" id=\"results-role-badge\"></span>\n      </div>\n    </div>\n  </header>\n\n  <main class=\"main-content\">\n    <div class=\"results-container\">\n\n      <!-- Thank You Card -->\n      <section class=\"card summary-card text-center\" style=\"margin-bottom: 2rem;\">\n        <div class=\"success-icon-wrapper\" style=\"color: var(--color-red); margin-bottom: 1rem;\">\n          <i data-lucide=\"check-circle\" style=\"width: 48px; height: 48px;\"></i>\n        </div>\n        <h2>Assessment Completed Successfully</h2>\n        <p style=\"max-width: 600px; margin: 0.5rem auto 1.5rem; color: var(--color-gray-dark);\">\n          Thank you for completing your proficiency self-assessment. Your responses have been saved locally.\n        </p>\n      </section>\n\n      <!-- Summary Cards -->\n      <section class=\"card\" style=\"margin-bottom: 2rem;\">\n        <h2>Summary</h2>\n        <div class=\"summary-stats-grid\" id=\"summaryCards\" style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1.5rem; margin-top: 1rem;\">\n          <!-- Populated by JS -->\n        </div>\n      </section>\n\n      <!-- Below Expectation Skills -->\n      <section class=\"card\" style=\"margin-bottom: 2rem;\" id=\"belowExpectation\">\n        <!-- Populated by JS -->\n      </section>\n\n      <!-- Full Category Scores -->\n      <section class=\"card\" style=\"margin-bottom: 2rem;\">\n        <h2>All Skills Breakdown</h2>\n        <p class=\"card-desc\" style=\"color: var(--color-gray-dark); margin-bottom: 1.5rem;\">Detailed scores for every skill, organized by category.</p>\n        <div id=\"categoryScores\">\n          <!-- Populated by JS -->\n        </div>\n      </section>\n\n      <!-- Actions -->\n      <section class=\"results-actions\" id=\"resultsActions\" style=\"display: flex; gap: 1rem; justify-content: center; margin-bottom: 2rem;\">\n        <!-- Populated by JS -->\n      </section>\n\n    </div>\n  </main>\n\n  <footer class=\"app-footer-bottom\">\n    <div class=\"container\">\n      <p>&copy; 2025 Assurance & Review Skill Assessment Center. Confidential Results Summary.</p>\n    </div>\n  </footer>\n\n  <script type=\"module\" src=\"js/results.js\"></script>\n</body>\n</html>\n"}],"folders":[{"folder":"css","files":[{"name":"styles.css","content":":root {\n  --color-red: #D32F2F;\n  --color-red-hover: #B71C1C;\n  --color-red-bg: #FFEBEE;\n  --color-green: #2E7D32;\n  --color-green-light: #E8F5E9;\n  --color-blue: #1565C0;\n  --color-blue-light: #E3F2FD;\n  --color-white: #FFFFFF;\n  --color-gray-light: #F5F5F5;\n  --color-gray-medium: #E0E0E0;\n  --color-gray-dark: #616161;\n  --color-text-dark: #212121;\n  --color-text: #212121;\n  --color-bg-light: #FAFAFA;\n  --radius-sm: 6px;\n  --radius-md: 8px;\n  --radius-lg: 12px;\n  --font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n}\n\nbody {\n  background-color: var(--color-gray-light);\n  color: var(--color-text-dark);\n  font-family: var(--font-family);\n  margin: 0;\n  padding: 0;\n  line-height: 1.6;\n}\n\n.demo-notice {\n  background-color: var(--color-red);\n  color: var(--color-white);\n  padding: 0.75rem 1rem;\n  text-align: center;\n  font-size: 0.875rem;\n  font-weight: 500;\n}\n\n.demo-notice strong {\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  margin-right: 0.5rem;\n}\n\nheader {\n  background-color: var(--color-white);\n  padding: 3rem 1rem;\n  text-align: center;\n  border-bottom: 1px solid var(--color-gray-medium);\n}\n\nheader h1 {\n  margin: 0 0 0.5rem 0;\n  color: var(--color-text-dark);\n}\n\nheader p {\n  color: #666;\n  margin: 0;\n  font-size: 1.125rem;\n}\n\n.container {\n  max-width: 1100px;\n  margin: 4rem auto;\n  padding: 0 1rem;\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n  gap: 2rem;\n}\n\n.card {\n  background-color: var(--color-white);\n  border: 1px solid var(--color-gray-medium);\n  border-radius: 8px;\n  padding: 2.5rem 2rem;\n  text-align: center;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: space-between;\n  box-shadow: 0 4px 6px rgba(0,0,0,0.05);\n}\n\n.card h2 {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  font-size: 1.5rem;\n}\n\n.card p {\n  color: #555;\n  margin-bottom: 2rem;\n}\n\n.btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  background-color: var(--color-red);\n  color: var(--color-white);\n  padding: 0.75rem 1.5rem;\n  border-radius: 4px;\n  text-decoration: none;\n  font-weight: 600;\n  border: none;\n  cursor: pointer;\n  transition: background-color 0.2s ease;\n  width: 100%;\n  max-width: 250px;\n}\n\n.btn:hover {\n  background-color: var(--color-red-hover);\n}\n\n/* Assessment Page Styles */\n.top-nav {\n  margin-bottom: 1.5rem;\n}\n\n.back-link {\n  display: inline-flex;\n  align-items: center;\n  color: var(--color-red);\n  text-decoration: none;\n  font-weight: 500;\n  font-size: 0.95rem;\n}\n\n.back-link i {\n  width: 18px;\n  height: 18px;\n  margin-right: 0.5rem;\n}\n\n.back-link:hover {\n  text-decoration: underline;\n}\n.assessment-container {\n  max-width: 1000px;\n  margin: 3rem auto;\n  padding: 0 1rem;\n}\n\n.legend-section {\n  background-color: var(--color-white);\n  padding: 2rem;\n  border-radius: 8px;\n  border: 1px solid var(--color-gray-medium);\n  margin-bottom: 3rem;\n  box-shadow: 0 2px 4px rgba(0,0,0,0.03);\n}\n\n.legend-section h2 {\n  margin-top: 0;\n  margin-bottom: 1.5rem;\n  font-size: 1.25rem;\n  border-bottom: 2px solid var(--color-red);\n  display: inline-block;\n  padding-bottom: 0.5rem;\n}\n\n.scale-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: 1.5rem;\n}\n\n.scale-card {\n  background-color: var(--color-gray-light);\n  padding: 1rem;\n  border-radius: 6px;\n  border-left: 4px solid var(--color-red);\n}\n\n.scale-level {\n  font-weight: bold;\n  font-size: 1.1rem;\n  margin-bottom: 0.5rem;\n  color: var(--color-text-dark);\n}\n\n.scale-desc {\n  font-size: 0.9rem;\n  color: #444;\n}\n\n.assessment-form {\n  background-color: var(--color-white);\n  border: 1px solid var(--color-gray-medium);\n  border-radius: 8px;\n  overflow: hidden;\n  box-shadow: 0 4px 6px rgba(0,0,0,0.05);\n}\n\n.form-header {\n  display: flex;\n  background-color: var(--color-text-dark);\n  color: var(--color-white);\n  padding: 1rem 2rem;\n  font-weight: 600;\n}\n\n.fh-left {\n  flex: 1;\n}\n\n.fh-right {\n  width: 250px;\n  text-align: center;\n}\n\n.skills-list {\n  display: flex;\n  flex-direction: column;\n}\n\n.skill-row {\n  display: flex;\n  flex-direction: column;\n  padding: 1.5rem 2rem;\n  border-bottom: 1px solid var(--color-gray-medium);\n  gap: 1.5rem;\n}\n\n.skill-row:last-child {\n  border-bottom: none;\n}\n\n.skill-info {\n  flex: 1;\n}\n\n.skill-options {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n}\n\n.skill-info h3 {\n  margin: 0 0 0.5rem 0;\n  font-size: 1.1rem;\n  color: var(--color-red);\n}\n\n.skill-info p {\n  margin: 0;\n  font-size: 0.95rem;\n  color: #555;\n}\n\n.skill-rating {\n  width: 250px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.radio-label {\n  display: none;\n}\n\n.radio-custom .level-name {\n  font-size: 1.125rem;\n  font-weight: 700;\n  color: var(--color-gray-dark);\n  margin-bottom: 0.25rem;\n  display: block;\n}\n.user-info-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: 1rem;\n}\n\n.user-info-grid div {\n  display: flex;\n  align-items: center;\n  font-size: 0.95rem;\n  color: var(--color-text-dark);\n}\n\n.user-info-grid i {\n  width: 18px;\n  height: 18px;\n  margin-right: 0.5rem;\n  color: var(--color-red);\n}\n\n.user-info-grid strong {\n  margin-right: 0.25rem;\n}\n\n.instructions-section {\n  background-color: var(--color-white);\n  padding: 2rem;\n  border-radius: 8px;\n  border: 1px solid var(--color-gray-medium);\n  margin-bottom: 3rem;\n  box-shadow: 0 2px 4px rgba(0,0,0,0.03);\n}\n\n.instructions-section h2 {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n  color: var(--color-text-dark);\n}\n\n.instructions-section p {\n  margin: 0;\n  color: #444;\n}\n\n/* Category Headers in Form */\n.category-header {\n  background-color: var(--color-gray-light);\n  padding: 1.5rem 2rem;\n  border-bottom: 1px solid var(--color-gray-medium);\n  border-top: 4px solid var(--color-red);\n}\n\n.category-header:first-child {\n  border-top: none; /* Let the form container border handle the top */\n}\n\n.category-header h2 {\n  margin: 0 0 0.5rem 0;\n  font-size: 1.25rem;\n  color: var(--color-text-dark);\n}\n\n.category-header p {\n  margin: 0;\n  font-size: 0.95rem;\n  color: #555;\n}\n\n.subcategory-header {\n  background-color: var(--color-white);\n  padding: 1.25rem 2rem;\n  border-bottom: 1px solid var(--color-gray-medium);\n  border-left: 4px solid var(--color-gray-medium);\n}\n\n.subcategory-header h4 {\n  margin: 0 0 0.25rem 0;\n  font-size: 1.1rem;\n  color: var(--color-text-dark);\n}\n\n.subcategory-header p {\n  margin: 0;\n  font-size: 0.9rem;\n  color: #666;\n}\n\n/* Results Page Styles */\n.results-group {\n  background-color: var(--color-white);\n  border: 1px solid var(--color-gray-medium);\n  border-radius: 8px;\n  margin-bottom: 2rem;\n  overflow: hidden;\n  box-shadow: 0 4px 6px rgba(0,0,0,0.05);\n}\n\n.gaps-group {\n  border-top: 4px solid var(--color-red);\n}\n\n.met-group {\n  border-top: 4px solid #4CAF50;\n}\n\n.success-group {\n  padding: 3rem 2rem;\n  text-align: center;\n  border-top: 4px solid #4CAF50;\n}\n\n.group-title {\n  display: flex;\n  align-items: center;\n  margin: 0;\n  padding: 1.5rem 2rem;\n  font-size: 1.25rem;\n  color: var(--color-text-dark);\n  border-bottom: 1px solid var(--color-gray-medium);\n  background-color: var(--color-gray-light);\n}\n\n.group-title i {\n  margin-right: 0.75rem;\n  width: 24px;\n  height: 24px;\n}\n\n.icon-red {\n  color: var(--color-red);\n}\n\n.group-desc {\n  margin: 0;\n  padding: 1rem 2rem;\n  color: #555;\n  background-color: var(--color-white);\n  border-bottom: 1px solid var(--color-gray-medium);\n}\n\n.result-card {\n  display: flex;\n  padding: 1.5rem 2rem;\n  border-bottom: 1px solid var(--color-gray-medium);\n}\n\n.result-card:last-child {\n  border-bottom: none;\n}\n\n.result-info {\n  flex: 1;\n  padding-right: 2rem;\n}\n\n.result-info h3 {\n  margin: 0 0 0.5rem 0;\n  color: var(--color-text-dark);\n}\n\n.result-info p {\n  margin: 0 0 1rem 0;\n  color: #555;\n  font-size: 0.95rem;\n}\n\n.training-link-wrap {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  font-size: 0.95rem;\n  background-color: #fff8f8;\n  padding: 0.75rem 1rem;\n  border-radius: 4px;\n  border-left: 3px solid var(--color-red);\n}\n\n.training-link {\n  display: inline-flex;\n  align-items: center;\n  color: var(--color-red);\n  font-weight: 600;\n  text-decoration: none;\n}\n\n.training-link:hover {\n  text-decoration: underline;\n}\n\n.training-link i {\n  width: 16px;\n  height: 16px;\n  margin-right: 0.4rem;\n}\n\n.result-scores {\n  display: flex;\n  gap: 1rem;\n  align-items: center;\n}\n\n.score-box {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  min-width: 120px;\n  padding: 1rem;\n  border-radius: 8px;\n  border: 1px solid var(--color-gray-medium);\n  background-color: var(--color-gray-light);\n}\n\n.user-score {\n  background-color: #ffebee;\n  border-color: #ffcdd2;\n}\n\n.score-label {\n  font-size: 0.75rem;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  color: #666;\n  margin-bottom: 0.25rem;\n}\n\n.score-value {\n  font-size: 1.1rem;\n  font-weight: bold;\n  color: var(--color-text-dark);\n  text-align: center;\n}\n\n.user-score .score-value {\n  color: var(--color-red);\n}\n\n.compact-list .result-card {\n  padding: 1rem 2rem;\n}\n  \n.radio-option {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  cursor: pointer;\n  margin: 0;\n  flex: 1;\n}\n\n.radio-option input {\n  position: absolute;\n  opacity: 0;\n  cursor: pointer;\n}\n\n.radio-btn {\n  width: 100%;\n  padding: 0.5rem 1rem;\n  background-color: var(--color-gray-light);\n  border: 2px solid var(--color-gray-medium);\n  border-radius: 4px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n  font-weight: 500;\n  font-size: 0.9rem;\n  color: #555;\n  transition: all 0.2s ease;\n}\n\n.radio-option:hover .radio-btn {\n  border-color: var(--color-red-hover);\n  background-color: #fff;\n}\n\n.radio-option input:checked ~ .radio-btn {\n  background-color: var(--color-red);\n  border-color: var(--color-red);\n  color: white;\n}\n\n.radio-btn.is-target {\n  border-color: var(--color-red);\n  color: white;\n}\n\n/* ==========================================================================\n   DEVELOPMENT AREAS (below-target skills)\n   ========================================================================== */\n.dev-item {\n  padding: 1.25rem 1.5rem;\n  border: 1px solid var(--color-gray-lighter);\n  border-radius: var(--radius-md);\n  background: var(--color-gray-lightest);\n  margin-bottom: 0.75rem;\n}\n\n.dev-item-header {\n  display: flex;\n  align-items: center;\n  gap: 1rem;\n  margin-bottom: 0.5rem;\n  flex-wrap: wrap;\n}\n\n.dev-badge {\n  display: inline-block;\n  padding: 0.2rem 0.6rem;\n  border-radius: var(--radius-sm);\n  font-size: 0.75rem;\n  font-weight: 600;\n  background: var(--color-red-light);\n  color: var(--color-red);\n}\n\n.dev-item-desc {\n  color: var(--color-gray-dark);\n  font-size: 0.9rem;\n  margin: 0 0 0.75rem 0;\n}\n\n.dev-all-pass {\n  display: flex;\n  align-items: center;\n  background: var(--color-green-light);\n  color: var(--color-green-dark, #1a5c2a);\n}\n\n/* ==========================================================================\n   MANAGER REPORTING & EXPORTS\n   ========================================================================== */\n\n.manager-reporting-page {\n  background-color: var(--color-bg-light);\n  min-height: 100vh;\n  display: flex;\n  flex-direction: column;\n}\n\n.reporting-container {\n  max-width: 1200px;\n  margin: 2rem auto;\n  padding: 0 1.5rem;\n  width: 100%;\n  flex: 1;\n}\n\n.report-selection-section {\n  margin-bottom: 3rem;\n}\n\n.section-desc {\n  color: var(--color-gray-dark);\n  margin-top: 0.5rem;\n  margin-bottom: 1.5rem;\n  font-size: 1rem;\n}\n\n.report-cards-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n  gap: 1.5rem;\n}\n\n.report-card {\n  background: white;\n  border: 1px solid var(--color-border);\n  border-radius: 8px;\n  padding: 1.5rem;\n  display: flex;\n  flex-direction: column;\n  transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n  position: relative;\n  overflow: hidden;\n}\n\n.report-card::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 4px;\n  height: 100%;\n  background: transparent;\n  transition: background 0.2s ease;\n}\n\n.report-card.active {\n  border-color: var(--color-red);\n  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);\n}\n\n.report-card.active::before {\n  background: var(--color-red);\n}\n\n.card-icon-wrapper {\n  background: #fdf2f2;\n  color: var(--color-red);\n  width: 48px;\n  height: 48px;\n  border-radius: 8px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-bottom: 1rem;\n}\n\n.report-card.active .card-icon-wrapper {\n  background: var(--color-red);\n  color: white;\n}\n\n.card-icon-wrapper i {\n  width: 24px;\n  height: 24px;\n}\n\n.card-info h3 {\n  font-size: 1.2rem;\n  font-weight: 600;\n  color: var(--color-text-dark);\n  margin-bottom: 0.5rem;\n}\n\n.card-info p {\n  font-size: 0.9rem;\n  color: var(--color-gray-dark);\n  line-height: 1.5;\n  margin-bottom: 1.5rem;\n}\n\n.card-action {\n  margin-top: auto;\n  width: 100%;\n  justify-content: center;\n}\n\n.report-card.active .card-action {\n  background: var(--color-red);\n  color: white;\n  border-color: var(--color-red);\n}\n\n/* Report Preview Area */\n.report-preview-section {\n  background: white;\n  border: 1px solid var(--color-border);\n  border-radius: 8px;\n  padding: 2rem;\n  box-shadow: 0 2px 10px rgba(0,0,0,0.02);\n}\n\n.preview-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  flex-wrap: wrap;\n  gap: 1.5rem;\n  margin-bottom: 2rem;\n  border-bottom: 1px solid var(--color-border);\n  padding-bottom: 1.5rem;\n}\n\n.preview-title-block h2 {\n  font-size: 1.5rem;\n  color: var(--color-text-dark);\n  margin-bottom: 0.25rem;\n}\n\n.preview-title-block p {\n  color: var(--color-gray-dark);\n  font-size: 0.9rem;\n}\n\n.preview-actions {\n  display: flex;\n  gap: 1rem;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n.search-box {\n  position: relative;\n}\n\n.search-icon {\n  position: absolute;\n  left: 12px;\n  top: 50%;\n  transform: translateY(-50%);\n  color: var(--color-gray-dark);\n  width: 18px;\n  height: 18px;\n  pointer-events: none;\n}\n\n.search-box input {\n  padding: 0.6rem 1rem 0.6rem 2.2rem;\n  border: 1px solid var(--color-border);\n  border-radius: 6px;\n  font-size: 0.9rem;\n  width: 240px;\n  transition: all 0.2s ease;\n}\n\n.search-box input:focus {\n  outline: none;\n  border-color: var(--color-red);\n  box-shadow: 0 0 0 3px rgba(211, 47, 47, 0.1);\n}\n\n/* Table styling */\n.preview-table-wrapper {\n  overflow-x: auto;\n  border: 1px solid var(--color-border);\n  border-radius: 6px;\n  margin-bottom: 1.5rem;\n  background: #fdfdfd;\n}\n\n.preview-table {\n  width: 100%;\n  border-collapse: collapse;\n  text-align: left;\n  font-size: 0.9rem;\n}\n\n.preview-table th {\n  background: #f5f5f5;\n  color: var(--color-text-dark);\n  font-weight: 600;\n  padding: 1rem;\n  border-bottom: 2px solid var(--color-border);\n  white-space: nowrap;\n}\n\n.preview-table td {\n  padding: 1rem;\n  border-bottom: 1px solid var(--color-border);\n  color: #444;\n}\n\n.preview-table tr:last-child td {\n  border-bottom: none;\n}\n\n.preview-table tr:hover td {\n  background: #fafafa;\n}\n\n.no-results-message {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 3rem 1.5rem;\n  color: var(--color-gray-dark);\n}\n\n.no-results-message i {\n  width: 48px;\n  height: 48px;\n  margin-bottom: 1rem;\n  stroke-width: 1.5;\n}\n\n.no-results-message.hidden {\n  display: none !important;\n}\n\n/* ==========================================================================\n   RESULTS: Score Category & Skills\n   ========================================================================== */\n\n.score-category {\n  margin-bottom: 2rem;\n}\n\n.score-category__header {\n  margin-bottom: 1rem;\n}\n\n.score-category__header h3 {\n  margin: 0 0 0.25rem 0;\n  font-size: 1.15rem;\n}\n\n.score-category__desc {\n  display: block;\n  font-size: 0.85rem;\n  color: var(--color-gray-dark);\n  margin-bottom: 0.5rem;\n}\n\n.score-category__skills {\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\n\n.score-subcategory {\n  padding-left: 1rem;\n  border-left: 3px solid var(--color-gray-light);\n}\n\n.score-subcategory__name {\n  margin: 0 0 0.25rem 0;\n  font-size: 0.95rem;\n  font-weight: 600;\n}\n\n.score-subcategory__desc {\n  font-size: 0.8rem;\n  color: var(--color-gray-dark);\n  margin: 0 0 0.75rem 0;\n}\n\n.score-skill {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 1rem;\n  padding: 0.6rem 0.75rem;\n  border-radius: var(--radius-sm);\n  background: var(--color-bg-light);\n  border: 1px solid var(--color-gray-light);\n}\n\n.score-skill--below {\n  border-color: var(--color-red);\n  background: var(--color-red-bg);\n}\n\n.score-skill__info {\n  display: flex;\n  flex-direction: column;\n  gap: 0.15rem;\n  min-width: 0;\n}\n\n.score-skill__name {\n  font-weight: 600;\n  font-size: 0.9rem;\n}\n\n.score-skill__desc {\n  font-size: 0.78rem;\n  color: var(--color-gray-dark);\n  line-height: 1.3;\n}\n\n.score-skill__result {\n  display: flex;\n  align-items: center;\n  gap: 0.4rem;\n  flex-shrink: 0;\n}\n\n.score-skill__level {\n  font-size: 0.85rem;\n  font-weight: 600;\n  white-space: nowrap;\n}\n\n.score-skill__alert {\n  width: 16px;\n  height: 16px;\n  color: var(--color-red);\n  flex-shrink: 0;\n}\n\n.text-danger {\n  color: var(--color-red) !important;\n}\n\n.text-success {\n  color: var(--color-green) !important;\n}\n\n/* ==========================================================================\n   RESULTS: Below Expectation Section\n   ========================================================================== */\n\n.below-expectation__header {\n  display: flex;\n  align-items: flex-start;\n  gap: 1rem;\n  margin-bottom: 1.5rem;\n}\n\n.below-expectation__header-icon {\n  flex-shrink: 0;\n  width: 40px;\n  height: 40px;\n  border-radius: var(--radius-sm);\n  background: var(--color-red-bg);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: var(--color-red);\n}\n\n.below-expectation__header h3 {\n  margin: 0 0 0.25rem 0;\n  font-size: 1.1rem;\n  color: var(--color-red);\n}\n\n.below-expectation__header p {\n  margin: 0;\n  font-size: 0.85rem;\n  color: var(--color-gray-dark);\n}\n\n.below-expectation__list {\n  display: flex;\n  flex-direction: column;\n  gap: 0.75rem;\n}\n\n.below-expectation__item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 1rem;\n  padding: 0.75rem 1rem;\n  background: var(--color-bg-light);\n  border: 1px solid var(--color-gray-light);\n  border-left: 4px solid var(--color-red);\n  border-radius: var(--radius-sm);\n}\n\n.below-expectation__item-info {\n  display: flex;\n  flex-direction: column;\n  gap: 0.2rem;\n  min-width: 0;\n}\n\n.below-expectation__item-name {\n  font-weight: 600;\n  font-size: 0.95rem;\n}\n\n.below-expectation__item-meta {\n  font-size: 0.78rem;\n  color: var(--color-gray-dark);\n}\n\n.below-expectation__item-score {\n  font-size: 0.8rem;\n  color: var(--color-gray-dark);\n}\n\n.below-expectation__item-link {\n  flex-shrink: 0;\n  text-decoration: none;\n}\n\n.below-expectation__empty {\n  text-align: center;\n  padding: 2rem;\n}\n\n.below-expectation__empty-icon {\n  color: var(--color-green);\n  margin-bottom: 0.75rem;\n}\n\n.below-expectation__empty h3 {\n  margin: 0 0 0.5rem 0;\n  font-size: 1.1rem;\n}\n\n.below-expectation__empty p {\n  margin: 0;\n  font-size: 0.9rem;\n  color: var(--color-gray-dark);\n  max-width: 500px;\n  margin-inline: auto;\n}\n\n/* ==========================================================================\n   RESULTS: Summary Cards\n   ========================================================================== */\n\n.summary-stats-grid .summary-card {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  text-align: center;\n  padding: 1.25rem;\n}\n\n.summary-icon {\n  width: 48px;\n  height: 48px;\n  border-radius: var(--radius-sm);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-bottom: 0.75rem;\n}\n\n.summary-icon--role { background: var(--color-blue-light); color: var(--color-blue); }\n.summary-icon--date { background: var(--color-gray-light); color: var(--color-gray-dark); }\n.summary-icon--score { background: var(--color-green-light); color: var(--color-green); }\n.summary-icon--target { background: var(--color-red-bg); color: var(--color-red); }\n\n.summary-details {\n  display: flex;\n  flex-direction: column;\n  gap: 0.15rem;\n}\n\n.summary-value {\n  font-weight: 700;\n  font-size: 1.1rem;\n  color: var(--color-text);\n}\n\n.summary-label {\n  font-size: 0.8rem;\n  color: var(--color-gray-dark);\n}\n\n/* ==========================================================================\n   RESULTS: Actions\n   ========================================================================== */\n\n.results-actions {\n  display: flex;\n  gap: 1rem;\n  justify-content: center;\n  margin-top: 1.5rem;\n}\n\n.preview-footer {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  flex-wrap: wrap;\n  gap: 1rem;\n  font-size: 0.85rem;\n  color: var(--color-gray-dark);\n}\n\n.preview-badge {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  background: #f4f6f8;\n  padding: 0.4rem 0.8rem;\n  border-radius: 4px;\n}\n\n.preview-badge i {\n  width: 14px;\n  height: 14px;\n}\n\n.role-badge.manager-badge {\n  background: #111;\n  color: white;\n  border: none;\n}\n\n.app-footer-bottom {\n  border-top: 1px solid var(--color-border);\n  background: white;\n  padding: 1.5rem 0;\n  text-align: center;\n  font-size: 0.85rem;\n  color: var(--color-gray-dark);\n  margin-top: auto;\n}\n"}],"folders":[]},{"folder":"js","files":[{"name":"assessment.js","content":"import { scale, skills, categories, subcategories } from './data.js';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const urlParams = new URLSearchParams(window.location.search);\n  const roleParam = urlParams.get('role');\n  \n  // Default to reviewer if accessed directly\n  const role = roleParam === 'review-lead' ? 'Review Lead' : 'Reviewer';\n  const roleKey = role === 'Review Lead' ? 'targetLead' : 'targetReviewer';\n  \n  // Set Demo Persona\n  if (role === 'Review Lead') {\n    document.getElementById('demo-name').textContent = 'Jane Doe';\n    document.getElementById('demo-email').textContent = 'jane.doe@companybank.com';\n    document.getElementById('demo-title').textContent = 'Review Lead';\n  } else {\n    document.getElementById('demo-name').textContent = 'Jack Smith';\n    document.getElementById('demo-email').textContent = 'jack.smith@companybank.com';\n    document.getElementById('demo-title').textContent = 'Senior Analyst';\n  }\n  \n  // Render Scale Legend\n  const legendContainer = document.getElementById('scale-legend');\n  scale.forEach(s => {\n    const card = document.createElement('div');\n    card.className = 'scale-card';\n    card.innerHTML = `\n      <div class=\"scale-level\">${s.name}</div>\n      <div class=\"scale-desc\">${s.desc}</div>\n    `;\n    legendContainer.appendChild(card);\n  });\n  \n  // Helper to render a single skill row\n  const renderSkillRow = (skill, container) => {\n    const row = document.createElement('div');\n    row.className = 'skill-row';\n    \n    const infoCol = document.createElement('div');\n    infoCol.className = 'skill-info';\n    infoCol.innerHTML = `\n      <h3>${skill.name}</h3>\n      <p>${skill.desc}</p>\n    `;\n    \n    const optionsCol = document.createElement('div');\n    optionsCol.className = 'skill-options';\n    \n    let optionsHtml = '';\n    scale.forEach(s => {\n      optionsHtml += `\n        <label class=\"radio-option\">\n          <input type=\"radio\" name=\"${skill.id}\" value=\"${s.level}\" required>\n          <div class=\"radio-btn\">\n            <span class=\"level-name\">${s.name}</span>\n          </div>\n        </label>\n      `;\n    });\n    \n    optionsCol.innerHTML = optionsHtml;\n    \n    row.appendChild(infoCol);\n    row.appendChild(optionsCol);\n    container.appendChild(row);\n  };\n\n  // Group skills logically\n  const skillsContainer = document.getElementById('skills-container');\n\n  categories.forEach(category => {\n    // Render Category Header\n    const catSection = document.createElement('div');\n    catSection.className = 'category-section';\n    catSection.innerHTML = `<div class=\"category-header\"><h2>${category.name}</h2></div>`;\n    \n    // Check if category has subcategories\n    const catSkills = skills.filter(s => s.category === category.id);\n    const hasSubcats = catSkills.some(s => s.subcategoryId);\n    \n    if (hasSubcats) {\n      // Group by subcategory\n      const subcatsInCat = [...new Set(catSkills.map(s => s.subcategoryId))].filter(Boolean);\n      \n      subcatsInCat.forEach(subcatId => {\n        const subcat = subcategories.find(sc => sc.id === subcatId);\n        if (subcat) {\n          const subcatDiv = document.createElement('div');\n          subcatDiv.className = 'subcategory-section';\n          subcatDiv.innerHTML = `\n            <div class=\"subcategory-header\">\n              <h3>${subcat.name}</h3>\n              <p>${subcat.desc}</p>\n            </div>\n          `;\n          \n          const subcatSkills = catSkills.filter(s => s.subcategoryId === subcatId);\n          subcatSkills.forEach(skill => renderSkillRow(skill, subcatDiv));\n          \n          catSection.appendChild(subcatDiv);\n        }\n      });\n      \n      // Skills without subcategory in this category\n      const noSubcatSkills = catSkills.filter(s => !s.subcategoryId);\n      if (noSubcatSkills.length > 0) {\n        noSubcatSkills.forEach(skill => renderSkillRow(skill, catSection));\n      }\n      \n    } else {\n      // Just render skills directly under category\n      catSkills.forEach(skill => renderSkillRow(skill, catSection));\n    }\n    \n    skillsContainer.appendChild(catSection);\n  });\n\n  // Handle Submission\n  const form = document.getElementById('assessment-form');\n  form.addEventListener('submit', (e) => {\n    e.preventDefault();\n    \n    const formData = new FormData(form);\n    const results = {};\n    let allAnswered = true;\n    \n    skills.forEach(skill => {\n      const score = formData.get(skill.id);\n      if (!score) {\n        allAnswered = false;\n      } else {\n        const catObj = categories.find(c => c.id === skill.category);\n        results[skill.id] = {\n          skillName: skill.name,\n          category: catObj ? catObj.name : skill.category,\n          score: parseInt(score, 10),\n          target: skill[roleKey]\n        };\n      }\n    });\n    \n    if (!allAnswered) {\n      alert('Please select a proficiency level for all skills before submitting.');\n      return;\n    }\n    \n    const submissionData = {\n      role: role,\n      date: new Date().toISOString(),\n      results: results\n    };\n    \n    localStorage.setItem('latestAssessment', JSON.stringify(submissionData));\n    window.location.href = 'results.html';\n  });\n\n  if (window.lucide) {\n    window.lucide.createIcons();\n  }\n});"},{"name":"data.js","content":"export const scale = [\n  { level: 1, name: 'Foundational', desc: 'You understand the basic concepts and terminology. You can complete straightforward tasks using guidance, templates, or examples.' },\n  { level: 2, name: 'Developing', desc: 'You can apply the skill independently in common situations. You use standard methods and can resolve routine issues.' },\n  { level: 3, name: 'Proficient', desc: 'You apply the skill confidently across a broad range of situations, including moderately complex work.' },\n  { level: 4, name: 'Expert', desc: 'You apply the skill in complex, ambiguous, or high-risk situations and set a strong standard for others.' }\n];\n\nexport const categories = [\n  { id: 'technical', name: 'Technical Skills', desc: 'Specialized knowledge and methods used to assess risks, perform reviews, and apply analytical tools in assurance work.' },\n  { id: 'human', name: 'Human Excellence', desc: 'Personal attributes and work habits that support sound judgment, collaboration, communication, and effective execution.' },\n  { id: 'leadership', name: 'Leadership Skills', desc: 'Capabilities used to guide people, influence outcomes, and align decisions with long-term organizational goals.' }\n];\n\nexport const subcategories = [\n  { id: 'review_methodology', categoryId: 'technical', name: 'Review Methodology', desc: 'The structured approach used to plan, execute, document, and report a review or assurance engagement.' },\n  { id: 'risk_taxonomy', categoryId: 'technical', name: 'Understanding Risk Taxonomy', desc: 'Knowledge of risk categories and how different risk types are defined, organized, and related.' },\n  { id: 'risk_mgmt', categoryId: 'technical', name: 'Principles of Risk Management', desc: 'Core concepts for identifying, assessing, monitoring, and responding to risk in a controlled way.' },\n  { id: 'assessment_analytics', categoryId: 'technical', name: 'Assessment and Analytics', desc: 'The use of evaluation techniques and data analysis to identify issues, patterns, and evidence-based insights.' },\n  { id: 'language', categoryId: 'technical', name: 'Language Skills', desc: 'Fluency in a language in addition to English.' }\n];\n\nexport const skills = [\n  // --- TECHNICAL SKILLS ---\n\n  // Review Methodology\n  { id: 'planning', category: 'technical', subcategoryId: 'review_methodology', name: 'Planning & Scoping', desc: 'Defining objectives, risks, coverage, and resources for a review before execution begins.', trainingUrl: '/training/planning-scoping' },\n  { id: 'fieldwork', category: 'technical', subcategoryId: 'review_methodology', name: 'Fieldwork', desc: 'The execution phase of a review where evidence is gathered, tested, and analyzed.', trainingUrl: '/training/fieldwork' },\n  { id: 'reporting', category: 'technical', subcategoryId: 'review_methodology', name: 'Reporting', desc: 'The process of summarizing findings, conclusions, and recommendations in a clear and useful format.', trainingUrl: '/training/reporting' },\n  { id: 'quality_control', category: 'technical', subcategoryId: 'review_methodology', name: 'Quality Control', desc: 'Maintaining high standards of accuracy, consistency, and completeness throughout the work process.', trainingUrl: '/training/quality-control' },\n\n  // Understanding Risk Taxonomy\n  { id: 'resilience_risk', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'Resilience Risk', desc: 'Knowledge of risks that could disrupt an organization\\u2019s ability to continue critical operations.', trainingUrl: '/training/resilience-risk' },\n  { id: 'reg_compliance', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'Regulatory Compliance', desc: 'Understanding and assessing adherence to laws, regulations, and internal compliance requirements.', trainingUrl: '/training/regulatory-compliance' },\n  { id: 'financial_crime', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'Financial Crime', desc: 'Knowledge of risks and controls related to fraud, money laundering, bribery, and other illicit activity.', trainingUrl: '/training/financial-crime' },\n  { id: 'wholesale_credit', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'Wholesale Credit', desc: 'Understanding credit risk associated with lending and exposures to corporate or institutional clients.', trainingUrl: '/training/wholesale-credit' },\n  { id: 'treasury', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'Treasury', desc: 'Knowledge of risks and activities involving liquidity, funding, capital, and balance sheet management.', trainingUrl: '/training/treasury' },\n  { id: 'traded_risk', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'Traded Risk', desc: 'Understanding risks arising from market-facing positions such as interest rate, foreign exchange, or trading exposures.', trainingUrl: '/training/traded-risk' },\n  { id: 'strategic', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'Strategic', desc: 'Knowledge of risks and decisions that affect long-term direction, competitiveness, and business performance.', trainingUrl: '/training/strategic' },\n  { id: 'retail_credit', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'Retail Credit', desc: 'Understanding credit risk associated with consumer lending products and retail customer portfolios.', trainingUrl: '/training/retail-credit' },\n  { id: 'people', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'People', desc: 'Knowledge of workforce-related risks, including culture, conduct, capability, and talent management.', trainingUrl: '/training/people' },\n  { id: 'model', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'Model', desc: 'Understanding risks related to the design, use, validation, and governance of quantitative models.', trainingUrl: '/training/model' },\n  { id: 'legal', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'Legal', desc: 'Knowledge of legal risks, obligations, and exposures arising from contracts, disputes, or regulatory matters.', trainingUrl: '/training/legal' },\n  { id: 'fin_reporting_tax', category: 'technical', subcategoryId: 'risk_taxonomy', name: 'Financial Reporting / Tax', desc: 'Understanding risks related to financial statements, accounting treatments, and tax compliance.', trainingUrl: '/training/financial-reporting-tax' },\n\n  // Principles of Risk Management\n  { id: 'risk_analysis', category: 'technical', subcategoryId: 'risk_mgmt', name: 'Risk Analysis', desc: 'The evaluation of risk likelihood, impact, drivers, and control effectiveness to support decisions.', trainingUrl: '/training/risk-analysis' },\n\n  // Assessment and Analytics\n  { id: 'issue_id', category: 'technical', subcategoryId: 'assessment_analytics', name: 'Issue Identification', desc: 'The ability to detect control gaps, weaknesses, or emerging concerns from evidence and analysis.', trainingUrl: '/training/issue-identification' },\n  { id: 'analytics_testing', category: 'technical', subcategoryId: 'assessment_analytics', name: 'Analytics in Testing', desc: 'Applying data analysis techniques to improve the depth, efficiency, and precision of testing.', trainingUrl: '/training/analytics-testing' },\n  { id: 'ai_assurance', category: 'technical', subcategoryId: 'assessment_analytics', name: 'AI in Assurance', desc: 'The use and evaluation of artificial intelligence tools and risks within assurance activities.', trainingUrl: '/training/ai-assurance' },\n\n  // Language Skills (Assessed directly)\n  { id: 'language_skills', category: 'technical', subcategoryId: 'language', name: 'Language Skills', desc: 'Fluency in a language in addition to English.', trainingUrl: '/training/language-skills' },\n\n  // --- HUMAN EXCELLENCE ---\n  { id: 'effective_writing', category: 'human', name: 'Effective Writing', desc: 'Communicating ideas in writing with clarity, structure, and appropriate tone.', trainingUrl: '/training/effective-writing' },\n  { id: 'presentation', category: 'human', name: 'Presentation Skills', desc: 'Delivering information verbally in a clear, engaging, and audience-appropriate way.', trainingUrl: '/training/presentation-skills' },\n  { id: 'root_cause', category: 'human', name: 'Root Cause Analysis', desc: 'A structured method for identifying the underlying reason an issue occurred.', trainingUrl: '/training/root-cause-analysis' },\n  { id: 'resilience', category: 'human', name: 'Resilience', desc: 'The ability to adapt, recover, and continue performing effectively after setbacks or pressure.', trainingUrl: '/training/resilience' },\n  { id: 'workload_mgmt', category: 'human', name: 'Workload Management', desc: 'Balancing tasks, capacity, and deadlines to maintain sustainable performance.', trainingUrl: '/training/workload-management' },\n\n  // --- LEADERSHIP ---\n    { id: 'conflict_res', category: 'leadership', name: 'Conflict Resolution', desc: 'Addressing disagreements constructively to reach understanding or workable solutions.', trainingUrl: '/training/conflict-resolution' },\n  { id: 'mentorship', category: 'leadership', name: 'Mentorship & Coaching', desc: 'Helping others grow through guidance, feedback, support, and skill development.', trainingUrl: '/training/mentorship-coaching' },\n  { id: 'influence', category: 'leadership', name: 'Influence', desc: 'The ability to shape decisions or behaviors through credibility, persuasion, and relationships.', trainingUrl: '/training/influence' },\n  { id: 'cross_functional', category: 'leadership', name: 'Cross-functional Leadership', desc: 'Leading work effectively across teams, disciplines, or business areas with different priorities.', trainingUrl: '/training/cross-functional-leadership' },\n  { id: 'systems_thinking', category: 'leadership', name: 'Systems Thinking', desc: 'Understanding how parts of an organization or process interact within a larger whole.', trainingUrl: '/training/systems-thinking' },\n  { id: 'enterprise_mindset', category: 'leadership', name: 'Enterprise Mindset', desc: 'Thinking beyond local priorities to act in the best interests of the whole organization.', trainingUrl: '/training/enterprise-mindset' },\n  { id: 'foresight', category: 'leadership', name: 'Foresight/Anticipation', desc: 'Recognizing emerging trends, risks, or opportunities before they fully materialize.', trainingUrl: '/training/foresight' }\n];\n"},{"name":"main.js","content":""},{"name":"reporting.js","content":"import { scale, skills, categories, subcategories } from './data.js';\n\n// --- RICH MOCK DATA FOR PROFESSIONAL DEMO ---\nconst mockEmployees = [\n  { name: 'Marcus Sterling', role: 'Review Lead', region: 'EMEA', manager: 'Sarah Jenkins', scores: { planning: 4, fieldwork: 3, reporting: 3, quality_control: 3, resilience_risk: 4, reg_compliance: 3, decision_making: 4, effective_writing: 3, prioritisation: 3, mentorship: 3, influence: 3, foresight: 2 } },\n  { name: 'Aiko Tanaka', role: 'Reviewer', region: 'APAC', manager: 'David Chen', scores: { planning: 2, fieldwork: 3, reporting: 2, quality_control: 2, reg_compliance: 2, financial_crime: 3, decision_making: 2, effective_writing: 3, presentation: 2, mentorship: 1, eq: 2, influence: 2 } },\n  { name: 'Elena Rostova', role: 'Review Lead', region: 'EMEA', manager: 'Sarah Jenkins', scores: { planning: 3, fieldwork: 3, reporting: 4, quality_control: 3, wholesale_credit: 4, treasury: 3, decision_making: 3, effective_writing: 4, root_cause: 3, mentorship: 3, cross_functional: 3, systems_thinking: 3 } },\n  { name: 'David Vance', role: 'Reviewer', region: 'AMER', manager: 'Amara Okafor', scores: { planning: 2, fieldwork: 2, reporting: 2, quality_control: 2, resilience_risk: 2, model: 3, decision_making: 2, effective_writing: 2, prioritisation: 3, eq: 2, systems_thinking: 2 } },\n  { name: 'Chloe Laurent', role: 'Review Lead', region: 'EMEA', manager: 'Sarah Jenkins', scores: { planning: 3, fieldwork: 3, reporting: 3, quality_control: 4, legal: 4, reg_compliance: 4, decision_making: 3, effective_writing: 3, presentation: 4, mentorship: 4, influence: 3, enterprise_mindset: 3 } },\n  { name: 'Siddharth Patel', role: 'Reviewer', region: 'APAC', manager: 'David Chen', scores: { planning: 3, fieldwork: 3, reporting: 2, quality_control: 3, traded_risk: 4, financial_reporting_tax: 3, decision_making: 3, effective_writing: 2, prioritisation: 2, resilience: 3, eq: 3 } },\n  { name: 'Gabriela Silva', role: 'Review Lead', region: 'AMER', manager: 'Amara Okafor', scores: { planning: 4, fieldwork: 3, reporting: 3, quality_control: 3, retail_credit: 4, people: 3, decision_making: 4, effective_writing: 3, workload_mgmt: 4, mentorship: 3, cross_functional: 4, enterprise_mindset: 3 } },\n  { name: 'Kenji Sato', role: 'Reviewer', region: 'APAC', manager: 'David Chen', scores: { planning: 2, fieldwork: 2, reporting: 2, quality_control: 3, resilience_risk: 3, ai_assurance: 2, decision_making: 2, effective_writing: 3, presentation: 2, conflict_res: 2, systems_thinking: 2 } },\n  { name: 'Sarah Jenkins', role: 'Review Lead', region: 'EMEA', manager: 'Director of Assurance', scores: { planning: 4, fieldwork: 4, reporting: 4, quality_control: 4, resilience_risk: 4, reg_compliance: 4, decision_making: 4, effective_writing: 4, presentation: 4, mentorship: 4, influence: 4, foresight: 3 } },\n  { name: 'Amara Okafor', role: 'Review Lead', region: 'AMER', manager: 'Director of Assurance', scores: { planning: 4, fieldwork: 3, reporting: 4, quality_control: 4, retail_credit: 4, wholesale_credit: 4, decision_making: 4, effective_writing: 4, workload_mgmt: 4, mentorship: 4, cross_functional: 4, systems_thinking: 4 } }\n];\n\nlet currentReportType = 'region';\nlet reportData = [];\nlet filteredData = [];\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  // Load any real assessment submitted by the active user in this session\n  loadSessionData();\n  \n  // Set default report\n  setActiveReport('region');\n  \n  // Initialize Lucide icons\n  if (window.lucide) {\n    window.lucide.createIcons();\n  }\n});\n\n// Helper to load session data from localStorage\nfunction loadSessionData() {\n  try {\n    const savedAssessment = localStorage.getItem('skill_assessment_submission');\n    if (savedAssessment) {\n      const data = JSON.parse(savedAssessment);\n      if (data && data.responses) {\n        // Map user answers to scores\n        const userScores = {};\n        Object.keys(data.responses).forEach(key => {\n          userScores[key] = parseInt(data.responses[key], 10);\n        });\n        \n        // Add to employees list to show live updates!\n        mockEmployees.unshift({\n          name: data.userName || 'You (Active Session)',\n          role: data.role === 'lead' ? 'Review Lead' : 'Reviewer',\n          region: data.region || 'EMEA',\n          manager: data.managerName || 'Sarah Jenkins',\n          scores: userScores\n        });\n      }\n    }\n  } catch (e) {\n    console.error('Error loading session data:', e);\n  }\n}\n\n// Set active report category and generate datasets\nwindow.setActiveReport = function(type) {\n  currentReportType = type;\n  \n  // Update UI Card states\n  document.querySelectorAll('.report-card').forEach(card => {\n    if (card.dataset.reportType === type) {\n      card.classList.add('active');\n    } else {\n      card.classList.remove('active');\n    }\n  });\n\n  // Clear search input\n  const searchInput = document.getElementById('report-search');\n  if (searchInput) {\n    searchInput.value = '';\n  }\n\n  // Update headers and generate data\n  const title = document.getElementById('active-report-title');\n  const desc = document.getElementById('active-report-desc');\n  \n  if (type === 'region') {\n    title.textContent = 'Report by Region';\n    desc.textContent = 'Detailed view of self-assessment outputs grouped by office region.';\n    generateRegionReport();\n  } else if (type === 'skill') {\n    title.textContent = 'Report by Skill';\n    desc.textContent = 'Detailed performance index per skill, identifying strengths and development gaps.';\n    generateSkillReport();\n  } else if (type === 'manager') {\n    title.textContent = 'Report by Manager';\n    desc.textContent = 'Team assessment summaries organized by direct managers.';\n    generateManagerReport();\n  }\n\n  // Initial preview render\n  filterReportPreview();\n};\n\n// --- DATA GENERATORS ---\n\nfunction generateRegionReport() {\n  reportData = mockEmployees.map(emp => {\n    // Categorize scores\n    let coreScores = [];\n    let softScores = [];\n    let leadScores = [];\n    let belowCount = 0;\n    let meetCount = 0;\n\n    skills.forEach(s => {\n      const score = emp.scores[s.id];\n      if (score !== undefined) {\n        // Grouping\n        if (s.category === 'technical') coreScores.push(score);\n        else if (s.category === 'human') softScores.push(score);\n        else if (s.category === 'leadership') leadScores.push(score);\n\n        // Gap calculation\n        const target = emp.role === 'Review Lead' ? s.targetLead : s.targetReviewer;\n        if (score < target) {\n          belowCount++;\n        } else {\n          meetCount++;\n        }\n      }\n    });\n\n    const avgCore = coreScores.length ? (coreScores.reduce((a,b)=>a+b, 0) / coreScores.length).toFixed(1) : 'N/A';\n    const avgSoft = softScores.length ? (softScores.reduce((a,b)=>a+b, 0) / softScores.length).toFixed(1) : 'N/A';\n    const avgLead = leadScores.length ? (leadScores.reduce((a,b)=>a+b, 0) / leadScores.length).toFixed(1) : 'N/A';\n\n    return {\n      'Employee Name': emp.name,\n      'Role': emp.role,\n      'Region': emp.region,\n      'Direct Manager': emp.manager,\n      'Avg Technical': avgCore,\n      'Avg Human Excellence': avgSoft,\n      'Avg Leadership': avgLead,\n      'Skills Below Target': belowCount,\n      'Skills At/Above Target': meetCount\n    };\n  });\n}\n\nfunction generateSkillReport() {\n  reportData = skills.map(s => {\n    const ratings = [];\n    let expertCount = 0;\n    let reviewerGapSum = 0;\n    let reviewerCount = 0;\n    let leadGapSum = 0;\n    let leadCount = 0;\n\n    mockEmployees.forEach(emp => {\n      const score = emp.scores[s.id];\n      if (score !== undefined) {\n        ratings.push(score);\n        if (score === 4) expertCount++;\n\n        if (emp.role === 'Reviewer') {\n          reviewerGapSum += (score - s.targetReviewer);\n          reviewerCount++;\n        } else {\n          leadGapSum += (score - s.targetLead);\n          leadCount++;\n        }\n      }\n    });\n\n    const avg = ratings.length ? (ratings.reduce((a,b)=>a+b,0)/ratings.length).toFixed(1) : 'N/A';\n    const revGap = reviewerCount ? (reviewerGapSum/reviewerCount).toFixed(1) : 'N/A';\n    const leadGap = leadCount ? (leadGapSum/leadCount).toFixed(1) : 'N/A';\n    const pctProficient = ratings.length ? Math.round((ratings.filter(r => r >= 3).length / ratings.length) * 100) + '%' : '0%';\n\n    // Find category name\n    const catObj = categories.find(c => c.id === s.category);\n    const catName = catObj ? catObj.name : s.category;\n\n    // Find subcategory name\n    const subcatObj = subcategories.find(sub => sub.id === s.subcategoryId);\n    const subcatName = subcatObj ? subcatObj.name : 'N/A';\n\n    return {\n      'Category': catName,\n      'Subcategory': subcatName,\n      'Skill Name': s.name,\n      'Overall Avg Score': avg,\n      'Target (Reviewer)': s.targetReviewer,\n      'Target (Lead)': s.targetLead,\n      'Avg Reviewer Gap': revGap,\n      'Avg Lead Gap': leadGap,\n      '% Proficient/Expert': pctProficient,\n      'Expert Count': expertCount\n    };\n  });\n}\n\nfunction generateManagerReport() {\n  reportData = mockEmployees.map(emp => {\n    const scoresArray = Object.values(emp.scores);\n    const avgScore = scoresArray.length ? (scoresArray.reduce((a,b)=>a+b, 0) / scoresArray.length).toFixed(1) : 'N/A';\n    \n    // Find biggest development areas (skills where they scored lowest)\n    const sortedSkills = Object.keys(emp.scores)\n      .map(id => {\n        const s = skills.find(sk => sk.id === id);\n        return s ? { name: s.name, score: emp.scores[id] } : null;\n      })\n      .filter(x => x !== null)\n      .sort((a,b) => a.score - b.score);\n    \n    const priorityAreas = sortedSkills.slice(0, 3).map(x => `${x.name} (${x.score})`).join(', ');\n\n    return {\n      'Direct Manager': emp.manager,\n      'Employee Name': emp.name,\n      'Role': emp.role,\n      'Region': emp.region,\n      'Total Assessed Skills': scoresArray.length,\n      'Average Rating': avgScore,\n      'Top Priority Areas': priorityAreas || 'None'\n    };\n  });\n}\n\n// --- RENDERING & FILTERING ---\n\nwindow.filterReportPreview = function() {\n  const query = document.getElementById('report-search').value.toLowerCase().trim();\n  \n  if (!query) {\n    filteredData = [...reportData];\n  } else {\n    filteredData = reportData.filter(row => {\n      return Object.values(row).some(val => \n        String(val).toLowerCase().includes(query)\n      );\n    });\n  }\n\n  renderPreviewTable();\n};\n\nfunction renderPreviewTable() {\n  const headersRow = document.getElementById('table-headers');\n  const tbody = document.getElementById('table-body');\n  const recordCount = document.getElementById('record-count');\n  const noResultsMsg = document.getElementById('no-results-msg');\n  const previewTable = document.getElementById('preview-table');\n\n  headersRow.innerHTML = '';\n  tbody.innerHTML = '';\n\n  if (filteredData.length === 0) {\n    noResultsMsg.classList.remove('hidden');\n    previewTable.style.opacity = '0.4';\n    recordCount.textContent = 'Showing 0 records';\n    return;\n  }\n\n  noResultsMsg.classList.add('hidden');\n  previewTable.style.opacity = '1';\n\n  // Get keys from first item to build headers\n  const columns = Object.keys(filteredData[0]);\n  columns.forEach(col => {\n    const th = document.createElement('th');\n    th.textContent = col;\n    headersRow.appendChild(th);\n  });\n\n  // Populate data rows\n  filteredData.forEach(row => {\n    const tr = document.createElement('tr');\n    columns.forEach(col => {\n      const td = document.createElement('td');\n      const val = row[col];\n      \n      // Styling helpers for specific column values\n      if (col === 'Role') {\n        td.innerHTML = `<span class=\"badge ${val === 'Review Lead' ? 'badge-lead' : 'badge-reviewer'}\">${val}</span>`;\n      } else if (col === 'Region') {\n        td.innerHTML = `<span class=\"region-pill region-${val.toLowerCase()}\">${val}</span>`;\n      } else if (col === 'Skills Below Target' && val > 0) {\n        td.innerHTML = `<span class=\"text-danger font-bold\">${val}</span>`;\n      } else if (col === 'Avg Technical' || col === 'Overall Avg Score' || col === 'Average Rating') {\n        td.innerHTML = `<strong>${val}</strong>`;\n      } else {\n        td.textContent = val;\n      }\n      \n      tr.appendChild(td);\n    });\n    tbody.appendChild(tr);\n  });\n\n  recordCount.textContent = `Showing ${filteredData.length} of ${reportData.length} records`;\n}\n\n// --- CSV EXPORTER UTILITY ---\n\nwindow.triggerCSVDownload = function() {\n  if (filteredData.length === 0) {\n    alert('No data available to export.');\n    return;\n  }\n\n  const columns = Object.keys(filteredData[0]);\n  \n  // Format Headers\n  const csvHeaders = columns.map(col => `\"${col.replace(/\"/g, '\"\"')}\"`).join(',');\n  \n  // Format Rows\n  const csvRows = filteredData.map(row => {\n    return columns.map(col => {\n      const val = row[col] === null || row[col] === undefined ? '' : String(row[col]);\n      return `\"${val.replace(/\"/g, '\"\"')}\"`;\n    }).join(',');\n  });\n\n  // Assemble full CSV\n  const csvContent = '\\uFEFF' + [csvHeaders, ...csvRows].join('\\n'); // Add UTF-8 BOM\n  \n  // Create File Blob & trigger download\n  const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n  const url = URL.createObjectURL(blob);\n  \n  const link = document.createElement('a');\n  link.setAttribute('href', url);\n  \n  const timestamp = new Date().toISOString().slice(0, 10);\n  link.setAttribute('download', `assurance_report_${currentReportType}_${timestamp}.csv`);\n  \n  document.body.appendChild(link);\n  link.click();\n  document.body.removeChild(link);\n  \n  // Analytics Log\n  console.log(`Successfully exported ${filteredData.length} records of category: \"${currentReportType}\" to CSV.`);\n};\n"},{"name":"results.js","content":"import { scale, skills, categories, subcategories } from './data.js';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const data = JSON.parse(localStorage.getItem('latestAssessment'));\n\n  if (!data) {\n    document.getElementById('belowExpectation').innerHTML = `\n      <div class=\"empty-state\">\n        <h2>No Assessment Found</h2>\n        <p>Complete a self-assessment to see your results.</p>\n        <a href=\"index.html\" class=\"btn\">Go to Home</a>\n      </div>`;\n    document.getElementById('summaryCards').style.display = 'none';\n    document.getElementById('categoryScores').style.display = 'none';\n    return;\n  }\n\n  const role = data.role || 'reviewer';\n  const targetThreshold = role === 'review-lead' ? 3 : 2;\n  const roleName = role === 'review-lead' ? 'Review Lead' : 'Reviewer';\n\n  // Set role badge\n  document.getElementById('results-role-badge').textContent = roleName;\n\n  const results = data.results;\n  const totalSkills = Object.keys(results).length;\n\n  let totalScore = 0;\n  Object.values(results).forEach(r => totalScore += r.score);\n\n  // Build skill list with gap info\n  const allSkills = skills\n    .filter(skill => results[skill.id])\n    .map(skill => ({\n      id: skill.id,\n      name: skill.name,\n      category: results[skill.id].category,\n      categoryId: skill.category,\n      score: results[skill.id].score,\n      target: targetThreshold,\n      gap: results[skill.id].score - targetThreshold,\n      desc: skill.desc,\n      training: skill.trainingUrl\n    }));\n\n  // Skills below target\n  const belowTarget = allSkills.filter(s => s.score < targetThreshold);\n  // Skills partially proficient (1 level below target)\n  const partiallyProficient = belowTarget.filter(s => s.gap === -1);\n  // Skills meeting or exceeding\n  const meetingTarget = allSkills.filter(s => s.score >= targetThreshold);\n  // Overall average\n  const avgScore = (totalScore / totalSkills).toFixed(1);\n  // Overall gap\n  const gapScore = (totalScore / totalSkills - targetThreshold).toFixed(1);\n\n  // ── Summary Cards ──\n  document.getElementById('summaryCards').innerHTML = `\n    <div class=\"summary-card\" style=\"border-left: 4px solid var(--color-red); padding: 1.5rem;\">\n      <div style=\"font-size: 2.5rem; font-weight: 700; color: var(--color-red);\">${belowTarget.length}</div>\n      <div style=\"font-weight: 600; margin-top: 0.25rem;\">Skills Below Target</div>\n      <div style=\"font-size: 0.875rem; color: var(--color-gray-dark);\">Require development (target: level ${targetThreshold}+)</div>\n    </div>\n    <div class=\"summary-card\" style=\"border-left: 4px solid var(--color-amber); padding: 1.5rem;\">\n      <div style=\"font-size: 2.5rem; font-weight: 700; color: var(--color-amber);\">${partiallyProficient.length}</div>\n      <div style=\"font-weight: 600; margin-top: 0.25rem;\">Partially Proficient</div>\n      <div style=\"font-size: 0.875rem; color: var(--color-gray-dark);\">One level below target</div>\n    </div>\n    <div class=\"summary-card\" style=\"border-left: 4px solid var(--color-green); padding: 1.5rem;\">\n      <div style=\"font-size: 2.5rem; font-weight: 700; color: var(--color-green);\">${meetingTarget.length}</div>\n      <div style=\"font-weight: 600; margin-top: 0.25rem;\">Meeting / Exceeding</div>\n      <div style=\"font-size: 0.875rem; color: var(--color-gray-dark);\">At or above target level</div>\n    </div>\n    <div class=\"summary-card\" style=\"border-left: 4px solid var(--color-blue); padding: 1.5rem;\">\n      <div style=\"font-size: 2.5rem; font-weight: 700; color: var(--color-blue);\">${avgScore}</div>\n      <div style=\"font-weight: 600; margin-top: 0.25rem;\">Average Score</div>\n      <div style=\"font-size: 0.875rem; color: var(--color-gray-dark);\">Overall gap: ${gapScore > 0 ? '+' : ''}${gapScore}</div>\n    </div>\n  `;\n\n  // ── Below Expectation Section ──\n  const belowSection = document.getElementById('belowExpectation');\n\n  if (belowTarget.length === 0) {\n    belowSection.innerHTML = `\n      <h2>Skills Below Expectation</h2>\n      <div class=\"empty-state\" style=\"padding: 2rem; text-align: center;\">\n        <i data-lucide=\"check-circle\" style=\"width: 48px; height: 48px; color: var(--color-green); margin-bottom: 1rem;\"></i>\n        <h3>All Skills Meet or Exceed Target</h3>\n        <p>Great job! All your skills are at or above the expected proficiency level for ${roleName} (level ${targetThreshold}+).</p>\n        <a href=\"index.html\" class=\"btn\" style=\"margin-top: 1rem;\">Return Home</a>\n      </div>\n    `;\n  } else {\n    // Group below-target skills by category\n    const grouped = {};\n    belowTarget.forEach(skill => {\n      if (!grouped[skill.category]) grouped[skill.category] = [];\n      grouped[skill.category].push(skill);\n    });\n\n    let html = `<h2>Skills Below Expectation</h2>\n      <p style=\"color: var(--color-gray-dark); margin-bottom: 1.5rem;\">\n        The following ${belowTarget.length} skill(s) scored below the ${roleName} target of <strong>level ${targetThreshold} (${scale.find(s => s.level === targetThreshold)?.name})</strong>.\n      </p>`;\n\n    for (const [category, catSkills] of Object.entries(grouped)) {\n      html += `<h3 style=\"margin-top: 1.5rem; margin-bottom: 0.75rem; color: var(--color-gray-dark);\">${category}</h3>`;\n      html += `<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 1rem;\">`;\n\n      catSkills.forEach(skill => {\n        const gapAbs = Math.abs(skill.gap);\n        const scoreName = scale.find(s => s.level === skill.score)?.name || 'Unknown';\n        const targetName = scale.find(s => s.level === skill.target)?.name || 'Unknown';\n        const borderColor = gapAbs >= 2 ? 'var(--color-red)' : 'var(--color-amber)';\n\n        html += `\n          <div class=\"card\" style=\"border-left: 4px solid ${borderColor}; padding: 1.25rem;\">\n            <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 0.5rem;\">\n              <h4 style=\"margin: 0;\">${skill.name}</h4>\n              <span style=\"background: ${borderColor}; color: white; padding: 0.15rem 0.5rem; border-radius: 999px; font-size: 0.75rem; font-weight: 600; white-space: nowrap;\">\n                -${gapAbs} gap\n              </span>\n            </div>\n            <p style=\"font-size: 0.875rem; color: var(--color-gray-dark); margin-bottom: 0.75rem;\">${skill.desc}</p>\n            <div style=\"display: flex; gap: 1.5rem; font-size: 0.875rem; margin-bottom: 0.75rem;\">\n              <div>\n                <span style=\"color: var(--color-gray-dark);\">Your Level: </span>\n                <strong>${scoreName} (${skill.score})</strong>\n              </div>\n              <div>\n                <span style=\"color: var(--color-gray-dark);\">Target: </span>\n                <strong>${targetName} (${skill.target})</strong>\n              </div>\n            </div>\n            ${skill.training ? `\n              <a href=\"${skill.training}\" target=\"_blank\" rel=\"noopener noreferrer\" \n                 style=\"display: inline-flex; align-items: center; gap: 0.35rem; color: var(--color-blue); text-decoration: none; font-size: 0.875rem; font-weight: 500;\">\n                <i data-lucide=\"book-open\" style=\"width: 16px; height: 16px;\"></i>\n                Recommended Training\n              </a>` : ''}\n          </div>`;\n      });\n\n      html += `</div>`;\n    }\n\n    belowSection.innerHTML = html;\n  }\n\n  // ── Full Category Scores ──\n  const catSection = document.getElementById('categoryScores');\n  let catHtml = '';\n\n  categories.forEach(cat => {\n    const catSkills = allSkills.filter(s => s.categoryId === cat.id);\n    if (catSkills.length === 0) return;\n\n    catHtml += `<div style=\"margin-bottom: 1.5rem;\">\n      <h3 style=\"margin-bottom: 0.75rem;\">${cat.name}</h3>\n      <div style=\"overflow-x: auto;\">\n        <table style=\"width: 100%; border-collapse: collapse; font-size: 0.875rem;\">\n          <thead>\n            <tr style=\"border-bottom: 2px solid var(--color-gray-light);\">\n              <th style=\"text-align: left; padding: 0.5rem;\">Skill</th>\n              <th style=\"text-align: center; padding: 0.5rem;\">Your Score</th>\n              <th style=\"text-align: center; padding: 0.5rem;\">Target</th>\n              <th style=\"text-align: center; padding: 0.5rem;\">Status</th>\n            </tr>\n          </thead>\n          <tbody>`;\n\n    catSkills.forEach(skill => {\n      const scoreName = scale.find(s => s.level === skill.score)?.name || 'Unknown';\n      const isBelow = skill.score < targetThreshold;\n      const statusColor = isBelow ? 'var(--color-red)' : 'var(--color-green)';\n      const statusText = isBelow ? 'Below Target' : 'Meets Target';\n\n      catHtml += `\n        <tr style=\"border-bottom: 1px solid var(--color-gray-light);\">\n          <td style=\"padding: 0.5rem;\">${skill.name}</td>\n          <td style=\"text-align: center; padding: 0.5rem; font-weight: 600;\">${scoreName} (${skill.score})</td>\n          <td style=\"text-align: center; padding: 0.5rem;\">${skill.target}</td>\n          <td style=\"text-align: center; padding: 0.5rem;\">\n            <span style=\"color: ${statusColor}; font-weight: 600;\">${statusText}</span>\n          </td>\n        </tr>`;\n    });\n\n    catHtml += `</tbody></table></div></div>`;\n  });\n\n  catSection.innerHTML = catHtml;\n\n  // ── Actions ──\n  document.getElementById('resultsActions').innerHTML = `\n    <a href=\"assessment.html?role=${role}\" class=\"btn\" style=\"display: inline-flex; align-items: center; gap: 0.5rem;\">\n      <i data-lucide=\"refresh-cw\" style=\"width: 18px; height: 18px;\"></i>\n      Retake Assessment\n    </a>\n    <a href=\"index.html\" class=\"btn\" style=\"display: inline-flex; align-items: center; gap: 0.5rem; background: var(--color-gray-light); color: var(--color-gray-dark);\">\n      <i data-lucide=\"home\" style=\"width: 18px; height: 18px;\"></i>\n      Return Home\n    </a>\n  `;\n\n  // Initialize Lucide icons\n  if (window.lucide) {\n    window.lucide.createIcons();\n  }\n});\n"}],"folders":[]},{"folder":"other","files":[{"name":"main.sketch","content":""}],"folders":[]}]},"variants":null,"createdAt":"2026-06-24T04:02:32.643Z","updatedAt":"2026-06-24T16:18:08.732Z"}}