{"id":13,"date":"2025-06-02T19:44:57","date_gmt":"2025-06-02T19:44:57","guid":{"rendered":"https:\/\/sosacademy.in\/?page_id=13"},"modified":"2025-06-03T05:18:09","modified_gmt":"2025-06-03T05:18:09","slug":"mock-test","status":"publish","type":"page","link":"https:\/\/sosacademy.in\/?page_id=13","title":{"rendered":"MOCK TEST"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <title>Mock Test | UPSC Free Coaching Entrance Exam<\/title>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/>\n\n  <!-- ================================\n       STYLES\n      ================================ -->\n  <style>\n    \/* ---------- Global Reset ---------- *\/\n    * {\n      margin: 0;\n      padding: 0;\n      box-sizing: border-box;\n    }\n    body {\n      font-family: Arial, Helvetica, sans-serif;\n      background-color: #f3f6fb;\n      color: #333;\n      line-height: 1.4;\n    }\n    a {\n      text-decoration: none;\n      color: inherit;\n      cursor: pointer;\n    }\n\n    \/* ---------- COMMON CONTAINERS ---------- *\/\n    .screen {\n      display: none;\n    }\n    .screen.active {\n      display: block;\n    }\n    .container {\n      max-width: 1200px;\n      margin: 20px auto;\n      padding: 0 20px;\n    }\n    h1, h2, h3, h4 {\n      color: #1a73e8;\n    }\n    button, input[type=\"submit\"] {\n      cursor: pointer;\n    }\n\n    \/* ========== 1) LANDING SCREEN ========== *\/\n    #screen-category {\n      margin-top: 60px; \/* push down under any WP header *\/\n    }\n    .category-list {\n      list-style: none;\n      padding-left: 0;\n      margin-top: 20px;\n    }\n    .category-list li {\n      background-color: #e9f2ff;\n      margin-bottom: 12px;\n      padding: 15px 20px;\n      border-radius: 4px;\n      border: 1px solid #1a73e8;\n      font-size: 1rem;\n      transition: background-color 0.2s;\n    }\n    .category-list li:hover {\n      background-color: #d0e7ff;\n    }\n    .category-list li i {\n      margin-right: 8px;\n      color: #1a73e8;\n    }\n\n    \/* ========== 2) TEST LIST SCREEN ========== *\/\n    #screen-test-list .back-btn,\n    #screen-candidate-form .back-btn {\n      display: inline-block;\n      margin: 20px 0;\n      color: #1a73e8;\n      font-size: 0.95rem;\n      cursor: pointer;\n    }\n    .test-list {\n      list-style: none;\n      padding-left: 0;\n      margin-top: 20px;\n    }\n    .test-list li {\n      background-color: #f0f0f0;\n      margin-bottom: 10px;\n      padding: 14px 18px;\n      border-radius: 4px;\n      border: 1px solid #ccc;\n      font-size: 1rem;\n      transition: background-color 0.2s;\n    }\n    .test-list li:hover {\n      background-color: #e1e1e1;\n    }\n\n    \/* ========== 3) CANDIDATE FORM ========== *\/\n    #screen-candidate-form form {\n      max-width: 400px;\n      margin-top: 20px;\n    }\n    #screen-candidate-form label {\n      display: block;\n      margin: 12px 0 6px;\n      font-weight: bold;\n    }\n    #screen-candidate-form input[type=\"text\"],\n    #screen-candidate-form input[type=\"email\"] {\n      width: 100%;\n      padding: 8px 10px;\n      border: 1px solid #ccc;\n      border-radius: 4px;\n      font-size: 1rem;\n    }\n    #screen-candidate-form .error {\n      color: #d32f2f;\n      font-size: 0.9rem;\n      margin-top: 4px;\n    }\n    #screen-candidate-form input[type=\"submit\"] {\n      margin-top: 20px;\n      background-color: #1a73e8;\n      color: #fff;\n      border: none;\n      padding: 10px 16px;\n      font-size: 1rem;\n      border-radius: 4px;\n      transition: background-color 0.2s;\n    }\n    #screen-candidate-form input[type=\"submit\"]:hover {\n      background-color: #125abe;\n    }\n\n    \/* ========== 4) STICKY HEADER FOR EXAM ========== *\/\n    .header {\n      position: sticky;\n      top: 0;\n      background-color: #ffffff;\n      border-bottom: 1px solid #e0e0e0;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      padding: 10px 20px;\n      box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n      z-index: 1000;\n    }\n    .header-left {\n      display: flex;\n      align-items: center;\n    }\n    .logo {\n      width: 32px;\n      height: 32px;\n      margin-right: 10px;\n    }\n    .test-title {\n      font-size: 1.2rem;\n      font-weight: bold;\n      color: #1a73e8;\n    }\n    .header-center {\n      display: flex;\n      align-items: center;\n      font-size: 1rem;\n    }\n    .timer-label {\n      margin-right: 5px;\n      color: #d32f2f;\n      font-weight: bold;\n    }\n    .timer-value {\n      font-family: \"Courier New\", monospace;\n      font-size: 1rem;\n      color: #d32f2f;\n      font-weight: bold;\n    }\n    .header-right {\n      display: flex;\n      align-items: center;\n    }\n    .candidate-name {\n      margin-left: 8px;\n      font-size: 0.95rem;\n      font-weight: bold;\n      color: #555;\n    }\n    \/* Hide header until exam starts *\/\n    .header.hidden {\n      display: none;\n    }\n\n    \/* ========== 5) EXAM INTERFACE ========== *\/\n    .exam-container {\n      display: flex;\n      gap: 20px;\n      margin-top: 20px;\n    }\n\n    \/* ---- Top: Section Navigation Bar ---- *\/\n    .section-bar {\n      display: flex;\n      gap: 12px;\n      margin-bottom: 15px;\n    }\n    .section-bar button {\n      background-color: #e1eaff;\n      color: #1a237e;\n      border: 1px solid #1a73e8;\n      border-radius: 4px;\n      padding: 6px 12px;\n      font-size: 0.95rem;\n      transition: background-color 0.2s;\n    }\n    .section-bar button:hover {\n      background-color: #cddcff;\n    }\n\n    \/* -- Left: Question Area -- *\/\n    .question-area {\n      flex: 2;\n      background-color: #ffffff;\n      border: 1px solid #e0e0e0;\n      border-radius: 6px;\n      padding: 20px;\n      min-height: 500px;\n      box-shadow: 0 2px 6px rgba(0, 0, 0, 0.03);\n    }\n    .question-area h3 {\n      font-size: 1.1rem;\n      color: #1a237e;\n      margin-bottom: 15px;\n    }\n    .question-area p {\n      margin-bottom: 15px;\n      font-size: 1rem;\n    }\n    .options-list {\n      list-style: none;\n      padding-left: 0;\n      margin-bottom: 20px;\n    }\n    .options-list li {\n      margin-bottom: 10px;\n    }\n    .options-list li label {\n      cursor: pointer;\n      display: flex;\n      align-items: center;\n    }\n    .options-list li input {\n      margin-right: 8px;\n      cursor: pointer;\n    }\n    .nav-buttons {\n      display: flex;\n      justify-content: space-between;\n      margin-top: 10px;\n    }\n    .nav-buttons button {\n      background-color: #1a73e8;\n      color: #fff;\n      border: none;\n      padding: 8px 14px;\n      font-size: 0.95rem;\n      border-radius: 4px;\n      transition: background-color 0.2s;\n    }\n    .nav-buttons button:hover {\n      background-color: #125abe;\n    }\n\n    \/* \u2af8 Mark for Review & Clear Response Container *\/\n    .mark-clear-container {\n      margin-top: 12px;\n      display: flex;\n      gap: 12px;\n      align-items: center;\n    }\n    .mark-clear-container input[type=\"checkbox\"] {\n      margin-right: 6px;\n      cursor: pointer;\n    }\n    .mark-clear-container label {\n      font-size: 0.95rem;\n      color: #555;\n      cursor: pointer;\n    }\n    #clear-response-btn {\n      background-color: #f8d7da;\n      color: #842029;\n      border: 1px solid #f5c2c7;\n      padding: 6px 12px;\n      font-size: 0.95rem;\n      border-radius: 4px;\n      transition: background-color 0.2s;\n    }\n    #clear-response-btn:hover {\n      background-color: #f1b0b7;\n    }\n\n    \/* -- Right: Combined Progress & Legend + Palette -- *\/\n    .sidebar {\n      flex: 1;\n      display: flex;\n      flex-direction: column;\n      gap: 20px;\n    }\n    .progress-panel {\n      background-color: #e8f0fe;\n      border: 1px solid #d2e3fc;\n      border-radius: 6px;\n      padding: 15px;\n      box-shadow: 0 2px 6px rgba(0, 0, 0, 0.02);\n    }\n    .progress-panel h4 {\n      font-size: 1rem;\n      color: #1a237e;\n      margin-bottom: 10px;\n      text-align: center;\n    }\n    .progress-list {\n      list-style: none;\n      padding-left: 0;\n    }\n    .progress-list li {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      margin-bottom: 10px;\n      font-size: 0.9rem;\n    }\n    .progress-list li .info {\n      display: flex;\n      align-items: center;\n      gap: 8px;\n    }\n    .progress-list li .color-box {\n      width: 16px;\n      height: 16px;\n      border: 1px solid #aaa;\n      border-radius: 3px;\n    }\n    \/* Color boxes match palette *\/\n    .progress-list li.not-visited    .color-box { background-color: #e0e0e0; border-color: #bdbdbd; }\n    .progress-list li.not-answered   .color-box { background-color: #f9dcdc; border-color: #f1a7a7; }\n    .progress-list li.answered       .color-box { background-color: #d0f0d1; border-color: #a3d7a2; }\n    .progress-list li.marked         .color-box { background-color: #e3d0ff; border-color: #c2a3f0; }\n    .progress-list li.marked-answered .color-box { background-color: #c2a3f0; border-color: #9162d8; }\n\n    .palette-panel {\n      flex: 1;\n      background-color: #ffffff;\n      border: 1px solid #e0e0e0;\n      border-radius: 6px;\n      padding: 15px;\n      box-shadow: 0 2px 6px rgba(0, 0, 0, 0.02);\n      display: flex;\n      flex-direction: column;\n    }\n    .palette-panel h4 {\n      font-size: 1rem;\n      color: #1a237e;\n      margin-bottom: 10px;\n      text-align: center;\n    }\n    .palette-grid {\n      display: grid;\n      grid-template-columns: repeat(5, 1fr);\n      gap: 10px;\n      flex: 1;\n      overflow-y: auto;\n    }\n    .palette-grid button {\n      padding: 10px 0;\n      font-size: 0.9rem;\n      border: 1px solid #ccc;\n      border-radius: 4px;\n      cursor: pointer;\n      transition: background-color 0.2s, border-color 0.2s;\n      background-color: #e0e0e0;\n      color: #333;\n    }\n    .palette-grid button.not-visited    { background-color: #e0e0e0; border-color: #bdbdbd; }\n    .palette-grid button.not-answered   { background-color: #f9dcdc; border-color: #f1a7a7; }\n    .palette-grid button.answered       { background-color: #d0f0d1; border-color: #a3d7a2; }\n    .palette-grid button.marked         { background-color: #e3d0ff; border-color: #c2a3f0; }\n    .palette-grid button.marked-answered { background-color: #c2a3f0; border-color: #9162d8; }\n\n    .palette-grid button:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n    }\n\n    .submit-exam-btn {\n      margin-top: 20px;\n      width: 100%;\n      padding: 10px 0;\n      background-color: #d32f2f;\n      color: #ffffff;\n      border: none;\n      border-radius: 4px;\n      font-size: 1rem;\n      transition: background-color 0.2s;\n    }\n    .submit-exam-btn:hover {\n      background-color: #b71c1c;\n    }\n\n    \/* ========== 6) RESULTS OVERLAY ========== *\/\n    .results-overlay {\n      position: fixed;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      background-color: rgba(0, 0, 0, 0.6);\n      display: none;\n      align-items: center;\n      justify-content: center;\n      z-index: 1500;\n    }\n    .results-box {\n      background-color: #ffffff;\n      border-radius: 8px;\n      padding: 30px 40px;\n      width: 90%;\n      max-width: 500px;\n      text-align: center;\n      box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\n    }\n    .results-box h2 {\n      margin-bottom: 20px;\n      font-size: 1.3rem;\n      color: #1a237e;\n    }\n    .results-details {\n      list-style: none;\n      padding-left: 0;\n      margin-bottom: 20px;\n      text-align: left;\n    }\n    .results-details li {\n      margin-bottom: 10px;\n      font-size: 1rem;\n      display: flex;\n      justify-content: space-between;\n    }\n    .results-details li span.value {\n      font-weight: bold;\n    }\n    .overall-status {\n      font-size: 1.1rem;\n      margin-top: 15px;\n    }\n    .qualified { color: #2e7d32; font-weight: bold; }\n    .not-qualified { color: #c62828; font-weight: bold; }\n    .retake-button {\n      margin-top: 25px;\n      background-color: #1a73e8;\n      color: #ffffff;\n      border: none;\n      padding: 10px 20px;\n      font-size: 1rem;\n      border-radius: 4px;\n      transition: background-color 0.2s;\n    }\n    .retake-button:hover {\n      background-color: #125abe;\n    }\n\n    \/* ========== Responsive ========== *\/\n    @media (max-width: 1024px) {\n      .exam-container {\n        flex-direction: column;\n      }\n      .question-area {\n        min-height: 400px;\n      }\n      .sidebar {\n        flex-direction: column;\n      }\n      .progress-panel, .palette-panel {\n        margin-bottom: 20px;\n      }\n    }\n  <\/style>\n<\/head>\n<body>\n\n  <!-- ================================\n       SCREEN 1: CATEGORY \/ LANDING\n      ================================ -->\n  <div id=\"screen-category\" class=\"screen active container\">\n    <h1>Mock Test<\/h1>\n    <ul class=\"category-list\">\n      <li onclick=\"showTestList()\">\n        <i>\ud83d\udccb<\/i><strong>UPSC Free Coaching Entrance Exam<\/strong>\n      <\/li>\n      <!-- You can add more categories later -->\n    <\/ul>\n  <\/div>\n\n  <!-- ================================\n       SCREEN 2: TEST LIST\n      ================================ -->\n  <div id=\"screen-test-list\" class=\"screen container\">\n    <div class=\"back-btn\" onclick=\"backToCategory()\">\u2190 Back<\/div>\n    <h2>Select Mock Test<\/h2>\n    <ul class=\"test-list\">\n      <li onclick=\"showCandidateForm()\">Mock Test-1<\/li>\n      <!-- Later you can add <li onclick=\"showCandidateForm(2)\">Mock Test-2<\/li> -->\n    <\/ul>\n  <\/div>\n\n  <!-- ================================\n       SCREEN 3: CANDIDATE DETAILS FORM\n      ================================ -->\n  <div id=\"screen-candidate-form\" class=\"screen container\">\n    <div class=\"back-btn\" onclick=\"backToTestList()\">\u2190 Back<\/div>\n    <h2>Candidate Details<\/h2>\n    <form id=\"candidate-form\" onsubmit=\"return validateCandidateForm()\">\n      <label for=\"candidate-name\">Name of Candidate<\/label>\n      <input type=\"text\" id=\"candidate-name\" name=\"candidateName\" required \/>\n      <div id=\"name-error\" class=\"error\"><\/div>\n\n      <label for=\"candidate-email\">E-mail ID<\/label>\n      <input type=\"email\" id=\"candidate-email\" name=\"candidateEmail\" required \/>\n      <div id=\"email-error\" class=\"error\"><\/div>\n\n      <input type=\"submit\" value=\"Next\" \/>\n    <\/form>\n  <\/div>\n\n  <!-- ================================\n       SCREEN 4: EXAM INTERFACE\n      ================================ -->\n  <div id=\"screen-exam\" class=\"screen\">\n    <!-- Sticky Header (hidden until exam starts) -->\n    <div class=\"header hidden\" id=\"exam-header\">\n      <div class=\"header-left\">\n        <!-- Replace placeholder with your real logo URL -->\n        <img decoding=\"async\" src=\"https:\/\/via.placeholder.com\/32x32.png?text=\ud83d\udcd8\" alt=\"Logo\" class=\"logo\" \/>\n        <span class=\"test-title\">UPSC Free Coaching Mock Test<\/span>\n      <\/div>\n      <div class=\"header-center\">\n        <span class=\"timer-label\">Time Left:<\/span>\n        <span class=\"timer-value\" id=\"time-display\">02:00:00<\/span>\n      <\/div>\n      <div class=\"header-right\">\n        <span class=\"candidate-name\" id=\"display-candidate-name\">Candidate: \u2014<\/span>\n      <\/div>\n    <\/div>\n\n    <div class=\"container exam-container\">\n      <!-- ==== Left: Question Area ==== -->\n      <div class=\"question-area\" id=\"question-area\">\n        <!-- Section Navigation Bar -->\n        <div class=\"section-bar\">\n          <button onclick=\"goToSection('A')\">Section A<\/button>\n          <button onclick=\"goToSection('B')\">Section B<\/button>\n        <\/div>\n\n        <!-- Question Title (no \u201c(Section A)\u201d text) -->\n        <h3 id=\"question-title\">Question 1<\/h3>\n        <p id=\"question-text\">\n          Sample GS Q1: The Indian Parliament consists of:\n        <\/p>\n        <ul class=\"options-list\" id=\"options-list\">\n          <!-- Options get injected dynamically by JS -->\n        <\/ul>\n\n        <div class=\"nav-buttons\">\n          <button id=\"prev-btn\" onclick=\"prevQuestion()\">\u2190 Previous<\/button>\n          <button id=\"next-btn\" onclick=\"nextQuestion()\">Next \u2192<\/button>\n        <\/div>\n\n        <!-- Mark for Review & Clear Response -->\n        <div class=\"mark-clear-container\">\n          <input type=\"checkbox\" id=\"mark-for-review\" onchange=\"toggleMarkForReview()\" \/>\n          <label for=\"mark-for-review\">Mark for Review<\/label>\n          <button id=\"clear-response-btn\" class=\"clear-response-btn\" onclick=\"clearResponse()\">\n            Clear Response\n          <\/button>\n        <\/div>\n      <\/div>\n\n      <!-- ==== Right: Combined Progress & Legend + Palette ==== -->\n      <div class=\"sidebar\">\n        <!-- Combined Progress & Legend Panel -->\n        <div class=\"progress-panel\">\n          <h4>Progress &amp; Legend<\/h4>\n          <ul class=\"progress-list\">\n            <li class=\"not-visited\">\n              <div class=\"info\">\n                <div class=\"color-box\"><\/div>\n                <span>Not Visited:<\/span>\n              <\/div>\n              <span class=\"value\" id=\"stats-not-visited\">100<\/span>\n            <\/li>\n            <li class=\"not-answered\">\n              <div class=\"info\">\n                <div class=\"color-box\"><\/div>\n                <span>Not Answered:<\/span>\n              <\/div>\n              <span class=\"value\" id=\"stats-not-answered\">0<\/span>\n            <\/li>\n            <li class=\"answered\">\n              <div class=\"info\">\n                <div class=\"color-box\"><\/div>\n                <span>Answered:<\/span>\n              <\/div>\n              <span class=\"value\" id=\"stats-answered\">0<\/span>\n            <\/li>\n            <li class=\"marked\">\n              <div class=\"info\">\n                <div class=\"color-box\"><\/div>\n                <span>Marked:<\/span>\n              <\/div>\n              <span class=\"value\" id=\"stats-marked\">0<\/span>\n            <\/li>\n            <li class=\"marked-answered\">\n              <div class=\"info\">\n                <div class=\"color-box\"><\/div>\n                <span>Marked &amp; Answered:<\/span>\n              <\/div>\n              <span class=\"value\" id=\"stats-marked-answered\">0<\/span>\n            <\/li>\n          <\/ul>\n        <\/div>\n\n        <!-- Question Palette Panel -->\n        <div class=\"palette-panel\">\n          <h4>Question Palette<\/h4>\n          <div class=\"palette-grid\" id=\"palette-grid\">\n            <!-- JavaScript will generate 100 buttons here -->\n          <\/div>\n          <button class=\"submit-exam-btn\" onclick=\"submitExam()\">Submit Test<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div> <!-- \/#screen-exam -->\n\n  <!-- ================================\n       RESULTS OVERLAY\n      ================================ -->\n  <div class=\"results-overlay\" id=\"results-overlay\">\n    <div class=\"results-box\">\n      <h2>Exam Results<\/h2>\n      <ul class=\"results-details\">\n        <li>\n          <span>Section A (General Studies):<\/span>\n          <span class=\"value\" id=\"result-score-A\">0 \/ 100<\/span>\n        <\/li>\n        <li>\n          <span>Section B (Aptitude Test):<\/span>\n          <span class=\"value\" id=\"result-score-B\">0 \/ 100<\/span>\n        <\/li>\n        <li>\n          <span>Section B Status:<\/span>\n          <span class=\"value\" id=\"result-status-B\">\u2014<\/span>\n        <\/li>\n      <\/ul>\n      <div class=\"overall-status\" id=\"result-overall\">\n        <!-- \u201cQualified\u201d or \u201cNot Qualified\u201d will appear here -->\n      <\/div>\n      <button class=\"retake-button\" onclick=\"retakeExam()\">Retake Exam<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- ================================\n       SCRIPT\n      ================================ -->\n  <script>\n    \/******************************************************\n     * GLOBAL STATE VARIABLES\n     ******************************************************\/\n    let selectedTestId = null;   \/\/ e.g. 1 for Mock Test-1\n    let candidateName = \"\";\n    let candidateEmail = \"\";\n    let timerInterval = null;\n    let timeLeft = 120 * 60;     \/\/ 120 minutes in seconds\n\n    \/\/ For remembering the last visited question in each section:\n    let lastAIndex = 0;   \/\/ Tracks index of last-visited Section A\n    let lastBIndex = 50;  \/\/ Tracks index of last-visited Section B\n\n    \/\/ Dummy question bank (100 questions). Replace with your real questions later.\n    \/\/ Section A: IDs 1\u201350, Section B: IDs 51\u2013100\n    const questionBank = [];\n    for (let i = 1; i <= 100; i++) {\n      if (i <= 50) {\n        questionBank.push({\n          id: i,\n          section: \"A\",\n          text: `Sample GS Q${i}: This is placeholder text for question ${i}.`,\n          options: {\n            A: \"Option A\",\n            B: \"Option B\",\n            C: \"Option C\",\n            D: \"Option D\"\n          },\n          correct: [\"A\", \"B\", \"C\", \"D\"][Math.floor(Math.random() * 4)]\n        });\n      } else {\n        questionBank.push({\n          id: i,\n          section: \"B\",\n          text: `Sample Aptitude Q${i - 50}: This is placeholder for question ${i}.`,\n          options: {\n            A: \"Option A\",\n            B: \"Option B\",\n            C: \"Option C\",\n            D: \"Option D\"\n          },\n          correct: [\"A\", \"B\", \"C\", \"D\"][Math.floor(Math.random() * 4)]\n        });\n      }\n    }\n\n    let flatQuestions = questionBank;\n    let currentIndex = 0;\n\n    \/\/ Track each question\u2019s state:\n    \/\/ { chosenOption: null\/\"A\"\/\"B\"\/\"C\"\/\"D\", marked: false\/true, visited: false\/true }\n    const userState = Array.from({ length: 100 }, () => ({\n      chosenOption: null,\n      marked: false,\n      visited: false\n    }));\n\n    \/******************************************************\n     * SCREEN NAVIGATION FUNCTIONS\n     ******************************************************\/\n    function showTestList() {\n      document.getElementById(\"screen-category\").classList.remove(\"active\");\n      document.getElementById(\"screen-test-list\").classList.add(\"active\");\n    }\n    function backToCategory() {\n      document.getElementById(\"screen-test-list\").classList.remove(\"active\");\n      document.getElementById(\"screen-category\").classList.add(\"active\");\n    }\n    function showCandidateForm() {\n      \/\/ If you had multiple tests, set selectedTestId here.\n      selectedTestId = 1;\n      document.getElementById(\"screen-test-list\").classList.remove(\"active\");\n      document.getElementById(\"screen-candidate-form\").classList.add(\"active\");\n    }\n    function backToTestList() {\n      document.getElementById(\"screen-candidate-form\").classList.remove(\"active\");\n      document.getElementById(\"screen-test-list\").classList.add(\"active\");\n    }\n\n    \/******************************************************\n     * CANDIDATE FORM VALIDATION\n     ******************************************************\/\n    function validateCandidateForm() {\n      \/\/ Prevent actual form submission\n      event.preventDefault();\n\n      const nameField = document.getElementById(\"candidate-name\");\n      const emailField = document.getElementById(\"candidate-email\");\n      const nameError = document.getElementById(\"name-error\");\n      const emailError = document.getElementById(\"email-error\");\n\n      let valid = true;\n      nameError.textContent = \"\";\n      emailError.textContent = \"\";\n\n      if (nameField.value.trim().length < 2) {\n        nameError.textContent = \"Please enter a valid name.\";\n        valid = false;\n      }\n      \/\/ Basic email regex\n      const emailRegex = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\n      if (!emailRegex.test(emailField.value.trim())) {\n        emailError.textContent = \"Please enter a valid e-mail address.\";\n        valid = false;\n      }\n      if (!valid) return false;\n\n      \/\/ Save candidate details\n      candidateName = nameField.value.trim();\n      candidateEmail = emailField.value.trim();\n\n      \/\/ Hide candidate form, show exam screen\n      document.getElementById(\"screen-candidate-form\").classList.remove(\"active\");\n      document.getElementById(\"screen-exam\").classList.add(\"active\");\n\n      \/\/ Unhide the sticky header\n      document.getElementById(\"exam-header\").classList.remove(\"hidden\");\n      document.getElementById(\"display-candidate-name\").textContent =\n        \"Candidate: \" + candidateName;\n\n      \/\/ Initialize exam\n      initializeExam();\n      return false;\n    }\n\n    \/******************************************************\n     * INITIALIZE EXAM: BUILD PALETTE, START TIMER, RENDER Q1\n     ******************************************************\/\n    function initializeExam() {\n      \/\/ Build palette buttons 1..100\n      const paletteGrid = document.getElementById(\"palette-grid\");\n      paletteGrid.innerHTML = \"\";\n      for (let i = 0; i < 100; i++) {\n        const btn = document.createElement(\"button\");\n        btn.id = `palette-btn-${i}`;\n        btn.textContent = i + 1;\n        btn.classList.add(\"not-visited\");\n        btn.addEventListener(\"click\", () => jumpToQuestion(i));\n        paletteGrid.appendChild(btn);\n      }\n\n      \/\/ Show first question\n      currentIndex = 0;\n      renderQuestion();\n      updateStats();\n\n      \/\/ Start countdown timer\n      startTimer();\n    }\n\n    \/******************************************************\n     * TIMER LOGIC\n     ******************************************************\/\n    function startTimer() {\n      updateTimerDisplay();\n      timerInterval = setInterval(() => {\n        timeLeft--;\n        if (timeLeft <= 0) {\n          clearInterval(timerInterval);\n          submitExam();\n        }\n        updateTimerDisplay();\n      }, 1000);\n    }\n    function updateTimerDisplay() {\n      const hrs = Math.floor(timeLeft \/ 3600);\n      const mins = Math.floor((timeLeft % 3600) \/ 60);\n      const secs = timeLeft % 60;\n      const display =\n        String(hrs).padStart(2, \"0\") +\n        \":\" +\n        String(mins).padStart(2, \"0\") +\n        \":\" +\n        String(secs).padStart(2, \"0\");\n      document.getElementById(\"time-display\").textContent = display;\n    }\n\n    \/******************************************************\n     * RENDER A QUESTION BASED ON currentIndex\n     ******************************************************\/\n    function renderQuestion() {\n      const qObj = flatQuestions[currentIndex];\n      const st = userState[currentIndex];\n\n      \/\/ Mark visited\n      st.visited = true;\n\n      \/\/ Update last-visited index in that section\n      if (qObj.section === \"A\") {\n        lastAIndex = currentIndex;\n      } else {\n        lastBIndex = currentIndex;\n      }\n\n      \/\/ Title (no \u201c(Section A)\u201d text)\n      document.getElementById(\"question-title\").textContent =\n        `Question ${currentIndex + 1}`;\n\n      \/\/ Text\n      document.getElementById(\"question-text\").innerHTML = `<p>${qObj.text}<\/p>`;\n\n      \/\/ Options\n      const optsList = document.getElementById(\"options-list\");\n      optsList.innerHTML = \"\";\n      for (let key in qObj.options) {\n        const li = document.createElement(\"li\");\n        const radioId = `q${qObj.id}_opt_${key}`;\n        const radio = document.createElement(\"input\");\n        radio.type = \"radio\";\n        radio.name = `option_${qObj.id}`;\n        radio.id = radioId;\n        radio.value = key;\n        if (st.chosenOption === key) {\n          radio.checked = true;\n        }\n        radio.addEventListener(\"change\", () => {\n          st.chosenOption = key;\n          updatePaletteColor(currentIndex);\n          updateStats();\n          \/\/ Enable clear-response now that an option is chosen\n          document.getElementById(\"clear-response-btn\").disabled = false;\n        });\n\n        const label = document.createElement(\"label\");\n        label.htmlFor = radioId;\n        label.innerHTML = `<span style=\"margin-right:8px;\">${key}.<\/span> ${\n          qObj.options[key]\n        }`;\n\n        li.appendChild(radio);\n        li.appendChild(label);\n        optsList.appendChild(li);\n      }\n\n      \/\/ Mark for Review checkbox\n      const markCB = document.getElementById(\"mark-for-review\");\n      markCB.checked = st.marked;\n      markCB.disabled = false;\n\n      \/\/ Enable or disable the Clear Response button\n      const clearBtn = document.getElementById(\"clear-response-btn\");\n      clearBtn.disabled = st.chosenOption === null;\n\n      \/\/ Update palette color + stats\n      updatePaletteColor(currentIndex);\n      updateStats();\n\n      \/\/ Enable\/disable Prev\/Next\n      document.getElementById(\"prev-btn\").disabled = currentIndex === 0;\n      document.getElementById(\"next-btn\").disabled =\n        currentIndex === flatQuestions.length - 1;\n    }\n\n    \/******************************************************\n     * NAVIGATION: PREVIOUS \/ NEXT \/ JUMP\n     ******************************************************\/\n    function prevQuestion() {\n      if (currentIndex > 0) {\n        currentIndex--;\n        renderQuestion();\n      }\n    }\n    function nextQuestion() {\n      if (currentIndex < flatQuestions.length - 1) {\n        currentIndex++;\n        renderQuestion();\n      }\n    }\n    function jumpToQuestion(idx) {\n      currentIndex = idx;\n      renderQuestion();\n    }\n\n    \/******************************************************\n     * SECTION NAVIGATION: Go to last-visited question in A or B\n     ******************************************************\/\n    function goToSection(section) {\n      if (section === \"A\") {\n        currentIndex = lastAIndex;\n      } else {\n        currentIndex = lastBIndex;\n      }\n      renderQuestion();\n    }\n\n    \/******************************************************\n     * TOGGLE \u201cMARK FOR REVIEW\u201d\n     ******************************************************\/\n    function toggleMarkForReview() {\n      userState[currentIndex].marked = !userState[currentIndex].marked;\n      updatePaletteColor(currentIndex);\n      updateStats();\n    }\n\n    \/******************************************************\n     * CLEAR RESPONSE: Remove chosenOption, uncheck any\n     * radio in the DOM, uncheck \u201cMark for Review,\u201d then\n     * update palette &#038; stats accordingly.\n     ******************************************************\/\n    function clearResponse() {\n      const st = userState[currentIndex];\n\n      \/\/ 1) Remove the chosenOption from our JS state\n      st.chosenOption = null;\n\n      \/\/ 2) Uncheck the actual radio inputs in the DOM\n      const qId = flatQuestions[currentIndex].id;\n      const radios = document.querySelectorAll(`input[name=\"option_${qId}\"]`);\n      radios.forEach((r) => {\n        r.checked = false;\n      });\n\n      \/\/ 3) If \u201cMark for Review\u201d was checked, uncheck it\n      st.marked = false;\n      document.getElementById(\"mark-for-review\").checked = false;\n\n      \/\/ 4) Update the palette\u2010button color and the progress counts\n      updatePaletteColor(currentIndex);\n      updateStats();\n\n      \/\/ 5) Disable \u201cClear Response\u201d now that there\u2019s no longer a selection\n      document.getElementById(\"clear-response-btn\").disabled = true;\n    }\n\n    \/******************************************************\n     * UPDATE PALETTE BUTTON COLOR BASED ON userState\n     ******************************************************\/\n    function updatePaletteColor(idx) {\n      const btn = document.getElementById(`palette-btn-${idx}`);\n      const st = userState[idx];\n\n      btn.classList.remove(\n        \"not-visited\",\n        \"not-answered\",\n        \"answered\",\n        \"marked\",\n        \"marked-answered\"\n      );\n\n      if (!st.visited) {\n        btn.classList.add(\"not-visited\");\n      } else if (st.marked && st.chosenOption) {\n        btn.classList.add(\"marked-answered\");\n      } else if (st.marked) {\n        btn.classList.add(\"marked\");\n      } else if (st.chosenOption) {\n        btn.classList.add(\"answered\");\n      } else {\n        btn.classList.add(\"not-answered\");\n      }\n    }\n\n    \/******************************************************\n     * UPDATE PROGRESS STATISTICS\n     ******************************************************\/\n    function updateStats() {\n      let answered = 0,\n        notAnswered = 0,\n        marked = 0,\n        markedAnswered = 0,\n        notVisited = 0;\n\n      userState.forEach((st) => {\n        if (!st.visited) {\n          notVisited++;\n        } else if (st.marked && st.chosenOption) {\n          markedAnswered++;\n        } else if (st.marked) {\n          marked++;\n        } else if (st.chosenOption) {\n          answered++;\n        } else {\n          notAnswered++;\n        }\n      });\n\n      document.getElementById(\"stats-answered\").textContent = answered;\n      document.getElementById(\"stats-not-answered\").textContent = notAnswered;\n      document.getElementById(\"stats-marked\").textContent = marked;\n      document.getElementById(\"stats-marked-answered\").textContent = markedAnswered;\n      document.getElementById(\"stats-not-visited\").textContent = notVisited;\n    }\n\n    \/******************************************************\n     * SUBMIT EXAM (MANUAL or AUTO)\n     ******************************************************\/\n    function submitExam() {\n      clearInterval(timerInterval);\n\n      let scoreA = 0,\n        scoreB = 0;\n\n      flatQuestions.forEach((q, idx) => {\n        const st = userState[idx];\n        if (st.chosenOption) {\n          if (st.chosenOption === q.correct) {\n            if (q.section === \"A\") scoreA += 2;\n            else scoreB += 2;\n          } else {\n            if (q.section === \"A\") scoreA -= 0.5;\n            else scoreB -= 0.5;\n          }\n        }\n      });\n\n      const statusB = scoreB >= 33 ? \"PASSED\" : \"FAILED\";\n      const overall =\n        scoreB >= 33\n          ? `<span class=\"qualified\">QUALIFIED<\/span>`\n          : `<span class=\"not-qualified\">NOT QUALIFIED<\/span>`;\n\n      document.getElementById(\"result-score-A\").textContent =\n        scoreA.toFixed(1) + \" \/ 100\";\n      document.getElementById(\"result-score-B\").textContent =\n        scoreB.toFixed(1) + \" \/ 100\";\n      document.getElementById(\"result-status-B\").textContent = statusB;\n      document.getElementById(\"result-overall\").innerHTML = `Overall: ${overall}`;\n\n      document.getElementById(\"results-overlay\").style.display = \"flex\";\n    }\n\n    \/******************************************************\n     * RETAKE EXAM (RESET EVERYTHING)\n     ******************************************************\/\n    function retakeExam() {\n      clearInterval(timerInterval);\n      timeLeft = 120 * 60;\n\n      for (let i = 0; i < 100; i++) {\n        userState[i] = { chosenOption: null, marked: false, visited: false };\n        updatePaletteColor(i);\n      }\n      updateStats();\n\n      document.getElementById(\"results-overlay\").style.display = \"none\";\n      currentIndex = 0;\n      renderQuestion();\n      startTimer();\n    }\n  <\/script>\n<\/body>\n<\/html>\n\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mock Test | UPSC Free Coaching Entrance Exam Mock Test \ud83d\udccbUPSC Free Coaching Entrance Exam \u2190 Back Select Mock Test [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-13","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sosacademy.in\/index.php?rest_route=\/wp\/v2\/pages\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sosacademy.in\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sosacademy.in\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sosacademy.in\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sosacademy.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13"}],"version-history":[{"count":7,"href":"https:\/\/sosacademy.in\/index.php?rest_route=\/wp\/v2\/pages\/13\/revisions"}],"predecessor-version":[{"id":26,"href":"https:\/\/sosacademy.in\/index.php?rest_route=\/wp\/v2\/pages\/13\/revisions\/26"}],"wp:attachment":[{"href":"https:\/\/sosacademy.in\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}