{"id":13602,"date":"2026-07-16T04:31:39","date_gmt":"2026-07-16T04:31:39","guid":{"rendered":"https:\/\/promotionexams.com\/?page_id=13602"},"modified":"2026-08-31T14:10:04","modified_gmt":"2026-08-31T14:10:04","slug":"mcqs-on-make-in-india-order","status":"publish","type":"page","link":"https:\/\/promotionexams.com\/?page_id=13602","title":{"rendered":"MCQs on Make in India Order"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"13602\" class=\"elementor elementor-13602\">\n\t\t\t\t<div class=\"elementor-element elementor-element-87c995e e-con-full e-flex e-con e-parent\" data-id=\"87c995e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cf6e01a elementor-widget elementor-widget-html\" data-id=\"cf6e01a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\r\n=====================================================================\r\nCSS ADDA \u00b7 PromotionExams.com\r\nCHAPTER-WISE AI TEST SERIES  \u2014  generic template, one subject per page\r\n=====================================================================\r\n\r\nWHAT THIS IS\r\n  A drill page for one chapter-wise MCQ bank, on any subject. Two tabs:\r\n     PRACTICE     filters, search, flagging, per-question AI tutor\r\n     PERFORMANCE  readiness engine, Focused set \/ Mock paper planner\r\n\r\nSETTING UP A NEW SUBJECT \u2014 four edits, all at the top of the script\r\n  1. CFG.quizId   unique per page. Progress is stored under this key, so\r\n                  two subjects on the same site never mix. Change it.\r\n     CFG.topic    the subject name shown in the header.\r\n     CFG.eyebrow  the exam line above it, or blank.\r\n  2. CFG.sourceUrl  the page on your site carrying the full text of the\r\n                  subject. A \"Read the source\" card then appears in the\r\n                  rail. Leave it blank and the card disappears.\r\n  3. chapterImportance   rate each chapter yourself, any relative numbers\r\n                  you like \u2014 they need not total 100. The rating drives\r\n                  the ranking, the study plan and how much of each planned\r\n                  sitting a chapter gets. A chapter you leave out falls\r\n                  back to its share of the bank and is marked \"not rated\r\n                  yet\". Empty the map and importance is never mentioned.\r\n  4. chapterQuestions    your bank, in the usual schema:\r\n                  { id, chapter, question, options[], correct, explanation }\r\n                  Chapter strings must match the importance map exactly.\r\n\r\nSTEM LAYOUT \u2014 nothing to mark up\r\n  A plain stem, a numbered statement stem and a List-I \/ List-II stem are\r\n  each laid out automatically, and all three sit in the same sheet, so\r\n  every question on the page reads the same way.\r\n\r\nRESETS\r\n  \"Reset session\"        clears only this sitting's answers.\r\n  \"Reset my performance\" wipes lifetime mastery, weak areas and flags.\r\n\r\n=====================================================================\r\n-->\r\n\r\n<meta charset=\"utf-8\">\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=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=Newsreader:opsz,wght@6..72,400;6..72,500;6..72,600&display=swap\" rel=\"stylesheet\">\r\n\r\n<style>\r\n.cdrill{\r\n  --blue-900:#12246E; --blue-800:#1B3FCB; --blue-700:#2757E8; --blue-100:#EAF0FF; --blue-50:#F5F8FF;\r\n  --gold:#E8A317; --gold-lt:#F5C55B; --gold-bg:#FFF7E4;\r\n  --ink:#0F172A; --slate:#5B6B85; --line:#DFE6F3; --paper:#FFFFFF; --wash:#F4F7FD;\r\n  --ok:#0B8457; --ok-bg:#E7F7F0; --bad:#D3313E; --bad-bg:#FDEDEE; --warn:#C2620E;\r\n  --r:14px; --shadow:0 1px 2px rgba(16,32,74,.06),0 8px 24px -12px rgba(16,32,74,.18);\r\n  \/* \u2193 paste the same value your other pages use for --serif *\/\r\n  --serif:'Newsreader',Georgia,'Times New Roman',serif;\r\n  font-family:'Plus Jakarta Sans',system-ui,sans-serif; font-size:15px; line-height:1.55;\r\n  color:var(--ink); background:var(--wash); -webkit-font-smoothing:antialiased;\r\n  border-radius:var(--r); overflow:hidden; box-shadow:var(--shadow);\r\n}\r\n.cdrill *{box-sizing:border-box}\r\n.cdrill button{font:inherit;cursor:pointer;border:0;background:none;color:inherit;margin:0;padding:0;\r\n  min-width:0;min-height:0;width:auto;height:auto;line-height:1.4;letter-spacing:normal;text-transform:none;\r\n  box-shadow:none;border-radius:0;text-align:inherit;-webkit-appearance:none;appearance:none}\r\n.cdrill input,.cdrill select{font:inherit}\r\n.cdrill h1,.cdrill h2,.cdrill h3,.cdrill h4,.cdrill h5,.cdrill p,.cdrill ol,.cdrill ul{margin:0}\r\n.cdrill .wrap{max-width:1120px;margin:0 auto;padding:0 20px}\r\n.cdrill .tnum{font-variant-numeric:tabular-nums}\r\n.cdrill .hide{display:none !important}\r\n.cdrill ::selection{background:#CFE0FF;color:var(--ink)}\r\n.cdrill :focus-visible{outline:2.5px solid var(--gold);outline-offset:2px;border-radius:6px}\r\n@media(prefers-reduced-motion:reduce){.cdrill *{animation:none!important;transition:none!important}}\r\n\r\n\/* ---------- hero ---------- *\/\r\n.cdrill .hero{background:linear-gradient(158deg,#3A5BCE 0%,#4468DC 55%,#5077E6 100%);\r\n  color:#fff;padding:26px 0 0;position:relative;overflow:hidden}\r\n.cdrill .hero::after{content:\"\";position:absolute;inset:auto -10% -65% 58%;height:200px;\r\n  background:radial-gradient(closest-side,rgba(245,197,91,.16),transparent 72%);pointer-events:none}\r\n.cdrill .eyebrow{font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:#FFE0A3;font-weight:800}\r\n.cdrill .hero h1,\r\n.cdrill header.hero h1{margin:6px 0 2px;font-size:clamp(19px,3.2vw,26px);font-weight:800;letter-spacing:-.02em;\r\n  color:#FFFFFF !important;line-height:1.25;font-family:'Plus Jakarta Sans',system-ui,sans-serif}\r\n.cdrill .hero p{margin:0 0 16px;color:#DCE5FF;font-size:13.5px;max-width:64ch}\r\n.cdrill .hstats{display:flex;gap:9px;flex-wrap:wrap;position:relative;z-index:1}\r\n.cdrill .hstat{background:rgba(255,255,255,.13);border:1px solid rgba(255,255,255,.24);border-radius:12px;\r\n  padding:9px 15px;min-width:92px}\r\n.cdrill .hstat b{display:block;font-size:20px;font-weight:800;color:#FFE0A3;letter-spacing:-.02em;line-height:1.15}\r\n.cdrill .hstat span{font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:#DCE5FF;font-weight:700}\r\n.cdrill .tabs{display:flex;gap:8px;margin-top:22px;position:relative;z-index:1}\r\n.cdrill .tab{position:relative;padding:12px 24px 13px;border-radius:12px 12px 0 0;font-weight:700;font-size:14px;\r\n  color:#E4EBFF;display:flex;gap:8px;align-items:center;background:rgba(12,25,74,.22);\r\n  border:1px solid rgba(255,255,255,.18);border-bottom:0;transition:.16s;top:0}\r\n.cdrill .tab:hover{color:#fff;background:rgba(12,25,74,.34);top:-2px}\r\n.cdrill .tab[aria-selected=true]{background:var(--paper);color:var(--blue-900);border-color:transparent;\r\n  top:0;padding-bottom:15px;margin-bottom:-2px;font-weight:800;\r\n  box-shadow:0 -3px 12px -4px rgba(9,20,66,.35)}\r\n.cdrill .tab[aria-selected=true]::before{content:\"\";position:absolute;left:14px;right:14px;top:0;height:3px;\r\n  border-radius:0 0 3px 3px;background:linear-gradient(90deg,var(--gold),var(--gold-lt))}\r\n.cdrill .tab .pill{background:var(--gold);color:#3A2A02;font-size:10.5px;font-weight:800;padding:2px 7px;border-radius:99px}\r\n.cdrill .goldrule{height:4px;background:linear-gradient(90deg,var(--gold),var(--gold-lt))}\r\n\r\n\/* ---------- filters ---------- *\/\r\n.cdrill .filters{background:var(--paper);border-bottom:1px solid var(--line)}\r\n.cdrill .filters .wrap{display:flex;gap:10px;padding-top:14px;padding-bottom:14px;overflow-x:auto;scrollbar-width:none}\r\n.cdrill .filters .wrap::-webkit-scrollbar{display:none}\r\n.cdrill .pill-f{display:flex;flex:none;align-items:center;gap:8px;padding:9px 16px;border-radius:99px;\r\n  border:1.5px solid var(--line);background:var(--paper);font-weight:600;font-size:13.5px;color:var(--slate);\r\n  white-space:nowrap;transition:.15s}\r\n.cdrill .pill-f:hover{border-color:#B9C8EC;color:var(--ink)}\r\n.cdrill .pill-f .n{font-size:11.5px;font-weight:800;background:var(--blue-100);color:var(--blue-800);padding:2px 8px;border-radius:99px}\r\n.cdrill .pill-f[aria-pressed=true]{background:var(--blue-700);border-color:var(--blue-700);color:#fff}\r\n.cdrill .pill-f[aria-pressed=true] .n{background:rgba(255,255,255,.2);color:#fff}\r\n.cdrill .pill-f.warn{border-color:#F3C2C6;color:var(--bad)}\r\n.cdrill .pill-f.warn .n{background:var(--bad);color:#fff}\r\n.cdrill .pill-f.warn[aria-pressed=true]{background:var(--bad);border-color:var(--bad);color:#fff}\r\n.cdrill .pill-f.gold{border-color:#F2DFAE;color:#8A6206}\r\n.cdrill .pill-f.gold .n{background:var(--gold);color:#3A2A02}\r\n.cdrill .pill-f.gold[aria-pressed=true]{background:linear-gradient(180deg,var(--gold-lt),var(--gold));border-color:var(--gold);color:#3A2A02}\r\n\r\n\/* ---------- layout ---------- *\/\r\n.cdrill .grid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:20px;padding:20px 0 60px}\r\n@media(max-width:960px){.cdrill .grid{grid-template-columns:1fr}}\r\n.cdrill .card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}\r\n\r\n\/* ---------- toolbar \/ context ---------- *\/\r\n.cdrill .toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:0 0 16px}\r\n.cdrill .search{flex:1;min-width:190px;position:relative}\r\n.cdrill .search input{width:100%;padding:11px 15px 11px 38px;border:1.5px solid var(--line);border-radius:11px;background:var(--paper)}\r\n.cdrill .search svg{position:absolute;left:13px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--slate)}\r\n.cdrill .tgl{display:flex;align-items:center;gap:8px;padding:10px 15px;border:1.5px solid var(--line);border-radius:11px;\r\n  background:var(--paper);font-weight:600;font-size:13.5px;color:var(--slate);white-space:nowrap}\r\n.cdrill .tgl[aria-pressed=true]{border-color:var(--blue-700);background:var(--blue-50);color:var(--blue-800)}\r\n.cdrill .ctxbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--paper);\r\n  border:1px solid var(--line);border-left:4px solid var(--blue-700);border-radius:0 12px 12px 0;\r\n  padding:13px 18px;margin:0 0 16px;box-shadow:var(--shadow)}\r\n.cdrill .ctxlab{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--slate);font-weight:800}\r\n.cdrill .ctxsel{flex:1;min-width:210px;max-width:560px;padding:9px 12px;border:1.5px solid var(--line);border-radius:10px;\r\n  background:var(--paper);font-weight:700;font-size:14.5px;color:var(--ink);cursor:pointer}\r\n.cdrill .ctxmeta{font-size:12.5px;color:var(--slate);font-weight:600;white-space:nowrap}\r\n\r\n\/* ---------- chapter chips ---------- *\/\r\n.cdrill .chapcard{margin:0 0 16px;overflow:hidden}\r\n.cdrill .chaphead{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:11px 18px;\r\n  background:linear-gradient(90deg,var(--blue-50),#EDF3FF);border-bottom:1px solid var(--line)}\r\n.cdrill .chapcard{border-radius:var(--r)}\r\n.cdrill .chaplist{border-radius:0 0 var(--r) var(--r);overflow:hidden}\r\n.cdrill .chaphead b{font-size:13.5px;font-weight:800;color:var(--blue-800);display:flex;align-items:center;gap:8px}\r\n.cdrill .chaphead i{font-style:normal;font-size:12px;color:var(--slate);font-weight:600}\r\n.cdrill .chaphead .meta{margin-left:auto;font-size:12px;color:var(--slate);font-weight:700;white-space:nowrap}\r\n.cdrill .chaplist{display:grid;grid-template-columns:1fr;gap:1px;padding:0;background:var(--line)}\r\n@media(min-width:900px){.cdrill .chaplist{grid-template-columns:1fr 1fr}}\r\n.cdrill .chapchip{display:grid;grid-template-columns:26px minmax(0,1fr) auto auto;align-items:center;gap:10px;\r\n  padding:10px 16px;border:0;background:var(--paper);text-align:left;transition:background .13s;width:100%}\r\n.cdrill .chapchip:hover{background:var(--blue-50)}\r\n.cdrill .chapchip .no{font-size:11px;font-weight:800;color:var(--slate);font-variant-numeric:tabular-nums}\r\n.cdrill .chapchip .cn{font-size:12.6px;font-weight:600;color:var(--ink);letter-spacing:-.005em;\r\n  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-transform:none}\r\n.cdrill .chapchip .cw{flex:none;font-size:10.5px;font-weight:800;background:var(--gold-bg);color:#8A6206;\r\n  border:1px solid #F2DFAE;padding:2px 8px;border-radius:99px;white-space:nowrap}\r\n.cdrill .chapchip .cc{flex:none;font-size:11px;font-weight:800;background:var(--blue-100);color:var(--blue-800);\r\n  min-width:30px;padding:3px 8px;border-radius:6px;text-align:center;font-variant-numeric:tabular-nums}\r\n.cdrill .chapchip[aria-pressed=true]{background:var(--blue-50);box-shadow:inset 3px 0 0 var(--blue-700)}\r\n.cdrill .chapchip[aria-pressed=true] .cn{color:var(--blue-800);font-weight:700}\r\n.cdrill .chapchip[aria-pressed=true] .cc{background:var(--blue-700);color:#fff}\r\n.cdrill .chapchip .done{flex:none;font-size:10.5px;font-weight:800;color:var(--ok)}\r\n\r\n\/* ---------- question ---------- *\/\r\n.cdrill .qhead{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;\r\n  background:linear-gradient(135deg,#F1F5FB 0%,#E4ECFB 100%);border-bottom:1px solid var(--line);\r\n  border-radius:var(--r) var(--r) 0 0;padding:13px 20px}\r\n.cdrill .qcount{font-family:var(--serif);font-weight:600;color:var(--blue-900);font-size:16.3px;letter-spacing:0}\r\n.cdrill .qmeta{display:flex;gap:8px;align-items:center;flex-wrap:wrap}\r\n.cdrill .badge-ch{display:flex;align-items:center;gap:7px;background:linear-gradient(180deg,var(--gold-lt),var(--gold));\r\n  color:#3A2A02;font-weight:800;font-size:12px;padding:6px 13px;border-radius:99px;max-width:340px}\r\n.cdrill .badge-ch span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\r\n.cdrill .badge-w{display:flex;align-items:center;gap:6px;border:1.5px solid var(--gold-lt);color:#8A6206;\r\n  background:var(--gold-bg);font-weight:700;font-size:12px;padding:5px 12px;border-radius:99px}\r\n.cdrill .badge-m{font-weight:700;font-size:12px;padding:5px 12px;border-radius:99px;background:var(--blue-100);color:var(--blue-800)}\r\n.cdrill .qtags{display:flex;gap:6px;flex-wrap:wrap}\r\n.cdrill .qtag{font-weight:800;font-size:11.5px;padding:5px 11px;border-radius:99px;white-space:nowrap}\r\n.cdrill .qtag.weak{background:var(--bad-bg);color:var(--bad);border:1px solid #F3C2C6}\r\n.cdrill .qtag.flag{background:var(--gold-bg);color:#8A6206;border:1px solid #F2DFAE}\r\n.cdrill .qtag.done{background:var(--ok-bg);color:var(--ok);border:1px solid #A9DEC6}\r\n.cdrill .badge-m.weak{background:var(--bad-bg);color:var(--bad)}\r\n.cdrill .qbody{padding:22px}\r\n.cdrill .stem{font-family:var(--serif) !important;font-size:18.5px !important;line-height:1.7;\r\n  font-weight:600;margin:0 0 18px;color:#161b26;text-align:justify;hyphens:auto;-webkit-hyphens:auto}\r\n.cdrill .stem b{font-weight:700}\r\n.cdrill .qno{font-family:var(--serif);font-weight:700;color:#8A6206;margin-right:7px;\r\n  hyphens:none;-webkit-hyphens:none}\r\n.cdrill .qsheet{background:#fffef9;border:1px solid #e9e3d2;border-left:4px solid var(--gold);\r\n  border-radius:12px;padding:20px 22px;margin:0 0 18px}\r\n.cdrill .qsheet .lead,\r\n.cdrill .qsheet .intro,\r\n.cdrill .qsheet .close{font-family:var(--serif) !important;font-size:18.5px !important;line-height:1.7;\r\n  font-weight:600;color:#161b26;text-align:justify;hyphens:auto;-webkit-hyphens:auto}\r\n.cdrill .qsheet .intro{margin:16px 0 0}\r\n.cdrill .qsheet .close{margin:16px 0 0;text-align:left;hyphens:none;-webkit-hyphens:none}\r\n.cdrill .stmts{list-style:none;counter-reset:s;margin:4px 0 0;padding:0;display:block}\r\n.cdrill .stmts li{counter-increment:s;display:grid;grid-template-columns:30px 1fr;gap:4px;align-items:baseline;\r\n  font-family:var(--serif) !important;font-size:18.5px !important;font-weight:600;line-height:1.65;color:#161b26;\r\n  margin:12px 0 0 14px;text-align:justify;hyphens:auto;-webkit-hyphens:auto}\r\n.cdrill .stmts li::before{content:counter(s) \".\";font-family:var(--serif);font-weight:600;font-size:18.5px;color:#161b26}\r\n.cdrill .lists{display:grid;grid-template-columns:1fr 1fr;gap:34px;margin:18px 0 0}\r\n@media(max-width:760px){.cdrill .lists{grid-template-columns:1fr;gap:22px}}\r\n.cdrill .lcol h5{margin:0 0 10px;padding:0 0 9px;border-bottom:1px solid #DCD3BE;font-size:12px;font-weight:800;color:var(--ink)}\r\n.cdrill .lcol ul{list-style:none;margin:0;padding:0;display:grid;gap:12px}\r\n.cdrill .lcol li{display:grid;grid-template-columns:28px 1fr;align-items:baseline;\r\n  font-family:var(--serif) !important;font-size:17.5px;font-weight:600;line-height:1.6;color:#161b26}\r\n.cdrill .lcol li b{font-family:var(--serif);font-weight:600;font-size:17.3px;color:#8A6206}\r\n\r\n\/* options as bordered cards, matching the other pages *\/\r\n.cdrill .opts{display:flex;flex-direction:column;gap:9px}\r\n.cdrill .opt{font-family:var(--serif) !important;padding:12px 16px;border:1.5px solid var(--line);\r\n  border-radius:12px;cursor:pointer;display:flex;align-items:flex-start;gap:12px;transition:all .25s;\r\n  background:#fff;text-align:left;width:100%;-webkit-user-select:none;user-select:none}\r\n.cdrill .opt .txt{font-family:var(--serif) !important;font-size:18.5px !important;line-height:1.6;\r\n  color:#161b26;flex:1;min-width:0}\r\n.cdrill .opt:hover:not(:disabled){border-color:#5F86F0;background:#F6F9FF;transform:translateX(4px)}\r\n.cdrill .opt:disabled{cursor:default;opacity:1;transform:none}\r\n.cdrill .key{min-width:34px;font-family:var(--serif) !important;font-weight:600;font-size:17.3px !important;\r\n  color:#161b26;flex-shrink:0;line-height:1.6}\r\n.cdrill .opt.sel{border-color:var(--blue-700);background:#EFF5FF;box-shadow:0 0 0 1px var(--blue-700)}\r\n.cdrill .opt.sel::after{content:\"Selected\";font-family:'Plus Jakarta Sans',sans-serif;font-weight:800;\r\n  font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--blue-800);align-self:center;white-space:nowrap}\r\n.cdrill .opt.right{border-color:var(--ok);background:#F0FDF6;box-shadow:0 0 0 1px var(--ok)}\r\n.cdrill .opt.right .key{color:#086945}\r\n.cdrill .opt.wrong{border-color:var(--bad);background:#FEF4F4;box-shadow:0 0 0 1px var(--bad)}\r\n.cdrill .opt.wrong .key{color:#A81F2B}\r\n.cdrill .mark{margin-left:auto;font-family:'Plus Jakarta Sans',sans-serif;font-weight:800;font-size:10.5px;\r\n  letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;align-self:center}\r\n.cdrill .mark.r{color:var(--ok)} .cdrill .mark.w{color:var(--bad)}\r\n@media(prefers-reduced-motion:reduce){.cdrill .opt:hover:not(:disabled){transform:none}}\r\n.cdrill .hint{margin:12px 0 0;font-size:13.5px;font-weight:600;color:#8A6206;background:var(--gold-bg);\r\n  border:1px solid #F2DFAE;border-radius:10px;padding:10px 14px}\r\n.cdrill .actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:18px;align-items:center}\r\n.cdrill .btn{padding:11px 20px;border-radius:11px;font-weight:700;font-size:14px;background:var(--blue-700);color:#fff;transition:.15s}\r\n.cdrill .btn:hover{background:var(--blue-800)}\r\n.cdrill .btn:disabled{opacity:.4;cursor:not-allowed}\r\n.cdrill .btn.ghost{background:var(--paper);border:1.5px solid var(--line);color:var(--ink)}\r\n.cdrill .btn.ghost:hover{border-color:var(--blue-700);color:var(--blue-800);background:var(--blue-50)}\r\n.cdrill .flagbtn{display:flex;align-items:center;gap:7px;padding:11px 18px;border-radius:11px;font-weight:700;font-size:14px;\r\n  border:1.5px solid var(--line);background:var(--paper);color:var(--slate);margin-left:auto;transition:.15s}\r\n.cdrill .flagbtn:hover{border-color:var(--gold);color:#8A6206;background:var(--gold-bg)}\r\n.cdrill .flagbtn[aria-pressed=true]{border-color:var(--gold);background:linear-gradient(180deg,var(--gold-lt),var(--gold));color:#3A2A02}\r\n.cdrill .kbd{display:inline-block;font-family:ui-monospace,Menlo,monospace;font-size:10.5px;padding:3px 6px;background:#fff;\r\n  border:1px solid var(--line);border-bottom-width:2px;border-radius:4px;font-weight:700}\r\n.cdrill .keys{margin-top:14px;padding-top:12px;border-top:1px dashed var(--line);font-size:11.5px;color:var(--slate);\r\n  display:flex;gap:14px;flex-wrap:wrap;font-weight:600}\r\n@media(max-width:700px){.cdrill .keys{display:none}}\r\n\r\n.cdrill .verdict{display:flex;align-items:center;gap:10px;font-weight:800;font-size:14px;margin:20px 0 0}\r\n.cdrill .verdict.r{color:var(--ok)} .cdrill .verdict.w{color:var(--bad)}\r\n.cdrill .expl{margin-top:12px;border:1px solid var(--line);border-left:4px solid var(--gold);border-radius:0 12px 12px 0;\r\n  background:#FCFDFF;padding:16px 18px;font-size:14.2px;line-height:1.68}\r\n.cdrill .expl .body{font-family:'Newsreader',Georgia,serif;font-size:16px;line-height:1.7}\r\n.cdrill .expl b{color:var(--blue-800)}\r\n.cdrill .expl-h{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--slate);font-weight:800;margin-bottom:8px}\r\n\r\n  font-weight:600;font-size:13px;color:var(--blue-800);transition:.14s}\r\n.cdrill .chip:hover:not(:disabled){background:var(--blue-700);border-color:var(--blue-700);color:#fff}\r\n.cdrill .ai-out{margin-top:12px;background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:14px 16px;\r\n  font-size:14px;line-height:1.65}\r\n.cdrill .ai-out b{color:var(--blue-800)}\r\n.cdrill .offline{margin-top:12px;padding-top:10px;border-top:1px dashed #CBD8F6;font-size:11.5px;color:var(--slate);line-height:1.5}\r\n.cdrill .dots span{display:inline-block;width:6px;height:6px;border-radius:99px;background:var(--blue-700);margin-right:4px;animation:cdb 1.1s infinite}\r\n.cdrill .dots span:nth-child(2){animation-delay:.16s} .cdrill .dots span:nth-child(3){animation-delay:.32s}\r\n@keyframes cdb{0%,80%{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}\r\n\r\n\/* ---------- rail ---------- *\/\r\n.cdrill .rail{display:grid;gap:16px;align-content:start}\r\n.cdrill .rail .card{padding:16px}\r\n.cdrill .rail h3{margin:0;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--slate);font-weight:800}\r\n.cdrill .score{display:flex;align-items:baseline;gap:8px;margin:10px 0 4px}\r\n.cdrill .score b{font-size:32px;font-weight:800;letter-spacing:-.03em}\r\n.cdrill .score i{font-style:normal;color:var(--slate);font-size:13px;font-weight:600}\r\n.cdrill .bar{height:7px;border-radius:99px;background:var(--wash);overflow:hidden;margin-top:10px}\r\n.cdrill .bar>i{display:block;height:100%;background:linear-gradient(90deg,var(--ok),#37B37E);border-radius:99px;transition:width .4s}\r\n.cdrill .mini{display:flex;justify-content:space-between;font-size:12.5px;color:var(--slate);margin-top:8px;font-weight:600}\r\n.cdrill .streak{display:flex;gap:4px;margin-top:12px}\r\n.cdrill .streak i{flex:1;height:26px;border-radius:5px;background:var(--wash);border:1px solid var(--line)}\r\n.cdrill .streak i.r{background:var(--ok-bg);border-color:#A9DEC6}\r\n.cdrill .streak i.w{background:var(--bad-bg);border-color:#F3C2C6}\r\n.cdrill .nav-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 16px;\r\n  border-bottom:1px solid var(--line);flex-wrap:nowrap}\r\n.cdrill .nav-head b{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--slate);font-weight:800}\r\n.cdrill .navtoggle{flex:none;white-space:nowrap;min-width:56px;text-align:center;\r\n  font-size:12px;font-weight:800;color:var(--blue-800);padding:5px 12px;border-radius:7px;\r\n  border:1px solid var(--line);background:var(--paper);letter-spacing:.02em;transition:.14s}\r\n.cdrill .nav-head b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\r\n.cdrill .navtoggle:hover{border-color:var(--blue-700);background:var(--blue-50)}\r\n.cdrill .navgrid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px;\r\n  padding:14px 16px 12px;max-height:238px;overflow-y:auto;overflow-x:hidden}\r\n.cdrill .navgrid::-webkit-scrollbar{width:6px}\r\n.cdrill .navgrid::-webkit-scrollbar-thumb{background:#CBD5E1;border-radius:99px}\r\n.cdrill .navgrid::-webkit-scrollbar-track{background:transparent}\r\n.cdrill .nq{position:relative;box-sizing:border-box;width:100%;min-width:0;height:34px;padding:0;margin:0;\r\n  border-radius:8px;border:1px solid var(--line);background:var(--paper);\r\n  font-family:'Plus Jakarta Sans',system-ui,sans-serif;font-weight:700;font-size:11.5px;line-height:1;\r\n  color:var(--slate);display:flex;align-items:center;justify-content:center;overflow:visible;\r\n  transition:background .12s,border-color .12s,color .12s;font-variant-numeric:tabular-nums;letter-spacing:-.02em}\r\n.cdrill .nq:hover{border-color:var(--blue-700);color:var(--blue-800);background:var(--blue-50)}\r\n@media(max-width:960px){.cdrill .navgrid{grid-template-columns:repeat(10,minmax(0,1fr))}}\r\n@media(max-width:520px){.cdrill .navgrid{grid-template-columns:repeat(7,minmax(0,1fr))}}\r\n.cdrill .nq.r{background:var(--ok-bg);border-color:#8FD3B6;color:#086945}\r\n.cdrill .nq.w{background:var(--bad-bg);border-color:#F0AEB4;color:#A81F2B}\r\n.cdrill .nq.cur{border-color:var(--blue-700);background:var(--blue-700);color:#fff}\r\n.cdrill .nq .fl{position:absolute;top:-5px;right:-4px;font-size:9.5px;line-height:1;\r\n  filter:drop-shadow(0 0 2px #fff)}\r\n.cdrill .nq.mastered::after{content:\"\";position:absolute;bottom:3px;left:50%;transform:translateX(-50%);\r\n  width:4px;height:4px;border-radius:99px;background:var(--ok)}\r\n.cdrill .legend{display:flex;gap:12px;flex-wrap:wrap;font-size:10.5px;color:var(--slate);font-weight:600;\r\n  padding:10px 16px 14px;border-top:1px solid var(--line);margin-top:4px}\r\n.cdrill .legend i{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:5px;vertical-align:-1px}\r\n\r\n\/* ---------- performance ---------- *\/\r\n.cdrill .perf{padding:24px 24px 32px;display:grid;gap:34px}\r\n.cdrill .ph{margin:0 0 10px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--slate);font-weight:800}\r\n\r\n\/* ---------- performance blocks ---------- *\/\r\n.cdrill .pblock{border:1px solid var(--line);border-radius:16px;background:var(--paper);overflow:hidden}\r\n.cdrill .pbh{display:flex;align-items:flex-start;gap:16px;padding:20px 24px 18px;\r\n  background:linear-gradient(180deg,#FBFCFF,#F6F9FF);border-bottom:1px solid var(--line)}\r\n.cdrill .pbh .txt{flex:1;min-width:0}\r\n.cdrill .pbh h4{font-size:17px;font-weight:800;letter-spacing:-.015em;color:var(--ink);margin:0 0 7px;\r\n  display:flex;align-items:center;gap:9px}\r\n.cdrill .pbh h4 .dot{width:7px;height:7px;border-radius:99px;background:var(--gold);flex:none}\r\n.cdrill .pbh p{font-size:13px;color:var(--slate);line-height:1.6;margin:0}\r\n.cdrill .pbh .pbtag{flex:none;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;\r\n  color:var(--blue-800);background:var(--blue-100);border-radius:99px;padding:6px 13px;white-space:nowrap}\r\n.cdrill .bars{padding:8px 24px 18px}\r\n.cdrill .subhead{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;padding:18px 24px 2px;\r\n  border-top:1px solid #EEF2F9;margin-top:6px}\r\n.cdrill .subhead:first-of-type{border-top:0;margin-top:0}\r\n.cdrill .subhead h5{font-size:12.5px;font-weight:800;color:var(--ink);letter-spacing:.01em;margin:0}\r\n.cdrill .subhead span{font-size:11.8px;color:var(--slate);font-weight:600}\r\n.cdrill .hero2{display:grid;grid-template-columns:260px 1fr;gap:18px}\r\n@media(max-width:860px){.cdrill .hero2{grid-template-columns:1fr}}\r\n.cdrill .ring-card{background:linear-gradient(150deg,var(--blue-900),var(--blue-800) 70%,var(--blue-700));border-radius:var(--r);\r\n  padding:24px 20px;color:#fff;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center}\r\n.cdrill .ring{position:relative;width:150px;height:150px}\r\n.cdrill .ring svg{transform:rotate(-90deg)}\r\n.cdrill .ring .bg{fill:none;stroke:rgba(255,255,255,.14);stroke-width:11}\r\n.cdrill .ring .fg{fill:none;stroke:var(--gold-lt);stroke-width:11;stroke-linecap:round;transition:stroke-dashoffset 1s ease}\r\n.cdrill .ring-txt{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}\r\n.cdrill .ring-txt b{font-size:40px;font-weight:800;color:var(--gold-lt);letter-spacing:-.03em;line-height:1}\r\n.cdrill .ring-txt span{font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:#BFDBFE;margin-top:5px;font-weight:700}\r\n.cdrill .verdict2{margin-top:14px;font-size:13.4px;color:#DBEAFE;line-height:1.55}\r\n.cdrill .verdict2 b{color:#fff}\r\n.cdrill .coach{border:1px solid var(--line);border-radius:var(--r);padding:18px 20px;background:var(--paper)}\r\n.cdrill .coach h4{font-size:14.5px;font-weight:800;margin-bottom:12px;display:flex;gap:8px;align-items:center}\r\n.cdrill .reco{display:flex;gap:12px;padding:11px 0;border-bottom:1px dashed var(--line);align-items:flex-start}\r\n.cdrill .reco:last-child{border-bottom:0}\r\n.cdrill .reco .ic{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;font-size:13px;flex:none;margin-top:1px}\r\n.cdrill .reco .ic.hot{background:var(--bad-bg);color:var(--bad)}\r\n.cdrill .reco .ic.warm{background:var(--gold-bg);color:#8A6206}\r\n.cdrill .reco .ic.cool{background:var(--blue-100);color:var(--blue-800)}\r\n.cdrill .reco .ic.good{background:var(--ok-bg);color:var(--ok)}\r\n.cdrill .reco p{font-size:13.8px;line-height:1.55}\r\n.cdrill .reco .go{margin-left:auto;flex:none;background:var(--blue-50);color:var(--blue-800);border:1px solid #D4E2FB;\r\n  border-radius:8px;padding:6px 12px;font-size:11.5px;font-weight:800;white-space:nowrap;transition:.15s}\r\n.cdrill .reco .go:hover{background:var(--blue-700);color:#fff}\r\n.cdrill .planner{background:linear-gradient(135deg,#FFFDF6,#FFF8E8);border:1px solid #EADFC2;border-left:4px solid var(--gold);\r\n  border-radius:0 var(--r) var(--r) 0;padding:18px 20px;display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap}\r\n.cdrill .planner h4{font-size:17px;font-weight:800;margin-bottom:5px;letter-spacing:-.01em}\r\n.cdrill .planner p{font-size:13px;color:var(--slate);line-height:1.55;max-width:62ch}\r\n.cdrill .pbtns{display:flex;gap:10px;flex-wrap:wrap}\r\n.cdrill .pbtn{padding:11px 18px;border:1.5px solid var(--gold);border-radius:11px;background:#fff;color:#8A6206;\r\n  font-weight:800;font-size:13.5px;display:flex;gap:7px;align-items:center;white-space:nowrap;transition:.15s}\r\n.cdrill .pbtn:hover{background:var(--gold-bg)}\r\n.cdrill .pbtn.primary{background:linear-gradient(180deg,var(--gold-lt),var(--gold));color:#3A2A02;border-color:var(--gold)}\r\n.cdrill .kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}\r\n.cdrill .kpi{border:1px solid var(--line);border-radius:12px;padding:15px;background:linear-gradient(180deg,#fff,var(--blue-50))}\r\n.cdrill .kpi b{display:block;font-size:26px;font-weight:800;letter-spacing:-.03em}\r\n.cdrill .kpi span{font-size:11.5px;color:var(--slate);font-weight:700;text-transform:uppercase;letter-spacing:.06em}\r\n.cdrill .tblwrap{overflow-x:auto;border:1px solid var(--line);border-radius:12px;background:#fff}\r\n.cdrill table.perf-t{border-collapse:collapse;width:100%;font-size:13px;min-width:760px}\r\n.cdrill table.perf-t th,.cdrill table.perf-t td{padding:10px;border-bottom:1px solid #EEF2F9;text-align:center;vertical-align:middle}\r\n.cdrill table.perf-t thead th{background:var(--blue-900);color:#fff;font-weight:700;font-size:11px;letter-spacing:.05em;text-transform:uppercase}\r\n.cdrill table.perf-t th:first-child,.cdrill table.perf-t td:first-child{text-align:left;padding-left:14px}\r\n.cdrill table.perf-t td:first-child{font-weight:700;max-width:280px;line-height:1.35;background:#FBFCFE}\r\n.cdrill .sub{display:block;font-size:10.6px;color:var(--slate);font-weight:600;margin-top:3px}\r\n.cdrill .tbar{height:6px;border-radius:99px;background:var(--wash);overflow:hidden;min-width:80px}\r\n.cdrill .tbar>i{display:block;height:100%;border-radius:99px}\r\n.cdrill .tag{display:inline-block;font-size:10.4px;font-weight:800;padding:3px 9px;border-radius:99px;text-transform:uppercase;letter-spacing:.04em}\r\n.cdrill .tag.hot{background:var(--bad-bg);color:var(--bad)}\r\n.cdrill .tag.warm{background:var(--gold-bg);color:#8A6206}\r\n.cdrill .tag.ok{background:var(--blue-100);color:var(--blue-800)}\r\n.cdrill .tag.good{background:var(--ok-bg);color:var(--ok)}\r\n.cdrill .tag.na{background:#F1F5F9;color:var(--slate)}\r\n.cdrill .mini-go{border:1px solid var(--line);border-radius:8px;padding:5px 10px;font-size:11.2px;font-weight:800;color:var(--blue-800);transition:.15s}\r\n.cdrill .mini-go:hover{background:var(--blue-700);color:#fff;border-color:var(--blue-700)}\r\n.cdrill .lrow{display:grid;grid-template-columns:minmax(150px,1.2fr) 2.4fr 96px;gap:18px;align-items:center;\r\n  padding:12px 10px;border-radius:9px;transition:background .13s;margin:0 -10px}\r\n.cdrill .lrow:hover{background:#FAFCFF}\r\n.cdrill .lrow+.lrow{border-top:1px solid #F1F5FB}\r\n@media(max-width:620px){.cdrill .lrow{grid-template-columns:1fr auto;row-gap:6px}.cdrill .lrow .ltrack{grid-column:1\/-1}}\r\n.cdrill .lname{font-size:13.4px;font-weight:700;line-height:1.35}\r\n.cdrill .lsub{display:block;font-size:10.8px;font-weight:600;color:var(--slate);margin-top:4px}\r\n.cdrill .ltrack{background:#EEF2F9;border-radius:99px;height:11px;overflow:hidden;\r\n  box-shadow:inset 0 1px 2px rgba(16,32,74,.05)}\r\n.cdrill .lfill{height:100%;border-radius:99px;transition:width .8s cubic-bezier(.22,.9,.28,1)}\r\n.cdrill .lval{text-align:right;font-size:16px;font-weight:800;letter-spacing:-.02em}\r\n.cdrill .lval small{display:block;font-size:10px;font-weight:700;color:var(--slate);text-transform:uppercase;letter-spacing:.05em;margin-top:2px}\r\n.cdrill .split{display:grid;grid-template-columns:1fr 1fr;gap:16px}\r\n@media(max-width:860px){.cdrill .split{grid-template-columns:1fr}}\r\n.cdrill .panel{border:1px solid var(--line);border-radius:12px;padding:16px 18px}\r\n.cdrill .rev{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:#FAFBFE;border-left:3px solid var(--gold);\r\n  border-radius:8px;padding:10px 12px;margin-bottom:8px;font-size:12.6px;transition:.15s}\r\n.cdrill .rev:hover{background:var(--gold-bg);transform:translateX(3px)}\r\n.cdrill .rev .n{font-weight:800;color:#8A6206;flex:none}\r\n.cdrill .rev .t{flex:1;color:var(--slate);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\r\n.cdrill .rev .d{background:var(--gold);color:#3A2A02;padding:2px 8px;border-radius:99px;font-size:10.2px;font-weight:800;white-space:nowrap}\r\n.cdrill .danger{border:1px dashed #F3C2C6;border-radius:12px;background:#FFFAFA;padding:16px 18px;\r\n  display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}\r\n.cdrill .danger p{font-size:13px;color:var(--slate);flex:1;min-width:220px;line-height:1.6}\r\n.cdrill .danger b{color:var(--bad)}\r\n.cdrill .dbtn{padding:11px 20px;background:#fff;border:1.5px solid #F3C2C6;border-radius:11px;color:var(--bad);\r\n  font-size:13px;font-weight:800;white-space:nowrap;transition:.15s}\r\n.cdrill .dbtn:hover{background:var(--bad);border-color:var(--bad);color:#fff}\r\n.cdrill .empty{text-align:center;padding:40px 20px;color:var(--slate)}\r\n.cdrill .empty b{display:block;color:var(--ink);font-size:16px;margin-bottom:6px}\r\n.cdrill .toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);background:var(--blue-900);color:#fff;\r\n  padding:12px 22px;border-radius:11px;font-weight:700;font-size:13.5px;z-index:9999;display:none;box-shadow:var(--shadow)}\r\n.cdrill .toast.show{display:block}\r\n.cdrill .toast.ok{background:var(--ok)}\r\n\r\n\/* ---------- content protection ---------- *\/\r\n.cdrill{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;\r\n  -webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}\r\n\/* inputs must stay usable, or the search box cannot be edited *\/\r\n.cdrill input,.cdrill textarea,.cdrill select{-webkit-user-select:text;user-select:text}\r\n.cdrill.allow-select{-webkit-user-select:text;user-select:text}\r\n.cdrill img,.cdrill svg{-webkit-user-drag:none;user-drag:none;pointer-events:none}\r\n.cdrill .navtoggle,.cdrill .tab,.cdrill button{-webkit-user-drag:none}\r\n\/* screen obscured while the window is not in front *\/\r\n.cdrill.veiled .qbody,.cdrill.veiled .perf,.cdrill.veiled .chaplist,.cdrill.veiled .yearlist{\r\n  filter:blur(9px);transition:filter .12s}\r\n.cdrill .veilmsg{position:absolute;inset:0;display:none;align-items:center;justify-content:center;\r\n  background:rgba(244,247,253,.72);z-index:40;font-weight:800;font-size:13.5px;color:var(--blue-900);\r\n  text-align:center;padding:20px;border-radius:var(--r)}\r\n.cdrill.veiled .veilmsg{display:flex}\r\n.cdrill{position:relative}\r\n\/* what a print or PDF export gets instead of the paper *\/\r\n.cdrill-printblock{display:none}\r\n@media print{\r\n  .cdrill{display:none!important}\r\n  .cdrill-printblock{display:block!important;padding:60px 40px;text-align:center;\r\n    font-family:'Plus Jakarta Sans',system-ui,sans-serif;color:#12246E}\r\n  .cdrill-printblock h2{font-size:20px;font-weight:800;margin:0 0 10px}\r\n  .cdrill-printblock p{font-size:13.5px;color:#5B6B85;line-height:1.7;max-width:60ch;margin:0 auto}\r\n}\r\n\r\n\/* ---------- mobile ---------- *\/\r\n@media(max-width:640px){\r\n  .cdrill .wrap{padding:0 14px}\r\n\r\n  \/* hero: tighter, and the stat tiles share the row evenly *\/\r\n  .cdrill .hero{padding-top:18px}\r\n  .cdrill .hero h1{font-size:19px}\r\n  .cdrill .hero p{font-size:12.6px;margin-bottom:14px}\r\n  .cdrill .hstats{gap:7px}\r\n  .cdrill .hstat{flex:1 1 0;min-width:0;padding:8px 10px;text-align:center}\r\n  .cdrill .hstat b{font-size:17px}\r\n  .cdrill .hstat span{font-size:8.8px;letter-spacing:.06em}\r\n\r\n  \/* tabs scroll sideways instead of wrapping onto two lines *\/\r\n  .cdrill .tabs{margin-top:16px;gap:5px;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;\r\n    -webkit-overflow-scrolling:touch}\r\n  .cdrill .tabs::-webkit-scrollbar{display:none}\r\n  .cdrill .tab{flex:none;padding:10px 15px;font-size:12.6px;gap:6px;white-space:nowrap}\r\n  .cdrill .tab[aria-selected=true]{padding-bottom:13px}\r\n\r\n  \/* THE FIX: pills were shrinking to fit instead of scrolling, which cut\r\n     every label in half. flex:none makes the row scroll as intended. *\/\r\n  .cdrill .filters .wrap{padding-top:11px;padding-bottom:11px;gap:8px;\r\n    -webkit-overflow-scrolling:touch}\r\n  .cdrill .pill-f{flex:none;padding:8px 14px;font-size:12.6px;gap:6px}\r\n  .cdrill .pill-f .n{font-size:10.5px;padding:2px 7px}\r\n\r\n  \/* toolbar stacks *\/\r\n  .cdrill .grid{padding:14px 0 40px;gap:14px}\r\n  .cdrill .toolbar{gap:8px;padding-bottom:12px}\r\n  .cdrill .search{flex:1 1 100%;min-width:0}\r\n  .cdrill .tgl{flex:1;justify-content:center;padding:9px 12px;font-size:12.6px}\r\n\r\n  \/* question card *\/\r\n  .cdrill .qhead{padding:11px 14px;gap:8px}\r\n  .cdrill .qcount{font-size:15px;width:100%}\r\n  .cdrill .qmeta{gap:6px}\r\n  .cdrill .badge-ch{max-width:100%;font-size:11px;padding:5px 11px}\r\n  .cdrill .badge-m,.cdrill .badge-src,.cdrill .qtag{font-size:10.6px;padding:4px 10px}\r\n  .cdrill .qbody{padding:16px 14px 18px}\r\n  .cdrill .qsheet{padding:15px 15px 16px;border-radius:0 9px 9px 0}\r\n  .cdrill .stem,.cdrill .qsheet .lead,.cdrill .qsheet .intro,.cdrill .qsheet .close,\r\n  .cdrill .stmts li,.cdrill .opt .txt{font-size:16.6px !important;line-height:1.6}\r\n  .cdrill .lists{grid-template-columns:1fr;gap:18px}\r\n  .cdrill .opt{padding:11px 13px;gap:9px}\r\n  .cdrill .key{min-width:28px;font-size:16px !important}\r\n  .cdrill .opt.sel::after{display:none}\r\n  .cdrill .actions{gap:7px}\r\n  .cdrill .btn{flex:1;padding:11px 14px;font-size:13.4px;text-align:center}\r\n  .cdrill .flagbtn{margin-left:0;flex:1 1 100%;justify-content:center;padding:11px 14px}\r\n  .cdrill .expl{padding:14px 15px}\r\n  .cdrill .expl .body{font-size:15.4px}\r\n\r\n  \/* chapter list and navigator *\/\r\n  .cdrill .chaphead{padding:10px 14px;gap:8px}\r\n  .cdrill .chaphead .meta{margin-left:0;flex:1 1 100%;white-space:normal}\r\n  .cdrill .chapchip{padding:10px 14px;gap:7px}\r\n  .cdrill .chapchip .cn{font-size:12.2px}\r\n  .cdrill .yearlist{padding:14px;gap:8px}\r\n  .cdrill .ychip{flex:1 1 calc(33.333% - 6px);min-width:0;padding:10px 8px}\r\n  .cdrill .navgrid{grid-template-columns:repeat(8,minmax(0,1fr));max-height:none}\r\n  .cdrill .rail .card{padding:14px}\r\n\r\n  \/* performance and analytics *\/\r\n  .cdrill .perf{padding:16px 14px 24px;gap:22px}\r\n  .cdrill .pbh{padding:16px 15px 14px;gap:10px}\r\n  .cdrill .pbh h4{font-size:15.4px}\r\n  .cdrill .pbh p{font-size:12.4px}\r\n  .cdrill .bars{padding:6px 15px 14px}\r\n  .cdrill .hero2{gap:14px}\r\n  .cdrill .ring-card{padding:20px 16px}\r\n  .cdrill .coach{padding:15px}\r\n  .cdrill .reco{gap:10px}\r\n  .cdrill .reco p{font-size:13px}\r\n  .cdrill .reco .go{margin-left:0;flex:1 1 100%;margin-top:6px}\r\n  .cdrill .planner{padding:15px;gap:12px}\r\n  .cdrill .pbtns{width:100%;gap:8px}\r\n  .cdrill .pbtn{flex:1 1 100%;justify-content:center;padding:12px 14px}\r\n  .cdrill .kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}\r\n  .cdrill .kpi{padding:12px}\r\n  .cdrill .kpi b{font-size:22px}\r\n  .cdrill .kpi span{font-size:10.4px}\r\n  .cdrill .panel{padding:14px}\r\n  .cdrill .danger{padding:14px}\r\n  .cdrill .dbtn{width:100%}\r\n  .cdrill .cyc{padding:20px 14px 14px;gap:8px}\r\n  .cdrill .cycbar{min-width:42px}\r\n  .cdrill .toast{left:14px;right:14px;transform:none;text-align:center;bottom:16px}\r\n}\r\n@media(max-width:380px){\r\n  .cdrill .hstat b{font-size:15.5px}\r\n  .cdrill .navgrid{grid-template-columns:repeat(6,minmax(0,1fr))}\r\n  .cdrill .ychip{flex:1 1 calc(50% - 5px)}\r\n  .cdrill .kpis{grid-template-columns:1fr}\r\n}\r\n<\/style>\r\n\r\n<div class=\"cdrill\" id=\"cdRoot\">\r\n\r\n  <header class=\"hero\">\r\n    <div class=\"wrap\">\r\n      <div class=\"eyebrow\" id=\"cdEyebrow\">CSS ADDA \u00b7 PromotionExams.com<\/div>\r\n      <h1 id=\"cdTopic\">Chapter-wise Test Series<\/h1>\r\n      <p id=\"cdSub\">Chapter drills with a planner that builds your next sitting for you.<\/p>\r\n      <div class=\"hstats\">\r\n        <div class=\"hstat\"><b class=\"tnum\" id=\"hQ\">0<\/b><span>Questions<\/span><\/div>\r\n        <div class=\"hstat\"><b class=\"tnum\" id=\"hCh\">0<\/b><span>Chapters<\/span><\/div>\r\n        <div class=\"hstat\"><b class=\"tnum\" id=\"hMastered\">0%<\/b><span>Mastered<\/span><\/div>\r\n        <div class=\"hstat\"><b class=\"tnum\" id=\"hReady\">\u2014<\/b><span>Readiness<\/span><\/div>\r\n      <\/div>\r\n      <div class=\"tabs\" role=\"tablist\">\r\n        <button class=\"tab\" role=\"tab\" aria-selected=\"true\" data-tab=\"quiz\">\u270f\ufe0f Practice<\/button>\r\n        <button class=\"tab\" role=\"tab\" aria-selected=\"false\" data-tab=\"perf\">\ud83d\udcca My Performance <span class=\"pill hide\" id=\"perfPill\">!<\/span><\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/header>\r\n  <div class=\"goldrule\"><\/div>\r\n\r\n  <div class=\"filters\" id=\"cdFilters\">\r\n    <div class=\"wrap\" role=\"group\" aria-label=\"Filter questions\">\r\n      <button class=\"pill-f\" data-f=\"all\" aria-pressed=\"true\">\ud83d\udccb All questions<span class=\"n tnum\" id=\"fAll\">0<\/span><\/button>\r\n      <button class=\"pill-f\" data-f=\"chapter\">\ud83d\udcda By chapter<\/button>\r\n      <button class=\"pill-f gold hide\" data-f=\"session\" id=\"pillSession\">\ud83e\udde9 <span id=\"sessLabel\">My session<\/span><span class=\"n tnum\" id=\"fSess\">0<\/span><\/button>\r\n      <button class=\"pill-f warn\" data-f=\"weak\">\u26a0\ufe0f Weak areas<span class=\"n tnum\" id=\"fWeak\">0<\/span><\/button>\r\n      <button class=\"pill-f\" data-f=\"flagged\">\ud83d\udd16 Flagged<span class=\"n tnum\" id=\"fFlag\">0<\/span><\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"wrap\">\r\n    <!-- ============ PRACTICE ============ -->\r\n    <div class=\"grid\" id=\"viewQuiz\">\r\n      <div>\r\n        <div class=\"toolbar\">\r\n          <div class=\"search\">\r\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><path d=\"M20 20l-3.5-3.5\"\/><\/svg>\r\n            <input id=\"cdSearch\" placeholder=\"Search a phrase or a rule number\" aria-label=\"Search questions\">\r\n          <\/div>\r\n          <button class=\"tgl\" id=\"tglUn\" aria-pressed=\"false\">\u25fb Unattempted only<\/button>\r\n          <button class=\"tgl\" id=\"tglReset\">\u21ba Reset session<\/button>\r\n        <\/div>\r\n\r\n        <section class=\"card chapcard hide\" id=\"chapPanel\">\r\n          <div class=\"chaphead\">\r\n            <b>\ud83d\udcda Filter by chapter<\/b><i id=\"chapHint\"><\/i>\r\n            <span class=\"meta\" id=\"ctxMeta\"><\/span>\r\n          <\/div>\r\n          <div class=\"chaplist\" id=\"chapList\" role=\"group\" aria-label=\"Choose chapter\"><\/div>\r\n        <\/section>\r\n\r\n        <section class=\"card hide\" id=\"emptyCard\">\r\n          <div class=\"qhead\"><span class=\"qcount\">Nothing to show<\/span><\/div>\r\n          <div class=\"empty\" id=\"emptyBody\"><\/div>\r\n        <\/section>\r\n\r\n        <section class=\"card\" id=\"qCard\">\r\n          <div class=\"qhead\">\r\n            <span class=\"qcount\" id=\"qCount\">Question 1 of 1<\/span>\r\n            <span class=\"qmeta\">\r\n              <span class=\"badge-m\" id=\"qMastery\">Not seen yet<\/span>\r\n              <span class=\"badge-ch\"><span id=\"qChap\">Chapter<\/span><\/span>\r\n              <span id=\"qTags\" class=\"qtags\"><\/span>\r\n            <\/span>\r\n          <\/div>\r\n          <div class=\"qbody\">\r\n            <p class=\"stem\" id=\"qStem\"><\/p>\r\n            <div class=\"opts\" id=\"qOpts\"><\/div>\r\n            <div class=\"actions\">\r\n              <button class=\"btn\" id=\"btnCheck\">Check answer<\/button>\r\n              <button class=\"btn ghost\" id=\"btnPrev\">\u2190 Previous<\/button>\r\n              <button class=\"btn ghost\" id=\"btnNext\">Next \u2192<\/button>\r\n              <button class=\"flagbtn\" id=\"btnFlag\" aria-pressed=\"false\"><span id=\"flagIco\">\ud83c\udff3\ufe0f<\/span><span id=\"flagTxt\">Flag for review<\/span><\/button>\r\n            <\/div>\r\n            <p class=\"hint hide\" id=\"pickHint\">Choose an option above, then check your answer.<\/p>\r\n\r\n            <div id=\"result\" class=\"hide\">\r\n              <div class=\"verdict\" id=\"verdict\"><\/div>\r\n              <div class=\"expl\">\r\n                <div class=\"expl-h\">Source &amp; reasoning<\/div>\r\n                <div id=\"explBody\" class=\"body\"><\/div>\r\n              <\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/section>\r\n      <\/div>\r\n\r\n      <aside class=\"rail\">\r\n        <section class=\"card\" id=\"navCard\" style=\"padding:0\">\r\n          <div class=\"nav-head\"><b id=\"navTitle\">Navigator<\/b><button class=\"navtoggle\" id=\"navToggle\">Hide<\/button><\/div>\r\n          <div class=\"navgrid\" id=\"navGrid\"><\/div>\r\n          <div class=\"legend\">\r\n            <span><i style=\"background:var(--ok-bg);border:1.5px solid #8FD3B6\"><\/i>Correct<\/span>\r\n            <span><i style=\"background:var(--bad-bg);border:1.5px solid #F0AEB4\"><\/i>Wrong<\/span>\r\n            <span><i style=\"background:var(--ok)\"><\/i>Mastered<\/span>\r\n          <\/div>\r\n        <\/section>\r\n        <div class=\"card\">\r\n          <h3>This session<\/h3>\r\n          <div class=\"score\"><b id=\"sPct\">\u2014<\/b><i id=\"sFrac\">0 of 0 correct<\/i><\/div>\r\n          <div class=\"bar\"><i id=\"sBar\" style=\"width:0\"><\/i><\/div>\r\n          <div class=\"mini\"><span id=\"sSeen\">0 attempted<\/span><span id=\"sLeft\">0 left here<\/span><\/div>\r\n          <div class=\"streak\" id=\"streak\"><\/div>\r\n        <\/div>\r\n        <div class=\"card\">\r\n          <h3 id=\"wHead\">Share on screen<\/h3>\r\n          <div class=\"score\"><b id=\"wPct\" style=\"color:#8A6206\">\u2014<\/b><i id=\"wUnit\">of this bank<\/i><\/div>\r\n          <p style=\"margin:8px 0 0;font-size:12.8px;color:var(--slate);line-height:1.55\" id=\"wNote\"><\/p>\r\n        <\/div>\r\n        <div class=\"card hide\" id=\"srcCard\">\r\n          <h3>Source text<\/h3>\r\n          <p style=\"margin:9px 0 12px;font-size:12.8px;color:var(--slate);line-height:1.55\">Every explanation here is drawn from the full text of the subject. Open it when a citation needs checking.<\/p>\r\n          <a class=\"btn\" id=\"srcLink\" href=\"#\" target=\"_blank\" rel=\"noopener\" style=\"display:block;text-align:center;text-decoration:none\">\ud83d\udcd6 Read the source<\/a>\r\n        <\/div>\r\n      <\/aside>\r\n    <\/div>\r\n\r\n    <!-- ============ PERFORMANCE ============ -->\r\n    <div class=\"hide\" id=\"viewPerf\">\r\n      <section class=\"card\" style=\"margin:20px 0 60px\">\r\n        <div class=\"qhead\"><span class=\"qcount\">My Performance<\/span><span class=\"badge-w\" id=\"perfCount\">0 attempted<\/span><\/div>\r\n        <div class=\"perf\" id=\"perfBody\"><\/div>\r\n      <\/section>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"veilmsg\" id=\"veilMsg\">Paused \u2014 bring this window back to the front to continue<\/div>\r\n  <div class=\"toast\" id=\"toast\"><\/div>\r\n<\/div>\r\n\r\n<div class=\"cdrill-printblock\">\r\n  <h2>This test series is not available in print<\/h2>\r\n  <p>The questions, explanations and your progress are licensed for use on\r\n     PromotionExams.com and cannot be printed or saved as a PDF. Please\r\n     work through them on screen.<\/p>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n\"use strict\";\r\n\r\n\/* =====================================================================\r\n   1. CONFIGURATION  \u2190 EDIT PER SUBJECT\r\n   ===================================================================== *\/\r\nconst CFG = {\r\n  quizId : 'subject-chapterwise',   \/\/ unique per subject \u2014 this is the progress key,\r\n                                    \/\/ so change it for every new page you publish\r\n  topic  : 'Public Procurement (Preference to Make in India) Order',          \/\/ e.g. 'CCS (Conduct) Rules, 1964'\r\n  eyebrow: '',                      \/\/ e.g. 'UPSC SO \/ Steno LDCE \u00b7 Paper II' \u2014 leave blank to hide\r\n  sub    : 'Chapter drills with a planner that builds your next sitting for you.',\r\n\r\n  \/* --- SOURCE PAGE ---------------------------------------------------\r\n     The page on your site that carries the full text of this subject.\r\n     A \"Read the source\" card then appears in the rail. Leave it blank\r\n     and the card disappears.                                            *\/\r\n  sourceUrl   : '',                 \/\/ e.g. 'https:\/\/promotionexams.com\/your-source-page\/'\r\n  sourceLabel : 'full source text', \/\/ shown on the link\r\n\r\n  \/* --- IMPORTANCE ----------------------------------------------------\r\n     You set the importance of each chapter yourself, in chapterImportance\r\n     below. It drives the ranking, the study plan and the planner \u2014 the\r\n     bigger the number, the more of your next sitting that chapter gets.\r\n     It is never described as exam weightage, so it is safe on a subject\r\n     with no previous year papers.\r\n     Leave the whole map empty and the page falls back silently to each\r\n     chapter's share of the bank, and stops mentioning importance at all. *\/\r\n\r\n  masteryThreshold : 3,     \/\/ clean correct answers before a question counts as mastered\r\n  weakThreshold    : 1,     \/\/ wrong attempts before a question is flagged weak\r\n\r\n  priorAccuracy : 0.30,     \/\/ expected-score model: shrink raw accuracy toward this\r\n  priorStrength : 6,\r\n  retention     : { baseDays:3, growth:2.5, riskBelow:0.70 },\r\n\r\n  sessionSize : 25,         \/\/ Focused set\r\n  mockSize    : 50          \/\/ Mock paper\r\n};\r\n\r\n\/* =====================================================================\r\n   2. CHAPTER IMPORTANCE  \u2190 you set this by hand\r\n   Keys do NOT have to match your chapter names exactly. Anything that\r\n   starts with a chapter or appendix number is matched on that number\r\n   alone, so 'Ch 2' finds 'CH 2: GENERAL OUTLINES OF THE SYSTEM OF\r\n   ACCOUNTS', and 'Apndx 5' finds 'APPENDIX 5: PRINCIPLES AND RULES...'.\r\n   Chapter, Chap, CH, Ch-2, 2. \u2014 all read the same. For appendices:\r\n   Appendix, Apndx, Appx, Annex, Annexure, in digits or roman numerals.\r\n   A key with no number falls back to a loose text match.\r\n   Numbers are relative: they need NOT total 100. A chapter you leave\r\n   out is given its share of the bank instead and is marked \"not rated\r\n   yet\" in the performance table.\r\n   Empty this map altogether to switch importance off everywhere.\r\n   ===================================================================== *\/\r\nconst chapterImportance = {\r\n  'Ch 1' : 30,\r\n  'Ch 2' : 45,\r\n  'Ch 3' : 25\r\n  \/\/ 'Apndx 1' : 25,   \u2190 appendices work the same way\r\n};\r\n\r\n\/* =====================================================================\r\n   3. QUESTION BANK  \u2190 PASTE YOUR BANK HERE\r\n   { id, chapter, question, options[], correct, explanation }\r\n     id          unique within its chapter\r\n     chapter     must match a key in chapterImportance exactly\r\n     correct     0-indexed\r\n     explanation may contain HTML; cite the rule or paragraph in <b> tags\r\n   A stem may carry \"\\n1. ...\" statement lines or a \"List-I \/ List-II\"\r\n   block \u2014 both are laid out automatically, and so is a plain stem.\r\n   The three below are only samples so the page renders on first open.\r\n   Delete them.\r\n   ===================================================================== *\/\r\nconst chapterQuestions =  [\r\n\r\n{\r\n    id: 1,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"The 'Public Procurement (Preference to Make in India), Order 2017' is issued pursuant to which provision of the General Financial Rules, 2017?\",\r\n    options: [\r\n      \"Rule 153(iii)\",\r\n      \"Rule 130\",\r\n      \"Rule 161(iv)\",\r\n      \"Rule 151(iii)\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 1 of the Order.<\/b><br>The Order is issued pursuant to <b>Rule 153(iii)<\/b> of the GFR 2017.<br><br>The distractors are all real GFR rules cited elsewhere in the same Order, used as plausible near-misses: <b>Rule 130<\/b> defines 'Works', <b>Rule 161(iv)<\/b> governs global tender enquiry, and <b>Rule 151(iii)<\/b> governs debarment \u2014 none of these is the enabling rule for the Order itself.\"\r\n  },\r\n\r\n  {\r\n    id: 2,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"For the purposes of the Order, 'local content' means the amount of value added in India, which shall (unless otherwise prescribed by the Nodal Ministry) be:\",\r\n    options: [\r\n      \"The total value of the item procured (excluding net domestic indirect taxes) minus the value of imported content (including all customs duties), as a proportion of the total value, in percent\",\r\n      \"The total value of the item procured (including net domestic indirect taxes) minus the value of imported content (excluding customs duties), as a proportion of the total value, in percent\",\r\n      \"The value of imported content as a proportion of the total value of the item procured, in percent\",\r\n      \"The total value of the item procured minus the profit margin of the supplier, in percent\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 2 (Definitions), 'Local content'.<\/b><br>Local content is the total value of the item procured <b>excluding net domestic indirect taxes<\/b>, minus the value of imported content <b>including all customs duties<\/b>, as a proportion of the total value, in percent.<br><br>(b) reverses the two tax treatments (indirect taxes and customs duties). (c) measures the imported content instead of the value added in India. (d) substitutes an irrelevant 'profit margin' basis not mentioned in the Order.\"\r\n  },\r\n\r\n  {\r\n    id: 3,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"As per the explanatory notes for calculation of local content, which of the following shall be excluded from the calculation of local content?\\n1. Imported items sourced locally from resellers\/distributors\\n2. License fees, royalties and technical charges paid out of India\\n3. Procurement\/supply of repackaged, refurbished or rebranded imported products\\nSelect the correct answer using the code given below:\",\r\n    options: [\r\n      \"1, 2 and 3\",\r\n      \"1 and 2 only\",\r\n      \"2 and 3 only\",\r\n      \"1 and 3 only\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 2, Explanatory notes (a), (b) and (c).<\/b><br>Statement 1 \u2713 \u2014 imported items sourced locally from resellers\/distributors are excluded.<br>Statement 2 \u2713 \u2014 license fees\/royalties\/technical charges paid out of India are excluded.<br>Statement 3 \u2713 \u2014 repackaged\/refurbished\/rebranded imported products are treated as reselling of imported products and excluded.<br><br>All three are excluded, so the answer is 1, 2 and 3.\"\r\n  },\r\n\r\n  {\r\n    id: 4,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Match the following terms with their meaning under the Order, and select the correct answer:\\nList-I (Term)\\nA. Refurbishing\\nB. Repackaging\\nC. Rebranding\\nList-II (Meaning)\\n1. Repacking of imported goods from bulk pack to smaller packs\\n2. Relabeling or renaming or change in symbol or logo\/makes or corporate image\\n3. Repair or reconditioning of an imported product\",\r\n    options: [\r\n      \"A-3, B-1, C-2\",\r\n      \"A-1, B-3, C-2\",\r\n      \"A-3, B-2, C-1\",\r\n      \"A-2, B-1, C-3\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 2, Explanatory note (c).<\/b><br>A\u20133: <b>Refurbishing<\/b> means repair or reconditioning of an imported product, which does not amount to manufacture as no new goods come into existence.<br>B\u20131: <b>Repackaging<\/b> means repacking of imported goods from bulk pack to smaller packs, which would not ordinarily amount to manufacture of a new item.<br>C\u20132: <b>Rebranding<\/b> means relabeling or renaming or change in symbol or logo\/makes or corporate image.\"\r\n  },\r\n\r\n  {\r\n    id: 5,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Under the Order, a 'Non-local supplier' means a supplier whose goods, services or works offered for procurement have local content:\",\r\n    options: [\r\n      \"Less than that prescribed for a 'Class-II local supplier'\",\r\n      \"Less than that prescribed for a 'Class-I local supplier' but not less than that for 'Class-II local supplier'\",\r\n      \"Equal to that prescribed for a 'Class-II local supplier'\",\r\n      \"Less than fifty percent\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 2 (Definitions), 'Non-local supplier'.<\/b><br>A Non-local supplier is one whose local content is <b>less than that prescribed for a 'Class-II local supplier'<\/b>.<br><br>(b) describes a 'Class-II local supplier' (meets the Class-II minimum but less than Class-I). (c) is wrong \u2014 a Non-local supplier falls below, not equal to, the Class-II threshold. (d) fixes an absolute 50% figure, but the definition is framed relative to the Class-II threshold (which is a minimum of 20%), not 50%.\"\r\n  },\r\n\r\n  {\r\n    id: 6,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Consider the following statements regarding the minimum local content requirement:\\n1. The local content requirement to categorize a supplier as 'Class-I local supplier' is a minimum of 50%.\\n2. The local content requirement to categorize a supplier as 'Class-II local supplier' is a minimum of 20%.\\n3. A Nodal Ministry\/Department may prescribe only a higher percentage of minimum local content to categorize a supplier.\\nWhich of the statements given above are correct?\",\r\n    options: [\r\n      \"1, 2 and 3\",\r\n      \"1 and 2 only\",\r\n      \"2 and 3 only\",\r\n      \"1 and 3 only\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 5 (Minimum local content).<\/b><br>Statement 1 \u2713 \u2014 Class-I minimum is <b>50%<\/b>.<br>Statement 2 \u2713 \u2014 Class-II minimum is <b>20%<\/b>.<br>Statement 3 \u2713 \u2014 a Nodal Ministry may prescribe only a <b>higher<\/b> percentage; where none is prescribed, it remains 50% and 20% respectively.<br><br>All three are correct. Note the key word 'higher' in statement 3 \u2014 the Nodal Ministry cannot prescribe a lower minimum through this route.\"\r\n  },\r\n\r\n  {\r\n    id: 7,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"The margin of purchase preference under the Order shall be:\",\r\n    options: [\r\n      \"20%\",\r\n      \"15%\",\r\n      \"25%\",\r\n      \"10%\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 6 (Margin of Purchase Preference).<\/b><br>The margin of purchase preference shall be <b>20%<\/b> \u2014 this is the maximum extent to which the price quoted by a 'Class-I local supplier' may be above L1 for the purpose of purchase preference.<br><br>The distractors are plausible round percentages, but the Order fixes the margin at 20%.\"\r\n  },\r\n\r\n  {\r\n    id: 8,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Notwithstanding anything contained in paragraph 3, procurement is exempt from the Order where the estimated value to be procured is less than:\",\r\n    options: [\r\n      \"Rs. 5 lakhs\",\r\n      \"Rs. 10 lakhs\",\r\n      \"Rs. 5 crore\",\r\n      \"Rs. 10 crore\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 4 (Exemption of small purchases).<\/b><br>Procurement where the estimated value is less than <b>Rs. 5 lakhs<\/b> is exempt from the Order; however, procurement must not be split to avoid the provisions.<br><br>(d) Rs. 10 crore is the threshold for the <b>auditor's certificate<\/b> on local content (Para 9), an adjacent figure used as a distractor. (b) and (c) do not appear in this context.\"\r\n  },\r\n\r\n  {\r\n    id: 9,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"In cases of procurement for a value in excess of which amount is a 'Class-I local supplier'\/'Class-II local supplier' required to provide a certificate from the statutory auditor or cost auditor (or a practising cost\/chartered accountant) giving the percentage of local content?\",\r\n    options: [\r\n      \"Rs. 10 crores\",\r\n      \"Rs. 5 lakhs\",\r\n      \"Rs. 200 crore\",\r\n      \"Rs. 1000 crore\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 9(b) (Verification of local content).<\/b><br>Where procurement value exceeds <b>Rs. 10 crores<\/b>, the supplier must provide a certificate from the statutory auditor or cost auditor (for companies), or from a practising cost accountant or practising chartered accountant (for others), giving the percentage of local content.<br><br>(b) Rs. 5 lakhs is the small-purchase exemption; (c) Rs. 200 crore relates to global tender enquiry; (d) Rs. 1000 crore relates to notifying procurement projections \u2014 all real figures from the Order, wrongly attributed here.\"\r\n  },\r\n\r\n  {\r\n    id: 10,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Consider the following statements regarding verification of local content where a contractor\/supplier does not meet the stipulated local content requirement and the category of the supplier changes:\\n1. A penalty of up to 10% of the contract value may be imposed.\\n2. The contract, once awarded, shall be terminated on this account.\\nWhich of the statements given above is\/are correct?\",\r\n    options: [\r\n      \"1 only\",\r\n      \"2 only\",\r\n      \"Both 1 and 2\",\r\n      \"Neither 1 nor 2\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 9(c) (Verification of local content).<\/b><br>Statement 1 \u2713 \u2014 a penalty of <b>up to 10%<\/b> of the contract value may be imposed where the supplier fails to meet the requirement and its category changes (e.g. Class-I to Class-II\/Non-local).<br>Statement 2 \u2717 \u2014 the Order expressly provides that the contract, once awarded, <b>shall not be terminated<\/b> on this account. The reversed polarity makes statement 2 false.<br><br>Hence only statement 1 is correct.\"\r\n  },\r\n\r\n  {\r\n    id: 11,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"A false declaration regarding local content is treated as a breach of the Code of Integrity under the General Financial Rules, for which a bidder or its successors can be debarred for up to:\",\r\n    options: [\r\n      \"Two years, as per Rule 151(iii) of the GFR\",\r\n      \"One year, as per Rule 153(iii) of the GFR\",\r\n      \"Three years, as per Rule 161(iv) of the GFR\",\r\n      \"Five years, as per Rule 130 of the GFR\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 9(g) (Verification of local content).<\/b><br>A false declaration breaches the Code of Integrity under <b>Rule 175(1)(i)(h)<\/b> of the GFR, and the bidder can be debarred for up to <b>two years as per Rule 151(iii)<\/b> of the GFR.<br><br>The distractors combine wrong durations with real-but-unrelated GFR rules: Rule 153(iii) is the Order's enabling rule, Rule 161(iv) concerns global tenders, and Rule 130 defines 'Works'.\"\r\n  },\r\n\r\n  {\r\n    id: 12,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"For the purposes of applying the Order, which of the following is expressly included within the meaning of 'works'?\",\r\n    options: [\r\n      \"Turnkey works\",\r\n      \"Maintenance and service contracts with the Original Equipment Manufacturer\",\r\n      \"Procurement of spare parts for closed systems\",\r\n      \"System Integrator (SI) contracts\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 2 (Definitions), 'Works'.<\/b><br>'Works' means all works as per Rule 130 of GFR 2017 and expressly <b>includes 'turnkey works'<\/b>.<br><br>(b) and (c) are items expressly <b>exempted<\/b> from the Order (Para 4A), not part of the definition of works. (d) 'System Integrator contracts' are included within <b>services<\/b>, not works (Para 3(c)).\"\r\n  },\r\n\r\n  {\r\n    id: 13,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"For procurement of goods, services or works with an estimated value of purchases below a specified amount, a Global tender enquiry shall not be issued except with the approval of the competent authority designated by the Department of Expenditure. That specified value is:\",\r\n    options: [\r\n      \"Rs. 200 Crore\",\r\n      \"Rs. 100 Crore\",\r\n      \"Rs. 500 Crore\",\r\n      \"Rs. 1000 Crore\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 3(b) read with Rule 161(iv), GFR 2017.<\/b><br>For purchases of estimated value less than <b>Rs. 200 Crore<\/b>, a Global tender enquiry shall not be issued except with the approval of the competent authority designated by the Department of Expenditure.<br><br>(d) Rs. 1000 Crore is the threshold for notifying procurement projections (Para 10) \u2014 an adjacent figure used as a distractor. (b) and (c) do not appear in this context.\"\r\n  },\r\n\r\n  {\r\n    id: 14,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"In procurement of all goods, services or works in respect of which the Nodal Ministry has communicated that there is sufficient local capacity and local competition, only 'Class-I local supplier' shall be eligible to bid:\",\r\n    options: [\r\n      \"Irrespective of the purchase value\",\r\n      \"Only where the purchase value exceeds Rs. 5 lakhs\",\r\n      \"Only where the purchase value exceeds Rs. 200 crore\",\r\n      \"Only in a global tender enquiry\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 3(a) (Eligibility).<\/b><br>Where the Nodal Ministry has communicated sufficient local capacity and local competition, only 'Class-I local supplier' is eligible to bid <b>irrespective of the purchase value<\/b>.<br><br>(b) and (c) invent value thresholds the sub-para does not impose. (d) is the opposite of the intent \u2014 in global tender enquiries even Non-local suppliers may bid; Para 3(a) instead restricts eligibility to Class-I regardless of value.\"\r\n  },\r\n\r\n  {\r\n    id: 15,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Consider the following statements regarding eligibility to bid under the Order:\\n1. Ordinarily, only 'Class-I local supplier' and 'Class-II local supplier' are eligible to bid in procurement undertaken by procuring entities.\\n2. In a global tender enquiry, 'Non-local suppliers' shall also be eligible to bid along with 'Class-I' and 'Class-II' local suppliers.\\n3. 'Class-II local supplier' will get purchase preference over 'Non-local supplier' in every procurement.\\nWhich of the statements given above are correct?\",\r\n    options: [\r\n      \"1 and 2 only\",\r\n      \"1 and 3 only\",\r\n      \"2 and 3 only\",\r\n      \"1, 2 and 3\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Paras 3(b) and 3A(d).<\/b><br>Statement 1 \u2713 \u2014 ordinarily only Class-I and Class-II local suppliers are eligible, except where a global tender enquiry is issued.<br>Statement 2 \u2713 \u2014 in global tender enquiries, Non-local suppliers are also eligible.<br>Statement 3 \u2717 \u2014 Para 3A(d) states that a 'Class-II local supplier' will <b>NOT<\/b> get purchase preference in any procurement. The added entitlement makes statement 3 false.<br><br>Hence only 1 and 2 are correct.\"\r\n  },\r\n\r\n  {\r\n    id: 16,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"In the procurement of divisible goods or works where a purchase preference for 'Class-I local supplier' is applicable, the lowest bid (L1) is NOT from a 'Class-I local supplier'. The procedure provides that:\",\r\n    options: [\r\n      \"50% of the order quantity shall be awarded to L1, and the lowest 'Class-I local supplier' shall then be invited to match the L1 price for the remaining 50%, subject to being within the margin of purchase preference\",\r\n      \"100% of the order quantity shall be awarded to L1 without any purchase preference\",\r\n      \"The entire quantity shall be awarded to the lowest 'Class-I local supplier' at its quoted price\",\r\n      \"The tender shall be cancelled and re-issued as a global tender enquiry\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 3A(b)(ii).<\/b><br>For divisible items, if L1 is not a Class-I local supplier, <b>50%<\/b> of the order quantity is awarded to L1; thereafter the lowest Class-I local supplier is invited to match the L1 price for the remaining 50%, subject to its quoted price falling within the margin of purchase preference.<br><br>(b) ignores the purchase-preference mechanism entirely. (c) wrongly awards the whole quantity to the Class-I supplier at its own price. (d) invents a cancellation not provided for.\"\r\n  },\r\n\r\n  {\r\n    id: 17,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Under the special treatment for items covered under the PLI Scheme, a manufacturer manufacturing an item under the PLI scheme (having received incentive from the concerned PLI Ministry) shall be treated as:\",\r\n    options: [\r\n      \"A deemed Class-II local supplier, unless it has minimum local content equal to or higher than that notified for Class-I local supplier for that item\",\r\n      \"A deemed Class-I local supplier in all cases\",\r\n      \"A Non-local supplier until it achieves 50% local content\",\r\n      \"Exempt from the Order for the entire duration of the PLI scheme\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 2A (Special treatment for items under PLI Scheme).<\/b><br>Such a manufacturer is treated as a <b>deemed Class-II local supplier<\/b> for that item, unless it has minimum local content equal to or higher than that notified for Class-I local supplier \u2014 in which case it qualifies as Class-I. This applies for the specific time period notified by the concerned PLI Ministry.<br><br>(b) overstates the treatment (deemed Class-I in all cases). (c) and (d) invent categorisations and exemptions not provided in Para 2A.\"\r\n  },\r\n\r\n  {\r\n    id: 18,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Match the following members of the Standing Committee with their roles under the Order, and select the correct answer:\\nList-I (Member)\\nA. Secretary, DPIIT\\nB. Joint Secretary (DPIIT)\\nC. Joint Secretary (Public Procurement), Department of Expenditure\\nList-II (Role)\\n1. Member-Convenor\\n2. Chairman\\n3. Member\",\r\n    options: [\r\n      \"A-2, B-1, C-3\",\r\n      \"A-1, B-2, C-3\",\r\n      \"A-2, B-3, C-1\",\r\n      \"A-3, B-1, C-2\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 16 (Standing Committee).<\/b><br>A\u20132: <b>Secretary, DPIIT<\/b> is the Chairman.<br>B\u20131: <b>Joint Secretary (DPIIT)<\/b> is the Member-Convenor.<br>C\u20133: <b>Joint Secretary (Public Procurement), Department of Expenditure<\/b> is a Member (along with Secretary, Commerce and Secretary, MeitY).<br><br>The distractors swap the Chairman\/Convenor\/Member roles among these officials.\"\r\n  },\r\n\r\n  {\r\n    id: 19,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"The Standing Committee constituted under the Order shall meet as often as necessary, but not less than:\",\r\n    options: [\r\n      \"Once in six months\",\r\n      \"Once in three months\",\r\n      \"Once in a year\",\r\n      \"Once in two months\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 17 (Functions of the Standing Committee).<\/b><br>The Committee shall meet as often as necessary, but <b>not less than once in six months<\/b>.<br><br>The distractors are plausible meeting frequencies, but the Order fixes the minimum at once in six months.\"\r\n  },\r\n\r\n  {\r\n    id: 20,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Administrative Ministries\/Departments whose procurement exceeds a specified amount per annum shall notify\/update their procurement projections every year, including those of PSEs\/PSUs, on their respective website for the next 5 years. That specified amount is:\",\r\n    options: [\r\n      \"Rs. 1000 Crore per annum\",\r\n      \"Rs. 200 Crore per annum\",\r\n      \"Rs. 500 Crore per annum\",\r\n      \"Rs. 10 Crore per annum\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 10(f).<\/b><br>Administrative Ministries\/Departments whose procurement exceeds <b>Rs. 1000 Crore per annum<\/b> shall notify\/update their procurement projections every year, including those of PSEs\/PSUs, for the next 5 years on their website.<br><br>(b) Rs. 200 Crore relates to the global tender enquiry threshold; (d) Rs. 10 Crore relates to auditor certification \u2014 both are real figures from the Order used as distractors.\"\r\n  },\r\n\r\n  {\r\n    id: 21,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Procuring entities are required to review all existing eligibility norms and conditions with reference to prior-experience and unreasonable-exclusion provisions within what period of the issue of the Order?\",\r\n    options: [\r\n      \"2 months\",\r\n      \"1 month\",\r\n      \"6 months\",\r\n      \"1 year\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 10(c) (Specifications in tenders and other procurement solicitations).<\/b><br>Procuring entities shall, within <b>2 months<\/b> of the issue of the Order, review all existing eligibility norms and conditions with reference to sub-paragraphs (a) and (b).<br><br>The distractors are plausible review periods, but the Order specifies 2 months.\"\r\n  },\r\n\r\n  {\r\n    id: 22,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Where a Ministry or Department has its own policy for preference to local content approved by the Cabinet, such policy will prevail over the provisions of this Order only if it was approved after:\",\r\n    options: [\r\n      \"1st January 2015\",\r\n      \"15th June 2017\",\r\n      \"1st January 2017\",\r\n      \"19th July 2024\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 19 (Ministries having existing policies).<\/b><br>A Ministry\/Department's own Cabinet-approved policy prevails over this Order only if it was approved <b>after 1st January 2015<\/b>; all other existing orders on local-content preference are to be reviewed and revised to conform, within two months.<br><br>(b) 15th June 2017 is the date of the original Make in India Order; (d) 19th July 2024 is the date of this revised Order \u2014 dates used as distractors. (c) does not appear.\"\r\n  },\r\n\r\n  {\r\n    id: 23,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Under the transitional provision, the Order shall NOT apply to:\",\r\n    options: [\r\n      \"Any tender or procurement for which the notice inviting tender or other form of procurement solicitation was issued before the issue of this Order\",\r\n      \"Any procurement below Rs. 5 lakhs, in every case\",\r\n      \"Any procurement undertaken by Government companies\",\r\n      \"Any procurement made through the Government e-Marketplace\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 20 (Transitional provision).<\/b><br>The Order does not apply to any tender or procurement for which the <b>notice inviting tender (or other solicitation) was issued before the issue of this Order<\/b>.<br><br>(b) restates the small-purchase exemption, not the transitional provision. (c) is wrong \u2014 Government companies are within the definition of 'procuring entity'. (d) is wrong \u2014 GeM procurement is expressly covered by the Order (Para 8).\"\r\n  },\r\n\r\n  {\r\n    id: 24,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"The power to reduce the minimum local content below the prescribed level, or to reduce the margin of purchase preference below 20%, or to exempt any particular item from the Order, is exercisable by the administrative Department with the approval of:\",\r\n    options: [\r\n      \"The Minister-in-charge, by written order and for reasons to be recorded in writing\",\r\n      \"The Standing Committee, by a majority decision\",\r\n      \"The Nodal Ministry, without recording reasons\",\r\n      \"The Secretary, Department of Expenditure\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 14 (Powers to grant exemption and to reduce minimum local content).<\/b><br>These powers are exercised by the administrative Department with the approval of the <b>Minister-in-charge<\/b>, by written order and for reasons to be recorded in writing; a copy of every such order goes to the Standing Committee and the Nodal Ministry.<br><br>(b), (c) and (d) name authorities not vested with this specific power; the requirement to record reasons in writing is also part of the safeguard that (c) omits.\"\r\n  },\r\n\r\n  {\r\n    id: 25,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Under the Order, the term 'procuring entity' includes:\",\r\n    options: [\r\n      \"Government companies as defined in the Companies Act\",\r\n      \"Only Ministries and Departments of the Government of India\",\r\n      \"Only autonomous bodies controlled by State Governments\",\r\n      \"Foreign companies participating through joint ventures\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 2 (Definitions), 'Procuring entity'.<\/b><br>A 'procuring entity' means a Ministry or department or attached or subordinate office of, or autonomous body controlled by, the Government of India, and <b>includes Government companies as defined in the Companies Act<\/b>.<br><br>(b) omits the express inclusion of Government companies and autonomous bodies. (c) wrongly limits it to State-Government bodies. (d) is unrelated to the definition of procuring entity.\"\r\n  },\r\n\r\n  {\r\n    id: 26,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"For contracts involving supply of multiple items, the local content is to be calculated by taking:\",\r\n    options: [\r\n      \"The weighted average of all items\",\r\n      \"The simple average of all items\",\r\n      \"The local content of the highest-value item only\",\r\n      \"The local content of the lowest-value item only\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 2, Explanatory note (e).<\/b><br>For contracts involving supply of multiple items, the <b>weighted average<\/b> of all items is taken while calculating the local content.<br><br>(b) 'simple average' ignores the differing values of the items; (c) and (d) wrongly rely on a single item rather than all items.\"\r\n  },\r\n\r\n  {\r\n    id: 27,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Items notified as having sufficient local capacity and competition are to be mandatorily sourced from 'Class-I local suppliers' in System Integrator\/EPC\/Turnkey\/Service tenders. Where it is not practically feasible to do so in a project, relaxation from this stipulation may be taken with the approval of the:\",\r\n    options: [\r\n      \"Secretary of the administrative Ministry\/Department, or the Competent Authority specified by the Administrative Ministry\/Department, on a case-specific basis\",\r\n      \"Nodal Ministry, in every case\",\r\n      \"Standing Committee, by a two-thirds majority\",\r\n      \"Department of Expenditure, irrespective of the value\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 3.1(b).<\/b><br>Relaxation from the mandatory Class-I sourcing stipulation may be taken with the approval of the <b>Secretary of the administrative Ministry\/Department<\/b>, or the Competent Authority specified by the Administrative Ministry\/Department, on a case-specific basis.<br><br>(b), (c) and (d) name authorities not designated for this relaxation; the case-specific nature of the approval is also part of the provision.\"\r\n  },\r\n\r\n  {\r\n    id: 28,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Consider the following statements regarding requirements applicable to a particular procurement transaction:\\n1. The minimum local content, the margin of purchase preference and the procedure for preference to Make in India shall be specified in the notice inviting tenders or other procurement solicitation.\\n2. These requirements may be varied during a particular procurement transaction if the procuring entity records reasons in writing.\\nWhich of the statements given above is\/are correct?\",\r\n    options: [\r\n      \"1 only\",\r\n      \"2 only\",\r\n      \"Both 1 and 2\",\r\n      \"Neither 1 nor 2\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 7 (Requirement for specification in advance).<\/b><br>Statement 1 \u2713 \u2014 the minimum local content, the margin of purchase preference and the preference procedure must be specified in the NIT\/solicitation.<br>Statement 2 \u2717 \u2014 these <b>shall not be varied<\/b> during a particular procurement transaction; the added 'may be varied' condition makes statement 2 false.<br><br>Hence only statement 1 is correct.\"\r\n  },\r\n\r\n  {\r\n    id: 29,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Procurement of spare parts and consumables for closed systems, and Maintenance\/Service contracts, with the Original Equipment Manufacturer\/Original Equipment Supplier\/Original Part Manufacturer, are:\",\r\n    options: [\r\n      \"Exempted from the Order\",\r\n      \"Subject to mandatory Class-I local supplier sourcing\",\r\n      \"Permitted only through a global tender enquiry\",\r\n      \"Subject to a reduced margin of purchase preference of 10%\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 4A (Exemption in sourcing of spares and consumables of closed systems).<\/b><br>Procurement of spare parts and consumables for closed systems, and Maintenance\/Service contracts, with the OEM\/OES\/OPM are <b>exempted<\/b> from the Order.<br><br>(b), (c) and (d) impose requirements that the exemption removes; there is no reduced-margin or global-tender treatment prescribed for these items.\"\r\n  },\r\n\r\n  {\r\n    id: 30,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Under the Reciprocity Clause, the term 'entity' of a country shall have the same meaning as under:\",\r\n    options: [\r\n      \"The FDI Policy of DPIIT, as amended from time to time\",\r\n      \"The Companies Act, 2013\",\r\n      \"The General Financial Rules, 2017\",\r\n      \"The Foreign Exchange Management Act, 1999\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 10(d)(v) (Reciprocity Clause).<\/b><br>The term 'entity' of a country shall have the same meaning as under the <b>FDI Policy of DPIIT, as amended from time to time<\/b>.<br><br>The distractors are plausible legal instruments, but the Order specifically ties the meaning of 'entity' to the DPIIT FDI Policy.\"\r\n  },\r\n\r\n{\r\n    id: 31,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"In the procurement of divisible goods or works where a purchase preference for 'Class-I local supplier' is applicable, the lowest bid (L1) turns out to be from a 'Class-I local supplier'. In this situation, the contract will be awarded:\",\r\n    options: [\r\n      \"To L1 for the full quantity\",\r\n      \"To L1 for 50% of the quantity, the balance going to the next 'Class-I local supplier'\",\r\n      \"Equally among all qualifying 'Class-I local suppliers'\",\r\n      \"To L1 only after it matches a lower 'Class-II local supplier' price\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 3A(b)(i).<\/b><br>Among all qualified bids the lowest is termed L1; when L1 is itself a 'Class-I local supplier', the contract for the <b>full quantity<\/b> is awarded to L1.<br><br>(b) is the treatment when L1 is NOT a Class-I supplier (50% to L1, rest offered to Class-I on price-matching). (c) and (d) invent splitting or matching steps that do not apply when L1 is already Class-I.\"\r\n  },\r\n\r\n  {\r\n    id: 32,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"For all contracts above INR 10 Crore, at the time of execution of the project the contractor\/supplier is required to give local content certification duly certified by:\",\r\n    options: [\r\n      \"A cost accountant or chartered accountant in practice\",\r\n      \"The Nodal Ministry for the item\",\r\n      \"The procuring entity's own technical committee\",\r\n      \"The Standing Committee constituted under the Order\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 9(c) (Verification of local content).<\/b><br>The bidder self-certifies at the tendering stage; but for all contracts <b>above INR 10 Crore<\/b>, at the time of execution the supplier must give local content certification duly certified by a <b>cost accountant or chartered accountant in practice<\/b>. Where this is not possible at execution, the certificate may be furnished after completion, within a time limit acceptable to the procuring entity.<br><br>(b), (c) and (d) are not the certifying authorities specified for execution-stage local content certification.\"\r\n  },\r\n\r\n  {\r\n    id: 33,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"A procuring entity finds that a domestic supplier is being unreasonably excluded because a tender requires proof of exports and proof of supply in other countries. Under the Order, such eligibility conditions relating to previous experience:\",\r\n    options: [\r\n      \"Must not require proof of supply in other countries or proof of exports\",\r\n      \"Are permissible if the estimated value exceeds Rs. 200 crore\",\r\n      \"Are permissible only in a global tender enquiry\",\r\n      \"May be retained with the approval of the Nodal Ministry\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 10(a) (Specifications in tenders).<\/b><br>Eligibility conditions on previous experience <b>must not require proof of supply in other countries or proof of exports<\/b>. Procuring entities must also ensure that conditions on turnover, production capability and financial strength do not unreasonably exclude eligible Class-I\/Class-II local suppliers.<br><br>(b), (c) and (d) invent value thresholds, tender types or approvals that would permit such conditions, which the Order does not allow.\"\r\n  },\r\n\r\n  {\r\n    id: 34,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"A Department wishes to stipulate a foreign certification in a bid document because the relevant Indian Standard is not available. This may be done only after the written approval of the:\",\r\n    options: [\r\n      \"Secretary of the Department concerned (or an Authority designated such power by that Secretary)\",\r\n      \"Joint Secretary (Public Procurement), Department of Expenditure\",\r\n      \"Chairman of the Standing Committee\",\r\n      \"Nodal Ministry for the item\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 10(e) (Specifications in tenders).<\/b><br>Where foreign certification must be stipulated (owing to non-availability of Indian Standards or any other reason), it may be done only after the written approval of the <b>Secretary of the Department concerned<\/b>, or any other Authority designated such power by that Secretary. Otherwise, specifying foreign certifications\/brands is treated as a restrictive and discriminatory practice.<br><br>(b), (c) and (d) are not vested with this specific approval.\"\r\n  },\r\n\r\n  {\r\n    id: 35,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"Where restrictive or discriminatory conditions against domestic suppliers are found in bid documents, the inquiry to fix responsibility is to be conducted by the:\",\r\n    options: [\r\n      \"Administrative Department undertaking the procurement\",\r\n      \"Standing Committee\",\r\n      \"Department of Expenditure\",\r\n      \"Comptroller and Auditor General\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 10A (Action for non-compliance).<\/b><br>The inquiry to fix responsibility is conducted by the <b>Administrative Department undertaking the procurement<\/b> (including procurement by any entity under its administrative control); appropriate action is then taken against erring officials, and intimation of all such actions is sent to the Standing Committee.<br><br>(b) receives intimation but does not conduct the inquiry; (c) and (d) have no such inquiry role here.\"\r\n  },\r\n\r\n  {\r\n    id: 36,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"In the procurement of goods, services or works for which the nodal ministry has not notified that there is sufficient local capacity and competition, the nodal ministry notifies an upper threshold value of procurement. For participating in procurement beyond this threshold value, foreign companies are required to:\",\r\n    options: [\r\n      \"Enter into a joint venture with an Indian company to participate in the tender\",\r\n      \"Be treated as 'Class-I local suppliers' for that procurement\",\r\n      \"Deposit an additional performance security equal to 20% of the bid value\",\r\n      \"Obtain prior clearance from the Department of Expenditure\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 13A.<\/b><br>The concerned nodal ministry notifies an upper threshold value beyond which foreign companies shall <b>enter into a joint venture with an Indian company<\/b> to participate in the tender; such joint ventures may be given special provisions exempting them from the stipulated minimum local content, to be increased in a phased manner.<br><br>(b), (c) and (d) invent treatments not stated in para 13A; participation is conditioned on forming a JV with an Indian company.\"\r\n  },\r\n\r\n  {\r\n    id: 37,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"The administrative Department, with the approval of the Minister-in-charge and for reasons recorded in writing, may (among other powers) reduce the margin of purchase preference:\",\r\n    options: [\r\n      \"Below 20%\",\r\n      \"Below 10%\",\r\n      \"Below 50%\",\r\n      \"Below 5%\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 14 (Powers to grant exemption and to reduce minimum local content).<\/b><br>Among the powers is the reduction of the margin of purchase preference <b>below 20%<\/b> \u2014 20% being the standard margin fixed under Para 6.<br><br>The distractors are plausible percentages, but the power is framed as reducing the margin below the standard 20%.\"\r\n  },\r\n\r\n  {\r\n    id: 38,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"For Government companies and other procuring entities that are NOT governed by the General Financial Rules, compliance with the Order is to be secured by:\",\r\n    options: [\r\n      \"Policy directions issued by the administrative Ministry or Department\",\r\n      \"Direct operation of the General Financial Rules on such entities\",\r\n      \"An enforcement order of the Standing Committee\",\r\n      \"A notification issued by the Nodal Ministry\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 15 (Directions to Government companies).<\/b><br>Because such entities are not governed by the GFR, the administrative Ministry\/Department shall issue <b>policy directions<\/b> requiring compliance with the Order.<br><br>(b) is precisely what does not apply, as these entities fall outside the GFR; (c) and (d) misplace the responsibility, which rests with the administrative Ministry through policy directions.\"\r\n  },\r\n\r\n  {\r\n    id: 39,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"The Standing Committee under the Order shall meet as often as necessary. Which one of the following officials is its Member-Convenor?\",\r\n    options: [\r\n      \"Joint Secretary (DPIIT)\",\r\n      \"Secretary, DPIIT\",\r\n      \"Joint Secretary (Public Procurement), Department of Expenditure\",\r\n      \"Secretary, Ministry of Electronics and Information Technology\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 16 (Standing Committee).<\/b><br>The <b>Joint Secretary (DPIIT)<\/b> is the Member-Convenor.<br><br>(b) Secretary, DPIIT is the Chairman; (c) Joint Secretary (Public Procurement), Department of Expenditure and (d) Secretary, MeitY are Members \u2014 the question tests whether the candidate can distinguish the Convenor from the Chairman and the other members.\"\r\n  },\r\n\r\n  {\r\n    id: 40,\r\n    chapter: 'Make in India Order 2017 (Revised 2024)',\r\n    question: \"A supplier is debarred by one procuring entity for violation of the Order. For procurement by any OTHER procuring entity, its ineligibility for preference under the Order lasts for:\",\r\n    options: [\r\n      \"The duration of the debarment, taking effect prospectively from the date it comes to the notice of the other procuring entities\",\r\n      \"A uniform period of two years from the date of debarment\",\r\n      \"One year from the date of the original violation\",\r\n      \"Only the balance of the financial year in which it was debarred\"\r\n    ],\r\n    correct: 0,\r\n    explanation: \"<b>Option (a) is correct \u2014 Para 9(h) (Verification of local content).<\/b><br>The ineligibility lasts for the <b>duration of the debarment<\/b>, and for other procuring entities it takes effect <b>prospectively from the date it comes to their notice<\/b> (in the manner prescribed under Para 9).<br><br>(b), (c) and (d) fix arbitrary fixed periods, whereas the Order ties the ineligibility to the actual debarment period and its prospective effect.\"\r\n  }\r\n\r\n];\r\n\r\n\/* =====================================================================\r\n   4. SANITISE + INDEX\r\n   One malformed row used to blank the whole widget. Bad rows are now\r\n   dropped with a console note; everything else still works.\r\n   ===================================================================== *\/\r\nfunction sanitise(list){\r\n  if(!Array.isArray(list)) return [];\r\n  const ok=[], bad=[];\r\n  list.forEach((q,i)=>{\r\n    const good = q && q.id!==undefined && typeof q.question==='string'\r\n      && Array.isArray(q.options) && q.options.length>=2\r\n      && Number.isInteger(q.correct) && q.correct>=0 && q.correct<q.options.length\r\n      && typeof q.chapter==='string' && q.chapter.length;\r\n    good ? ok.push(q) : bad.push({row:i, id:q&&q.id});\r\n  });\r\n  if(bad.length) console.warn('[chapter bank] skipped '+bad.length+' malformed question(s):', bad);\r\n  return ok;\r\n}\r\nconst QS = sanitise(chapterQuestions);\r\nconst CHAPTERS = [...new Set(QS.map(q=>q.chapter))];\r\nconst uid = q => q.chapter+'##'+q.id;\r\nconst BY_UID = new Map(QS.map(q=>[uid(q), q]));\r\nconst BY_CH  = (()=>{ const m=new Map(); QS.forEach(q=>{ if(!m.has(q.chapter)) m.set(q.chapter,[]); m.get(q.chapter).push(q); }); return m; })();\r\nconst inCh = c => BY_CH.get(c) || [];\r\nconst L = ['A','B','C','D','E','F'];\r\n\r\n\/* ---- chapter label helpers ---- *\/\r\nconst chShort = c => { const m=c.match(\/^CH\\s*(\\d+)\\s*:\/i); return m ? 'Ch '+m[1] : (c.length>26 ? c.slice(0,24).trim()+'\u2026' : c); };\r\n\/* chapters list in their own order \u2014 Ch 1..n, then Appendix 1..n, then anything\r\n   else alphabetically \u2014 never by score, so the list never shuffles under you *\/\r\nconst ROMAN = {i:1,ii:2,iii:3,iv:4,v:5,vi:6,vii:7,viii:8,ix:9,x:10,xi:11,xii:12};\r\nfunction chOrder(c){\r\n  const t=c.trim();\r\n  let m=t.match(\/^(?:CH|CHAPTER)\\s*[-\u2013]?\\s*(\\d+)\/i);\r\n  if(m) return [0, +m[1], t];\r\n  m=t.match(\/^APPENDIX\\s*[-\u2013]?\\s*([0-9]+|[ivxIVX]+)\\b\/i);\r\n  if(m){ const v=m[1]; return [1, \/^\\d+$\/.test(v) ? +v : (ROMAN[v.toLowerCase()]||99), t]; }\r\n  m=t.match(\/^(\\d+)\/);\r\n  if(m) return [0, +m[1], t];\r\n  return [2, 0, t];\r\n}\r\nfunction byChapterOrder(a,b){\r\n  const x=chOrder(a.chapter||a), y=chOrder(b.chapter||b);\r\n  return x[0]-y[0] || x[1]-y[1] || x[2].localeCompare(y[2]);\r\n}\r\n\/* a bank that stores chapter names in block capitals is softened for display *\/\r\nfunction titleCase(str){\r\n  const t=String(str);\r\n  const letters=t.replace(\/[^A-Za-z]\/g,'');\r\n  if(!letters || letters !== letters.toUpperCase()) return t;   \/\/ already mixed case, leave it\r\n  const small=new Set(['of','the','and','for','in','to','a','an','on','by','or','with','from','as','at','under']);\r\n  return t.toLowerCase().replace(\/[A-Za-z][A-Za-z'\u2019]*\/g,(w,i)=>\r\n    (i>0 && small.has(w)) ? w : w.charAt(0).toUpperCase()+w.slice(1))\r\n    .replace(\/\\bCh\\b\/g,'Ch').replace(\/\\bC&ag\\b\/gi,'C&AG').replace(\/\\bDpc\\b\/g,'DPC');\r\n}\r\nconst chBrief = c => { const m=c.match(\/^CH\\s*(\\d+)\\s*:\\s*(.+)$\/i);\r\n  const cap=t=>t.length>36?t.slice(0,34).trim()+'\u2026':t;\r\n  return m ? 'Ch '+m[1]+': '+cap(titleCase(m[2])) : cap(titleCase(c)); };\r\n\r\n\/* =====================================================================\r\n   5. RANKING ENGINE\r\n   Importance where you have rated a chapter; share of the bank where you\r\n   have not. Either way the result is a share of 1, and every label on the\r\n   page is drawn from the T table below so nothing over-claims.\r\n   ===================================================================== *\/\r\n\/* ---------------------------------------------------------------------\r\n   Matching your importance keys to the chapter strings in the bank.\r\n   Exact spelling is not required. Anything starting with a chapter or an\r\n   appendix number is reduced to a token \u2014 'CH 2', 'Ch-2', 'Chapter 2:\r\n   General Outlines...' all become CH2 \u2014 so a short key in the map finds\r\n   a long chapter name in the bank. Keys with no number fall back to a\r\n   loose text match (case, punctuation and spacing ignored).\r\n   --------------------------------------------------------------------- *\/\r\nfunction impKey(str){\r\n  const t = String(str).toUpperCase().replace(\/[\\u2010-\\u2015]\/g,'-').trim();\r\n  let m = t.match(\/^(?:CH|CHAP|CHAPTER)\\s*[-.:]?\\s*(\\d+)\/);\r\n  if(m) return 'CH'+(+m[1]);\r\n  \/\/ longest spellings first, or 'APPX 5' reads its own X as a roman numeral\r\n  m = t.match(\/^(?:APPENDICES|APPENDIX|ANNEXURES?|ANNEXES?|APNDX|APPX|APDX|APP)\\s*[-.:]?\\s*(\\d+|[IVX]+)\\b\/);\r\n  if(m){ const v=m[1]; return 'APP'+(\/^\\d+$\/.test(v) ? +v : (ROMAN[v.toLowerCase()]||v)); }\r\n  m = t.match(\/^(\\d+)\\s*[-.:)]\/);\r\n  if(m) return 'CH'+(+m[1]);\r\n  return 'T:'+t.replace(\/[^A-Z0-9]+\/g,' ').trim();\r\n}\r\nconst IMP_INDEX = (function(){\r\n  const idx={}, used={};\r\n  Object.keys(chapterImportance).forEach(k=>{\r\n    const v = chapterImportance[k];\r\n    if(typeof v!=='number' || !isFinite(v) || v<0) return;\r\n    const key = impKey(k);\r\n    if(idx[key]!==undefined) console.warn('[importance] two keys collapse to the same chapter: '+k);\r\n    idx[key] = v; used[key] = k;\r\n  });\r\n  return {idx, used};\r\n})();\r\nfunction importanceOf(chapter){\r\n  const k = impKey(chapter);\r\n  if(IMP_INDEX.idx[k]!==undefined) return {value:IMP_INDEX.idx[k], key:k};\r\n  \/\/ last resort for un-numbered names: one contains the other\r\n  if(k.startsWith('T:')){\r\n    const target = k.slice(2);\r\n    const hit = Object.keys(IMP_INDEX.idx).filter(x=>x.startsWith('T:')).find(x=>{\r\n      const a=x.slice(2);\r\n      return a.length>3 && target.length>3 && (target.startsWith(a) || a.startsWith(target));\r\n    });\r\n    if(hit) return {value:IMP_INDEX.idx[hit], key:hit};\r\n  }\r\n  return null;\r\n}\r\n\r\nconst W = (function(){\r\n  const counts={}, total=QS.length;\r\n  QS.forEach(q=>counts[q.chapter]=(counts[q.chapter]||0)+1);\r\n  const raw={}, source={}, derived=[];\r\n  let knownSum=0, knownShare=0;\r\n\r\n  const matched = new Set();\r\n  CHAPTERS.forEach(c=>{\r\n    const hit = importanceOf(c);\r\n    if(hit){\r\n      raw[c]=hit.value; source[c]='rated'; matched.add(hit.key);\r\n      knownSum+=hit.value; knownShare += total?counts[c]\/total:0;\r\n    } else { source[c]='derived'; derived.push(c); }\r\n  });\r\n  const scale = (knownSum>0 && knownShare>0) ? knownSum\/knownShare : 1;\r\n  derived.forEach(c => raw[c] = (total?counts[c]\/total:0)*scale);\r\n  let sum=0; CHAPTERS.forEach(c=>sum+=raw[c]);\r\n  if(!(sum>0)){ CHAPTERS.forEach(c=>{ raw[c]= total?counts[c]\/total:0; source[c]='derived'; }); sum=CHAPTERS.reduce((a,c)=>a+raw[c],0)||1; }\r\n  const weights={}; CHAPTERS.forEach(c=>weights[c]=raw[c]\/sum);\r\n  \/\/ keys you rated that never found a chapter in the bank\r\n  const unmatched = Object.keys(IMP_INDEX.idx).filter(k=>!matched.has(k)).map(k=>IMP_INDEX.used[k]);\r\n  return {weights, raw, source, counts, total, derived, unstocked:unmatched,\r\n          rated: CHAPTERS.some(c=>source[c]==='rated')};\r\n})();\r\nconst weightOf = c => W.weights[c] || 0;\r\nconst pctLabel = x => { const v=(x||0)*100; if(!(v>0)) return '0%';\r\n  return (v<10 ? Math.round(v*10)\/10 : Math.round(v)) + '%'; };\r\n\r\n\/* every phrase that could over-claim lives here, in one place *\/\r\nconst WT = W.rated;                       \/\/ is any chapter rated by hand?\r\nconst T = {\r\n  chipUnit  : ' importance',\r\n  onScreen  : WT ? 'Importance on screen' : 'Share on screen',\r\n  colWeight : 'Importance',\r\n  covered   : WT ? 'Weighted coverage'    : 'Bank covered',\r\n  projected : 'Projected score',\r\n  leakHead  : 'Where you are losing the most',\r\n  leakUnit  : 'points \/100',\r\n  leakWord  : 'points',\r\n  readyDef  : WT ? 'Readiness = \u03a3 (importance \u00d7 mastery)' : 'Readiness = \u03a3 (share of the bank \u00d7 mastery)',\r\n  paperOut  : 'you would score around'\r\n};\r\n\/\/ \"rated 15% importance\" where you have rated it; nothing where you have not\r\nconst impPhrase = r => W.source[r.chapter]==='rated'\r\n  ? 'rated <b>'+pctLabel(r.weight)+'<\/b> importance' : '';\r\n\r\n\/* =====================================================================\r\n   6. PROGRESS (localStorage, one record per quizId)\r\n   ===================================================================== *\/\r\nconst SCHEMA = 1;\r\nconst KEY = 'pe_chapterdrill_' + CFG.quizId;\r\nfunction blank(){ return { schema:SCHEMA, stats:{}, weak:[], flags:[], log:[], queue:[], queueLabel:'', queueKind:'', lastUid:null }; }\r\nlet P = (function(){\r\n  const p = blank();\r\n  try{\r\n    const s = localStorage.getItem(KEY);\r\n    if(s){ const j=JSON.parse(s);\r\n      if(j && j.schema===SCHEMA) Object.assign(p, j);\r\n      else if(j) console.warn('[storage] older schema found; starting fresh.');\r\n    }\r\n  }catch(e){ console.warn('progress load failed', e); }\r\n  ['weak','flags','log','queue'].forEach(k=>{ if(!Array.isArray(p[k])) p[k]=[]; });\r\n  if(!p.stats) p.stats={};\r\n  return p;\r\n})();\r\nlet storageWarned=false;\r\nfunction save(){\r\n  try{\r\n    if(P.log.length>400) P.log = P.log.slice(-400);\r\n    localStorage.setItem(KEY, JSON.stringify(P));\r\n  }catch(e){\r\n    try{ P.log = P.log.slice(-80); localStorage.setItem(KEY, JSON.stringify(P)); }\r\n    catch(e2){ if(!storageWarned){ storageWarned=true; toast('Your browser is blocking saved progress \u2014 this sitting will not be remembered'); } }\r\n  }\r\n}\r\nfunction stat(u){ if(!P.stats[u]) P.stats[u]={correct:0,incorrect:0,last:null,lastOk:null}; return P.stats[u]; }\r\nconst flags = new Set(P.flags);\r\nconst weak  = new Set(P.weak);\r\n\r\n\/* =====================================================================\r\n   7. SESSION STATE\r\n   ===================================================================== *\/\r\nconst S = { tab:'quiz', filter:'all', chapter:null, i:0, pick:null, nudge:false,\r\n            query:'', unattempted:false, ans:{}, order:[] };\r\n\r\n\/* =====================================================================\r\n   8. FORMAT + TRAIT MODEL\r\n   SHAPE  = how the question is built (one per question)\r\n   TRAIT  = what it turns on (a question may carry several)\r\n   A shape gap is a reading habit; a trait gap is recall. Same number,\r\n   opposite remedy \u2014 so they are reported separately.\r\n   ===================================================================== *\/\r\nconst SHAPES = [\r\n  { key:'match',  label:'Match the following (List-I \/ List-II)',\r\n    test:q => \/list\\s*-?\\s*i\\b\/i.test(q.question) },\r\n  { key:'multi',  label:'Multi-statement \/ how many are correct',\r\n    test:q => q.question.split(\/<br\\s*\\\/?>|\\n\/).filter(x=>\/^\\s*\\d+[.)]\/.test(x)).length>=2 },\r\n  { key:'direct', label:'Explanation', test:()=>true }  \/\/ catch-all\r\n];\r\nconst TRAITS = [\r\n  { key:'cite',      label:'Para, rule, article or article-number recall',\r\n    test:q => \/\\b(para|paragraph|rule|article|section|appendix|schedule|clause)\\s*[-\u2013]?\\s*\\d\/i.test(q.question+' '+q.options.join(' ')) },\r\n  { key:'period',    label:'Time limits and periods',\r\n    test:q => \/\\b\\d+\\s*(day|week|month|year|hour)s?\\b|\\b(one|two|three|four|five|six|seven|ten|fourteen|fifteen|twenty|twenty-five|thirty|forty-five|sixty|ninety)[\\s-](day|week|month|year)s?\\b\/i.test(q.options.join(' ')) },\r\n  { key:'money',     label:'Numbers, monetary limits and percentages',\r\n    test:q => \/\u20b9|\\bRs\\.?\\s*\\d|\\blakhs?\\b|\\bcrores?\\b|per\\s*cent|%|\\bone-(third|fourth|half|tenth)\\b\/i.test(q.options.join(' ')) },\r\n  { key:'authority', label:'Competent authority \/ level \/ who does what',\r\n    test:q => \/\\bwho\\b|\\bby whom\\b|\\bauthority\\b|\\brank of\\b|\\blevel of\\b|\\bnot below\\b|addressed to|shall be (signed|issued|approved|maintained|prepared|submitted)\/i.test(q.question+' '+q.options.join(' ')) },\r\n  { key:'negative',  label:'Negatively phrased (\u201cNOT correct\u201d, \u201cexcept\u201d)',\r\n    test:q => \/\\bnot correct\\b|\\bis incorrect\\b|\\bare not correct\\b|\\bexcept\\b|\\bdoes not\\b|\\bcannot\\b|\\bnot required\\b|\\bneed not\\b|\\bis\\\/are not\\b\/i.test(q.question) }\r\n];\r\nconst _shape = {};\r\nfunction shapeOf(q){ const u=uid(q); return _shape[u] || (_shape[u] = SHAPES.find(s=>s.test(q)) || SHAPES[SHAPES.length-1]); }\r\n\r\n\/* =====================================================================\r\n   9. MODELS\r\n   ===================================================================== *\/\r\nfunction smoothed(c,i){ const k=CFG.priorStrength, p0=CFG.priorAccuracy; return (c + k*p0)\/(c + i + k); }\r\nfunction expectedRate(c,i,coverage){ return smoothed(c,i)*coverage + CFG.priorAccuracy*(1-coverage); }\r\nfunction recall(st){\r\n  if(!st || !st.last || st.correct<2) return null;\r\n  const R=CFG.retention, reps=Math.max(1, st.correct - st.incorrect);\r\n  const stability = R.baseDays * Math.pow(R.growth, reps-1);\r\n  return Math.exp(-((Date.now()-st.last)\/86400000)\/stability);\r\n}\r\nfunction retentionIndex(){\r\n  let s=0,n=0; QS.forEach(q=>{ const r=recall(P.stats[uid(q)]); if(r!==null){s+=r;n++;} });\r\n  return n ? Math.round(s\/n*100) : null;\r\n}\r\nfunction chapterRows(){\r\n  return CHAPTERS.map(c=>{\r\n    const qs=inCh(c), n=qs.length;\r\n    let att=0, ok=0, bad=0, mastSum=0;\r\n    qs.forEach(q=>{ const s=P.stats[uid(q)];\r\n      if(s && (s.correct+s.incorrect)>0){ att++; ok+=s.correct; bad+=s.incorrect; }\r\n      mastSum += s ? Math.min(s.correct\/CFG.masteryThreshold,1) : 0; });\r\n    const acc = (ok+bad) ? ok\/(ok+bad) : null;\r\n    const weight = weightOf(c), coverage = n?att\/n:0, mastery = n?mastSum\/n:0;\r\n    const expected = expectedRate(ok,bad,coverage);\r\n    const leak = weight*(1-expected);\r\n    const difficulty = acc===null ? 1 : (1.4 - 0.6*acc);\r\n    return { chapter:c, count:n, weight, source:W.source[c], att, ok, bad,\r\n             coverage, acc, mastery, expected, leak,\r\n             priority: weight*(1-mastery)*difficulty };\r\n  }).sort((a,b)=>b.weight-a.weight);\r\n}\r\nfunction readiness(){\r\n  const rows=chapterRows();\r\n  return {\r\n    score     : Math.round(rows.reduce((a,r)=>a+r.weight*r.mastery,0)*100),\r\n    projected : Math.round(rows.reduce((a,r)=>a+r.weight*r.expected,0)*100),\r\n    covered   : Math.round(rows.reduce((a,r)=>a+r.weight*r.coverage,0)*100),\r\n    touched   : Object.values(P.stats).some(s=>(s.correct+s.incorrect)>0),\r\n    rows\r\n  };\r\n}\r\nfunction masteredCount(){ return QS.filter(q=>{ const s=P.stats[uid(q)]; return s && s.correct>=CFG.masteryThreshold; }).length; }\r\nfunction formatRows(){\r\n  const acc={};\r\n  const ensure=(k,l,kind)=> acc[k] || (acc[k]={key:k,label:l,kind:kind,ok:0,bad:0,total:0,seen:0});\r\n  SHAPES.forEach(s=>ensure(s.key,s.label,'shape'));\r\n  TRAITS.forEach(t=>ensure(t.key,t.label,'trait'));\r\n  QS.forEach(q=>{\r\n    const s=P.stats[uid(q)], buckets=[acc[shapeOf(q).key]];\r\n    TRAITS.forEach(t=>{ if(t.test(q)) buckets.push(acc[t.key]); });\r\n    buckets.forEach(r=>{ r.total++; if(s && (s.correct+s.incorrect)>0){ r.seen++; r.ok+=s.correct; r.bad+=s.incorrect; } });\r\n  });\r\n  return Object.values(acc).map(r=>{ const n=r.ok+r.bad; r.attempts=n; r.acc = n? r.ok\/n : null; return r; })\r\n    .filter(r=>r.total>0);\r\n}\r\nfunction dueForRevision(){\r\n  const risk=CFG.retention.riskBelow;\r\n  return QS.map(q=>{\r\n    const st=P.stats[uid(q)], r=recall(st);\r\n    if(r===null || r>=risk) return null;\r\n    return { q, recall:r, days:Math.floor((Date.now()-st.last)\/86400000), urgency: weightOf(q.chapter)*(1-r) };\r\n  }).filter(Boolean).sort((a,b)=>b.urgency-a.urgency);\r\n}\r\n\r\n\/* =====================================================================\r\n   10. SESSION PLANNER\r\n   Focused set \u2014 chapter time in proportion to the marks leaking out.\r\n   Mock paper  \u2014 ignores your history, mirrors the shape of the bank.\r\n   ===================================================================== *\/\r\nfunction gain(q){\r\n  const u=uid(q), st=P.stats[u], c=st?st.correct:0, i=st?st.incorrect:0;\r\n  const deficit = 1 - Math.min(c\/CFG.masteryThreshold, 1);\r\n  let urgency = 1 + 0.15*deficit;\r\n  if(weak.has(u)) urgency += 0.60;\r\n  const r = recall(st);\r\n  if(r!==null && r<CFG.retention.riskBelow) urgency += (1-r);\r\n  if(c+i===0) urgency += 0.15;\r\n  return weightOf(q.chapter)*(deficit+0.12)*urgency;\r\n}\r\nfunction allocate(rows,n,shareOf){\r\n  const total = rows.reduce((a,r)=>a+Math.max(0,shareOf(r)),0);\r\n  if(!(total>0)) return rows.map(r=>({r,slots:0}));\r\n  const out = rows.map(r=>{ const exact=n*Math.max(0,shareOf(r))\/total;\r\n    return {r, exact, slots:Math.min(Math.floor(exact), r.count)}; });\r\n  let left = n - out.reduce((a,x)=>a+x.slots,0);\r\n  out.slice().sort((a,b)=>(b.exact-b.slots)-(a.exact-a.slots))\r\n     .forEach(x=>{ if(left>0 && x.slots<x.r.count){ x.slots++; left--; } });\r\n  if(left>0) out.slice().sort((a,b)=>shareOf(b.r)-shareOf(a.r))\r\n     .forEach(x=>{ while(left>0 && x.slots<x.r.count){ x.slots++; left--; } });\r\n  return out;\r\n}\r\n\/* Fisher\u2013Yates, so the order of a sitting is never the order of the bank *\/\r\nfunction shuffle(a){\r\n  for(let i=a.length-1;i>0;i--){ const j=Math.floor(Math.random()*(i+1)); [a[i],a[j]]=[a[j],a[i]]; }\r\n  return a;\r\n}\r\n\/* Weighted sampling without replacement: a high score makes a question\r\n   likely, never certain. Two sittings built back to back therefore share\r\n   only part of their content instead of being identical. *\/\r\nfunction sampleWeighted(pool, n, scoreFn){\r\n  const items = pool.map(q=>({q, w:Math.max(scoreFn(q), 1e-9)}));\r\n  const out=[];\r\n  n = Math.min(n, items.length);\r\n  for(let k=0;k<n;k++){\r\n    let total=0; items.forEach(x=>total+=x.w);\r\n    let r=Math.random()*total, hit=items.length-1;\r\n    for(let i=0;i<items.length;i++){ r-=items[i].w; if(r<=0){ hit=i; break; } }\r\n    out.push(items[hit].q);\r\n    items.splice(hit,1);\r\n  }\r\n  return out;\r\n}\r\nfunction buildSession(kind){\r\n  const rows = chapterRows().filter(r=>r.count>0);\r\n  if(!rows.length) return 0;\r\n  const n = Math.min(kind==='mock'?CFG.mockSize:CFG.sessionSize, QS.length);\r\n  const alloc = allocate(rows, n, kind==='mock' ? (r=>r.weight) : (r=>r.leak));\r\n\r\n  \/\/ whatever you were given last time is pushed down, not banned\r\n  const last = new Set(P.queue||[]);\r\n  const fresh = u => last.has(u) ? 0.3 : 1;\r\n\r\n  const picked=[];\r\n  alloc.forEach(({r,slots})=>{\r\n    if(!slots) return;\r\n    const pool = inCh(r.chapter).slice();\r\n    if(kind==='mock'){\r\n      \/\/ the mock ignores how well you know a question and simply spreads\r\n      \/\/ itself over the bank, favouring what you have seen least\r\n      picked.push(...sampleWeighted(pool, slots, q=>{\r\n        const st=P.stats[uid(q)], seen=st?(st.correct+st.incorrect):0;\r\n        const stale=(st&&st.last) ? Math.min((Date.now()-st.last)\/(86400000*30),1) : 1;\r\n        return (1\/(1+seen*1.6) + 0.35*stale) * fresh(uid(q));\r\n      }));\r\n    } else {\r\n      picked.push(...sampleWeighted(pool, slots, q=>gain(q)*fresh(uid(q))));\r\n    }\r\n  });\r\n  shuffle(picked);\r\n  P.queue = picked.map(uid);\r\n  P.queueLabel = kind==='mock' ? 'Mock paper' : 'Focused set';\r\n  P.queueKind = kind;\r\n  save();\r\n  return picked.length;\r\n}\r\nfunction startSession(kind){\r\n  const had = (P.queue||[]).length;\r\n  const n = buildSession(kind);\r\n  if(!n){ toast('Nothing to build a session from yet'); return; }\r\n  setTab('quiz'); setFilter('session');\r\n  S.ans = {};                                   \/\/ a new sitting starts clean\r\n  toast(P.queueLabel+' ready \u2014 '+n+' fresh questions'+(had?' (previous set replaced)':''), true);\r\n}\r\n\r\n\/* =====================================================================\r\n   11. POOL \/ FILTERS\r\n   ===================================================================== *\/\r\nfunction pool(){\r\n  let p = QS.slice();\r\n  if(S.filter==='chapter' && S.chapter) p = inCh(S.chapter).slice();\r\n  if(S.filter==='weak')    p = p.filter(q=>weak.has(uid(q)));\r\n  if(S.filter==='flagged') p = p.filter(q=>flags.has(uid(q)));\r\n  if(S.filter==='session') p = (P.queue||[]).map(u=>BY_UID.get(u)).filter(Boolean);\r\n  if(S.query){ const t=S.query.toLowerCase();\r\n    p = p.filter(q=>(q.question+' '+q.options.join(' ')+' '+q.explanation).toLowerCase().includes(t)); }\r\n  if(S.unattempted) p = p.filter(q=>S.ans[uid(q)]==null);\r\n  return p;\r\n}\r\nfunction refreshWeak(){\r\n  weak.clear();\r\n  QS.forEach(q=>{ const s=P.stats[uid(q)];\r\n    if(s && s.incorrect>=CFG.weakThreshold && s.correct<CFG.masteryThreshold) weak.add(uid(q)); });\r\n  P.weak=[...weak];\r\n}\r\nrefreshWeak();\r\n\r\n\/* =====================================================================\r\n   12. STEM RENDERING (statements + List-I \/ List-II)\r\n   ===================================================================== *\/\r\nconst cleanStem = t => String(t).replace(\/^\\s*(?:Q|Question)\\s*\\.?\\s*\\d+\\s*[.):\\-]\\s*\/i,'').trim();\r\nconst QN = '<span class=\"qno\">Q.<\/span>';   \/\/ the marker printed before every stem\r\nfunction buildStem(raw){\r\n  const lines = raw.split(\/<br\\s*\\\/?>|\\n\/).map(s=>s.trim()).filter(Boolean);\r\n  const plain = s => s.replace(\/<\\\/?b>\/g,'').trim();\r\n  const isMatch = lines.some(l=>\/^List\\s*[-\u2013\u2014]?\\s*I\\b\/i.test(plain(l)));\r\n  const numbered = lines.filter(l=>\/^\\d+[.)]\\s\/.test(plain(l)));\r\n  if(isMatch) return matchCard(lines, plain);\r\n  if(numbered.length>=2) return stmtCard(lines, plain);\r\n  return plainCard(lines);\r\n}\r\n\/* a single-statement question gets the same sheet as the other two, so\r\n   every question on the page reads the same way *\/\r\nfunction plainCard(lines){\r\n  return '<div class=\"stem\" id=\"qStem\"><div class=\"qsheet\">'\r\n    + lines.map((l,i)=>'<p class=\"'+(i===0?'lead':'close')+'\">'+(i===0?QN:'')+l+'<\/p>').join('')\r\n    + '<\/div><\/div>';\r\n}\r\nfunction stmtCard(lines, plain){\r\n  const isN = l => \/^\\d+[.)]\\s\/.test(plain(l));\r\n  const first = lines.findIndex(isN);\r\n  let last=-1; lines.forEach((l,i)=>{ if(isN(l)) last=i; });\r\n  const head = lines.slice(0,first), tail = lines.slice(last+1);\r\n  const items = lines.slice(first,last+1).filter(isN).map(l=>plain(l).replace(\/^\\d+[.)]\\s*\/,''));\r\n  return '<div class=\"stem\" id=\"qStem\"><div class=\"qsheet\">'\r\n    + head.map((l,i)=>'<p class=\"'+(i===0?'lead':'intro')+'\">'+(i===0?QN:'')+l+'<\/p>').join('')\r\n    + '<ol class=\"stmts\">'+items.map(t=>'<li><span>'+t+'<\/span><\/li>').join('')+'<\/ol>'\r\n    + tail.map(l=>'<p class=\"close\">'+l+'<\/p>').join('')\r\n    + '<\/div><\/div>';\r\n}\r\n\/* Match-the-following comes in every shape: one item per line, or the\r\n   whole list run together on a single line separated by semicolons or\r\n   commas, or nothing at all between items. All three are split here so\r\n   the two columns always come out as proper rows. *\/\r\nfunction splitItems(body, kind){\r\n  const lab = kind==='alpha' ? '[A-Fa-f]' : '\\\\d{1,2}';\r\n  const mk  = re => new RegExp(re.replace('LAB', lab), 'g');\r\n  let parts = body.split(mk('\\\\s*[;\\\\n]\\\\s*(?=LAB\\\\s*[.):]\\\\s)'));\r\n  if(parts.length < 2) parts = body.split(mk('\\\\s*,\\\\s*(?=LAB\\\\s*[.):]\\\\s)'));\r\n  if(parts.length < 2) parts = body.split(mk('(?<=\\\\S)\\\\s+(?=LAB\\\\s*[.)]\\\\s)'));\r\n  const re = new RegExp('^\\\\s*('+lab+')\\\\s*[.):]\\\\s*(.+?)\\\\s*[;,.]?\\\\s*$');\r\n  return parts.map(p=>{ const m=String(p).match(re);\r\n    return m ? {k:m[1].toUpperCase(), v:m[2]} : null; }).filter(Boolean);\r\n}\r\nfunction matchCard(lines, plain){\r\n  \/\/ keep line breaks, normalise only runs of spaces\r\n  const text = lines.map(plain).join('\\n').replace(\/[ \\t]+\/g,' ').trim();\r\n\r\n  \/* The opening line almost always names both lists \u2014 \"Match List-I with\r\n     List-II and select\u2026\" \u2014 so the first occurrence of each is the wrong\r\n     one. Take the last List-I that actually has items after it, and the\r\n     first List-II following that. *\/\r\n  const at = re => [...text.matchAll(re)].map(m=>m.index);\r\n  const posI  = at(\/List\\s*[-\u2013\u2014]?\\s*I\\b\/gi);\r\n  const posII = at(\/List\\s*[-\u2013\u2014]?\\s*II\\b\/gi);\r\n  const hasItems = (str,kind) =>\r\n    (kind==='alpha' ? \/[A-F]\\s*[.):]\\s\/ : \/\\d{1,2}\\s*[.):]\\s\/).test(str);\r\n  let iI=-1, iII=-1;\r\n  for(let k=posI.length-1;k>=0 && iI<0;k--){\r\n    const ii = posII.find(x=>x>posI[k]);\r\n    if(ii===undefined) continue;\r\n    if(hasItems(text.slice(posI[k],ii),'alpha') && hasItems(text.slice(ii),'num')){ iI=posI[k]; iII=ii; }\r\n  }\r\n  if(iI<0 || iII<0) return plainCard(lines);\r\n\r\n  const head  = text.slice(0, iI).trim();\r\n  let segI    = text.slice(iI, iII).trim();\r\n  let segII   = text.slice(iII).trim();\r\n\r\n  \/\/ anything after the lists \u2014 \"Code :\", \"Select the correct answer\u2026\"\r\n  let tail = '';\r\n  const t = segII.match(\/(?:\\n|\\s)(Code\\s*[:.]?\\s*$|(?:Select|Choose)\\b[\\s\\S]*$)\/i);\r\n  if(t){ tail = t[1].trim(); segII = segII.slice(0, t.index).trim(); }\r\n\r\n  \/\/ column captions: \"List-I (Purpose of Leave) :\"\r\n  const capRe = \/^List\\s*[-\u2013\u2014]?\\s*I{1,2}\\b\\s*(\\([^)]*\\))?\\s*[:.]?\\s*\/i;\r\n  const hI  = segI.match(capRe),  hII = segII.match(capRe);\r\n  const capI  = hI  ? hI[0].replace(\/[\\s:.]+$\/,'')  : 'List-I';\r\n  const capII = hII ? hII[0].replace(\/[\\s:.]+$\/,'') : 'List-II';\r\n  const rowsI  = splitItems(hI  ? segI.slice(hI[0].length)  : segI,  'alpha');\r\n  const rowsII = splitItems(hII ? segII.slice(hII[0].length): segII, 'num');\r\n  if(!rowsI.length || !rowsII.length) return plainCard(lines);\r\n\r\n  const cell = x => '<li><b>'+x.k+'.<\/b><span>'+x.v+'<\/span><\/li>';\r\n  const headLines = head ? head.split('\\n').filter(Boolean) : [];\r\n  return '<div class=\"stem\" id=\"qStem\"><div class=\"qsheet\">'\r\n    + (headLines.length\r\n        ? headLines.map((l,i)=>'<p class=\"'+(i===0?'lead':'intro')+'\">'+(i===0?QN:'')+l+'<\/p>').join('')\r\n        : '<p class=\"lead\">'+QN+'Match List-I with List-II and select the correct answer using the code given below the Lists:<\/p>')\r\n    + '<div class=\"lists\">'\r\n      + '<div class=\"lcol\"><h5>'+capI+'<\/h5><ul>'+rowsI.map(cell).join('')+'<\/ul><\/div>'\r\n      + '<div class=\"lcol\"><h5>'+capII+'<\/h5><ul>'+rowsII.map(cell).join('')+'<\/ul><\/div>'\r\n    + '<\/div>'\r\n    + '<p class=\"close\">'+(tail || 'Select the correct answer using the code given below:')+'<\/p>'\r\n    + '<\/div><\/div>';\r\n}\r\n\r\n\/* =====================================================================\r\n   13. UI HELPERS\r\n   ===================================================================== *\/\r\nconst $ = id => document.getElementById(id);\r\nlet toastTimer=null;\r\nfunction toast(msg, ok){\r\n  const t=$('toast'); t.innerHTML=msg; t.className='toast show'+(ok?' ok':'');\r\n  clearTimeout(toastTimer); toastTimer=setTimeout(()=>t.className='toast',3000);\r\n}\r\nconst SRC_ON = !!(CFG.sourceUrl && CFG.sourceUrl.trim());\r\nconst stripHtml = s => String(s).replace(\/<[^>]+>\/g,'').replace(\/\\s+\/g,' ').trim();\r\nconst preview = (q,n) => { const t=stripHtml(q.question); return t.length>n ? t.slice(0,n)+'\u2026' : t; };\r\nfunction stars(u){\r\n  const s=P.stats[u]; if(!s || (s.correct+s.incorrect)===0) return null;\r\n  return { filled: Math.min(s.correct, CFG.masteryThreshold), c:s.correct, i:s.incorrect };\r\n}\r\n\r\n\/* =====================================================================\r\n   14. RENDER \u2014 PRACTICE\r\n   ===================================================================== *\/\r\nfunction renderCtx(){\r\n  const panel=$('chapPanel');\r\n  const on = S.filter==='chapter';\r\n  panel.classList.toggle('hide', !on);\r\n  if(!on) return;\r\n  const rows = chapterRows().filter(r=>r.count>0).sort(byChapterOrder);\r\n  if(!S.chapter || !rows.some(r=>r.chapter===S.chapter)) S.chapter = rows[0] ? rows[0].chapter : null;\r\n  $('chapList').innerHTML = rows.map((r,n)=>{\r\n    const sel = r.chapter===S.chapter;\r\n    const mastered = inCh(r.chapter).filter(q=>{ const s=P.stats[uid(q)]; return s && s.correct>=CFG.masteryThreshold; }).length;\r\n    const title = r.chapter+' \u00b7 '+r.count+' question'+(r.count===1?'':'s')+' \u00b7 '\r\n                + Math.round(r.coverage*100)+'% seen'+(mastered?' \u00b7 '+mastered+' mastered':'');\r\n    return '<button class=\"chapchip\" aria-pressed=\"'+sel+'\" data-ch=\"'+encodeURIComponent(r.chapter)+'\" title=\"'+title+'\">'\r\n      + '<span class=\"no\">'+(n+1)+'<\/span>'\r\n      + '<span class=\"cn\">'+titleCase(r.chapter)+'<\/span>'\r\n\r\n      + (mastered===r.count ? '<span class=\"done\">\u2713<\/span>' : '')\r\n      + '<span class=\"cc\">'+r.count+'<\/span><\/button>';\r\n  }).join('');\r\n  const r = rows.find(x=>x.chapter===S.chapter);\r\n  $('ctxMeta').textContent = r\r\n    ? Math.round(r.coverage*100)+'% seen \u00b7 '+(r.acc===null?'not attempted':Math.round(r.acc*100)+'% accurate')\r\n    : '';\r\n}\r\nfunction render(){\r\n  renderCtx();\r\n  const p = pool();\r\n  const ec = $('emptyCard');\r\n  if(!p.length){\r\n    $('qCard').classList.add('hide'); ec.classList.remove('hide');\r\n    $('emptyBody').innerHTML =\r\n      S.query    ? '<b>No match for \u201c'+S.query+'\u201d<\/b>Try a rule or paragraph number, or a phrase like \u201cpart file\u201d.' :\r\n      S.filter==='weak'    ? '<b>No weak areas yet<\/b>Anything you answer wrong lands here until you have it right '+CFG.masteryThreshold+' times.' :\r\n      S.filter==='flagged' ? '<b>Nothing flagged yet<\/b>Press <b style=\"display:inline\">Flag for review<\/b> under any question and it collects here.' :\r\n      S.filter==='session' ? '<b>No session built yet<\/b>Open My Performance and build a Focused set or a Mock paper.' :\r\n      S.unattempted        ? '<b>You have attempted everything here<\/b>Turn off \u201cUnattempted only\u201d to revise what you have done.' :\r\n                             '<b>No questions in this selection<\/b>Clear the search or pick another chapter.';\r\n    renderNav(p); rail(p); return;\r\n  }\r\n  ec.classList.add('hide'); $('qCard').classList.remove('hide');\r\n  if(S.i>=p.length) S.i=0; if(S.i<0) S.i=p.length-1;\r\n\r\n  const q=p[S.i], u=uid(q), given=S.ans[u];\r\n  $('qCount').textContent = 'Question '+(S.i+1)+' of '+p.length;\r\n  $('qChap').textContent  = chBrief(q.chapter);\r\n  const tags=[];\r\n  if(weak.has(u))  tags.push('<span class=\"qtag weak\">\u26a0\ufe0f Weak<\/span>');\r\n  if(flags.has(u)) tags.push('<span class=\"qtag flag\">\ud83d\udd16 Flagged<\/span>');\r\n  const sMast=P.stats[u];\r\n  if(sMast && sMast.correct>=CFG.masteryThreshold) tags.push('<span class=\"qtag done\">\u2713 Mastered<\/span>');\r\n  $('qTags').innerHTML = tags.join('');\r\n  const st = stars(u), badge=$('qMastery');\r\n  if(!st){ badge.textContent='Not seen yet'; badge.className='badge-m'; }\r\n  else {\r\n    const done = st.c>=CFG.masteryThreshold;\r\n    badge.textContent = '\u2605'.repeat(st.filled)+'\u2606'.repeat(Math.max(0,CFG.masteryThreshold-st.filled))+'  '+st.c+'\u2713 '+st.i+'\u2717';\r\n    badge.className = 'badge-m'+(weak.has(u)&&!done?' weak':'');\r\n  }\r\n  $('qStem').outerHTML = buildStem(cleanStem(q.question));\r\n\r\n  const box=$('qOpts'); box.innerHTML='';\r\n  q.options.forEach((o,k)=>{\r\n    const b=document.createElement('button');\r\n    b.className='opt';\r\n    b.innerHTML='<span class=\"key\">('+L[k].toLowerCase()+')<\/span><span class=\"txt\">'+o+'<\/span>';\r\n    if(given!=null){\r\n      b.disabled=true;\r\n      if(k===q.correct){ b.classList.add('right'); b.insertAdjacentHTML('beforeend','<span class=\"mark r\">Correct<\/span>'); }\r\n      else if(k===given){ b.classList.add('wrong'); b.insertAdjacentHTML('beforeend','<span class=\"mark w\">Your answer<\/span>'); }\r\n    } else if(S.pick===k) b.classList.add('sel');\r\n    b.onclick=()=>{ if(given!=null) return; S.pick=k; S.nudge=false; render(); };\r\n    box.appendChild(b);\r\n  });\r\n\r\n  const bc=$('btnCheck');\r\n  bc.disabled = given!=null;\r\n  bc.textContent = given!=null ? 'Answered \u2713' : 'Check answer';\r\n  $('pickHint').classList.toggle('hide', !(given==null && S.pick==null && S.nudge));\r\n  const on = flags.has(u);\r\n  $('btnFlag').setAttribute('aria-pressed', on);\r\n  $('flagIco').textContent = on ? '\ud83d\udd16' : '\ud83c\udff3\ufe0f';\r\n  $('flagTxt').textContent = on ? 'Flagged' : 'Flag for review';\r\n\r\n  const res=$('result');\r\n  res.classList.toggle('hide', given==null);\r\n  if(given!=null){\r\n    const ok = given===q.correct, v=$('verdict');\r\n    v.className='verdict '+(ok?'r':'w');\r\n    v.innerHTML = ok ? '\u2713 Correct \u2014 '+L[q.correct]+' is right'\r\n                     : '\u2715 Not quite \u2014 the answer is '+L[q.correct];\r\n    $('explBody').innerHTML = q.explanation;\r\n  }\r\n  renderNav(p); rail(p);\r\n}\r\nlet navOpen=true;\r\nfunction renderNav(p){\r\n  const card=$('navCard');\r\n  if(!p.length){ card.classList.add('hide'); return; }\r\n  card.classList.remove('hide');\r\n  const done=p.filter(q=>S.ans[uid(q)]!=null).length;\r\n  $('navTitle').textContent = 'Navigator \u2014 '+done+' of '+p.length+' attempted';\r\n  const g=$('navGrid');\r\n  g.classList.toggle('hide', !navOpen);\r\n  $('navToggle').textContent = navOpen ? 'Hide' : 'Show';\r\n  if(!navOpen) return;\r\n  g.innerHTML='';\r\n  p.forEach((q,k)=>{\r\n    const u=uid(q), a=S.ans[u], s=P.stats[u];\r\n    const b=document.createElement('button');\r\n    b.className='nq'+(k===S.i?' cur':(a!=null?(a===q.correct?' r':' w'):''))\r\n              + (s && s.correct>=CFG.masteryThreshold ? ' mastered':'');\r\n    b.innerHTML=(k+1)+(flags.has(u)?'<span class=\"fl\">\ud83d\udd16<\/span>':'');\r\n    b.title = 'Q'+(k+1)+' \u00b7 '+chBrief(q.chapter)+(a!=null?(a===q.correct?' \u00b7 correct':' \u00b7 wrong'):'');\r\n    b.setAttribute('aria-label','Go to question '+(k+1));\r\n    b.onclick=()=>{ S.i=k; S.pick=null; render(); };\r\n    g.appendChild(b);\r\n  });\r\n}\r\nfunction rail(p){\r\n  const seen=Object.keys(S.ans).length;\r\n  const right=Object.entries(S.ans).filter(([u,a])=>BY_UID.get(u) && BY_UID.get(u).correct===a).length;\r\n  $('sPct').textContent = seen ? Math.round(right\/seen*100)+'%' : '\u2014';\r\n  $('sFrac').textContent = right+' of '+seen+' correct';\r\n  $('sBar').style.width = (seen?right\/seen*100:0)+'%';\r\n  $('sSeen').textContent = seen+' attempted';\r\n  $('sLeft').textContent = Math.max(0,p.length-S.i-1)+' left here';\r\n  const st=$('streak'); st.innerHTML='';\r\n  Object.entries(S.ans).slice(-10).forEach(([u,a])=>{\r\n    const q=BY_UID.get(u); if(!q) return;\r\n    const el=document.createElement('i'); el.className = q.correct===a?'r':'w'; st.appendChild(el);\r\n  });\r\n  const chs=[...new Set(p.map(q=>q.chapter))];\r\n  const w=chs.reduce((s,c)=>s+weightOf(c),0)*100;\r\n  $('wPct').textContent = w.toFixed(1)+'%';\r\n  $('wNote').textContent = p.length+' questions on screen, from '+chs.length+' '+(chs.length===1?'chapter':'chapters')+'. '\r\n    + (w>=35 ? 'That is a big slice in one sitting \u2014 worth clearing properly.' : 'Useful for topping up once the bigger chapters are secure.');\r\n  hdr();\r\n}\r\nfunction hdr(){\r\n  $('hQ').textContent = QS.length;\r\n  $('hCh').textContent = CHAPTERS.length;\r\n  $('hMastered').textContent = (QS.length ? Math.round(masteredCount()\/QS.length*100) : 0)+'%';\r\n  const r=readiness();\r\n  $('hReady').textContent = r.touched ? r.score+'%' : '\u2014';\r\n  $('fAll').textContent  = QS.length;\r\n  $('fWeak').textContent = weak.size;\r\n  $('fFlag').textContent = flags.size;\r\n  $('fSess').textContent = (P.queue||[]).length;\r\n  $('pillSession').classList.toggle('hide', !(P.queue||[]).length);\r\n  $('sessLabel').textContent = P.queueLabel || 'My session';\r\n  $('perfPill').classList.toggle('hide', weak.size<5);\r\n}\r\n\r\n\/* =====================================================================\r\n   15. RENDER \u2014 PERFORMANCE\r\n   ===================================================================== *\/\r\nfunction renderPerf(){\r\n  const body=$('perfBody');\r\n  const seen=Object.values(P.stats).filter(s=>(s.correct+s.incorrect)>0).length;\r\n  $('perfCount').textContent = seen+' questions attempted';\r\n\r\n  if(!QS.length){ body.innerHTML='<div class=\"empty\"><b>No questions loaded<\/b>Paste your bank into <code>chapterQuestions<\/code> and reload.<\/div>'; return; }\r\n  const R = readiness();\r\n  if(!R.touched){\r\n    body.innerHTML = '<div class=\"empty\"><b>Your coach is waiting for data<\/b>Answer a few questions in Practice. '\r\n      + 'The coach then scores your readiness against the weightage of each chapter, works out where marks are leaking, and builds the next sitting for you.<\/div>'\r\n      + plannerHTML(true);\r\n    bindPerf(); return;\r\n  }\r\n  const rows=R.rows, byPriority=[...rows].sort((a,b)=>b.priority-a.priority);\r\n  const allC=Object.values(P.stats).reduce((a,s)=>a+s.correct,0);\r\n  const allI=Object.values(P.stats).reduce((a,s)=>a+s.incorrect,0);\r\n  const accAll = (allC+allI) ? Math.round(allC\/(allC+allI)*100) : 0;\r\n  const recent = P.log.slice(-20);\r\n  const accRec = recent.length ? Math.round(recent.filter(x=>x.ok).length\/recent.length*100) : 0;\r\n  const trend = recent.length>=5 ? (accRec>accAll?' \u2197':(accRec<accAll?' \u2198':'')) : '';\r\n  const ret = retentionIndex();\r\n  const due = dueForRevision();\r\n  const band=(v,hi,mid)=> v>=hi?'var(--ok)': v>=mid?'#8A6206':'var(--bad)';\r\n\r\n  const verdict = R.score>=80 ? '<b>In good shape.<\/b> Hold it there with the revision queue and weak-area drills.'\r\n    : R.score>=60 ? '<b>Strong base.<\/b> Close the gaps in the biggest chapters below to cross 80.'\r\n    : R.score>=35 ? '<b>Building up.<\/b> Work the plan top-down \u2014 it is ordered by what will move this number fastest.'\r\n    : '<b>Early stage.<\/b> Start at the top of the plan; the biggest chapters move this number fastest.';\r\n\r\n  body.innerHTML =\r\n  '<div class=\"hero2\">'\r\n  + '<div class=\"ring-card\"><div class=\"ring\" role=\"img\" aria-label=\"Readiness '+R.score+' out of 100\">'\r\n    + '<svg width=\"150\" height=\"150\" aria-hidden=\"true\"><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-402*R.score\/100)+'\"><\/circle><\/svg>'\r\n    + '<div class=\"ring-txt\"><b>'+R.score+'<\/b><span>Readiness \/ 100<\/span><\/div><\/div>'\r\n    + '<div class=\"verdict2\">'+verdict+'<br><span style=\"font-size:11.6px;opacity:.85\">'+T.readyDef+' across '+CHAPTERS.length\r\n    + ' chapters. On today\\u2019s form '+T.paperOut+' <b>'+R.projected+'%<\/b>.<\/span><\/div><\/div>'\r\n  + '<div class=\"coach\"><h4>\ud83e\udded What to do next<\/h4><div id=\"recoList\"><\/div><\/div>'\r\n  + '<\/div>'\r\n\r\n  + plannerHTML(false)\r\n\r\n  + '<div class=\"kpis\">'\r\n    + kpi(R.projected+'%',T.projected, band(R.projected,65,45))\r\n    + kpi(R.covered+'%',T.covered, band(R.covered,70,40))\r\n    + kpi(ret===null?'\u2014':ret+'%','Retention now', ret===null?'var(--slate)':band(ret,75,55))\r\n    + kpi(accAll+'%','Lifetime accuracy', band(accAll,70,45))\r\n    + kpi(accRec+'%'+trend,'Last 20 attempts', band(accRec,70,45))\r\n    + kpi(masteredCount(),'Mastered ('+CFG.masteryThreshold+'\u2713)','var(--ok)')\r\n    + kpi(weak.size,'Weak questions','var(--bad)')\r\n    + kpi(flags.size,'Flagged','#8A6206')\r\n  + '<\/div>'\r\n\r\n  + '<section class=\"pblock\"><div class=\"pbh\"><div class=\"txt\">'\r\n    + '<h4><span class=\"dot\"><\/span>Chapter performance \u2014 priority first<\/h4>'\r\n    + '<p>Ordered by what will move your readiness fastest, not by chapter number.<\/p><\/div>'\r\n    + '<span class=\"pbtag\">'+rows.length+' chapters<\/span><\/div>'\r\n    + '<div class=\"tblwrap\" style=\"border:0;border-radius:0\"><table class=\"perf-t\"><thead><tr>'\r\n    + '<th>Chapter<\/th>'+(WT?'<th>'+T.colWeight+'<\/th>':'')+'<th>Coverage<\/th><th>Accuracy<\/th><th>Expected<\/th><th>Status<\/th><th><\/th>'\r\n    + '<\/tr><\/thead><tbody>'\r\n    + byPriority.map(r=>{\r\n        const a = r.acc===null?null:Math.round(r.acc*100);\r\n        const tag = r.count===0 ? '<span class=\"tag na\">No questions<\/span>'\r\n          : r.acc===null ? '<span class=\"tag na\">Not started<\/span>'\r\n          : a<45 ? '<span class=\"tag hot\">Critical<\/span>'\r\n          : a<65 ? '<span class=\"tag warm\">Needs work<\/span>'\r\n          : a<85 ? '<span class=\"tag ok\">On track<\/span>'\r\n                 : '<span class=\"tag good\">Strong<\/span>';\r\n        const bar = a===null ? '\u2014'\r\n          : '<div class=\"tbar\"><i style=\"width:'+a+'%;background:'+(a<45?'var(--bad)':a<65?'var(--gold)':'var(--ok)')+'\"><\/i><\/div><span style=\"font-size:11.5px;font-weight:700\">'+a+'%<\/span>';\r\n        const wcell = WT\r\n          ? '<td><b style=\"color:#8A6206;font-size:15px\">'+pctLabel(r.weight)+'<\/b>'\r\n            + '<span class=\"sub\">'+(r.source==='rated'?'you rated this':'not rated yet')+'<\/span><\/td>'\r\n          : '';\r\n        return '<tr><td title=\"'+r.chapter+'\">'+chBrief(r.chapter)\r\n          + '<span class=\"sub\">'+r.count+' question'+(r.count===1?'':'s')+'<\/span><\/td>'\r\n          + wcell\r\n          + '<td>'+r.att+'\/'+r.count+'<span class=\"sub\">'+Math.round(r.coverage*100)+'% seen<\/span><\/td>'\r\n          + '<td>'+bar+'<\/td>'\r\n          + '<td><b>'+Math.round(r.expected*100)+'%<\/b><span class=\"sub\">\u2248 '+(r.leak*100).toFixed(1)+' '+T.leakWord+' lost<\/span><\/td>'\r\n          + '<td>'+tag+'<\/td>'\r\n          + '<td><button class=\"mini-go\" data-goch=\"'+encodeURIComponent(r.chapter)+'\">Drill<\/button><\/td><\/tr>';\r\n      }).join('')\r\n    + '<\/tbody><\/table><\/div><\/section>'\r\n\r\n  + '<section class=\"pblock\"><div class=\"pbh\"><div class=\"txt\">'\r\n    + '<h4><span class=\"dot\"><\/span>'+T.leakHead+'<\/h4>'\r\n    + '<p id=\"leakNote\"><\/p><\/div>'\r\n    + '<span class=\"pbtag\">'+rows.filter(r=>r.count>0).length+' chapters<\/span><\/div>'\r\n    + '<div class=\"bars\" id=\"leakBars\"><\/div><\/section>'\r\n\r\n  + '<section class=\"pblock\"><div class=\"pbh\"><div class=\"txt\">'\r\n    + '<h4><span class=\"dot\"><\/span>How you handle each kind of question<\/h4>'\r\n    + '<p id=\"fmtNote\"><\/p><\/div>'\r\n    + '<span class=\"pbtag\">Format analysis<\/span><\/div>'\r\n    + '<div class=\"subhead\"><h5>How the question is built<\/h5><span>one shape per question<\/span><\/div>'\r\n    + '<div class=\"bars\" id=\"shapeBars\"><\/div>'\r\n    + '<div class=\"subhead\"><h5>What the question turns on<\/h5><span>a question can sit in more than one \u2014 a time limit asked as a multi-statement code counts on both<\/span><\/div>'\r\n    + '<div class=\"bars\" id=\"traitBars\"><\/div><\/section>'\r\n\r\n  + '<div class=\"split\">'\r\n    + '<div class=\"panel\"><h4 class=\"ph\">Revision queue \u2014 what is fading fastest<\/h4><div id=\"revQ\"><\/div><\/div>'\r\n    + '<div class=\"panel\"><h4 class=\"ph\">Mastery distribution<\/h4><div id=\"mastDist\"><\/div><\/div>'\r\n  + '<\/div>'\r\n\r\n  + '<div class=\"danger\"><p><b>Danger zone.<\/b> This permanently erases your lifetime performance for this subject \u2014 mastery, weak areas, flags, accuracy history and the readiness score. Reset session on the Practice tab does <b>not<\/b> touch this.<\/p>'\r\n    + '<button class=\"dbtn\" id=\"btnWipe\">\ud83d\uddd1\ufe0f Reset my performance<\/button><\/div>';\r\n\r\n  renderRecos(byPriority, rows, due);\r\n  renderLeaks(rows);\r\n  renderFormats();\r\n  renderRevision(due);\r\n  renderMastery();\r\n  bindPerf();\r\n}\r\nfunction kpi(v,l,color){ return '<div class=\"kpi\"><b style=\"color:'+color+'\">'+v+'<\/b><span>'+l+'<\/span><\/div>'; }\r\nfunction plannerHTML(empty){\r\n  const rows=chapterRows().filter(r=>r.count>0).sort((a,b)=>b.leak-a.leak).slice(0,2).map(r=>chShort(r.chapter));\r\n  return '<div class=\"planner\"><div><h4>Plan the next sitting<\/h4><p id=\"plannerNote\">'\r\n    + (empty\r\n        ? 'The focused set gives each chapter time in proportion to what you are losing in it. The mock paper ignores your history and mirrors the shape of the whole bank. Neither is fixed \\u2014 build again and you get a fresh set of questions.'\r\n        : 'The focused set gives each chapter time in proportion to what is leaking out of it \\u2014 right now mostly <b>'+rows.join('<\/b> and <b>')+'<\/b>. The mock paper ignores your history and mirrors the shape of the whole bank. Neither is fixed: press again for a fresh set, and last time\\u2019s questions are pushed to the back of the queue.')\r\n    + '<\/p><\/div><div class=\"pbtns\">'\r\n    + '<button class=\"pbtn primary\" id=\"btnFocus\">\ud83e\udde9 Focused set \u2014 '+Math.min(CFG.sessionSize,QS.length)+' Q<\/button>'\r\n    + '<button class=\"pbtn\" id=\"btnMock\">\ud83d\udcc4 Mock paper \u2014 '+Math.min(CFG.mockSize,QS.length)+' Q<\/button>'\r\n    + '<\/div><\/div>';\r\n}\r\nfunction renderRecos(byPriority, rows, due){\r\n  const out=[], named=new Set();\r\n  byPriority.slice(0,3).forEach(r=>{\r\n    if(!r.count) return;\r\n    named.add(r.chapter);\r\n    const imp = impPhrase(r);\r\n    if(r.acc===null)\r\n      out.push({ic:'warm',icon:'\ud83e\udded',txt:'<b>'+chBrief(r.chapter)+'<\/b>'+(imp?' is '+imp+' and':'')+' you have not touched it yet \u2014 start here.',ch:r.chapter});\r\n    else if(r.acc<0.6)\r\n      out.push({ic:'hot',icon:'\ud83d\udd25',txt:'<b>'+chBrief(r.chapter)+'<\/b>'+(imp?', '+imp+',':'')+' is running at only <b>'+Math.round(r.acc*100)+'%<\/b> \u2014 about <b>'+(r.leak*100).toFixed(1)+' '+T.leakWord+' per 100<\/b> are going here.',ch:r.chapter});\r\n    else if(r.coverage<0.6)\r\n      out.push({ic:'cool',icon:'\ud83d\udd0d',txt:'<b>'+chBrief(r.chapter)+'<\/b>: accuracy is fine at '+Math.round(r.acc*100)+'%, but you have seen only <b>'+Math.round(r.coverage*100)+'%<\/b> of a chapter'+(imp?' '+imp:'')+' \u2014 finish the set.',ch:r.chapter});\r\n    else\r\n      out.push({ic:'good',icon:'\u2705',txt:'<b>'+chBrief(r.chapter)+'<\/b>'+(imp?' ('+stripHtml(imp)+')':'')+' is in good shape at '+Math.round(r.acc*100)+'% \u2014 keep it warm through the revision queue.',ch:r.chapter});\r\n  });\r\n\r\n  \/\/ a format gap costs you in every chapter at once\r\n  const f = formatRows().filter(r=>r.acc!==null && r.attempts>=8).sort((a,b)=>a.acc-b.acc);\r\n  if(f.length>=2){\r\n    const worst=f[0], best=f[f.length-1];\r\n    if(best.acc-worst.acc >= 0.12){\r\n      const tail = worst.kind==='shape'\r\n        ? 'That is a reading habit, not a gap in the rules \u2014 and it costs you in every chapter at once.'\r\n        : 'That is recall, not comprehension \u2014 these have to be committed to memory, and they turn up everywhere.';\r\n      out.push({ic:'hot',icon:'\ud83e\udde9',txt:'<b>'+worst.label+'<\/b> questions are running at <b>'+Math.round(worst.acc*100)+'%<\/b> while you sit at '+Math.round(best.acc*100)+'% on '+best.label.toLowerCase()+'. '+tail});\r\n    }\r\n  }\r\n  \/\/ big chapter you have exhausted\r\n  const done = rows.filter(r=>!named.has(r.chapter) && r.weight>=0.08 && r.coverage>=0.9 && r.count>0).sort((a,b)=>b.weight-a.weight)[0];\r\n  if(done) out.push({ic:'warm',icon:'\ud83d\udcd8',txt:'You have worked nearly every question in <b>'+chBrief(done.chapter)+'<\/b>'+(impPhrase(done)?', '+impPhrase(done):'')+'. Practice has given what it can \u2014 go back to the source text for the rest.',ch:done.chapter});\r\n  if(WT && W.unstocked.length)\r\n    out.push({ic:'hot',icon:'\ud83d\udd73\ufe0f',txt:'<b>'+W.unstocked.length+' rated '+(W.unstocked.length===1?'chapter has':'chapters have')+' no questions in this bank<\/b> \u2014 '+W.unstocked.slice(0,3).map(chBrief).join(', ')+(W.unstocked.length>3?' and others':'')+'. Nothing here prepares you for them.'});\r\n  if(weak.size>=3) out.push({ic:'hot',icon:'\u26a0\ufe0f',txt:'You have <b>'+weak.size+' weak questions<\/b> flagged, biggest chapter first. One Weak-areas sitting clears the backlog.',weak:true});\r\n  if(due.length) out.push({ic:'warm',icon:'\ud83d\udd01',txt:'<b>'+due.length+' questions<\/b> you had mastered have decayed below <b>'+Math.round(CFG.retention.riskBelow*100)+'% recall<\/b>. Re-answering one costs seconds; re-learning it later costs an evening.'});\r\n  if(flags.size) out.push({ic:'cool',icon:'\ud83d\udd16',txt:'<b>'+flags.size+'<\/b> question'+(flags.size>1?'s are':' is')+' flagged for review. Clear the flags before the next mock.',flag:true});\r\n\r\n  $('recoList').innerHTML = out.map(r=>{\r\n    let btn='';\r\n    if(r.ch)        btn='<button class=\"go\" data-goch=\"'+encodeURIComponent(r.ch)+'\">Practice \u2192<\/button>';\r\n    else if(r.weak) btn='<button class=\"go\" data-goweak=\"1\">Start \u2192<\/button>';\r\n    else if(r.flag) btn='<button class=\"go\" data-goflag=\"1\">Open \u2192<\/button>';\r\n    return '<div class=\"reco\"><span class=\"ic '+r.ic+'\">'+r.icon+'<\/span><p>'+r.txt+'<\/p>'+btn+'<\/div>';\r\n  }).join('');\r\n}\r\nfunction renderLeaks(rows){\r\n  const list = rows.filter(r=>r.count>0).sort((a,b)=>b.leak-a.leak);\r\n  if(!list.length) return;\r\n  const max = Math.max(0.0001, ...list.map(r=>r.leak));\r\n  const total = list.reduce((a,r)=>a+r.leak,0)*100;\r\n  const top3 = list.slice(0,3);\r\n  $('leakNote').innerHTML = 'On today\\u2019s form you would expect to drop about <b>'+Math.round(total)+' '+T.leakWord+' in every 100<\/b>. <b>'\r\n    + top3.map(r=>chShort(r.chapter)).join(', ')+'<\/b> alone account for <b>'+Math.round(top3.reduce((a,r)=>a+r.leak,0)*100)\r\n    + '<\/b> of them \u2014 the shortest route to a better score.';\r\n  $('leakBars').innerHTML = list.map(r=>{\r\n    const m=r.leak*100;\r\n    const col = m>=8?'linear-gradient(90deg,#F08A92,var(--bad))' : m>=4?'linear-gradient(90deg,var(--gold-lt),var(--gold))' : 'linear-gradient(90deg,#9DB6EE,var(--blue-700))';\r\n    return '<div class=\"lrow\"><div><span class=\"lname\" title=\"'+r.chapter+'\">'+chBrief(r.chapter)+'<\/span>'\r\n      + '<span class=\"lsub\">'+(impPhrase(r)?stripHtml(impPhrase(r))+' \u00b7 ':'')+'you would clear about '+Math.round(r.expected*100)+'% today<\/span><\/div>'\r\n      + '<div class=\"ltrack\"><div class=\"lfill\" style=\"width:'+(r.leak\/max*100)+'%;background:'+col+'\"><\/div><\/div>'\r\n      + '<div class=\"lval\">'+m.toFixed(1)+'<small>'+T.leakUnit+'<\/small><\/div><\/div>';\r\n  }).join('');\r\n}\r\nfunction renderFormats(){\r\n  const rows=formatRows();\r\n  const bar = r => {\r\n    const p = r.acc===null?null:Math.round(r.acc*100);\r\n    const col = p===null?'#CBD5E1' : p<50?'linear-gradient(90deg,#F08A92,var(--bad))' : p<70?'linear-gradient(90deg,var(--gold-lt),var(--gold))' : 'linear-gradient(90deg,#6EE7B7,var(--ok))';\r\n    return '<div class=\"lrow\"><div><span class=\"lname\">'+r.label+'<\/span>'\r\n      + '<span class=\"lsub\">'+r.total+' in this bank \u00b7 '+r.seen+' attempted<\/span><\/div>'\r\n      + '<div class=\"ltrack\"><div class=\"lfill\" style=\"width:'+(p===null?0:p)+'%;background:'+col+'\"><\/div><\/div>'\r\n      + '<div class=\"lval\">'+(p===null?'\u2014':p+'%')+'<small>accuracy<\/small><\/div><\/div>';\r\n  };\r\n  const sorter=(a,b)=>(a.acc===null)-(b.acc===null)||(a.acc-b.acc);\r\n  $('shapeBars').innerHTML = rows.filter(r=>r.kind==='shape').sort(sorter).map(bar).join('');\r\n  $('traitBars').innerHTML = rows.filter(r=>r.kind==='trait').sort(sorter).map(bar).join('');\r\n  const rated = rows.filter(r=>r.acc!==null && r.attempts>=8).sort(sorter);\r\n  $('fmtNote').innerHTML = rated.length>=2\r\n    ? (()=>{ const w=rated[0], b=rated[rated.length-1], gap=Math.round((b.acc-w.acc)*100);\r\n        return gap>=12\r\n          ? 'Your weakest kind of question is <b>'+w.label+'<\/b> at <b>'+Math.round(w.acc*100)+'%<\/b>, against <b>'+Math.round(b.acc*100)+'%<\/b> on '+b.label.toLowerCase()+' \u2014 a <b>'+gap+'-point<\/b> gap. That is worth more than any single chapter, because these turn up in all of them.'\r\n          : 'You handle the different kinds of question evenly, within <b>'+gap+' points<\/b> of each other. Nothing to fix here \u2014 keep working the chapter list.'; })()\r\n    : 'Attempt a few more and this will show whether the format is costing you more than the topic.';\r\n}\r\nfunction renderRevision(due){\r\n  $('revQ').innerHTML = due.length\r\n    ? due.slice(0,8).map(d=>'<button class=\"rev\" data-gouid=\"'+encodeURIComponent(uid(d.q))+'\">'\r\n        + '<span class=\"n\">Q'+d.q.id+'<\/span><span class=\"t\">'+preview(d.q,58)+'<\/span>'\r\n        + '<span class=\"d\">'+Math.round(d.recall*100)+'% recall<\/span><\/button>').join('')\r\n    : '<p style=\"font-size:13px;color:var(--slate);line-height:1.6\">Nothing decaying right now. Mastered questions return here as their estimated recall drops below '+Math.round(CFG.retention.riskBelow*100)+'%.<\/p>';\r\n}\r\nfunction renderMastery(){\r\n  const b=[0,0,0,0];\r\n  QS.forEach(q=>{ const s=P.stats[uid(q)];\r\n    if(!s || (s.correct+s.incorrect)===0) b[0]++;\r\n    else if(s.correct>=CFG.masteryThreshold) b[3]++;\r\n    else if(s.correct>=2) b[2]++;\r\n    else b[1]++; });\r\n  const labels=['Untouched','Learning (0\u20131 \u2713)','Almost there (2 \u2713)','Mastered ('+CFG.masteryThreshold+' \u2713+)'];\r\n  const cols=['#CBD5E1','var(--gold)','var(--blue-700)','var(--ok)'];\r\n  $('mastDist').innerHTML = b.map((n,i)=>\r\n    '<div class=\"lrow\" style=\"grid-template-columns:minmax(120px,1fr) 2fr 54px\"><span class=\"lname\">'+labels[i]+'<\/span>'\r\n    + '<div class=\"ltrack\"><div class=\"lfill\" style=\"width:'+(QS.length?n\/QS.length*100:0)+'%;background:'+cols[i]+'\"><\/div><\/div>'\r\n    + '<div class=\"lval\" style=\"font-size:15px\">'+n+'<\/div><\/div>').join('');\r\n}\r\nfunction bindPerf(){\r\n  const f=$('btnFocus'), m=$('btnMock'), w=$('btnWipe');\r\n  if(f) f.onclick=()=>startSession('focus');\r\n  if(m) m.onclick=()=>startSession('mock');\r\n  if(w) w.onclick=wipe;\r\n}\r\n\r\n\/* =====================================================================\r\n   16. ANSWERING\r\n   ===================================================================== *\/\r\nfunction check(){\r\n  const p=pool(), q=p[S.i]; if(!q) return;\r\n  if(S.pick==null){ S.nudge=true; render(); return; }\r\n  const u=uid(q), ok = S.pick===q.correct;\r\n  S.ans[u]=S.pick; S.pick=null; S.nudge=false;\r\n  const s=stat(u);\r\n  ok ? s.correct++ : s.incorrect++;\r\n  s.last=Date.now(); s.lastOk=ok;\r\n  P.log.push({u, ok, ts:Date.now()});\r\n  P.lastUid=u;\r\n  refreshWeak(); save(); render();\r\n  const res=$('result'); if(res && res.scrollIntoView) try{ res.scrollIntoView({block:'nearest',behavior:'smooth'}); }catch(e){}\r\n}\r\nfunction wipe(){\r\n  if(!confirm('Permanently erase ALL lifetime performance for this subject?\\n\\nMastery, weak areas, flags, accuracy history, the built session and the readiness score all go. This cannot be undone.')) return;\r\n  P = blank(); flags.clear(); weak.clear(); S.ans={};\r\n  save(); setFilter('all'); renderPerf(); hdr();\r\n  toast('Lifetime performance erased', true);\r\n}\r\n\r\n\/* =====================================================================\r\n   18. EVENTS\r\n   ===================================================================== *\/\r\nfunction setTab(t){\r\n  S.tab=t;\r\n  document.querySelectorAll('#cdRoot .tab').forEach(b=>b.setAttribute('aria-selected', b.dataset.tab===t));\r\n  $('viewQuiz').classList.toggle('hide', t!=='quiz');\r\n  $('viewPerf').classList.toggle('hide', t!=='perf');\r\n  $('cdFilters').classList.toggle('hide', t!=='quiz');\r\n  if(t==='perf') renderPerf();\r\n}\r\nfunction setFilter(f, ch){\r\n  S.filter=f; S.i=0; S.pick=null;\r\n  if(ch) S.chapter=ch;\r\n  document.querySelectorAll('#cdRoot .pill-f').forEach(b=>b.setAttribute('aria-pressed', b.dataset.f===f));\r\n  render();\r\n}\r\ndocument.querySelectorAll('#cdRoot .tab').forEach(b=>b.onclick=()=>setTab(b.dataset.tab));\r\ndocument.querySelectorAll('#cdRoot .pill-f').forEach(b=>b.onclick=()=>setFilter(b.dataset.f));\r\n$('chapList').addEventListener('click', e=>{\r\n  const chip=e.target.closest('.chapchip'); if(!chip) return;\r\n  S.chapter = decodeURIComponent(chip.dataset.ch);\r\n  S.i=0; S.pick=null; render();\r\n});\r\n$('btnCheck').onclick = check;\r\n$('btnNext').onclick  = ()=>{ S.i++; S.pick=null; render(); };\r\n$('btnPrev').onclick  = ()=>{ S.i--; S.pick=null; render(); };\r\n$('btnFlag').onclick  = ()=>{\r\n  const p=pool(), q=p[S.i]; if(!q) return;\r\n  const u=uid(q);\r\n  flags.has(u) ? flags.delete(u) : flags.add(u);\r\n  P.flags=[...flags]; save(); render();\r\n};\r\n$('navToggle').onclick = ()=>{ navOpen=!navOpen; renderNav(pool()); };\r\nlet tmr;\r\n$('cdSearch').addEventListener('input', e=>{\r\n  clearTimeout(tmr);\r\n  tmr=setTimeout(()=>{ S.query=e.target.value.trim(); S.i=0; S.pick=null; render(); },220);\r\n});\r\n$('tglUn').onclick = e=>{\r\n  S.unattempted=!S.unattempted;\r\n  e.currentTarget.setAttribute('aria-pressed',S.unattempted);\r\n  e.currentTarget.firstChild.textContent = S.unattempted?'\u2611 ':'\u25fb ';\r\n  S.i=0; S.pick=null; render();\r\n};\r\n$('tglReset').onclick = ()=>{\r\n  if(!Object.keys(S.ans).length) return;\r\n  if(!confirm('Reset this sitting? Only the answers on screen are cleared \u2014 your lifetime performance and mastery are kept.')) return;\r\n  S.ans={}; S.i=0; S.pick=null; render();\r\n  toast('Session reset \u2014 performance data kept', true);\r\n};\r\n\r\n\/* performance-tab jumps + AI chips, delegated *\/\r\ndocument.addEventListener('click', e=>{\r\n  if(!e.target.closest('#cdRoot')) return;\r\n  const goch=e.target.closest('[data-goch]');\r\n  if(goch){ setTab('quiz'); setFilter('chapter', decodeURIComponent(goch.dataset.goch));\r\n    toast('Filtered to '+chShort(S.chapter), true); return; }\r\n  if(e.target.closest('[data-goweak]')){ setTab('quiz'); setFilter('weak'); return; }\r\n  if(e.target.closest('[data-goflag]')){ setTab('quiz'); setFilter('flagged'); return; }\r\n  const gu=e.target.closest('[data-gouid]');\r\n  if(gu){\r\n    const u=decodeURIComponent(gu.dataset.gouid);\r\n    setTab('quiz'); setFilter('all');\r\n    const idx=pool().findIndex(q=>uid(q)===u);\r\n    if(idx>=0){ S.i=idx; render(); }\r\n    return;\r\n  }\r\n});\r\n\/* keyboard, scoped to the widget *\/\r\ndocument.addEventListener('keydown', e=>{\r\n  if(S.tab!=='quiz') return;\r\n  const t=e.target;\r\n  if(t && (\/^(INPUT|TEXTAREA|SELECT)$\/.test(t.tagName) || t.isContentEditable)) return;\r\n  if(e.ctrlKey||e.metaKey||e.altKey) return;\r\n  const p=pool(); if(!p.length) return;\r\n  const q=p[S.i];\r\n  if(\/^[1-9]$\/.test(e.key)){\r\n    const k=+e.key-1;\r\n    if(q && S.ans[uid(q)]==null && k<q.options.length){ e.preventDefault(); S.pick=k; S.nudge=false; render(); }\r\n    return;\r\n  }\r\n  const low=e.key.toLowerCase();\r\n  if(\/^[a-f]$\/.test(low)){\r\n    const k=low.charCodeAt(0)-97;\r\n    if(q && S.ans[uid(q)]==null && k<q.options.length){ e.preventDefault(); S.pick=k; S.nudge=false; render(); }\r\n    return;\r\n  }\r\n  if(e.key==='Enter'){ e.preventDefault();\r\n    if(q && S.ans[uid(q)]==null) check();\r\n    else if(S.i<p.length-1){ S.i++; S.pick=null; render(); }\r\n    return; }\r\n  if(e.key==='ArrowRight'){ e.preventDefault(); S.i++; S.pick=null; render(); return; }\r\n  if(e.key==='ArrowLeft'){ e.preventDefault(); S.i--; S.pick=null; render(); return; }\r\n  if(low==='f'){ e.preventDefault(); $('btnFlag').click(); }\r\n});\r\nwindow.addEventListener('beforeunload', save);\r\n\r\n\/* =====================================================================\r\n   19. BOOT\r\n   ===================================================================== *\/\r\n$('cdEyebrow').textContent = 'CSS ADDA \u00b7 PromotionExams.com' + (CFG.eyebrow ? '  \u00b7  '+CFG.eyebrow : '');\r\n$('cdTopic').textContent   = CFG.topic;\r\n$('cdSub').textContent     = CFG.sub;\r\n$('wHead').textContent     = T.onScreen;\r\n$('wUnit').textContent     = WT ? 'importance' : 'of this bank';\r\n$('chapHint').textContent  = '';\r\nif(SRC_ON){\r\n  $('srcCard').classList.remove('hide');\r\n  $('srcLink').href = CFG.sourceUrl;\r\n}\r\nif(WT && W.derived.length) console.warn('[importance] not rated yet: '+W.derived.join(' | ')+' \u2014 using share of the bank for these.');\r\nif(WT && W.unstocked.length) console.warn('[importance] these keys matched no chapter in the bank: '+W.unstocked.join(' | '));\r\nif(WT) console.info('[importance] '+CHAPTERS.filter(c=>W.source[c]==='rated').length+' of '+CHAPTERS.length+' chapters matched a rating.');\r\nif(!WT) console.info('[ranking] chapterImportance is empty \u2014 chapters are ranked by their share of this bank and importance is not mentioned anywhere.');\r\nsetTab('quiz');\r\ntry{ render(); }catch(err){ console.error('render failed', err); }\r\n\r\n\/* =====================================================================\r\n   20. CONTENT PROTECTION\r\n   Honest about what this can and cannot do.\r\n\r\n   REALLY BLOCKED\r\n     copy, cut, right-click, drag-out, text selection, Ctrl\/Cmd+C, X, S,\r\n     P, U, and printing or \"Save as PDF\" from the browser.\r\n\r\n   DETERRED, NOT BLOCKED\r\n     screenshots. No web page can stop the operating system taking one \u2014\r\n     Print Screen, Snipping Tool, macOS Shift-Cmd-4 and every phone all\r\n     work below the browser. What is done instead: the questions blur the\r\n     moment this window stops being the front window, which defeats the\r\n     common \"screenshot with another app\" and casual screen-share cases,\r\n     and Print Screen is caught where the browser reports it and the\r\n     clipboard is overwritten.\r\n\r\n   NOT BLOCKED AT ALL\r\n     View Source, Save Page, DevTools, or Reader Mode. Every question is\r\n     in the page HTML because that is how the widget runs. Anyone willing\r\n     to open the source can read the bank. Serving questions from a\r\n     licence-checked endpoint is the only real fix for that; this layer\r\n     stops casual copying, which is what it is for.\r\n   ===================================================================== *\/\r\nconst PROTECT = {\r\n  selection : true,   \/\/ block selecting, copying, cutting, dragging\r\n  context   : true,   \/\/ block right-click inside the widget\r\n  keys      : true,   \/\/ block Ctrl\/Cmd + C X S P U\r\n  print     : true,   \/\/ swap the paper for a notice when printing\r\n  veil      : true    \/\/ blur the questions when the window loses focus\r\n};\r\n\r\n(function protectContent(){\r\n  const root = $('cdRoot');\r\n  const stop = (e, msg) => { e.preventDefault(); e.stopPropagation(); if(msg) toast(msg); return false; };\r\n\r\n  if(PROTECT.selection){\r\n    ['copy','cut'].forEach(ev => root.addEventListener(ev, e=>{\r\n      if(e.target && \/^(INPUT|TEXTAREA)$\/.test(e.target.tagName)) return;   \/\/ let the search box work\r\n      stop(e,'This content cannot be copied');\r\n    }));\r\n    root.addEventListener('dragstart', e=>stop(e));\r\n    root.addEventListener('selectstart', e=>{\r\n      if(e.target && \/^(INPUT|TEXTAREA)$\/.test(e.target.tagName)) return;\r\n      e.preventDefault();\r\n    });\r\n  }\r\n\r\n  if(PROTECT.context)\r\n    root.addEventListener('contextmenu', e=>stop(e,'Right-click is disabled here'));\r\n\r\n  if(PROTECT.keys){\r\n    document.addEventListener('keydown', e=>{\r\n      const t=e.target;\r\n      const inField = t && (\/^(INPUT|TEXTAREA)$\/.test(t.tagName) || t.isContentEditable);\r\n      const k=(e.key||'').toLowerCase();\r\n      if((e.ctrlKey||e.metaKey) && ['c','x','s','p','u'].includes(k)){\r\n        if(inField && (k==='c'||k==='x')) return;    \/\/ copying inside the search box is harmless\r\n        return stop(e, k==='p' ? 'Printing is disabled' : k==='s' ? 'Saving is disabled' : 'This content cannot be copied');\r\n      }\r\n      if((e.ctrlKey||e.metaKey) && e.shiftKey && ['i','j','c'].includes(k)) return stop(e);\r\n      if(e.key==='F12') return stop(e);\r\n    }, true);\r\n\r\n    \/\/ Print Screen only reaches the page on some platforms; overwrite what it left\r\n    document.addEventListener('keyup', e=>{\r\n      if(e.key==='PrintScreen' || e.code==='PrintScreen'){\r\n        try{ navigator.clipboard && navigator.clipboard.writeText(' '); }catch(err){}\r\n        toast('Screenshots are not permitted');\r\n      }\r\n    });\r\n  }\r\n\r\n  if(PROTECT.print){\r\n    \/\/ the CSS swap covers rendering; this catches the shortcut and the menu\r\n    if(window.matchMedia){\r\n      const mq = window.matchMedia('print');\r\n      const onPrint = m => { if(m.matches) toast('Printing is disabled'); };\r\n      mq.addEventListener ? mq.addEventListener('change', onPrint) : mq.addListener(onPrint);\r\n    }\r\n    window.addEventListener('beforeprint', ()=>toast('Printing is disabled'));\r\n  }\r\n\r\n  if(PROTECT.veil){\r\n    const veil = on => root.classList.toggle('veiled', !!on);\r\n    window.addEventListener('blur',  ()=>veil(true));\r\n    window.addEventListener('focus', ()=>veil(false));\r\n    document.addEventListener('visibilitychange', ()=>veil(document.hidden));\r\n  }\r\n})();\r\n\r\n\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>CSS ADDA \u00b7 PromotionExams.com Chapter-wise Test Series Chapter drills with a planner that builds your next sitting for you. 0Questions [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"disabled","ast-banner-title-visibility":"disabled","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"disabled","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[52],"tags":[],"class_list":["post-13602","page","type-page","status-publish","hentry","category-test-series"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>MCQs on Make in India Order - PromotionExams<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/promotionexams.com\/?page_id=13602\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MCQs on Make in India Order - PromotionExams\" \/>\n<meta property=\"og:description\" content=\"CSS ADDA \u00b7 PromotionExams.com Chapter-wise Test Series Chapter drills with a planner that builds your next sitting for you. 0Questions [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/promotionexams.com\/?page_id=13602\" \/>\n<meta property=\"og:site_name\" content=\"PromotionExams\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-31T14:10:04+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"60 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=13602\",\"url\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=13602\",\"name\":\"MCQs on Make in India Order - PromotionExams\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/promotionexams.com\\\/#website\"},\"datePublished\":\"2026-07-16T04:31:39+00:00\",\"dateModified\":\"2026-08-31T14:10:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=13602#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/promotionexams.com\\\/?page_id=13602\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=13602#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/promotionexams.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MCQs on Make in India Order\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/promotionexams.com\\\/#website\",\"url\":\"https:\\\/\\\/promotionexams.com\\\/\",\"name\":\"CSSADDA.IN\",\"description\":\"Best platform for Govt. Departmental Promotion Exams\",\"publisher\":{\"@id\":\"https:\\\/\\\/promotionexams.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/promotionexams.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/promotionexams.com\\\/#organization\",\"name\":\"CSSADDA\",\"url\":\"https:\\\/\\\/promotionexams.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/promotionexams.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/promotionexams.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/CSS-ADDA-Logo.png\",\"contentUrl\":\"https:\\\/\\\/promotionexams.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/CSS-ADDA-Logo.png\",\"width\":1077,\"height\":227,\"caption\":\"CSSADDA\"},\"image\":{\"@id\":\"https:\\\/\\\/promotionexams.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MCQs on Make in India Order - PromotionExams","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/promotionexams.com\/?page_id=13602","og_locale":"en_GB","og_type":"article","og_title":"MCQs on Make in India Order - PromotionExams","og_description":"CSS ADDA \u00b7 PromotionExams.com Chapter-wise Test Series Chapter drills with a planner that builds your next sitting for you. 0Questions [&hellip;]","og_url":"https:\/\/promotionexams.com\/?page_id=13602","og_site_name":"PromotionExams","article_modified_time":"2026-08-31T14:10:04+00:00","twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"60 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/promotionexams.com\/?page_id=13602","url":"https:\/\/promotionexams.com\/?page_id=13602","name":"MCQs on Make in India Order - PromotionExams","isPartOf":{"@id":"https:\/\/promotionexams.com\/#website"},"datePublished":"2026-07-16T04:31:39+00:00","dateModified":"2026-08-31T14:10:04+00:00","breadcrumb":{"@id":"https:\/\/promotionexams.com\/?page_id=13602#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/promotionexams.com\/?page_id=13602"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/promotionexams.com\/?page_id=13602#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/promotionexams.com\/"},{"@type":"ListItem","position":2,"name":"MCQs on Make in India Order"}]},{"@type":"WebSite","@id":"https:\/\/promotionexams.com\/#website","url":"https:\/\/promotionexams.com\/","name":"CSSADDA.IN","description":"Best platform for Govt. Departmental Promotion Exams","publisher":{"@id":"https:\/\/promotionexams.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/promotionexams.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/promotionexams.com\/#organization","name":"CSSADDA","url":"https:\/\/promotionexams.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/promotionexams.com\/#\/schema\/logo\/image\/","url":"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/07\/CSS-ADDA-Logo.png","contentUrl":"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/07\/CSS-ADDA-Logo.png","width":1077,"height":227,"caption":"CSSADDA"},"image":{"@id":"https:\/\/promotionexams.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/13602","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\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13602"}],"version-history":[{"count":0,"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/13602\/revisions"}],"wp:attachment":[{"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}