{"id":13495,"date":"2026-07-13T14:00:02","date_gmt":"2026-07-13T14:00:02","guid":{"rendered":"https:\/\/promotionexams.com\/?page_id=13495"},"modified":"2026-07-13T14:02:50","modified_gmt":"2026-07-13T14:02:50","slug":"test-mcqs-page","status":"publish","type":"page","link":"https:\/\/promotionexams.com\/?page_id=13495","title":{"rendered":"Test mcqs page"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"13495\" class=\"elementor elementor-13495\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b528af3 e-con-full e-flex e-con e-parent\" data-id=\"b528af3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-74bc3d1 elementor-widget elementor-widget-html\" data-id=\"74bc3d1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\r\n============================================================\r\nCSS ADDA \u00b7 PromotionExams.com\r\nCHAPTER-WISE MCQ PRACTICE + AI COACH  (Reusable Template)\r\n------------------------------------------------------------\r\nTABS:\r\n  1. Practice Quiz   \u2014 chapter-wise quiz (progress, weak areas,\r\n                       chapter filter, mastery stars)\r\n  2. My Performance  \u2014 AI coach: readiness score, focus areas,\r\n                       study plan, spaced-repetition revision queue\r\nAll progress persists in localStorage (per quizId).\r\n\r\nHOW TO REUSE THIS TEMPLATE:\r\n  1. Set quizConfig.quizId  \u2192 unique per topic (e.g. 'RTI-chapterwise-quiz')\r\n  2. Set quizConfig.topic   \u2192 shown in header (e.g. 'Right to Information Act, 2005')\r\n  3. Set quizConfig.paper   \u2192 'Paper 1' \/ 'Paper 2'\r\n  4. Paste your question bank into  const allQuestions = [ ... ]\r\n     Required fields per question:\r\n       id (number, unique), chapter (string), question (string, <br> allowed),\r\n       options (array of 4 strings), correct (0-indexed number),\r\n       explanation (HTML string)\r\n     NOTE: No 'year' field \u2014 this template is chapter-wise only.\r\n============================================================\r\n-->\r\n\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n\r\n<style>\r\n\/* =====================================================\r\n   CSS ADDA \u2014 INTEGRATED PORTAL DESIGN SYSTEM\r\n===================================================== *\/\r\n.cwq-portal{\r\n  --navy:#2563EB; --navy-d:#1D4ED8; --navy-l:#3B82F6; --navy-ink:#12275c;\r\n  --gold:#c9992a; --gold-l:#e6c14e; --gold-d:#a37b1c;\r\n  --green:#10B981; --green-d:#059669; --green-bg:#ecfdf5;\r\n  --red:#EF4444; --red-d:#dc2626; --red-bg:#fef2f2;\r\n  --amber:#f59e0b; --amber-d:#d97706;\r\n  --bg:#F6F8FC; --card:#FFFFFF;\r\n  --ink:#1E293B; --mut:#5b6472; --faint:#94A3B8; --line:#E2E8F0;\r\n  --sh-sm:0 1px 2px rgba(16,41,66,.06);\r\n  --sh-md:0 4px 10px -2px rgba(16,41,66,.10);\r\n  --sh-lg:0 12px 26px -8px rgba(16,41,66,.16);\r\n  --r-sm:8px; --r-md:12px; --r-lg:16px;\r\n  font-family:'DM Sans',-apple-system,BlinkMacSystemFont,sans-serif;\r\n  color:var(--ink); line-height:1.55;\r\n  background:linear-gradient(160deg,#EFF4FF 0%,#F6F8FC 45%,#FDF9EE 100%);\r\n  border-radius:var(--r-lg); overflow:hidden; box-shadow:var(--sh-lg);\r\n  -webkit-user-select:none; user-select:none;\r\n}\r\n.cwq-portal *{margin:0;padding:0;box-sizing:border-box;min-width:0}\r\n.cwq-portal img,.cwq-portal svg,.cwq-portal table{max-width:100%}\r\n.cwq-portal table{max-width:none}\r\n@media print{.cwq-portal{display:none!important}}\r\n\r\n.ic{font-style:normal;display:inline-block;line-height:1}\r\n\/* ---------- HEADER ---------- *\/\r\n.gp-header{background:linear-gradient(135deg,#173db3 0%,var(--navy) 62%,#3b6cf0 100%);border-bottom:4px solid var(--gold);padding:26px 28px 0}\r\n.gp-head-top{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:18px}\r\n.gp-brand .eyebrow{font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--gold-l);font-weight:700;margin-bottom:6px}\r\n.gp-brand h1{font-family:'Crimson Pro',serif;font-weight:600;font-size:clamp(1.25rem,3.5vw,1.75rem);line-height:1.15;color:#fff;letter-spacing:-.01em}\r\n.gp-brand p{font-size:.85rem;color:#cfe0ff;margin-top:5px}\r\n.gp-stats{display:flex;gap:10px;flex-wrap:wrap}\r\n.gp-stat{background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.16);border-radius:var(--r-md);padding:9px 16px;min-width:96px;text-align:center}\r\n.gp-stat .n{font-family:'Crimson Pro',serif;font-size:1.45rem;font-weight:600;color:var(--gold-l);line-height:1.1}\r\n.gp-stat .l{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:#bfdbfe;margin-top:2px}\r\n.gp-stat.clickable{cursor:pointer;transition:transform .25s}\r\n.gp-stat.clickable:hover{transform:translateY(-2px);background:rgba(255,255,255,.16)}\r\n\r\n\/* Tab navigation *\/\r\n.gp-tabs{display:flex;gap:6px;margin-top:22px;flex-wrap:wrap}\r\n.gp-tab{padding:11px 22px;border:none;border-radius:var(--r-md) var(--r-md) 0 0;background:rgba(255,255,255,.10);color:#dbeafe;font-family:'DM Sans',sans-serif;font-size:.85rem;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:8px;transition:all .25s}\r\n.gp-tab i{color:var(--gold-l);font-size:.8rem}\r\n.gp-tab:hover{background:rgba(255,255,255,.2);color:#fff}\r\n.gp-tab.active{background:var(--bg);color:var(--navy-d)}\r\n.gp-tab.active i{color:var(--gold)}\r\n.gp-tab .pill{background:var(--red);color:#fff;font-size:.65rem;font-weight:700;padding:1px 7px;border-radius:20px}\r\n\r\n.gp-view{display:none;animation:gpFade .35s ease}\r\n.gp-view.active{display:block}\r\n@keyframes gpFade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}\r\n\r\n\/* ---------- SHARED CARDS ---------- *\/\r\n.quiz-card,.an-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-sm);overflow:hidden;display:flex;flex-direction:column}\r\n.quiz-card-header{background:linear-gradient(135deg,var(--navy) 0%,var(--navy-d) 100%);padding:13px 16px;color:#fff}\r\n.quiz-card-header h3{font-size:.84rem;font-weight:700;display:flex;align-items:center;gap:8px;color:#fff}\r\n.quiz-card-header h3 i{color:var(--gold-l)}\r\n.quiz-card-header.light{background:linear-gradient(135deg,#F1F5FB 0%,#E4ECFB 100%);border-bottom:1px solid var(--line)}\r\n.quiz-card-header.light h3{color:var(--navy-d)}\r\n.quiz-card-header.light h3 i{color:var(--gold)}\r\n.quiz-card-body{padding:16px;flex:1;display:flex;flex-direction:column}\r\n\r\n.sec-head{display:flex;align-items:baseline;gap:12px;margin:34px 0 16px;border-bottom:1px solid var(--line);padding-bottom:10px}\r\n.sec-head .num{font-family:'Crimson Pro',serif;color:var(--gold);font-size:1.05rem;font-weight:600}\r\n.sec-head h2{font-size:1.15rem;font-weight:700;letter-spacing:-.01em;color:var(--navy-ink)}\r\n.sec-head .hint{margin-left:auto;color:var(--mut);font-size:.8rem;font-style:italic;font-family:'Crimson Pro',serif}\r\n\r\n\/* ---------- MODE SELECTOR ---------- *\/\r\n.mode-selector{background:var(--card);padding:13px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px}\r\n.mode-tabs{display:flex;gap:8px;flex-wrap:wrap}\r\n.mode-tab{padding:9px 16px;min-height:40px;border:2px solid var(--line);border-radius:var(--r-md);background:#F8FAFC;font-size:.8rem;font-weight:600;color:var(--mut);cursor:pointer;transition:all .3s;display:flex;align-items:center;gap:6px;font-family:'DM Sans',sans-serif}\r\n.mode-tab:hover{border-color:var(--navy-l);color:var(--navy)}\r\n.mode-tab.active{background:linear-gradient(135deg,var(--navy) 0%,var(--navy-d) 100%);border-color:var(--navy);color:#fff}\r\n.mode-tab.weak-mode{border-color:#f3c1c1}\r\n.mode-tab.weak-mode.active{background:linear-gradient(135deg,var(--red) 0%,var(--red-d) 100%);border-color:var(--red)}\r\n.mode-tab .badge{background:rgba(255,255,255,.3);padding:2px 8px;border-radius:20px;font-size:.7rem}\r\n.mode-tab:not(.active) .badge{background:var(--navy);color:#fff}\r\n.mode-tab.weak-mode:not(.active) .badge{background:var(--red)}\r\n.session-info{display:flex;align-items:center;gap:12px;font-size:.8rem;color:var(--mut)}\r\n.session-info i{color:var(--gold)}\r\n.resume-btn{padding:7px 14px;background:linear-gradient(135deg,var(--gold) 0%,var(--gold-d) 100%);border:none;border-radius:var(--r-md);color:#fff;font-size:.76rem;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:5px;transition:all .3s;font-family:'DM Sans',sans-serif}\r\n.resume-btn:hover{transform:translateY(-2px);box-shadow:var(--sh-md)}\r\n\r\n\/* ---------- QUIZ GRID LAYOUT (filter bar | question | dashboard) ---------- *\/\r\n.quiz-container{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:18px;padding:0 18px 18px;align-items:start}\r\n\/* Full-width horizontal FILTER BAR shown before the MCQ content *\/\r\n.filter-bar{display:block;padding:14px 18px 0}\r\n.filter-bar .quiz-card{margin-bottom:12px}\r\n.filter-bar-row{display:grid;grid-template-columns:1fr;gap:12px}\r\n.filter-list{display:flex;flex-direction:row;flex-wrap:wrap;gap:7px;padding:2px 0;max-height:none;overflow:visible}\r\n.filter-item{padding:7px 12px;border-radius:20px;cursor:pointer;display:inline-flex;align-items:center;gap:8px;transition:all .25s;border:1.5px solid var(--line);background:#F8FAFC;font-size:.8rem;flex:0 0 auto}\r\n.filter-item:hover{background:#EFF6FF;border-color:var(--navy-l)}\r\n.filter-item.active{background:linear-gradient(135deg,var(--navy) 0%,var(--navy-d) 100%);color:#fff}\r\n.filter-item .filter-text{font-weight:600;display:flex;align-items:center;gap:6px;font-size:.79rem}\r\n.filter-item .filter-count{background:rgba(255,255,255,.2);padding:2px 8px;border-radius:20px;font-size:.7rem;font-weight:600}\r\n.filter-item:not(.active) .filter-count{background:var(--navy);color:#fff}\r\n\r\n.weak-areas-card .quiz-card-header{background:linear-gradient(135deg,var(--red) 0%,var(--red-d) 100%)}\r\n.weak-question-list{flex:1;overflow-y:auto;margin-bottom:10px;max-height:180px}\r\n.weak-question-item{background:#F8FAFC;padding:10px 12px;border-radius:var(--r-sm);margin-bottom:8px;font-size:.78rem;display:flex;align-items:center;gap:10px;cursor:pointer;transition:all .3s;border-left:3px solid var(--red)}\r\n.weak-question-item:hover{background:var(--red-bg);transform:translateX(3px)}\r\n.weak-question-item .q-num{font-weight:700;color:var(--red);flex-shrink:0}\r\n.weak-question-item .q-text{flex:1;color:var(--mut);font-size:.72rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\r\n.weak-question-item .wrong-count{background:var(--red);color:#fff;padding:2px 6px;border-radius:20px;font-size:.65rem;font-weight:600}\r\n.practice-weak-btn{width:100%;padding:10px;background:linear-gradient(135deg,var(--red) 0%,var(--red-d) 100%);border:none;border-radius:var(--r-md);color:#fff;font-size:.8rem;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;margin-top:10px;transition:all .3s;font-family:'DM Sans',sans-serif}\r\n.practice-weak-btn:hover{transform:translateY(-2px);box-shadow:var(--sh-md)}\r\n\r\n\/* ---------- QUESTION PANEL ---------- *\/\r\n.question-panel{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-sm);overflow:hidden;align-self:start}\r\n.question-header{background:linear-gradient(135deg,#F1F5FB 0%,#E4ECFB 100%);padding:13px 20px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);flex-wrap:wrap;gap:10px}\r\n.question-number{font-family:'Crimson Pro',serif;font-size:1.02rem;font-weight:600;color:var(--navy-d)}\r\n.question-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap}\r\n.meta-badge{padding:5px 10px;border-radius:20px;font-size:.73rem;font-weight:600;display:flex;align-items:center;gap:4px}\r\n.meta-badge.chapter{background:linear-gradient(135deg,var(--gold) 0%,var(--gold-d) 100%);color:#fff}\r\n.meta-badge.weak{background:linear-gradient(135deg,var(--red) 0%,var(--red-d) 100%);color:#fff}\r\n.meta-badge i{font-size:.63rem}\r\n.question-body{padding:22px}\r\n\/* ---- EXAM-PAPER TYPOGRAPHY (UPSC QP style) ---- *\/\r\n.question-text{font-family:'Crimson Pro',Georgia,'Times New Roman',serif;font-size:1.16rem;line-height:1.7;color:#161b26;padding:20px 22px;background:#fffef9;border:1px solid #e9e3d2;border-left:4px solid var(--gold);border-radius:var(--r-md);margin-bottom:18px;box-shadow:inset 0 1px 0 #fff;text-align:justify;text-justify:inter-word;hyphens:auto;-webkit-hyphens:auto}\r\n.question-text b{font-weight:700}\r\n.question-text .q-stem{display:block}\r\n.q-stmt{display:grid;grid-template-columns:30px 1fr;gap:4px;margin:12px 0 0 14px;line-height:1.65}\r\n.q-stmt .sn{font-weight:600;text-align:left}\r\n.q-lead{display:block;margin-top:16px}\r\n.options-list{display:flex;flex-direction:column;gap:9px}\r\n.option-item{font-family:'Crimson Pro',Georgia,'Times New Roman',serif;padding:12px 16px;border:1.5px solid var(--line);border-radius:var(--r-md);cursor:pointer;display:flex;align-items:flex-start;gap:12px;transition:all .25s;background:#fff}\r\n.option-item:hover:not(.disabled){border-color:var(--navy-l);background:#F6F9FF;transform:translateX(4px)}\r\n.option-item.selected{border-color:var(--navy);background:#EFF5FF;box-shadow:0 0 0 1px var(--navy)}\r\n.option-item.correct{border-color:var(--green);background:#F0FDF6;box-shadow:0 0 0 1px var(--green)}\r\n.option-item.incorrect{border-color:var(--red);background:#FEF4F4;box-shadow:0 0 0 1px var(--red)}\r\n.option-item.disabled{cursor:default}\r\n.option-letter{min-width:34px;font-family:inherit;font-weight:600;font-size:1.08rem;color:#161b26;flex-shrink:0;line-height:1.6;transition:color .25s}\r\n.option-item.selected .option-letter{color:var(--navy-d)}\r\n.option-item.correct .option-letter{color:var(--green-d)}\r\n.option-item.incorrect .option-letter{color:var(--red-d)}\r\n.option-text{font-size:1.08rem;line-height:1.6;color:#161b26;flex:1;text-align:justify;text-justify:inter-word;hyphens:auto;-webkit-hyphens:auto}\r\n.option-icon{font-size:1rem;display:none}\r\n.option-item.correct .option-icon,.option-item.incorrect .option-icon{display:block}\r\n.option-item.correct .option-icon{color:var(--green)}\r\n.option-item.incorrect .option-icon{color:var(--red)}\r\n.explanation-box{margin-top:18px;padding:16px;background:linear-gradient(135deg,#FFFBEB 0%,#FEF3C7 100%);border-radius:var(--r-md);border-left:4px solid var(--gold);display:none;animation:gpSlide .4s ease}\r\n.explanation-box.show{display:block}\r\n@keyframes gpSlide{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}\r\n.explanation-title{font-size:.84rem;font-weight:700;color:var(--gold-d);margin-bottom:8px;display:flex;align-items:center;gap:6px}\r\n.explanation-text{font-family:'Crimson Pro',Georgia,'Times New Roman',serif;font-size:1.02rem;line-height:1.68;color:#1c2330;text-align:justify;text-justify:inter-word;hyphens:auto;-webkit-hyphens:auto}\r\n.mastery-indicator{margin-top:14px;padding:10px 14px;background:#F8FAFC;border-radius:var(--r-md);display:none}\r\n.mastery-indicator.show{display:flex;align-items:center;justify-content:space-between}\r\n.mastery-label{font-size:.78rem;color:var(--mut);display:flex;align-items:center;gap:5px}\r\n.mastery-stars{display:flex;gap:2px}\r\n.mastery-stars i{color:var(--line);font-size:.85rem}\r\n.mastery-stars i.filled{color:#fbbf24}\r\n.question-nav{margin-top:20px;padding:16px 20px;background:#F8FAFC;display:flex;justify-content:space-between;align-items:center;gap:12px;border-radius:var(--r-md);border:1px solid var(--line)}\r\n.nav-btn{padding:11px 22px;min-height:44px;border:none;border-radius:var(--r-md);font-size:.85rem;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:7px;transition:all .3s;font-family:'DM Sans',sans-serif;touch-action:manipulation}\r\n.nav-btn.prev{background:#fff;color:var(--mut);border:2px solid var(--line)}\r\n.nav-btn.prev:hover:not(:disabled){border-color:var(--navy);color:var(--navy);transform:translateX(-3px)}\r\n.nav-btn.check{background:linear-gradient(135deg,var(--gold) 0%,var(--gold-d) 100%);color:#fff;flex:1;justify-content:center;max-width:220px;box-shadow:var(--sh-md)}\r\n.nav-btn.check:hover:not(:disabled){transform:translateY(-2px);box-shadow:var(--sh-lg)}\r\n.nav-btn.next{background:linear-gradient(135deg,var(--navy) 0%,var(--navy-d) 100%);color:#fff;box-shadow:var(--sh-md)}\r\n.nav-btn.next:hover:not(:disabled){transform:translateX(3px);box-shadow:var(--sh-lg)}\r\n.nav-btn:disabled{opacity:.5;cursor:not-allowed}\r\n\r\n\/* ---------- RIGHT SIDEBAR ---------- *\/\r\n.dashboard-sidebar{display:flex;flex-direction:column;gap:16px;align-self:start;min-width:0}\r\n\/* Combined Progress + Session card *\/\r\n.progress-combo{display:grid;grid-template-columns:auto 1fr;gap:14px;align-items:center}\r\n.progress-combo .stat-col{display:flex;flex-direction:column;gap:2px}\r\n.progress-combo .stat-row{padding:5px 0}\r\n.progress-ring-container{display:flex;justify-content:center}\r\n.progress-ring{position:relative;width:100px;height:100px}\r\n.progress-ring svg{transform:rotate(-90deg)}\r\n.progress-ring-bg{fill:none;stroke:var(--line);stroke-width:8}\r\n.progress-ring-fill{fill:none;stroke:var(--green);stroke-width:8;stroke-linecap:round;transition:stroke-dashoffset .5s}\r\n.progress-ring-text{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}\r\n.progress-ring-percentage{font-family:'Crimson Pro',serif;font-size:1.5rem;font-weight:600;color:var(--ink)}\r\n.progress-ring-label{font-size:.63rem;color:var(--mut)}\r\n.progress-stats-mini{display:grid;grid-template-columns:1fr 1fr;gap:8px}\r\n.progress-stat-mini{background:#F8FAFC;padding:10px;border-radius:var(--r-sm);text-align:center}\r\n.progress-stat-mini .value{font-family:'Crimson Pro',serif;font-size:1.2rem;font-weight:600}\r\n.progress-stat-mini .value.correct{color:var(--green)}\r\n.progress-stat-mini .value.incorrect{color:var(--red)}\r\n.progress-stat-mini .label{font-size:.63rem;color:var(--mut);margin-top:2px}\r\n.question-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;max-height:200px;overflow-y:auto;padding:2px}\r\n.grid-item{width:100%;aspect-ratio:1;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.73rem;cursor:pointer;transition:all .3s;border:2px solid transparent;position:relative}\r\n.grid-item.unattempted{background:var(--navy);color:#fff}\r\n.grid-item.current{background:var(--gold);color:#fff;transform:scale(1.1);box-shadow:var(--sh-md);z-index:1}\r\n.grid-item.attempted{background:#f7ce6b;color:var(--ink)}\r\n.grid-item.correct-answered{background:var(--green);color:#fff}\r\n.grid-item.incorrect-answered{background:var(--red);color:#fff}\r\n.grid-item.weak-marked::after{content:'!';position:absolute;top:-3px;right:-3px;width:12px;height:12px;background:var(--red);border-radius:50%;font-size:.55rem;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700}\r\n.grid-item:hover:not(.current){transform:scale(1.05)}\r\n.legend{padding-top:12px;border-top:1px solid var(--line);margin-top:4px}\r\n.legend-title{font-weight:700;font-size:.73rem;color:var(--ink);margin-bottom:8px}\r\n.legend-items{display:flex;flex-wrap:wrap;gap:10px}\r\n.legend-item{display:flex;align-items:center;gap:5px;font-size:.68rem;color:var(--mut)}\r\n.legend-color{width:14px;height:14px;border-radius:3px}\r\n.legend-color.unattempted{background:var(--navy)}\r\n.legend-color.attempted{background:#f7ce6b}\r\n.legend-color.correct{background:var(--green)}\r\n.legend-color.incorrect{background:var(--red)}\r\n.stat-row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px dashed var(--line)}\r\n.stat-row:last-child{border-bottom:none}\r\n.stat-label{color:var(--mut);font-size:.82rem}\r\n.stat-value{font-weight:700;font-size:.95rem;color:var(--ink)}\r\n.stat-value.correct{color:var(--green)}\r\n.stat-value.incorrect{color:var(--red)}\r\n.action-buttons{display:flex;flex-direction:column;gap:10px}\r\n.action-btn{width:100%;padding:12px;min-height:46px;border:none;border-radius:var(--r-md);font-size:.85rem;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:7px;transition:all .3s;font-family:'DM Sans',sans-serif}\r\n.action-btn.submit{background:linear-gradient(135deg,var(--green) 0%,var(--green-d) 100%);color:#fff;box-shadow:var(--sh-md)}\r\n.action-btn.submit:hover{transform:translateY(-2px);box-shadow:var(--sh-lg)}\r\n.action-btn.reset{background:#F8FAFC;color:var(--mut);border:2px solid var(--line)}\r\n.action-btn.reset:hover{border-color:var(--red);color:var(--red)}\r\n\r\n\/* ---------- TOAST & MODAL ---------- *\/\r\n.warning-toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%);background:var(--red);color:#fff;padding:12px 24px;border-radius:var(--r-md);font-weight:600;box-shadow:var(--sh-lg);z-index:10000;display:none;animation:gpUp .3s ease;font-size:.88rem}\r\n.warning-toast.show{display:flex;align-items:center;gap:8px}\r\n.warning-toast.success{background:var(--green)}\r\n@keyframes gpUp{from{opacity:0;transform:translateX(-50%) translateY(20px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}\r\n.result-modal{position:fixed;inset:0;background:rgba(9,20,45,.72);display:none;justify-content:center;align-items:center;z-index:10000;padding:20px}\r\n.result-modal.show{display:flex}\r\n.result-content{background:#fff;padding:32px;border-radius:var(--r-lg);text-align:center;max-width:440px;width:100%;box-shadow:var(--sh-lg);animation:gpModal .3s ease;max-height:90vh;overflow-y:auto}\r\n@keyframes gpModal{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}\r\n.result-icon{font-size:50px;margin-bottom:16px}\r\n.result-title{font-family:'Crimson Pro',serif;font-size:1.5rem;font-weight:600;color:var(--ink);margin-bottom:8px}\r\n.result-message{color:var(--mut);margin-bottom:20px;font-size:.9rem}\r\n.result-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:20px}\r\n.result-stat{background:#F8FAFC;padding:12px;border-radius:var(--r-md)}\r\n.result-stat-value{font-family:'Crimson Pro',serif;font-size:1.4rem;font-weight:600;color:var(--navy)}\r\n.result-stat-label{font-size:.72rem;color:var(--mut)}\r\n.result-buttons{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}\r\n.result-btn{padding:10px 20px;border:none;border-radius:var(--r-md);font-weight:700;cursor:pointer;transition:all .3s;display:flex;align-items:center;gap:6px;font-size:.82rem;font-family:'DM Sans',sans-serif}\r\n.result-btn.primary{background:linear-gradient(135deg,var(--navy) 0%,var(--navy-d) 100%);color:#fff}\r\n.result-btn.secondary{background:#F8FAFC;color:var(--mut)}\r\n.result-btn.weak{background:linear-gradient(135deg,var(--red) 0%,var(--red-d) 100%);color:#fff}\r\n.result-btn:hover{transform:translateY(-2px)}\r\n\r\n\/* =====================================================\r\n   TAB 2 \u2014 MY PERFORMANCE (AI COACH)\r\n===================================================== *\/\r\n.ai-wrap{padding:6px 28px 40px;max-width:1080px;margin:0 auto}\r\n.an-card{padding:22px 22px}\r\n.bar-row{display:grid;grid-template-columns:34px minmax(190px,1.5fr) 2.3fr auto;align-items:center;gap:12px;padding:6px 0}\r\n.bar-row+.bar-row{border-top:1px dashed #eef1f6}\r\n.bar-rank{font-family:'Crimson Pro',serif;color:var(--mut);font-size:.9rem;text-align:right}\r\n.bar-name{font-size:.86rem;font-weight:500}\r\n.bar-track{background:#eef1f6;border-radius:8px;height:20px;overflow:hidden}\r\n.bar-fill{height:100%;border-radius:8px;transition:width .8s ease}\r\n.bar-val{font-weight:700;font-size:.92rem;min-width:64px;text-align:right}\r\n.tbl-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:14px;background:#fff}\r\n.ai-hero{display:grid;grid-template-columns:280px 1fr;gap:18px;align-items:stretch}\r\n.ai-ring-card{background:linear-gradient(150deg,var(--navy-ink) 0%,var(--navy-d) 70%,#2f5fe0 100%);border-radius:var(--r-lg);padding:26px 20px;color:#fff;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:var(--sh-md)}\r\n.ai-ring{position:relative;width:150px;height:150px}\r\n.ai-ring svg{transform:rotate(-90deg)}\r\n.ai-ring .bg{fill:none;stroke:rgba(255,255,255,.14);stroke-width:11}\r\n.ai-ring .fg{fill:none;stroke:var(--gold-l);stroke-width:11;stroke-linecap:round;transition:stroke-dashoffset 1s ease}\r\n.ai-ring-txt{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}\r\n.ai-ring-txt .n{font-family:'Crimson Pro',serif;font-size:2.5rem;font-weight:600;color:var(--gold-l);line-height:1}\r\n.ai-ring-txt .l{font-size:.62rem;letter-spacing:.12em;text-transform:uppercase;color:#bfdbfe;margin-top:4px}\r\n.ai-verdict{margin-top:14px;font-size:.86rem;color:#dbeafe;line-height:1.5}\r\n.ai-verdict b{color:#fff}\r\n.ai-coach-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:22px;box-shadow:var(--sh-sm)}\r\n.ai-coach-card h3{font-size:.95rem;color:var(--navy-ink);display:flex;align-items:center;gap:8px;margin-bottom:12px}\r\n.ai-coach-card h3 i{color:var(--gold)}\r\n.ai-reco{display:flex;gap:12px;padding:11px 0;border-bottom:1px dashed var(--line);align-items:flex-start}\r\n.ai-reco:last-child{border-bottom:none}\r\n.ai-reco .ic{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:.8rem;flex-shrink:0;margin-top:2px}\r\n.ai-reco .ic.hot{background:var(--red-bg);color:var(--red-d)}\r\n.ai-reco .ic.warm{background:#fef7e6;color:var(--amber-d)}\r\n.ai-reco .ic.cool{background:#eff6ff;color:var(--navy)}\r\n.ai-reco .ic.good{background:var(--green-bg);color:var(--green-d)}\r\n.ai-reco p{font-size:.87rem;color:#37414f}\r\n.ai-reco p b{color:var(--navy-ink)}\r\n.ai-reco .go{margin-left:auto;flex-shrink:0;background:#EFF6FF;color:var(--navy-d);border:1px solid #d4e2fb;border-radius:8px;padding:6px 12px;font-size:.72rem;font-weight:700;cursor:pointer;transition:all .25s;font-family:'DM Sans',sans-serif;white-space:nowrap}\r\n.ai-reco .go:hover{background:var(--navy);color:#fff}\r\n\r\n.ai-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-top:18px}\r\n.ai-kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);padding:14px 16px;box-shadow:var(--sh-sm)}\r\n.ai-kpi .n{font-family:'Crimson Pro',serif;font-size:1.6rem;font-weight:600;color:var(--navy-d)}\r\n.ai-kpi .n.g{color:var(--green-d)} .ai-kpi .n.r{color:var(--red-d)} .ai-kpi .n.a{color:var(--amber-d)}\r\n.ai-kpi .l{font-size:.68rem;letter-spacing:.05em;text-transform:uppercase;color:var(--mut);margin-top:2px}\r\n\r\ntable.perf{border-collapse:collapse;width:100%;font-size:.82rem;min-width:760px}\r\ntable.perf th,table.perf td{padding:10px 10px;border-bottom:1px solid #eef1f6;text-align:center}\r\ntable.perf thead th{background:var(--navy);color:#fff;font-weight:600;font-size:.72rem}\r\ntable.perf th:first-child,table.perf td:first-child{text-align:left;padding-left:14px}\r\ntable.perf td:first-child{font-weight:500;background:#fbfcfe;white-space:nowrap}\r\n.mini-track{background:#eef1f6;border-radius:6px;height:9px;overflow:hidden;min-width:80px}\r\n.mini-fill{height:100%;border-radius:6px}\r\n.tag{display:inline-block;font-size:.66rem;font-weight:700;padding:3px 9px;border-radius:20px;text-transform:uppercase;letter-spacing:.03em}\r\n.tag.hot{background:var(--red-bg);color:var(--red-d)}\r\n.tag.warm{background:#fef7e6;color:var(--amber-d)}\r\n.tag.ok{background:#eff6ff;color:var(--navy-d)}\r\n.tag.good{background:var(--green-bg);color:var(--green-d)}\r\n.tag.na{background:#f1f5f9;color:var(--faint)}\r\n.mini-go{background:none;border:1px solid var(--line);border-radius:8px;padding:5px 10px;font-size:.7rem;font-weight:700;color:var(--navy-d);cursor:pointer;transition:all .25s;font-family:'DM Sans',sans-serif}\r\n.mini-go:hover{background:var(--navy);color:#fff;border-color:var(--navy)}\r\n\r\n.rev-item{display:flex;align-items:center;gap:10px;background:#F8FAFC;border-left:3px solid var(--amber);border-radius:var(--r-sm);padding:10px 12px;margin-bottom:8px;font-size:.79rem;cursor:pointer;transition:all .25s}\r\n.rev-item:hover{background:#fef7e6;transform:translateX(3px)}\r\n.rev-item .q-num{font-weight:700;color:var(--amber-d);flex-shrink:0}\r\n.rev-item .q-text{flex:1;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\r\n.rev-item .days{background:var(--amber);color:#fff;padding:2px 8px;border-radius:20px;font-size:.64rem;font-weight:700;white-space:nowrap}\r\n.ai-empty{text-align:center;padding:34px 20px;color:var(--mut)}\r\n.ai-empty i{font-size:2rem;color:var(--gold);margin-bottom:12px;display:block}\r\n.ai-empty .big{font-family:'Crimson Pro',serif;font-size:1.2rem;color:var(--navy-ink);margin-bottom:6px}\r\n.ai-empty p{font-size:.87rem;max-width:52ch;margin:0 auto}\r\n.ai-two{display:grid;grid-template-columns:1fr 1fr;gap:18px}\r\n\r\n\/* ---------- RESPONSIVE ---------- *\/\r\n@media(max-width:1024px){.quiz-container{grid-template-columns:minmax(0,1fr) 270px;gap:14px}}\r\n@media(max-width:900px){\r\n  \/* MOBILE: question first, everything else stacks below *\/\r\n  .quiz-container{grid-template-columns:1fr;padding:0 12px 12px;gap:14px}\r\n  .filter-bar{padding:12px 12px 0}\r\n  .filter-list{flex-wrap:nowrap;overflow-x:auto;padding-bottom:6px;-webkit-overflow-scrolling:touch}\r\n  .question-panel{order:1}\r\n  .dashboard-sidebar{order:2}\r\n  .gp-head-top{flex-direction:column;gap:12px}\r\n  .gp-stats{width:100%;flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}\r\n  .gp-stat{min-width:84px;padding:7px 12px;flex:0 0 auto}\r\n  .gp-stat .n{font-size:1.2rem}\r\n  .gp-tabs{overflow-x:auto;flex-wrap:nowrap;-webkit-overflow-scrolling:touch}\r\n  .gp-tab{flex:0 0 auto;white-space:nowrap}\r\n  .mode-selector{flex-direction:column;align-items:stretch;padding:10px 12px}\r\n  .mode-tabs{overflow-x:auto;flex-wrap:nowrap;padding-bottom:4px;-webkit-overflow-scrolling:touch}\r\n  .mode-tab{flex:0 0 auto;white-space:nowrap}\r\n  .session-info{justify-content:center}\r\n  \/* navigator becomes a horizontal strip *\/\r\n  .question-grid{display:flex;flex-wrap:nowrap;overflow-x:auto;max-height:none;padding-bottom:6px;gap:7px;-webkit-overflow-scrolling:touch}\r\n  .grid-item{flex:0 0 40px;height:40px;aspect-ratio:auto}\r\n  .weak-question-list{max-height:150px}\r\n  .ai-hero{grid-template-columns:1fr}\r\n  .ai-two{grid-template-columns:1fr}\r\n}\r\n@media(max-width:600px){\r\n  .gp-header{padding:18px 14px 0}\r\n  .gp-brand h1{font-size:1.28rem}\r\n  .gp-brand p{font-size:.78rem}\r\n  .gp-tabs{overflow-x:auto;flex-wrap:nowrap;-webkit-overflow-scrolling:touch}\r\n  .gp-tab{padding:9px 13px;font-size:.75rem;flex:0 0 auto;white-space:nowrap}\r\n  .ai-wrap{padding:6px 12px 30px}\r\n  .question-header{padding:11px 14px}\r\n  .question-number{font-size:.94rem}\r\n  .question-body{padding:14px}\r\n  .question-text{font-size:1.06rem;padding:15px 16px;line-height:1.68}\r\n  .q-stmt{margin-left:6px;grid-template-columns:26px 1fr}\r\n  .option-item{padding:11px 12px;gap:9px}\r\n  .option-letter{min-width:30px;font-size:1.02rem}\r\n  .option-text{font-size:1.02rem}\r\n  .option-item:hover:not(.disabled){transform:none}\r\n  .question-nav{flex-wrap:wrap;padding:12px;gap:9px}\r\n  .nav-btn{padding:11px 16px;font-size:.8rem;flex:1;justify-content:center}\r\n  .nav-btn.check{order:-1;width:100%;max-width:none;flex-basis:100%}\r\n  .progress-combo{grid-template-columns:auto 1fr;gap:10px}\r\n  .result-stats{grid-template-columns:repeat(3,1fr);gap:7px}\r\n  .result-content{padding:22px}\r\n  .result-buttons{flex-direction:column}\r\n  .bar-row{grid-template-columns:28px 1fr;row-gap:4px}\r\n  .bar-track{grid-column:1\/-1}\r\n  .bar-name,.bar-val{grid-column:2;text-align:left}\r\n  .sec-head{flex-wrap:wrap;gap:6px}\r\n  .sec-head .hint{margin-left:0;flex-basis:100%}\r\n  .sec-head h2{font-size:1rem}\r\n  .ai-ring{transform:scale(.85);margin:-8px}\r\n  .ai-ring-txt .n{font-size:2.1rem}\r\n  .ai-kpis{grid-template-columns:repeat(2,1fr)}\r\n  .ai-kpi .n{font-size:1.3rem}\r\n  .ai-reco{flex-wrap:wrap}\r\n  .ai-reco .go{margin-left:42px}\r\n  .warning-toast{width:calc(100% - 32px);justify-content:center;font-size:.8rem}\r\n  .gp-stat{min-width:76px}\r\n}\r\n\/* very small phones *\/\r\n@media(max-width:380px){\r\n  .gp-header{padding:14px 10px 0}\r\n  .gp-tab{padding:8px 10px;font-size:.7rem}\r\n  .mode-tab{padding:8px 11px;font-size:.73rem}\r\n  .question-text{font-size:1rem;padding:12px}\r\n  .option-text,.option-letter{font-size:.97rem}\r\n  .ai-wrap{padding:6px 8px 24px}\r\n  .quiz-container{padding:0 8px 8px}\r\n  .filter-bar{padding:10px 8px 0}\r\n}\r\n<\/style>\r\n\r\n<div class=\"cwq-portal\" id=\"quizWrapper\">\r\n    <!-- Warning Toast -->\r\n    <div class=\"warning-toast\" id=\"warningToast\">\r\n        <span class=\"ic\">\u26a0\ufe0f<\/span>\r\n        <span id=\"toastMessage\">Message<\/span>\r\n    <\/div>\r\n\r\n    <!-- Result Modal -->\r\n    <div class=\"result-modal\" id=\"resultModal\">\r\n        <div class=\"result-content\">\r\n            <div class=\"result-icon\" id=\"resultIcon\">\ud83c\udf89<\/div>\r\n            <h2 class=\"result-title\" id=\"resultTitle\">Great Job!<\/h2>\r\n            <p class=\"result-message\" id=\"resultMessage\">You have completed the quiz.<\/p>\r\n            <div class=\"result-stats\">\r\n                <div class=\"result-stat\">\r\n                    <div class=\"result-stat-value\" id=\"resultCorrect\">0<\/div>\r\n                    <div class=\"result-stat-label\">Correct<\/div>\r\n                <\/div>\r\n                <div class=\"result-stat\">\r\n                    <div class=\"result-stat-value\" id=\"resultIncorrect\">0<\/div>\r\n                    <div class=\"result-stat-label\">Incorrect<\/div>\r\n                <\/div>\r\n                <div class=\"result-stat\">\r\n                    <div class=\"result-stat-value\" id=\"resultScore\">0%<\/div>\r\n                    <div class=\"result-stat-label\">Score<\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"result-buttons\">\r\n                <button class=\"result-btn secondary\" id=\"reviewBtn\"><span class=\"ic\">\ud83d\udc41<\/span> Review<\/button>\r\n                <button class=\"result-btn weak\" id=\"practiceWeakBtn\" style=\"display:none;\"><span class=\"ic\">\u26a0\ufe0f<\/span> Practice Weak<\/button>\r\n                <button class=\"result-btn primary\" id=\"retryBtn\"><span class=\"ic\">\u21bb<\/span> Try Again<\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- ================= HEADER ================= -->\r\n    <header class=\"gp-header\">\r\n        <div class=\"gp-head-top\">\r\n            <div class=\"gp-brand\">\r\n                <div class=\"eyebrow\" id=\"topicEyebrow\">CSS ADDA \u00b7 PromotionExams.com<\/div>\r\n                <h1 id=\"topicName\">Topic Name<\/h1>\r\n                <p>Chapter-wise MCQs \u00b7 Smart Practice, Weak-Area Drills &amp; AI Coach<\/p>\r\n            <\/div>\r\n            <div class=\"gp-stats\">\r\n                <div class=\"gp-stat\"><div class=\"n\" id=\"hdrTotalQ\">0<\/div><div class=\"l\">MCQs<\/div><\/div>\r\n                <div class=\"gp-stat\"><div class=\"n\" id=\"hdrChapters\">0<\/div><div class=\"l\">Chapters<\/div><\/div>\r\n                <div class=\"gp-stat\"><div class=\"n\" id=\"hdrMastered\">0%<\/div><div class=\"l\">Mastered<\/div><\/div>\r\n                <div class=\"gp-stat clickable\" id=\"weakBadgeHeader\" style=\"display:none;\"><div class=\"n\" id=\"weakCountHeader\">0<\/div><div class=\"l\">Weak Areas<\/div><\/div>\r\n                <div class=\"gp-stat\"><div class=\"n\" id=\"hdrReadiness\">\u2014<\/div><div class=\"l\">Readiness<\/div><\/div>\r\n            <\/div>\r\n        <\/div>\r\n        <nav class=\"gp-tabs\">\r\n            <button class=\"gp-tab active\" data-view=\"practice\"><span class=\"ic\">\u270d\ufe0f<\/span> Practice Quiz<\/button>\r\n            <button class=\"gp-tab\" data-view=\"performance\"><span class=\"ic\">\ud83e\udde0<\/span> My Performance <span class=\"pill\" id=\"perfPill\" style=\"display:none;\">!<\/span><\/button>\r\n        <\/nav>\r\n    <\/header>\r\n\r\n    <!-- ================= VIEW 1 : PRACTICE QUIZ ================= -->\r\n    <div class=\"gp-view active\" id=\"view-practice\">\r\n\r\n    <!-- Mode Selector -->\r\n    <div class=\"mode-selector\">\r\n        <div class=\"mode-tabs\">\r\n            <button class=\"mode-tab active\" data-mode=\"all\" id=\"modeAll\">\r\n                <span class=\"ic\">\ud83d\udccb<\/span> All Questions <span class=\"badge\" id=\"allCount\">0<\/span>\r\n            <\/button>\r\n            <button class=\"mode-tab\" data-mode=\"chapter\" id=\"modeChapter\">\r\n                <span class=\"ic\">\ud83d\udcda<\/span> By Chapter\r\n            <\/button>\r\n            <button class=\"mode-tab weak-mode\" data-mode=\"weak\" id=\"modeWeak\">\r\n                <span class=\"ic\">\u26a0\ufe0f<\/span> Weak Areas <span class=\"badge\" id=\"weakModeCount\">0<\/span>\r\n            <\/button>\r\n        <\/div>\r\n        <div class=\"session-info\" id=\"sessionInfo\" style=\"display:none;\">\r\n            <span class=\"ic\">\ud83d\udd58<\/span>\r\n            <span id=\"sessionText\">Last session: Q5<\/span>\r\n            <button class=\"resume-btn\" id=\"resumeBtn\"><span class=\"ic\">\u25b6<\/span> Resume<\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- FILTER BAR (before the MCQ content) -->\r\n    <div class=\"filter-bar\">\r\n        <div class=\"filter-bar-row\">\r\n            <div class=\"quiz-card\" id=\"chapterFilterCard\">\r\n                <div class=\"quiz-card-header light\"><h3><span class=\"ic\">\ud83d\udcda<\/span> Filter by Chapter<\/h3><\/div>\r\n                <div class=\"quiz-card-body\" style=\"padding:10px 14px\"><div class=\"filter-list\" id=\"chapterList\"><\/div><\/div>\r\n            <\/div>\r\n            <div class=\"quiz-card weak-areas-card\" id=\"weakAreasCard\" style=\"display:none;\">\r\n                <div class=\"quiz-card-header\"><h3><span class=\"ic\">\u26a0\ufe0f<\/span> Weak Areas<\/h3><\/div>\r\n                <div class=\"quiz-card-body\" style=\"padding:10px 14px\">\r\n                    <div class=\"weak-question-list\" id=\"weakQuestionList\"><\/div>\r\n                    <button class=\"practice-weak-btn\" id=\"practiceWeakAreasBtn\"><span class=\"ic\">\u21bb<\/span> Practice All Weak Areas<\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- Main Container -->\r\n    <div class=\"quiz-container\">\r\n        <!-- Question Panel (primary) -->\r\n        <main class=\"question-panel\">\r\n            <div class=\"question-header\">\r\n                <span class=\"question-number\" id=\"questionNumber\">Question 1 of 20<\/span>\r\n                <div class=\"question-meta\">\r\n                    <div class=\"meta-badge chapter\"><span class=\"ic\">\ud83d\udcd6<\/span> <span id=\"currentQuestionChapter\">Chapter 1<\/span><\/div>\r\n                    <div class=\"meta-badge weak\" id=\"weakBadge\" style=\"display:none;\"><span class=\"ic\">\u26a0\ufe0f<\/span> <span>Weak<\/span><\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"question-body\">\r\n                <div class=\"question-text\" id=\"questionText\">Loading question...<\/div>\r\n                <div class=\"options-list\" id=\"optionsList\"><\/div>\r\n                <div class=\"explanation-box\" id=\"explanationBox\">\r\n                    <div class=\"explanation-title\"><span class=\"ic\">\ud83d\udca1<\/span> Explanation<\/div>\r\n                    <p class=\"explanation-text\" id=\"explanationText\"><\/p>\r\n                <\/div>\r\n                <div class=\"mastery-indicator\" id=\"masteryIndicator\">\r\n                    <span class=\"mastery-label\"><span class=\"ic\">\u2b50<\/span> Mastery:<\/span>\r\n                    <div class=\"mastery-stars\" id=\"masteryStars\">\r\n                        <i>\u2605<\/i><i>\u2605<\/i><i>\u2605<\/i><i>\u2605<\/i><i>\u2605<\/i>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class=\"question-nav\">\r\n                    <button class=\"nav-btn prev\" id=\"prevBtn\"><span class=\"ic\">\u2190<\/span> Previous<\/button>\r\n                    <button class=\"nav-btn check\" id=\"checkBtn\"><span class=\"ic\">\u2713<\/span> Check Answer<\/button>\r\n                    <button class=\"nav-btn next\" id=\"nextBtn\">Next <span class=\"ic\">\u2192<\/span><\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/main>\r\n\r\n        <!-- Right Rail: navigator \u2192 progress \u2192 actions -->\r\n        <aside class=\"dashboard-sidebar\">\r\n            <div class=\"quiz-card\">\r\n                <div class=\"quiz-card-header light\"><h3><span class=\"ic\">\ud83d\uddc2\ufe0f<\/span> Question Navigator<\/h3><\/div>\r\n                <div class=\"quiz-card-body\">\r\n                    <div class=\"question-grid\" id=\"questionGrid\"><\/div>\r\n                    <div class=\"legend\">\r\n                        <div class=\"legend-items\">\r\n                            <div class=\"legend-item\"><div class=\"legend-color unattempted\"><\/div><span>New<\/span><\/div>\r\n                            <div class=\"legend-item\"><div class=\"legend-color attempted\"><\/div><span>Seen<\/span><\/div>\r\n                            <div class=\"legend-item\"><div class=\"legend-color correct\"><\/div><span>Correct<\/span><\/div>\r\n                            <div class=\"legend-item\"><div class=\"legend-color incorrect\"><\/div><span>Incorrect<\/span><\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"quiz-card\">\r\n                <div class=\"quiz-card-header\"><h3><span class=\"ic\">\ud83c\udfc6<\/span> Progress &amp; Session<\/h3><\/div>\r\n                <div class=\"quiz-card-body\">\r\n                    <div class=\"progress-combo\">\r\n                        <div class=\"progress-ring-container\">\r\n                            <div class=\"progress-ring\">\r\n                                <svg width=\"100\" height=\"100\">\r\n                                    <circle class=\"progress-ring-bg\" cx=\"50\" cy=\"50\" r=\"42\"><\/circle>\r\n                                    <circle class=\"progress-ring-fill\" cx=\"50\" cy=\"50\" r=\"42\" stroke-dasharray=\"264\" stroke-dashoffset=\"264\" id=\"progressRingFill\"><\/circle>\r\n                                <\/svg>\r\n                                <div class=\"progress-ring-text\">\r\n                                    <span class=\"progress-ring-percentage\" id=\"progressPercentage\">0%<\/span>\r\n                                    <span class=\"progress-ring-label\">Mastered<\/span>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <div class=\"stat-col\">\r\n                            <div class=\"stat-row\"><span class=\"stat-label\">Questions<\/span><span class=\"stat-value\" id=\"totalQuestions\">0<\/span><\/div>\r\n                            <div class=\"stat-row\"><span class=\"stat-label\">Attempted<\/span><span class=\"stat-value\" id=\"attemptedCount\">0<\/span><\/div>\r\n                            <div class=\"stat-row\"><span class=\"stat-label\">Correct<\/span><span class=\"stat-value correct\" id=\"correctCount\">0<\/span><\/div>\r\n                            <div class=\"stat-row\"><span class=\"stat-label\">Incorrect<\/span><span class=\"stat-value incorrect\" id=\"incorrectCount\">0<\/span><\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class=\"progress-stats-mini\" style=\"margin-top:10px\">\r\n                        <div class=\"progress-stat-mini\"><div class=\"value correct\" id=\"totalCorrectProgress\">0<\/div><div class=\"label\">Lifetime Correct<\/div><\/div>\r\n                        <div class=\"progress-stat-mini\"><div class=\"value incorrect\" id=\"totalWeakProgress\">0<\/div><div class=\"label\">Weak Areas<\/div><\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"action-buttons\">\r\n                <button class=\"action-btn submit\" id=\"submitBtn\"><span class=\"ic\">\ud83d\udce4<\/span> Submit &amp; View Results<\/button>\r\n                <button class=\"action-btn reset\" id=\"resetBtn\"><span class=\"ic\">\u21ba<\/span> Reset Session<\/button>\r\n            <\/div>\r\n        <\/aside>\r\n    <\/div>\r\n    <\/div><!-- \/view-practice -->\r\n\r\n    <!-- ================= VIEW 2 : MY PERFORMANCE (AI COACH) ================= -->\r\n    <div class=\"gp-view\" id=\"view-performance\">\r\n        <div class=\"ai-wrap\">\r\n            <div id=\"aiEmptyState\" class=\"an-card ai-empty\" style=\"display:none;margin-top:24px;\">\r\n                <span class=\"ic\" style=\"font-size:2rem\">\ud83e\udde0<\/span>\r\n                <div class=\"big\">Your AI coach is waiting for data<\/div>\r\n                <p>Attempt a few questions in the Practice tab. The coach will then compute your readiness score, detect weak chapters weighted by their share of the question bank, and build a personalised study plan.<\/p>\r\n            <\/div>\r\n\r\n            <div id=\"aiContent\">\r\n                <div class=\"sec-head\" style=\"margin-top:24px;\"><span class=\"num\">01<\/span><h2>Readiness \u2014 AI Assessment<\/h2><span class=\"hint\">weighted by chapter share of the bank<\/span><\/div>\r\n                <div class=\"ai-hero\">\r\n                    <div class=\"ai-ring-card\">\r\n                        <div class=\"ai-ring\">\r\n                            <svg width=\"150\" height=\"150\">\r\n                                <circle class=\"bg\" cx=\"75\" cy=\"75\" r=\"64\"><\/circle>\r\n                                <circle class=\"fg\" cx=\"75\" cy=\"75\" r=\"64\" stroke-dasharray=\"402\" stroke-dashoffset=\"402\" id=\"aiRingFill\"><\/circle>\r\n                            <\/svg>\r\n                            <div class=\"ai-ring-txt\"><span class=\"n\" id=\"aiScore\">0<\/span><span class=\"l\">Readiness \/ 100<\/span><\/div>\r\n                        <\/div>\r\n                        <div class=\"ai-verdict\" id=\"aiVerdict\"><\/div>\r\n                    <\/div>\r\n                    <div class=\"ai-coach-card\">\r\n                        <h3><span class=\"ic\">\ud83e\ude84<\/span> Smart Study Plan \u2014 What to do next<\/h3>\r\n                        <div id=\"aiRecoList\"><\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class=\"ai-kpis\" id=\"aiKpis\"><\/div>\r\n\r\n                <div class=\"sec-head\"><span class=\"num\">02<\/span><h2>Chapter Performance vs Chapter Weight<\/h2><span class=\"hint\">priority = high weight \u00d7 low accuracy<\/span><\/div>\r\n                <div class=\"tbl-scroll\"><table class=\"perf\">\r\n                    <thead><tr><th>Chapter<\/th><th>Weight<\/th><th>Coverage<\/th><th>Accuracy<\/th><th>Status<\/th><th>Action<\/th><\/tr><\/thead>\r\n                    <tbody id=\"perfTableBody\"><\/tbody>\r\n                <\/table><\/div>\r\n\r\n                <div class=\"ai-two\" style=\"margin-top:34px;\">\r\n                    <div>\r\n                        <div class=\"sec-head\" style=\"margin-top:0;\"><span class=\"num\">03<\/span><h2>Revision Queue<\/h2><span class=\"hint\">spaced repetition<\/span><\/div>\r\n                        <div class=\"an-card\" id=\"revisionQueue\"><\/div>\r\n                    <\/div>\r\n                    <div>\r\n                        <div class=\"sec-head\" style=\"margin-top:0;\"><span class=\"num\">04<\/span><h2>Mastery Distribution<\/h2><\/div>\r\n                        <div class=\"an-card\" id=\"masteryDist\"><\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div><!-- \/view-performance -->\r\n<\/div>\r\n<script>\r\n\/\/ ==========================================\r\n\/\/ QUIZ CONFIGURATION  \u2190 EDIT PER TOPIC\r\n\/\/ ==========================================\r\nconst quizConfig = {\r\n    quizId: 'TOPIC-chapterwise-quiz',       \/\/ \u2190 unique per topic (localStorage key)\r\n    topic: 'Topic Name',                     \/\/ \u2190 shown in header h1\r\n    paper: 'Paper 2',                        \/\/ \u2190 shown in header eyebrow\r\n    wpAjaxUrl: '\/wp-admin\/admin-ajax.php',\r\n    useWordPressSync: false,\r\n    masteryThreshold: 3,\r\n    weakThreshold: 1,\r\n    revisionGapDays: 7\r\n};\r\n\r\n\/\/ ==========================================\r\n\/\/ QUESTIONS DATA  \u2190 PASTE YOUR QUESTION BANK HERE\r\n\/\/ ------------------------------------------\r\n\/\/ Required fields: id (unique number), chapter (string),\r\n\/\/ question (string, <br> allowed for statements),\r\n\/\/ options (array of 4 strings), correct (0-indexed),\r\n\/\/ explanation (HTML string).\r\n\/\/ NO 'year' field \u2014 this template is chapter-wise only.\r\n\/\/ The two questions below are SAMPLES \u2014 delete them and\r\n\/\/ paste your real bank.\r\n\/\/ ==========================================\r\nconst allQuestions = [\r\n \r\n  {\r\n    id: 301,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Consider the following statements regarding commencement of qualifying service under the CCS (Pension) Rules, 2021:\\n1. Qualifying service commences from the date the Government servant takes charge of the post to which he is first appointed, whether substantively, in an officiating or in a temporary capacity.\\n2. Officiating or temporary service is reckoned from that date only if it is followed without interruption by substantive appointment in the same or another service or post.\\n3. Service rendered before attaining the age of eighteen years shall not count in any circumstance whatsoever.\\nWhich of the statements given above is\/are not correct?\",\r\n    options: [\"3 only\", \"1 and 2 only\", \"2 only\", \"1, 2 and 3\"],\r\n    correct: 0,\r\n    explanation: `Asks which is NOT correct. 1 \u2713 and 2 \u2713 reproduce Rule 11 and its first proviso. 3 is NOT correct \u2014 the second proviso to Rule 11 carves out ONE exception to the pre-eighteen bar: the counting of military service for civil pension under Rule 20. The words \"in any circumstance whatsoever\" over-state the rule and make statement 3 wrong. Hence \"3 only.\"`\r\n  },\r\n  {\r\n    id: 302,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Mr. 'E' held a temporary post from 01.03.2000, which was followed without interruption by a substantive appointment. His date of birth is 01.09.1982 (i.e., he attained eighteen years of age on 01.09.2000). From which date shall his qualifying service be reckoned?\",\r\n    options: [\"01.03.2000\", \"01.09.2000\", \"The date of his substantive appointment\", \"The date of his confirmation\"],\r\n    correct: 1,\r\n    explanation: `Under Rule 11 the spell commences from the date of taking charge of the first post (01.03.2000), the temporary service being followed without interruption by substantive appointment (first proviso). BUT the second proviso bars service rendered before age eighteen. So the portion 01.03.2000\u201331.08.2000 does not count, and qualifying service is reckoned from 01.09.2000, the date he attained eighteen. Hence (b).`\r\n  },\r\n  {\r\n    id: 303,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Consider the following statements regarding the conditions subject to which service qualifies under the CCS (Pension) Rules, 2021:\\n1. Service shall not qualify unless the Government servant's duties and pay are regulated by the Government, or under conditions determined by the Government.\\n2. 'Service' means service under the Government paid from the Consolidated Fund of India or a Local Fund administered by that Government.\\n3. Service in an establishment not having a non-contributory pension scheme is excluded, unless such service is treated as qualifying service by that Government.\\nWhich of the statements given above are correct?\",\r\n    options: [\"1 and 2 only\", \"2 and 3 only\", \"1 and 3 only\", \"1, 2 and 3\"],\r\n    correct: 3,\r\n    explanation: `All three reproduce Rule 12 and its Explanation. 1 \u2713 \u2014 the \"regulated by \/ under conditions determined by the Government\" test. 2 \u2713 \u2014 the Consolidated Fund \/ Local Fund limb. 3 \u2713 \u2014 the double-negative exclusion: service in an establishment NOT having a non-contributory pension scheme does not qualify, unless the Government treats it as qualifying. Hence \"1, 2 and 3.\"`\r\n  },\r\n  {\r\n    id: 304,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Mr. 'A', a State Government servant initially appointed to a pensionable State establishment on 01.07.2002, is permanently transferred to a Central post to which the CCS (Pension) Rules, 2021 apply. Consider the following:\\n1. His continuous State service (substantive, officiating or temporary) shall qualify.\\n2. The liability for pension and gratuity shall be borne by the Central Government.\\n3. The Central Government shall recover proportionate pension from the State Government.\\nWhich of the statements given above are correct?\",\r\n    options: [\"1 and 2 only\", \"1 and 3 only\", \"2 and 3 only\", \"1, 2 and 3\"],\r\n    correct: 0,\r\n    explanation: `Rule 13(1) \u2014 initial appointment to a pensionable State establishment on or before 31.12.2003 makes the continuous State service qualify (1 \u2713). Rule 13(3) \u2014 the liability for pension and gratuity is borne by the Central Government and NO recovery of proportionate pension is made from the State Government (2 \u2713, 3 \u2717). Hence \"1 and 2 only.\"`\r\n  },\r\n  {\r\n    id: 305,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Mr. 'B' rendered prior service in three organisations before joining the Central Government on a pensionable post. Which of the following prior service shall not count as qualifying service for pension?<\/br>\\n1. Service in an autonomous body (having a non-contributory pension scheme similar to these rules) whose pension liability was discharged in lump sum.<\/br>\\n2. Service in a nationalised bank.<\/br>\\n3. Service in a public sector undertaking.<\/br>\\nSelect the correct answer using the code given below:\",\r\n    options: [\"2 and 3 only\", \"1 only\", \"1 and 2 only\", \"1, 2 and 3\"],\r\n    correct: 0,\r\n    explanation: `Rule 14(3) is categorical: service in a public sector undertaking, INCLUDING a nationalised bank and a financial institution, before appointment in the Central Government shall NOT count. So 2 and 3 do not count. Item 1 (autonomous-body service satisfying the Rule 14(1) conditions, incl. lump-sum discharge) does count. Hence the non-counting service is \"2 and 3 only.\"`\r\n  },\r\n  {\r\n    id: 306,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Under Rule 14 of the CCS (Pension) Rules, 2021, where the pension liability of an autonomous body is discharged by paying a lump sum, the lump-sum amount of pension shall be determined with reference to:\",\r\n    options: [\"The average emoluments of the last ten months of service\", \"The commutation table laid down in the CCS (Commutation of Pension) Rules, 1981\", \"The retirement gratuity table under Rule 45\", \"The notional pay in the parent department\"],\r\n    correct: 1,\r\n    explanation: `Rule 14(1)(c) requires the autonomous body to discharge the pension liability by paying in lump sum the amount of pension\/service gratuity and retirement gratuity; Rule 14(1)(d) then fixes the basis: the lump-sum amount of pension is determined with reference to the commutation table laid down in the CCS (Commutation of Pension) Rules, 1981. Hence (b).`\r\n  },\r\n  {\r\n    id: 307,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"A casual labourer was conferred 'temporary status' on 10.09.2002 under the Casual Labourers (Grant of Temporary Status and Regularisation) Scheme, 1993, and was later regularised in Government service. What portion of his temporary-status service shall count as qualifying service?\",\r\n    options: [\"The entire period of temporary status\", \"Fifty per cent of the temporary-status service\", \"One-fourth of the temporary-status service\", \"Nil, unless the Government passes a special order\"],\r\n    correct: 1,\r\n    explanation: `Rule 15 \u2014 fifty per cent of the service rendered in 'temporary status' counts, provided temporary status was conferred on or before 31.12.2003 under the 1993 Scheme and the servant was subsequently regularised. Conferral on 10.09.2002 satisfies the cutoff; only half of that period reckons. Hence (b).`\r\n  },\r\n  {\r\n    id: 308,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Which of the following periods shall count as qualifying service under the CCS (Pension) Rules, 2021?\\n1. Service as a Subordinate Accounts Service apprentice in the Indian Audit and Accounts Department.\\n2. Service on probation followed by confirmation in another post.\\n3. Service as an apprentice in the Central Public Works Department.\\nSelect the correct answer using the code given below:\",\r\n    options: [\"1 and 2 only\", \"2 and 3 only\", \"1 and 3 only\", \"1, 2 and 3\"],\r\n    correct: 0,\r\n    explanation: `Rule 17 \u2014 apprentice service does NOT count, EXCEPT a Subordinate Accounts Service apprentice in the Indian Audit and Accounts Department or the Defence Accounts Department; so 1 counts but 3 (CPWD apprentice) does not. Rule 16 \u2014 service on probation followed by confirmation in the same or another post counts (2 \u2713). Hence \"1 and 2 only.\"`\r\n  },\r\n  {\r\n    id: 309,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Mr. 'C' was initially engaged by the Government on a contract for a specified period and was subsequently appointed, without interruption of duty, to a temporary post on 10.11.2003 in an establishment to which these rules apply. His contract period will count as qualifying service under Rule 18 only if he has:\",\r\n    options: [\"Completed at least five years on contract\", \"Refunded to Government the Government contribution in the Contributory Provident Fund with interest thereon, per the option under the 1972 Rules\", \"Obtained the sanction of the Comptroller and Auditor-General of India\", \"Been confirmed in a substantive capacity before 31.12.2003\"],\r\n    correct: 1,\r\n    explanation: `Rule 18 requires (i) that the contract engagement was followed, on or before 31.12.2003, by appointment without interruption of duty; AND (ii) that, per the option under the CCS (Pension) Rules, 1972, the person REFUNDED to Government the Government contribution in the Contributory Provident Fund WITH INTEREST thereon. Only then does the contract period count. There is no five-year minimum or CAG-sanction requirement. Hence (b).`\r\n  },\r\n  {\r\n    id: 310,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Consider the following statements regarding counting of pre-retirement civil service of a re-employed Government servant under Rule 19:\\n1. The refund of gratuity may be made in monthly instalments not exceeding thirty-six.\\n2. The right to count the previous service as qualifying service revives as soon as fifty per cent of the amount has been refunded.\\n3. If the Government servant dies before the entire amount is refunded, the unrefunded gratuity shall be adjusted against the death gratuity payable to his family.\\nWhich of the statements given above is\/are not correct?\",\r\n    options: [\"2 only\", \"1 and 3 only\", \"2 and 3 only\", \"1 only\"],\r\n    correct: 0,\r\n    explanation: `Asks which is NOT correct. 1 \u2713 \u2014 Rule 19(3): refund in monthly instalments not exceeding thirty-six. 3 \u2713 \u2014 Rule 19(4): the unrefunded amount is adjusted against the death gratuity. 2 is NOT correct \u2014 Rule 19(3): the right to count previous service shall NOT revive UNLESS THE WHOLE amount has been refunded; a 50% refund does not revive it. Hence \"2 only.\"`\r\n  },\r\n  {\r\n    id: 311,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Consider the following statements regarding counting of military service rendered before civil employment under Rule 20:\\n1. Where a Government servant re-employed on or before 31.12.2003 opts to continue drawing his military pension, his previous military service shall count as qualifying service on refund of the retirement gratuity alone.\\n2. A person who joined military service after 31.12.2003 and is re-employed in a civil post shall be covered by the rules governing the National Pension System in that post.\\n3. An order allowing previous military service to count for civil pension shall be deemed to include condonation of interruption, if any, in the military service and between the military and civil services.\\nWhich of the statements given above are correct?\",\r\n    options: [\"2 and 3 only\", \"1 and 2 only\", \"1 and 3 only\", \"1, 2 and 3\"],\r\n    correct: 0,\r\n    explanation: `1 \u2717 \u2014 Explanation-2 to Rule 20: if the servant OPTED to continue his military pension or retain the discharge gratuity, his former military service shall NOT count at all (no partial-refund route). 2 \u2713 \u2014 Explanation-3: post-2003 military entrants re-employed in a civil post are covered by the NPS. 3 \u2713 \u2014 Rule 20(4): such an order is deemed to include condonation of interruption in the military service and between the military and civil services. Hence \"2 and 3 only.\"`\r\n  },\r\n  {\r\n    id: 312,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Consider the following statements regarding counting of extraordinary leave (EOL) under Rule 21:\\n1. All leave during service for which leave salary is payable counts as qualifying service.\\n2. Extraordinary leave granted on a medical certificate counts as qualifying service.\\n3. Extraordinary leave (other than on medical certificate) granted for prosecuting higher scientific and technical studies may be allowed to count.\\n4. Where no entry that the extraordinary leave shall not count has been made in the service book, the period of such leave shall, by default, be treated as non-qualifying service.\\nWhich of the statements given above is\/are not correct?\",\r\n    options: [\"4 only\", \"3 and 4 only\", \"1 and 4 only\", \"2 and 4 only\"],\r\n    correct: 0,\r\n    explanation: `Asks which is NOT correct. 1, 2 and 3 correctly state Rule 21 and its proviso. 4 is NOT correct \u2014 the Explanation to Rule 21 reverses the default: the non-qualifying entry, if not made at the time of grant, may be made later (but not later than six months before superannuation), and IF NO SUCH ENTRY is made at all, the period of extraordinary leave shall be TREATED AS QUALIFYING SERVICE. Silence favours the employee. Hence \"4 only.\"`\r\n  },\r\n  {\r\n    id: 313,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Under Rule 22 of the CCS (Pension) Rules, 2021, departmental training undergone before regular appointment counts as qualifying service where the appointment is to a Group 'C' post and the trainee was in receipt of pay, a stipend or a nominal allowance. In cases not so covered, whether the training period counts as qualifying service is:\",\r\n    options: [\"Automatically counted in every case\", \"To be decided by the Government by order\", \"Never counted in any case\", \"Counted only to the extent of the joining time permissible on transfer\"],\r\n    correct: 1,\r\n    explanation: `Rule 22(1) covers the Group 'C' departmental-training situation. Rule 22(2) provides that in cases NOT covered by sub-rule (1), the Government may, by order, decide whether the time spent under training immediately before appointment shall count as qualifying service. Hence (b).`\r\n  },\r\n  {\r\n    id: 314,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Consider the following statements regarding counting of periods of suspension under Rule 23:\\n1. Suspension pending inquiry counts as qualifying service where the servant is fully exonerated, or where only a minor penalty is imposed and the suspension is held to be wholly unjustified.\\n2. In cases not so covered, the period of suspension counts automatically unless the competent authority declares otherwise.\\n3. In every case of suspension the competent authority shall pass an order specifying the extent to which the suspension counts, and a definite entry shall be made in the service book.\\nWhich of the statements given above are correct?\",\r\n    options: [\"1 and 3 only\", \"1 and 2 only\", \"2 and 3 only\", \"1, 2 and 3\"],\r\n    correct: 0,\r\n    explanation: `1 \u2713 \u2014 Rule 23(1). 3 \u2713 \u2014 Rule 23(3): the competent authority must, in ALL cases, pass an order specifying the extent and make a definite service-book entry. 2 is wrong \u2014 Rule 23(2): in cases not covered, the suspension period shall NOT count UNLESS the competent authority expressly declares it shall count; the default is non-counting, the opposite of statement 2. Hence \"1 and 3 only.\"`\r\n  },\r\n  {\r\n    id: 315,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"A Government servant was dismissed from service and was subsequently reinstated on appeal. Consider the following statements:\\n1. Dismissal entails forfeiture of his past service.\\n2. On reinstatement on appeal, he is entitled to count his past service as qualifying service.\\n3. The period of interruption between the date of dismissal and the date of reinstatement shall count as qualifying service automatically on reinstatement.\\nWhich of the statements given above are correct?\",\r\n    options: [\"1 and 2 only\", \"2 and 3 only\", \"1 and 3 only\", \"1, 2 and 3\"],\r\n    correct: 0,\r\n    explanation: `1 \u2713 \u2014 Rule 24: dismissal or removal entails forfeiture of past service. 2 \u2713 \u2014 Rule 25(1): on reinstatement on appeal or review he may count his past service. 3 \u2717 \u2014 Rule 25(2): the interruption between dismissal and reinstatement, and any suspension period, shall NOT count UNLESS regularised as duty or leave by a specific order of the reinstating authority. Hence \"1 and 2 only.\"`\r\n  },\r\n  {\r\n    id: 316,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Consider the following statements regarding forfeiture of service on resignation under Rule 26:\\n1. Resignation, unless allowed to be withdrawn in the public interest by the appointing authority, entails forfeiture of past service.\\n2. A resignation submitted to take up, with proper permission, another appointment (whether temporary or permanent) under the Government where service qualifies, shall not entail forfeiture.\\n3. Where withdrawal of resignation is permitted, the deemed condonation of the interruption also causes the interruption period to count as qualifying service.\\n4. A resignation submitted for the purpose of Rule 35 or Rule 36 shall not entail forfeiture of past service under the Government.\\nWhich of the statements given above is\/are not correct?\",\r\n    options: [\"3 only\", \"1 and 3 only\", \"3 and 4 only\", \"2 only\"],\r\n    correct: 0,\r\n    explanation: `Asks which is NOT correct. 1 \u2713 (26(1)); 2 \u2713 (26(2)); 4 \u2713 (26(8), the absorption carve-out). 3 is NOT correct \u2014 Rule 26(7): the order allowing withdrawal is deemed to include condonation of the interruption, BUT the period of interruption itself shall NOT count as qualifying service. Hence \"3 only.\"`\r\n  },\r\n  {\r\n    id: 317,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"An appointing authority may permit a person to withdraw his resignation in the public interest. Which of the following is not among the conditions prescribed in Rule 26 for such withdrawal?\",\r\n    options: [\r\n      \"The resignation was tendered for compelling reasons not involving any reflection on his integrity, efficiency or conduct, and there is a material change in circumstances\",\r\n      \"The period of absence between the date the resignation became effective and the date of the withdrawal request is not more than ninety days\",\r\n      \"The post vacated on acceptance of the resignation, or any other comparable post, is available\",\r\n      \"The Government servant deposits a penalty equal to one month's pay before resuming duty\"\r\n    ],\r\n    correct: 3,\r\n    explanation: `Rule 26(5) lists the conditions: (i) resignation tendered for compelling reasons not reflecting on integrity\/efficiency\/conduct plus a material change in circumstances; (ii) conduct not improper in the interim; (iii) period of absence not more than ninety days; and (iv) the vacated or a comparable post is available. There is NO condition requiring deposit of a penalty equal to one month's pay \u2014 option (d) is fabricated.`\r\n  },\r\n  {\r\n    id: 318,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Which of the following interruptions in service does not entail forfeiture of past service under Rule 27?\\n1. Authorised leave of absence.\\n2. Joining time while on transfer from one post to another.\\n3. Unauthorised absence in continuation of authorised leave, after the post of the absentee has been filled substantively by another person.\\n4. Suspension immediately followed by reinstatement.\\nSelect the correct answer using the code given below:\",\r\n    options: [\"1, 2 and 4 only\", \"1, 2 and 3 only\", \"2, 3 and 4 only\", \"1, 2, 3 and 4\"],\r\n    correct: 0,\r\n    explanation: `Rule 27(1) protects (a) authorised leave, (e) joining time on transfer, and (c) suspension immediately followed by reinstatement \u2014 so 1, 2 and 4 do not cause forfeiture. Item 3 loses protection: Rule 27(1)(b) protects unauthorised absence in continuation of authorised leave ONLY so long as the post is NOT filled substantively; once it is filled, the interruption entails forfeiture. Hence \"1, 2 and 4 only.\"`\r\n  },\r\n  {\r\n    id: 319,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Consider the following statements regarding condonation of interruption in service under Rule 28:\\n1. In the absence of a contrary entry in the service book, an interruption between two spells of civil service is treated as automatically condoned, and the pre-interruption service is treated as qualifying service.\\n2. This automatic condonation applies even where the interruption is caused by resignation, dismissal, removal, or participation in a strike.\\n3. A decision not to condone an interruption may be taken only in exceptional and grave circumstances, and not without giving the Government servant a reasonable opportunity of being heard in person.\\nWhich of the statements given above is\/are not correct?\",\r\n    options: [\"2 only\", \"1 only\", \"2 and 3 only\", \"3 only\"],\r\n    correct: 0,\r\n    explanation: `Asks which is NOT correct. 1 \u2713 \u2014 Rule 28(1). 3 \u2713 \u2014 Rule 28(5) and (6). 2 is NOT correct \u2014 Rule 28(2): the automatic condonation does NOT apply to interruption caused by resignation, dismissal or removal from service, or participation in a strike. Hence \"2 only.\"`\r\n  },\r\n  {\r\n    id: 320,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Mr. 'D' is deputed on foreign service to the Asian Development Bank. Consider the following statements under Rule 29:\\n1. He may opt to pay the pension contributions in respect of his foreign service and count such service as qualifying for pension.\\n2. He may opt not to pay the pension contributions and not count such service as qualifying for pension.\\n3. Where he opts not to pay, any pension contributions already paid by him shall be refunded to him.\\nWhich of the statements given above are correct?\",\r\n    options: [\"1, 2 and 3\", \"1 and 2 only\", \"1 and 3 only\", \"2 only\"],\r\n    correct: 0,\r\n    explanation: `Rule 29 lets a servant deputed to the UN Secretariat\/UN bodies, IMF, IBRD, ADB, Commonwealth Secretariat or any other international organisation opt either (a) to pay pension contributions and count the foreign service, or (b) not to pay and not count it; the proviso requires that where he opts for (b), any pension contributions already paid shall be refunded. The ADB is expressly among the listed organisations. All three are correct. Hence \"1, 2 and 3.\"`\r\n  },\r\n  {\r\n    id: 321,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Consider the following statements regarding periodic verification of qualifying service under Rule 30:\\n1. Verification is carried out on each occasion after the Government servant has completed eighteen years of service and again on his being left with five years of service before the date of superannuation.\\n2. The qualifying service so determined is communicated to the Government servant in Format 4.\\n3. Once done, the verification shall not be reopened, even where a subsequent change in the rules governing qualifying service so necessitates.\\nWhich of the statements given above is\/are not correct?\",\r\n    options: [\"3 only\", \"1 only\", \"2 and 3 only\", \"1 and 2 only\"],\r\n    correct: 0,\r\n    explanation: `Asks which is NOT correct. 1 \u2713 \u2014 Rule 30(1): eighteen years of service, and again five years before superannuation. 2 \u2713 \u2014 Rule 30(1): communicated in Format 4. 3 is NOT correct \u2014 Rule 30(4): the verification is final and shall not be reopened EXCEPT when necessitated by a subsequent change in the rules and orders governing qualifying service. The exception is precisely what statement 3 denies. Hence \"3 only.\"`\r\n  },\r\n  {\r\n    id: 322,\r\n    year: 'Practice',\r\n    chapter: 'CH 3: Qualifying Service',\r\n    question: \"Which of the following shall count as qualifying service under Chapter III of the CCS (Pension) Rules, 2021?\\n1. Fifty per cent of the temporary-status service of a casual labourer conferred temporary status on or before 31.12.2003 and later regularised.\\n2. Joining time while on transfer from one post to another.\\n3. A period of unauthorised absence not covered by grant of leave and treated as 'dies non'.\\nSelect the correct answer using the code given below:\",\r\n    options: [\"1 and 2 only\", \"1 and 3 only\", \"2 and 3 only\", \"1, 2 and 3\"],\r\n    correct: 0,\r\n    explanation: `1 \u2713 \u2014 Rule 15: fifty per cent of temporary-status service counts. 2 \u2713 \u2014 Rule 27(1)(e): joining time on transfer is a protected exception; it does not interrupt\/forfeit and counts. 3 \u2717 \u2014 a period of unauthorised absence treated as 'dies non' is an interruption that does not count as qualifying service. Hence \"1 and 2 only.\"`\r\n  }\r\n];\r\n\r\n\/\/ ==========================================\r\n\/\/ STATE\r\n\/\/ ==========================================\r\nlet initDone = false;\r\nlet currentMode = 'all';\r\nlet currentFilter = null;\r\nlet filteredQuestions = [...allQuestions];\r\nlet currentQuestionIndex = 0;\r\nlet selectedOption = null;\r\nlet answerChecked = false;\r\nlet sessionStats = { attempted: 0, correct: 0, incorrect: 0 };\r\nlet sessionAnswers = {};\r\nlet progress = { questionStats: {}, weakAreas: [], lastQuestionId: null, lastMode: 'all', lastFilter: null, attemptLog: [] };\r\n\r\nconst $id = (x) => document.getElementById(x);\r\nconst CHAPTERS = [...new Set(allQuestions.map(q => q.chapter))];\r\nconst chShort = (c) => c.replace(\/^Ch (\\d+):.*$\/, 'Ch $1').replace('ANNEXURE\/Appendices', 'Annexures');\r\nconst chFull = (c) => { const m = c.match(\/^Ch \\d+: (.+)$\/); return m ? m[1] : c; };\r\n\r\n\/\/ ==========================================\r\n\/\/ PERSISTENCE (localStorage)\r\n\/\/ ==========================================\r\nfunction loadProgress() {\r\n    try {\r\n        const saved = localStorage.getItem('quiz_progress_' + quizConfig.quizId);\r\n        if (saved) {\r\n            const p = JSON.parse(saved);\r\n            progress = Object.assign(progress, p);\r\n            if (!progress.questionStats) progress.questionStats = {};\r\n            if (!Array.isArray(progress.weakAreas)) progress.weakAreas = [];\r\n            if (!Array.isArray(progress.attemptLog)) progress.attemptLog = [];\r\n        }\r\n    } catch (e) { console.warn('Progress load failed', e); }\r\n}\r\nfunction saveProgress() {\r\n    try {\r\n        if (progress.attemptLog.length > 500) progress.attemptLog = progress.attemptLog.slice(-500);\r\n        localStorage.setItem('quiz_progress_' + quizConfig.quizId, JSON.stringify(progress));\r\n    } catch (e) { console.warn('Progress save failed', e); }\r\n}\r\nfunction getQStat(qid) {\r\n    if (!progress.questionStats[qid]) progress.questionStats[qid] = { correct: 0, incorrect: 0, lastAttempt: null, lastCorrect: null };\r\n    return progress.questionStats[qid];\r\n}\r\n\r\n\/\/ ==========================================\r\n\/\/ TOAST\r\n\/\/ ==========================================\r\nlet toastTimer = null;\r\nfunction showToast(msg, type) {\r\n    const t = $id('warningToast');\r\n    $id('toastMessage').textContent = msg;\r\n    t.classList.toggle('success', type === 'success');\r\n    t.classList.add('show');\r\n    clearTimeout(toastTimer);\r\n    toastTimer = setTimeout(() => t.classList.remove('show'), 2600);\r\n}\r\n\r\n\/\/ ==========================================\r\n\/\/ TAB NAVIGATION\r\n\/\/ ==========================================\r\nfunction switchView(view) {\r\n    document.querySelectorAll('.cwq-portal .gp-tab').forEach(b => b.classList.toggle('active', b.dataset.view === view));\r\n    document.querySelectorAll('.cwq-portal .gp-view').forEach(v => v.classList.toggle('active', v.id === 'view-' + view));\r\n    if (view === 'performance') renderAI();\r\n}\r\n\r\n\/\/ ==========================================\r\n\/\/ MODE \/ FILTERS\r\n\/\/ ==========================================\r\nfunction setMode(mode, filter) {\r\n    currentMode = mode;\r\n    currentFilter = filter || null;\r\n    document.querySelectorAll('.cwq-portal .mode-tab').forEach(t => t.classList.toggle('active', t.dataset.mode === mode));\r\n    $id('chapterFilterCard').style.display = (mode === 'chapter') ? '' : 'none';\r\n    $id('weakAreasCard').style.display = (mode === 'weak') ? '' : 'none';\r\n    applyFilters();\r\n    progress.lastMode = mode; progress.lastFilter = currentFilter; saveProgress();\r\n}\r\nfunction applyFilters() {\r\n    if (currentMode === 'all') filteredQuestions = [...allQuestions];\r\n    else if (currentMode === 'chapter') filteredQuestions = currentFilter ? allQuestions.filter(q => q.chapter === currentFilter) : [...allQuestions];\r\n    else if (currentMode === 'weak') {\r\n        filteredQuestions = allQuestions.filter(q => progress.weakAreas.includes(q.id));\r\n        if (!filteredQuestions.length) { showToast('No weak areas yet \u2014 great going!', 'success'); filteredQuestions = [...allQuestions]; setMode('all'); return; }\r\n    }\r\n    currentQuestionIndex = 0;\r\n    sessionStats = { attempted: 0, correct: 0, incorrect: 0 };\r\n    sessionAnswers = {};\r\n    renderFilters(); renderGrid(); loadQuestion(); updateStats();\r\n}\r\nfunction renderFilters() {\r\n    $id('chapterList').innerHTML = CHAPTERS.map(c => {\r\n        const n = allQuestions.filter(q => q.chapter === c).length;\r\n        const label = c.match(\/^Ch \\d+:\/) ? chShort(c) + ': ' + chFull(c) : c;\r\n        return '<div class=\"filter-item' + (currentMode === 'chapter' && currentFilter === c ? ' active' : '') + '\" data-chapter=\"' + encodeURIComponent(c) + '\" title=\"' + c + '\"><span class=\"filter-text\">' + label + '<\/span><span class=\"filter-count\">' + n + '<\/span><\/div>';\r\n    }).join('');\r\n    renderWeakList();\r\n}\r\nfunction renderWeakList() {\r\n    const list = $id('weakQuestionList');\r\n    const weak = allQuestions.filter(q => progress.weakAreas.includes(q.id));\r\n    list.innerHTML = weak.length ? weak.map(q => {\r\n        const s = getQStat(q.id);\r\n        return '<div class=\"weak-question-item\" data-goto=\"' + q.id + '\"><span class=\"q-num\">Q' + q.id + '<\/span><span class=\"q-text\">' + q.question.replace(\/<br>\/g, ' ').substring(0, 60) + '\u2026<\/span><span class=\"wrong-count\">' + s.incorrect + '\u2717<\/span><\/div>';\r\n    }).join('') : '<p style=\"font-size:.78rem;color:var(--mut);text-align:center;padding:14px 4px;\">No weak areas. Keep practising!<\/p>';\r\n}\r\n\r\n\/\/ ==========================================\r\n\/\/ QUESTION RENDERING\r\n\/\/ ==========================================\r\nfunction loadQuestion() {\r\n    const q = filteredQuestions[currentQuestionIndex];\r\n    if (!q) return;\r\n    selectedOption = null; answerChecked = false;\r\n    $id('questionNumber').textContent = 'Question ' + (currentQuestionIndex + 1) + ' of ' + filteredQuestions.length;\r\n    $id('currentQuestionChapter').textContent = chShort(q.chapter);\r\n    $id('weakBadge').style.display = progress.weakAreas.includes(q.id) ? '' : 'none';\r\n    $id('questionText').innerHTML = formatQuestion(q);\r\n    $id('explanationBox').classList.remove('show');\r\n    renderOptions(q);\r\n    renderMastery(q);\r\n    const prior = sessionAnswers[q.id];\r\n    if (prior !== undefined) revealAnswer(q, prior, true);\r\n    $id('prevBtn').disabled = currentQuestionIndex === 0;\r\n    $id('nextBtn').disabled = currentQuestionIndex === filteredQuestions.length - 1;\r\n    $id('checkBtn').disabled = prior !== undefined;\r\n    renderGrid();\r\n    progress.lastQuestionId = q.id; saveProgress();\r\n    if (initDone && window.innerWidth <= 900) {\r\n        const p = document.querySelector('.cwq-portal .question-panel');\r\n        if (p) p.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n    }\r\n}\r\n\/\/ UPSC exam-paper formatting: numbered statements get their own spaced rows,\r\n\/\/ the \"Select the correct answer \/ Which of the above\" lead sits on its own line.\r\nfunction formatQuestion(q) {\r\n    const parts = q.question.split(\/<br\\s*\\\/?>\/i);\r\n    let html = '<span class=\"q-stem\"><b>Q' + q.id + '.<\/b> ' + (parts[0] || '') + '<\/span>';\r\n    for (let i = 1; i < parts.length; i++) {\r\n        const seg = parts[i].trim();\r\n        if (!seg) continue;\r\n        const m = seg.match(\/^(\\d+)\\.\\s*(.*)$\/s);\r\n        if (m) html += '<span class=\"q-stmt\"><span class=\"sn\">' + m[1] + '.<\/span><span>' + m[2] + '<\/span><\/span>';\r\n        else if (\/^(select the correct|which of the (above|following|statements)|choose the correct|consider the following)\/i.test(seg))\r\n            html += '<span class=\"q-lead\">' + seg + '<\/span>';\r\n        else html += '<span class=\"q-lead\" style=\"font-style:normal\">' + seg + '<\/span>';\r\n    }\r\n    return html;\r\n}\r\nfunction renderOptions(q) {\r\n    $id('optionsList').innerHTML = q.options.map((opt, i) =>\r\n        '<div class=\"option-item\" data-opt=\"' + i + '\"><span class=\"option-letter\">(' + String.fromCharCode(97 + i) + ')<\/span><span class=\"option-text\">' + opt + '<\/span><i class=\"option-icon\" style=\"margin-top:4px\"><\/i><\/div>'\r\n    ).join('');\r\n}\r\nfunction renderMastery(q) {\r\n    const s = getQStat(q.id);\r\n    const mi = $id('masteryIndicator');\r\n    if (s.correct + s.incorrect === 0) { mi.classList.remove('show'); return; }\r\n    mi.classList.add('show');\r\n    const stars = $id('masteryStars').querySelectorAll('i');\r\n    stars.forEach((st, i) => st.classList.toggle('filled', i < Math.min(s.correct, 5)));\r\n}\r\nfunction checkAnswer() {\r\n    if (answerChecked || selectedOption === null) { if (selectedOption === null) showToast('Select an option first'); return; }\r\n    const q = filteredQuestions[currentQuestionIndex];\r\n    const isCorrect = selectedOption === q.correct;\r\n    sessionAnswers[q.id] = selectedOption;\r\n    sessionStats.attempted++; isCorrect ? sessionStats.correct++ : sessionStats.incorrect++;\r\n    updateQuestionStats(q, isCorrect);\r\n    revealAnswer(q, selectedOption, false);\r\n    updateStats(); renderGrid(); renderWeakList(); updateHeader();\r\n}\r\nfunction revealAnswer(q, chosen, restoring) {\r\n    answerChecked = true;\r\n    const items = $id('optionsList').querySelectorAll('.option-item');\r\n    items.forEach((it, i) => {\r\n        it.classList.add('disabled');\r\n        if (i === q.correct) { it.classList.add('correct'); const oi = it.querySelector('.option-icon'); oi.textContent = '\\u2713'; oi.style.fontStyle = 'normal'; }\r\n        else if (i === chosen) { it.classList.add('incorrect'); const oj = it.querySelector('.option-icon'); oj.textContent = '\\u2717'; oj.style.fontStyle = 'normal'; }\r\n    });\r\n    $id('explanationText').innerHTML = q.explanation;\r\n    $id('explanationBox').classList.add('show');\r\n    $id('checkBtn').disabled = true;\r\n    renderMastery(q);\r\n    if (!restoring) showToast(chosen === q.correct ? 'Correct! Well done.' : 'Incorrect \u2014 read the explanation.', chosen === q.correct ? 'success' : '');\r\n}\r\nfunction updateQuestionStats(q, isCorrect) {\r\n    const s = getQStat(q.id);\r\n    isCorrect ? s.correct++ : s.incorrect++;\r\n    s.lastAttempt = Date.now(); s.lastCorrect = isCorrect;\r\n    progress.attemptLog.push({ qid: q.id, correct: isCorrect, ts: Date.now() });\r\n    const isWeak = progress.weakAreas.includes(q.id);\r\n    if (!isCorrect && s.incorrect >= quizConfig.weakThreshold && !isWeak) progress.weakAreas.push(q.id);\r\n    if (isCorrect && isWeak && s.correct >= quizConfig.masteryThreshold) progress.weakAreas = progress.weakAreas.filter(id => id !== q.id);\r\n    saveProgress();\r\n}\r\n\r\n\/\/ ==========================================\r\n\/\/ GRID + STATS\r\n\/\/ ==========================================\r\nfunction renderGrid() {\r\n    $id('questionGrid').innerHTML = filteredQuestions.map((q, i) => {\r\n        let cls = 'unattempted';\r\n        const ans = sessionAnswers[q.id];\r\n        if (ans !== undefined) cls = (ans === q.correct) ? 'correct-answered' : 'incorrect-answered';\r\n        else { const s = progress.questionStats[q.id]; if (s && (s.correct + s.incorrect) > 0) cls = 'attempted'; }\r\n        if (i === currentQuestionIndex) cls = 'current';\r\n        const weak = progress.weakAreas.includes(q.id) ? ' weak-marked' : '';\r\n        return '<div class=\"grid-item ' + cls + weak + '\" data-idx=\"' + i + '\" title=\"Q' + q.id + '\">' + (i + 1) + '<\/div>';\r\n    }).join('');\r\n}\r\nfunction masteredCount() { return allQuestions.filter(q => { const s = progress.questionStats[q.id]; return s && s.correct >= quizConfig.masteryThreshold; }).length; }\r\nfunction updateStats() {\r\n    $id('totalQuestions').textContent = filteredQuestions.length;\r\n    $id('attemptedCount').textContent = sessionStats.attempted;\r\n    $id('correctCount').textContent = sessionStats.correct;\r\n    $id('incorrectCount').textContent = sessionStats.incorrect;\r\n    const mastered = masteredCount();\r\n    const pct = allQuestions.length ? Math.round(mastered \/ allQuestions.length * 100) : 0;\r\n    $id('progressPercentage').textContent = pct + '%';\r\n    $id('progressRingFill').style.strokeDashoffset = 264 - (264 * pct \/ 100);\r\n    $id('totalCorrectProgress').textContent = Object.values(progress.questionStats).reduce((a, s) => a + s.correct, 0);\r\n    $id('totalWeakProgress').textContent = progress.weakAreas.length;\r\n    $id('allCount').textContent = allQuestions.length;\r\n    $id('weakModeCount').textContent = progress.weakAreas.length;\r\n}\r\nfunction updateHeader() {\r\n    $id('hdrTotalQ').textContent = allQuestions.length;\r\n    $id('hdrChapters').textContent = CHAPTERS.length;\r\n    const pct = allQuestions.length ? Math.round(masteredCount() \/ allQuestions.length * 100) : 0;\r\n    $id('hdrMastered').textContent = pct + '%';\r\n    const w = progress.weakAreas.length;\r\n    $id('weakBadgeHeader').style.display = w ? '' : 'none';\r\n    $id('weakCountHeader').textContent = w;\r\n    const r = computeReadiness();\r\n    $id('hdrReadiness').textContent = r.attempted ? r.score + '%' : '\u2014';\r\n    $id('perfPill').style.display = w >= 5 ? '' : 'none';\r\n}\r\n\r\n\/\/ ==========================================\r\n\/\/ SUBMIT \/ RESULT \/ RESET\r\n\/\/ ==========================================\r\nfunction submitExam() {\r\n    if (!sessionStats.attempted) { showToast('Attempt at least one question first'); return; }\r\n    const pct = Math.round(sessionStats.correct \/ sessionStats.attempted * 100);\r\n    $id('resultCorrect').textContent = sessionStats.correct;\r\n    $id('resultIncorrect').textContent = sessionStats.incorrect;\r\n    $id('resultScore').textContent = pct + '%';\r\n    $id('resultIcon').textContent = pct >= 80 ? '\ud83c\udfc6' : pct >= 60 ? '\ud83c\udf89' : pct >= 40 ? '\ud83d\udcd6' : '\ud83d\udcaa';\r\n    $id('resultTitle').textContent = pct >= 80 ? 'Outstanding!' : pct >= 60 ? 'Great Job!' : pct >= 40 ? 'Keep Practising!' : 'Needs Revision';\r\n    $id('resultMessage').textContent = 'You attempted ' + sessionStats.attempted + ' of ' + filteredQuestions.length + ' questions in this session.';\r\n    $id('practiceWeakBtn').style.display = progress.weakAreas.length ? '' : 'none';\r\n    $id('resultModal').classList.add('show');\r\n}\r\nfunction reviewAnswers() { $id('resultModal').classList.remove('show'); currentQuestionIndex = 0; loadQuestion(); }\r\nfunction retryQuiz() { $id('resultModal').classList.remove('show'); sessionStats = { attempted: 0, correct: 0, incorrect: 0 }; sessionAnswers = {}; currentQuestionIndex = 0; loadQuestion(); updateStats(); }\r\nfunction resetQuiz() {\r\n    if (!confirm('Reset ALL progress including mastery and weak areas?')) return;\r\n    progress = { questionStats: {}, weakAreas: [], lastQuestionId: null, lastMode: 'all', lastFilter: null, attemptLog: [] };\r\n    saveProgress();\r\n    sessionStats = { attempted: 0, correct: 0, incorrect: 0 }; sessionAnswers = {};\r\n    setMode('all'); updateHeader(); showToast('Progress reset', 'success');\r\n}\r\n\r\n\/\/ ==========================================\r\n\/\/ TAB 2 \u2014 AI COACH ENGINE (rule-based, client-side)\r\n\/\/ Chapter weight = chapter's share of the question bank\r\n\/\/ ==========================================\r\nfunction chapterCounts() {\r\n    const map = {};\r\n    allQuestions.forEach(q => { map[q.chapter] = (map[q.chapter] || 0) + 1; });\r\n    return Object.entries(map).sort((a, b) => b[1] - a[1]);\r\n}\r\nfunction chapterStats() {\r\n    const total = allQuestions.length;\r\n    return chapterCounts().map(([c, n]) => {\r\n        const qs = allQuestions.filter(q => q.chapter === c);\r\n        let attempted = 0, correct = 0, incorrect = 0, scoreSum = 0;\r\n        qs.forEach(q => {\r\n            const s = progress.questionStats[q.id];\r\n            if (s && (s.correct + s.incorrect) > 0) { attempted++; correct += s.correct; incorrect += s.incorrect; }\r\n            scoreSum += s ? Math.min(s.correct \/ quizConfig.masteryThreshold, 1) : 0;\r\n        });\r\n        const acc = (correct + incorrect) ? correct \/ (correct + incorrect) : null;\r\n        const weight = n \/ total;\r\n        const coverage = attempted \/ n;\r\n        const mastery = scoreSum \/ n;\r\n        const priority = weight * (acc === null ? 0.85 : (1 - acc)) * (0.5 + 0.5 * (1 - coverage));\r\n        return { chapter: c, count: n, weight, attempted, coverage, acc, mastery, priority };\r\n    });\r\n}\r\nfunction computeReadiness() {\r\n    const stats = chapterStats();\r\n    const score = Math.round(stats.reduce((a, s) => a + s.weight * s.mastery, 0) * 100);\r\n    const attempted = Object.values(progress.questionStats).some(s => (s.correct + s.incorrect) > 0);\r\n    return { score, attempted, stats };\r\n}\r\nfunction renderAI() {\r\n    const { score, attempted, stats } = computeReadiness();\r\n    $id('aiEmptyState').style.display = attempted ? 'none' : '';\r\n    $id('aiContent').style.display = attempted ? '' : 'none';\r\n    if (!attempted) return;\r\n\r\n    \/\/ Readiness ring\r\n    $id('aiScore').textContent = score;\r\n    $id('aiRingFill').style.strokeDashoffset = 402 - (402 * score \/ 100);\r\n    const verdict = score >= 80 ? '<b>Exam-ready.<\/b> Maintain with the revision queue and weak-area drills.'\r\n        : score >= 60 ? '<b>Strong base.<\/b> Close the gaps in your top-weight chapters to cross 80.'\r\n        : score >= 35 ? '<b>Building up.<\/b> Focus on the priority chapters below \u2014 they move your score fastest.'\r\n        : '<b>Early stage.<\/b> Start with the highest-weight chapters; every mastered question compounds.';\r\n    $id('aiVerdict').innerHTML = verdict + '<br><span style=\"font-size:.74rem;opacity:.8\">Score = \u03a3 (chapter weight \u00d7 your mastery), computed across ' + CHAPTERS.length + ' chapters of the bank.<\/span>';\r\n\r\n    \/\/ KPIs\r\n    const totalAttempted = allQuestions.filter(q => { const s = progress.questionStats[q.id]; return s && (s.correct + s.incorrect) > 0; }).length;\r\n    const allC = Object.values(progress.questionStats).reduce((a, s) => a + s.correct, 0);\r\n    const allI = Object.values(progress.questionStats).reduce((a, s) => a + s.incorrect, 0);\r\n    const accAll = (allC + allI) ? Math.round(allC \/ (allC + allI) * 100) : 0;\r\n    const recent = progress.attemptLog.slice(-20);\r\n    const accRecent = recent.length ? Math.round(recent.filter(a => a.correct).length \/ recent.length * 100) : 0;\r\n    const trendArrow = recent.length >= 5 ? (accRecent > accAll ? ' <span style=\"color:var(--green)\">\\u2197<\/span>' : accRecent < accAll ? ' <span style=\"color:var(--red)\">\\u2198<\/span>' : '') : '';\r\n    $id('aiKpis').innerHTML =\r\n        '<div class=\"ai-kpi\"><div class=\"n\">' + totalAttempted + '\/' + allQuestions.length + '<\/div><div class=\"l\">Coverage<\/div><\/div>' +\r\n        '<div class=\"ai-kpi\"><div class=\"n ' + (accAll >= 70 ? 'g' : accAll >= 45 ? 'a' : 'r') + '\">' + accAll + '%<\/div><div class=\"l\">Lifetime Accuracy<\/div><\/div>' +\r\n        '<div class=\"ai-kpi\"><div class=\"n ' + (accRecent >= 70 ? 'g' : accRecent >= 45 ? 'a' : 'r') + '\">' + accRecent + '%' + trendArrow + '<\/div><div class=\"l\">Last 20 Attempts<\/div><\/div>' +\r\n        '<div class=\"ai-kpi\"><div class=\"n g\">' + masteredCount() + '<\/div><div class=\"l\">Mastered (' + quizConfig.masteryThreshold + '\u2605)<\/div><\/div>' +\r\n        '<div class=\"ai-kpi\"><div class=\"n r\">' + progress.weakAreas.length + '<\/div><div class=\"l\">Weak Questions<\/div><\/div>';\r\n\r\n    \/\/ Smart study plan\r\n    const byPriority = [...stats].sort((a, b) => b.priority - a.priority);\r\n    const recos = [];\r\n    byPriority.slice(0, 3).forEach(s => {\r\n        if (s.acc === null) recos.push({ ic: 'warm', icon: '\ud83e\udded', txt: '<b>' + chShort(s.chapter) + '<\/b> carries <b>' + Math.round(s.weight * 100) + '%<\/b> of the bank but you haven\\u2019t attempted it yet \u2014 begin here.', ch: s.chapter });\r\n        else if (s.acc < 0.6) recos.push({ ic: 'hot', icon: '\ud83d\udd25', txt: '<b>' + chShort(s.chapter) + '<\/b>: chapter weight <b>' + Math.round(s.weight * 100) + '%<\/b>, your accuracy only <b>' + Math.round(s.acc * 100) + '%<\/b> \u2014 highest payoff zone right now.', ch: s.chapter });\r\n        else if (s.coverage < 0.6) recos.push({ ic: 'cool', icon: '\ud83d\udd0d', txt: '<b>' + chShort(s.chapter) + '<\/b>: accuracy is fine (' + Math.round(s.acc * 100) + '%) but you\\u2019ve only covered <b>' + Math.round(s.coverage * 100) + '%<\/b> of its questions \u2014 finish the set.', ch: s.chapter });\r\n    });\r\n    if (progress.weakAreas.length >= 3) recos.push({ ic: 'hot', icon: '\u26a0\ufe0f', txt: 'You have <b>' + progress.weakAreas.length + ' weak questions<\/b> flagged. One focused Weak-Areas session will clear the backlog.', weak: true });\r\n    const due = revisionDue();\r\n    if (due.length) recos.push({ ic: 'warm', icon: '\ud83d\udd01', txt: '<b>' + due.length + ' mastered questions<\/b> haven\\u2019t been touched in over ' + quizConfig.revisionGapDays + ' days \u2014 revise before they fade.' });\r\n    const best = [...stats].filter(s => s.acc !== null).sort((a, b) => b.acc - a.acc)[0];\r\n    if (best && best.acc >= 0.75) recos.push({ ic: 'good', icon: '\ud83c\udfc5', txt: 'Strongest area: <b>' + chShort(best.chapter) + '<\/b> at <b>' + Math.round(best.acc * 100) + '%<\/b> accuracy \u2014 bank these marks on exam day.' });\r\n    $id('aiRecoList').innerHTML = recos.map(r =>\r\n        '<div class=\"ai-reco\"><span class=\"ic ' + r.ic + '\">' + r.icon + '<\/span><p>' + r.txt + '<\/p>' +\r\n        (r.ch ? '<button class=\"go\" data-practice-ch=\"' + encodeURIComponent(r.ch) + '\">Practice \\u2192<\/button>' : r.weak ? '<button class=\"go\" data-practice-weak=\"1\">Start \\u2192<\/button>' : '') + '<\/div>'\r\n    ).join('');\r\n\r\n    \/\/ Performance table\r\n    $id('perfTableBody').innerHTML = byPriority.map(s => {\r\n        const accPct = s.acc === null ? null : Math.round(s.acc * 100);\r\n        const tag = s.acc === null ? '<span class=\"tag na\">Not started<\/span>'\r\n            : accPct < 45 ? '<span class=\"tag hot\">Critical<\/span>'\r\n            : accPct < 65 ? '<span class=\"tag warm\">Needs work<\/span>'\r\n            : accPct < 85 ? '<span class=\"tag ok\">On track<\/span>'\r\n            : '<span class=\"tag good\">Strong<\/span>';\r\n        const accBar = s.acc === null ? '\u2014' : '<div class=\"mini-track\"><div class=\"mini-fill\" style=\"width:' + accPct + '%;background:' + (accPct < 45 ? 'var(--red)' : accPct < 65 ? 'var(--amber)' : 'var(--green)') + '\"><\/div><\/div><span style=\"font-size:.72rem\">' + accPct + '%<\/span>';\r\n        return '<tr><td title=\"' + s.chapter + '\">' + chShort(s.chapter) + '<\/td><td><b>' + Math.round(s.weight * 100) + '%<\/b> <span style=\"color:var(--faint);font-size:.7rem\">(' + s.count + ' Qs)<\/span><\/td><td>' + s.attempted + '\/' + s.count + '<\/td><td>' + accBar + '<\/td><td>' + tag + '<\/td><td><button class=\"mini-go\" data-practice-ch=\"' + encodeURIComponent(s.chapter) + '\">Practice<\/button><\/td><\/tr>';\r\n    }).join('');\r\n\r\n    \/\/ Revision queue\r\n    $id('revisionQueue').innerHTML = due.length ? due.slice(0, 8).map(({ q, days }) =>\r\n        '<div class=\"rev-item\" data-goto=\"' + q.id + '\"><span class=\"q-num\">Q' + q.id + '<\/span><span class=\"q-text\">' + q.question.replace(\/<br>\/g, ' ').substring(0, 55) + '\u2026<\/span><span class=\"days\">' + days + 'd ago<\/span><\/div>'\r\n    ).join('') : '<div class=\"ai-empty\" style=\"padding:18px\"><p style=\"font-size:.83rem\">Nothing due for revision. Mastered questions reappear here after ' + quizConfig.revisionGapDays + ' days.<\/p><\/div>';\r\n\r\n    \/\/ Mastery distribution\r\n    const buckets = [0, 0, 0, 0]; \/\/ untouched, learning, close, mastered\r\n    allQuestions.forEach(q => {\r\n        const s = progress.questionStats[q.id];\r\n        if (!s || (s.correct + s.incorrect) === 0) buckets[0]++;\r\n        else if (s.correct >= quizConfig.masteryThreshold) buckets[3]++;\r\n        else if (s.correct >= 2) buckets[2]++;\r\n        else buckets[1]++;\r\n    });\r\n    const labels = ['Untouched', 'Learning (0\u20131\u2605)', 'Almost there (2\u2605)', 'Mastered (' + quizConfig.masteryThreshold + '\u2605+)'];\r\n    const colors = ['#cbd5e1', 'var(--amber)', 'var(--navy-l)', 'var(--green)'];\r\n    $id('masteryDist').innerHTML = buckets.map((n, i) =>\r\n        '<div class=\"bar-row\" style=\"grid-template-columns:minmax(130px,1fr) 2fr auto\"><span class=\"bar-name\">' + labels[i] + '<\/span><div class=\"bar-track\"><div class=\"bar-fill\" style=\"width:' + (allQuestions.length ? n \/ allQuestions.length * 100 : 0) + '%;background:' + colors[i] + '\"><\/div><\/div><span class=\"bar-val\">' + n + '<\/span><\/div>'\r\n    ).join('');\r\n}\r\nfunction revisionDue() {\r\n    const now = Date.now(), gap = quizConfig.revisionGapDays * 86400000;\r\n    return allQuestions.map(q => {\r\n        const s = progress.questionStats[q.id];\r\n        if (s && s.correct >= quizConfig.masteryThreshold && s.lastAttempt && (now - s.lastAttempt) > gap)\r\n            return { q, days: Math.floor((now - s.lastAttempt) \/ 86400000) };\r\n        return null;\r\n    }).filter(Boolean).sort((a, b) => b.days - a.days);\r\n}\r\nfunction gotoQuestion(qid) {\r\n    switchView('practice');\r\n    let idx = filteredQuestions.findIndex(q => q.id === qid);\r\n    if (idx === -1) { setMode('all'); idx = filteredQuestions.findIndex(q => q.id === qid); }\r\n    if (idx !== -1) { currentQuestionIndex = idx; loadQuestion(); }\r\n}\r\nfunction practiceChapter(ch) {\r\n    switchView('practice');\r\n    setMode('chapter', ch);\r\n    showToast('Filtered to ' + chShort(ch), 'success');\r\n}\r\n\r\n\/\/ ==========================================\r\n\/\/ EVENT DELEGATION (single listener)\r\n\/\/ ==========================================\r\ndocument.addEventListener('click', function (e) {\r\n    const w = e.target.closest('.cwq-portal');\r\n    if (!w) return;\r\n    const tab = e.target.closest('.gp-tab'); if (tab) { switchView(tab.dataset.view); return; }\r\n    const mode = e.target.closest('.mode-tab'); if (mode) { setMode(mode.dataset.mode); return; }\r\n    const cf = e.target.closest('.filter-item[data-chapter]'); if (cf) { const c = decodeURIComponent(cf.dataset.chapter); setMode('chapter', currentFilter === c ? null : c); return; }\r\n    const gi = e.target.closest('.grid-item'); if (gi) { currentQuestionIndex = parseInt(gi.dataset.idx, 10); loadQuestion(); return; }\r\n    const go = e.target.closest('[data-goto]'); if (go) { gotoQuestion(parseInt(go.dataset.goto, 10)); return; }\r\n    const pc = e.target.closest('[data-practice-ch]'); if (pc) { practiceChapter(decodeURIComponent(pc.dataset.practiceCh)); return; }\r\n    const pw = e.target.closest('[data-practice-weak]'); if (pw) { switchView('practice'); setMode('weak'); return; }\r\n    const opt = e.target.closest('.option-item'); if (opt && !answerChecked) {\r\n        $id('optionsList').querySelectorAll('.option-item').forEach(o => o.classList.remove('selected'));\r\n        opt.classList.add('selected'); selectedOption = parseInt(opt.dataset.opt, 10); return;\r\n    }\r\n    switch (e.target.closest('button') ? e.target.closest('button').id : '') {\r\n        case 'checkBtn': checkAnswer(); break;\r\n        case 'prevBtn': if (currentQuestionIndex > 0) { currentQuestionIndex--; loadQuestion(); } break;\r\n        case 'nextBtn': if (currentQuestionIndex < filteredQuestions.length - 1) { currentQuestionIndex++; loadQuestion(); } break;\r\n        case 'submitBtn': submitExam(); break;\r\n        case 'resetBtn': resetQuiz(); break;\r\n        case 'reviewBtn': reviewAnswers(); break;\r\n        case 'retryBtn': retryQuiz(); break;\r\n        case 'practiceWeakBtn': $id('resultModal').classList.remove('show'); setMode('weak'); break;\r\n        case 'practiceWeakAreasBtn': setMode('weak'); break;\r\n        case 'resumeBtn': {\r\n            const qid = progress.lastQuestionId;\r\n            if (progress.lastMode) setMode(progress.lastMode, progress.lastFilter);\r\n            if (qid) gotoQuestion(qid);\r\n            $id('sessionInfo').style.display = 'none';\r\n            break;\r\n        }\r\n    }\r\n});\r\n\r\n\/\/ Screenshot \/ copy deterrents\r\ndocument.addEventListener('contextmenu', function (e) { if (e.target.closest('.cwq-portal')) { e.preventDefault(); showToast('Right-click is disabled to protect content'); } });\r\ndocument.addEventListener('keydown', function (e) {\r\n    if ((e.ctrlKey || e.metaKey) && ['c', 's', 'p', 'u'].includes(e.key.toLowerCase()) && document.querySelector('.cwq-portal')) {\r\n        e.preventDefault(); showToast('Copying is disabled to protect content');\r\n    }\r\n    if (e.key === 'PrintScreen') showToast('Screenshots are discouraged \u2014 content is protected');\r\n});\r\n\r\n\/\/ ==========================================\r\n\/\/ INIT\r\n\/\/ ==========================================\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n    if (!allQuestions.length) {\r\n        $id('questionText').textContent = 'No questions loaded \u2014 paste your question bank into const allQuestions.';\r\n        return;\r\n    }\r\n    $id('topicName').textContent = quizConfig.topic;\r\n    $id('topicEyebrow').textContent = 'CSS ADDA \u00b7 PromotionExams.com \u00b7 ' + quizConfig.paper;\r\n    loadProgress();\r\n    renderFilters();\r\n    setMode(progress.lastMode || 'all', progress.lastFilter || null);\r\n    updateHeader();\r\n    if (progress.lastQuestionId) {\r\n        const q = allQuestions.find(x => x.id === progress.lastQuestionId);\r\n        if (q) { $id('sessionInfo').style.display = ''; $id('sessionText').textContent = 'Last session: Q' + q.id + ' (' + chShort(q.chapter) + ')'; }\r\n    }\r\n    initDone = true;\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u26a0\ufe0f Message \ud83c\udf89 Great Job! You have completed the quiz. 0 Correct 0 Incorrect 0% Score \ud83d\udc41 Review \u26a0\ufe0f Practice [&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":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"disabled","ast-banner-title-visibility":"disabled","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"disabled","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":""},"categories":[],"tags":[],"class_list":["post-13495","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/13495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13495"}],"version-history":[{"count":7,"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/13495\/revisions"}],"predecessor-version":[{"id":13502,"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/13495\/revisions\/13502"}],"wp:attachment":[{"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}