{"id":14933,"date":"2026-08-04T15:00:03","date_gmt":"2026-08-04T15:00:03","guid":{"rendered":"https:\/\/promotionexams.com\/?page_id=14933"},"modified":"2026-08-05T01:58:55","modified_gmt":"2026-08-05T01:58:55","slug":"video-course-operational-manual-for-internal-audit","status":"publish","type":"page","link":"https:\/\/promotionexams.com\/?page_id=14933","title":{"rendered":"VIDEO COURSE- OPERATIONAL MANUAL FOR INTERNAL AUDIT"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"14933\" class=\"elementor elementor-14933\">\n\t\t\t\t<div class=\"elementor-element elementor-element-61d2fa0 e-con-full e-flex e-con e-parent\" data-id=\"61d2fa0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f692572 elementor-widget elementor-widget-html\" data-id=\"f692572\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\n=====================================================================\n  COURSE PLAYER \u2014 REUSABLE TEMPLATE  (v5 \u00b7 flat register design)\n  Paste into an Elementor HTML widget.\n\n  REUSE IN 3 STEPS\n  1. Edit ONLY the COURSE object below. Nothing else names a subject.\n  2. Each chapter = video + notes + test + study material (downloads).\n     Any part can be omitted (set to null \/ empty array).\n  3. meta.accent = navy | maroon | forest | indigo | slate\n\n  Progress saves to localStorage under \"cp:\" + meta.id\n  (falls back to memory if storage is blocked).\n=====================================================================\n-->\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Bricolage+Grotesque:opsz,wght@12..96,500;12..96,600;12..96,700;12..96,800&family=Public+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n\n<!-- ================= CONTENT: EDIT THIS BLOCK ONLY ================= -->\n<script>\nconst COURSE = {\n\n  meta: {\n    id       : \"gfr-2017\",\n    badge    : \"Paper II\",\n    title    : \"General Financial Rules, 2017\",\n    backUrl  : \"\",\n    accent   : \"navy\",          \/\/ navy | maroon | forest | indigo | slate\n    autoplayNext : true\n  },\n\n  \/* Files shown on every chapter (bare act, full manual, syllabus etc.) *\/\n  library: [\n    { title:\"General Financial Rules, 2017 \u2014 full text\", src:\"Department of Expenditure, Ministry of Finance\",\n      type:\"PDF\", meta:\"286 pages \u00b7 3.1 MB\", url:\"#\" },\n    { title:\"GFR 2017 \u2014 amendments up to date\", src:\"Department of Expenditure\",\n      type:\"PDF\", meta:\"42 pages \u00b7 640 KB\", url:\"#\" }\n  ],\n\n  modules: [\n    {\n      title: \"Foundations\",\n      chapters: [\n\n        {\n          title: \"Scope, Application & Definitions\",\n          ref  : \"Rules 1\u20137\",\n\n          video: { youtube:\"UB1O30fR-EE\", duration:\"12:30\" },\n\n          \/* -------- authentic study material for this chapter -------- *\/\n          material: [\n            { title:\"Chapter 1 \u2014 Introduction (bare text)\", src:\"GFR 2017, Rules 1\u20137\",\n              type:\"PDF\", meta:\"8 pages \u00b7 210 KB\", url:\"#\" },\n            { title:\"Standards of financial propriety \u2014 extract\", src:\"Rule 21, GFR 2017\",\n              type:\"PDF\", meta:\"2 pages \u00b7 90 KB\", url:\"#\" },\n            { title:\"Chapter 1 practice sheet\", src:\"CSS ADDA\",\n              type:\"PDF\", meta:\"25 questions \u00b7 180 KB\", url:\"#\" }\n          ],\n\n          notes: {\n            readTime: \"5 min\",\n            summary : \"The Rules apply to all Ministries and Departments and lay down the general financial framework. They are executive instructions \u2014 subordinate to the Constitution and to any statute.\",\n            highlight: {\n              label: \"Rule 1\",\n              text : \"These rules may be called the General Financial Rules, 2017; they come into force at once and apply to all Ministries\/Departments, attached and subordinate offices.\"\n            },\n            keypoints: [\n              \"GFR are executive instructions \u2014 not statutory rules under Article 309.\",\n              \"Where a special rule conflicts with GFR, the special rule prevails.\",\n              \"Departments may issue supplementary instructions consistent with GFR.\",\n              \"Relaxation of any rule needs the concurrence of the Ministry of Finance.\"\n            ],\n            blocks: [\n              { type:\"para\", title:\"Why the Rules exist\",\n                text:\"GFR consolidate the general financial principles governing receipt, custody and expenditure of public money. They bind every authority handling government funds and are read with the Delegation of Financial Powers Rules and departmental manuals.\" },\n\n              { type:\"table\", title:\"Quick reference\",\n                head:[\"Item\",\"Position\"],\n                rows:[\n                  [\"Nature of rules\",\"Executive instructions\"],\n                  [\"Issuing authority\",\"Ministry of Finance, Department of Expenditure\"],\n                  [\"Conflict with statute\",\"Statute prevails\"],\n                  [\"Power to relax\",\"Ministry of Finance\"]\n                ]},\n\n              { type:\"list\", title:\"Standards of financial propriety\",\n                items:[\n                  \"Vigilance equal to that of a person of ordinary prudence spending their own money.\",\n                  \"Expenditure not prima facie more than the occasion demands.\",\n                  \"No authority to sanction expenditure benefiting itself directly or indirectly.\",\n                  \"Public money not to be spent for the benefit of a particular person or community.\"\n                ]},\n\n              { type:\"callout\", tone:\"exam\", title:\"Examiner's angle\",\n                text:\"Repeated areas \u2014 nature of the rules (executive vs statutory), the relaxing authority, and the four standards of financial propriety.\" },\n\n              { type:\"callout\", tone:\"warn\", title:\"Common trap\",\n                text:\"GFR never override a statute or the Constitution. An option claiming otherwise is always wrong.\" }\n            ],\n            mnemonic: \"P-R-O-P \u2014 Prudence \u00b7 Reasonableness \u00b7 no Own-benefit \u00b7 no Particular person\"\n          },\n\n          quiz: {\n            passMark: 60,\n            questions: [\n              { q:\"The General Financial Rules, 2017 are best described as:\",\n                options:[\"Statutory rules framed under Article 309\",\"Executive instructions issued by the Ministry of Finance\",\"Rules framed by the Comptroller and Auditor General\",\"Regulations approved by Parliament\"],\n                correct:1,\n                explain:\"GFR are a compendium of <b>executive instructions<\/b> issued by the Department of Expenditure. They neither derive from Article 309 nor are laid before Parliament.\" },\n              { q:\"Where a departmental special rule conflicts with a provision of GFR, which prevails?\",\n                options:[\"GFR always prevails\",\"The special rule prevails\",\"The matter goes to the CAG\",\"Both stand cancelled\"],\n                correct:1,\n                explain:\"Special rules made for a particular department prevail over the general provisions of GFR.\" },\n              { q:\"Relaxation of any provision of GFR requires the concurrence of:\",\n                options:[\"The administrative Ministry\",\"The Comptroller and Auditor General\",\"The Ministry of Finance\",\"The Cabinet Secretariat\"],\n                correct:2,\n                explain:\"Any relaxation requires the concurrence of the <b>Ministry of Finance<\/b>.\" },\n              { q:\"Which of the following is NOT a standard of financial propriety?\",\n                options:[\"Vigilance equal to a person of ordinary prudence\",\"Expenditure not more than the occasion demands\",\"The sanctioning authority may benefit indirectly\",\"Public money not to be spent for a particular person\"],\n                correct:2,\n                explain:\"No authority may sanction expenditure benefiting it <b>directly or indirectly<\/b> \u2014 option 3 negates the rule.\" }\n            ]\n          }\n        },\n\n        {\n          title: \"Government Accounts & General Principles\",\n          ref  : \"Rules 8\u201320\",\n          video: { youtube:\"k7_qY6N6wNw\", duration:\"10:45\" },\n          material: [\n            { title:\"Chapter 2 \u2014 bare text\", src:\"GFR 2017, Rules 8\u201320\", type:\"PDF\", meta:\"14 pages \u00b7 320 KB\", url:\"#\" },\n            { title:\"Structure of Government Accounts \u2014 chart\", src:\"CGA\", type:\"PDF\", meta:\"1 page \u00b7 70 KB\", url:\"#\" }\n          ],\n          notes: {\n            readTime:\"4 min\",\n            summary:\"Structure of government accounts \u2014 Consolidated Fund, Contingency Fund and Public Account \u2014 and the rule that no money leaves the treasury without sanction and provision of funds.\",\n            highlight:{ label:\"Core provision\", text:\"No authority may incur expenditure or enter into a liability until the expenditure has been sanctioned by competent authority and funds have been provided.\" },\n            keypoints:[\n              \"Three funds: Consolidated Fund, Contingency Fund, Public Account.\",\n              \"Money is drawn only for immediate disbursement \u2014 never to avoid lapse of grant.\",\n              \"Expenditure needs both sanction and budget provision.\",\n              \"Standards of financial propriety bind every sanctioning authority.\"\n            ],\n            blocks:[\n              { type:\"table\", title:\"The three funds\",\n                head:[\"Fund\",\"Article\",\"Withdrawal needs\"],\n                rows:[\n                  [\"Consolidated Fund of India\",\"266(1)\",\"Appropriation by Parliament\"],\n                  [\"Contingency Fund of India\",\"267\",\"Approval of the President\"],\n                  [\"Public Account of India\",\"266(2)\",\"No appropriation required\"]\n                ]},\n              { type:\"callout\", tone:\"tip\", title:\"Remember\",\n                text:\"Public Account money is not government money \u2014 it is held as a banker, so no Parliamentary appropriation is needed.\" }\n            ],\n            mnemonic:\"266(1) Consolidated \u00b7 267 Contingency \u00b7 266(2) Public Account\"\n          },\n          quiz: {\n            passMark: 60,\n            questions:[\n              { q:\"Withdrawal from the Contingency Fund of India requires:\",\n                options:[\"Appropriation by Parliament\",\"Approval of the President\",\"Sanction of the Finance Minister\",\"No approval\"],\n                correct:1,\n                explain:\"The Contingency Fund is at the disposal of the <b>President<\/b> under Article 267; Parliamentary appropriation follows later.\" },\n              { q:\"Money drawn from the treasury to avoid lapse of a budget grant is:\",\n                options:[\"Permissible with Finance Ministry approval\",\"Permissible at year end\",\"Irregular in all cases\",\"Permissible for capital works\"],\n                correct:2,\n                explain:\"Money must be drawn only for <b>immediate disbursement<\/b>; drawal to prevent lapse of grant is irregular.\" },\n              { q:\"Transactions of the Public Account of India are governed by:\",\n                options:[\"Article 266(1)\",\"Article 266(2)\",\"Article 267\",\"Article 280\"],\n                correct:1,\n                explain:\"Article <b>266(2)<\/b> covers the Public Account; 266(1) is the Consolidated Fund.\" }\n            ]\n          }\n        }\n      ]\n    },\n\n    {\n      title: \"Procurement of Goods & Services\",\n      chapters: [\n        {\n          title: \"Modes of Procurement\",\n          ref  : \"Rules 154\u2013166\",\n          video: { youtube:\"yfoY53QXEnI\", duration:\"15:20\" },\n          material: [\n            { title:\"Chapter 6 \u2014 bare text\", src:\"GFR 2017, Rules 142\u2013186\", type:\"PDF\", meta:\"30 pages \u00b7 720 KB\", url:\"#\" },\n            { title:\"Manual for Procurement of Goods, 2024\", src:\"Department of Expenditure\", type:\"PDF\", meta:\"196 pages \u00b7 2.4 MB\", url:\"#\" }\n          ],\n          notes: {\n            readTime:\"3 min\",\n            summary:\"Value slabs decide the mode \u2014 direct purchase, purchase committee, limited tender or advertised tender \u2014 with GeM as the default route wherever the item is listed.\",\n            highlight:{ label:\"Core provision\", text:\"Procurement of goods and services available on GeM shall be made through GeM by the Ministries and Departments.\" },\n            keypoints:[\n              \"Direct purchase without quotation up to the prescribed low-value limit.\",\n              \"Purchase committee route for the middle slab.\",\n              \"Advertised tender enquiry above the higher threshold.\",\n              \"Every mode needs a recorded certificate by the competent authority.\"\n            ],\n            blocks:[\n              { type:\"list\", title:\"Sequence to remember\",\n                items:[\"Check GeM availability\",\"Apply the value slab\",\"Record the certificate\",\"Select the mode\"] },\n              { type:\"callout\", tone:\"exam\", title:\"Examiner's angle\",\n                text:\"Slab values and the exact wording of the purchase certificate are the two most repeated question areas.\" }\n            ]\n          },\n          quiz: {\n            passMark: 60,\n            questions:[\n              { q:\"For goods available on GeM, procurement through GeM is:\",\n                options:[\"Optional\",\"Mandatory\",\"Permitted only above a threshold\",\"Permitted only for State Governments\"],\n                correct:1,\n                explain:\"Procurement through <b>GeM is mandatory<\/b> where the goods or services are available on the portal.\" },\n              { q:\"The Local Purchase Committee route applies to:\",\n                options:[\"The lowest value slab\",\"The middle value slab\",\"All values\",\"Only works contracts\"],\n                correct:1,\n                explain:\"A duly constituted <b>Local Purchase Committee<\/b> handles the middle slab, between direct purchase and tender enquiry.\" }\n            ]\n          }\n        }\n      ]\n    }\n  ]\n};\n<\/script>\n<!-- ============== END OF CONTENT BLOCK \u2014 DO NOT EDIT BELOW ============== -->\n\n\n<style>\n\/* ==================================================================\n   COURSE PLAYER v5 \u2014 flat register design, scoped to .cp\n   ================================================================== *\/\n.cp{\n  --ink:#101828; --ink-2:#1D2939; --body:#475467; --mute:#98A2B3;\n  --line:#E4E7EC; --line-2:#F2F4F7; --paper:#FFFFFF; --wash:#F9FAFB;\n  --plate:#0C1B2E;\n  --gold:#C9932A; --gold-soft:#FDF6E7;\n  --ok:#067647; --ok-soft:#ECFDF3;\n  --bad:#B42318; --bad-soft:#FEF3F2;\n  --warn:#B54708; --warn-soft:#FFFAEB;\n\n  --acc:#123A6B; --acc-2:#1E5FA8; --acc-soft:#EEF4FB;\n\n  font-family:'Public Sans',system-ui,sans-serif;\n  color:var(--ink);\n  background:var(--paper);\n  border:1px solid var(--line);\n  width:100%;\n  -webkit-font-smoothing:antialiased;\n}\n.cp[data-accent=\"maroon\"]{ --acc:#7A1F2B; --acc-2:#A62B3A; --acc-soft:#FBEFF1; }\n.cp[data-accent=\"forest\"]{ --acc:#14452F; --acc-2:#1E7A4F; --acc-soft:#EDF7F1; }\n.cp[data-accent=\"indigo\"]{ --acc:#2E2A7A; --acc-2:#4C46B6; --acc-soft:#F0EFFB; }\n.cp[data-accent=\"slate\"] { --acc:#293441; --acc-2:#4B5B6E; --acc-soft:#F1F3F6; }\n\n.cp *,.cp *::before,.cp *::after{ box-sizing:border-box; margin:0; padding:0; }\n.cp button{ font:inherit; color:inherit; background:none; border:none; cursor:pointer; }\n.cp a{ color:inherit; text-decoration:none; }\n.cp :focus-visible{ outline:2px solid var(--acc-2); outline-offset:2px; }\n.cp .i{ width:1em; height:1em; fill:currentColor; flex:none; }\n.mono{ font-family:'IBM Plex Mono',monospace; }\n.dsp{ font-family:'Bricolage Grotesque','Public Sans',sans-serif; }\n\n\/* ---------- masthead ---------- *\/\n.cp-top{\n  background:var(--plate); color:#fff; padding:0 20px;\n  display:flex; align-items:center; gap:16px; justify-content:space-between;\n  border-bottom:2px solid var(--gold); min-height:58px; position:relative;\n}\n.cp-tl{ display:flex; align-items:center; gap:16px; min-width:0; }\n.cp-back{\n  display:inline-flex; align-items:center; gap:7px; font-size:12px; font-weight:600;\n  color:rgba(255,255,255,.72); padding:6px 10px 6px 0; border-right:1px solid rgba(255,255,255,.16);\n  padding-right:16px;\n}\n.cp-back:hover{ color:#fff; }\n.cp-idn{ min-width:0; display:flex; align-items:center; gap:12px; }\n.cp-badge{\n  font-family:'IBM Plex Mono',monospace; font-size:10.5px; font-weight:600; letter-spacing:.08em;\n  text-transform:uppercase; color:var(--gold); border:1px solid rgba(201,147,42,.5);\n  padding:3px 8px; white-space:nowrap;\n}\n.cp-ttl{ font-size:15px; font-weight:700; letter-spacing:-.01em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n.cp-tr{ display:flex; align-items:center; gap:16px; }\n.cp-prog{ display:flex; align-items:center; gap:10px; }\n.cp-prog .txt{ font-family:'IBM Plex Mono',monospace; font-size:11.5px; color:rgba(255,255,255,.75); white-space:nowrap; }\n.cp-prog .txt b{ color:#fff; }\n.cp-prog .bar{ width:96px; height:4px; background:rgba(255,255,255,.18); }\n.cp-prog .bar i{ display:block; height:100%; width:0; background:var(--gold); transition:width .4s ease; }\n.cp-burger{\n  display:none; align-items:center; gap:7px; font-size:12px; font-weight:600;\n  border:1px solid rgba(255,255,255,.24); padding:7px 11px; color:#fff;\n}\n\n\/* ---------- layout ---------- *\/\n.cp-main{ display:flex; align-items:stretch; }\n.cp-stage{ flex:1; min-width:0; display:flex; flex-direction:column; background:var(--paper); }\n\n\/* ---------- chapter head ---------- *\/\n.cp-chead{ padding:20px 26px 0; }\n.cp-kick{\n  font-family:'IBM Plex Mono',monospace; font-size:10.5px; letter-spacing:.12em;\n  text-transform:uppercase; color:var(--mute); margin-bottom:7px;\n}\n.cp-h1{ font-family:'Bricolage Grotesque','Public Sans',sans-serif; font-size:22px; font-weight:700; letter-spacing:-.02em; line-height:1.2; }\n.cp-h1 em{ font-style:normal; font-family:'IBM Plex Mono',monospace; font-size:12px; font-weight:500; color:var(--acc-2); margin-left:10px; vertical-align:middle; }\n\n\/* ---------- tabs ---------- *\/\n.cp-tabs{ display:flex; gap:26px; margin-top:16px; border-bottom:1px solid var(--line); padding:0 26px; }\n.cp-chead + .cp-tabs{ margin-top:16px; }\n.cp-tab{\n  display:flex; align-items:center; gap:9px; padding:0 0 11px; margin-bottom:-1px;\n  border-bottom:2px solid transparent; color:var(--body); font-size:13.5px; font-weight:600; transition:color .15s;\n}\n.cp-tab:hover{ color:var(--ink); }\n.cp-tab .n{ font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--mute); }\n.cp-tab .sub{ font-family:'IBM Plex Mono',monospace; font-size:10.5px; color:var(--mute); font-weight:400; }\n.cp-tab[aria-selected=\"true\"]{ color:var(--acc); border-bottom-color:var(--acc); }\n.cp-tab[aria-selected=\"true\"] .n,.cp-tab[aria-selected=\"true\"] .sub{ color:var(--acc-2); }\n.cp-tab.done .n{ color:var(--ok); }\n.cp-tab .tick{ color:var(--ok); font-size:12px; display:none; }\n.cp-tab.done .tick{ display:block; }\n\n\/* ---------- panels ---------- *\/\n.cp-video{ position:relative; width:100%; aspect-ratio:16\/9; background:#000; }\n.cp-video iframe,.cp-video>div{ position:absolute; inset:0; width:100%; height:100%; border:0; }\n.cp-poster{\n  position:absolute; inset:0; width:100%; display:flex; flex-direction:column;\n  align-items:center; justify-content:center; gap:16px; color:#fff; text-align:center; padding:20px;\n  background-size:cover; background-position:center;\n}\n.cp-poster::before{ content:\"\"; position:absolute; inset:0; background:rgba(8,18,32,.62); }\n.cp-poster>*{ position:relative; }\n.cp-play{\n  width:60px; height:60px; border:2px solid #fff; display:grid; place-items:center;\n  font-size:19px; padding-left:3px; transition:background .2s,color .2s;\n}\n.cp-poster:hover .cp-play{ background:#fff; color:var(--plate); }\n.cp-poster h4{ font-family:'Bricolage Grotesque',sans-serif; font-size:16px; font-weight:600; }\n.cp-poster p{ font-family:'IBM Plex Mono',monospace; font-size:11px; color:rgba(255,255,255,.72); }\n.cp-empty{ aspect-ratio:16\/9; display:grid; place-items:center; background:var(--wash); color:var(--mute); font-size:13px; font-weight:600; text-align:center; padding:24px; }\n\n\/* notes *\/\n.cp-notes{ padding:24px 26px 28px; max-width:78ch; }\n.cp-nmeta{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:16px; }\n.cp-chip{\n  display:inline-flex; align-items:center; gap:6px; font-family:'IBM Plex Mono',monospace;\n  font-size:10.5px; letter-spacing:.05em; text-transform:uppercase; color:var(--body);\n  border:1px solid var(--line); padding:4px 9px; background:var(--paper);\n}\nbutton.cp-chip:hover{ border-color:var(--acc-2); color:var(--acc); }\n.cp-lede{ font-size:15.5px; line-height:1.65; color:var(--ink-2); margin-bottom:20px; }\n.cp-quote{ border-left:3px solid var(--gold); background:var(--gold-soft); padding:14px 16px; margin-bottom:22px; }\n.cp-quote b{ display:block; font-family:'IBM Plex Mono',monospace; font-size:10.5px; letter-spacing:.09em; text-transform:uppercase; color:#8A6516; margin-bottom:6px; }\n.cp-quote p{ font-size:13.5px; line-height:1.65; color:#4B3A0F; }\n.cp-h2{\n  font-family:'Bricolage Grotesque',sans-serif; font-size:15px; font-weight:700; letter-spacing:-.01em;\n  margin:24px 0 11px; padding-bottom:7px; border-bottom:1px solid var(--line);\n}\n.cp-notes p.tx{ font-size:14px; line-height:1.72; color:var(--body); margin-bottom:11px; }\n.cp-keys{ display:grid; gap:9px; }\n.cp-keys li{ list-style:none; display:flex; gap:10px; font-size:14px; line-height:1.6; color:var(--ink-2); }\n.cp-keys li .i{ color:var(--ok); margin-top:4px; font-size:13px; }\n.cp-ul{ display:grid; gap:8px; }\n.cp-ul li{ list-style:none; position:relative; padding-left:20px; font-size:14px; line-height:1.65; color:var(--body); }\n.cp-ul li::before{ content:\"\"; position:absolute; left:3px; top:9px; width:7px; height:1.5px; background:var(--acc-2); }\n.cp-table{ width:100%; border-collapse:collapse; font-size:13.5px; border:1px solid var(--line); }\n.cp-table th{ background:var(--wash); text-align:left; font-family:'IBM Plex Mono',monospace; font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; color:var(--body); padding:9px 12px; border-bottom:1px solid var(--line); }\n.cp-table td{ padding:10px 12px; border-bottom:1px solid var(--line-2); color:var(--body); }\n.cp-table tr:last-child td{ border-bottom:none; }\n.cp-call{ padding:13px 15px; font-size:13.5px; line-height:1.65; margin:18px 0; border-left:3px solid; }\n.cp-call b{ display:block; font-family:'IBM Plex Mono',monospace; font-size:10.5px; letter-spacing:.08em; text-transform:uppercase; margin-bottom:5px; }\n.cp-call.tip { background:var(--acc-soft); border-color:var(--acc-2); color:var(--acc); }\n.cp-call.warn{ background:var(--warn-soft); border-color:var(--warn); color:var(--warn); }\n.cp-call.exam{ background:var(--ok-soft); border-color:var(--ok); color:var(--ok); }\n.cp-mnem{ margin-top:22px; padding:13px 15px; border:1px dashed var(--line); background:var(--wash); font-family:'IBM Plex Mono',monospace; font-size:12.5px; line-height:1.6; color:var(--ink-2); }\n.cp-mnem span{ display:block; font-size:10px; letter-spacing:.1em; text-transform:uppercase; color:var(--mute); margin-bottom:6px; }\n\n\/* quiz *\/\n.cp-quiz{ padding:24px 26px 28px; max-width:82ch; }\n.cp-qtop{ display:flex; align-items:flex-end; justify-content:space-between; gap:14px; flex-wrap:wrap; margin-bottom:18px; padding-bottom:14px; border-bottom:1px solid var(--line); }\n.cp-qtop h4{ font-family:'Bricolage Grotesque',sans-serif; font-size:17px; font-weight:700; letter-spacing:-.02em; }\n.cp-qtop p{ font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--mute); margin-top:4px; }\n.cp-q{ padding:18px 0; border-bottom:1px solid var(--line-2); }\n.cp-q.miss{ background:var(--bad-soft); padding-left:12px; margin-left:-12px; }\n.cp-qn{ display:flex; gap:12px; margin-bottom:13px; }\n.cp-qn i{ font-family:'IBM Plex Mono',monospace; font-style:normal; font-size:12px; color:var(--mute); padding-top:2px; }\n.cp-qn p{ font-size:14.5px; font-weight:600; line-height:1.55; color:var(--ink); }\n.cp-opts{ display:grid; gap:7px; padding-left:26px; }\n.cp-opt{ display:flex; align-items:center; gap:11px; width:100%; text-align:left; padding:10px 12px; border:1px solid var(--line); font-size:14px; color:var(--ink-2); background:var(--paper); transition:all .15s; }\n.cp-opt:hover:not(:disabled){ border-color:var(--acc-2); background:var(--acc-soft); }\n.cp-opt em{ font-family:'IBM Plex Mono',monospace; font-style:normal; flex:none; width:22px; height:22px; display:grid; place-items:center; border:1px solid var(--line); font-size:11px; font-weight:600; color:var(--body); }\n.cp-opt.sel{ border-color:var(--acc); background:var(--acc-soft); }\n.cp-opt.sel em{ background:var(--acc); border-color:var(--acc); color:#fff; }\n.cp-opt.right{ border-color:var(--ok); background:var(--ok-soft); color:#05502F; }\n.cp-opt.right em{ background:var(--ok); border-color:var(--ok); color:#fff; }\n.cp-opt.wrong{ border-color:var(--bad); background:var(--bad-soft); color:#7A1710; }\n.cp-opt.wrong em{ background:var(--bad); border-color:var(--bad); color:#fff; }\n.cp-exp{ display:none; margin:12px 0 0 26px; padding:12px 14px; background:var(--wash); border-left:2px solid var(--acc-2); font-size:13px; line-height:1.7; color:var(--body); }\n.cp-exp.on{ display:block; }\n.cp-exp u{ display:block; text-decoration:none; font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.09em; text-transform:uppercase; color:var(--mute); margin-bottom:5px; }\n.cp-qact{ display:flex; gap:10px; flex-wrap:wrap; margin-top:20px; }\n.cp-score{ display:none; align-items:center; gap:20px; padding:16px 18px; margin-bottom:18px; border:1px solid var(--line); background:var(--wash); }\n.cp-score.on{ display:flex; }\n.cp-score .num{ font-family:'Bricolage Grotesque',sans-serif; font-size:32px; font-weight:700; line-height:1; letter-spacing:-.03em; }\n.cp-score .num small{ font-size:15px; color:var(--mute); }\n.cp-score.pass .num{ color:var(--ok); } .cp-score.fail .num{ color:var(--bad); }\n.cp-score h5{ font-size:14px; font-weight:700; margin-bottom:3px; }\n.cp-score p{ font-size:13px; color:var(--body); }\n\n\/* buttons *\/\n.cp-btn{ display:inline-flex; align-items:center; justify-content:center; gap:8px; padding:10px 16px; font-size:13px; font-weight:600; border:1px solid transparent; transition:all .15s; white-space:nowrap; }\n.cp-btn.pri{ background:var(--acc); color:#fff; }\n.cp-btn.pri:hover{ background:var(--acc-2); }\n.cp-btn.ghost{ border-color:var(--line); color:var(--ink-2); background:var(--paper); }\n.cp-btn.ghost:hover{ border-color:var(--acc-2); color:var(--acc); }\n.cp-btn:disabled{ opacity:.4; cursor:not-allowed; }\n\n\/* action bar *\/\n.cp-bar{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; padding:14px 26px; border-top:1px solid var(--line); background:var(--wash); }\n.cp-done{ display:inline-flex; align-items:center; gap:8px; padding:9px 15px; border:1px solid var(--ok); color:var(--ok); background:var(--ok-soft); font-size:13px; font-weight:600; }\n.cp-done:hover{ background:var(--ok); color:#fff; }\n.cp-done.is-done{ background:var(--ok); color:#fff; cursor:default; }\n.cp-sp{ flex:1; }\n.cp-nav{ display:flex; gap:8px; }\n\n\/* ---------- study material (below the player) ---------- *\/\n.cp-mat{ border-top:1px solid var(--line); }\n.cp-mathead{\n  display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap;\n  padding:16px 26px 12px;\n}\n.cp-mathead h5{\n  font-family:'IBM Plex Mono',monospace; font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--ink);\n  display:flex; align-items:center; gap:9px;\n}\n.cp-mathead h5 b{ color:var(--gold); }\n.cp-mathead .note{ font-size:12px; color:var(--mute); }\n.cp-matgrp{ font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:var(--mute); padding:10px 26px 6px; border-top:1px solid var(--line-2); background:var(--wash); }\n.cp-file{\n  display:flex; align-items:center; gap:14px; padding:13px 26px;\n  border-top:1px solid var(--line-2); transition:background .15s;\n}\n.cp-file:hover{ background:var(--acc-soft); }\n.cp-file .tag{\n  font-family:'IBM Plex Mono',monospace; font-size:10px; font-weight:600; letter-spacing:.06em;\n  border:1px solid var(--line); padding:5px 7px; color:var(--body); background:var(--paper); flex:none; min-width:44px; text-align:center;\n}\n.cp-file:hover .tag{ border-color:var(--acc-2); color:var(--acc); }\n.cp-file .txt{ flex:1; min-width:0; }\n.cp-file .txt b{ display:block; font-size:14px; font-weight:600; letter-spacing:-.01em; }\n.cp-file .txt span{ font-size:12px; color:var(--mute); }\n.cp-file .txt span i{ font-style:normal; color:var(--body); }\n.cp-file .dl{ display:inline-flex; align-items:center; gap:7px; font-size:12.5px; font-weight:600; color:var(--acc); border:1px solid var(--line); padding:8px 12px; flex:none; background:var(--paper); }\n.cp-file:hover .dl{ border-color:var(--acc); background:var(--acc); color:#fff; }\n.cp-file.none{ color:var(--mute); font-size:13px; justify-content:center; padding:22px; }\n\n\/* ---------- sidebar ---------- *\/\n.cp-side{ width:340px; flex:none; background:var(--paper); border-left:1px solid var(--line); display:flex; flex-direction:column; }\n.cp-sh{ padding:14px 16px; border-bottom:1px solid var(--line); background:var(--wash); }\n.cp-shtop{ display:flex; align-items:center; justify-content:space-between; margin-bottom:11px; }\n.cp-shtop h3{ font-family:'IBM Plex Mono',monospace; font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--ink); }\n.cp-x{ display:none; font-size:15px; color:var(--body); }\n.cp-search{ position:relative; }\n.cp-search .i{ position:absolute; left:10px; top:50%; transform:translateY(-50%); color:var(--mute); font-size:13px; }\n.cp-search input{ width:100%; padding:9px 11px 9px 31px; border:1px solid var(--line); font:400 13px 'Public Sans',sans-serif; color:var(--ink); background:var(--paper); }\n.cp-search input::placeholder{ color:var(--mute); }\n.cp-list{ flex:1; overflow-y:auto; max-height:620px; }\n.cp-list::-webkit-scrollbar{ width:7px; }\n.cp-list::-webkit-scrollbar-thumb{ background:#D0D5DD; }\n.cp-modhead{\n  width:100%; display:flex; align-items:center; gap:11px; padding:12px 16px; text-align:left;\n  background:var(--wash); border-bottom:1px solid var(--line); border-top:1px solid var(--line);\n  font-family:'IBM Plex Mono',monospace; font-size:10.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--body);\n}\n.cp-modhead:hover{ color:var(--ink); }\n.cp-modhead .t{ flex:1; }\n.cp-modhead .ct{ color:var(--mute); }\n.cp-modhead .i{ font-size:11px; transition:transform .2s; }\n.cp-modhead[aria-expanded=\"false\"] .i{ transform:rotate(-90deg); }\n.cp-chaps[hidden]{ display:none; }\n.cp-chap{ border-bottom:1px solid var(--line-2); padding:11px 16px 9px; border-left:3px solid transparent; }\n.cp-chap.current{ border-left-color:var(--acc); background:var(--acc-soft); }\n.cp-ctitle{ display:flex; gap:10px; align-items:flex-start; margin-bottom:9px; }\n.cp-ctitle .cn{ font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--mute); padding-top:2px; }\n.cp-ctitle b{ font-size:13.5px; font-weight:600; line-height:1.35; letter-spacing:-.01em; }\n.cp-ctitle span{ display:block; font-family:'IBM Plex Mono',monospace; font-size:10.5px; color:var(--mute); margin-top:2px; }\n.cp-mini{ display:flex; gap:6px; padding-left:26px; }\n.cp-mini button{\n  display:inline-flex; align-items:center; gap:5px; padding:4px 8px; border:1px solid var(--line);\n  font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.04em; text-transform:uppercase; color:var(--body); background:var(--paper);\n}\n.cp-mini button:hover{ border-color:var(--acc-2); color:var(--acc); }\n.cp-mini button.on{ background:var(--acc); border-color:var(--acc); color:#fff; }\n.cp-mini button.done{ border-color:var(--ok); color:var(--ok); background:var(--ok-soft); }\n.cp-mini button.done.on{ background:var(--ok); color:#fff; }\n.cp-sf{ padding:11px 16px; border-top:1px solid var(--line); background:var(--wash); display:flex; align-items:center; justify-content:space-between; gap:10px; }\n.cp-sf span{ font-family:'IBM Plex Mono',monospace; font-size:10.5px; color:var(--mute); }\n.cp-reset{ font-size:11.5px; font-weight:600; color:var(--body); display:inline-flex; align-items:center; gap:6px; }\n.cp-reset:hover{ color:var(--bad); }\n.cp-nohit{ padding:24px 16px; text-align:center; font-size:13px; color:var(--mute); }\n\n\/* toast + overlay *\/\n.cp-toast{\n  position:fixed; left:50%; bottom:24px; transform:translate(-50%,14px);\n  background:var(--plate); color:#fff; padding:12px 18px; font-size:13px; font-weight:600;\n  display:flex; align-items:center; gap:9px; opacity:0; pointer-events:none;\n  transition:all .25s ease; z-index:1000000; border-left:3px solid var(--gold);\n}\n.cp-toast.on{ opacity:1; transform:translate(-50%,0); }\n.cp-ovl{ position:fixed; inset:0; background:rgba(16,24,40,.5); z-index:999998; opacity:0; pointer-events:none; transition:opacity .2s; }\n.cp-ovl.on{ opacity:1; pointer-events:auto; }\n\n\/* ---------- responsive ---------- *\/\n@media (max-width:1080px){\n  .cp-side{ position:fixed; top:0; right:0; bottom:0; width:min(350px,88vw); height:100dvh; z-index:999999;\n            transform:translateX(101%); transition:transform .25s ease; }\n  .cp-side.on{ transform:translateX(0); }\n  .cp-list{ max-height:none; }\n  .cp-burger{ display:inline-flex; }\n  .cp-x{ display:block; }\n  .cp-prog .txt{ display:none; }\n}\n@media (max-width:760px){\n  .cp{ border-left:none; border-right:none; }\n  .cp-top{ padding:0 14px; }\n  .cp-back span,.cp-burger span{ display:none; }\n  .cp-idn{ gap:8px; }\n  .cp-ttl{ font-size:13.5px; }\n  .cp-chead{ padding:16px 16px 0; }\n  .cp-h1{ font-size:18px; }\n  .cp-h1 em{ display:block; margin:6px 0 0; }\n  .cp-tabs{ padding:0 16px; gap:18px; overflow-x:auto; scrollbar-width:none; }\n  .cp-tabs::-webkit-scrollbar{ display:none; }\n  .cp-tab .sub{ display:none; }\n  .cp-notes,.cp-quiz{ padding:18px 16px 24px; }\n  .cp-opts,.cp-exp{ padding-left:0; margin-left:0; }\n  .cp-bar{ padding:12px 16px; }\n  .cp-done{ flex:1; justify-content:center; }\n  .cp-sp{ display:none; }\n  .cp-nav{ width:100%; } .cp-nav .cp-btn{ flex:1; }\n  .cp-mathead,.cp-matgrp{ padding-left:16px; padding-right:16px; }\n  .cp-file{ padding:12px 16px; flex-wrap:wrap; }\n  .cp-file .txt{ flex-basis:calc(100% - 60px); }\n  .cp-file .dl{ width:100%; justify-content:center; }\n}\n@media (prefers-reduced-motion:reduce){\n  .cp *,.cp *::before,.cp *::after{ transition-duration:.01ms !important; animation-duration:.01ms !important; }\n}\n@media print{\n  .cp-top,.cp-side,.cp-tabs,.cp-bar,.cp-ovl,.cp-toast{ display:none !important; }\n  .cp{ border:none; }\n}\n\n\/* Elementor fixes *\/\n.elementor-widget-html,.elementor-widget-html .elementor-widget-container{ margin:0 !important; padding:0 !important; }\n@media (max-width:1080px){\n  .elementor-section,.elementor-container,.elementor-row,.elementor-column,\n  .elementor-widget-wrap,.elementor-element,.e-con,.e-con-inner{ min-height:0 !important; height:auto !important; }\n  .e-con{ --min-height:0 !important; }\n}\n<\/style>\n\n<svg style=\"display:none\" aria-hidden=\"true\"><defs>\n  <symbol id=\"ci-back\" viewBox=\"0 0 24 24\"><path d=\"M15.4 4.6 8 12l7.4 7.4 1.4-1.4-6-6 6-6z\"\/><\/symbol>\n  <symbol id=\"ci-play\" viewBox=\"0 0 24 24\"><path d=\"M8 5.1v13.8c0 .8.9 1.3 1.5.8l10-6.9c.6-.4.6-1.3 0-1.7l-10-6.9c-.7-.4-1.5.1-1.5.9z\"\/><\/symbol>\n  <symbol id=\"ci-check\" viewBox=\"0 0 24 24\"><path d=\"M9.5 17.2 4.3 12l1.4-1.4 3.8 3.8 8.8-8.8L19.7 7z\"\/><\/symbol>\n  <symbol id=\"ci-list\" viewBox=\"0 0 24 24\"><path d=\"M4 6h16M4 12h16M4 18h16\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" fill=\"none\"\/><\/symbol>\n  <symbol id=\"ci-x\" viewBox=\"0 0 24 24\"><path d=\"m12 10.6 5-5 1.4 1.4-5 5 5 5-1.4 1.4-5-5-5 5-1.4-1.4 5-5-5-5L7 5.6z\"\/><\/symbol>\n  <symbol id=\"ci-left\" viewBox=\"0 0 24 24\"><path d=\"M14.7 6.4 9.1 12l5.6 5.6 1.3-1.4-4.2-4.2 4.2-4.2z\"\/><\/symbol>\n  <symbol id=\"ci-right\" viewBox=\"0 0 24 24\"><path d=\"M9.3 6.4 7.9 7.8l4.2 4.2-4.2 4.2 1.4 1.4L14.9 12z\"\/><\/symbol>\n  <symbol id=\"ci-down\" viewBox=\"0 0 24 24\"><path d=\"M12 15.4 6.4 9.8l1.4-1.4 4.2 4.2 4.2-4.2 1.4 1.4z\"\/><\/symbol>\n  <symbol id=\"ci-search\" viewBox=\"0 0 24 24\"><path d=\"M10.5 3a7.5 7.5 0 1 0 4.6 13.4l4.2 4.2 1.4-1.4-4.2-4.2A7.5 7.5 0 0 0 10.5 3zm0 2a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11z\"\/><\/symbol>\n  <symbol id=\"ci-dl\" viewBox=\"0 0 24 24\"><path d=\"M11 3h2v9.2l3.6-3.6 1.4 1.4-6 6-6-6 1.4-1.4L11 12.2zM4 19h16v2H4z\"\/><\/symbol>\n  <symbol id=\"ci-doc\" viewBox=\"0 0 24 24\"><path d=\"M6 2h9l5 5v15H6z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"\/><path d=\"M9 12h7M9 16h5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" fill=\"none\"\/><\/symbol>\n  <symbol id=\"ci-clock\" viewBox=\"0 0 24 24\"><path d=\"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm1 10.4V6h-2v7.4l5 3 1-1.7z\"\/><\/symbol>\n  <symbol id=\"ci-print\" viewBox=\"0 0 24 24\"><path d=\"M7 3h10v4H7zM5 9h14a2 2 0 0 1 2 2v6h-4v4H7v-4H3v-6a2 2 0 0 1 2-2zm4 8h6v3H9z\"\/><\/symbol>\n  <symbol id=\"ci-redo\" viewBox=\"0 0 24 24\"><path d=\"M18.4 7.6A8 8 0 1 0 20 12h-2a6 6 0 1 1-1.8-4.2L13 11h7V4z\"\/><\/symbol>\n  <symbol id=\"ci-send\" viewBox=\"0 0 24 24\"><path d=\"M2.5 20.5 22 12 2.5 3.5 2.5 10 16 12 2.5 14z\"\/><\/symbol>\n  <symbol id=\"ci-quiz\" viewBox=\"0 0 24 24\"><path d=\"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm.1 15.5a1.3 1.3 0 1 1 0-2.6 1.3 1.3 0 0 1 0 2.6zm2-6.4c-.8.7-1.1 1-1.1 1.8v.4h-2v-.6c0-1.3.6-2 1.5-2.8.7-.6 1-.9 1-1.5 0-.8-.6-1.3-1.5-1.3s-1.6.5-1.7 1.5H8.2C8.3 6.7 9.9 5.4 12 5.4c2.2 0 3.8 1.2 3.8 3 0 1.1-.5 1.8-1.7 2.7z\"\/><\/symbol>\n<\/defs><\/svg>\n\n\n<div class=\"cp\" id=\"cp\" data-accent=\"navy\">\n\n  <header class=\"cp-top\">\n    <div class=\"cp-tl\">\n      <button class=\"cp-back\" id=\"cpBack\" type=\"button\"><svg class=\"i\"><use href=\"#ci-back\"\/><\/svg><span>Back<\/span><\/button>\n      <div class=\"cp-idn\">\n        <span class=\"cp-badge\" id=\"cpBadge\"><\/span>\n        <span class=\"cp-ttl\" id=\"cpCourseTitle\"><\/span>\n      <\/div>\n    <\/div>\n    <div class=\"cp-tr\">\n      <div class=\"cp-prog\">\n        <span class=\"txt\" id=\"cpCount\"><\/span>\n        <span class=\"bar\"><i id=\"cpBar\"><\/i><\/span>\n      <\/div>\n      <button class=\"cp-burger\" id=\"cpBurger\" type=\"button\"><svg class=\"i\"><use href=\"#ci-list\"\/><\/svg><span>Contents<\/span><\/button>\n    <\/div>\n  <\/header>\n\n  <div class=\"cp-main\">\n    <main class=\"cp-stage\">\n\n      <div class=\"cp-chead\">\n        <div class=\"cp-kick\" id=\"cpKick\"><\/div>\n        <h2 class=\"cp-h1\"><span id=\"cpChapName\"><\/span><em id=\"cpRef\"><\/em><\/h2>\n      <\/div>\n\n      <div class=\"cp-tabs\" id=\"cpTabs\" role=\"tablist\"><\/div>\n\n      <div id=\"cpStage\"><\/div>\n\n      <div class=\"cp-bar\">\n        <button class=\"cp-done\" id=\"cpDone\" type=\"button\"><svg class=\"i\"><use href=\"#ci-check\"\/><\/svg><span>Mark complete<\/span><\/button>\n        <div class=\"cp-sp\"><\/div>\n        <div class=\"cp-nav\">\n          <button class=\"cp-btn ghost\" id=\"cpPrev\" type=\"button\"><svg class=\"i\"><use href=\"#ci-left\"\/><\/svg> Previous<\/button>\n          <button class=\"cp-btn pri\" id=\"cpNext\" type=\"button\">Next <svg class=\"i\"><use href=\"#ci-right\"\/><\/svg><\/button>\n        <\/div>\n      <\/div>\n\n      <!-- STUDY MATERIAL \u2014 sits directly below the player block -->\n      <section class=\"cp-mat\" id=\"cpMat\" aria-label=\"Study material\"><\/section>\n    <\/main>\n\n    <aside class=\"cp-side\" id=\"cpSide\" aria-label=\"Course contents\">\n      <div class=\"cp-sh\">\n        <div class=\"cp-shtop\">\n          <h3>Course contents<\/h3>\n          <button class=\"cp-x\" id=\"cpClose\" type=\"button\" aria-label=\"Close\"><svg class=\"i\"><use href=\"#ci-x\"\/><\/svg><\/button>\n        <\/div>\n        <div class=\"cp-search\">\n          <svg class=\"i\"><use href=\"#ci-search\"\/><\/svg>\n          <input type=\"search\" id=\"cpSearch\" placeholder=\"Search chapters\" aria-label=\"Search chapters\">\n        <\/div>\n      <\/div>\n      <div class=\"cp-list\" id=\"cpList\"><\/div>\n      <div class=\"cp-sf\">\n        <span id=\"cpFoot\"><\/span>\n        <button class=\"cp-reset\" id=\"cpReset\" type=\"button\"><svg class=\"i\"><use href=\"#ci-redo\"\/><\/svg> Reset<\/button>\n      <\/div>\n    <\/aside>\n  <\/div>\n<\/div>\n\n<div class=\"cp-ovl\" id=\"cpOvl\"><\/div>\n<div class=\"cp-toast\" id=\"cpToast\"><svg class=\"i\"><use href=\"#ci-check\"\/><\/svg><span id=\"cpToastText\"><\/span><\/div>\n\n\n<script>\n(function () {\n\"use strict\";\n\nconst root = document.getElementById('cp');\nconst $ = id => document.getElementById(id);\nconst esc = s => String(s == null ? '' : s).replace(\/[&<>\"]\/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;'}[c]));\nconst ic = n => `<svg class=\"i\"><use href=\"#ci-${n}\"\/><\/svg>`;\nconst scrollTo = (el, o) => { if (el && typeof el.scrollIntoView === 'function') el.scrollIntoView(o); };\n\nconst META = COURSE.meta || {};\nroot.dataset.accent = META.accent || 'navy';\n$('cpBadge').textContent = META.badge || '';\n$('cpBadge').style.display = META.badge ? '' : 'none';\n$('cpCourseTitle').textContent = META.title || 'Course';\n\n\/* ---------- flatten ---------- *\/\nconst CHAPTERS = [], STOPS = [];\n(COURSE.modules || []).forEach((mod, mi) => {\n  (mod.chapters || []).forEach(ch => {\n    const chap = { mi, mod, data: ch, key: 'm' + mi + 'c' + CHAPTERS.length, stops: [], no: CHAPTERS.length + 1 };\n    if (ch.video) push(chap, 'video', ch.video);\n    if (ch.notes) push(chap, 'notes', ch.notes);\n    if (ch.quiz && ch.quiz.questions && ch.quiz.questions.length) push(chap, 'quiz', ch.quiz);\n    CHAPTERS.push(chap);\n  });\n});\nfunction push(chap, kind, payload) {\n  const s = { id: chap.key + ':' + kind, kind, payload, chap, index: STOPS.length };\n  STOPS.push(s); chap.stops.push(s);\n}\nconst KIND = {\n  video: { label:'Watch', short:'Video', sub: d => d.duration || '' },\n  notes: { label:'Read',  short:'Notes', sub: d => d.readTime || '' },\n  quiz : { label:'Test',  short:'Test',  sub: d => d.questions.length + ' Q' }\n};\n\n\/* ---------- progress store ---------- *\/\nconst KEY = 'cp:' + (META.id || 'course');\nconst store = (() => {\n  let ok = true, mem = {};\n  try { localStorage.setItem(KEY + ':t', '1'); localStorage.removeItem(KEY + ':t'); } catch (e) { ok = false; }\n  return {\n    read(){ if (!ok) return mem; try { return JSON.parse(localStorage.getItem(KEY) || '{}'); } catch(e){ return {}; } },\n    write(v){ mem = v; if (ok) { try { localStorage.setItem(KEY, JSON.stringify(v)); } catch(e){} } },\n    clear(){ mem = {}; if (ok) { try { localStorage.removeItem(KEY); } catch(e){} } }\n  };\n})();\nlet state = store.read() || {};\nif (typeof state !== 'object') state = {};\nif (!state.done   || typeof state.done   !== 'object') state.done = {};\nif (!state.scores || typeof state.scores !== 'object') state.scores = {};\nif (!('last' in state)) state.last = null;\nconst isDone = id => !!state.done[id];\nconst save = () => store.write(state);\n\nlet current = STOPS.find(s => s.id === state.last) || STOPS[0];\nlet ytPlayer = null, ytPending = null, ytReady = false;\n\n\/* ============================================================\n   SIDEBAR\n   ============================================================ *\/\nfunction buildSidebar() {\n  $('cpList').innerHTML = (COURSE.modules || []).map((mod, mi) => {\n    const chaps = CHAPTERS.filter(c => c.mi === mi);\n    return `\n    <section class=\"cp-mod\" data-mod=\"${mi}\">\n      <button class=\"cp-modhead\" type=\"button\" aria-expanded=\"false\" data-toggle=\"${mi}\">\n        <span class=\"t\">${esc(mod.title)}<\/span>\n        <span class=\"ct\">${chaps.length} ch<\/span>\n        ${ic('down')}\n      <\/button>\n      <div class=\"cp-chaps\" id=\"cpChaps${mi}\" hidden>\n        ${chaps.map(c => `\n          <div class=\"cp-chap\" data-chap=\"${c.key}\" data-search=\"${esc((c.data.title + ' ' + (c.data.ref || '')).toLowerCase())}\">\n            <div class=\"cp-ctitle\">\n              <span class=\"cn\">${String(c.no).padStart(2, '0')}<\/span>\n              <span><b>${esc(c.data.title)}<\/b>${c.data.ref ? `<span>${esc(c.data.ref)}<\/span>` : ''}<\/span>\n            <\/div>\n            <div class=\"cp-mini\">\n              ${c.stops.map(s => `<button type=\"button\" data-stop=\"${s.id}\">${KIND[s.kind].short}<\/button>`).join('')}\n              ${(c.data.material && c.data.material.length) ? `<button type=\"button\" data-mat=\"${c.key}\" title=\"Study material\">${ic('dl')} ${c.data.material.length}<\/button>` : ''}\n            <\/div>\n          <\/div>`).join('')}\n      <\/div>\n    <\/section>`;\n  }).join('');\n\n  $('cpList').querySelectorAll('[data-toggle]').forEach(b => b.addEventListener('click', () => toggleMod(+b.dataset.toggle)));\n  $('cpList').querySelectorAll('[data-stop]').forEach(b => b.addEventListener('click', () => {\n    go(STOPS.find(s => s.id === b.dataset.stop));\n    if (innerWidth <= 1080) closeDrawer();\n  }));\n  $('cpList').querySelectorAll('[data-mat]').forEach(b => b.addEventListener('click', () => {\n    const chap = CHAPTERS.find(c => c.key === b.dataset.mat);\n    go(chap.stops[0]);\n    if (innerWidth <= 1080) closeDrawer();\n    setTimeout(() => scrollTo($('cpMat'), { behavior:'smooth', block:'start' }), 260);\n  }));\n}\nfunction toggleMod(mi, force) {\n  const h = document.querySelector(`[data-toggle=\"${mi}\"]`), box = $('cpChaps' + mi);\n  const open = force !== undefined ? force : h.getAttribute('aria-expanded') !== 'true';\n  h.setAttribute('aria-expanded', open ? 'true' : 'false');\n  box.hidden = !open;\n}\nfunction syncSidebar() {\n  document.querySelectorAll('.cp-chap').forEach(el => el.classList.toggle('current', el.dataset.chap === current.chap.key));\n  document.querySelectorAll('[data-stop]').forEach(b => {\n    b.classList.toggle('on', b.dataset.stop === current.id);\n    b.classList.toggle('done', isDone(b.dataset.stop));\n  });\n  toggleMod(current.chap.mi, true);\n}\n$('cpSearch').addEventListener('input', e => {\n  const q = e.target.value.trim().toLowerCase();\n  let hits = 0;\n  document.querySelectorAll('.cp-mod').forEach(mod => {\n    let shown = 0;\n    mod.querySelectorAll('.cp-chap').forEach(ch => {\n      const m = !q || ch.dataset.search.indexOf(q) > -1;\n      ch.style.display = m ? '' : 'none';\n      if (m) shown++;\n    });\n    mod.style.display = shown ? '' : 'none';\n    hits += shown;\n    if (q && shown) toggleMod(+mod.dataset.mod, true);\n  });\n  let n = $('cpNoHit');\n  if (!hits) {\n    if (!n) { n = document.createElement('p'); n.id = 'cpNoHit'; n.className = 'cp-nohit'; $('cpList').appendChild(n); }\n    n.textContent = 'No chapter matches \u201c' + e.target.value + '\u201d.';\n  } else if (n) n.remove();\n});\n\n\/* ============================================================\n   STAGE\n   ============================================================ *\/\nfunction renderHead() {\n  $('cpKick').textContent = 'Module ' + (current.chap.mi + 1) + ' \u00b7 ' + current.chap.mod.title + '  \/\/  Chapter ' + String(current.chap.no).padStart(2, '0');\n  $('cpChapName').textContent = current.chap.data.title;\n  $('cpRef').textContent = current.chap.data.ref || '';\n\n  $('cpTabs').innerHTML = current.chap.stops.map((s, i) => {\n    const k = KIND[s.kind];\n    return `<button class=\"cp-tab ${isDone(s.id) ? 'done' : ''}\" role=\"tab\" aria-selected=\"${s.id === current.id}\" data-tab=\"${s.id}\">\n      <span class=\"n\">0${i + 1}<\/span>${k.label}\n      ${k.sub(s.payload) ? `<span class=\"sub\">${esc(k.sub(s.payload))}<\/span>` : ''}\n      <span class=\"tick\">${ic('check')}<\/span>\n    <\/button>`;\n  }).join('');\n  $('cpTabs').querySelectorAll('[data-tab]').forEach(b =>\n    b.addEventListener('click', () => go(STOPS.find(s => s.id === b.dataset.tab))));\n}\n\nfunction renderStage() {\n  const st = $('cpStage');\n  destroyPlayer();\n  if (current.kind === 'video') {\n    st.innerHTML = viewVideo(current);\n    const p = st.querySelector('.cp-poster');\n    if (p) p.addEventListener('click', () => mount(ytId(current.payload.youtube)));\n  }\n  if (current.kind === 'notes') {\n    st.innerHTML = viewNotes(current.payload);\n    const b = st.querySelector('[data-print]');\n    if (b) b.addEventListener('click', () => print());\n  }\n  if (current.kind === 'quiz') { st.innerHTML = viewQuiz(current); wireQuiz(current); }\n  renderMaterial();\n}\n\n\/* ---- video ---- *\/\nfunction ytId(v) {\n  if (!v) return '';\n  if (\/^[\\w-]{11}$\/.test(v)) return v;\n  const m = v.match(\/(?:v=|youtu\\.be\\\/|embed\\\/|shorts\\\/)([\\w-]{11})\/);\n  return m ? m[1] : v;\n}\nfunction viewVideo(s) {\n  const id = ytId(s.payload.youtube);\n  if (!id) return `<div class=\"cp-empty\">Video for this chapter will be published shortly.<\/div>`;\n  return `<div class=\"cp-video\" id=\"cpVideoBox\">\n    <button class=\"cp-poster\" type=\"button\" style=\"background-image:url('https:\/\/i.ytimg.com\/vi\/${id}\/hqdefault.jpg')\">\n      <span class=\"cp-play\">${ic('play')}<\/span>\n      <h4>${esc(current.chap.data.title)}<\/h4>\n      <p>${esc(s.payload.duration || '')} \u2014 completes automatically when the video ends<\/p>\n    <\/button><\/div>`;\n}\nfunction mount(id) {\n  const box = $('cpVideoBox'); if (!box) return;\n  box.innerHTML = '<div id=\"cpYT\"><\/div>';\n  ytPending = id;\n  if (createPlayer()) return;\n  setTimeout(() => { if (ytPending === id && !ytPlayer) plainEmbed(id); }, 2500);\n}\nfunction createPlayer() {\n  if (!(ytReady && window.YT && YT.Player) || !document.getElementById('cpYT')) return false;\n  ytPlayer = new YT.Player('cpYT', {\n    videoId: ytPending,\n    playerVars: { rel: 0, modestbranding: 1, autoplay: 1, playsinline: 1 },\n    events: { onStateChange: e => { if (e.data === 0) videoEnd(); } }\n  });\n  ytPending = null; return true;\n}\nfunction plainEmbed(id) {\n  const box = $('cpVideoBox'); if (!box) return;\n  ytPending = null;\n  box.innerHTML = `<iframe src=\"https:\/\/www.youtube.com\/embed\/${id}?autoplay=1&rel=0&modestbranding=1&enablejsapi=1\"\n    title=\"${esc(current.chap.data.title)}\" allow=\"accelerometer; autoplay; encrypted-media; picture-in-picture; web-share\" allowfullscreen><\/iframe>`;\n}\naddEventListener('message', ev => {\n  if (ev.origin !== 'https:\/\/www.youtube.com' || ytPlayer) return;\n  try { const d = JSON.parse(ev.data); if (d.event === 'onStateChange' && d.info === 0 && current.kind === 'video') videoEnd(); } catch (e) {}\n});\nfunction destroyPlayer(){ if (ytPlayer && ytPlayer.destroy) { try { ytPlayer.destroy(); } catch(e){} } ytPlayer = null; ytPending = null; }\nfunction videoEnd(){ markDone(current, 'Lesson completed'); if (META.autoplayNext !== false) setTimeout(next, 1400); }\nwindow.onYouTubeIframeAPIReady = function(){ ytReady = true; if (ytPending && current.kind === 'video') createPlayer(); };\n(function(){ if (window.YT && window.YT.Player) { ytReady = true; return; }\n  if (document.getElementById('cp-yt-api')) return;\n  const s = document.createElement('script'); s.id = 'cp-yt-api'; s.src = 'https:\/\/www.youtube.com\/iframe_api';\n  document.head.appendChild(s); })();\n\n\/* ---- notes ---- *\/\nfunction viewNotes(n) {\n  const blocks = (n.blocks || []).map(b => {\n    if (b.type === 'para')  return `${b.title ? `<h4 class=\"cp-h2\">${esc(b.title)}<\/h4>` : ''}<p class=\"tx\">${b.text}<\/p>`;\n    if (b.type === 'list')  return `${b.title ? `<h4 class=\"cp-h2\">${esc(b.title)}<\/h4>` : ''}<ul class=\"cp-ul\">${b.items.map(i => `<li>${i}<\/li>`).join('')}<\/ul>`;\n    if (b.type === 'table') return `${b.title ? `<h4 class=\"cp-h2\">${esc(b.title)}<\/h4>` : ''}\n      <table class=\"cp-table\"><thead><tr>${b.head.map(h => `<th>${esc(h)}<\/th>`).join('')}<\/tr><\/thead>\n      <tbody>${b.rows.map(r => `<tr>${r.map(c => `<td>${c}<\/td>`).join('')}<\/tr>`).join('')}<\/tbody><\/table>`;\n    if (b.type === 'callout') return `<div class=\"cp-call ${b.tone || 'tip'}\">${b.title ? `<b>${esc(b.title)}<\/b>` : ''}${b.text}<\/div>`;\n    return '';\n  }).join('');\n  return `<article class=\"cp-notes\">\n    <div class=\"cp-nmeta\">\n      <span class=\"cp-chip\">${ic('clock')} ${esc(n.readTime || 'Quick read')}<\/span>\n      <span class=\"cp-chip\">${ic('doc')} Concise notes<\/span>\n      <button class=\"cp-chip\" type=\"button\" data-print>${ic('print')} Print<\/button>\n    <\/div>\n    ${n.summary ? `<p class=\"cp-lede\">${n.summary}<\/p>` : ''}\n    ${n.highlight ? `<div class=\"cp-quote\"><b>${esc(n.highlight.label || 'Key provision')}<\/b><p>${n.highlight.text}<\/p><\/div>` : ''}\n    ${(n.keypoints && n.keypoints.length) ? `<h4 class=\"cp-h2\">Points to remember<\/h4>\n      <ul class=\"cp-keys\">${n.keypoints.map(k => `<li>${ic('check')}<span>${k}<\/span><\/li>`).join('')}<\/ul>` : ''}\n    ${blocks}\n    ${n.mnemonic ? `<div class=\"cp-mnem\"><span>Memory hook<\/span>${esc(n.mnemonic)}<\/div>` : ''}\n  <\/article>`;\n}\n\n\/* ---- quiz ---- *\/\nfunction viewQuiz(stop) {\n  const q = stop.payload;\n  const best = state.scores[stop.id];\n  return `<section class=\"cp-quiz\" id=\"cpQuiz\">\n    <div class=\"cp-qtop\">\n      <div><h4>Test yourself<\/h4><p>${q.questions.length} questions \u00b7 pass mark ${q.passMark || 60}%<\/p><\/div>\n      <span class=\"cp-chip\">${ic('quiz')} Best ${best != null ? best + '%' : '\u2014'}<\/span>\n    <\/div>\n    <div class=\"cp-score\" id=\"cpScore\">\n      <div class=\"num\" id=\"cpScoreNum\">0<small>%<\/small><\/div>\n      <div><h5 id=\"cpScoreTitle\"><\/h5><p id=\"cpScoreMsg\"><\/p><\/div>\n    <\/div>\n    ${q.questions.map((it, i) => `\n      <div class=\"cp-q\" data-q=\"${i}\" data-correct=\"${it.correct}\">\n        <div class=\"cp-qn\"><i>${String(i + 1).padStart(2, '0')}<\/i><p>${it.q}<\/p><\/div>\n        <div class=\"cp-opts\">${it.options.map((o, j) => `\n          <button class=\"cp-opt\" type=\"button\" data-opt=\"${j}\"><em>${String.fromCharCode(65 + j)}<\/em><span>${o}<\/span><\/button>`).join('')}<\/div>\n        ${it.explain ? `<div class=\"cp-exp\"><u>Explanation<\/u>${it.explain}<\/div>` : ''}\n      <\/div>`).join('')}\n    <div class=\"cp-qact\">\n      <button class=\"cp-btn pri\" id=\"cpSubmit\" type=\"button\">${ic('send')} Submit answers<\/button>\n      <button class=\"cp-btn ghost\" id=\"cpRetry\" type=\"button\" hidden>${ic('redo')} Try again<\/button>\n    <\/div><\/section>`;\n}\nfunction wireQuiz(stop) {\n  const box = $('cpQuiz'); let locked = false;\n  box.querySelectorAll('.cp-opt').forEach(b => b.addEventListener('click', () => {\n    if (locked) return;\n    const h = b.closest('.cp-q'); h.classList.remove('miss');\n    h.querySelectorAll('.cp-opt').forEach(o => o.classList.remove('sel'));\n    b.classList.add('sel');\n  }));\n  $('cpSubmit').addEventListener('click', () => {\n    const qs = [...box.querySelectorAll('.cp-q')];\n    const missing = qs.filter(q => !q.querySelector('.cp-opt.sel'));\n    if (missing.length) {\n      qs.forEach(q => q.classList.toggle('miss', !q.querySelector('.cp-opt.sel')));\n      scrollTo(missing[0], { behavior:'smooth', block:'center' });\n      toast('Answer all ' + qs.length + ' questions'); return;\n    }\n    locked = true; let right = 0;\n    qs.forEach(q => {\n      const cor = +q.dataset.correct, sel = q.querySelector('.cp-opt.sel'), opts = [...q.querySelectorAll('.cp-opt')];\n      opts.forEach(o => o.disabled = true);\n      if (+sel.dataset.opt === cor) { sel.classList.replace('sel','right'); right++; }\n      else { sel.classList.replace('sel','wrong'); opts[cor].classList.add('right'); }\n      const e = q.querySelector('.cp-exp'); if (e) e.classList.add('on');\n    });\n    const pct = Math.round(right \/ qs.length * 100);\n    const pass = pct >= (stop.payload.passMark || 60);\n    const sc = $('cpScore');\n    sc.className = 'cp-score on ' + (pass ? 'pass' : 'fail');\n    $('cpScoreNum').innerHTML = pct + '<small>%<\/small>';\n    $('cpScoreTitle').textContent = right + ' of ' + qs.length + ' correct';\n    $('cpScoreMsg').textContent = pass ? 'Chapter test cleared.' : 'Below the pass mark \u2014 review the notes and take it again.';\n    state.scores[stop.id] = Math.max(state.scores[stop.id] || 0, pct); save();\n    $('cpSubmit').hidden = true; $('cpRetry').hidden = false;\n    if (pass) markDone(stop, 'Test cleared \u2014 ' + pct + '%');\n    scrollTo(sc, { behavior:'smooth', block:'nearest' });\n  });\n  $('cpRetry').addEventListener('click', renderStage);\n}\n\n\/* ---- study material ---- *\/\nfunction fileRow(f) {\n  return `<a class=\"cp-file\" href=\"${esc(f.url || '#')}\" ${\/^https?:\/.test(f.url || '') ? 'target=\"_blank\" rel=\"noopener\"' : ''} ${f.url && f.url !== '#' ? 'download' : ''}>\n    <span class=\"tag\">${esc(f.type || 'PDF')}<\/span>\n    <span class=\"txt\"><b>${esc(f.title)}<\/b><span>${f.src ? `<i>${esc(f.src)}<\/i>` : ''}${f.src && f.meta ? ' \u00b7 ' : ''}${esc(f.meta || '')}<\/span><\/span>\n    <span class=\"dl\">${ic('dl')} Download<\/span><\/a>`;\n}\nfunction renderMaterial() {\n  const chapFiles = current.chap.data.material || current.chap.data.resources || [];\n  const lib = COURSE.library || [];\n  const total = chapFiles.length + lib.length;\n  $('cpMat').innerHTML = `\n    <div class=\"cp-mathead\">\n      <h5><b>\u25a0<\/b> Study material <span class=\"mono\">(${total})<\/span><\/h5>\n      <span class=\"note\">Official source documents and prepared sheets for this chapter.<\/span>\n    <\/div>\n    ${chapFiles.length\n      ? `<div class=\"cp-matgrp\">This chapter<\/div>${chapFiles.map(fileRow).join('')}`\n      : `<div class=\"cp-file none\">No chapter-specific file uploaded yet.<\/div>`}\n    ${lib.length ? `<div class=\"cp-matgrp\">Full course library<\/div>${lib.map(fileRow).join('')}` : ''}`;\n}\n\n\/* ============================================================\n   NAVIGATION & PROGRESS\n   ============================================================ *\/\nfunction go(stop) {\n  if (!stop) return;\n  current = stop; state.last = stop.id; save();\n  renderHead(); renderStage(); syncSidebar(); syncBar();\n  scrollTo(document.querySelector('.cp-chap.current'), { block:'nearest' });\n}\nfunction next(){ if (current.index < STOPS.length - 1) go(STOPS[current.index + 1]); }\nfunction prev(){ if (current.index > 0) go(STOPS[current.index - 1]); }\n\nfunction markDone(stop, msg) {\n  if (isDone(stop.id)) return;\n  state.done[stop.id] = 1; save();\n  renderHead(); syncSidebar(); syncBar(); syncProgress();\n  toast(msg || 'Marked complete');\n}\nfunction syncBar() {\n  const b = $('cpDone'), d = isDone(current.id);\n  b.classList.toggle('is-done', d);\n  b.querySelector('span').textContent = d ? 'Completed' : 'Mark complete';\n  b.disabled = d;\n  $('cpPrev').disabled = current.index === 0;\n  const last = current.index === STOPS.length - 1;\n  $('cpNext').disabled = last;\n  $('cpNext').innerHTML = (last ? 'Course end' : 'Next') + ' ' + ic('right');\n}\nfunction syncProgress() {\n  const t = STOPS.length, d = STOPS.filter(s => isDone(s.id)).length;\n  const p = t ? Math.round(d \/ t * 100) : 0;\n  $('cpCount').innerHTML = '<b>' + String(d).padStart(2,'0') + '<\/b> \/ ' + String(t).padStart(2,'0') + ' done';\n  $('cpBar').style.width = p + '%';\n  $('cpFoot').textContent = d + '\/' + t + ' items \u00b7 ' + CHAPTERS.length + ' chapters';\n}\n\n\/* ============================================================\n   PLUMBING\n   ============================================================ *\/\nlet tt;\nfunction toast(m){ $('cpToastText').textContent = m; $('cpToast').classList.add('on'); clearTimeout(tt); tt = setTimeout(() => $('cpToast').classList.remove('on'), 2600); }\nfunction openDrawer(){ $('cpSide').classList.add('on'); $('cpOvl').classList.add('on'); $('cpClose').focus(); }\nfunction closeDrawer(){ $('cpSide').classList.remove('on'); $('cpOvl').classList.remove('on'); }\n\n$('cpBurger').addEventListener('click', openDrawer);\n$('cpClose').addEventListener('click', closeDrawer);\n$('cpOvl').addEventListener('click', closeDrawer);\n$('cpDone').addEventListener('click', () => markDone(current));\n$('cpNext').addEventListener('click', next);\n$('cpPrev').addEventListener('click', prev);\n$('cpBack').addEventListener('click', () => { META.backUrl ? (location.href = META.backUrl) : history.back(); });\n$('cpReset').addEventListener('click', () => {\n  if (!confirm('Clear your progress for this course?')) return;\n  state = { done:{}, last:null, scores:{} }; store.clear(); save();\n  renderHead(); renderStage(); syncSidebar(); syncBar(); syncProgress();\n  toast('Progress cleared');\n});\naddEventListener('keydown', e => {\n  if (e.key === 'Escape') closeDrawer();\n  if (\/^(INPUT|TEXTAREA|SELECT)$\/.test(document.activeElement.tagName) || e.ctrlKey || e.metaKey || e.altKey) return;\n  if (e.key === 'n' || e.key === 'N') next();\n  if (e.key === 'p' || e.key === 'P') prev();\n});\n\nif (!STOPS.length) {\n  $('cpStage').innerHTML = '<div class=\"cp-empty\">No content added yet. Add chapters to the COURSE object.<\/div>';\n} else {\n  buildSidebar(); syncProgress(); go(current); syncProgress();\n}\n\nfunction fitParents(){\n  if (innerWidth > 1080) return;\n  let p = root.parentElement, d = 0;\n  while (p && d++ < 12) { p.style.minHeight = '0'; p.style.height = 'auto'; p = p.parentElement; }\n}\naddEventListener('load', fitParents);\naddEventListener('resize', fitParents);\nsetTimeout(fitParents, 300);\n\n})();\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>Back Contents Mark complete Previous Next Course contents Reset<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"disabled","ast-banner-title-visibility":"disabled","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"disabled","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[],"tags":[],"class_list":["post-14933","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>VIDEO COURSE- OPERATIONAL MANUAL FOR INTERNAL AUDIT - 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=14933\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"VIDEO COURSE- OPERATIONAL MANUAL FOR INTERNAL AUDIT - PromotionExams\" \/>\n<meta property=\"og:description\" content=\"Back Contents Mark complete Previous Next Course contents Reset\" \/>\n<meta property=\"og:url\" content=\"https:\/\/promotionexams.com\/?page_id=14933\" \/>\n<meta property=\"og:site_name\" content=\"PromotionExams\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-05T01:58:55+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=14933\",\"url\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=14933\",\"name\":\"VIDEO COURSE- OPERATIONAL MANUAL FOR INTERNAL AUDIT - PromotionExams\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/promotionexams.com\\\/#website\"},\"datePublished\":\"2026-08-04T15:00:03+00:00\",\"dateModified\":\"2026-08-05T01:58:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=14933#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/promotionexams.com\\\/?page_id=14933\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=14933#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/promotionexams.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"VIDEO COURSE- OPERATIONAL MANUAL FOR INTERNAL AUDIT\"}]},{\"@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":"VIDEO COURSE- OPERATIONAL MANUAL FOR INTERNAL AUDIT - 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=14933","og_locale":"en_GB","og_type":"article","og_title":"VIDEO COURSE- OPERATIONAL MANUAL FOR INTERNAL AUDIT - PromotionExams","og_description":"Back Contents Mark complete Previous Next Course contents Reset","og_url":"https:\/\/promotionexams.com\/?page_id=14933","og_site_name":"PromotionExams","article_modified_time":"2026-08-05T01:58:55+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/promotionexams.com\/?page_id=14933","url":"https:\/\/promotionexams.com\/?page_id=14933","name":"VIDEO COURSE- OPERATIONAL MANUAL FOR INTERNAL AUDIT - PromotionExams","isPartOf":{"@id":"https:\/\/promotionexams.com\/#website"},"datePublished":"2026-08-04T15:00:03+00:00","dateModified":"2026-08-05T01:58:55+00:00","breadcrumb":{"@id":"https:\/\/promotionexams.com\/?page_id=14933#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/promotionexams.com\/?page_id=14933"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/promotionexams.com\/?page_id=14933#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/promotionexams.com\/"},{"@type":"ListItem","position":2,"name":"VIDEO COURSE- OPERATIONAL MANUAL FOR INTERNAL AUDIT"}]},{"@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\/14933","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=14933"}],"version-history":[{"count":7,"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/14933\/revisions"}],"predecessor-version":[{"id":14982,"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/14933\/revisions\/14982"}],"wp:attachment":[{"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}