{"id":5745,"date":"2025-12-22T07:43:09","date_gmt":"2025-12-22T07:43:09","guid":{"rendered":"https:\/\/promotionexams.com\/?page_id=5745"},"modified":"2026-07-13T11:02:55","modified_gmt":"2026-07-13T11:02:55","slug":"previous-year-papers-delegation-of-financial-power-rulesdfpr","status":"publish","type":"page","link":"https:\/\/promotionexams.com\/?page_id=5745","title":{"rendered":"Previous Year Papers-Delegation of Financial Power Rules(DFPR)"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5745\" class=\"elementor elementor-5745\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d0022b9 e-con-full e-flex e-con e-parent\" data-id=\"d0022b9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66ed21a elementor-widget elementor-widget-html\" data-id=\"66ed21a\" 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\nREUSABLE PYQ QUIZ TEMPLATE \u2014 PRACTICE + ANALYTICS + AI COACH\r\n------------------------------------------------------------\r\nHOW TO REUSE FOR A NEW QUIZ (3 steps):\r\n  1. In quizConfig below, change:\r\n       quizId   -> a UNIQUE id per quiz (e.g. 'pension-pyq-quiz').\r\n                   This keys localStorage; two quizzes sharing an id\r\n                   will share\/overwrite each other's progress!\r\n       topic    -> heading shown in the header\r\n       subtitle -> small line under the heading\r\n  2. Paste your MCQ objects inside  const allQuestions = [ ... ]\r\n     (format documented at the array).\r\n  3. Nothing else needs editing.\r\n\r\nTABS:\r\n  1. Practice Quiz   \u2014 quiz with progress, weak areas, filters\r\n  2. Exam Analytics  \u2014 distribution analysis AUTO-COMPUTED from data\r\n  3. My Performance  \u2014 AI coach: readiness score, focus areas,\r\n                       study plan, spaced-repetition revision queue\r\n\r\nRESET BEHAVIOUR:\r\n  \u2022 \"Reset Session\" (Practice tab)   -> clears ONLY the current\r\n    session's answers\/score. Lifetime mastery, weak areas and the\r\n    My Performance data are KEPT.\r\n  \u2022 \"Reset My Performance\" (My Performance tab) -> wipes lifetime\r\n    stats, mastery, weak areas and attempt history (with confirm).\r\n\r\nAll progress persists in localStorage (per quizId).\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<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Crimson+Pro:wght@500;600;700&family=DM+Sans:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\r\n\r\n<style>\r\n\/* =====================================================\r\n   CSS ADDA \u2014 INTEGRATED PORTAL DESIGN SYSTEM\r\n   NOTE ON FONT STABILITY: all font sizes are in px (not\r\n   rem) so the widget looks identical on every WordPress\r\n   page\/theme, regardless of the site's root font size.\r\n   Key exam-paper typography carries !important to defeat\r\n   theme overrides.\r\n===================================================== *\/\r\n.gfr-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  --serif:'Crimson Pro',Georgia,'Times New Roman',serif;\r\n  --sans:'DM Sans',-apple-system,BlinkMacSystemFont,sans-serif;\r\n  font-family:var(--sans) !important;\r\n  font-size:16px;\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.gfr-portal *{margin:0;padding:0;box-sizing:border-box;min-width:0}\r\n\/* Font-stability shield: inherit our stack everywhere unless a rule below overrides *\/\r\n.gfr-portal *:not(i):not(.ic){font-family:inherit}\r\n.gfr-portal img,.gfr-portal svg,.gfr-portal table{max-width:100%}\r\n.gfr-portal table{max-width:none}\r\n@media print{.gfr-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:var(--serif) !important;font-weight:600;font-size:clamp(20px,3.5vw,28px);line-height:1.15;color:#fff;letter-spacing:-.01em}\r\n.gp-brand p{font-size:13.6px;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:var(--serif);font-size:23px;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:var(--sans);font-size:13.6px;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:12.8px}\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:10.4px;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:13.4px;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:var(--serif);color:var(--gold);font-size:16.8px;font-weight:600}\r\n.sec-head h2{font-size:18.4px;font-weight:700;letter-spacing:-.01em;color:var(--navy-ink)}\r\n.sec-head .hint{margin-left:auto;color:var(--mut);font-size:12.8px;font-style:italic;font-family:var(--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:12.8px;font-weight:600;color:var(--mut);cursor:pointer;transition:all .3s;display:flex;align-items:center;gap:6px;font-family:var(--sans)}\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:11.2px}\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:12.8px;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:12.2px;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:5px;transition:all .3s;font-family:var(--sans)}\r\n.resume-btn:hover{transform:translateY(-2px);box-shadow:var(--sh-md)}\r\n\r\n\/* ---------- QUIZ GRID LAYOUT (filters | 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:12.8px;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:12.6px}\r\n.filter-item .filter-count{background:rgba(255,255,255,.2);padding:2px 8px;border-radius:20px;font-size:11.2px;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:12.5px;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:11.5px;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:10.4px;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:12.8px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;margin-top:10px;transition:all .3s;font-family:var(--sans)}\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:var(--serif);font-size:16.3px;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:11.7px;font-weight:600;display:flex;align-items:center;gap:4px}\r\n.meta-badge.year{background:linear-gradient(135deg,var(--navy) 0%,var(--navy-d) 100%);color:#fff}\r\n.meta-badge.chapter{background:linear-gradient(135deg,var(--gold) 0%,var(--gold-d) 100%);color:#fff;white-space:normal;max-width:100%;line-height:1.3;text-align:left}\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:10.1px}\r\n.question-body{padding:22px}\r\n\/* ---- EXAM-PAPER TYPOGRAPHY (UPSC QP style) ----\r\n   font-family + font-size are !important so the WordPress theme can\r\n   never change how the MCQs look from page to page. *\/\r\n.question-text{font-family:var(--serif) !important;font-size:18.5px !important;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:var(--serif) !important;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:17.3px !important;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:17.3px !important;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:16px;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:13.4px;font-weight:700;color:var(--gold-d);margin-bottom:8px;display:flex;align-items:center;gap:6px}\r\n.explanation-text{font-family:var(--serif) !important;font-size:16.3px !important;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:12.5px;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:13.6px}\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:13.6px;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:7px;transition:all .3s;font-family:var(--sans);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:var(--serif);font-size:24px;font-weight:600;color:var(--ink)}\r\n.progress-ring-label{font-size:10.1px;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:var(--serif);font-size:19.2px;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:10.1px;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:11.7px;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:8.8px;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:11.7px;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:10.9px;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:13.1px}\r\n.stat-value{font-weight:700;font-size:15.2px;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:13.6px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:7px;transition:all .3s;font-family:var(--sans)}\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.action-btn.danger{background:#fff;color:var(--red-d);border:2px solid #f3c1c1}\r\n.action-btn.danger:hover{background:var(--red);border-color:var(--red);color:#fff}\r\n.reset-note{font-size:11.5px;color:var(--faint);text-align:center;margin-top:6px;line-height:1.45}\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:14.1px}\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:var(--serif);font-size:24px;font-weight:600;color:var(--ink);margin-bottom:8px}\r\n.result-message{color:var(--mut);margin-bottom:20px;font-size:14.4px}\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:var(--serif);font-size:22.4px;font-weight:600;color:var(--navy)}\r\n.result-stat-label{font-size:11.5px;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:13.1px;font-family:var(--sans)}\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 EXAM ANALYTICS\r\n===================================================== *\/\r\n.an-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:var(--serif);color:var(--mut);font-size:14.4px;text-align:right}\r\n\/* WRAP FIX: long chapter names wrap onto multiple lines instead of overflowing *\/\r\n.bar-name{font-size:13.8px;font-weight:500;line-height:1.35;overflow-wrap:break-word;word-break:break-word}\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:14.7px;min-width:64px;text-align:right}\r\n.bar-val .pct{display:inline-block;font-weight:500;color:var(--mut);font-size:11.5px;margin-left:6px}\r\n.tbl-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:14px;background:#fff}\r\ntable.matrix{border-collapse:collapse;width:100%;font-size:12.6px;min-width:900px}\r\ntable.matrix th,table.matrix td{text-align:center;padding:8px 5px;border-bottom:1px solid #eef1f6}\r\ntable.matrix thead th{background:var(--navy);color:#fff;font-weight:600;font-size:11.7px}\r\ntable.matrix thead th:first-child{text-align:left;padding-left:14px}\r\n\/* WRAP FIX: heatmap row-header wraps; bounded so year columns stay visible *\/\r\n.rn{text-align:left!important;padding-left:14px!important;font-weight:500;white-space:normal;overflow-wrap:break-word;word-break:break-word;min-width:160px;max-width:300px;line-height:1.4;background:#fbfcfe}\r\n.rt{font-weight:700;background:#f2f4f8;border-left:2px solid var(--gold)}\r\ntable.matrix tbody tr:hover td{outline:1px solid rgba(201,153,42,.25)}\r\ntable.matrix tfoot td{background:var(--navy-d);color:#fff;font-weight:700;border-bottom:none}\r\ntable.matrix tfoot td:first-child{text-align:left;padding-left:14px}\r\n.hm-legend{display:flex;align-items:center;gap:8px;margin-top:14px;font-size:12.8px;color:var(--mut)}\r\n.hm-legend .sw{width:22px;height:14px;border-radius:3px;display:inline-block}\r\n.year-chart{display:flex;align-items:flex-end;gap:8px;height:180px;padding-top:14px}\r\n.yb{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;justify-content:flex-end}\r\n.yb-bar{width:100%;max-width:52px;background:linear-gradient(180deg,var(--gold-l),var(--gold));border-radius:6px 6px 0 0;position:relative;min-height:14px;transition:height .8s ease}\r\n.yb-bar span{position:absolute;top:-20px;left:0;right:0;text-align:center;font-weight:700;font-size:12.8px;color:var(--navy)}\r\n.yb-lab{margin-top:8px;font-size:10.6px;color:var(--mut);text-align:center}\r\n.insight{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}\r\n.ins{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--gold);border-radius:10px;padding:15px 17px}\r\n.ins h4{font-size:13.1px;color:var(--navy-d);margin-bottom:6px}\r\n.ins p{font-size:13.9px;color:#3a4453}\r\n.ins b{color:var(--gold-d)}\r\n\r\n\/* =====================================================\r\n   TAB 3 \u2014 MY PERFORMANCE (AI COACH)\r\n===================================================== *\/\r\n.ai-wrap{padding:6px 28px 40px;max-width:1080px;margin:0 auto}\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:var(--serif);font-size:40px;font-weight:600;color:var(--gold-l);line-height:1}\r\n.ai-ring-txt .l{font-size:9.9px;letter-spacing:.12em;text-transform:uppercase;color:#bfdbfe;margin-top:4px}\r\n.ai-verdict{margin-top:14px;font-size:13.8px;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:15.2px;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:12.8px;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:13.9px;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:11.5px;font-weight:700;cursor:pointer;transition:all .25s;font-family:var(--sans);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:var(--serif);font-size:25.6px;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:10.9px;letter-spacing:.05em;text-transform:uppercase;color:var(--mut);margin-top:2px}\r\n\r\ntable.perf{border-collapse:collapse;width:100%;font-size:13.1px;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:11.5px}\r\ntable.perf th:first-child,table.perf td:first-child{text-align:left;padding-left:14px}\r\n\/* WRAP FIX: chapter column wraps; bounded so metric columns stay visible *\/\r\ntable.perf td:first-child{font-weight:500;background:#fbfcfe;white-space:normal;overflow-wrap:break-word;word-break:break-word;min-width:150px;max-width:260px;line-height:1.4}\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:10.6px;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:11.2px;font-weight:700;color:var(--navy-d);cursor:pointer;transition:all .25s;font-family:var(--sans)}\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:12.6px;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:10.2px;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:32px;color:var(--gold);margin-bottom:12px;display:block}\r\n.ai-empty .big{font-family:var(--serif);font-size:19.2px;color:var(--navy-ink);margin-bottom:6px}\r\n.ai-empty p{font-size:13.9px;max-width:52ch;margin:0 auto}\r\n.ai-two{display:grid;grid-template-columns:1fr 1fr;gap:18px}\r\n.perf-reset-wrap{margin-top:34px;padding:18px;border:1px dashed #f3c1c1;border-radius:var(--r-lg);background:#fffafa;display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}\r\n.perf-reset-wrap p{font-size:13.1px;color:var(--mut);flex:1;min-width:220px}\r\n.perf-reset-wrap p b{color:var(--red-d)}\r\n.perf-reset-btn{padding:11px 20px;background:#fff;border:2px solid #f3c1c1;border-radius:var(--r-md);color:var(--red-d);font-size:13.1px;font-weight:700;cursor:pointer;transition:all .25s;font-family:var(--sans);display:flex;align-items:center;gap:7px;white-space:nowrap}\r\n.perf-reset-btn:hover{background:var(--red);border-color:var(--red);color:#fff}\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:19.2px}\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:20.5px}\r\n  .gp-brand p{font-size:12.5px}\r\n  .gp-tabs{overflow-x:auto;flex-wrap:nowrap;-webkit-overflow-scrolling:touch}\r\n  .gp-tab{padding:9px 13px;font-size:12px;flex:0 0 auto;white-space:nowrap}\r\n  .an-wrap,.ai-wrap{padding:6px 12px 30px}\r\n  .question-header{padding:11px 14px}\r\n  .question-number{font-size:15px}\r\n  .question-body{padding:14px}\r\n  .question-text{font-size:17px !important;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:16.3px !important}\r\n  .option-text{font-size:16.3px !important}\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:12.8px;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}\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:16px}\r\n  .year-chart{height:140px;gap:5px}\r\n  .yb-bar span{font-size:10.9px;top:-17px}\r\n  .yb-lab{font-size:9.3px}\r\n  .ai-ring{transform:scale(.85);margin:-8px}\r\n  .ai-ring-txt .n{font-size:33.6px}\r\n  .ai-kpis{grid-template-columns:repeat(2,1fr)}\r\n  .ai-kpi .n{font-size:20.8px}\r\n  .ai-reco{flex-wrap:wrap}\r\n  .ai-reco .go{margin-left:42px}\r\n  .insight{grid-template-columns:1fr}\r\n  .progress-combo{gap:10px}\r\n  .warning-toast{width:calc(100% - 32px);justify-content:center;font-size:12.8px}\r\n  .gp-stat{min-width:76px}\r\n  .perf-reset-wrap{flex-direction:column;align-items:stretch}\r\n  .perf-reset-btn{justify-content:center}\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:11.2px}\r\n  .mode-tab{padding:8px 11px;font-size:11.7px}\r\n  .question-text{font-size:16px !important;padding:12px}\r\n  .option-text,.option-letter{font-size:15.5px !important}\r\n  .an-wrap,.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=\"gfr-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\">CSS ADDA \u00b7 PromotionExams.com \u00b7 Paper 2<\/div>\r\n                <h1 id=\"topicName\">Delegation of Financial Rules (DFPR)-PYQs<\/h1>\r\n                <p id=\"topicSubtitle\">Combined SO\/Steno LDCE Previous Year Questions \u00b7 2009\u20132025 \u00b7 Smart Practice &amp; Analytics<\/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\">PYQs<\/div><\/div>\r\n                <div class=\"gp-stat\"><div class=\"n\" id=\"hdrCycles\">0<\/div><div class=\"l\">Exam Cycles<\/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=\"analytics\"><span class=\"ic\">\ud83d\udcca<\/span> Exam Analytics<\/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=\"year\" id=\"modeYear\">\r\n                <span class=\"ic\">\ud83d\udcc5<\/span> By Year\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=\"yearFilterCard\">\r\n                <div class=\"quiz-card-header light\"><h3><span class=\"ic\">\ud83d\udcc5<\/span> Filter by Year<\/h3><\/div>\r\n                <div class=\"quiz-card-body\" style=\"padding:10px 14px\"><div class=\"filter-list\" id=\"yearList\"><\/div><\/div>\r\n            <\/div>\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 year\"><span class=\"ic\">\ud83d\udcc5<\/span> <span id=\"currentQuestionYear\">\u2014<\/span><\/div>\r\n                    <div class=\"meta-badge chapter\"><span class=\"ic\">\ud83d\udcd6<\/span> <span id=\"currentQuestionChapter\">\u2014<\/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                <p class=\"reset-note\">Resets only this session's answers.<br>Lifetime performance &amp; mastery are kept.<\/p>\r\n            <\/div>\r\n        <\/aside>\r\n    <\/div>\r\n    <\/div><!-- \/view-practice -->\r\n\r\n    <!-- ================= VIEW 2 : EXAM ANALYTICS ================= -->\r\n    <div class=\"gp-view\" id=\"view-analytics\">\r\n        <div class=\"an-wrap\">\r\n            <div class=\"sec-head\"><span class=\"num\">01<\/span><h2>Ranked \u2014 Total MCQs per Chapter<\/h2><span class=\"hint\">gold = high-yield (15+ Qs)<\/span><\/div>\r\n            <div class=\"an-card\" id=\"rankedBars\"><\/div>\r\n\r\n            <div class=\"sec-head\"><span class=\"num\">02<\/span><h2>Heatmap Matrix \u2014 Chapter \u00d7 Exam Year<\/h2><span class=\"hint\">darker gold = more questions<\/span><\/div>\r\n            <div class=\"tbl-scroll\" id=\"heatmapContainer\"><\/div>\r\n            <div class=\"hm-legend\"><span>Low<\/span><span class=\"sw\" style=\"background:#fdf6e3\"><\/span><span class=\"sw\" style=\"background:#f6e7b8\"><\/span><span class=\"sw\" style=\"background:#e9cf7f\"><\/span><span class=\"sw\" style=\"background:#d8b23f\"><\/span><span class=\"sw\" style=\"background:#c9992a\"><\/span><span>High<\/span><\/div>\r\n\r\n            <div class=\"sec-head\"><span class=\"num\">03<\/span><h2>Questions per Exam Cycle<\/h2><\/div>\r\n            <div class=\"an-card\"><div class=\"year-chart\" id=\"cycleChart\"><\/div><\/div>\r\n\r\n            <div class=\"sec-head\"><span class=\"num\">04<\/span><h2>Takeaways for Preparation<\/h2><\/div>\r\n            <div class=\"insight\" id=\"takeaways\"><\/div>\r\n        <\/div>\r\n    <\/div><!-- \/view-analytics -->\r\n\r\n    <!-- ================= VIEW 3 : 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:32px\">\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 exam-readiness score, detect weak chapters weighted by their real exam frequency, 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>Exam Readiness \u2014 AI Assessment<\/h2><span class=\"hint\">weighted by real PYQ frequency<\/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 Exam 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>Exam 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\r\n                <!-- Performance reset (lifetime data) -->\r\n                <div class=\"perf-reset-wrap\">\r\n                    <p><b>Danger zone:<\/b> this permanently erases your lifetime performance for this quiz \u2014 mastery stars, weak areas, accuracy history and the readiness score. Session reset on the Practice tab does <b>not<\/b> touch this data.<\/p>\r\n                    <button class=\"perf-reset-btn\" id=\"resetPerfBtn\"><span class=\"ic\">\ud83d\uddd1\ufe0f<\/span> Reset My Performance<\/button>\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 QUIZ\r\n\/\/ ==========================================\r\nconst quizConfig = {\r\n    \/\/ UNIQUE id per quiz. Progress is stored in localStorage under this key,\r\n    \/\/ so two quizzes MUST NOT share the same quizId.\r\n    quizId: 'CHANGE-ME-unique-quiz-id',\r\n    topic: 'Delegation of Financial Rules (DFPR)-PYQs',                       \/\/ header H1\r\n    subtitle: 'Combined SO\/Steno LDCE Previous Year Questions \u00b7 Smart Practice & Analytics',\r\n    paper: 'Paper 2',\r\n    wpAjaxUrl: '\/wp-admin\/admin-ajax.php',\r\n    useWordPressSync: true,\r\n    masteryThreshold: 3,   \/\/ consecutive\/total correct needed for \"mastered\"\r\n    weakThreshold: 1,      \/\/ wrong attempts before a question is flagged weak\r\n    revisionGapDays: 7     \/\/ days after which a mastered Q re-enters revision\r\n};\r\n\r\n\/\/ ==========================================\r\n\/\/ QUESTIONS DATA  \u2190 PASTE YOUR MCQs HERE\r\n\/\/ ------------------------------------------\r\n\/\/ Each question object looks like this:\r\n\/\/ {\r\n\/\/   id: 1,                          \/\/ unique number WITHIN a year group\r\n\/\/   year: '2023',                   \/\/ exam year\/cycle label (string)\r\n\/\/   chapter: 'CH 1: Chapter Name',  \/\/ chapter\/topic label (used by filters,\r\n\/\/                                   \/\/ analytics and the AI coach)\r\n\/\/   question: \"Question text...\\n1. Statement one\\n2. Statement two\\nSelect the correct answer using the code given below:\",\r\n\/\/   options: [\"Option A\", \"Option B\", \"Option C\", \"Option D\"],\r\n\/\/   correct: 2,                     \/\/ 0-based index of the right option\r\n\/\/   explanation: `Explanation text shown after checking the answer.`\r\n\/\/ },\r\n\/\/ Numbered statements: start a line with \"1.\" \/ \"2.\" etc (use \\n or <br>).\r\n\/\/ Lines starting with \"Select the correct answer\u2026\" \/ \"Which of the above\u2026\"\r\n\/\/ are auto-styled as the lead line, UPSC question-paper style.\r\n\/\/ ==========================================\r\nconst allQuestions = [\r\n    {\r\n        id: 1,\r\n        year: '2025',\r\n        chapter: 'ANNEXURES:General conditions for incurring Expenditure',\r\n        question: \"As per the provisions of the Delegation of Financial Powers Rules, 2024, expenditure already incurred under an emergent situation by an authority in excess of its powers should be treated as:\",\r\n        options: [\"Contingent expenditure\", \"Miscellaneous expenditure\", \"Irregular expenditure\", \"Regular expenditure\"],\r\n        correct: 2,\r\n        explanation: \"According to Annexure-II, General Conditions for incurring expenditure, point (3): 'Expenditure, already incurred under an emergent situation by an authority in excess of its powers should be treated as irregular expenditure. Any irregular expenditure under emergent situations should be regularised by issue of an ex-post facto sanction with the concurrence of Financial Adviser and approval of Administrative Secretary.'\"\r\n    },\r\n    {\r\n        id: 2,\r\n        year: '2025',\r\n        chapter: 'ANNEXURES: List of Object Heads',\r\n        question: \"In terms of the Delegation of Financial Powers Rules, 2024, the Object Head 'Office Expenses' belongs to which one of the following Object Classes?\",\r\n        options: [\"Object Class II \u2013 Social Security of Employees\", \"Object Class III \u2013 Goods and Services\", \"Object Class IV \u2013 Aid and Assistance\", \"Object Class V \u2013 Miscellaneous Revenue Expenditure\"],\r\n        correct: 1,\r\n        explanation: \"As per Annexure-I (List of Object Heads), Serial No. 11, Object Code 13, 'Office Expenses' is listed under 'Object Class III - Goods and Services' in the Revenue Expenditure section.\"\r\n    },\r\n    {\r\n        id: 3,\r\n        year: '2025',\r\n        chapter: 'Rule 13: Powers of Subordinate Authorities to write off loss',\r\n        question: \"The monetary limit up to which the loss due to deficiencies and depreciation in the value of stores (other than motor vehicles or motor cycles) included in the stock and other accounts including losses on food grains, sugar, etc. can be written off in each case by a Department of the Government of India, is:\",\r\n        options: [\"\u20b9 10,00,000\", \"\u20b9 8,00,000\", \"\u20b9 6,00,000\", \"\u20b9 5,00,000\"],\r\n        correct: 3,\r\n        explanation: \"As per Rule 13 - Government of India's Decision (1), the table specifying powers to write off loss states that for 'Deficiencies and depreciation in the value of stores (other than motor vehicles or motor cycle) included in the stock and other accounts including losses on food grains, sugar, etc', Department of the Government of India has monetary limit of Rs. 5,00,000.\"\r\n    },\r\n    {\r\n        id: 4,\r\n        year: '2025',\r\n        chapter: 'Rule 10: Appropriation and Re-Appropriation',\r\n        question: \"Rule 10 of the Delegation of Financial Powers Rules, 2024 deals with:\",\r\n        options: [\"Appraisal and approval of Schemes or Projects\", \"Waiver of Recovery of overpayment made to Government Servants\", \"Indents, contracts and purchases\", \"Appropriation and Re-appropriation of funds\"],\r\n        correct: 3,\r\n        explanation: \"Rule 10 is explicitly titled 'Rule 10- Appropriation and Re-Appropriation'. This rule deals with general restrictions on appropriation and re-appropriation, powers of Administrative Ministries\/Departments, and cases requiring prior approval of Ministry of Finance.\"\r\n    },\r\n    {\r\n        id: 5,\r\n        year: '2025',\r\n        chapter: 'ANNEXURES: List of Object Heads',\r\n        question: \"As per the Delegation of Financial Powers Rules, 2024, which one of the following Object Heads is not included under the 'Object Class VII \u2013 Financial Assets'?\",\r\n        options: [\"Investment\", \"Subscription\", \"Loans and Advances\", \"Infrastructural Assets\"],\r\n        correct: 3,\r\n        explanation: \"As per Annexure-I, Object Class VII - Financial Assets includes Investment (54), Loans and Advances (55), Repayment of borrowings (56), and Subscription (57). However, 'Infrastructural Assets' (Object Code 73) is listed under 'Object Class-VI - Non-Financial Assets (Fixed and Intangible Assets)', not under Financial Assets.\"\r\n    },\r\n    {\r\n        id: 6,\r\n        year: '2025',\r\n        chapter: 'ANNEXURES:General conditions for incurring Expenditure',\r\n        question: \"Which one of the following statements regarding general conditions for incurring Expenditure in terms of the Delegation of Financial Powers Rules, 2024, is not correct?\",\r\n        options: [\"In exercising powers to sanction unusual expenditure, Departments of Government of India should exercise due care and restrict the growth of expenditure on new lines or new types of items.\", \"An officer appointed to perform the current duties of a post in addition to his own cannot exercise financial powers vested in the full-fledged incumbent of the post.\", \"The financial limits and guidelines for expenditure on conveyance hire would be in accordance with the extant instructions issued by the Finance Ministry.\", \"Expenditure on legal charges shall ordinarily be incurred only with the previous consent of the Ministry of Law and Justice except for charges, the rates of which are notified by the Ministry of Law and Justice from time to time.\"],\r\n        correct: 1,\r\n        explanation: \"This statement is incorrect. According to Annexure-II, General Conditions for incurring expenditure, point (5): 'An officer appointed to perform the current duties of a post in addition to his own can exercise financial powers vested in the full-fledged incumbent of the post.' All other statements are correctly stated in the DFPR 2024.\"\r\n    },\r\n    {\r\n        id: 7,\r\n        year: '2025',\r\n        chapter: 'Rule 11: Indents, contracts and purchases',\r\n        question: \"In terms of the Delegation of Financial Powers Rules, 2024, what are the financial powers of a Secretary of the Department of Government of India for limited tender contracts?\",\r\n        options: [\"\u20b9 100 Crores\", \"\u20b9 50 Crores\", \"\u20b9 25 Crores\", \"\u20b9 5 Crores\"],\r\n        correct: 0,\r\n        explanation: \"Rule 11(2) clearly states: 'The powers under this rule shall be exercised by the Secretary of the Department concerned up to rupees one hundred crores for open or limited tender contracts.'\"\r\n    },\r\n    {\r\n        id: 8,\r\n        year: '2025',\r\n        chapter: 'Rule 19: Dismantlement of public buildings',\r\n        question: \"As per Delegation of Financial Powers Rules, 2024, 'a purely temporary structure' means a structure, the life of which is not more than:\",\r\n        options: [\"1 year\", \"2 years\", \"3 years\", \"5 years\"],\r\n        correct: 1,\r\n        explanation: \"Rule 19 (Dismantlement of public buildings) provides an explanation: 'Explanation \u2013 for the purposes of this rule, 'a purely temporary structure' mean a structure, the life of which is not more than two years.'\"\r\n    },\r\n    \r\n    {\r\n        id: 9,\r\n        year: '2024',\r\n        chapter: 'Rule 10: Appropriation and Re-Appropriation',\r\n        question: \"In terms of the Delegation of Financial Powers Rules, 2024, the monetary limits for reappropriation powers of Ministries\/Departments in the case of non-establishment expenditure is up to:\",\r\n        options: [\"\u20b9 2 Crore\", \"\u20b9 5 Crore\", \"\u20b9 10 Crore\", \"\u20b9 15 Crore\"],\r\n        correct: 3,\r\n        explanation: \"According to Rule 10 - Government of India's decision (1), point v: Monetary Limits for re-appropriation powers, Non-Establishment Expenditure covering 'All other object heads' has a delegated power of 'Up to Rs 15 crore' for Administrative Department\/Ministry.\"\r\n    },\r\n    {\r\n        id: 10,\r\n        year: '2024',\r\n        chapter: 'ANNEXURES: List of Object Heads',\r\n        question: \"In terms of the provisions contained in the Delegation of Financial Powers Rules, 2024, the expenditure on account of reimbursement of newspapers purchased or supplied to officer's residence shall be booked under the Object Head:\",\r\n        options: [\"Office Expenses\", \"Allowances\", \"Materials and Supplies\", \"Other Revenue Expenditure\"],\r\n        correct: 3,\r\n        explanation: \"As per Annexure-I, Sl.No. 37, Object Code 49 - Other Revenue expenditure: 'It will include payment out of discretionary grant, other discounts, fees and fines, custom duty compensation, commitment charges, notional value of gifts, re-imbursement of newspapers purchased or supplied to officer's residence and purchase or re-imbursement of briefcase or ladies purse to Government servants', etc.'\"\r\n    },\r\n    {\r\n        id: 11,\r\n        year: '2024',\r\n        chapter: 'Rule 11: Indents, contracts and purchases',\r\n        question: \"According to the Delegation of Financial Powers Rules, 2024, the powers of the Secretary of the Department concerned for negotiated or single tender or proprietary contracts and agreements are up to:\",\r\n        options: [\"\u20b9 100 Crore\", \"\u20b9 50 Crore\", \"\u20b9 25 Crore\", \"\u20b9 5 Crore\"],\r\n        correct: 2,\r\n        explanation: \"Rule 11(3) clearly states: 'The powers under this rule shall be exercised by the Secretary of the Department concerned up to rupees twenty-five crores for negotiated or single tender or proprietary contracts and agreements.' Note: This limit has been enhanced in DFPR 2024 from the previous DFPR 1978 limits for better administrative efficiency.\"\r\n    },\r\n    {\r\n        id: 12,\r\n        year: '2024',\r\n        chapter: 'Rule 8: Primary unit of appropriation',\r\n        question: \"In terms of the Delegation of Financial Powers Rules, 2024, which one of the following Budget Heads is also known as 'Primary Unit of Appropriation'?\",\r\n        options: [\"Major Head\", \"Minor Head\", \"Detailed Head\", \"Object Head\"],\r\n        correct: 3,\r\n        explanation: \"Rule 8(1) defines: 'A grant or Appropriation for charged expenditure is distributed by standard Object Heads under which it shall be accounted for and each such standard Object Head, against which the provision for expenditure appears, constitutes a primary unit of appropriation. The primary unit of appropriation is the lowest unit of accounting classification denoting the objects of expenditure.'\"\r\n    },\r\n    {\r\n        id: 13,\r\n        year: '2024',\r\n        chapter: 'Rule 13: Powers of Subordinate Authorities to write off loss',\r\n        question: \"Which one of the following is the life of Light Commercial Motor Vehicles fixed in terms of distance run (in kilometres) and length of use (in years) whichever is reached later, for the purpose of the powers of Subordinate Authorities to write off losses under the Delegation of Financial Powers Rules, 2024?\",\r\n        options: [\"4,00,000 km; 10 years\", \"2,00,000 km; 7 years\", \"1,50,000 km; 6.5 years\", \"1,20,000 km; 7 years\"],\r\n        correct: 2,\r\n        explanation: \"As per Rule 13 - Government of India's decision (1), table under 'Condemnation of motor vehicles and motorcycles', the lives of various types of vehicles are: HCVs - 4,00,000 km\/10 years; Light Commercial Motor Vehicles (LCVs) - 1,50,000 km\/6\u00bd years; Motor cycles - 1,20,000 km\/7 years. The table specifies that distance run (in kilometers) and length of use (in years) whichever is reached later should be considered.\"\r\n    },\r\n    {\r\n        id: 14,\r\n        year: '2024',\r\n        chapter: 'ANNEXURES: List of Object Heads',\r\n        question: \"In terms of the Delegation of Financial Powers Rules, 2024, which one of the following Object Heads does not fall under the Capital Expenditure (Assets)?\",\r\n        options: [\"Furniture and Fixtures\", \"Digital Equipment\", \"Machinery and Equipment\", \"Information, Computer, Telecommunications (ICT) equipment\"],\r\n        correct: 1,\r\n        explanation: \"Under Annexure-I, Capital Expenditure (Assets) includes: Furniture & Fixtures (Object Code 74), Machinery and Equipment (Object Code 52), and ICT equipment (Object Code 71). However, 'Digital Equipment' (Object Code 19) is listed under Revenue Expenditure, Object Class III - Goods and Services: 'It will include expenses to be classified as revenue expenditure on procurement or development of hardware and software where the cost of individual item does not exceed the threshold limit of one lakh rupees or three years of useful life, either of the two as decided by the Government from time to time.'\"\r\n    },\r\n    {\r\n        id: 15,\r\n        year: '2024',\r\n        chapter: 'Rule 16: Expenditure on Schemes or Projects',\r\n        question: \"The appraisal authority for Scheme\/Project whose Original Cost Estimate is greater than \u20b9 100 Crores and up to \u20b9 500 Crores is:\",\r\n        options: [\"The Financial Adviser of the Ministry\/Department concerned\", \"The Expenditure Finance Committee\/Public Investment Board chaired by the Expenditure Secretary\", \"The Standing Finance Committee\/Delegated Investment Board chaired by the Secretary of the Administrative Department\", \"Cabinet\/Committee of the Cabinet concerned with the subject\"],\r\n        correct: 2,\r\n        explanation: \"According to Rule 16 - Government of India's decision (1), Appendix-III, paragraph 8 - Original Cost Estimates table: For cost > 100 & up to 500 crore, the appraisal is by 'SFC\/DIB Chaired by Secretary of the Admn. Dept.' and approval by 'Minister-in-charge of the Administrative Department'. SFC = Standing Finance Committee (for Schemes), DIB = Delegated Investment Board (for Projects). For costs up to 100 crore, appraisal is by Financial Adviser; above 500 crore, by EFC\/PIB chaired by Expenditure Secretary.\"\r\n    },\r\n    {\r\n        id: 16,\r\n        year: '2024',\r\n        chapter: 'Rule 16: Expenditure on Schemes or Projects',\r\n        question: \"Pre-investment activities up to what amount (including budgetary and extra-budgetary resources) can be approved by the Secretary of the Administrative Department with the concurrence of the Financial Adviser concerned provided financial resources are available and in-principle approval has been obtained, wherever necessary?\",\r\n        options: [\"\u20b9 50 Crore\", \"\u20b9 100 Crore\", \"\u20b9 250 Crore\", \"\u20b9 500 Crore\"],\r\n        correct: 1,\r\n        explanation: \"As per Rule 16 - Government of India's decision (1), Appendix-III, paragraph 10: 'Pre-investment activities up to Rs, 100 crore (including budgetary and extra-budgetary resources) may be approved by the Secretary of the Administrative Department with the concurrence of the Financial Adviser concerned provided financial resources are available and in-principle approval has been obtained, wherever necessary.' Pre-investment activities include preparation of Feasibility Reports, DPRs, Pilot Studies, Survey\/Investigation, land acquisition payments, construction of boundary wall, site offices, etc.\"\r\n    },\r\n    {\r\n    id: 17,\r\n    year: '2023',\r\n    chapter: 'Creation, Revival, Continuation, Conversion, Up-gradation, Down-gradation and Abolition of posts',\r\n    question: \"Consider the following statements regarding the creation of posts:\\n1. All powers with respect to the creation of posts delegated under Delegation of Financial Powers Rules, 1978, stand withdrawn.\\n2. The competent authority to create posts below Joint Secretary Level is the Finance Minister.\\n3. A post falling into the Category of 'deemed abolished' can be filled up with prior 'revival' approval from the Department of Expenditure.\\n\\nWhich of the statement(s) given above is\/are correct?\",\r\n    options: [\r\n      \"1 only\",\r\n      \"2 only\",\r\n      \"2 and 3 only\",\r\n      \"1, 2, and 3\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"Statement 1 is CORRECT: As per Ministry of Finance DoE O.M. No. F No. 7(1)\/E.Coord-I\/2017, dated 05.01.2024, para 2.2: 'Any specific exemption allowed to any Ministry or Department on creation, revival, continuation, conversion, transfer, up-gradation and down-gradation of posts is also withdrawn except for delegations contained in Appendix-1.' Statement 2 is INCORRECT: As per para 3.5 of the Compendium: 'The Authority competent to approve creation of post(s) shall be as below: Posts equivalent to SAG and above levels [Pay Level-14 and above]: Cabinet; Posts below SAG Level [Below Pay Level-14]: Department of Expenditure.' The Finance Minister is NOT the competent authority. Statement 3 is INCORRECT: As per para 5.5: 'Once a post stands abolished under para 5.1, it (unless covered under para 5.2) shall not be filled, except by creating it de novo by following the procedure under para 3.' The post cannot simply be filled with revival approval\u2014it must be created afresh unless specific exceptions apply. DFPR 1978 Position: Under the old rules, similar restrictions existed but were less clearly defined. DFPR 2024 Position: The new rules have been comprehensively revised and consolidated in the Compendium issued vide O.M. dated 05.01.2024.\"\r\n  },\r\n  {\r\n    id: 18,\r\n    year: '2023',\r\n    chapter: 'Rule 10: Appropriation and Re-Appropriation',\r\n    question: \"Which of the following are covered under the general restrictions relating to appropriation and reappropriation of funds in terms of Delegation of Financial Powers Rules, 1978?\\n1.\\tAppropriation of funds to meet expenditure not sanctioned by a competent authority.\\n2.\\tReappropriation of funds provided for charged expenditure to meet votable expenditure.\\n3.\\tReappropriation of funds from one grant for charged expenditure to another grant for charged expenditure.\\n4.\\tAppropriation of funds to meet expenditure on a new service not contemplated in the budget as approved by Parliament.\\nSelect the correct answer using the code given below:\",\r\n    options: [\r\n      \"1 and 4 only\",\r\n      \"1, 2, and 3 only\",\r\n      \"2 and 4 only\",\r\n      \"1, 2, 3, and 4\"\r\n    ],\r\n    correct: 3,\r\n    explanation: \"As per Rule 10 - Appropriation and Re-Appropriation \u2013 General Restrictions of DFPR 2024 (corresponding to Rule 10 of DFPR 1978):\\n\\nStatement 1 is CORRECT: Sub-rule (2) states: 'Funds shall not be appropriated or re-appropriated to meet expenditure which has not been sanctioned by an authority competent to sanction it.'\\n\\nStatement 2 is CORRECT: Sub-rule (4) states: 'Funds provided for charged expenditure shall not be appropriated or re-appropriated to meet voted expenditure and funds provided for voted expenditure shall not be appropriated or re-appropriated to meet charged expenditure.'\\n\\nStatement 3 is CORRECT: Sub-rule (5) states: 'No Re-appropriation shall be made from one grant or Appropriation for charged expenditure to another Grant or Appropriation for charged expenditure.'\\n\\nStatement 4 is CORRECT: Sub-rule (1) states: 'Save with prior approval of the Parliament, funds shall not be appropriated or re-appropriated to meet expenditure on a New Service or New Instrument of Service (NS or NIS) not contemplated in the budget as approved by Parliament.'\\n\\nDFPR 1978 & 2024 Position: These restrictions remain substantially the same in both versions of the rules, reflecting fundamental principles of parliamentary control over public expenditure.\"\r\n  },\r\n    {\r\n    id: 19,\r\n    year: '2023',\r\n    chapter: 'Rule 8: Primary unit of appropriation',\r\n    question: \"Consider the following statements regarding Primary units of Appropriation in the context of the Delegation of Financial Powers Rules, 1978:\\n1.\\tIt includes provision for voted expenditure only.\\n2.\\tIt includes provision for charged expenditure only.\\n3.\\tIt includes provision for both voted and charged expenditure.\\n4.\\tSalaries constitute the Primary unit of Appropriation.\\nSelect the correct answer using the code given below:\",\r\n    options: [\r\n      \"1 and 4 only\",\r\n      \"2 and 4 only\",\r\n      \"3 and 4 only\",\r\n      \"3 only\"\r\n    ],\r\n    correct: 2,\r\n    explanation: \"As per Rule 8 - Primary unit of appropriation of DFPR 2024 (corresponding to Rule 8 of DFPR 1978):\\n\\nStatements 1 and 2 are INCORRECT: Sub-rule (2) explicitly states: 'The primary unit may include provision for both voted and charged expenditure and in that case the amount of each is shown separately.'\\n\\nStatement 3 is CORRECT: As quoted above from sub-rule (2), primary units can include provision for both voted and charged expenditure.\\n\\nStatement 4 is CORRECT: As per Annexure-I (List of Object Heads), Object Head Code 01 - Salaries is defined as: 'It will include pay of the Government employees as defined under FR 9(21), honorarium to Government servant and stipend to interns. It will also include expenditure on emoluments and allowances of Heads of States and other high dignitaries including Sumptuary Allowance, salary payable to the staff of Departmental canteens and leave encashment on LTC.'\\n\\nSalaries constitute one of the primary units of appropriation.\\n\\nDFPR 1978 & 2024 Position: The definition and treatment of primary units of appropriation remain consistent across both versions of the rules.\"\r\n  },\r\n  {\r\n    id: 20,\r\n    year: '2023',\r\n    chapter: 'Rule 12: Powers of Subordinate Authorities',\r\n    question: \"Under which one of the following Rules of the Delegation of Financial Powers Rules, 1978, do Heads of departments have powers to declare any Gazetted Officer subordinate to them as Head of an Office for the purpose of these rules?\",\r\n    options: [\r\n      \"Rule 11\",\r\n      \"Rule 13\",\r\n      \"Rule 14 [Rule 12 in DFPR 2024] \",\r\n      \"Rule 16\"\r\n    ],\r\n    correct: 2,\r\n    explanation: \"DFPR 1978 Position: Under the old rules, this power was contained in Rule 14 (Head of Office). DFPR 2024 Position: As per the Concordance Table, Rule 14 of DFPR 1978 has been deleted as a separate rule, and its provisions have been merged into Rule 12 - Powers of Subordinate Authorities. The relevant provision is now in Rule 12, Sub-rule (4) which states: 'Departments of the Government of India, Administrators and Heads of the Departments shall have the power to declare any Gazetted Officer subordinate to them as the Head of the Office for the purpose of these rules: Provided that the Head of Office shall exercise such powers as delegated by the Department, Administrator or Head of Department and as provided in the rules for the time being in force: Provided further that not more than one Gazetted Officer shall be declared as Head of Office in respect of the same office or establishment, unless such office or establishment is distinctly separate from one another.' For the SO\/Steno 2023 exam based on DFPR 1978, the correct answer is Rule 14.\"\r\n  },\r\n  {\r\n    id: 21,\r\n    year: '2023',\r\n    chapter: 'Rule 12: Powers of Subordinate Authorities and Rule 15: Waiver of recovery of overpayment made to Government servants',\r\n    question: \"Consider the following statements in the context of Delegation of Financial Powers Rules, 1978:\\n1.\\tA Gazetted Officer authorized by a Head of Office serving under him to incur contingent expenditure on his behalf shall be responsible for the correctness, regularity, and propriety of the expenditure.\\n2.\\tAuthorizing Section Officer to sign sanctions for petty contingent expenditure amounts to redelegation under the Delegation of Financial Powers Rules, 1978.\\n3.\\tA Department of the Central Government to whom powers are delegated by the President shall not have powers to waive the recoveries relating to a gazetted Government servant.\\nSelect the correct answer using the code given below:\",\r\n    options: [\r\n      \"1 and 2 only\",\r\n      \"3 only\",\r\n      \"2 only\",\r\n      \"1, 2, and 3\"\r\n    ],\r\n    correct: 1,\r\n    explanation: \"Statement 1 is INCORRECT: As per Rule 12 - Powers of Subordinate Authorities, Sub-rule (3) of DFPR 2024: 'The Administrator or Head of the Department referred to in sub-rule (2) may, by an order in writing, authorise a Gazetted Officer serving under him to exercise to such extent, as may be specified in that order, all or any of the powers conferred on such Administrator or Head of the Department under sub-rule (2). The Administrator or Head of the Department shall, however, continue to be responsible for the correctness, regularity and propriety of the decisions taken by the Gazetted Officer so authorised.'\\n\\nThe Head of Department remains responsible, not the authorized officer.\\n\\nStatement 2 is INCORRECT: Authorizing a Section Officer to sign sanctions for petty contingent expenditure does not amount to prohibited redelegation. Rule 12, Sub-rule (2) specifies that redelegation is prohibited only for:\\n(a) Rule 10-Re-appropriation of funds;\\n(b) Rule 15-Waiver of recovery of overpayment; and\\n(c) Rule 16-Appraisal and Approval of Schemes or Projects.\\n\\nStatement 3 is CORRECT (for the 2023 exam context):\\n\\nDFPR 1978 Position: Departments had very limited or no powers to waive recoveries relating to gazetted government servants.\\n\\nDFPR 2024 Position: Rule 15, Sub-rule (2) now states: 'A Department of Government of India may waive recovery of overpayment upto Rs. 2,00,000\/- (Rupees Two Lakhs only) in the case of each individual with the concurrence of Financial Advisers of the Department. Proposals for waiver of recovery of amount greater than Rs. 2,00,000\/- (Rupees Two Lakhs only) in each case shall be referred to the Finance Ministry for concurrence.'\\n\\nThe statement as framed for 2023 exam was considered correct under DFPR 1978.\"\r\n  },\r\n  {\r\n    id: 22,\r\n    year: '2023',\r\n    chapter: 'Rule 19: Dismantlement of public buildings',\r\n    question: \"In terms of the Delegation of Financial Powers Rules, 1978, the Departments of the Central Government have full powers to sanction the sale or dismantlement of purely temporary structures. In this context, a purely temporary structure means a structure, the life of which is not more than:\",\r\n    options: [\r\n      \"Two years\",\r\n      \"Three years\",\r\n      \"Five years\",\r\n      \"Seven years\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"As per Rule 19 - Dismantlement of public buildings of DFPR 2024 (corresponding to Rule 24 of DFPR 1978), the Explanation at the end of the rule states: 'Explanation \u2013 for the purposes of this rule, 'a purely temporary structure' mean a structure, the life of which is not more than two years.' The rule also provides under Condition (iv): 'The Departments or Ministries of the Government of India and Administrators shall have full powers to sanction dismantlement of purely temporary structures.' DFPR 1978 Position: Two years. DFPR 2024 Position: Two years (unchanged). Both versions of the rules maintain the same definition that a purely temporary structure has a life of not more than two years.\"\r\n  },\r\n  {\r\n    id: 23,\r\n    year: '2023',\r\n    chapter: 'Rule 13: Office Expenses and Other Related Orders on Hospitality',\r\n    question: \"In terms of the Delegation of Financial Powers Rules, 1978, the per month ceiling of office expenditure on hospitality in the case of the Cabinet Secretary is:\",\r\n    options: [\r\n      \"\u20b923,000\",\r\n      \"\u20b925,000\",\r\n      \"\u20b927,000\",\r\n      \"\u20b934,000\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"Note: The specific monthly ceiling for Cabinet Secretary's hospitality expenditure is NOT explicitly mentioned in the DFPR 2024 rules document provided. However, related guidance on hospitality expenditure is provided in Other Related Orders. As per Department of Expenditure O.M. No. F No. 7(3)\/E-Coord\/2013, dated 06.05.2015: For general meetings\/seminars\/conferences, the ceilings are: 'Tea + Snacks: Rs.200\/-; High Tea: Rs.500\/-; Lunch\/Dinner: Rs.750\/-' For international engagements at Five Star Hotels, Banquet Rates are: 'Buffet Lunch: Rs.950; Buffet Dinner: Rs.950; Sit down lunch: Rs.950; Sit down dinner: Rs.1050; Cocktail: Rs.575.' Rule 13 - Office Expenses in DFPR 2024 includes: 'It will include all recurring and non-recurring contingent expenses incurred for the maintenance of office establishment such as... hospitality expenses including entertainment of foreign delegates, gifts and souvenirs...' DFPR 1978 Position: The specific monthly ceiling of \u20b923,000 for Cabinet Secretary was likely contained in DFPR 1978 or related orders. DFPR 2024 Position: DFPR 2024 does not specify individual officer-wise monthly ceilings for hospitality, but provides event-based ceilings through related orders. The question appears to test knowledge of DFPR 1978 specific provisions that have since been revised or removed.\"\r\n  },\r\n   {\r\n    id: 24,\r\n    year: '2023',\r\n    chapter: 'Rule 3: Definitions',\r\n    question: \"Which of the following are the duties of Internal Financial Advisers?\\n1.\\tTo watch the settlement of audit objections, inspection reports, draft audit paras.\\n2.\\tTo screen the proposals for supplementary demands for grants.\\n3.\\tTo scrutinize proposals for re-delegation of powers to subordinate authorities.\\n4.\\tTo screen all expenditure proposals required to be referred to the Finance Ministry for concurrence.\\nSelect the correct answer using the code given below:\",\r\n    options: [\r\n      \"3 and 4 only\",\r\n      \"1, 2, and 3 only\",\r\n      \"2 and 4 only\",\r\n      \"1, 2, 3, and 4\"\r\n    ],\r\n    correct: 3,\r\n    explanation: \"As per Rule 3 - Definitions, Sub-rule (1)(f) of DFPR 2024: ''Finance Ministry' means the Department of Expenditure, Ministry of Finance of the Government of India: Provided that in any Department of the Government of India where the Scheme of Integrated Financial Adviser is in force, the Integrated Financial Adviser of that Department, will, subject to supervision by Finance Ministry, exercise all or any of the powers delegated by Finance Ministry.'\\n\\nThe duties of Internal\/Integrated Financial Advisers include:\\n\\nStatement 1 is CORRECT: Watching settlement of audit objections, inspection reports, and draft audit paras is a core financial oversight and audit liaison function.\\n\\nStatement 2 is CORRECT: Screening proposals for supplementary demands for grants is required under Rule 10 and Government of India's decision (1) on re-appropriation guidelines which mandates FA consultation.\\n\\nStatement 3 is CORRECT: As per Rule 12, Sub-rule (2): 'A Department of the Central Government may, by general or special order, confer powers, not exceeding those vested in that Department, upon an Administrator or Head of Department or any other authority subordinate to the Department in respect of any matter covered by these rules, in consultation with the Internal Financial Adviser.'\\n\\nStatement 4 is CORRECT: This is a fundamental duty\u2014screening all expenditure proposals requiring Finance Ministry concurrence before forwarding them. As per Rule 5, Sub-rule (1): 'No Authority shall sanction expenditure or advances without the previous consent of the Finance Ministry if it involves the introduction of a new principle or practice likely to lead to increased expenditure in future.'\\n\\nDFPR 1978 & 2024 Position: These duties have remained consistent across both versions, forming the core responsibilities of Financial Advisers in ensuring financial propriety and oversight.\"\r\n  }\r\n\r\n\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 sessionStartTs = Date.now();\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 YEARS = [...new Set(allQuestions.map(q => q.year))];\r\n\/\/ Case-insensitive helpers: work for \"Ch 1:\", \"CH 1:\", \"ch 1:\" alike.\r\nconst chShort = (c) => c.replace(\/^CH\\s*(\\d+):.*$\/i, 'CH $1').replace('ANNEXURE\/Appendices', 'Annexures').replace('Manual of Procurement', 'Manual of Proc.');\r\nconst chFull = (c) => { const m = c.match(\/^CH\\s*\\d+:\\s*(.+)$\/i); return m ? m[1] : c; };\r\n\/\/ One label, printed once (fixes the earlier \"name: name\" doubling).\r\nconst chLabel = (c) => \/^CH\\s*\\d+:\/i.test(c) ? (chShort(c) + ': ' + chFull(c)) : 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('.gfr-portal .gp-tab').forEach(b => b.classList.toggle('active', b.dataset.view === view));\r\n    document.querySelectorAll('.gfr-portal .gp-view').forEach(v => v.classList.toggle('active', v.id === 'view-' + view));\r\n    if (view === 'analytics') renderAnalytics();\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('.gfr-portal .mode-tab').forEach(t => t.classList.toggle('active', t.dataset.mode === mode));\r\n    $id('yearFilterCard').style.display = (mode === 'year') ? '' : 'none';\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 === 'year') filteredQuestions = currentFilter ? allQuestions.filter(q => q.year === currentFilter) : [...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    sessionStartTs = Date.now();\r\n    sessionAnswers = {};\r\n    renderFilters(); renderGrid(); loadQuestion(); updateStats();\r\n}\r\nfunction renderFilters() {\r\n    $id('yearList').innerHTML = YEARS.map(y => {\r\n        const n = allQuestions.filter(q => q.year === y).length;\r\n        return '<div class=\"filter-item' + (currentMode === 'year' && currentFilter === y ? ' active' : '') + '\" data-year=\"' + y + '\"><span class=\"filter-text\">' + y + '<\/span><span class=\"filter-count\">' + n + '<\/span><\/div>';\r\n    }).join('');\r\n    $id('chapterList').innerHTML = CHAPTERS.map(c => {\r\n        const n = allQuestions.filter(q => q.chapter === c).length;\r\n        return '<div class=\"filter-item' + (currentMode === 'chapter' && currentFilter === c ? ' active' : '') + '\" data-chapter=\"' + encodeURIComponent(c) + '\" title=\"' + c + '\"><span class=\"filter-text\">' + chLabel(c) + '<\/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\\s*\\\/?>|\\n\/gi, ' ').substring(0, 60) + '\u2026<\/span><span class=\"wrong-count\">' + s.incorrect + '\u2717<\/span><\/div>';\r\n    }).join('') : '<p style=\"font-size:12.5px;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) {\r\n        $id('questionText').innerHTML = '<b>No questions loaded yet.<\/b> Paste your MCQ objects into the <code>allQuestions<\/code> array in this file (format documented at the array) and reload.';\r\n        $id('optionsList').innerHTML = '';\r\n        $id('questionNumber').textContent = 'Question 0 of 0';\r\n        return;\r\n    }\r\n    selectedOption = null; answerChecked = false;\r\n    $id('questionNumber').textContent = 'Question ' + (currentQuestionIndex + 1) + ' of ' + filteredQuestions.length;\r\n    $id('currentQuestionYear').textContent = q.year;\r\n    $id('currentQuestionChapter').textContent = chLabel(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('.gfr-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\n\/\/ Splits on BOTH \"\\n\" and \"<br>\" so either style works in pasted data.\r\nfunction formatQuestion(q) {\r\n    const parts = q.question.split(\/<br\\s*\\\/?>|\\n\/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('hdrCycles').textContent = YEARS.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 \/ RESETS\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    if (quizConfig.useWordPressSync && typeof window.cssaddaSaveQuizResult === 'function') {\r\n        window.cssaddaSaveQuizResult({\r\n            quiz_id: quizConfig.quizId,\r\n            score: sessionStats.correct,\r\n            total_questions: sessionStats.attempted,\r\n            percentage: pct,\r\n            time_taken: Math.round((Date.now() - sessionStartTs) \/ 1000),\r\n            answers: sessionAnswers\r\n        });\r\n    }\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\n\/\/ SESSION RESET (Practice tab): clears ONLY this session's answers\/score.\r\n\/\/ Lifetime performance (mastery, weak areas, attempt history) is preserved.\r\nfunction resetSession() {\r\n    if (!confirm('Reset this session? Only the current answers and session score are cleared \u2014 your lifetime performance and mastery are kept.')) return;\r\n    sessionStats = { attempted: 0, correct: 0, incorrect: 0 };\r\n    sessionAnswers = {};\r\n    sessionStartTs = Date.now();\r\n    currentQuestionIndex = 0;\r\n    loadQuestion(); updateStats(); renderGrid();\r\n    showToast('Session reset \u2014 performance data kept', 'success');\r\n}\r\n\/\/ PERFORMANCE RESET (My Performance tab): wipes lifetime data after confirm.\r\nfunction resetPerformance() {\r\n    if (!confirm('Permanently erase ALL lifetime performance for this quiz?\\n\\nThis clears mastery stars, weak areas, accuracy history and the readiness score. This cannot be undone.')) 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 };\r\n    sessionAnswers = {};\r\n    sessionStartTs = Date.now();\r\n    setMode('all');\r\n    updateHeader();\r\n    renderAI();\r\n    showToast('Lifetime performance erased', 'success');\r\n}\r\n\r\n\/\/ ==========================================\r\n\/\/ TAB 2 \u2014 DYNAMIC EXAM ANALYTICS\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\nlet analyticsRendered = false;\r\nfunction renderAnalytics() {\r\n    if (analyticsRendered) return; analyticsRendered = true;\r\n    const total = allQuestions.length;\r\n    if (!total) {\r\n        $id('rankedBars').innerHTML = '<div class=\"ai-empty\"><div class=\"big\">No questions loaded yet<\/div><p>Paste your MCQs into the <b>allQuestions<\/b> array and reload \u2014 the analytics build themselves from the data.<\/p><\/div>';\r\n        return;\r\n    }\r\n    const ranked = chapterCounts();\r\n    const max = ranked[0][1];\r\n    \/\/ FIXED: chapter name printed ONCE (was chShort + ': ' + chFull which doubled\r\n    \/\/ the name whenever the helpers couldn't parse the prefix). Wraps via CSS.\r\n    $id('rankedBars').innerHTML = ranked.map(([c, n], i) => {\r\n        const pct = (n \/ total * 100).toFixed(1);\r\n        const grad = n >= 15 ? 'linear-gradient(90deg,var(--gold-l),var(--gold))' : 'linear-gradient(90deg,#93c5fd,var(--navy))';\r\n        return '<div class=\"bar-row\"><span class=\"bar-rank\">' + (i + 1) + '<\/span><span class=\"bar-name\" title=\"' + c + '\">' + chLabel(c) + '<\/span><div class=\"bar-track\"><div class=\"bar-fill\" style=\"width:' + (n \/ max * 100) + '%;background:' + grad + '\"><\/div><\/div><span class=\"bar-val\">' + n + '<span class=\"pct\">' + pct + '%<\/span><\/span><\/div>';\r\n    }).join('');\r\n\r\n    \/\/ Heatmap\r\n    const shade = (n) => n === 0 ? '#fff' : n === 1 ? '#fdf6e3' : n === 2 ? '#f6e7b8' : n <= 4 ? '#e9cf7f' : n <= 6 ? '#d8b23f' : '#c9992a';\r\n    const fg = (n) => n >= 5 ? '#fff' : 'inherit';\r\n    let thead = '<tr><th>Chapter<\/th>' + YEARS.map(y => '<th>' + y + '<\/th>').join('') + '<th>Total<\/th><\/tr>';\r\n    let tbody = chapterCounts().map(([c]) => {\r\n        const cells = YEARS.map(y => {\r\n            const n = allQuestions.filter(q => q.chapter === c && q.year === y).length;\r\n            return '<td style=\"background:' + shade(n) + ';color:' + fg(n) + ';font-weight:' + (n ? '600' : '400') + '\">' + (n || '\u00b7') + '<\/td>';\r\n        }).join('');\r\n        const tot = allQuestions.filter(q => q.chapter === c).length;\r\n        return '<tr><td class=\"rn\" title=\"' + c + '\">' + chLabel(c) + '<\/td>' + cells + '<td class=\"rt\">' + tot + '<\/td><\/tr>';\r\n    }).join('');\r\n    let tfoot = '<tr><td>Total<\/td>' + YEARS.map(y => '<td>' + allQuestions.filter(q => q.year === y).length + '<\/td>').join('') + '<td>' + total + '<\/td><\/tr>';\r\n    $id('heatmapContainer').innerHTML = '<table class=\"matrix\"><thead>' + thead + '<\/thead><tbody>' + tbody + '<\/tbody><tfoot>' + tfoot + '<\/tfoot><\/table>';\r\n\r\n    \/\/ Cycle chart\r\n    const yMax = Math.max(...YEARS.map(y => allQuestions.filter(q => q.year === y).length));\r\n    $id('cycleChart').innerHTML = YEARS.map(y => {\r\n        const n = allQuestions.filter(q => q.year === y).length;\r\n        return '<div class=\"yb\"><div class=\"yb-bar\" style=\"height:' + Math.max(8, n \/ yMax * 100) + '%\"><span>' + n + '<\/span><\/div><div class=\"yb-lab\">' + y + '<\/div><\/div>';\r\n    }).join('');\r\n\r\n    \/\/ Takeaways (guarded for quizzes with fewer than 3 chapters)\r\n    const [c1, n1] = ranked[0];\r\n    const second = ranked[1], third = ranked[2];\r\n    const latest = YEARS[YEARS.length - 1];\r\n    const latestN = allQuestions.filter(q => q.year === latest).length;\r\n    let takeaways = '<div class=\"ins\"><h4><span class=\"ic\">\ud83d\udd25<\/span> Highest-Yield Chapter<\/h4><p><b>' + chLabel(c1) + '<\/b> alone contributes <b>' + n1 + ' questions (' + (n1 \/ total * 100).toFixed(1) + '%)<\/b> \u2014 master it first.<\/p><\/div>';\r\n    if (second && third) {\r\n        const top3pct = Math.round((n1 + second[1] + third[1]) \/ total * 100);\r\n        takeaways += '<div class=\"ins\"><h4><span class=\"ic\">\ud83d\uddc2\ufe0f<\/span> Top-3 Concentration<\/h4><p><b>' + chShort(c1) + ', ' + chShort(second[0]) + ' &amp; ' + chShort(third[0]) + '<\/b> together cover <b>' + top3pct + '%<\/b> of all PYQs \u2014 prioritise these before anything else.<\/p><\/div>';\r\n    }\r\n    takeaways += '<div class=\"ins\"><h4><span class=\"ic\">\ud83d\udd52<\/span> Recent Trend<\/h4><p>The <b>' + latest + '<\/b> cycle carried <b>' + latestN + ' questions<\/b>. Newer cycles lean on amended rule values \u2014 check every figure against the current rules.<\/p><\/div>' +\r\n        '<div class=\"ins\"><h4><span class=\"ic\">\ud83c\udfaf<\/span> Strategy<\/h4><p>Use <b>By Chapter<\/b> mode for high-weight chapters, then switch to <b>Weak Areas<\/b> mode until every question shows <b>' + quizConfig.masteryThreshold + '\u2605 mastery<\/b>.<\/p><\/div>';\r\n    $id('takeaways').innerHTML = takeaways;\r\n}\r\n\r\n\/\/ ==========================================\r\n\/\/ TAB 3 \u2014 AI COACH ENGINE (rule-based, client-side)\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    if (!allQuestions.length) {\r\n        $id('aiEmptyState').style.display = '';\r\n        $id('aiContent').style.display = 'none';\r\n        return;\r\n    }\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:11.8px;opacity:.8\">Score = \u03a3 (chapter exam-weight \u00d7 your mastery), computed from ' + YEARS.length + ' cycles of PYQ data.<\/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 paper 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>: exam 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 PYQs \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:11.5px\">' + accPct + '%<\/span>';\r\n        return '<tr><td title=\"' + s.chapter + '\">' + chLabel(s.chapter) + '<\/td><td><b>' + Math.round(s.weight * 100) + '%<\/b> <span style=\"color:var(--faint);font-size:11.2px\">(' + 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\\s*\\\/?>|\\n\/gi, ' ').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:13.3px\">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('.gfr-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 yf = e.target.closest('.filter-item[data-year]'); if (yf) { setMode('year', currentFilter === yf.dataset.year ? null : yf.dataset.year); 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': resetSession(); break;\r\n        case 'resetPerfBtn': resetPerformance(); 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 (as in original)\r\ndocument.addEventListener('contextmenu', function (e) { if (e.target.closest('.gfr-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('.gfr-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    $id('topicName').textContent = quizConfig.topic;\r\n    $id('topicSubtitle').textContent = quizConfig.subtitle;\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 + ' (' + q.year + ')'; }\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":"disabled","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":[44],"tags":[],"class_list":["post-5745","page","type-page","status-publish","hentry","category-pyq"],"_links":{"self":[{"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/5745","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=5745"}],"version-history":[{"count":31,"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/5745\/revisions"}],"predecessor-version":[{"id":13494,"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/5745\/revisions\/13494"}],"wp:attachment":[{"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5745"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5745"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}