{"id":18099,"date":"2026-10-29T15:56:03","date_gmt":"2026-10-29T15:56:03","guid":{"rendered":"https:\/\/promotionexams.com\/?page_id=18099"},"modified":"2026-10-29T15:56:04","modified_gmt":"2026-10-29T15:56:04","slug":"test-series-upsc-principal-vice-principal","status":"publish","type":"page","link":"https:\/\/promotionexams.com\/?page_id=18099","title":{"rendered":"Test Series- UPSC PRINCIPAL\/VICE-PRINCIPAL"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"18099\" class=\"elementor elementor-18099\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d84a10e e-con-full e-flex e-con e-parent\" data-id=\"d84a10e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8dfe2f6 elementor-widget elementor-widget-html\" data-id=\"8dfe2f6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>UPSC Principal &amp; Vice-Principal Test Series \u2014 Exam 9 Jan 2027, Free 2022 Papers &amp; Live Mocks | PromotionExams<\/title>\n<meta name=\"description\" content=\"UPSC Principal &amp; Vice-Principal CRT, postponed to 9 January 2027: free 2022 papers, NEP 2020, RTE, pedagogy, evaluation, digital literacy, service rules and a live full-length mock series from 9 December.\">\n<meta name=\"keywords\" content=\"UPSC Principal test series, UPSC Vice Principal test series, UPSC Principal Vice Principal 2026, GNCTD Principal exam, Special Advt 51\/2026, NEP 2020 MCQ, RTE Act 2009 MCQ, pedagogy MCQ, educational measurement and evaluation MCQ, digital literacy MCQ, Principal 2022 question paper, Vice Principal 2022 question paper, UPSC Principal mock test\">\n<meta name=\"author\" content=\"PromotionExams\">\n<meta name=\"robots\" content=\"index, follow, max-image-preview:large\">\n<meta name=\"theme-color\" content=\"#1E3A8A\">\n<link rel=\"canonical\" href=\"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\">\n<meta property=\"og:type\" content=\"website\">\n<meta property=\"og:site_name\" content=\"PromotionExams\">\n<meta property=\"og:locale\" content=\"en_IN\">\n<meta property=\"og:title\" content=\"UPSC Principal &amp; Vice-Principal CRT (9 Jan 2027) Test Series\">\n<meta property=\"og:description\" content=\"UPSC Principal &amp; Vice-Principal CRT, postponed to 9 January 2027: free 2022 papers, NEP 2020, RTE, pedagogy, evaluation, digital literacy, service rules and a live full-length mock series from 9 December.\">\n<meta property=\"og:url\" content=\"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\">\n<meta property=\"og:image\" content=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png\">\n<meta name=\"twitter:card\" content=\"summary_large_image\">\n<meta name=\"twitter:title\" content=\"UPSC Principal &amp; Vice-Principal CRT (9 Jan 2027) Test Series | PromotionExams\">\n<meta name=\"twitter:description\" content=\"UPSC Principal &amp; Vice-Principal CRT, postponed to 9 January 2027: free 2022 papers, NEP 2020, RTE, pedagogy, evaluation, digital literacy, service rules and a live full-length mock series from 9 December.\">\n<meta name=\"twitter:image\" content=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\">\n<\/head>\n<body>\n<!-- ===================================================================\n     UPSC PRINCIPAL &AMP; VICE-PRINCIPAL CRT TEST SERIES \u2014 paste everything between this marker\n     and END OF PASTE BLOCK into an Elementor HTML widget.\n     Scoped to #ts-repo. Elementor: container Content Width = Full Width, padding 0.\n     Sticky site header? set --ts-top in the CSS to its height.\n\n     SEO PLUGIN (Rank Math \/ Yoast) \u2014 the <head> above does not travel with an\n     Elementor widget, so set these on the page itself:\n       Title        UPSC Principal & Vice-Principal Test Series \u2014 Exam 9 Jan 2027, Free 2022 Papers & Live Mocks | PromotionExams\n       Description  UPSC Principal & Vice-Principal CRT, postponed to 9 January 2027: free 2022 papers, NEP 2020, RTE, pedagogy, evaluation, digital literacy, service rules and a live full-length mock series from 9 December.\n       Canonical    https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\n       Focus terms  UPSC Principal test series, UPSC Vice Principal test series, UPSC Principal Vice Principal 2026, GNCTD Principal exam\n     The page's URL must match the canonical above \u2014 change it in catalog.py\n     and rebuild if the page lives somewhere else.\n     =================================================================== -->\n<!-- ====================================================================================================\n     PRODUCT MAP \u2014 UPSC Principal &amp; Vice-Principal CRT (read-only index; edit prices in PE_EDITS \/ PE_BUNDLES at the foot)\n     ====================================================================================================\n       pvp-2022-principal         pyq      free       woo 16469   Principal 2022 \u2014 Previous Year Paper\n       pvp-2022-vice-principal    pyq      free       woo 16470   Vice-Principal 2022 \u2014 Previous Year Paper\n       pvp-nep                    chapter  199\/249    woo 16568   National Education Policy (NEP) 2020\n       pvp-rte                    chapter  119\/149    woo 16665   Right to Education (RTE) Act,2009 & Rules, 2010\n       pvp-schemes                chapter  249\/399    woo 16622   Schemes & Policies in School Education\n       pvp-child                  chapter  299\/546    woo 17949   Child Safety & Protection \u2014 related Acts & Rules (POSCO, C\n       pvp-measure                chapter  299\/399    woo 16705   Measurement & Evaluation\n       pvp-pedagogy               chapter  299\/399    woo 17205   Pedagogy in Education\n       pvp-digital                chapter  199\/249    woo 16524   Digital Literacy\n       pyq-mop                    pyq      119\/149    woo 5753   Manual of Office Procedure \u2014 PYQs (UPSC SO\/Steno LDCE)\n       pyq-pension                pyq      99\/129     woo 2631   CCS (Pension) Rules \u2014 PYQs (UPSC SO\/Steno LDCE)\n       pyq-conduct                pyq      99\/129     woo 5750   CCS (Conduct) Rules, 1964 \u2014 PYQs (UPSC SO\/Steno LDCE)\n       pyq-cca                    pyq      99\/129     woo 2630   CCS (CCA) Rules, 1965 \u2014 PYQs (UPSC SO\/Steno LDCE)\n       pyq-rti                    pyq      99\/129     woo 2629   Right to Information Act \u2014 PYQs (UPSC SO\/Steno LDCE)\n       combo-rti                  combo    149\/199    woo 16040   RTI Act, 2005 \u2014 Complete Pack\n       cw-gfr                     combo    149\/199    woo 16094   General Financial Rules, 2017 \u2014 Complete Pack\n       cw-pension                 combo    199\/249    woo 16191   CCS (Pension) Rules, 2021 \u2014 Complete Pack\n       combo-leave                combo    149\/199    woo 15560   CCS (Leave\/LTC) Rules \u2014 Complete Pack\n     -- bundles ---------------------------------------------------------------------------------------\n       bundle-pvp-p2              Rs 619\/863    woo --none--   Service & Financial Rules Pack  (6 series, separately Rs 814)\n     ==================================================================================================== -->\n<div id=\"ts-repo\" data-exam=\"pvp\">\n  <header class=\"ts-hero\">\n    <div class=\"ts-hero__bg\" role=\"img\" aria-label=\"Central Secretariat, New Delhi\"><\/div>\n    <div class=\"ts-hero__inner\">\n      <div class=\"ts-hero__panel\">\n        <ol class=\"ts-crumbs\" aria-label=\"Breadcrumb\">\n          <li><a href=\"https:\/\/promotionexams.com\/\">Home<\/a><\/li>\n          <li><a href=\"https:\/\/promotionexams.com\/test-series\/\">Test Series<\/a><\/li>\n          <li><span aria-current=\"page\">Principal \/ Vice-Principal<\/span><\/li>\n        <\/ol>\n        <p class=\"eyebrow\">promotionexams.com &#183; Principal \/ Vice-Principal<\/p>\n        <h1 class=\"ts-h1\">UPSC Principal &amp; Vice-Principal <em>Test Series<\/em><\/h1>\n        <p class=\"ts-tag\">One 300-mark paper \u2014 the core education subjects and office administration, mock-tested.<\/p>\n        <p class=\"ts-hero__sub\">The 2022 Principal and Vice-Principal papers free to attempt, chapter-wise banks for NEP 2020, RTE, schemes, measurement &amp; evaluation, pedagogy and digital literacy, and the service-rule packs for office administration \u2014 curated for the Combined Recruitment Test, Directorate of Education, GNCTD.<\/p>\n        <label class=\"ts-search\">\n          <svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><path d=\"M20 20l-4-4\"\/><\/svg>\n          <input id=\"ts-q\" type=\"search\" placeholder=\"Search NEP, RTE, pedagogy, Pension, RTI\u2026\" autocomplete=\"off\" aria-label=\"Search Principal \/ Vice-Principal test series\">\n          <button type=\"button\" class=\"x\" id=\"ts-qx\" aria-label=\"Clear search\">&#10005;<\/button>\n        <\/label>\n        <div class=\"ts-facts\">\n          <div class=\"ts-fact\"><b data-count=\"series\">18<\/b><span>Test series<\/span><\/div>\n          <div class=\"ts-fact\"><b>2<\/b><span>Free 2022 papers<\/span><\/div>\n          <div class=\"ts-fact\"><b>300<\/b><span>Marks \u00b7 2 hours<\/span><\/div>\n          <div class=\"ts-fact\"><b data-examdate>9 Jan 2027<\/b><span>Test date \u00b7 postponed<\/span><\/div>\n        <\/div>\n      <\/div>\n      <aside class=\"ts-glance\" aria-label=\"UPSC Principal &amp; Vice-Principal CRT at a glance\">\n        <div class=\"gl-head\">\n          <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png\" alt=\"UPSC Principal &amp; Vice-Principal CRT logo\" width=\"42\" height=\"42\" loading=\"lazy\">\n          <div><b>UPSC Principal &amp; Vice-Principal CRT<\/b><span>Principal & Vice-Principal \u2014 Combined Recruitment Test, Directorate of Education, GNCTD<\/span><\/div>\n        <\/div>\n        <div class=\"ed postponed\" id=\"ts-examday\">\n          <div>\n            <span class=\"ed-lab\">Test date <em class=\"ed-tag\">Postponed<\/em><\/span>\n            <span class=\"ed-date\"><s>1 Nov 2026<\/s> Sat, 9 Jan 2027 <small>9:30\u201311:30 AM<\/small><\/span>\n            <span class=\"ed-note\">Postponed from 1 Nov 2026 \u2014 UPSC Corrigendum dated 16 Oct 2026<\/span>\n          <\/div>\n          <div class=\"ed-left\"><\/div>\n        <\/div>\n        <ul class=\"gl-papers\">\n          <li><a href=\"#shelf\" data-gopaper=\"Free\"><span class=\"pl\">Free papers<\/span><span class=\"pt\">The 2022 papers, free to attempt<\/span><span class=\"pc\" data-paper-count=\"Free\">2 series<\/span><\/a><\/li>\n          <li><a href=\"#shelf\" data-gopaper=\"Head 1\"><span class=\"pl\">Core Subjects<\/span><span class=\"pt\">Educational Policies, Pedagogy, Evaluation & Digital Literacy<\/span><span class=\"pc\" data-paper-count=\"Head 1\">7 series<\/span><\/a><\/li>\n          <li><a href=\"#shelf\" data-gopaper=\"Head 2\"><span class=\"pl\">Office Administration<\/span><span class=\"pt\">Office Procedure, Management & Financial Administration<\/span><span class=\"pc\" data-paper-count=\"Head 2\">9 series<\/span><\/a><\/li>\n          <li><a href=\"#shelf\" data-gopaper=\"Head 3\"><span class=\"pl\">GK & Aptitude<\/span><span class=\"pt\">General Knowledge, Language, Reasoning & Aptitude<\/span><span class=\"pc\" data-paper-count=\"Head 3\">soon<\/span><\/a><\/li>\n        <\/ul>\n        <a class=\"gl-mock\" href=\"#live-mocks\" data-lm-next>\n          <span class=\"k\"><span class=\"lm-dot\"><\/span> <span class=\"lmn-k\">Live mock series<\/span><\/span>\n          <span class=\"lmn-title\">Opens Wed, 9 Dec 2026<\/span>\n          <span class=\"lmn-when\"><\/span>\n          <span class=\"lmn-cd\" aria-live=\"off\"><\/span>\n        <\/a>\n      <\/aside>\n    <\/div>\n  <\/header>\n  <div class=\"ts-alert\" role=\"status\">\n    <div class=\"wrap\">\n      <div class=\"ts-alert__in\">\n        <span class=\"ts-alert__tag\"><i class=\"fa-solid fa-triangle-exclamation\"><\/i> Exam postponed<\/span>\n        <p>UPSC Corrigendum dated 16.10.2026: the Combined Recruitment Test for <strong>124 Principal<\/strong> and <strong>704 Vice-Principal<\/strong> posts (Advt. No. 51\/2026), earlier notified for 01.11.2026, will now be held on <strong>Saturday, 9 January 2027<\/strong>, forenoon session, <strong>9:30 AM to 11:30 AM<\/strong>.<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n  <section class=\"sec lm-cta\" aria-labelledby=\"ctaHead\">\n    <div class=\"wrap\">\n      <div class=\"panel lm-ctap\">\n        <div class=\"lm-ctab\">\n          <div class=\"lm-ctax\">\n            <p class=\"eyebrow\"><span class=\"lm-dot\"><\/span> Live mocks &#183; from 9 Dec 2026<\/p>\n            <h2 id=\"ctaHead\">Enrol now for the <em>Live Mock Test Series<\/em><\/h2>\n            <p>Full-length mocks on the CRT pattern \u2014 300 marks, two hours, English and Hindi, one-third negative marking \u2014 set as the Commission prints the paper and ranked All-India, from 9 December to the week of the test on 9 January 2027.<\/p>\n            <ul class=\"lm-ctaticks\">\n              <li><i class=\"fa-solid fa-check\"><\/i> All-India rank &amp; percentile after every test<\/li>\n              <li><i class=\"fa-solid fa-check\"><\/i> One price for the whole series &#183; practice mode till the exam<\/li>\n              <li><i class=\"fa-solid fa-check\"><\/i> Enrol any time before the first test opens<\/li>\n            <\/ul>\n          <\/div>\n          <div class=\"lm-ctay\">\n            <span class=\"ts-price\" data-lm-price><b>&#8377;2499<\/b><\/span>\n            <span class=\"lm-ctafor\">whole series &#183; opens 9 Dec<\/span>\n            <button type=\"button\" class=\"lm-enroll big btn-add-cart\" id=\"lm-enroll-top\" data-product-id=\"live-mock-pvp-2027\" data-woo-id=\"0\"\n                    onclick=\"peAddToCart({id:&#x27;live-mock-pvp-2027&#x27;,name:&#x27;Live Mock Test Series \u2014 UPSC Principal &amp; Vice-Principal CRT 2027&#x27;,type:&#x27;test-series&#x27;,price:2499,originalPrice:0,icon:&#x27;fa-stopwatch&#x27;,wooProductId:0},this)\"><i class=\"fa-solid fa-bolt\"><\/i> Enrol now<\/button>\n            <p class=\"lm-enrolby\" data-enrol-by><\/p>\n            <div class=\"lm-ctalinks\">\n              <a href=\"#live-mocks\">See the schedule <span aria-hidden=\"true\">&darr;<\/span><\/a>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n  <section class=\"sec tint\" style=\"padding:26px 0\" aria-label=\"After you buy\">\n    <div class=\"wrap\">\n      <div class=\"ts-notice\">\n        <div class=\"tx\">\n          <h2>After you buy<\/h2>\n          <p>Each test series is saved to your account straight away. Open <strong>My Purchases<\/strong>\n             under your login name in the top menu to attempt it, pause it, or come back to it any time\n             up to your exam.<\/p>\n          <a class=\"wa-btn wa-sm\" href=\"https:\/\/wa.me\/919870176238\" target=\"_blank\" rel=\"noopener noreferrer\">\n            <i class=\"fa-brands fa-whatsapp\"><\/i> Ask us on WhatsApp<\/a>\n        <\/div>\n        <figure class=\"mshot\" aria-label=\"Where My Purchases sits in the top menu\">\n          <div class=\"mshot-bar\">\n            <span class=\"lg\">promotionexams<\/span>\n            <span class=\"nv\">Notes<\/span><span class=\"nv\">Test Series<\/span>\n            <span class=\"usr\"><i class=\"fa-solid fa-user\"><\/i> Your name\n              <i class=\"fa-solid fa-chevron-down\"><\/i><\/span>\n          <\/div>\n          <div class=\"mshot-menu\">\n            <span class=\"mi on\"><i class=\"fa-solid fa-circle-play\"><\/i> My Purchases<\/span>\n            <span class=\"mi\">Log out<\/span>\n          <\/div>\n          <figcaption>Top menu &rarr; your login name &rarr; My Purchases<\/figcaption>\n        <\/figure>\n      <\/div>\n    <\/div>\n  <\/section>\n  \n  <nav class=\"ts-bar\" id=\"shelf\" aria-label=\"Filter the Principal \/ Vice-Principal test series\">\n    <div class=\"ts-bar__inner\">\n      <div class=\"ts-row\" id=\"ts-paperRow\">\n        <span class=\"ts-rowlab\">Head<\/span>\n        <div class=\"ts-chips\" id=\"ts-paperChips\"><button type=\"button\" class=\"chip\" data-paper=\"\" aria-pressed=\"true\">All heads<\/button><button type=\"button\" class=\"chip\" data-paper=\"Free\" aria-pressed=\"false\">Free papers<em>2<\/em><\/button><button type=\"button\" class=\"chip\" data-paper=\"Head 1\" aria-pressed=\"false\">Core Subjects<em>7<\/em><\/button><button type=\"button\" class=\"chip\" data-paper=\"Head 2\" aria-pressed=\"false\">Office Administration<em>9<\/em><\/button><button type=\"button\" class=\"chip\" data-paper=\"Head 3\" aria-pressed=\"false\" data-soonhead>GK & Aptitude<em>soon<\/em><\/button><\/div>\n      <\/div>\n      <div class=\"ts-row\">\n        <span class=\"ts-rowlab\">Format<\/span>\n        <div class=\"ts-chips\" id=\"ts-fmtChips\"><button type=\"button\" class=\"chip\" data-fmt=\"all\" aria-pressed=\"true\">All formats<\/button><button type=\"button\" class=\"chip\" data-fmt=\"pyq\" aria-pressed=\"false\">Previous year questions<\/button><button type=\"button\" class=\"chip\" data-fmt=\"chapter\" aria-pressed=\"false\">Chapter-wise<\/button><button type=\"button\" class=\"chip\" data-fmt=\"combo\" aria-pressed=\"false\">PYQ + Chapter-wise<\/button><span class=\"sep\" aria-hidden=\"true\"><\/span><a class=\"chip jump\" href=\"#bundles\"><i class=\"fa-solid fa-layer-group\"><\/i> Bundles<\/a><a class=\"chip jump live\" href=\"#live-mocks\"><i class=\"fa-solid fa-circle\"><\/i> Live mocks<\/a><\/div>\n      <\/div>\n    <\/div>\n  <\/nav>\n  <main class=\"ts-main\">\n    <div class=\"wrap\">\n      <div class=\"ts-head\" id=\"ts-head\">\n        <div class=\"id\">\n          <div class=\"av\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png\" alt=\"UPSC Principal &amp; Vice-Principal CRT logo\" width=\"40\" height=\"40\" loading=\"lazy\"><\/div>\n          <div><h2>UPSC Principal &amp; Vice-Principal CRT Test Series<\/h2><p class=\"sub\">Principal & Vice-Principal \u2014 Combined Recruitment Test, Directorate of Education, GNCTD<\/p><\/div>\n        <\/div>\n        <div class=\"ts-headact\">\n          <button type=\"button\" class=\"ts-syl\" data-syllabus>View syllabus<\/button>\n          <a class=\"ts-syl\" href=\"https:\/\/promotionexams.com\/?page_id=15296\">Exam guide<\/a>\n        <\/div>\n      <\/div>\n      <p class=\"ts-note\" id=\"ts-note\"><\/p>\n      <div class=\"ts-tools\">\n        <div class=\"ts-active\" id=\"ts-active\"><\/div>\n      <\/div>\n      <div class=\"ts-grid\" id=\"ts-grid\">\n      <h3 class=\"ts-sec\" data-group=\"pvp|Free\"><span>Free<\/span>The 2022 papers, free to attempt<\/h3>\n      <div class=\"ts-sub\" data-group=\"pvp|Free|pyq\" data-fmt=\"pyq\">\n        <div class=\"fh\"><span class=\"fi\"><i class=\"fa-solid fa-gift\"><\/i><\/span>\n          <div><h4>Free Previous Year Papers<\/h4><p>The complete 2022 question papers, free to attempt<\/p><\/div><\/div>\n        <ul class=\"fl\"><li><i class='fa-solid fa-check'><\/i>The full paper as set in 2022, question by question<\/li><li><i class='fa-solid fa-check'><\/i>Attempt it on the real timer and marking scheme<\/li><li><i class='fa-solid fa-check'><\/i>Explanation under every answer<\/li><li><i class='fa-solid fa-check'><\/i>No purchase needed \u2014 a signed-in account is enough<\/li><\/ul>\n      <\/div>\n      <!-- pvp-2022-principal@pvp  |  free  |  woo 16469 -->\n<article class=\"ts-card\" data-id=\"pvp-2022-principal\" data-copy=\"pvp-2022-principal@pvp\" data-type=\"pyq\"\n         data-price=\"0\" data-q=\"0\" data-woo-id=\"16469\" data-free=\"1\"\n         data-title=\"Principal 2022 \u2014 Previous Year Paper\" data-subject=\"UPSC Principal, 2022 \u2014 the complete question paper\"\n         data-exams=\"pvp\" data-paper=\"pvp:Free\" data-group=\"pvp|Free|pyq\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-31-2026-09_32_55-PM.png\" alt=\"Principal 2022 \u2014 Previous Year Paper\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ribbon free\">Free<\/span><span class=\"ts-kind\">Free paper<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">Principal 2022 \u2014 Previous Year Paper<\/h3>\n    <div class=\"ts-spec\"><div><b>120<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">PYQ<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">Complete 2022 paper \u00b7 free to attempt<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>Free<\/b><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pvp-2022-principal\" data-woo-id=\"16469\"\n            onclick=\"peAddToCart({id:&#x27;pvp-2022-principal&#x27;,name:&#x27;Principal 2022 Paper (free)&#x27;,type:&#x27;test-series&#x27;,price:0,originalPrice:0,icon:&#x27;fa-file-lines&#x27;,wooProductId:16469},this)\"><i class=\"fa-solid fa-play\"><\/i> Start free test<\/button>\n  <\/div>\n<\/article>\n      <!-- pvp-2022-vice-principal@pvp  |  free  |  woo 16470 -->\n<article class=\"ts-card\" data-id=\"pvp-2022-vice-principal\" data-copy=\"pvp-2022-vice-principal@pvp\" data-type=\"pyq\"\n         data-price=\"0\" data-q=\"0\" data-woo-id=\"16470\" data-free=\"1\"\n         data-title=\"Vice-Principal 2022 \u2014 Previous Year Paper\" data-subject=\"UPSC Vice-Principal, 2022 \u2014 the complete question paper\"\n         data-exams=\"pvp\" data-paper=\"pvp:Free\" data-group=\"pvp|Free|pyq\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-Sep-1-2026-07_59_04-PM.png\" alt=\"Vice-Principal 2022 \u2014 Previous Year Paper\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ribbon free\">Free<\/span><span class=\"ts-kind\">Free paper<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">Vice-Principal 2022 \u2014 Previous Year Paper<\/h3>\n    <div class=\"ts-spec\"><div><b>120<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">PYQ<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">Complete 2022 paper \u00b7 free to attempt<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>Free<\/b><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pvp-2022-vice-principal\" data-woo-id=\"16470\"\n            onclick=\"peAddToCart({id:&#x27;pvp-2022-vice-principal&#x27;,name:&#x27;Vice-Principal 2022 Paper (free)&#x27;,type:&#x27;test-series&#x27;,price:0,originalPrice:0,icon:&#x27;fa-file-lines&#x27;,wooProductId:16470},this)\"><i class=\"fa-solid fa-play\"><\/i> Start free test<\/button>\n  <\/div>\n<\/article>\n      <h3 class=\"ts-sec\" data-group=\"pvp|Head 1\"><span>Head I<\/span>Educational Policies, Pedagogy, Evaluation &amp; Digital Literacy<\/h3>\n      <!-- pvp-nep@pvp  |  Rs 199 \/ 249  |  woo 16568 -->\n<article class=\"ts-card\" data-id=\"pvp-nep\" data-copy=\"pvp-nep@pvp\" data-type=\"chapter\"\n         data-price=\"199\" data-q=\"0\" data-woo-id=\"16568\"\n         data-title=\"National Education Policy (NEP), 2020\" data-subject=\"National Education Policy (NEP), 2020\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 1\" data-group=\"pvp|Head 1|chapter\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/EB9F77E4-1570-498F-B5EE-16306D043418.png\" alt=\"National Education Policy (NEP) 2020\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">Chapter-wise<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">National Education Policy (NEP) 2020<\/h3>\n    <div class=\"ts-spec\"><div><b>442<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">Chapter-wise<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">All parts of the Policy \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;199<\/b><s>&#8377;249<\/s><i>20% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pvp-nep\" data-woo-id=\"16568\"\n            onclick=\"peAddToCart({id:&#x27;pvp-nep&#x27;,name:&#x27;NEP 2020 Chapter-wise Tests&#x27;,type:&#x27;test-series&#x27;,price:199,originalPrice:249,icon:&#x27;fa-graduation-cap&#x27;,wooProductId:16568},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- pvp-rte@pvp  |  Rs 119 \/ 149  |  woo 16665 -->\n<article class=\"ts-card\" data-id=\"pvp-rte\" data-copy=\"pvp-rte@pvp\" data-type=\"chapter\"\n         data-price=\"119\" data-q=\"0\" data-woo-id=\"16665\"\n         data-title=\"RTE Act, 2009 \u2014 Chapter-wise\" data-subject=\"Right of Children to Free and Compulsory Education (RTE) Act, 2009\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 1\" data-group=\"pvp|Head 1|chapter\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-25-2026-07_58_10-AM.png\" alt=\"Right to Education (RTE) Act,2009 &amp; Rules, 2010\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">Chapter-wise<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">Right to Education (RTE) Act,2009 &amp; Rules, 2010<\/h3>\n    <div class=\"ts-spec\"><div><b>217<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">Chapter-wise<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">All chapters + Schedule \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;119<\/b><s>&#8377;149<\/s><i>20% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pvp-rte\" data-woo-id=\"16665\"\n            onclick=\"peAddToCart({id:&#x27;pvp-rte&#x27;,name:&#x27;RTE Act 2009 Chapter-wise Tests&#x27;,type:&#x27;test-series&#x27;,price:119,originalPrice:149,icon:&#x27;fa-child-reaching&#x27;,wooProductId:16665},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- pvp-schemes@pvp  |  Rs 249 \/ 399  |  woo 16622 -->\n<article class=\"ts-card\" data-id=\"pvp-schemes\" data-copy=\"pvp-schemes@pvp\" data-type=\"chapter\"\n         data-price=\"249\" data-q=\"0\" data-woo-id=\"16622\"\n         data-title=\"Schemes &amp; Policies in School Education \u2014 Chapter-wise\" data-subject=\"Schemes and institutions in school education\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 1\" data-group=\"pvp|Head 1|chapter\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-Sep-3-2026-05_57_54-PM.png\" alt=\"Schemes &amp; Policies in School Education\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">Chapter-wise<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">Schemes &amp; Policies in School Education<\/h3>\n    <div class=\"ts-spec\"><div><b>422<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">Chapter-wise<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">PM POSHAN, PM-SHRI, KGBV, DIKSHA \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;249<\/b><s>&#8377;399<\/s><i>38% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pvp-schemes\" data-woo-id=\"16622\"\n            onclick=\"peAddToCart({id:&#x27;pvp-schemes&#x27;,name:&#x27;Schemes and Policies&#x27;,type:&#x27;test-series&#x27;,price:249,originalPrice:399,icon:&#x27;fa-landmark-flag&#x27;,wooProductId:16622},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- pvp-child@pvp  |  Rs 299 \/ 546  |  woo 17949 -->\n<article class=\"ts-card\" data-id=\"pvp-child\" data-copy=\"pvp-child@pvp\" data-type=\"chapter\"\n         data-price=\"299\" data-q=\"0\" data-woo-id=\"17949\"\n         data-title=\"Child Safety &amp; Protection \u2014 related Acts &amp; Rules (POSCO,CPCR, JJ, RPwD)\" data-subject=\"Child protection, rights and school safety\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 1\" data-group=\"pvp|Head 1|chapter\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/10\/cpcr.avif\" alt=\"Child Safety &amp; Protection \u2014 related Acts &amp; Rules (POSCO, CPCR, JJ, RPwD)\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">Chapter-wise<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">Child Safety &amp; Protection \u2014 related Acts &amp; Rules (POSCO, CPCR, JJ, RPwD)<\/h3>\n    <div class=\"ts-spec\"><div><b>800+<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">Chapter-wise<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">POCSO, CPCR, POSH, JJ Act, RPwD \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;299<\/b><s>&#8377;546<\/s><i>45% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pvp-child\" data-woo-id=\"17949\"\n            onclick=\"peAddToCart({id:&#x27;pvp-child&#x27;,name:&#x27;Child Safety&#x27;,type:&#x27;test-series&#x27;,price:299,originalPrice:546,icon:&#x27;fa-shield-heart&#x27;,wooProductId:17949},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- pvp-measure@pvp  |  Rs 299 \/ 399  |  woo 16705 -->\n<article class=\"ts-card\" data-id=\"pvp-measure\" data-copy=\"pvp-measure@pvp\" data-type=\"chapter\"\n         data-price=\"299\" data-q=\"0\" data-woo-id=\"16705\"\n         data-title=\"Measurement &amp; Evaluation \u2014 Chapter-wise\" data-subject=\"Educational measurement and evaluation\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 1\" data-group=\"pvp|Head 1|chapter\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-25-2026-07_53_30-AM.png\" alt=\"Measurement &amp; Evaluation\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">Chapter-wise<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">Measurement &amp; Evaluation<\/h3>\n    <div class=\"ts-spec\"><div><b>820<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">Chapter-wise<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">Taxonomy, item analysis, validity, statistics \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;299<\/b><s>&#8377;399<\/s><i>25% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pvp-measure\" data-woo-id=\"16705\"\n            onclick=\"peAddToCart({id:&#x27;pvp-measure&#x27;,name:&#x27;Measurement and Evaluation&#x27;,type:&#x27;test-series&#x27;,price:299,originalPrice:399,icon:&#x27;fa-ruler-combined&#x27;,wooProductId:16705},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- pvp-pedagogy@pvp  |  Rs 299 \/ 399  |  woo 17205 -->\n<article class=\"ts-card\" data-id=\"pvp-pedagogy\" data-copy=\"pvp-pedagogy@pvp\" data-type=\"chapter\"\n         data-price=\"299\" data-q=\"0\" data-woo-id=\"17205\"\n         data-title=\"Pedagogy in Education \u2014 Chapter-wise\" data-subject=\"Pedagogy in Education\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 1\" data-group=\"pvp|Head 1|chapter\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/pedagogy.png\" alt=\"Pedagogy in Education\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">Chapter-wise<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">Pedagogy in Education<\/h3>\n    <div class=\"ts-spec\"><div><b>1347<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">Chapter-wise<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">Learning theories, methods, curriculum \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;299<\/b><s>&#8377;399<\/s><i>25% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pvp-pedagogy\" data-woo-id=\"17205\"\n            onclick=\"peAddToCart({id:&#x27;pvp-pedagogy&#x27;,name:&#x27;Pedagogy in Education&#x27;,type:&#x27;test-series&#x27;,price:299,originalPrice:399,icon:&#x27;fa-chalkboard-user&#x27;,wooProductId:17205},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- pvp-digital@pvp  |  Rs 199 \/ 249  |  woo 16524 -->\n<article class=\"ts-card\" data-id=\"pvp-digital\" data-copy=\"pvp-digital@pvp\" data-type=\"chapter\"\n         data-price=\"199\" data-q=\"0\" data-woo-id=\"16524\"\n         data-title=\"Digital Literacy \u2014 Chapter-wise\" data-subject=\"Digital Literacy\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 1\" data-group=\"pvp|Head 1|chapter\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-26-2026-08_20_58-AM.png\" alt=\"Digital Literacy\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">Chapter-wise<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">Digital Literacy<\/h3>\n    <div class=\"ts-spec\"><div><b>700<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">Chapter-wise<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">OS, office apps, cybersecurity, DIKSHA, UDISE+ \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;199<\/b><s>&#8377;249<\/s><i>20% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pvp-digital\" data-woo-id=\"16524\"\n            onclick=\"peAddToCart({id:&#x27;pvp-digital&#x27;,name:&#x27;Digital Literacy&#x27;,type:&#x27;test-series&#x27;,price:199,originalPrice:249,icon:&#x27;fa-laptop-code&#x27;,wooProductId:16524},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <h3 class=\"ts-sec\" data-group=\"pvp|Head 2\"><span>Head II<\/span>Office Procedure, Management &amp; Financial Administration<\/h3>\n      <!-- pyq-mop@pvp  |  Rs 119 \/ 149  |  woo 5753 -->\n<article class=\"ts-card\" data-id=\"pyq-mop\" data-copy=\"pyq-mop@pvp\" data-type=\"pyq\"\n         data-price=\"119\" data-q=\"200\" data-woo-id=\"5753\"\n         data-title=\"Manual of Office Procedure \u2014 PYQs\" data-subject=\"Manual of Office Procedure (CSMOP)\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 2\" data-group=\"pvp|Head 2|pyq\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/mop-e1684145514331.jpeg\" alt=\"Manual of Office Procedure \u2014 PYQs (UPSC SO\/Steno LDCE)\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ribbon bestseller\">Bestseller<\/span><span class=\"ts-kind\">PYQ series<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">Manual of Office Procedure \u2014 PYQs (UPSC SO\/Steno LDCE)<\/h3>\n    <div class=\"ts-spec\"><div><b>258<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">PYQ<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">PYQs 2010 \u2013 2025 \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;119<\/b><s>&#8377;149<\/s><i>20% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pyq-mop\" data-woo-id=\"5753\"\n            onclick=\"peAddToCart({id:&#x27;pyq-mop&#x27;,name:&#x27;Office Procedure PYQs&#x27;,type:&#x27;test-series&#x27;,price:119,originalPrice:149,icon:&#x27;fa-folder-open&#x27;,wooProductId:5753},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- pyq-pension@pvp  |  Rs 99 \/ 129  |  woo 2631 -->\n<article class=\"ts-card\" data-id=\"pyq-pension\" data-copy=\"pyq-pension@pvp\" data-type=\"pyq\"\n         data-price=\"99\" data-q=\"481\" data-woo-id=\"2631\"\n         data-title=\"CCS (Pension) Rules \u2014 PYQs\" data-subject=\"CCS (Pension) Rules\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 2\" data-group=\"pvp|Head 2|pyq\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/pension.png\" alt=\"CCS (Pension) Rules \u2014 PYQs (UPSC SO\/Steno LDCE)\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">PYQ series<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">CCS (Pension) Rules \u2014 PYQs (UPSC SO\/Steno LDCE)<\/h3>\n    <div class=\"ts-spec\"><div><b>186<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">PYQ<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">PYQs 2009 \u2013 2025 \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;99<\/b><s>&#8377;129<\/s><i>23% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pyq-pension\" data-woo-id=\"2631\"\n            onclick=\"peAddToCart({id:&#x27;pyq-pension&#x27;,name:&#x27;CCS Pension Rules PYQs&#x27;,type:&#x27;test-series&#x27;,price:99,originalPrice:129,icon:&#x27;fa-user-clock&#x27;,wooProductId:2631},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- pyq-conduct@pvp  |  Rs 99 \/ 129  |  woo 5750 -->\n<article class=\"ts-card\" data-id=\"pyq-conduct\" data-copy=\"pyq-conduct@pvp\" data-type=\"pyq\"\n         data-price=\"99\" data-q=\"260\" data-woo-id=\"5750\"\n         data-title=\"CCS (Conduct) Rules, 1964 \u2014 PYQs\" data-subject=\"CCS (Conduct) Rules, 1964\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 2\" data-group=\"pvp|Head 2|pyq\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/conduct.jpg\" alt=\"CCS (Conduct) Rules, 1964 \u2014 PYQs (UPSC SO\/Steno LDCE)\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ribbon bestseller\">Bestseller<\/span><span class=\"ts-kind\">PYQ series<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">CCS (Conduct) Rules, 1964 \u2014 PYQs (UPSC SO\/Steno LDCE)<\/h3>\n    <div class=\"ts-spec\"><div><b>121<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">PYQ<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">PYQs 2009 \u2013 2025 \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;99<\/b><s>&#8377;129<\/s><i>23% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pyq-conduct\" data-woo-id=\"5750\"\n            onclick=\"peAddToCart({id:&#x27;pyq-conduct&#x27;,name:&#x27;CCS Conduct Rules PYQs&#x27;,type:&#x27;test-series&#x27;,price:99,originalPrice:129,icon:&#x27;fa-user-tie&#x27;,wooProductId:5750},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- pyq-cca@pvp  |  Rs 99 \/ 129  |  woo 2630 -->\n<article class=\"ts-card\" data-id=\"pyq-cca\" data-copy=\"pyq-cca@pvp\" data-type=\"pyq\"\n         data-price=\"99\" data-q=\"240\" data-woo-id=\"2630\"\n         data-title=\"CCS (CCA) Rules, 1965 \u2014 PYQs\" data-subject=\"CCS (CCA) Rules, 1965\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 2\" data-group=\"pvp|Head 2|pyq\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CCA.png\" alt=\"CCS (CCA) Rules, 1965 \u2014 PYQs (UPSC SO\/Steno LDCE)\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">PYQ series<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">CCS (CCA) Rules, 1965 \u2014 PYQs (UPSC SO\/Steno LDCE)<\/h3>\n    <div class=\"ts-spec\"><div><b>114<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">PYQ<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">PYQs 2009 \u2013 2025 \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;99<\/b><s>&#8377;129<\/s><i>23% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pyq-cca\" data-woo-id=\"2630\"\n            onclick=\"peAddToCart({id:&#x27;pyq-cca&#x27;,name:&#x27;CCS CCA Rules PYQs&#x27;,type:&#x27;test-series&#x27;,price:99,originalPrice:129,icon:&#x27;fa-gavel&#x27;,wooProductId:2630},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- pyq-rti@pvp  |  Rs 99 \/ 129  |  woo 2629 -->\n<article class=\"ts-card\" data-id=\"pyq-rti\" data-copy=\"pyq-rti@pvp\" data-type=\"pyq\"\n         data-price=\"99\" data-q=\"167\" data-woo-id=\"2629\"\n         data-title=\"Right to Information Act \u2014 PYQs\" data-subject=\"Right to Information (RTI) Act, 2005\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 2\" data-group=\"pvp|Head 2|pyq\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/rti.jpeg\" alt=\"Right to Information Act \u2014 PYQs (UPSC SO\/Steno LDCE)\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">PYQ series<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">Right to Information Act \u2014 PYQs (UPSC SO\/Steno LDCE)<\/h3>\n    <div class=\"ts-spec\"><div><b>167<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">PYQ<\/b><span>Format<\/span><\/div><\/div>\n    <p class=\"ts-cdesc\">PYQs 2009 \u2013 2025 \u00b7 rule-cited solutions<\/p>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;99<\/b><s>&#8377;129<\/s><i>23% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"pyq-rti\" data-woo-id=\"2629\"\n            onclick=\"peAddToCart({id:&#x27;pyq-rti&#x27;,name:&#x27;RTI Act PYQs&#x27;,type:&#x27;test-series&#x27;,price:99,originalPrice:129,icon:&#x27;fa-file-lines&#x27;,wooProductId:2629},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- combo-rti@pvp  |  Rs 149 \/ 199  |  woo 16040 -->\n<article class=\"ts-card\" data-id=\"combo-rti\" data-copy=\"combo-rti@pvp\" data-type=\"combo\"\n         data-price=\"149\" data-q=\"367\" data-woo-id=\"16040\"\n         data-title=\"RTI Act, 2005 \u2014 Complete Pack\" data-subject=\"Right to Information (RTI) Act, 2005\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 2\" data-group=\"pvp|Head 2|combo\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/rti.jpeg\" alt=\"RTI Act, 2005 \u2014 Complete Pack\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ribbon value\">Best value<\/span><span class=\"ts-kind\">PYQ + Chapter-wise<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">RTI Act, 2005 \u2014 Complete Pack<\/h3>\n    <div class=\"ts-spec\"><div><b>805<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">PYQ + Chapter<\/b><span>Format<\/span><\/div><\/div>\n    <ul class=\"ts-inside\"><li>167 previous year questions (2009\u20132025)<\/li><li>638 chapter-wise questions<\/li><li>Rule-cited explanation on every question<\/li><\/ul>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;149<\/b><s>&#8377;199<\/s><i>25% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"combo-rti\" data-woo-id=\"16040\"\n            onclick=\"peAddToCart({id:&#x27;combo-rti&#x27;,name:&#x27;RTI Act Complete Pack&#x27;,type:&#x27;test-series&#x27;,price:149,originalPrice:199,icon:&#x27;fa-file-lines&#x27;,wooProductId:16040},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- cw-gfr@pvp  |  Rs 149 \/ 199  |  woo 16094 -->\n<article class=\"ts-card\" data-id=\"cw-gfr\" data-copy=\"cw-gfr@pvp\" data-type=\"combo\"\n         data-price=\"149\" data-q=\"400\" data-woo-id=\"16094\"\n         data-title=\"General Financial Rules, 2017 \u2014 Complete Pack\" data-subject=\"General Financial Rules (GFR), 2017\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 2\" data-group=\"pvp|Head 2|chapter\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/GFR.jpg\" alt=\"General Financial Rules, 2017 \u2014 Complete Pack\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ribbon bestseller\">Bestseller<\/span><span class=\"ts-kind\">PYQ + Chapter-wise<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">General Financial Rules, 2017 \u2014 Complete Pack<\/h3>\n    <div class=\"ts-spec\"><div><b>675<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">PYQ + Chapter<\/b><span>Format<\/span><\/div><\/div>\n    <ul class=\"ts-inside\"><li>181 previous year questions (2009\u20132025)<\/li><li>494 chapter-wise questions<\/li><li>Rule-cited explanation on every question<\/li><\/ul>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;149<\/b><s>&#8377;199<\/s><i>25% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"cw-gfr\" data-woo-id=\"16094\"\n            onclick=\"peAddToCart({id:&#x27;cw-gfr&#x27;,name:&#x27;GFR 2017 Chapter-wise Tests&#x27;,type:&#x27;test-series&#x27;,price:149,originalPrice:199,icon:&#x27;fa-coins&#x27;,wooProductId:16094},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- cw-pension@pvp  |  Rs 199 \/ 249  |  woo 16191 -->\n<article class=\"ts-card\" data-id=\"cw-pension\" data-copy=\"cw-pension@pvp\" data-type=\"combo\"\n         data-price=\"199\" data-q=\"350\" data-woo-id=\"16191\"\n         data-title=\"CCS (Pension) Rules, 2021 \u2014 Complete Pack\" data-subject=\"CCS (Pension) Rules\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 2\" data-group=\"pvp|Head 2|chapter\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/pension.png\" alt=\"CCS (Pension) Rules, 2021 \u2014 Complete Pack\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">PYQ + Chapter-wise<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">CCS (Pension) Rules, 2021 \u2014 Complete Pack<\/h3>\n    <div class=\"ts-spec\"><div><b>667<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">PYQ + Chapter<\/b><span>Format<\/span><\/div><\/div>\n    <ul class=\"ts-inside\"><li>186 previous year questions (2009\u20132025)<\/li><li>481 chapter-wise questions<\/li><li>Rule-cited explanation on every question<\/li><\/ul>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;199<\/b><s>&#8377;249<\/s><i>20% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"cw-pension\" data-woo-id=\"16191\"\n            onclick=\"peAddToCart({id:&#x27;cw-pension&#x27;,name:&#x27;CCS Pension Rules Chapter-wise Tests&#x27;,type:&#x27;test-series&#x27;,price:199,originalPrice:249,icon:&#x27;fa-user-clock&#x27;,wooProductId:16191},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <!-- combo-leave@pvp  |  Rs 149 \/ 199  |  woo 15560 -->\n<article class=\"ts-card\" data-id=\"combo-leave\" data-copy=\"combo-leave@pvp\" data-type=\"combo\"\n         data-price=\"149\" data-q=\"0\" data-woo-id=\"15560\"\n         data-title=\"CCS (Leave\/LTC) Rules \u2014 Complete Pack\" data-subject=\"CCS (Leave\/LTC) Rules\"\n         data-exams=\"pvp\" data-paper=\"pvp:Head 2\" data-group=\"pvp|Head 2|combo\">\n  <div class=\"ts-thumb\">\n    <img loading=\"lazy\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-21-2026-04_32_25-PM.png\" alt=\"CCS (Leave\/LTC) Rules \u2014 Complete Pack\" width=\"400\" height=\"250\" loading=\"lazy\" decoding=\"async\">\n    <span class=\"ts-kind\">PYQ + Chapter-wise<\/span>\n  <\/div>\n  <div class=\"ts-cbody\">\n    <h3 class=\"ts-ctitle\">CCS (Leave\/LTC) Rules \u2014 Complete Pack<\/h3>\n    <div class=\"ts-spec\"><div><b>642<\/b><span>Questions<\/span><\/div><div><b class=\"fmt\">PYQ + Chapter<\/b><span>Format<\/span><\/div><\/div>\n    <ul class=\"ts-inside\"><li>112 previous year questions (2009\u20132025)<\/li><li>530 chapter-wise questions on every provision<\/li><li>Rule-cited explanation on every question<\/li><\/ul>\n  <\/div>\n  <div class=\"ts-cfoot\">\n    <span class=\"ts-price\"><b>&#8377;149<\/b><s>&#8377;199<\/s><i>25% off<\/i><\/span>\n    <button type=\"button\" class=\"ts-buy btn-add-cart\" data-product-id=\"combo-leave\" data-woo-id=\"15560\"\n            onclick=\"peAddToCart({id:&#x27;combo-leave&#x27;,name:&#x27;Leave Rules Complete Pack&#x27;,type:&#x27;test-series&#x27;,price:149,originalPrice:199,icon:&#x27;fa-plane-departure&#x27;,wooProductId:15560},this)\"><i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart<\/button>\n  <\/div>\n<\/article>\n      <h3 class=\"ts-sec\" data-group=\"pvp|Head 3\"><span>Head III<\/span>General Knowledge, Language, Reasoning &amp; Aptitude<\/h3>\n      <div class=\"ts-headsoon\" data-group=\"pvp|Head 3\">\n        <b>Launching soon<\/b>\n        <span>General knowledge, language, reasoning and aptitude series are being prepared.<\/span>\n        <button type=\"button\">Notify me at launch<\/button>\n      <\/div>\n      <\/div>\n      <div class=\"ts-empty\" id=\"ts-empty\" hidden>\n        <h3>Nothing here for that combination<\/h3>\n        <p>Try another format or head, or search the short name &mdash; &ldquo;GFR&rdquo;, &ldquo;RTI&rdquo;, &ldquo;Pension&rdquo;.<\/p>\n        <button type=\"button\" id=\"ts-reset\">Clear all filters<\/button>\n      <\/div>\n    <\/div>\n  <\/main>\n  <section class=\"sec gold\" id=\"bundles\" aria-labelledby=\"bunHead\">\n    <div class=\"wrap\">\n      <div class=\"sechead mid\">\n        <p class=\"eyebrow\">Principal \/ Vice-Principal bundles<\/p>\n        <h2 id=\"bunHead\">Buy the whole head, <em>not one subject at a time<\/em><\/h2>\n        <p>A bundle is every series for a head in a single purchase &mdash; same banks, same rule-cited solutions,\n           same validity as buying them one by one, for up to 24% less.\n           Each card shows what the same series cost bought separately.<\/p>\n      <\/div>\n      <div class=\"bgrid\">\n  <!-- bundle-pvp-p2  |  Rs 619 \/ 863  |  woo none yet - create it in WooCommerce, then set woo in PE_BUNDLES -->\n  <article class=\"bcard feature is-soon\" id=\"b-bundle-pvp-p2\" data-bundle=\"bundle-pvp-p2\" data-paper=\"Head 2\" data-fmt=\"PYQ + Chapter\">\n    <div class=\"btop\">\n      <span class=\"btag\">6 series &#183; PYQ + Chapter<\/span>\n      <span class=\"bsave\">Save &#8377;195 &#183; 24%<\/span>\n    <\/div>\n    <h4>Service &amp; Financial Rules Pack<\/h4>\n    <p>Head II ka poora rule-based portion \u2014 Conduct, CCA, Pension, GFR, CSMOP aur RTI.<\/p>\n    <ul class=\"blist\" data-auto><li>CCS (Conduct) Rules, 1964 \u2014 PYQs (UPSC SO\/Steno LDCE)<\/li><li>CCS (CCA) Rules, 1965 \u2014 PYQs (UPSC SO\/Steno LDCE)<\/li><li>CCS (Pension) Rules, 2021 \u2014 Complete Pack<\/li><li>General Financial Rules, 2017 \u2014 Complete Pack<\/li><li>Manual of Office Procedure \u2014 PYQs (UPSC SO\/Steno LDCE)<\/li><li>RTI Act, 2005 \u2014 Complete Pack<\/li><\/ul>\n    <div class=\"bcmp\"><\/div>\n    <div class=\"bfoot\">\n      <span class=\"bprice\"><b>&#8377;619<\/b><s>&#8377;863<\/s><\/span>\n      <button type=\"button\" class=\"bbtn btn-add-cart\" data-product-id=\"bundle-pvp-p2\" data-woo-id=\"0\"\n              onclick=\"peAddToCart({id:&#x27;bundle-pvp-p2&#x27;,name:&#x27;Service &amp; Financial Rules Pack \u2014 Principal \/ Vice-Principal&#x27;,type:&#x27;bundle&#x27;,price:619,originalPrice:863,icon:&#x27;fa-layer-group&#x27;,wooProductId:0},this)\"><i class=\"fa-solid fa-bell\"><\/i> Notify me<\/button>\n    <\/div>\n  <\/article>\n      <\/div>\n      <p class=\"bhint\"><i class=\"fa-solid fa-circle-info\"><\/i> Added a single series that sits inside a bundle? The page offers the bundle before checkout and swaps out anything already in your cart.<\/p>\n    <\/div>\n  <\/section>\n  <section class=\"sec lm\" id=\"live-mocks\" aria-labelledby=\"lmHead\">\n    <div class=\"wrap\">\n      <div class=\"sechead mid\">\n        <p class=\"eyebrow\"><span class=\"lm-dot\"><\/span> Live mock test series<\/p>\n        <h2 id=\"lmHead\">Sit the paper <em>before the paper<\/em><\/h2>\n        <p>Scheduled, timed mocks on the Principal \/ Vice-Principal pattern &mdash; everyone attempts in the same window, so the rank you\n           get is against the people you will actually be competing with. Solutions open when the window closes.<\/p>\n      <\/div>\n      <div class=\"lm-syl one\" id=\"lm-syl\">\n        <div class=\"lm-sylcard plan soon\">\n          <span class=\"pl\"><i class=\"fa-solid fa-map\"><\/i><\/span>\n          <h3>Full plan &mdash; <em>will be updated soon<\/em><\/h3>\n          <p>Head-wise weightage, the test-by-test schedule from 9 Dec and the syllabus of every mock are being set against the revised test date, Sat, 9 Jan 2027. They will appear here as soon as they are final.<\/p>\n          <ul class=\"lm-plist\">\n            <li><i class=\"fa-solid fa-check\"><\/i> Series opens Wed, 9 Dec 2026<\/li>\n            <li><i class=\"fa-solid fa-check\"><\/i> Full-length mocks on the CRT pattern &#183; 300 marks &#183; 2 hours<\/li>\n            <li><i class=\"fa-solid fa-check\"><\/i> Enrolled candidates receive the plan first<\/li>\n          <\/ul>\n        <\/div>\n      <\/div>\n      <div class=\"lm-grid\">\n        <aside class=\"lm-card\">\n          <span class=\"lm-badge\"><span class=\"lm-dot\"><\/span> Live &#183; from 9 Dec<\/span>\n          <h3>Live Mock Test Series \u2014 UPSC Principal &amp; Vice-Principal CRT 2027<\/h3>\n          <p>Full-length mocks on the CRT pattern \u2014 300 marks, two hours, English and Hindi, one-third negative marking \u2014 set as the Commission prints the paper and ranked All-India, from 9 December to the week of the test on 9 January 2027.<\/p>\n          <div class=\"lm-next\" data-lm-next>\n            <span class=\"k\"><i class=\"fa-solid fa-stopwatch\"><\/i> <span class=\"lmn-k\">Series opens<\/span><\/span>\n            <span class=\"lmn-title\">Wed, 9 Dec 2026<\/span>\n            <span class=\"lmn-when\"><\/span>\n            <div class=\"lmn-cd\" aria-live=\"off\"><\/div>\n          <\/div>\n          <ul class=\"lm-feat\">\n            <li><i class=\"fa-solid fa-check\"><\/i> CRT pattern: 300 marks \u00b7 2 hours \u00b7 \u2153 negative<\/li>\n            <li><i class=\"fa-solid fa-check\"><\/i> English \/ \u0939\u093f\u0928\u094d\u0926\u0940 switch<\/li>\n            <li><i class=\"fa-solid fa-check\"><\/i> All-India rank &amp; percentile<\/li>\n            <li><i class=\"fa-solid fa-check\"><\/i> Commission-style booklet + OMR sheet<\/li>\n            <li><i class=\"fa-solid fa-check\"><\/i> Rule-cited answer key after the window<\/li>\n            <li><i class=\"fa-solid fa-check\"><\/i> Head-wise marks and pacing<\/li>\n          <\/ul>\n          <div class=\"lm-buy\">\n            <span class=\"ts-price\" id=\"lm-price\" data-lm-price><b>&#8377;2499<\/b><\/span>\n            <button type=\"button\" class=\"lm-enroll btn-add-cart\" id=\"lm-enroll\" data-product-id=\"live-mock-pvp-2027\" data-woo-id=\"0\"\n                    onclick=\"peAddToCart({id:&#x27;live-mock-pvp-2027&#x27;,name:&#x27;Live Mock Test Series \u2014 UPSC Principal &amp; Vice-Principal CRT 2027&#x27;,type:&#x27;test-series&#x27;,price:2499,originalPrice:0,icon:&#x27;fa-stopwatch&#x27;,wooProductId:0},this)\"><i class=\"fa-solid fa-bolt\"><\/i> Enrol now<\/button>\n          <\/div>\n          <p class=\"lm-enrolby\" data-enrol-by><\/p>\n          <p class=\"lm-fine\">All times IST. If the exam date moves, the schedule moves with it &mdash; enrolled candidates hear first.<\/p>\n        <\/aside>\n        <div class=\"lm-sched\">\n          <div class=\"lm-schedhead\"><h3>Schedule<\/h3><div class=\"lm-pf ts-chips\" id=\"lm-pf\" aria-label=\"Filter by paper\"><\/div><span id=\"lm-count\">To be published<\/span><\/div>\n          <div class=\"lm-soon\">\n            <div class=\"lm-date\"><b>9<\/b><span>Dec<\/span><em>Wed<\/em><\/div>\n            <div>\n              <span class=\"lm-n\">Series opens <em>Plan coming soon<\/em><\/span>\n              <h4>The test-by-test plan will be updated here soon<\/h4>\n              <p>The live mock series starts on <strong>Wed, 9 Dec 2026<\/strong> and runs to the week of the test on Sat, 9 Jan 2027. The schedule, sitting times and the syllabus of every mock are being finalised against the revised date and will be published on this page. Enrolled candidates get the plan first, by email and WhatsApp.<\/p>\n              <a class=\"lm-demo-lnk\" href=\"https:\/\/wa.me\/919870176238\" target=\"_blank\" rel=\"noopener noreferrer\"><i class=\"fa-brands fa-whatsapp\"><\/i> Ask about the plan<\/a>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"lm-how\">\n        <div><b>01 &#183; Enrol<\/b><h4>One purchase, every mock<\/h4><p>Every mock in the schedule unlocks in My Purchases the moment it starts.<\/p><\/div>\n        <div><b>02 &#183; Attempt live<\/b><h4>Same window as everyone<\/h4><p>Attempt once inside the 24-hour ranked window, on the real timer.<\/p><\/div>\n        <div><b>03 &#183; Rank<\/b><h4>See where you stand<\/h4><p>Score, rank and percentile land when the window closes, with subject-wise splits.<\/p><\/div>\n        <div><b>04 &#183; Revise<\/b><h4>Fix what cost you marks<\/h4><p>Read the rule behind every answer and re-attempt in practice mode.<\/p><\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n  <section class=\"sec\" aria-labelledby=\"whyHead\">\n    <div class=\"wrap\">\n      <div class=\"panel\">\n        <div class=\"why\">\n          <div class=\"why-copy\">\n            <p class=\"eyebrow\">Every answer cites its rule<\/p>\n            <h2 id=\"whyHead\">Know exactly which provisions you get wrong\n              <em>before the exam tells you.<\/em><\/h2>\n            <p>The examiner asks for the exact sub-rule, the exact limit, the exact time-line &mdash;\n               and reading a manual end to end will not tell you which of those keeps coming back.\n               Attempting will. Every series is built from the bare rule and the real question papers,\n               and every attempt returns a chapter-by-chapter report naming the provisions you are\n               still losing marks on.<\/p>\n            <div class=\"why-btns\">\n              <a class=\"b1\" href=\"#shelf\">Browse the test series<\/a>\n              <a class=\"b2\" href=\"#bundles\">See bundles<\/a>\n            <\/div>\n          <\/div>\n          <div class=\"why-stats\">\n            <div class=\"why-stat\"><span>Rule-cited questions<\/span><b>8,500+<\/b><\/div>\n            <div class=\"why-stat\"><span>Previous year papers<\/span><b>2009 &ndash; 2025<\/b><\/div>\n            <div class=\"why-stat\"><span>After every attempt<\/span><b>Weak-chapter report<\/b><\/div>\n          <\/div>\n          <div class=\"why-visual\">\n  <div class=\"shot-deck\" id=\"shotDeck\" aria-roledescription=\"carousel\" aria-label=\"Screens from a test series\">\n    <div class=\"shot-track\" id=\"shotTrack\">\n      <div class=\"shot-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"Practice tab\">\n        <div class=\"ui-shot\">\n          <div class=\"ui-bar\"><i><\/i><i><\/i><i><\/i><span>promotionexams.com &mdash; GFR 2017 &#183; Test Series<\/span><\/div>\n          <div class=\"ui-head\">\n            <div class=\"ui-eyebrow\">CSS ADDA &#183; PromotionExams.com<\/div>\n            <h5>General Financial Rules, 2017<\/h5>\n            <div class=\"ui-tabs\"><span class=\"ui-tab on\">Practice<\/span><span class=\"ui-tab\">My Performance<\/span><span class=\"ui-tab\">Exam Analytics<\/span><\/div>\n          <\/div>\n          <div class=\"ui-rule\"><\/div>\n          <div class=\"ui-body\">\n            <div class=\"ui-meta\">\n              <span class=\"ui-badge pyq\">PYQ &#183; 2019-20<\/span>\n              <span class=\"ui-badge ch\">Ch 10: Externally Aided Projects<\/span>\n            <\/div>\n            <p class=\"ui-stem\"><em>Q.<\/em>Rule 265 provides that external aid shall flow from the Funding Agency in foreign currency or Indian rupees and shall be received by the:<\/p>\n            <div class=\"ui-opt\"><span class=\"k\">(a)<\/span><span>Reserve Bank of India, Nagpur<\/span><\/div>\n            <div class=\"ui-opt\"><span class=\"k\">(b)<\/span><span>State Bank of India Headquarters, New Delhi<\/span><\/div>\n            <div class=\"ui-opt right\"><span class=\"k\">(c)<\/span><span>Reserve Bank of India, Mumbai<\/span><span class=\"m\">Correct<\/span><\/div>\n            <div class=\"ui-expl\">\n              <div class=\"h\">Source &amp; reasoning<\/div>\n              <b>Rule 265 &mdash; Currency of external aid.<\/b> Received by the RBI, Mumbai, which remits the rupee equivalent to the Controller, Aid Accounts &amp; Audit at RBI, New Delhi.\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"shot-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"My Performance tab\">\n        <div class=\"ui-shot\">\n          <div class=\"ui-bar\"><i><\/i><i><\/i><i><\/i><span>promotionexams.com &mdash; GFR 2017 &#183; Test Series<\/span><\/div>\n          <div class=\"ui-head\">\n            <div class=\"ui-eyebrow\">CSS ADDA &#183; PromotionExams.com<\/div>\n            <h5>General Financial Rules, 2017<\/h5>\n            <div class=\"ui-tabs\"><span class=\"ui-tab\">Practice<\/span><span class=\"ui-tab on\">My Performance<\/span><span class=\"ui-tab\">Exam Analytics<\/span><\/div>\n          <\/div>\n          <div class=\"ui-rule\"><\/div>\n          <div class=\"ui-body\">\n            <div class=\"ui-ready\">\n              <div class=\"ui-ring\">\n                <svg viewBox=\"0 0 74 74\" aria-hidden=\"true\">\n                  <circle class=\"bg\" cx=\"37\" cy=\"37\" r=\"33\"><\/circle>\n                  <circle class=\"fg\" cx=\"37\" cy=\"37\" r=\"33\" stroke-dasharray=\"141 207.3\"><\/circle>\n                <\/svg>\n                <span>68<small>Readiness<\/small><\/span>\n              <\/div>\n              <p><b>Strong base.<\/b> Close the gaps in the biggest chapters below to cross 80.\n                 <em>Readiness = &Sigma; (exam weight &times; mastery)<\/em><\/p>\n            <\/div>\n            <div class=\"ui-sec\">Where your marks are leaking <b>&mdash; 24 per 100<\/b><\/div>\n            <div class=\"ui-leak\"><span class=\"n\">Ch 6: Procurement of Goods<\/span>\n              <span class=\"t\"><i style=\"width:100%;background:#C0392B\"><\/i><\/span>\n              <span class=\"v\" style=\"color:#C0392B\">9.4<\/span><\/div>\n            <div class=\"ui-leak\"><span class=\"n\">Ch 7: Inventory Management<\/span>\n              <span class=\"t\"><i style=\"width:65%;background:#E0A82E\"><\/i><\/span>\n              <span class=\"v\" style=\"color:#8A6508\">6.1<\/span><\/div>\n            <div class=\"ui-leak\"><span class=\"n\">Ch 3: Budget Formulation<\/span>\n              <span class=\"t\"><i style=\"width:44%;background:#1E3A8A\"><\/i><\/span>\n              <span class=\"v\" style=\"color:#1E3A8A\">4.2<\/span><\/div>\n            <div class=\"ui-leak\" style=\"margin-bottom:0\"><span class=\"n\">Ch 8: Contract Management<\/span>\n              <span class=\"t\"><i style=\"width:31%;background:#1E3A8A\"><\/i><\/span>\n              <span class=\"v\" style=\"color:#1E3A8A\">3.0<\/span><\/div>\n            <div class=\"ui-sec\">Revision queue <b>&mdash; fading fastest<\/b><\/div>\n            <div class=\"ui-rev\"><span class=\"n\">Rule 218 &mdash; residual value above &#8377;4 lakh<\/span><span class=\"d\">41% recall<\/span><\/div>\n            <div class=\"ui-rev\"><span class=\"n\">Rule 172 &mdash; advance payment ceilings<\/span><span class=\"d\">58% recall<\/span><\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"shot-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"Exam Analytics tab\">\n        <div class=\"ui-shot\">\n          <div class=\"ui-bar\"><i><\/i><i><\/i><i><\/i><span>promotionexams.com &mdash; GFR 2017 &#183; Test Series<\/span><\/div>\n          <div class=\"ui-head\">\n            <div class=\"ui-eyebrow\">CSS ADDA &#183; PromotionExams.com<\/div>\n            <h5>General Financial Rules, 2017<\/h5>\n            <div class=\"ui-tabs\"><span class=\"ui-tab\">Practice<\/span><span class=\"ui-tab\">My Performance<\/span><span class=\"ui-tab on\">Exam Analytics<\/span><\/div>\n          <\/div>\n          <div class=\"ui-rule\"><\/div>\n          <div class=\"ui-body\">\n            <div class=\"ui-sec\">Chapter &times; exam year <b>&mdash; counted, never declared<\/b><\/div>\n            <table class=\"ui-hm\">\n              <tr><th class=\"l\">Chapter<\/th><th>&rsquo;19<\/th><th>&rsquo;21<\/th><th>&rsquo;23<\/th><th>&rsquo;24<\/th><th>&rsquo;25<\/th><th class=\"tot\">All<\/th><\/tr>\n              <tr><td class=\"l\">Ch 6: Procurement<\/td><td style=\"background:#D99B12;color:#3A2A02\">6<\/td><td style=\"background:#E8B44A;color:#3A2A02\">5<\/td><td style=\"background:#E8B44A;color:#3A2A02\">5<\/td><td style=\"background:#F2D28C\">4<\/td><td style=\"background:#F2D28C\">4<\/td><td class=\"tot\">24<\/td><\/tr>\n              <tr><td class=\"l\">Ch 7: Inventory<\/td><td style=\"background:#F2D28C\">4<\/td><td style=\"background:#F9E9C4\">3<\/td><td style=\"background:#F2D28C\">4<\/td><td style=\"background:#FDF6E6\">1<\/td><td style=\"background:#F9E9C4\">2<\/td><td class=\"tot\">14<\/td><\/tr>\n              <tr><td class=\"l\">Ch 3: Budget<\/td><td style=\"background:#F9E9C4\">3<\/td><td style=\"background:#F9E9C4\">2<\/td><td style=\"background:#F9E9C4\">3<\/td><td style=\"background:#F9E9C4\">2<\/td><td style=\"background:#F9E9C4\">2<\/td><td class=\"tot\">12<\/td><\/tr>\n              <tr><td class=\"l\">Ch 8: Contract<\/td><td style=\"background:#F9E9C4\">2<\/td><td style=\"background:#F9E9C4\">2<\/td><td style=\"background:#FDF6E6\">1<\/td><td style=\"background:#F9E9C4\">2<\/td><td style=\"background:#FDF6E6\">1<\/td><td class=\"tot\">8<\/td><\/tr>\n              <tr><td class=\"l\">Ch 5: Works<\/td><td style=\"background:#FDF6E6\">1<\/td><td style=\"background:#FDF6E6\">1<\/td><td style=\"background:#F9E9C4\">2<\/td><td style=\"background:#F9E9C4\">2<\/td><td style=\"background:#FDF6E6\">1<\/td><td class=\"tot\">7<\/td><\/tr>\n              <tr><td class=\"l\">Ch 4: Govt Accts<\/td><td style=\"background:#F9E9C4\">2<\/td><td style=\"background:#FDF6E6\">1<\/td><td style=\"background:#FDF6E6\">1<\/td><td style=\"background:#FDF6E6\">1<\/td><td style=\"background:#F9E9C4\">2<\/td><td class=\"tot\">7<\/td><\/tr>\n              <tr><td class=\"l\">Ch 9: Grants<\/td><td style=\"background:#FDF6E6\">1<\/td><td style=\"background:#F9E9C4\">2<\/td><td style=\"background:#F9E9C4\">2<\/td><td style=\"background:#FDF6E6\">1<\/td><td style=\"background:#FDF6E6\">1<\/td><td class=\"tot\">7<\/td><\/tr>\n              <tr><td class=\"l\">Ch 11: Guarantees<\/td><td style=\"background:#FDF6E6\">1<\/td><td style=\"background:#FDF6E6\">1<\/td><td class=\"nil\">&#183;<\/td><td style=\"background:#FDF6E6\">1<\/td><td style=\"background:#FDF6E6\">1<\/td><td class=\"tot\">4<\/td><\/tr>\n            <\/table>\n            <div class=\"ui-legend\"><span>Low<\/span><i style=\"background:#FDF6E6\"><\/i><i style=\"background:#F9E9C4\"><\/i><i style=\"background:#F2D28C\"><\/i><i style=\"background:#E8B44A\"><\/i><i style=\"background:#D99B12\"><\/i><span>High<\/span><\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n  <div class=\"shot-dots\" id=\"shotDots\">\n    <button type=\"button\" class=\"shot-dot on\" data-i=\"0\" aria-label=\"Show Practice\"><i><\/i><\/button>\n    <button type=\"button\" class=\"shot-dot\" data-i=\"1\" aria-label=\"Show My Performance\"><i><\/i><\/button>\n    <button type=\"button\" class=\"shot-dot\" data-i=\"2\" aria-label=\"Show Exam Analytics\"><i><\/i><\/button>\n  <\/div>\n  <p class=\"shot-cap\" id=\"shotCap\">Practice &mdash; every answer cites the governing rule<\/p><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n  <section class=\"sec\" aria-label=\"How the test series works\">\n    <div class=\"wrap\">\n      <div class=\"sechead mid\">\n        <p class=\"eyebrow\">How it works<\/p>\n        <h2>From buying a series to <em>walking into the hall<\/em><\/h2>\n        <p>Four steps, in the order you will actually use them.<\/p>\n      <\/div>\n      <div class=\"steps\"><div class=\"step\"><span class=\"n\">Step 01<\/span><h3>Pick your paper and format<\/h3><p>Choose the paper, then the format: previous year questions to learn the pattern, chapter-wise to close gaps, or the combined series for both.<\/p><\/div><div class=\"step\"><span class=\"n\">Step 02<\/span><h3>Pay once, valid till your exam<\/h3><p>Checkout is SSL-encrypted. The series lands in <strong>My Purchases<\/strong> immediately and stays open right up to your exam \u2014 unlimited attempts, no per-attempt charge.<\/p><\/div><div class=\"step\"><span class=\"n\">Step 03<\/span><h3>Attempt and read the reasoning<\/h3><p>Each answer cites the rule, section or para that decides it, and says why the other three options fail. That is what makes a rule stick.<\/p><\/div><div class=\"step\"><span class=\"n\">Step 04<\/span><h3>Re-attempt what you got wrong<\/h3><p>Analytics show accuracy and time per chapter. Revise the weak chapter, re-attempt it, and check whether the number actually moved.<\/p><\/div><\/div>\n    <\/div>\n  <\/section>\n  <section class=\"sec tint\" aria-label=\"Why officers use PromotionExams\">\n    <div class=\"wrap\"><div class=\"props\"><div class=\"prop\"><i class=\"fa-solid fa-user-tie\"><\/i><h3>Written from the updated rule<\/h3><p>Every bank is drafted against the notified text as it stands today \u2014 not from a summary, a guide or a superseded edition.<\/p><\/div><div class=\"prop\"><i class=\"fa-solid fa-scale-balanced\"><\/i><h3>Rule cited, every time<\/h3><p>Explanations quote the exact rule, section or para \u2014 not a vague summary.<\/p><\/div><div class=\"prop\"><i class=\"fa-solid fa-arrows-rotate\"><\/i><h3>Rewritten when rules change<\/h3><p>Pension Rules 2021, DFPR 2024, R&amp;P Rules 2022 \u2014 amended banks, not patched ones.<\/p><\/div><div class=\"prop\"><i class=\"fa-solid fa-shield-halved\"><\/i><h3>Secure checkout<\/h3><p>SSL-encrypted payments through trusted Indian payment gateways.<\/p><\/div><\/div><\/div>\n  <\/section>\n  \n  <section class=\"sec\" id=\"faq\">\n    <div class=\"wrap\">\n      <div class=\"about\">\n        <div>\n          <div class=\"sechead\" style=\"margin-bottom:18px\">\n            <p class=\"eyebrow\">About the Principal \/ Vice-Principal test series<\/p>\n            <h2>Built only for the <em>UPSC Principal &amp; Vice-Principal CRT<\/em><\/h2>\n          <\/div>\n          <p>The <strong>UPSC Principal &amp; Vice-Principal Combined Recruitment Test<\/strong> for the Directorate of Education, GNCTD is a single objective paper of 300 marks in two hours, in English and Hindi, with one-third negative marking; the test and the interview are weighted 75:25.<\/p>\n          <p>UPSC prints only the notified heads, so this shelf groups them into three: <strong>core education subjects<\/strong> (NEP 2020, RTE Act, schemes, measurement &amp; evaluation, pedagogy, digital literacy), <strong>office administration<\/strong> (CCS Conduct, CCA, Pension, GFR, CSMOP, RTI Act, Leave\/LTC) and <strong>general knowledge, language and aptitude<\/strong>, which is being written now. The 2022 Principal and Vice-Principal papers are free to attempt.<\/p>\n          <p>Where this page and Special Advt. No. 51\/2026 differ, the notification governs. Free notes on the office administration rules are in the <a href=\"https:\/\/promotionexams.com\/?page_id=14220\">notes library<\/a>.<\/p>\n        <\/div>\n        <div class=\"av-wrap\">\n          <div class=\"av-frame\">\n            <img loading=\"lazy\" src=\"https:\/\/images.unsplash.com\/photo-1524995997946-a1c2e315a42f?auto=format&amp;fit=crop&amp;w=760&amp;q=80\"\n                 alt=\"Officer preparing for the UPSC Principal &amp; Vice-Principal CRT\" width=\"760\" height=\"620\" loading=\"lazy\" decoding=\"async\">\n            <span class=\"av-badge\"><i class=\"fa-solid fa-book-open\"><\/i> Written from the updated rule\n              <span><span data-count=\"series\">0<\/span> series<\/span><\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"sechead\" style=\"margin-top:52px\">\n        <p class=\"eyebrow\">Head by head<\/p>\n        <h2>What the Principal \/ Vice-Principal test series covers<\/h2>\n      <\/div>\n      <div class=\"seo-cards\">\n      <div class=\"seo-card\">\n        <h3>Core Subjects &mdash; Educational Policies, Pedagogy, Evaluation & Digital Literacy<\/h3>\n        <p>Educational policies & Educational measurement and evaluation &#183; Pedagogy in Education (new in 2026) &#183; Digital Literacy (new in 2026)<\/p>\n        <button type=\"button\" class=\"go\" data-gopaper=\"Head 1\">Browse <span data-paper-count=\"Head 1\">series<\/span> &rarr;<\/button>\n      <\/div>\n      <div class=\"seo-card\">\n        <h3>Office Administration &mdash; Office Procedure, Management & Financial Administration<\/h3>\n        <p>Management and Financial administration &#183; Office Procedure<\/p>\n        <button type=\"button\" class=\"go\" data-gopaper=\"Head 2\">Browse <span data-paper-count=\"Head 2\">series<\/span> &rarr;<\/button>\n      <\/div>\n      <div class=\"seo-card\">\n        <h3>GK & Aptitude &mdash; General Knowledge, Language, Reasoning & Aptitude<\/h3>\n        <p>General Knowledge including contemporary social, economic and cultural issues &#183; Hindi and English language skills &#183; Reasoning ability and Quantitative Aptitude<\/p>\n        <button type=\"button\" class=\"go\" data-gopaper=\"Head 3\">Browse <span data-paper-count=\"Head 3\">series<\/span> &rarr;<\/button>\n      <\/div>\n      <\/div>\n      <div class=\"sechead\" style=\"margin-top:52px\">\n        <p class=\"eyebrow\">Other exams<\/p>\n        <h2>Preparing for a <em>different paper?<\/em><\/h2>\n      <\/div>\n      <div class=\"ox\">\n        <a href=\"https:\/\/promotionexams.com\/test-series\/upsc-so-steno-ldce\/\"><h3><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png\" alt=\"\" width=\"26\" height=\"26\" loading=\"lazy\"> UPSC SO\/Steno LDCE<\/h3>\n          <p>Section Officer \/ Stenographer \u2014 Limited Departmental Competitive Exam<\/p><span class=\"go\">25 series &rarr;<\/span><\/a>\n        <a href=\"https:\/\/promotionexams.com\/test-series\/cga-aao-cbt\/\"><h3><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/image-2-1.svg\" alt=\"\" width=\"26\" height=\"26\" loading=\"lazy\"> CGA AAO CBT<\/h3>\n          <p>Assistant Accounts Officer \u2014 Controller General of Accounts (Computer Based Test)<\/p><span class=\"go\">34 series &rarr;<\/span><\/a>\n        <a href=\"https:\/\/promotionexams.com\/test-series\/\"><h3><i class=\"fa-solid fa-table-cells-large\" style=\"color:var(--mustard-deep)\"><\/i> All test series<\/h3>\n          <p>Every exam on one shelf &mdash; with SSC ASO LDCE, CAG SAS and KVS LDCE launching soon.<\/p><span class=\"go\">Browse all &rarr;<\/span><\/a>\n      <\/div>\n      <div class=\"sechead mid\" style=\"margin-top:56px\">\n        <p class=\"eyebrow\">Questions &amp; answers<\/p>\n        <h2>Principal \/ Vice-Principal test series &mdash; FAQs<\/h2>\n      <\/div>\n      <div class=\"faq\">\n      <div class=\"faq-item\">\n        <button type=\"button\" class=\"faq-q\" aria-expanded=\"false\">\n          <span class=\"qm\">&#43;<\/span><span>Are the 2022 Principal and Vice-Principal papers really free?<\/span><\/button>\n        <div class=\"faq-a\" hidden>Yes. Both complete 2022 papers are free to attempt \u2014 click \u201cStart free test\u201d on the card. They are the quickest way to see the paper\u2019s pattern and difficulty before you buy anything.<\/div>\n      <\/div>\n      <div class=\"faq-item\">\n        <button type=\"button\" class=\"faq-q\" aria-expanded=\"false\">\n          <span class=\"qm\">&#43;<\/span><span>What is the pattern of the Principal &amp; Vice-Principal test?<\/span><\/button>\n        <div class=\"faq-a\" hidden>One objective paper of 300 marks in two hours, in English and Hindi, with one-third of the marks deducted for each wrong answer. The test and the interview are weighted 75:25.<\/div>\n      <\/div>\n      <div class=\"faq-item\">\n        <button type=\"button\" class=\"faq-q\" aria-expanded=\"false\">\n          <span class=\"qm\">&#43;<\/span><span>Why do some PYQ cards say \u201cUPSC SO\/Steno LDCE\u201d?<\/span><\/button>\n        <div class=\"faq-a\" hidden>The office administration head draws on the same rules \u2014 Conduct, CCA, Pension, CSMOP and the RTI Act. Those PYQ banks are the questions UPSC asked on these rules in the SO\/Steno LDCE, which is the closest record of how UPSC frames them.<\/div>\n      <\/div>\n      <div class=\"faq-item\">\n        <button type=\"button\" class=\"faq-q\" aria-expanded=\"false\">\n          <span class=\"qm\">&#43;<\/span><span>When will GK, language and reasoning open?<\/span><\/button>\n        <div class=\"faq-a\" hidden>Those series are being written now. Use \u201cNotify me at launch\u201d under Head III and we will email you the day they open.<\/div>\n      <\/div>\n      <div class=\"faq-item\">\n        <button type=\"button\" class=\"faq-q\" aria-expanded=\"false\">\n          <span class=\"qm\">&#43;<\/span><span>How do the live mock tests work?<\/span><\/button>\n        <div class=\"faq-a\" hidden>The live mock series opens on 9 December 2026 and runs to the week of the test on 9 January 2027. Each full-length mock opens at its sitting time (IST) with the real pattern \u2014 300 marks, two hours, one-third negative marking \u2014 and stays open 24 hours for one ranked attempt; score, All-India rank and the answer key come when the window closes. The test-by-test schedule will be published on this page shortly. Enrol any time before the first mock opens.<\/div>\n      <\/div>\n      <div class=\"faq-item\">\n        <button type=\"button\" class=\"faq-q\" aria-expanded=\"false\">\n          <span class=\"qm\">&#43;<\/span><span>Is a bundle cheaper than buying the series one by one?<\/span><\/button>\n        <div class=\"faq-a\" hidden>Yes. The bundle card shows what its series cost bought separately and the saving. If you add a single series that sits inside an available bundle, the page shows you the bundle before it reaches your cart.<\/div>\n      <\/div>\n      <div class=\"faq-item\">\n        <button type=\"button\" class=\"faq-q\" aria-expanded=\"false\">\n          <span class=\"qm\">&#43;<\/span><span>How long does access last?<\/span><\/button>\n        <div class=\"faq-a\" hidden>Access runs until the test or one year, as printed on each card, with no attempt limit inside that window.<\/div>\n      <\/div>\n      <div class=\"faq-item\">\n        <button type=\"button\" class=\"faq-q\" aria-expanded=\"false\">\n          <span class=\"qm\">&#43;<\/span><span>I bought a series but cannot see it. What do I do?<\/span><\/button>\n        <div class=\"faq-a\" hidden>Log out and log back in first, since access is tied to the account that paid. If it still does not appear, message us on WhatsApp with your order number and we will attach it manually the same day.<\/div>\n      <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n  <section class=\"sec tint\" aria-label=\"Talk to us\">\n    <div class=\"wrap\">\n      <div class=\"panel warm\">\n        <div class=\"talk\">\n          <div>\n            <p class=\"eyebrow\">Live support<\/p>\n            <h2>Not sure which series <em>fits your exam?<\/em><\/h2>\n            <p>Tell us your exam, your paper and how much time is left &mdash; we will point you to the\n               right series or bundle. Questions about a syllabus, an amendment or an order you cannot\n               find are welcome too.<\/p>\n            <div class=\"talk-ticks\">\n              <span><i class=\"fa-solid fa-check\"><\/i>A real reply, not a bot<\/span>\n              <span><i class=\"fa-solid fa-check\"><\/i>Free, no obligation to buy<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"talk-act\">\n            <svg class=\"talk-mark\" viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path fill=\"currentColor\" d=\"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 110.9L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"\/><\/svg>\n            <a class=\"talk-btn\" href=\"https:\/\/wa.me\/919870176238\" target=\"_blank\" rel=\"noopener noreferrer\">\n              <i class=\"fa-brands fa-whatsapp\"><\/i> Chat with us<\/a>\n            <span class=\"talk-note\">No account needed<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n  \n  <div class=\"modal\" id=\"ts-modal\">\n    <div class=\"modal-card\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"ts-modalTitle\">\n      <div class=\"modal-head\">\n        <div><h3 id=\"ts-modalTitle\">UPSC Principal &amp; Vice-Principal CRT &mdash; syllabus<\/h3><p>Head-wise subjects, as notified<\/p><\/div>\n        <button type=\"button\" class=\"modal-close\" id=\"ts-modalX\" aria-label=\"Close\">&#10005;<\/button>\n      <\/div>\n      <div class=\"modal-body\" id=\"ts-modalBody\">\n        <p class=\"syl-paper\"><span>Core Subjects<\/span>Educational Policies, Pedagogy, Evaluation & Digital Literacy<\/p><ul><li>Educational policies & Educational measurement and evaluation<\/li><li>Pedagogy in Education (new in 2026)<\/li><li>Digital Literacy (new in 2026)<\/li><\/ul>\n        <p class=\"syl-paper\"><span>Office Administration<\/span>Office Procedure, Management & Financial Administration<\/p><ul><li>Management and Financial administration<\/li><li>Office Procedure<\/li><\/ul>\n        <p class=\"syl-paper\"><span>GK & Aptitude<\/span>General Knowledge, Language, Reasoning & Aptitude<\/p><ul><li>General Knowledge including contemporary social, economic and cultural issues<\/li><li>Hindi and English language skills<\/li><li>Reasoning ability and Quantitative Aptitude<\/li><\/ul>\n        <div class=\"modal-note\">One objective paper of 300 marks in two hours, English and Hindi, with one-third negative marking; the test and the interview are weighted 75:25. UPSC prints only the eight notified heads \u2014 the three heads above group them for the shelf; there is no official sub-topic list and no official weightage. Where this and Special Advt. No. 51\/2026 differ, the notification governs.<\/div>\n      <\/div>\n      <div class=\"modal-foot\">\n        <button type=\"button\" class=\"btn-ghost\" id=\"ts-modalClose\">Close<\/button>\n        <a class=\"wa-btn\" href=\"https:\/\/wa.me\/919870176238\" target=\"_blank\" rel=\"noopener noreferrer\">\n          <i class=\"fa-brands fa-whatsapp\"><\/i> Ask about this syllabus<\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n  <div class=\"toast\" id=\"ts-toast\" role=\"status\"><p id=\"ts-toastMsg\">Filters cleared<\/p><\/div>\n<!-- Structured data sits inside the paste block on purpose: an Elementor HTML\n     widget ships only what is between the markers. The live-mock schedule adds\n     its own EducationEvent data at run time from LIVE_MOCKS. -->\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"Organization\",\n  \"name\": \"PromotionExams\",\n  \"url\": \"https:\/\/promotionexams.com\/\",\n  \"logo\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png\",\n  \"description\": \"Specialised preparation platform for India's limited departmental promotion examinations.\",\n  \"sameAs\": [\n    \"https:\/\/cssadda.in\/\"\n  ]\n}\n<\/script>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"WebSite\",\n  \"name\": \"PromotionExams\",\n  \"url\": \"https:\/\/promotionexams.com\/\",\n  \"potentialAction\": {\n    \"@type\": \"SearchAction\",\n    \"target\": \"https:\/\/promotionexams.com\/?s={search_term_string}\",\n    \"query-input\": \"required name=search_term_string\"\n  }\n}\n<\/script>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"BreadcrumbList\",\n  \"itemListElement\": [\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 1,\n      \"name\": \"Home\",\n      \"item\": \"https:\/\/promotionexams.com\/\"\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 2,\n      \"name\": \"Test Series\",\n      \"item\": \"https:\/\/promotionexams.com\/test-series\/\"\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 3,\n      \"name\": \"UPSC Principal & Vice-Principal CRT Test Series\",\n      \"item\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\"\n    }\n  ]\n}\n<\/script>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"Course\",\n  \"name\": \"UPSC Principal & Vice-Principal CRT Test Series\",\n  \"description\": \"Chapter-wise and PYQ test series for the UPSC Principal & Vice-Principal Combined Recruitment Test \u2014 NEP 2020, RTE Act 2009, school education schemes, measurement & evaluation, pedagogy, digital literacy, CCS rules, GFR, CSMOP and the RTI Act, with the 2022 papers free.\",\n  \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n  \"inLanguage\": \"en-IN\",\n  \"provider\": {\n    \"@type\": \"Organization\",\n    \"name\": \"PromotionExams\",\n    \"sameAs\": \"https:\/\/promotionexams.com\/\"\n  },\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"category\": \"Paid\",\n    \"priceCurrency\": \"INR\",\n    \"price\": \"99\"\n  },\n  \"hasCourseInstance\": {\n    \"@type\": \"CourseInstance\",\n    \"courseMode\": \"Online\",\n    \"courseWorkload\": \"PT2H\"\n  }\n}\n<\/script>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"ItemList\",\n  \"name\": \"UPSC Principal & Vice-Principal CRT test series on PromotionExams\",\n  \"itemListElement\": [\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 1,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"Principal 2022 \u2014 Previous Year Paper\",\n        \"sku\": \"16469\",\n        \"description\": \"UPSC Principal, 2022 \u2014 the complete question paper \u2014 120 questions. Complete 2022 paper \u00b7 free to attempt. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-31-2026-09_32_55-PM.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"0\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 2,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"Vice-Principal 2022 \u2014 Previous Year Paper\",\n        \"sku\": \"16470\",\n        \"description\": \"UPSC Vice-Principal, 2022 \u2014 the complete question paper \u2014 120 questions. Complete 2022 paper \u00b7 free to attempt. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-Sep-1-2026-07_59_04-PM.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"0\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 3,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"National Education Policy (NEP) 2020\",\n        \"sku\": \"16568\",\n        \"description\": \"National Education Policy (NEP), 2020 \u2014 442 questions. All parts of the Policy \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/EB9F77E4-1570-498F-B5EE-16306D043418.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"199\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 4,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"Right to Education (RTE) Act,2009 & Rules, 2010\",\n        \"sku\": \"16665\",\n        \"description\": \"Right of Children to Free and Compulsory Education (RTE) Act, 2009 \u2014 217 questions. All chapters + Schedule \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-25-2026-07_58_10-AM.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"119\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 5,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"Schemes & Policies in School Education\",\n        \"sku\": \"16622\",\n        \"description\": \"Schemes and institutions in school education \u2014 422 questions. PM POSHAN, PM-SHRI, KGBV, DIKSHA \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-Sep-3-2026-05_57_54-PM.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"249\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 6,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"Child Safety & Protection \u2014 related Acts & Rules (POSCO, CPCR, JJ, RPwD)\",\n        \"sku\": \"17949\",\n        \"description\": \"Child protection, rights and school safety \u2014 800+ questions. POCSO, CPCR, POSH, JJ Act, RPwD \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/10\/cpcr.avif\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"299\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 7,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"Measurement & Evaluation\",\n        \"sku\": \"16705\",\n        \"description\": \"Educational measurement and evaluation \u2014 820 questions. Taxonomy, item analysis, validity, statistics \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-25-2026-07_53_30-AM.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"299\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 8,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"Pedagogy in Education\",\n        \"sku\": \"17205\",\n        \"description\": \"Pedagogy in Education \u2014 1347 questions. Learning theories, methods, curriculum \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/pedagogy.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"299\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 9,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"Digital Literacy\",\n        \"sku\": \"16524\",\n        \"description\": \"Digital Literacy \u2014 700 questions. OS, office apps, cybersecurity, DIKSHA, UDISE+ \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-26-2026-08_20_58-AM.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"199\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 10,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"Manual of Office Procedure \u2014 PYQs (UPSC SO\/Steno LDCE)\",\n        \"sku\": \"5753\",\n        \"description\": \"Manual of Office Procedure (CSMOP) \u2014 258 questions. PYQs 2010 \u2013 2025 \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/mop-e1684145514331.jpeg\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"119\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 11,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"CCS (Pension) Rules \u2014 PYQs (UPSC SO\/Steno LDCE)\",\n        \"sku\": \"2631\",\n        \"description\": \"CCS (Pension) Rules \u2014 186 questions. PYQs 2009 \u2013 2025 \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/pension.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"99\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 12,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"CCS (Conduct) Rules, 1964 \u2014 PYQs (UPSC SO\/Steno LDCE)\",\n        \"sku\": \"5750\",\n        \"description\": \"CCS (Conduct) Rules, 1964 \u2014 121 questions. PYQs 2009 \u2013 2025 \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/conduct.jpg\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"99\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 13,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"CCS (CCA) Rules, 1965 \u2014 PYQs (UPSC SO\/Steno LDCE)\",\n        \"sku\": \"2630\",\n        \"description\": \"CCS (CCA) Rules, 1965 \u2014 114 questions. PYQs 2009 \u2013 2025 \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CCA.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"99\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 14,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"Right to Information Act \u2014 PYQs (UPSC SO\/Steno LDCE)\",\n        \"sku\": \"2629\",\n        \"description\": \"Right to Information (RTI) Act, 2005 \u2014 167 questions. PYQs 2009 \u2013 2025 \u00b7 rule-cited solutions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/rti.jpeg\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"99\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 15,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"RTI Act, 2005 \u2014 Complete Pack\",\n        \"sku\": \"16040\",\n        \"description\": \"Right to Information (RTI) Act, 2005 \u2014 805 questions. 167 previous year questions (2009\u20132025); 638 chapter-wise questions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/rti.jpeg\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"149\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 16,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"General Financial Rules, 2017 \u2014 Complete Pack\",\n        \"sku\": \"16094\",\n        \"description\": \"General Financial Rules (GFR), 2017 \u2014 675 questions. 181 previous year questions (2009\u20132025); 494 chapter-wise questions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/GFR.jpg\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"149\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 17,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"CCS (Pension) Rules, 2021 \u2014 Complete Pack\",\n        \"sku\": \"16191\",\n        \"description\": \"CCS (Pension) Rules \u2014 667 questions. 186 previous year questions (2009\u20132025); 481 chapter-wise questions. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/pension.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"199\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 18,\n      \"item\": {\n        \"@type\": \"Product\",\n        \"name\": \"CCS (Leave\/LTC) Rules \u2014 Complete Pack\",\n        \"sku\": \"15560\",\n        \"description\": \"CCS (Leave\/LTC) Rules \u2014 642 questions. 112 previous year questions (2009\u20132025); 530 chapter-wise questions on every provision. Every question carries a rule-cited explanation.\",\n        \"image\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-21-2026-04_32_25-PM.png\",\n        \"brand\": {\n          \"@type\": \"Brand\",\n          \"name\": \"PromotionExams\"\n        },\n        \"category\": \"UPSC Principal & Vice-Principal CRT\",\n        \"offers\": {\n          \"@type\": \"Offer\",\n          \"price\": \"149\",\n          \"priceCurrency\": \"INR\",\n          \"availability\": \"https:\/\/schema.org\/InStock\",\n          \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\",\n          \"seller\": {\n            \"@type\": \"Organization\",\n            \"name\": \"PromotionExams\"\n          }\n        }\n      }\n    }\n  ]\n}\n<\/script>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Are the 2022 Principal and Vice-Principal papers really free?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes. Both complete 2022 papers are free to attempt \u2014 click \u201cStart free test\u201d on the card. They are the quickest way to see the paper\u2019s pattern and difficulty before you buy anything.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is the pattern of the Principal & Vice-Principal test?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"One objective paper of 300 marks in two hours, in English and Hindi, with one-third of the marks deducted for each wrong answer. The test and the interview are weighted 75:25.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Why do some PYQ cards say \u201cUPSC SO\/Steno LDCE\u201d?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"The office administration head draws on the same rules \u2014 Conduct, CCA, Pension, CSMOP and the RTI Act. Those PYQ banks are the questions UPSC asked on these rules in the SO\/Steno LDCE, which is the closest record of how UPSC frames them.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"When will GK, language and reasoning open?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Those series are being written now. Use \u201cNotify me at launch\u201d under Head III and we will email you the day they open.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How do the live mock tests work?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"The live mock series opens on 9 December 2026 and runs to the week of the test on 9 January 2027. Each full-length mock opens at its sitting time (IST) with the real pattern \u2014 300 marks, two hours, one-third negative marking \u2014 and stays open 24 hours for one ranked attempt; score, All-India rank and the answer key come when the window closes. The test-by-test schedule will be published on this page shortly. Enrol any time before the first mock opens.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Is a bundle cheaper than buying the series one by one?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes. The bundle card shows what its series cost bought separately and the saving. If you add a single series that sits inside an available bundle, the page shows you the bundle before it reaches your cart.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How long does access last?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Access runs until the test or one year, as printed on each card, with no attempt limit inside that window.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"I bought a series but cannot see it. What do I do?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Log out and log back in first, since access is tied to the account that paid. If it still does not appear, message us on WhatsApp with your order number and we will attach it manually the same day.\"\n      }\n    }\n  ]\n}\n<\/script>\n<\/div>\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,500&display=swap');\n\/* ===== ELEMENTOR OVERRIDE \u2014 kill the wrapper padding ===== *\/\n.elementor-widget-html,\n.elementor-widget-html .elementor-widget-container{width:100%!important;max-width:100%!important;padding:0!important;margin:0!important}\n#ts-repo{\n  \/* ---- edit these three if needed ---- *\/\n  --ts-top:0px;                 \/* height of your sticky site header, e.g. 70px *\/\n  --ts-pull:0px;                \/* auto-set: closes the gap above the hero *\/\n  --ts-ratio:16\/10;             \/* card image box. auto = uncropped natural height *\/\n  --ts-fit:cover;\n  --hero-img:url(\"https:\/\/promotionexams.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-7-2026-07_29_54-AM.png\");\n  \/* ---- palette: identical to the Rules Repository ----\n     Brand swap, if you ever want the header match instead:\n     --navy:#1434A4;  --navy-deep:#0E2478;  --mustard:#FEC533; *\/\n  --navy:#1E3A8A; --navy-deep:#152A66; --mustard:#E0A82E; --mustard-deep:#8A6508;\n  --mustard-tint:#FDF6E6; --white:#fff; --off:#F7F9FC; --ink:#16233F; --ink-soft:#5A6784;\n  --line:#DFE5F0; --green:#0B8457; --maxw:1180px; --ts-vw:100vw;\n  \/* full-bleed: breaks out of the Elementor container to the screen edges *\/\n  width:var(--ts-vw); max-width:none;\n  margin-left:calc(50% - (var(--ts-vw) \/ 2));\n  margin-right:calc(50% - (var(--ts-vw) \/ 2));\n  margin-top:calc(-1 * var(--ts-pull));\n  margin-bottom:0;\n  background:var(--white); color:var(--ink);\n  font-family:\"IBM Plex Sans\",system-ui,sans-serif; font-size:16px; line-height:1.55;\n  text-align:left;\n}\n#ts-repo *,#ts-repo *::before,#ts-repo *::after{box-sizing:border-box}\n\/* a theme rule like `div{display:flex}` was reflowing whole blocks; every\n   class rule below still wins, so this only neutralises the bleed *\/\n#ts-repo div,#ts-repo p,#ts-repo h1,#ts-repo h2,#ts-repo h3,#ts-repo h4,#ts-repo figure{display:block}\n#ts-repo a{color:inherit;text-decoration:none;border:0}\n#ts-repo a:hover{color:inherit;text-decoration:none}\n#ts-repo p{margin:0}\n#ts-repo img{display:block;max-width:100%}\n#ts-repo [hidden]{display:none!important}\n#ts-repo :focus-visible{outline:3px solid var(--mustard);outline-offset:3px;border-radius:2px}\n#ts-repo .wrap{max-width:var(--maxw);margin:0 auto;padding:0 22px}\n#ts-repo .mono{font-family:\"IBM Plex Mono\",ui-monospace,monospace}\n#ts-repo .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}\n\/* buttons: reset held at element weight so component classes always win *\/\n#ts-repo :where(button){border:0;background:transparent;color:inherit}\n#ts-repo button{font-family:inherit;cursor:pointer;-webkit-appearance:none;appearance:none;text-align:inherit;margin:0}\n#ts-repo [id]{scroll-margin-top:calc(var(--ts-top) + var(--ts-barh,110px) + 14px)}\n\/* ================================================================ HERO *\/\n#ts-repo .ts-hero{position:relative;isolation:isolate;border-bottom:4px solid var(--mustard)}\n#ts-repo .ts-hero__bg{position:absolute;inset:0;z-index:0;background-image:var(--hero-img);\n  background-size:cover;background-position:center 40%}\n#ts-repo .ts-hero__bg::after{content:\"\";position:absolute;inset:0;\n  background:linear-gradient(100deg,rgba(190,209,243,.97) 0%,rgba(214,228,250,.94) 40%,rgba(228,237,252,.66) 64%,rgba(255,255,255,.10) 100%)}\n#ts-repo .ts-hero__inner{position:relative;z-index:2;max-width:var(--maxw);margin:0 auto;padding:64px 22px 54px}\n#ts-repo .ts-hero__panel{max-width:660px;color:var(--ink)}\n#ts-repo .eyebrow{display:flex;align-items:center;gap:10px;font-family:\"IBM Plex Mono\",monospace;\n  font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;color:var(--mustard-deep);margin:0 0 18px}\n#ts-repo .eyebrow::after{content:\"\";height:2px;flex:1;background:var(--mustard);opacity:.75}\n#ts-repo .ts-h1{font-family:\"Newsreader\",Georgia,serif;font-weight:500;font-size:clamp(2.4rem,6vw,4.1rem);\n  line-height:.99;letter-spacing:-.02em;margin:0;color:var(--navy-deep)}\n#ts-repo .ts-h1 em{font-style:italic;color:var(--mustard-deep)}\n#ts-repo .ts-tag{margin:18px 0 0;padding-left:14px;border-left:3px solid var(--mustard);\n  font-family:\"Newsreader\",Georgia,serif;font-weight:500;font-size:clamp(1.1rem,1.9vw,1.42rem);\n  line-height:1.32;letter-spacing:-.01em;color:var(--navy);max-width:none;text-wrap:balance}\n#ts-repo .ts-hero__sub{font-size:1.02rem;color:var(--ink-soft);max-width:56ch;margin:14px 0 0}\n#ts-repo .ts-stamp{position:absolute;right:5%;top:13%;width:148px;height:148px;transform:rotate(-9deg);z-index:1}\n@media(max-width:1000px){#ts-repo .ts-stamp{display:none}}\n#ts-repo .ts-search{margin-top:28px;display:flex;align-items:center;gap:10px;background:#fff;\n  border:2px solid var(--mustard);border-radius:3px;padding:12px 14px;max-width:460px;color:var(--ink);\n  box-shadow:0 14px 34px -22px rgba(21,42,102,.65)}\n#ts-repo .ts-search svg{flex:none;color:var(--navy);opacity:.7}\n#ts-repo .ts-search input{border:0;background:none;font:inherit;color:inherit;width:100%;outline:none;\n  box-shadow:none;padding:0;margin:0;height:auto;min-width:0}\n#ts-repo .ts-search input::placeholder{color:#8C97AE}\n#ts-repo .ts-search .x{flex:none;color:#8C97AE;font-size:.9rem;padding:0 2px;display:none}\n#ts-repo .ts-search .x:hover{color:var(--navy)}\n#ts-repo .ts-facts{display:flex;flex-wrap:wrap;gap:0;margin-top:30px;\n  border-top:1px solid rgba(21,42,102,.18)}\n#ts-repo .ts-fact{padding:14px 22px 0 0;margin-right:22px;border-right:1px solid rgba(21,42,102,.13)}\n#ts-repo .ts-fact:last-child{border-right:0;margin-right:0}\n#ts-repo .ts-fact b{display:block;font-family:\"Newsreader\",serif;font-weight:500;font-size:1.5rem;\n  line-height:1;color:var(--navy-deep)}\n#ts-repo .ts-fact span{display:block;margin-top:5px;font-family:\"IBM Plex Mono\",monospace;\n  font-size:.6rem;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-soft)}\n\/* ================================================================ FILTER BAR *\/\n#ts-repo .ts-bar{position:sticky;top:var(--ts-top);z-index:20;background:rgba(255,255,255,.97);\n  backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}\n#ts-repo .ts-bar__inner{max-width:var(--maxw);margin:0 auto;padding:10px 22px 9px}\n#ts-repo .ts-row{display:flex;align-items:center;gap:12px}\n#ts-repo .ts-row + .ts-row{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line)}\n#ts-repo .ts-rowlab{font-family:\"IBM Plex Mono\",monospace;font-size:.63rem;letter-spacing:.14em;\n  text-transform:uppercase;color:var(--ink-soft);flex:none;width:56px;align-self:center}\n#ts-repo .ts-chips{display:flex;gap:7px;flex-wrap:wrap;flex:1;min-width:0}\n\/* --- exam tabs: the notes-page tab, redrawn in the repository's type --- *\/\n#ts-repo .ts-tabs{display:flex;gap:8px;flex:1;min-width:0;flex-wrap:wrap;\n  scrollbar-width:none;padding:4px 2px}\n#ts-repo .ts-tabs::-webkit-scrollbar{display:none}\n#ts-repo .ts-tab{display:flex;align-items:center;gap:10px;flex:none;scroll-snap-align:start;\n  padding:7px 14px 7px 8px;border-radius:100px;border:1.5px solid var(--line);background:#fff;\n  color:var(--ink-soft);transition:.16s;white-space:nowrap}\n#ts-repo .ts-tab .ic{width:28px;height:28px;border-radius:50%;flex:none;background:#fff;\n  border:1px solid var(--line);padding:3px;display:grid;place-items:center;overflow:hidden}\n#ts-repo .ts-tab .ic img{width:100%;height:100%;object-fit:contain}\n#ts-repo .ts-tab .ic svg{width:15px;height:15px;color:var(--mustard-deep)}\n#ts-repo .ts-tab .lb{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.72rem;\n  letter-spacing:.06em;text-transform:uppercase;line-height:1.2;color:inherit}\n#ts-repo .ts-tab .lb em{display:block;font-style:normal;font-family:\"IBM Plex Sans\",sans-serif;\n  font-size:.63rem;letter-spacing:0;text-transform:none;color:#93A0B8;margin-top:2px}\n#ts-repo .ts-tab:hover{border-color:var(--mustard);color:var(--navy)}\n#ts-repo .ts-tab[aria-pressed=\"true\"],#ts-repo .ts-tab[aria-pressed=\"true\"]:hover{\n  background:var(--navy);border-color:var(--navy);color:#fff}\n#ts-repo .ts-tab[aria-pressed=\"true\"] .ic{border-color:rgba(255,255,255,.3)}\n#ts-repo .ts-tab[aria-pressed=\"true\"] .lb em{color:#B7C3EA}\n#ts-repo .ts-tab[aria-pressed=\"true\"] .ic svg{color:var(--mustard)}\n\/* an exam with nothing on the shelf yet: still reachable, visibly quieter *\/\n#ts-repo .ts-tab[data-soon]{background:var(--off);border-style:dashed}\n#ts-repo .ts-tab[data-soon] .ic{opacity:.5}\n#ts-repo .ts-tab[data-soon] .lb{color:#93A0B8}\n#ts-repo .ts-tab[data-soon]:hover .ic{opacity:1}\n#ts-repo .ts-tab[data-soon][aria-pressed=\"true\"]{background:var(--navy);border-style:solid}\n#ts-repo .ts-tab[data-soon][aria-pressed=\"true\"] .ic{opacity:1}\n#ts-repo .ts-tab[data-soon][aria-pressed=\"true\"] .lb{color:#fff}\n\/* --- plain chips: format, paper --- *\/\n#ts-repo .chip{font-family:\"IBM Plex Mono\",monospace;letter-spacing:.06em;text-transform:uppercase;\n  border-radius:100px;background:#fff;cursor:pointer;transition:.15s;font-size:.72rem;padding:7px 13px;\n  border:1.5px solid var(--line);color:var(--ink-soft);line-height:1.2}\n#ts-repo .chip:hover{border-color:var(--mustard);color:var(--navy);background:#fff}\n#ts-repo .chip[aria-pressed=\"true\"],#ts-repo .chip[aria-pressed=\"true\"]:hover{\n  background:var(--navy);border-color:var(--navy);color:#fff}\n#ts-repo .chip[disabled]:hover{border-color:var(--line);color:var(--ink-soft)}\n\/* ================================================================ WORKSPACE *\/\n#ts-repo .ts-main{padding:30px 0 56px;background:linear-gradient(180deg,var(--off) 0,var(--white) 420px)}\n#ts-repo .ts-head{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap;\n  background:#fff;border:1px solid var(--line);border-left:5px solid var(--mustard);border-radius:4px;\n  padding:16px 18px;margin-bottom:16px;box-shadow:0 1px 2px rgba(21,42,102,.05)}\n#ts-repo .ts-head .id{display:flex;align-items:center;gap:14px;min-width:0}\n#ts-repo .ts-head .av{width:48px;height:48px;flex:none;border:1px solid var(--line);border-radius:3px;\n  background:#fff;padding:6px;display:grid;place-items:center}\n#ts-repo .ts-head .av img{width:100%;height:100%;object-fit:contain}\n#ts-repo .ts-head h2{font-family:\"Newsreader\",Georgia,serif;font-weight:500;font-size:1.5rem;\n  line-height:1.15;letter-spacing:-.015em;margin:0;color:var(--navy-deep)}\n#ts-repo .ts-head .sub{font-size:.8rem;color:var(--ink-soft);margin-top:4px}\n#ts-repo .ts-headact{display:flex;align-items:center;gap:9px;flex-wrap:wrap;flex:none}\n#ts-repo .ts-syl{display:inline-flex;align-items:center;gap:8px;flex:none;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;\n  color:var(--navy);border:1.5px solid var(--line);background:#fff;padding:9px 14px;border-radius:3px;\n  transition:.16s}\n#ts-repo .ts-syl:hover{border-color:var(--mustard);background:var(--mustard-tint);color:var(--navy-deep)}\n#ts-repo .ts-note{font-size:.83rem;color:var(--ink-soft);line-height:1.65;margin-bottom:16px;\n  background:#fff;border:1px solid var(--line);border-left:3px solid var(--mustard);\n  border-radius:0 4px 4px 0;padding:11px 15px}\n#ts-repo .ts-tools{display:flex;align-items:center;justify-content:space-between;gap:14px;\n  flex-wrap:wrap;margin-bottom:14px}\n#ts-repo .ts-active{display:flex;align-items:center;gap:7px;flex-wrap:wrap;min-height:28px}\n#ts-repo .ts-active .lb{font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.13em;\n  text-transform:uppercase;color:#93A0B8}\n#ts-repo .fchip{display:inline-flex;align-items:center;gap:7px;padding:5px 10px;border-radius:100px;\n  background:var(--mustard-tint);border:1px solid #F0E0B8;font-size:.7rem;font-weight:600;\n  color:var(--mustard-deep);max-width:240px}\n#ts-repo .fchip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n#ts-repo .fchip svg{width:9px;height:9px;flex:none;opacity:.65}\n#ts-repo .fchip:hover{border-color:var(--mustard-deep)}\n#ts-repo .ts-clearall{font-size:.7rem;font-weight:600;color:var(--ink-soft);\n  text-decoration:underline;text-underline-offset:3px}\n#ts-repo .ts-clearall:hover{color:var(--navy)}\n\/* ================================================================ CARDS *\/\n\/* section headings sit inside the grid and span every column *\/\n#ts-repo .ts-sec,#ts-repo .ts-sub{grid-column:1 \/ -1}\n#ts-repo .ts-sec{display:flex;align-items:center;gap:12px;flex-wrap:wrap;\n  font-family:\"Newsreader\",Georgia,serif;font-weight:500;font-size:1.3rem;letter-spacing:-.015em;\n  color:var(--navy-deep);margin:14px 0 -2px;padding-bottom:11px;border-bottom:2px solid var(--mustard)}\n#ts-repo .ts-grid > .ts-sec:first-child{margin-top:0}\n#ts-repo .ts-sec span{flex:none;font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.11em;\n  text-transform:uppercase;color:var(--mustard-deep);background:var(--mustard-tint);\n  border:1px solid #F0E0B8;border-radius:3px;padding:4px 10px}\n#ts-repo .ts-sub{display:flex;align-items:center;gap:11px;font-family:\"IBM Plex Mono\",monospace;\n  font-size:.64rem;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-soft);margin:10px 0 -4px}\n#ts-repo .ts-sub::after{content:\"\";height:1px;flex:1;background:var(--line)}\n@media(max-width:700px){\n  #ts-repo .ts-sec{font-size:1.1rem;gap:9px}\n  #ts-repo .ts-sub{font-size:.6rem}\n}\n#ts-repo .ts-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(268px,100%),1fr));gap:20px}\n#ts-repo .ts-card{position:relative;display:flex;flex-direction:column;background:#fff;\n  border:1px solid var(--line);border-left:5px solid var(--mustard);border-radius:12px;overflow:hidden;\n  box-shadow:0 1px 2px rgba(21,42,102,.06),0 14px 30px -22px rgba(21,42,102,.55);\n  transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}\n#ts-repo .ts-card[data-type=\"chapter\"]{border-left-color:var(--navy)}\n#ts-repo .ts-card[data-type=\"combo\"]{border-left-color:var(--mustard-deep)}\n#ts-repo .ts-card:hover{transform:translateY(-3px);border-color:var(--mustard);\n  box-shadow:0 1px 2px rgba(21,42,102,.06),0 24px 36px -24px rgba(21,42,102,.65)}\n#ts-repo .ts-card[data-type=\"chapter\"]:hover{border-left-color:var(--navy)}\n#ts-repo .ts-card.is-soon .ts-thumb img{filter:grayscale(.5)}\n#ts-repo .ts-thumb{position:relative;background:#fff;overflow:hidden;border-bottom:1px solid var(--line);line-height:0}\n#ts-repo .ts-thumb img{width:100%;height:auto;display:block;max-width:none;\n  aspect-ratio:var(--ts-ratio);object-fit:var(--ts-fit);object-position:center;transition:transform .5s ease}\n#ts-repo .ts-card:hover .ts-thumb img{transform:scale(1.04)}\n#ts-repo .ts-kind{position:absolute;left:0;bottom:0;z-index:2;font-family:\"IBM Plex Mono\",monospace;\n  font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;padding:5px 10px;\n  background:var(--mustard);color:var(--navy-deep);line-height:1.3}\n#ts-repo .ts-card[data-type=\"chapter\"] .ts-kind{background:var(--navy);color:#fff}\n#ts-repo .ts-card[data-type=\"combo\"] .ts-kind{background:linear-gradient(90deg,var(--navy),var(--mustard-deep));color:#fff}\n#ts-repo .ribbon{position:absolute;top:10px;right:10px;z-index:3;font-family:\"IBM Plex Mono\",monospace;\n  font-size:.56rem;letter-spacing:.1em;text-transform:uppercase;padding:4px 9px;border-radius:2px;\n  background:#fff;color:var(--mustard-deep);border:1px solid var(--mustard);line-height:1.3;\n  box-shadow:0 2px 8px rgba(21,42,102,.18)}\n#ts-repo .ribbon.new{border-color:var(--green);color:var(--green)}\n#ts-repo .ribbon.value{background:var(--navy);border-color:var(--navy);color:#fff}\n#ts-repo .ribbon.soon{background:var(--ink-soft);border-color:var(--ink-soft);color:#fff}\n#ts-repo .ribbon.free{background:var(--green);border-color:var(--green);color:#fff}\n\/* a head whose series are still being written: the strip that stands in for them *\/\n#ts-repo .ts-headsoon{grid-column:1 \/ -1;display:flex;align-items:center;gap:16px;flex-wrap:wrap;\n  background:var(--mustard-tint);border:1px dashed #E7D3A2;border-radius:10px;padding:16px 18px}\n#ts-repo .ts-headsoon b{flex:none;font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;\n  letter-spacing:.12em;text-transform:uppercase;color:var(--mustard-deep);background:#fff;\n  border:1px solid #F0E0B8;border-radius:3px;padding:5px 10px}\n#ts-repo .ts-headsoon span{flex:1;min-width:220px;font-size:.83rem;color:var(--ink-soft);line-height:1.6}\n#ts-repo .ts-headsoon button{flex:none;font-family:\"IBM Plex Mono\",monospace;font-size:.66rem;\n  letter-spacing:.08em;text-transform:uppercase;background:var(--navy);color:#fff;\n  border-radius:7px;padding:10px 16px;transition:.16s}\n#ts-repo .ts-headsoon button:hover{background:var(--mustard);color:var(--navy-deep)}\n@media(max-width:700px){#ts-repo .ts-headsoon button{width:100%;text-align:center;padding:12px 16px}}\n#ts-repo .ts-cbody{padding:16px 16px 4px;flex:1}\n#ts-repo .ts-ctitle{font-family:\"Newsreader\",Georgia,serif;font-size:1.2rem;font-weight:500;\n  line-height:1.22;letter-spacing:-.01em;margin:0 0 12px;color:var(--navy-deep)}\n#ts-repo .ts-cdesc{font-size:.8rem;color:var(--ink-soft);margin:0 0 12px;line-height:1.5}\n#ts-repo .ts-curated{display:flex;align-items:flex-start;gap:8px;margin:10px 0 0;\n  background:var(--mustard-tint);border:1px solid #F0E0B8;border-left:3px solid var(--mustard);\n  border-radius:0 6px 6px 0;padding:7px 10px;font-size:.7rem;line-height:1.45;color:var(--mustard-deep);\n  font-weight:600}\n#ts-repo .ts-curated i{flex:none;margin-top:3px;font-size:9px}\n#ts-repo .ts-spec{display:flex;border:1px solid var(--line);border-radius:7px;background:var(--off);\n  overflow:hidden;margin-bottom:11px}\n#ts-repo .ts-spec div{flex:1;padding:8px 10px;border-left:1px solid var(--line);min-width:0}\n#ts-repo .ts-spec div:first-child{border-left:0}\n#ts-repo .ts-spec b{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.82rem;font-weight:600;\n  color:var(--navy-deep);line-height:1.25}\n#ts-repo .ts-spec b.fmt{font-family:\"IBM Plex Sans\",sans-serif;font-size:.8rem;font-weight:600}\n#ts-repo .ts-spec span{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.55rem;\n  letter-spacing:.12em;text-transform:uppercase;color:#93A0B8;margin-top:3px}\n#ts-repo .ts-inside{list-style:none;margin:0 0 11px;padding:0;display:flex;flex-direction:column;gap:5px}\n#ts-repo .ts-inside li{display:flex;align-items:flex-start;gap:7px;font-size:.74rem;color:var(--ink-soft);line-height:1.45}\n#ts-repo .ts-inside li::before{content:\"\";flex:none;width:5px;height:5px;margin-top:6px;\n  background:var(--mustard);transform:rotate(45deg)}\n#ts-repo .ts-cfoot{display:flex;align-items:center;justify-content:space-between;gap:10px;\n  padding:10px 12px 10px 16px;border-top:1px solid var(--line);background:var(--off);margin-top:auto}\n#ts-repo .ts-price{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;min-width:0}\n#ts-repo .ts-price b{font-family:\"Newsreader\",serif;font-weight:600;font-size:1.3rem;\n  letter-spacing:-.01em;color:var(--navy-deep);line-height:1}\n#ts-repo .ts-tbd{font-style:normal;font-family:\"IBM Plex Mono\",monospace;font-size:.62rem;\n  letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}\n#ts-repo .ts-price s{font-size:.72rem;color:#93A0B8}\n#ts-repo .ts-price i{font-style:normal;font-family:\"IBM Plex Mono\",monospace;font-size:.55rem;\n  letter-spacing:.06em;color:var(--green)}\n#ts-repo .ts-buy{display:inline-flex;align-items:center;gap:7px;flex:none;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;\n  background:var(--navy);color:#fff;border-radius:7px;padding:10px 14px;transition:.16s;line-height:1.2}\n#ts-repo .ts-buy:hover{background:var(--mustard);color:var(--navy-deep)}\n#ts-repo .ts-buy.in-cart,#ts-repo .ts-buy.in-cart:hover,\n#ts-repo .ts-buy.purchased,#ts-repo .ts-buy.purchased:hover{background:var(--green);color:#fff}\n#ts-repo .ts-card.is-soon .ts-buy{background:var(--ink-soft)}\n#ts-repo .ts-card.is-soon .ts-buy:hover{background:var(--navy-deep);color:#fff}\n#ts-repo .ts-empty{text-align:center;padding:70px 20px;color:var(--ink-soft);\n  border:1px dashed var(--line);border-radius:4px;background:#fff}\n#ts-repo .ts-empty h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.5rem;margin:0 0 6px;color:var(--navy)}\n#ts-repo .ts-empty p{font-size:.85rem;max-width:44ch;margin:0 auto}\n#ts-repo .ts-empty button{margin-top:16px;font-family:\"IBM Plex Mono\",monospace;font-size:.68rem;\n  letter-spacing:.08em;text-transform:uppercase;background:var(--navy);color:#fff;border-radius:3px;padding:10px 16px}\n#ts-repo .ts-empty button:hover{background:var(--mustard);color:var(--navy-deep)}\n\/* coming-soon exam *\/\n#ts-repo .ts-soonblock{display:flex;flex-direction:column;align-items:center;text-align:center;\n  padding:56px 24px;background:#fff;border:1px solid var(--line);border-top:4px solid var(--mustard);border-radius:4px}\n#ts-repo .ts-soonblock .ic{width:74px;height:74px;border:1px solid var(--line);background:var(--mustard-tint);\n  display:grid;place-items:center;padding:12px;margin-bottom:18px;border-radius:3px}\n#ts-repo .ts-soonblock h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.6rem;\n  color:var(--navy-deep);margin:0 0 10px}\n#ts-repo .ts-soonblock p{font-size:.9rem;color:var(--ink-soft);max-width:52ch;margin-bottom:20px;line-height:1.7}\n#ts-repo .ts-soonblock button{font-family:\"IBM Plex Mono\",monospace;font-size:.68rem;letter-spacing:.08em;\n  text-transform:uppercase;background:var(--navy);color:#fff;border-radius:3px;padding:11px 20px}\n#ts-repo .ts-soonblock button:hover{background:var(--mustard);color:var(--navy-deep)}\n\/* ================================================================ SECTIONS *\/\n#ts-repo .sec{padding:60px 0;border-top:1px solid var(--line)}\n#ts-repo .sec.tint{background:var(--off)}\n#ts-repo .sec.gold{background:var(--mustard-tint);border-top-color:#F0E0B8}\n#ts-repo .sechead{max-width:660px;margin:0 0 30px}\n#ts-repo .sechead.mid{max-width:none;margin-left:auto;margin-right:auto;text-align:center}\n#ts-repo .sechead.mid h2{text-wrap:balance}\n#ts-repo .sechead.mid p{max-width:64ch;margin-left:auto;margin-right:auto}\n#ts-repo .sechead.mid .eyebrow{max-width:560px;margin-left:auto;margin-right:auto}\n#ts-repo .sechead.mid .eyebrow{justify-content:center}\n#ts-repo .sechead.mid .eyebrow::before{content:\"\";height:2px;flex:1;background:var(--mustard);opacity:.55}\n#ts-repo .sechead .eyebrow{color:var(--mustard-deep)}\n#ts-repo .sechead .eyebrow::after,#ts-repo .sechead.mid .eyebrow::before{background:var(--mustard)}\n#ts-repo .sechead h2{font-family:\"Newsreader\",Georgia,serif;font-weight:500;\n  font-size:clamp(1.7rem,3.2vw,2.5rem);line-height:1.08;letter-spacing:-.02em;margin:0;color:var(--navy-deep)}\n#ts-repo .sechead h2 em{font-style:italic;color:var(--mustard-deep)}\n#ts-repo .sechead p{font-size:.95rem;color:var(--ink-soft);margin-top:12px;line-height:1.7}\n#ts-repo .sechead p strong{color:var(--navy)}\n\/* ---- notice ---- *\/\n#ts-repo .ts-notice{display:flex;align-items:center;gap:26px;flex-wrap:wrap;background:#fff;\n  border:1px solid var(--line);border-left:5px solid var(--navy);border-radius:4px;padding:16px 20px}\n#ts-repo .ts-notice .tx{flex:1;min-width:280px}\n#ts-repo .ts-notice h2{font-family:\"IBM Plex Mono\",monospace;font-size:.68rem;letter-spacing:.14em;\n  text-transform:uppercase;color:var(--navy);margin:0 0 6px}\n#ts-repo .ts-notice p{font-size:.83rem;color:var(--ink-soft);line-height:1.6}\n#ts-repo .ts-notice strong{color:var(--navy-deep)}\n#ts-repo .wa-btn{display:inline-flex;align-items:center;gap:8px;flex:none;padding:10px 16px;border-radius:3px;\n  background:var(--green);color:#fff;font-family:\"IBM Plex Mono\",monospace;font-size:.66rem;\n  letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;transition:.16s}\n#ts-repo .wa-btn:hover{background:#0a6c47;color:#fff}\n#ts-repo .wa-btn.wa-sm{margin-top:12px;padding:7px 12px;gap:6px;font-size:.6rem;border-radius:6px}\n\/* ---- where \"My Purchases\" lives: a drawn menu, not a real screenshot ---- *\/\n#ts-repo .mshot{flex:none;width:290px;margin:0;border:1px solid var(--line);border-radius:10px;\n  overflow:hidden;background:#fff;box-shadow:0 14px 32px -20px rgba(21,42,102,.6)}\n#ts-repo .mshot-bar{display:flex;align-items:center;gap:9px;padding:8px 10px;background:var(--navy-deep)}\n#ts-repo .mshot-bar .lg{font-family:\"IBM Plex Mono\",monospace;font-size:7.5px;letter-spacing:.1em;\n  text-transform:uppercase;color:#fff;white-space:nowrap}\n#ts-repo .mshot-bar .nv{font-size:8px;color:#9FB0E8;white-space:nowrap}\n#ts-repo .mshot-bar .usr{margin-left:auto;display:inline-flex;align-items:center;gap:5px;flex:none;\n  background:var(--mustard);color:var(--navy-deep);border-radius:100px;padding:4px 9px;\n  font-family:\"IBM Plex Mono\",monospace;font-size:7.5px;letter-spacing:.05em;white-space:nowrap}\n#ts-repo .mshot-bar .usr i{font-size:6.5px}\n#ts-repo .mshot-menu{position:relative;padding:11px 9px 9px;background:var(--off);border-top:1px solid var(--line)}\n#ts-repo .mshot-menu::before{content:\"\";position:absolute;top:-5px;right:30px;width:9px;height:9px;\n  background:var(--off);border-left:1px solid var(--line);border-top:1px solid var(--line);transform:rotate(45deg)}\n#ts-repo .mshot-menu .mi{display:flex;align-items:center;gap:7px;padding:5px 9px;border-radius:6px;\n  font-size:9.5px;line-height:1.3;color:var(--ink-soft);background:#fff;border:1px solid var(--line)}\n#ts-repo .mshot-menu .mi + .mi{margin-top:4px}\n#ts-repo .mshot-menu .mi.on{background:var(--navy);border-color:var(--navy);color:#fff;font-weight:600;\n  box-shadow:0 6px 14px -8px rgba(21,42,102,.9)}\n#ts-repo .mshot-menu .mi.on i{color:var(--mustard);font-size:8px}\n#ts-repo .mshot figcaption{padding:6px 10px;border-top:1px solid var(--line);background:#fff;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.5rem;letter-spacing:.08em;text-transform:uppercase;\n  color:#93A0B8;text-align:center}\n\/* ---- bundles ---- *\/\n#ts-repo .bgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(310px,100%),1fr));gap:20px}\n#ts-repo .bgroup + .bgroup{margin-top:34px}\n#ts-repo .bgroup h3.glab{font-family:\"IBM Plex Mono\",monospace;font-size:.66rem;letter-spacing:.14em;\n  text-transform:uppercase;color:var(--mustard-deep);margin:0 0 14px;display:flex;align-items:center;gap:10px}\n#ts-repo .bgroup h3.glab::after{content:\"\";height:1px;flex:1;background:#F0E0B8}\n#ts-repo .bcard{display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);\n  border-top:4px solid var(--mustard);border-radius:12px;padding:22px;transition:.2s;\n  box-shadow:0 1px 2px rgba(21,42,102,.05)}\n#ts-repo .bcard:hover{transform:translateY(-3px);border-color:var(--mustard);\n  box-shadow:0 22px 40px -26px rgba(21,42,102,.7)}\n#ts-repo .bcard.feature{border-top-width:4px;box-shadow:0 0 0 3px var(--mustard-tint),0 18px 40px -26px rgba(21,42,102,.6)}\n#ts-repo .btop{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}\n#ts-repo .btag{font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.12em;\n  text-transform:uppercase;color:var(--ink-soft)}\n#ts-repo .bsave{font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.08em;\n  text-transform:uppercase;background:var(--mustard);color:var(--navy-deep);padding:4px 9px;\n  border-radius:2px;white-space:nowrap}\n#ts-repo .bcard h4{font-family:\"Newsreader\",Georgia,serif;font-weight:500;font-size:1.35rem;\n  line-height:1.2;letter-spacing:-.015em;color:var(--navy-deep);margin:0 0 8px}\n#ts-repo .bcard > p{font-size:.82rem;color:var(--ink-soft);line-height:1.65;margin-bottom:15px}\n#ts-repo .blist{list-style:none;margin:0 0 20px;padding:0;display:flex;flex-direction:column;gap:7px}\n#ts-repo .blist li{display:flex;align-items:flex-start;gap:9px;font-size:.78rem;color:var(--ink);line-height:1.45}\n#ts-repo .blist li::before{content:\"\";flex:none;width:5px;height:5px;margin-top:6px;\n  background:var(--mustard);transform:rotate(45deg)}\n#ts-repo .bfoot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:12px;\n  flex-wrap:wrap;padding-top:16px;border-top:1px solid var(--line)}\n#ts-repo .bprice{display:flex;align-items:baseline;gap:8px}\n#ts-repo .bprice b{font-family:\"Newsreader\",serif;font-weight:600;font-size:1.7rem;\n  color:var(--navy-deep);letter-spacing:-.02em;line-height:1}\n#ts-repo .bprice s{font-size:.8rem;color:#93A0B8}\n#ts-repo .bbtn{display:inline-flex;align-items:center;gap:8px;padding:11px 18px;border-radius:7px;\n  background:var(--navy);color:#fff;font-family:\"IBM Plex Mono\",monospace;font-size:.66rem;\n  letter-spacing:.08em;text-transform:uppercase;transition:.16s}\n#ts-repo .bbtn:hover{background:var(--mustard);color:var(--navy-deep)}\n#ts-repo .bbtn.in-cart,#ts-repo .bbtn.in-cart:hover,\n#ts-repo .bbtn.purchased,#ts-repo .bbtn.purchased:hover{background:var(--green);color:#fff}\n#ts-repo .bempty{text-align:center;padding:44px 20px;border:1px dashed var(--line);border-radius:4px;\n  color:var(--ink-soft);font-size:.88rem;background:#fff}\n\/* ---- how it works: a real sequence, so the numbering earns its place ---- *\/\n#ts-repo .steps{display:grid;grid-template-columns:repeat(4,1fr);gap:0}\n#ts-repo .step{padding:0 22px}\n#ts-repo .step + .step{border-left:1px solid var(--line)}\n#ts-repo .step .n{font-family:\"IBM Plex Mono\",monospace;font-size:.66rem;letter-spacing:.14em;\n  color:var(--mustard-deep);display:block;margin-bottom:10px}\n#ts-repo .step h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.15rem;line-height:1.25;\n  color:var(--navy-deep);margin:0 0 8px}\n#ts-repo .step p{font-size:.82rem;color:var(--ink-soft);line-height:1.68}\n#ts-repo .step p strong{color:var(--navy)}\n\/* ---- value props ---- *\/\n#ts-repo .props{display:grid;grid-template-columns:repeat(4,1fr);gap:26px}\n#ts-repo .prop{display:flex;flex-direction:column;border-top:2px solid var(--mustard);padding-top:14px}\n#ts-repo .prop i{font-size:15px;color:var(--mustard-deep);line-height:1}\n#ts-repo .prop h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.12rem;line-height:1.28;\n  color:var(--navy-deep);margin:10px 0 8px;min-height:2.56em;text-wrap:balance}\n#ts-repo .prop p{font-size:.8rem;color:var(--ink-soft);line-height:1.62}\n\/* ---- dark panel (why \/ whatsapp) ---- *\/\n#ts-repo .panel{position:relative;overflow:hidden;border-radius:4px;border:1px solid var(--navy-deep);\n  background:linear-gradient(112deg,var(--navy-deep) 0%,#1E3A8A 52%,#2A4DAE 100%)}\n#ts-repo .panel::before{content:\"\";position:absolute;inset:0;pointer-events:none;\n  background-image:radial-gradient(rgba(255,255,255,.075) 1px,transparent 1px);background-size:22px 22px}\n#ts-repo .panel > *{position:relative;z-index:2}\n#ts-repo .panel .eyebrow{color:var(--mustard)}\n#ts-repo .why{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.6fr) minmax(0,1fr);\n  gap:34px;align-items:center;padding:44px}\n#ts-repo .why h2{font-family:\"Newsreader\",Georgia,serif;font-weight:500;\n  font-size:clamp(1.6rem,3vw,2.3rem);line-height:1.1;letter-spacing:-.02em;color:#fff;margin:0}\n#ts-repo .why h2 em{font-style:italic;color:var(--mustard);display:block}\n#ts-repo .why p{font-size:.9rem;color:#C3CEF5;line-height:1.72;margin-top:15px;max-width:44ch}\n#ts-repo .why-btns{display:flex;flex-wrap:wrap;gap:11px;margin-top:24px}\n#ts-repo .why-btns a{display:inline-flex;align-items:center;gap:9px;padding:12px 20px;border-radius:3px;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;transition:.18s}\n#ts-repo .why-btns .b1{background:var(--mustard);color:var(--navy-deep)}\n#ts-repo .why-btns .b1:hover{background:#fff;color:var(--navy-deep)}\n#ts-repo .why-btns .b2{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.26);color:#fff}\n#ts-repo .why-btns .b2:hover{background:rgba(255,255,255,.2);color:#fff}\n#ts-repo .why-stats{display:flex;flex-direction:column;gap:12px}\n#ts-repo .why-stat{padding:13px 15px;border:1px solid rgba(255,255,255,.16);\n  border-left:3px solid var(--mustard);background:rgba(255,255,255,.07);border-radius:0 3px 3px 0}\n#ts-repo .why-stat span{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;\n  letter-spacing:.12em;text-transform:uppercase;color:#9FB0E8}\n#ts-repo .why-stat b{display:block;font-family:\"Newsreader\",serif;font-weight:500;font-size:1.35rem;\n  color:#fff;margin-top:4px;line-height:1}\n\/* ---- WhatsApp panel: the page's own gold, not the navy of the \"why\" panel ---- *\/\n#ts-repo .panel.warm{border-color:#EBD9A8;\n  background:linear-gradient(112deg,var(--mustard-tint) 0%,#FBEDCA 52%,#F6E1AC 100%)}\n#ts-repo .panel.warm::before{background-image:radial-gradient(rgba(138,101,8,.10) 1px,transparent 1px)}\n#ts-repo .panel.warm .eyebrow{color:var(--mustard-deep)}\n#ts-repo .panel.warm .eyebrow::after{background:var(--mustard-deep);opacity:.45}\n#ts-repo .talk-mark{position:absolute;z-index:0;left:50%;top:50%;width:210px;height:210px;\n  transform:translate(-50%,-52%);color:#1F9E52;opacity:.13;pointer-events:none}\n#ts-repo .talk{position:relative;z-index:2;display:grid;grid-template-columns:minmax(0,1.3fr) auto;\n  gap:30px;align-items:center;padding:38px 44px}\n#ts-repo .talk h2{font-family:\"Newsreader\",Georgia,serif;font-weight:500;font-size:clamp(1.5rem,2.6vw,2.1rem);\n  color:var(--navy-deep);margin:0;letter-spacing:-.02em;line-height:1.12}\n#ts-repo .talk h2 em{font-style:italic;color:var(--mustard-deep)}\n#ts-repo .talk p{font-size:.9rem;color:var(--ink-soft);line-height:1.7;margin-top:11px;max-width:46ch}\n#ts-repo .talk-ticks{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:15px;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.62rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}\n#ts-repo .talk-ticks i{color:var(--green);font-size:9px;margin-right:6px}\n#ts-repo .talk-act{position:relative;align-self:center;justify-self:end;display:flex;\n  flex-direction:column;align-items:center;justify-content:center;gap:12px;\n  min-width:270px;padding:26px 18px;text-align:center}\n#ts-repo .talk-btn{position:relative;z-index:1;display:inline-flex;align-items:center;justify-content:center;\n  gap:11px;padding:16px 28px;border-radius:7px;background:#25D366;color:#fff;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;\n  box-shadow:0 14px 30px -14px rgba(37,211,102,.75);transition:.18s}\n#ts-repo .talk-btn:hover{background:#1ebe57;color:#fff;transform:translateY(-2px)}\n#ts-repo .talk-note{position:relative;z-index:1;display:block;font-family:\"IBM Plex Mono\",monospace;\n  font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;color:var(--mustard-deep);margin:0}\n\/* ---- SEO copy ---- *\/\n#ts-repo .about{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr);\n  gap:44px;align-items:stretch}\n#ts-repo .av-wrap{height:100%}\n#ts-repo .about p{font-size:.95rem;color:var(--ink-soft);line-height:1.78}\n#ts-repo .about p + p{margin-top:13px}\n#ts-repo .about strong{color:var(--navy);font-weight:600}\n#ts-repo .av-frame{position:relative;height:100%;min-height:320px;border:1px solid var(--line);\n  border-radius:12px;overflow:hidden;box-shadow:0 26px 60px -30px rgba(21,42,102,.6)}\n#ts-repo .av-frame img{width:100%;height:100%;object-fit:cover;object-position:center}\n#ts-repo .av-frame::after{content:\"\";position:absolute;inset:0;\n  background:linear-gradient(160deg,rgba(21,42,102,.04),rgba(21,42,102,.4))}\n#ts-repo .av-badge{position:absolute;z-index:2;bottom:14px;left:14px;right:14px;\n  background:rgba(255,255,255,.96);border:1px solid var(--line);padding:9px 12px;border-radius:3px;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--navy-deep);display:flex;align-items:center;justify-content:space-between;gap:10px}\n#ts-repo .av-badge i{color:var(--mustard-deep)}\n#ts-repo .seo-cards{display:grid;grid-template-columns:repeat(2,1fr);gap:18px;margin-top:26px}\n#ts-repo .seo-card{background:#fff;border:1px solid var(--line);border-left:4px solid var(--mustard);\n  border-radius:0 4px 4px 0;padding:20px;transition:.2s}\n#ts-repo .seo-card:hover{border-color:var(--mustard);transform:translateY(-2px)}\n#ts-repo .seo-card h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.2rem;color:var(--navy-deep);\n  margin:0 0 8px;display:flex;align-items:center;gap:10px}\n#ts-repo .seo-card h3 img{width:26px;height:26px;object-fit:contain;flex:none}\n#ts-repo .seo-card p{font-size:.8rem;color:var(--ink-soft);line-height:1.7}\n#ts-repo .seo-card .go{display:inline-flex;align-items:center;gap:7px;margin-top:10px;padding:8px 0;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--navy)}\n#ts-repo .seo-card .go:hover{color:var(--mustard-deep)}\n\/* ---- FAQ ---- *\/\n#ts-repo .faq{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start}\n#ts-repo .faq-item{background:#fff;border:1px solid var(--line);border-radius:4px;overflow:hidden;transition:.2s}\n#ts-repo .faq-item:hover{border-color:var(--mustard)}\n#ts-repo .faq-item.open{border-color:var(--mustard);border-left-width:4px}\n#ts-repo .faq-q{display:flex;align-items:flex-start;gap:12px;width:100%;padding:15px 16px;text-align:left;\n  font-size:.9rem;font-weight:600;color:var(--navy-deep);line-height:1.45}\n#ts-repo .faq-q .qm{flex:none;width:20px;height:20px;margin-top:1px;display:grid;place-items:center;\n  border:1px solid var(--mustard);color:var(--mustard-deep);background:var(--mustard-tint);\n  font-size:9px;border-radius:2px;transition:.22s}\n#ts-repo .faq-item.open .qm{background:var(--mustard);color:var(--navy-deep);transform:rotate(135deg)}\n#ts-repo .faq-a{padding:0 16px 16px 48px;font-size:.85rem;color:var(--ink-soft);line-height:1.72}\n\/* ================================================================ MODAL + TOAST *\/\n#ts-repo .modal{position:fixed;inset:0;background:rgba(21,42,102,.6);backdrop-filter:blur(3px);\n  z-index:9999;display:grid;place-items:center;padding:18px;opacity:0;pointer-events:none;transition:opacity .25s}\n#ts-repo .modal.open{opacity:1;pointer-events:auto}\n#ts-repo .modal-card{background:#fff;border-top:4px solid var(--mustard);border-radius:4px;width:100%;\n  max-width:600px;max-height:88vh;display:flex;flex-direction:column;overflow:hidden;\n  transform:scale(.96);transition:transform .25s}\n#ts-repo .modal.open .modal-card{transform:scale(1)}\n#ts-repo .modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;\n  padding:20px 22px;border-bottom:1px solid var(--line)}\n#ts-repo .modal-head h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.35rem;\n  color:var(--navy-deep);margin:0;line-height:1.2}\n#ts-repo .modal-head p{font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.12em;\n  text-transform:uppercase;color:#93A0B8;margin-top:5px}\n#ts-repo .modal-close{color:#93A0B8;font-size:17px;flex:none;padding:2px 4px}\n#ts-repo .modal-close:hover{color:var(--navy)}\n#ts-repo .modal-body{padding:22px;overflow-y:auto;font-size:.85rem;color:var(--ink-soft)}\n#ts-repo .modal-body ul{list-style:none;padding:0;margin:8px 0 0;display:flex;flex-direction:column;gap:7px}\n#ts-repo .modal-body li{display:flex;gap:9px;line-height:1.6}\n#ts-repo .modal-body li::before{content:\"\";flex:none;width:5px;height:5px;margin-top:7px;\n  background:var(--mustard);transform:rotate(45deg)}\n#ts-repo .syl-paper{display:flex;align-items:center;gap:10px;flex-wrap:wrap;\n  font-family:\"Newsreader\",serif;font-weight:500;font-size:1.05rem;color:var(--navy-deep);\n  margin-top:20px;padding-top:14px;border-top:1px solid var(--line)}\n#ts-repo .syl-paper:first-child{margin-top:0;padding-top:0;border-top:0}\n#ts-repo .syl-paper span{font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;letter-spacing:.1em;\n  text-transform:uppercase;color:var(--mustard-deep);background:var(--mustard-tint);\n  border:1px solid #F0E0B8;border-radius:2px;padding:3px 8px}\n#ts-repo .modal-note{background:var(--mustard-tint);border-left:3px solid var(--mustard);\n  padding:12px 14px;border-radius:0 3px 3px 0;font-size:.8rem;color:var(--mustard-deep);margin-top:18px;line-height:1.6}\n#ts-repo .modal-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;\n  padding:16px 22px;border-top:1px solid var(--line);background:var(--off)}\n#ts-repo .btn-ghost{font-family:\"IBM Plex Mono\",monospace;font-size:.66rem;letter-spacing:.08em;\n  text-transform:uppercase;padding:10px 16px;border:1.5px solid var(--line);border-radius:3px;color:var(--ink-soft)}\n#ts-repo .btn-ghost:hover{border-color:var(--navy);color:var(--navy)}\n#ts-repo .toast{position:fixed;bottom:24px;left:24px;z-index:9998;display:flex;align-items:center;gap:12px;\n  background:var(--navy-deep);color:#fff;border-left:4px solid var(--mustard);border-radius:0 3px 3px 0;\n  padding:13px 18px;box-shadow:0 12px 30px rgba(21,42,102,.35);max-width:340px;\n  transform:translateY(50px);opacity:0;pointer-events:none;transition:all .3s}\n#ts-repo .toast.show{transform:translateY(0);opacity:1}\n#ts-repo .toast p{font-size:.8rem;font-weight:600;line-height:1.4}\n\/* ================================================================ UI DECK *\/\n#ts-repo .shot-deck{overflow:hidden;border-radius:4px;box-shadow:0 30px 62px -26px rgba(3,10,40,.75)}\n#ts-repo .shot-track{display:flex;align-items:stretch;transition:transform .72s cubic-bezier(.65,0,.35,1);will-change:transform}\n#ts-repo .shot-slide{flex:0 0 100%;min-width:0;display:flex}\n#ts-repo .shot-dots{display:flex;justify-content:center;gap:4px;margin-top:13px}\n#ts-repo .shot-dot{width:30px;height:20px;display:grid;place-items:center}\n#ts-repo .shot-dot i{display:block;width:7px;height:7px;border-radius:99px;background:rgba(255,255,255,.3);transition:.3s}\n#ts-repo .shot-dot:hover i{background:rgba(255,255,255,.55)}\n#ts-repo .shot-dot.on i{width:22px;background:var(--mustard)}\n#ts-repo .shot-cap{text-align:center;font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;\n  letter-spacing:.1em;text-transform:uppercase;color:#A9B8EC;margin-top:9px;min-height:16px}\n#ts-repo .ui-shot{width:100%;display:flex;flex-direction:column;overflow:hidden;background:#fff}\n#ts-repo .ui-bar{display:flex;align-items:center;gap:6px;padding:9px 12px;background:#101C4A}\n#ts-repo .ui-bar i{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.22);flex:none}\n#ts-repo .ui-bar span{margin-left:8px;font-family:\"IBM Plex Mono\",monospace;font-size:8px;\n  letter-spacing:.04em;color:#8FA3DD;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n#ts-repo .ui-head{background:linear-gradient(158deg,#2F4EBE 0%,#3A5BCE 55%,#4468DC 100%);padding:13px 14px 0}\n#ts-repo .ui-eyebrow{font-family:\"IBM Plex Mono\",monospace;font-size:7px;letter-spacing:.18em;\n  text-transform:uppercase;color:#FFE0A3}\n#ts-repo .ui-head h5{font-family:\"Newsreader\",serif;font-weight:500;font-size:13.5px;color:#fff;\n  letter-spacing:-.01em;margin:5px 0 10px;line-height:1.2}\n#ts-repo .ui-tabs{display:flex;gap:5px}\n#ts-repo .ui-tab{position:relative;padding:7px 11px 8px;border-radius:3px 3px 0 0;\n  font-family:\"IBM Plex Mono\",monospace;font-size:8px;letter-spacing:.05em;text-transform:uppercase;\n  color:#E4EBFF;background:rgba(12,25,74,.24);border:1px solid rgba(255,255,255,.18);border-bottom:0;white-space:nowrap}\n#ts-repo .ui-tab.on{background:#fff;color:#152A66;border-color:transparent}\n#ts-repo .ui-tab.on::before{content:\"\";position:absolute;left:8px;right:8px;top:0;height:2.5px;background:#E0A82E}\n#ts-repo .ui-rule{height:3px;background:#E0A82E}\n#ts-repo .ui-body{flex:1;padding:13px 14px 16px;background:#F4F7FD}\n#ts-repo .ui-meta{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:11px}\n#ts-repo .ui-badge{font-family:\"IBM Plex Mono\",monospace;font-size:7px;letter-spacing:.06em;\n  text-transform:uppercase;padding:4px 8px;border-radius:2px;white-space:nowrap}\n#ts-repo .ui-badge.pyq{background:#152A66;color:#fff}\n#ts-repo .ui-badge.ch{background:#E0A82E;color:#3A2A02;overflow:hidden;text-overflow:ellipsis;min-width:0}\n#ts-repo .ui-stem{font-family:\"Newsreader\",Georgia,serif;font-size:12.5px;line-height:1.6;color:#161b26;margin-bottom:11px}\n#ts-repo .ui-stem em{font-style:normal;font-weight:600;color:#8A6508;margin-right:5px}\n#ts-repo .ui-opt{display:flex;gap:8px;align-items:flex-start;font-size:10px;line-height:1.45;padding:8px 10px;\n  border:1.5px solid #DFE6F3;border-radius:3px;background:#fff;margin-bottom:6px;color:#334155}\n#ts-repo .ui-opt .k{font-family:\"IBM Plex Mono\",monospace;color:#5B6B85;flex:none}\n#ts-repo .ui-opt.right{border-color:#0B8457;background:#F0FDF6}\n#ts-repo .ui-opt .m{margin-left:auto;font-family:\"IBM Plex Mono\",monospace;font-size:7px;letter-spacing:.1em;\n  text-transform:uppercase;color:#0B8457;white-space:nowrap;align-self:center}\n#ts-repo .ui-expl{border:1px solid #DFE6F3;border-left:3px solid #E0A82E;border-radius:0 3px 3px 0;\n  background:#FCFDFF;padding:9px 11px;margin-top:10px;font-size:9.5px;line-height:1.6;color:#334155}\n#ts-repo .ui-expl .h{font-family:\"IBM Plex Mono\",monospace;font-size:7px;letter-spacing:.14em;\n  text-transform:uppercase;color:#5B6B85;margin-bottom:4px}\n#ts-repo .ui-expl b{color:#1E3A8A}\n#ts-repo .ui-ready{display:flex;align-items:center;gap:14px;padding:13px 15px;\n  background:linear-gradient(150deg,#152A66,#1E3A8A 70%,#2A4DAE);border-radius:3px}\n#ts-repo .ui-ring{position:relative;width:74px;height:74px;flex:none}\n#ts-repo .ui-ring svg{width:74px;height:74px;transform:rotate(-90deg)}\n#ts-repo .ui-ring circle{fill:none;stroke-width:7}\n#ts-repo .ui-ring circle.bg{stroke:rgba(255,255,255,.15)}\n#ts-repo .ui-ring circle.fg{stroke:#E0A82E;stroke-linecap:round}\n#ts-repo .ui-ring span{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;\n  justify-content:center;font-family:\"Newsreader\",serif;font-size:22px;font-weight:600;color:#E0A82E;line-height:1}\n#ts-repo .ui-ring span small{font-family:\"IBM Plex Mono\",monospace;font-size:6px;letter-spacing:.14em;\n  text-transform:uppercase;color:#BFDBFE;margin-top:4px}\n#ts-repo .ui-ready p{font-size:10.5px;color:#DBEAFE;line-height:1.55;margin:0}\n#ts-repo .ui-ready p b{color:#fff}\n#ts-repo .ui-ready p em{font-style:normal;display:block;margin-top:5px;font-size:9px;color:#9FB3EA}\n#ts-repo .ui-sec{font-family:\"IBM Plex Mono\",monospace;font-size:7.5px;letter-spacing:.14em;\n  text-transform:uppercase;color:#5B6B85;margin:14px 0 9px}\n#ts-repo .ui-sec:first-child{margin-top:0}\n#ts-repo .ui-sec b{color:#8A6508}\n#ts-repo .ui-leak{display:grid;grid-template-columns:minmax(0,1fr) 78px 40px;gap:9px;align-items:center;margin-bottom:8px}\n#ts-repo .ui-leak .n{font-size:9.5px;font-weight:600;color:#0F172A;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n#ts-repo .ui-leak .t{height:8px;background:#EEF2F9;overflow:hidden}\n#ts-repo .ui-leak .t i{display:block;height:100%}\n#ts-repo .ui-leak .v{font-family:\"IBM Plex Mono\",monospace;font-size:9.5px;font-weight:600;text-align:right}\n#ts-repo .ui-rev{display:flex;align-items:center;gap:9px;background:#fff;border-left:3px solid #E0A82E;\n  padding:8px 10px;margin-bottom:6px}\n#ts-repo .ui-rev .n{font-size:9.5px;color:#334155;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n#ts-repo .ui-rev .d{margin-left:auto;flex:none;background:#FDF6E6;border:1px solid #F0E0B8;color:#8A6508;\n  padding:2px 8px;font-family:\"IBM Plex Mono\",monospace;font-size:7px;white-space:nowrap}\n#ts-repo table.ui-hm{width:100%;border-collapse:collapse;background:#fff}\n#ts-repo .ui-hm th{background:#1E3A8A;color:#fff;font-family:\"IBM Plex Mono\",monospace;font-size:7px;\n  padding:5px 2px;text-align:center;font-weight:500}\n#ts-repo .ui-hm th.l{text-align:left;padding-left:9px}\n#ts-repo .ui-hm th.tot{background:#152A66}\n#ts-repo .ui-hm td{font-family:\"IBM Plex Mono\",monospace;font-size:8.5px;padding:5px 2px;text-align:center;\n  color:#8A6508;border-bottom:1px solid #F1F5FB;font-variant-numeric:tabular-nums}\n#ts-repo .ui-hm td.l{text-align:left;padding-left:9px;color:#0F172A;background:#FBFCFE;\n  font-family:\"IBM Plex Sans\",sans-serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:0;width:40%}\n#ts-repo .ui-hm td.tot{background:#F4F7FD;color:#152A66}\n#ts-repo .ui-hm td.nil{color:#C7D0E0}\n#ts-repo .ui-legend{display:flex;align-items:center;gap:4px;margin-top:10px;\n  font-family:\"IBM Plex Mono\",monospace;font-size:7px;letter-spacing:.1em;text-transform:uppercase;color:#5B6B85}\n#ts-repo .ui-legend i{width:22px;height:9px;border:1px solid rgba(0,0,0,.05)}\n\/* ================================================================ RESPONSIVE *\/\n@media(max-width:1080px){\n  #ts-repo .why{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:28px 32px;padding:36px}\n  #ts-repo .why-copy{grid-column:1 \/ -1}\n  #ts-repo .why p{max-width:none}\n  #ts-repo .steps{grid-template-columns:1fr 1fr;row-gap:30px}\n  #ts-repo .step:nth-child(3){border-left:none}\n  #ts-repo .props{grid-template-columns:1fr 1fr}\n}\n@media(max-width:900px){\n  #ts-repo .why{grid-template-columns:minmax(0,1fr);padding:32px 24px}\n  #ts-repo .talk{grid-template-columns:minmax(0,1fr);padding:30px 24px;gap:22px}\n  #ts-repo .talk-act{justify-self:stretch;min-width:0}\n  #ts-repo .about{grid-template-columns:1fr;gap:30px}\n  #ts-repo .av-wrap{max-width:480px;margin:0 auto}\n  #ts-repo .seo-cards{grid-template-columns:1fr}\n  #ts-repo .faq{grid-template-columns:1fr}\n}\n@media(max-width:700px){\n  #ts-repo .ts-hero__inner{padding:44px 22px 40px}\n  #ts-repo .ts-facts{margin-top:24px}\n  #ts-repo .ts-fact{padding-right:16px;margin-right:16px}\n  #ts-repo .mshot{width:100%;max-width:330px;margin:0 auto}\n  #ts-repo .ts-tag{max-width:none}\n  #ts-repo .ts-grid{grid-template-columns:1fr}\n  #ts-repo .ts-rowlab{width:100%;margin-bottom:2px}\n  #ts-repo .ts-tabs{flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x proximity}\n  #ts-repo .ts-tab{scroll-snap-align:start}\n  #ts-repo .ts-row{flex-wrap:wrap}\n  #ts-repo .steps{grid-template-columns:1fr;row-gap:24px}\n  #ts-repo .step{padding:0}\n  #ts-repo .step + .step{border-left:0;padding-top:24px;border-top:1px solid var(--line)}\n  #ts-repo .props{grid-template-columns:1fr}\n  #ts-repo .toast{left:14px;right:14px;bottom:86px;max-width:none}\n  #ts-repo .talk-btn{width:100%;justify-content:center}\n  #ts-repo .talk-mark{width:150px;height:150px}\n  #ts-repo .why-btns a{flex:1 1 100%;justify-content:center}\n  \/* ---- touch: nothing tappable under ~34px, and no min-width may\n          out-run a 320px screen ---- *\/\n  #ts-repo .wrap{padding:0 16px}\n  #ts-repo .ts-notice{padding:14px 16px;gap:18px}\n  #ts-repo .ts-notice .tx{min-width:0}\n  #ts-repo .mshot{width:100%;max-width:100%}\n  #ts-repo .chip{padding:9px 14px}\n  #ts-repo .ts-tab{padding:9px 15px 9px 9px}\n  #ts-repo .ts-syl{padding:11px 15px}\n  #ts-repo .fchip{padding:8px 12px}\n  #ts-repo .ts-clearall{display:inline-block;padding:7px 2px}\n  #ts-repo .wa-btn{padding:11px 16px}\n  #ts-repo .wa-btn.wa-sm{padding:10px 14px;font-size:.64rem}\n  #ts-repo .ts-buy,#ts-repo .bbtn{padding:12px 16px}\n  #ts-repo .modal-close{padding:8px 10px;font-size:20px;line-height:1}\n  #ts-repo .btn-ghost{padding:12px 16px}\n  #ts-repo .shot-dot{height:30px}\n  #ts-repo .modal{padding:56px 12px 16px}\n  #ts-repo .modal-card{max-height:calc(100vh - 72px)}\n  #ts-repo .modal-body{padding:18px}\n  #ts-repo .modal-foot{flex-direction:column-reverse;align-items:stretch;gap:10px}\n  #ts-repo .modal-foot .btn-ghost,#ts-repo .modal-foot .wa-btn{justify-content:center;text-align:center}\n  #ts-repo .bcard{padding:18px}\n  #ts-repo .ts-head{padding:14px 16px}\n  #ts-repo .ts-headact{width:100%}\n  #ts-repo .ts-headact .ts-syl{flex:1;justify-content:center}\n}\n@media(prefers-reduced-motion:reduce){#ts-repo *{transition:none!important;animation:none!important}}\n\n\/* ================================================================ EXAM PAGE ADDITIONS *\/\n\/* ---- hero: copy on the left, the exam at a glance on the right ---- *\/\n#ts-repo .ts-hero__inner{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,.75fr);gap:44px;align-items:center;\n  padding:40px 22px 50px}\n#ts-repo .ts-hero__panel{max-width:640px}\n#ts-repo .ts-crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 22px;padding:0;list-style:none;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft)}\n#ts-repo .ts-crumbs li{display:flex;align-items:center;gap:6px}\n#ts-repo .ts-crumbs li + li::before{content:\"\/\";color:#9AA8C4}\n#ts-repo .ts-crumbs a{color:var(--navy);border-bottom:1px solid rgba(30,58,138,.25)}\n#ts-repo .ts-crumbs a:hover{color:var(--mustard-deep);border-color:var(--mustard)}\n#ts-repo .ts-crumbs [aria-current]{color:var(--navy-deep);font-weight:600}\n#ts-repo .ts-h1{font-size:clamp(2.1rem,5vw,3.5rem);line-height:1.02}\n#ts-repo .ts-h1 em{display:inline}\n#ts-repo .ts-fact b small{font-family:\"IBM Plex Mono\",monospace;font-size:.55rem;letter-spacing:.08em;color:var(--ink-soft);margin-left:2px}\n#ts-repo .ts-glance{background:rgba(255,255,255,.97);border:1px solid var(--line);border-top:4px solid var(--mustard);\n  border-radius:12px;box-shadow:0 30px 60px -34px rgba(21,42,102,.75);overflow:hidden;align-self:center}\n#ts-repo .gl-head{display:flex;align-items:center;gap:12px;padding:16px 18px 14px;border-bottom:1px solid var(--line)}\n#ts-repo .gl-head img{width:42px;height:42px;object-fit:contain;flex:none;border:1px solid var(--line);border-radius:6px;padding:4px;background:#fff}\n#ts-repo .gl-head b{display:block;font-family:\"Newsreader\",serif;font-weight:500;font-size:1.12rem;color:var(--navy-deep);line-height:1.2}\n#ts-repo .gl-head span{display:block;font-size:.7rem;color:var(--ink-soft);margin-top:2px;line-height:1.35}\n#ts-repo .ed{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 18px;\n  background:var(--mustard-tint);border-bottom:1px solid #F0E0B8}\n#ts-repo .ed .ed-lab{font-family:\"IBM Plex Mono\",monospace;font-size:.56rem;letter-spacing:.13em;text-transform:uppercase;color:var(--mustard-deep)}\n#ts-repo .ed .ed-date{display:block;font-family:\"Newsreader\",serif;font-size:1.05rem;font-weight:500;color:var(--navy-deep);margin-top:2px}\n#ts-repo .ed .ed-note{display:block;font-size:.62rem;color:var(--ink-soft);margin-top:2px}\n#ts-repo .ed .ed-left{flex:none;text-align:right;font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;letter-spacing:.08em;\n  text-transform:uppercase;color:var(--ink-soft)}\n#ts-repo .ed .ed-left b{display:block;font-family:\"Newsreader\",serif;font-size:2rem;font-weight:600;letter-spacing:-.02em;\n  line-height:1;color:var(--navy);text-transform:none}\n#ts-repo .ed.tbd .ed-left{display:none}\n#ts-repo .gl-papers{list-style:none;margin:0;padding:6px 8px}\n#ts-repo .gl-papers li a{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:7px;transition:.15s}\n#ts-repo .gl-papers li a:hover{background:var(--off)}\n#ts-repo .gl-papers .pl{flex:none;min-width:64px;font-family:\"IBM Plex Mono\",monospace;font-size:.56rem;letter-spacing:.1em;\n  text-transform:uppercase;color:var(--mustard-deep);background:var(--mustard-tint);border:1px solid #F0E0B8;border-radius:3px;\n  padding:3px 7px;text-align:center}\n#ts-repo .gl-papers .pt{flex:1;min-width:0;font-size:.76rem;color:var(--ink);line-height:1.3;\n  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n#ts-repo .gl-papers .pc{flex:none;font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;color:var(--ink-soft)}\n#ts-repo .gl-mock{display:block;margin:4px 12px 12px;padding:12px 14px;border-radius:9px;color:#fff;\n  background:linear-gradient(120deg,var(--navy-deep),var(--navy) 65%,#2A4DAE)}\n#ts-repo .gl-mock:hover{color:#fff;filter:brightness(1.07)}\n#ts-repo .gl-mock .k{display:flex;align-items:center;gap:7px;font-family:\"IBM Plex Mono\",monospace;font-size:.56rem;\n  letter-spacing:.13em;text-transform:uppercase;color:var(--mustard)}\n#ts-repo .gl-mock .lmn-title{display:block;font-family:\"Newsreader\",serif;font-size:1rem;font-weight:500;margin-top:5px;line-height:1.25}\n#ts-repo .gl-mock .lmn-when{display:block;font-size:.68rem;color:#BFCBF3;margin-top:3px}\n#ts-repo .gl-mock .lmn-cd{display:flex;gap:6px;margin-top:9px}\n#ts-repo .lmn-cd div{flex:1;text-align:center;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.16);border-radius:5px;padding:5px 2px}\n#ts-repo .lmn-cd b{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.95rem;font-weight:600;color:#fff;line-height:1.1}\n#ts-repo .lmn-cd span{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.5rem;letter-spacing:.1em;text-transform:uppercase;color:#9FB0E8}\n#ts-repo .lm-dot{width:8px;height:8px;border-radius:50%;background:#E5484D;flex:none;box-shadow:0 0 0 0 rgba(229,72,77,.6);\n  animation:pe-ping 1.8s infinite}\n@keyframes pe-ping{0%{box-shadow:0 0 0 0 rgba(229,72,77,.55)}70%{box-shadow:0 0 0 8px rgba(229,72,77,0)}100%{box-shadow:0 0 0 0 rgba(229,72,77,0)}}\n\/* ---- filter bar: no exam row any more, so one tidy strip ---- *\/\n#ts-repo .ts-bar__inner{display:flex;flex-direction:column;gap:0}\n#ts-repo .chip em{font-style:normal;margin-left:6px;font-size:.62rem;opacity:.65}\n#ts-repo .chip.jump{border-style:dashed;color:var(--navy);display:inline-flex;align-items:center;gap:6px}\n#ts-repo .chip.jump:hover{background:var(--mustard-tint)}\n#ts-repo .chip.jump i{font-size:.6rem;color:var(--mustard-deep)}\n#ts-repo .chip.jump.live i{color:#E5484D}\n#ts-repo .ts-chips .sep{width:1px;align-self:stretch;background:var(--line);margin:2px 4px}\n\/* ---- \"this card is inside a bundle\" ---- *\/\n#ts-repo .ts-inb{display:flex;align-items:center;gap:8px;width:100%;margin:0 0 12px;padding:7px 10px;border-radius:7px;\n  background:#EEF3FF;border:1px solid #D5E0FA;color:var(--navy);font-size:.7rem;line-height:1.35;text-align:left;transition:.15s}\n#ts-repo .ts-inb:hover{background:#E1E9FE;border-color:var(--navy)}\n#ts-repo .ts-inb i{flex:none;font-size:.7rem;color:var(--mustard-deep)}\n#ts-repo .ts-inb b{font-weight:600}\n#ts-repo .ts-secb{margin-left:auto;display:inline-flex;align-items:center;gap:7px;font-family:\"IBM Plex Mono\",monospace;\n  font-size:.62rem;letter-spacing:.06em;text-transform:uppercase;color:var(--navy);background:#fff;border:1.5px solid var(--line);\n  border-radius:100px;padding:6px 12px;transition:.15s}\n#ts-repo .ts-secb:hover{border-color:var(--mustard);background:var(--mustard-tint)}\n#ts-repo .ts-secb i{color:var(--mustard-deep)}\n#ts-repo .ts-secb em{font-style:normal;color:var(--green);font-weight:600}\n@media(max-width:700px){#ts-repo .ts-secb{margin-left:0}}\n\/* ---- bundles: show the saving, not just say it ---- *\/\n#ts-repo .bcmp{margin:0 0 16px;padding:11px 12px;border:1px dashed #E7D3A2;border-radius:8px;background:#FFFCF4}\n#ts-repo .bcmp-row{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-size:.72rem;color:var(--ink-soft)}\n#ts-repo .bcmp-row s{font-family:\"IBM Plex Mono\",monospace;color:#93A0B8}\n#ts-repo .bcmp-row b{font-family:\"IBM Plex Mono\",monospace;color:var(--navy-deep)}\n#ts-repo .bcmp-bar{height:7px;border-radius:99px;background:#EEE3C6;margin:7px 0;overflow:hidden}\n#ts-repo .bcmp-bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--navy),var(--mustard))}\n#ts-repo .bcard.is-soon .bbtn{background:var(--ink-soft)}\n#ts-repo .bcard.is-soon .bbtn:hover{background:var(--navy-deep);color:#fff}\n#ts-repo .bcard{position:relative}\n#ts-repo .bcard.feature::before{content:\"Best value\";position:absolute;top:-13px;left:22px;font-family:\"IBM Plex Mono\",monospace;\n  font-size:.56rem;letter-spacing:.12em;text-transform:uppercase;color:#fff;background:var(--navy);border-radius:3px;padding:5px 10px;\n  box-shadow:0 6px 14px -8px rgba(21,42,102,.9)}\n\/* validity line (was its own block on the common page) *\/\n#ts-repo .ts-valid,#ts-repo .b-valid{display:flex;align-items:center;gap:7px;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.09em;\n  text-transform:uppercase;color:var(--mustard-deep);background:var(--mustard-tint);\n  border:1px solid #F0E0B8;border-radius:3px;padding:6px 9px;line-height:1.3}\n#ts-repo .ts-valid{margin:0 0 8px}\n#ts-repo .b-valid{margin:0 0 16px}\n#ts-repo .ts-valid i,#ts-repo .b-valid i{flex:none;font-size:9px;opacity:.85}\n#ts-repo .bcard.pulse{animation:pe-pulse 1.6s ease}\n@keyframes pe-pulse{0%,100%{box-shadow:0 0 0 0 rgba(224,168,46,0)}25%{box-shadow:0 0 0 6px rgba(224,168,46,.55)}}\n#ts-repo .bhint{display:flex;align-items:center;gap:10px;justify-content:center;flex-wrap:wrap;margin:24px auto 0;max-width:640px;\n  font-size:.8rem;color:var(--ink-soft);text-align:center}\n#ts-repo .bhint i{color:var(--mustard-deep)}\n\/* ================================================================ LIVE MOCKS *\/\n#ts-repo .sec.lm{background:linear-gradient(180deg,#F2F5FC 0,#fff 70%)}\n#ts-repo .lm .eyebrow{justify-content:flex-start}\n#ts-repo .lm-grid{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:26px;align-items:start}\n#ts-repo .lm-card{position:sticky;top:calc(var(--ts-top) + var(--ts-barh,60px) + 16px);border-radius:14px;overflow:hidden;color:#fff;\n  background:linear-gradient(140deg,var(--navy-deep) 0%,var(--navy) 55%,#2A4DAE 100%);\n  box-shadow:0 30px 60px -32px rgba(10,20,60,.8);padding:24px}\n#ts-repo .lm-card::before{content:\"\";position:absolute;inset:0;pointer-events:none;\n  background-image:radial-gradient(rgba(255,255,255,.07) 1px,transparent 1px);background-size:20px 20px}\n#ts-repo .lm-card > *{position:relative}\n#ts-repo .lm-badge{display:inline-flex;align-items:center;gap:8px;font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;\n  letter-spacing:.14em;text-transform:uppercase;color:var(--navy-deep);background:var(--mustard);border-radius:100px;padding:5px 11px}\n#ts-repo .lm-card h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.5rem;line-height:1.15;letter-spacing:-.015em;\n  margin:14px 0 6px;color:#fff}\n#ts-repo .lm-card > p{font-size:.84rem;color:#C3CEF5;line-height:1.65}\n#ts-repo .lm-next{margin:18px 0;padding:14px;border-radius:10px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16)}\n#ts-repo .lm-next .k{display:flex;align-items:center;gap:7px;font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;\n  letter-spacing:.13em;text-transform:uppercase;color:var(--mustard)}\n#ts-repo .lm-next .lmn-title{display:block;font-family:\"Newsreader\",serif;font-size:1.12rem;margin-top:6px;line-height:1.25}\n#ts-repo .lm-next .lmn-when{display:block;font-size:.72rem;color:#BFCBF3;margin-top:3px}\n#ts-repo .lm-next .lmn-cd{display:flex;gap:7px;margin-top:11px}\n#ts-repo .lm-next .lmn-cd b{font-size:1.25rem}\n#ts-repo [data-lm-next].is-live .k{color:#FF9A9D}\n#ts-repo [data-lm-next].over .lmn-cd{display:none}\n#ts-repo .lm-feat{list-style:none;margin:0 0 18px;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:9px 14px}\n#ts-repo .lm-feat li{display:flex;align-items:flex-start;gap:8px;font-size:.76rem;color:#DCE4FB;line-height:1.4}\n#ts-repo .lm-feat i{flex:none;margin-top:3px;font-size:.7rem;color:var(--mustard)}\n#ts-repo .lm-buy{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;\n  padding-top:16px;border-top:1px solid rgba(255,255,255,.16)}\n#ts-repo .lm-buy .ts-price b{color:#fff;font-size:1.6rem}\n#ts-repo .lm-buy .ts-price s{color:#93A6DE}\n#ts-repo .lm-buy .ts-price i{color:#7EE2B8}\n#ts-repo .lm-buy .ts-tbd{color:#C3CEF5}\n#ts-repo .lm-enroll{display:inline-flex;align-items:center;gap:8px;padding:12px 18px;border-radius:7px;background:var(--mustard);\n  color:var(--navy-deep);font-family:\"IBM Plex Mono\",monospace;font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;\n  font-weight:600;transition:.16s}\n#ts-repo .lm-enroll:hover{background:#fff;color:var(--navy-deep)}\n#ts-repo .lm-enroll.in-cart,#ts-repo .lm-enroll.purchased{background:var(--green);color:#fff}\n#ts-repo .lm-fine{margin-top:12px;font-size:.66rem;color:#9FB0E8;line-height:1.55}\n#ts-repo .lm-sched{background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden;\n  box-shadow:0 1px 2px rgba(21,42,102,.05)}\n#ts-repo .lm-schedhead{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;\n  padding:16px 20px;border-bottom:1px solid var(--line);background:var(--off)}\n#ts-repo .lm-schedhead h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.25rem;color:var(--navy-deep);margin:0}\n#ts-repo .lm-schedhead span{font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft)}\n#ts-repo .lm-list{list-style:none;margin:0;padding:0}\n#ts-repo .lm-row{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:16px;align-items:start;padding:16px 20px;\n  border-bottom:1px solid var(--line);position:relative}\n#ts-repo .lm-row:last-child{border-bottom:0}\n#ts-repo .lm-row.nx{background:linear-gradient(90deg,var(--mustard-tint),#fff 70%)}\n#ts-repo .lm-row.nx::before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--mustard)}\n#ts-repo .lm-row.live{background:#FFF5F5}\n#ts-repo .lm-row.live::before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:4px;background:#E5484D}\n#ts-repo .lm-row.done{opacity:.62}\n#ts-repo .lm-date{text-align:center;border:1px solid var(--line);border-radius:9px;background:#fff;padding:7px 4px 6px;line-height:1}\n#ts-repo .lm-date b{display:block;font-family:\"Newsreader\",serif;font-size:1.55rem;font-weight:600;color:var(--navy-deep)}\n#ts-repo .lm-date span{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--mustard-deep);margin-top:4px}\n#ts-repo .lm-date em{display:block;font-style:normal;font-size:.58rem;color:var(--ink-soft);margin-top:3px}\n#ts-repo .lm-n{font-family:\"IBM Plex Mono\",monospace;font-size:.56rem;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-soft)}\n#ts-repo .lm-info h4{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.08rem;line-height:1.25;color:var(--navy-deep);margin:3px 0 4px}\n#ts-repo .lm-meta{font-family:\"IBM Plex Mono\",monospace;font-size:.62rem;letter-spacing:.04em;color:var(--navy)}\n#ts-repo .lm-cov{font-size:.74rem;color:var(--ink-soft);margin-top:4px;line-height:1.5}\n#ts-repo .lm-time{font-size:.7rem;color:var(--ink-soft);margin-top:6px}\n#ts-repo .lm-time i{color:var(--mustard-deep);margin-right:4px}\n#ts-repo .lm-st{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;font-family:\"IBM Plex Mono\",monospace;font-size:.56rem;\n  letter-spacing:.08em;text-transform:uppercase;border-radius:100px;padding:5px 10px;border:1px solid var(--line);color:var(--ink-soft);background:#fff}\n#ts-repo .lm-st.up{color:var(--navy);border-color:#C9D5F3}\n#ts-repo .lm-row.nx .lm-st.up{background:var(--navy);border-color:var(--navy);color:#fff}\n#ts-repo .lm-st.live{background:#E5484D;border-color:#E5484D;color:#fff}\n#ts-repo .lm-st.live i{width:6px;height:6px;border-radius:50%;background:#fff;animation:pe-ping 1.4s infinite}\n#ts-repo .lm-st.done{color:var(--green);border-color:#BFE3D2}\n#ts-repo .lm-how{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin-top:28px;border:1px solid var(--line);\n  border-radius:12px;background:#fff;overflow:hidden}\n#ts-repo .lm-how div{padding:16px 18px}\n#ts-repo .lm-how div + div{border-left:1px solid var(--line)}\n#ts-repo .lm-how b{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;letter-spacing:.13em;text-transform:uppercase;color:var(--mustard-deep)}\n#ts-repo .lm-how h4{font-family:\"Newsreader\",serif;font-weight:500;font-size:1rem;color:var(--navy-deep);margin:6px 0 4px}\n#ts-repo .lm-how p{font-size:.74rem;color:var(--ink-soft);line-height:1.55}\n\/* ================================================================ OTHER EXAMS *\/\n#ts-repo .ox{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:22px}\n#ts-repo .ox a{display:flex;flex-direction:column;gap:8px;background:#fff;border:1px solid var(--line);border-left:4px solid var(--mustard);\n  border-radius:0 6px 6px 0;padding:18px;transition:.18s}\n#ts-repo .ox a:hover{border-color:var(--mustard);transform:translateY(-2px);color:inherit}\n#ts-repo .ox h3{display:flex;align-items:center;gap:10px;font-family:\"Newsreader\",serif;font-weight:500;font-size:1.12rem;color:var(--navy-deep);margin:0}\n#ts-repo .ox h3 img{width:26px;height:26px;object-fit:contain;flex:none}\n#ts-repo .ox p{font-size:.78rem;color:var(--ink-soft);line-height:1.6}\n#ts-repo .ox .go{margin-top:auto;font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:var(--navy)}\n#ts-repo .seo-cards{grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr))}\n#ts-repo .seo-card .go{background:none}\n\/* ================================================================ RESPONSIVE *\/\n@media(max-width:1000px){\n  #ts-repo .ts-hero__inner{grid-template-columns:minmax(0,1fr);gap:26px}\n  #ts-repo .ts-glance{max-width:560px}\n  #ts-repo .lm-grid{grid-template-columns:minmax(0,1fr)}\n  #ts-repo .lm-card{position:relative;top:auto}\n  #ts-repo .lm-how{grid-template-columns:1fr 1fr}\n  #ts-repo .lm-how div:nth-child(3){border-left:0}\n  #ts-repo .lm-how div:nth-child(n+3){border-top:1px solid var(--line)}\n  #ts-repo .ox{grid-template-columns:1fr}\n}\n@media(max-width:700px){\n  #ts-repo .ts-hero__inner{padding:28px 16px 34px}\n  #ts-repo .lm-card{padding:20px 18px}\n  #ts-repo .lm-feat{grid-template-columns:1fr}\n  #ts-repo .lm-row{grid-template-columns:54px minmax(0,1fr);gap:12px;padding:14px 16px}\n  #ts-repo .lm-side{grid-column:2}\n  #ts-repo .lm-how{grid-template-columns:1fr}\n  #ts-repo .lm-how div + div{border-left:0;border-top:1px solid var(--line)}\n  #ts-repo .lm-buy{flex-direction:column;align-items:stretch}\n  #ts-repo .lm-enroll{justify-content:center;padding:14px 18px}\n  #ts-repo .ts-inb{padding:9px 10px}\n  #ts-repo .ts-row{gap:8px}\n  #ts-repo .ts-chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}\n  #ts-repo .ts-chips::-webkit-scrollbar{display:none}\n  #ts-repo .chip{flex:none}\n}\n\/* ================================================================ BUNDLE POP-UP (lives on <body>) *\/\n#pe-up{--navy:#1E3A8A;--navy-deep:#152A66;--mustard:#E0A82E;--mustard-deep:#8A6508;--mustard-tint:#FDF6E6;--off:#F7F9FC;\n  --ink:#16233F;--ink-soft:#5A6784;--line:#DFE5F0;--green:#0B8457;\n  position:fixed;inset:0;z-index:100050;display:grid;place-items:center;padding:16px;\n  background:rgba(13,26,66,.62);backdrop-filter:blur(4px);opacity:0;transition:opacity .22s;\n  font-family:\"IBM Plex Sans\",system-ui,sans-serif;color:var(--ink);line-height:1.5;text-align:left}\n#pe-up[hidden]{display:none!important}\n#pe-up.open{opacity:1}\n#pe-up *,#pe-up *::before,#pe-up *::after{box-sizing:border-box}\n#pe-up button{font-family:inherit;cursor:pointer;border:0;background:none;color:inherit;margin:0;-webkit-appearance:none;appearance:none}\n#pe-up :focus-visible{outline:3px solid var(--mustard);outline-offset:2px}\n#pe-up .up-card{width:100%;max-width:560px;max-height:calc(100vh - 32px);display:flex;flex-direction:column;background:#fff;\n  border-top:4px solid var(--mustard);border-radius:12px;overflow:hidden;box-shadow:0 40px 80px -30px rgba(5,12,40,.75);\n  transform:translateY(10px) scale(.98);transition:transform .25s}\n#pe-up.open .up-card{transform:none}\n#pe-up .up-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:18px 20px 14px;border-bottom:1px solid var(--line)}\n#pe-up .up-eye{margin:0;font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--mustard-deep)}\n#pe-up h3{margin:4px 0 0;font-family:\"Newsreader\",Georgia,serif;font-weight:500;font-size:1.42rem;line-height:1.15;letter-spacing:-.015em;color:var(--navy-deep)}\n#pe-up .up-x{flex:none;font-size:18px;color:#93A0B8;padding:4px 8px;line-height:1}\n#pe-up .up-x:hover{color:var(--navy)}\n#pe-up .up-body{padding:16px 20px;overflow-y:auto}\n#pe-up .up-pick{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--off)}\n#pe-up .up-pick .lab{flex:none;font-family:\"IBM Plex Mono\",monospace;font-size:.55rem;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--ink-soft);background:#fff;border:1px solid var(--line);border-radius:3px;padding:3px 7px}\n#pe-up .up-pick .nm{flex:1;min-width:0;font-size:.84rem;font-weight:600;color:var(--navy-deep);line-height:1.3}\n#pe-up .up-pick .pr{flex:none;font-family:\"Newsreader\",serif;font-size:1.15rem;font-weight:600;color:var(--navy-deep)}\n#pe-up .up-offers{display:flex;flex-direction:column;gap:12px;margin-top:12px}\n#pe-up .up-offer{border:1.5px solid var(--mustard);border-radius:10px;padding:14px 16px;background:linear-gradient(180deg,#FFFCF3,#fff 60%)}\n#pe-up .up-offer.best{box-shadow:0 0 0 3px var(--mustard-tint)}\n#pe-up .up-otop{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}\n#pe-up .up-otop .tag{font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft)}\n#pe-up .up-otop .save{font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;letter-spacing:.08em;text-transform:uppercase;\n  background:var(--mustard);color:var(--navy-deep);border-radius:2px;padding:4px 8px}\n#pe-up h4{margin:8px 0 8px;font-family:\"Newsreader\",Georgia,serif;font-weight:500;font-size:1.22rem;line-height:1.2;color:var(--navy-deep)}\n#pe-up .up-list{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:5px}\n#pe-up .up-list li{display:flex;align-items:flex-start;gap:8px;font-size:.78rem;color:var(--ink);line-height:1.4}\n#pe-up .up-list li::before{content:\"\";flex:none;width:14px;height:14px;margin-top:1px;border-radius:50%;\n  background:var(--green) url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='4'%3E%3Cpath d='M5 12l5 5 9-10'\/%3E%3C\/svg%3E\") center\/9px no-repeat}\n#pe-up .up-list li span{flex:1;min-width:0}\n#pe-up .up-list li em{flex:none;font-style:normal;font-family:\"IBM Plex Mono\",monospace;font-size:.52rem;letter-spacing:.1em;\n  text-transform:uppercase;border-radius:2px;padding:2px 6px;margin-top:1px}\n#pe-up .up-list li.me{font-weight:600;color:var(--navy-deep)}\n#pe-up .up-list li.me em{background:var(--navy);color:#fff}\n#pe-up .up-list li.in em{background:#E5F4EC;color:var(--green)}\n#pe-up .up-list:not(.all) li:nth-child(n+5):not(.up-more){display:none}\n#pe-up .up-list li.up-more::before{display:none}\n#pe-up .up-more button{font-size:.72rem;font-weight:600;color:var(--navy);text-decoration:underline;text-underline-offset:3px;padding:2px 0 2px 22px}\n#pe-up .up-cmp{display:flex;align-items:stretch;gap:10px}\n#pe-up .up-cmp > div{flex:1;border-radius:8px;padding:8px 12px;border:1px solid var(--line);background:#fff}\n#pe-up .up-cmp span{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.54rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft)}\n#pe-up .up-cmp s{display:block;font-family:\"Newsreader\",serif;font-size:1.25rem;color:#93A0B8;margin-top:2px}\n#pe-up .up-cmp b{display:block;font-family:\"Newsreader\",serif;font-size:1.45rem;font-weight:600;color:var(--navy-deep);margin-top:1px;line-height:1.1}\n#pe-up .up-cmp .b{border-color:var(--navy);background:#F3F6FE}\n#pe-up .up-delta{margin:10px 0 12px;font-size:.8rem;color:var(--ink-soft);line-height:1.5}\n#pe-up .up-delta b{color:var(--green)}\n#pe-up .up-go{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;padding:13px 16px;border-radius:8px;\n  background:var(--navy);color:#fff;font-family:\"IBM Plex Mono\",monospace;font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;\n  font-weight:600;transition:.16s}\n#pe-up .up-go:hover{background:var(--mustard);color:var(--navy-deep)}\n#pe-up .up-go i{color:var(--mustard)}\n#pe-up .up-go:hover i{color:var(--navy-deep)}\n#pe-up .up-soon{font-size:.74rem;color:var(--ink-soft);background:var(--off);border-radius:6px;padding:8px 10px;margin:0}\n#pe-up .up-note{display:flex;gap:8px;align-items:flex-start;margin:12px 0 0;font-size:.7rem;color:var(--ink-soft);line-height:1.5}\n#pe-up .up-note i{color:var(--green);margin-top:2px}\n#pe-up .up-foot{padding:12px 20px 16px;border-top:1px solid var(--line);background:var(--off)}\n#pe-up .up-keep{width:100%;padding:11px 14px;border:1.5px solid var(--line);border-radius:8px;background:#fff;color:var(--ink-soft);\n  font-size:.8rem;text-align:center;transition:.15s}\n#pe-up .up-keep:hover{border-color:var(--navy);color:var(--navy)}\n#pe-up .up-keep b{color:var(--navy-deep)}\n@media(max-width:520px){\n  #pe-up{padding:0;place-items:end center}\n  #pe-up .up-card{max-height:92vh;border-radius:14px 14px 0 0}\n  #pe-up h3{font-size:1.25rem}\n}\n@media(prefers-reduced-motion:reduce){#pe-up,#pe-up *{transition:none!important;animation:none!important}\n  #ts-repo .lm-dot,#ts-repo .lm-st.live i{animation:none}}\n\/* ================================================================ FORMAT BANDS (what each format includes) *\/\n#ts-repo .ts-sub{position:relative;overflow:hidden;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:14px 28px;align-items:center;\n  margin:14px 0 2px;padding:18px 22px;border:1px solid var(--navy-deep);border-left:5px solid var(--mustard);\n  background:linear-gradient(112deg,var(--navy-deep) 0%,#1E3A8A 52%,#2A4DAE 100%);\n  border-radius:0 12px 12px 0;box-shadow:0 14px 30px -22px rgba(21,42,102,.8);font-family:\"IBM Plex Sans\",system-ui,sans-serif;\n  font-size:1rem;letter-spacing:0;text-transform:none;color:#fff}\n#ts-repo .ts-sub::before{content:\"\";position:absolute;inset:0;pointer-events:none;\n  background-image:radial-gradient(rgba(255,255,255,.075) 1px,transparent 1px);background-size:22px 22px}\n#ts-repo .ts-sub::after{display:none}\n#ts-repo .ts-sub > *{position:relative;z-index:1}\n#ts-repo .ts-sub[data-fmt=\"combo\"]{border-left-color:var(--mustard);\n  background:linear-gradient(112deg,#0F1E52 0%,var(--navy-deep) 45%,#2A4DAE 100%)}\n#ts-repo .ts-sub .fh{display:flex;align-items:center;gap:14px;min-width:0}\n#ts-repo .ts-sub .fi{flex:none;width:48px;height:48px;border-radius:10px;display:grid;place-items:center;font-size:19px;\n  background:rgba(255,255,255,.1);color:var(--mustard);border:1px solid rgba(255,255,255,.22)}\n#ts-repo .ts-sub[data-fmt=\"combo\"] .fi{background:linear-gradient(135deg,var(--mustard),var(--mustard-deep));color:var(--navy-deep);border:0}\n#ts-repo .ts-sub h4{font-family:\"Newsreader\",Georgia,serif;font-weight:500;font-size:1.48rem;line-height:1.1;letter-spacing:-.015em;\n  color:#fff;margin:0}\n#ts-repo .ts-sub .fh p{font-size:.82rem;color:#C3CEF5;line-height:1.45;margin:5px 0 0}\n#ts-repo .ts-sub .fl{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:6px 16px}\n#ts-repo .ts-sub .fl li{display:flex;align-items:flex-start;gap:8px;font-size:.76rem;line-height:1.4;color:#E4EAFB}\n#ts-repo .ts-sub .fl li i{flex:none;margin-top:4px;font-size:9px;color:var(--mustard)}\n@media(max-width:900px){\n  #ts-repo .ts-sub{grid-template-columns:minmax(0,1fr);gap:12px;padding:16px 18px}\n  #ts-repo .ts-sub .fl{grid-template-columns:1fr}\n}\n@media(max-width:700px){\n  #ts-repo .ts-sub{font-size:1rem}\n  #ts-repo .ts-sub h4{font-size:1.22rem}\n  #ts-repo .ts-sub .fi{width:40px;height:40px;font-size:16px}\n}\n\/* ================================================================ LIVE MOCK DEMO *\/\n#ts-repo .lm-demo{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:30px;align-items:center;\n  margin:0 0 30px;padding:28px 30px;background:#fff;border:1px solid var(--line);border-radius:16px;\n  box-shadow:0 1px 2px rgba(21,42,102,.05),0 30px 60px -40px rgba(21,42,102,.6);position:relative;overflow:hidden}\n#ts-repo .lm-demo::before{content:\"\";position:absolute;inset:0 0 auto 0;height:4px;background:linear-gradient(90deg,var(--mustard),var(--navy))}\n#ts-repo .lmd-copy .eyebrow{margin-bottom:12px}\n#ts-repo .lmd-copy .eyebrow .lm-dot{margin-right:2px}\n#ts-repo .lmd-copy h3{font-family:\"Newsreader\",Georgia,serif;font-weight:500;font-size:clamp(1.5rem,2.6vw,2.1rem);line-height:1.1;\n  letter-spacing:-.02em;color:var(--navy-deep);margin:0 0 10px}\n#ts-repo .lmd-copy h3 em{font-style:italic;color:var(--mustard-deep)}\n#ts-repo .lmd-copy > p{font-size:.9rem;color:var(--ink-soft);line-height:1.68}\n#ts-repo .lmd-copy > p strong{color:var(--navy)}\n#ts-repo .lmd-ticks{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}\n#ts-repo .lmd-ticks li{display:flex;align-items:flex-start;gap:10px;font-size:.8rem;line-height:1.5;color:var(--ink)}\n#ts-repo .lmd-ticks li i{flex:none;width:24px;height:24px;border-radius:6px;display:grid;place-items:center;font-size:10px;\n  background:var(--mustard-tint);color:var(--mustard-deep);border:1px solid #F0E0B8;margin-top:1px}\n#ts-repo .lmd-ticks b{font-weight:600;color:var(--navy-deep)}\n#ts-repo .lmd-act{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:20px}\n#ts-repo .lmd-btn{display:inline-flex;align-items:center;gap:9px;padding:13px 20px;border-radius:8px;background:var(--navy);color:#fff;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;font-weight:600;transition:.16s;\n  box-shadow:0 14px 28px -16px rgba(21,42,102,.8)}\n#ts-repo .lmd-btn:hover{background:var(--mustard);color:var(--navy-deep)}\n#ts-repo .lmd-btn i{color:var(--mustard)}\n#ts-repo .lmd-btn:hover i{color:var(--navy-deep)}\n#ts-repo .lmd-fine{font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft)}\n\/* --- the drawn booklet + OMR, a picture of the demo page. --k scales the whole drawing --- *\/\n#ts-repo .lm-demo{grid-template-columns:minmax(0,.66fr) minmax(0,1.34fr)}\n#ts-repo .lmd-shot{--k:1.5;display:block;border-radius:12px;overflow:hidden;border:1px solid #CBD3E3;background:#E6EAF2;\n  box-shadow:0 30px 60px -28px rgba(3,10,40,.7);transition:transform .2s,box-shadow .2s;color:inherit}\n#ts-repo .lmd-shot:hover{transform:translateY(-3px);box-shadow:0 36px 64px -28px rgba(3,10,40,.8);color:inherit}\n#ts-repo .lmd-bar{display:flex;align-items:center;gap:calc(10px*var(--k));padding:calc(8px*var(--k)) calc(12px*var(--k));background:#12246E;color:#fff}\n#ts-repo .lmd-bar .id{display:grid;line-height:1.15}\n#ts-repo .lmd-bar .id b{font-family:\"IBM Plex Sans\",sans-serif;font-size:calc(11px*var(--k));font-weight:700}\n#ts-repo .lmd-bar .id small{font-size:calc(8px*var(--k));color:#B9C7F2;font-weight:600}\n#ts-repo .lmd-bar .clk{margin:0 auto;display:grid;justify-items:center;line-height:1.1}\n#ts-repo .lmd-bar .clk b{font-family:\"IBM Plex Mono\",monospace;font-size:calc(15px*var(--k));font-weight:600;letter-spacing:.02em;color:#F5C55B}\n#ts-repo .lmd-bar .clk small{font-family:\"IBM Plex Mono\",monospace;font-size:calc(6.5px*var(--k));letter-spacing:.14em;text-transform:uppercase;color:#B9C7F2}\n#ts-repo .lmd-bar .tools{display:flex;align-items:center;gap:calc(4px*var(--k))}\n#ts-repo .lmd-bar .tools i{font-style:normal;font-size:calc(8px*var(--k));font-weight:700;padding:calc(3px*var(--k)) calc(6px*var(--k));\n  border:1px solid rgba(255,255,255,.28);color:#DCE5FF;border-radius:4px}\n#ts-repo .lmd-bar .tools i.on{background:#fff;color:#12246E;border-color:#fff}\n#ts-repo .lmd-bar .tools em{font-style:normal;margin-left:calc(6px*var(--k));font-size:calc(8.5px*var(--k));font-weight:700;\n  padding:calc(5px*var(--k)) calc(9px*var(--k));border-radius:6px;background:linear-gradient(180deg,#F5C55B,#E8A317);color:#3A2A02}\n#ts-repo .lmd-desk{display:grid;grid-template-columns:minmax(0,1fr) calc(96px*var(--k));gap:calc(10px*var(--k));padding:calc(12px*var(--k));align-items:start}\n#ts-repo .lmd-sheet{background:#fff;border:1px solid #d6dbe5;box-shadow:0 1px 0 #cfd5e0,0 10px 22px -16px rgba(16,32,74,.5);\n  padding:calc(12px*var(--k)) calc(14px*var(--k)) calc(8px*var(--k));position:relative;font-family:\"Times New Roman\",Times,serif;color:#121418}\n#ts-repo .lmd-sheet::before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:calc(16px*var(--k));pointer-events:none;\n  background:linear-gradient(90deg,rgba(20,24,33,.1),rgba(20,24,33,0))}\n#ts-repo .lmd-top{display:flex;justify-content:space-between;align-items:flex-start;font-weight:700;font-size:calc(9.5px*var(--k))}\n#ts-repo .lmd-top .box{display:grid;place-items:center;width:calc(26px*var(--k));height:calc(24px*var(--k));border:2px solid #111;\n  font-family:Arial,Helvetica,sans-serif;font-weight:900;font-size:calc(20px*var(--k));line-height:1}\n#ts-repo .lmd-ttl{text-align:center;margin:calc(-6px*var(--k)) 0 calc(8px*var(--k))}\n#ts-repo .lmd-ttl b{display:block;font-family:Arial,Helvetica,sans-serif;font-size:calc(10px*var(--k));letter-spacing:.04em}\n#ts-repo .lmd-ttl span{display:block;font-weight:700;font-size:calc(11px*var(--k));margin-top:1px}\n#ts-repo .lmd-ttl i{display:block;font-size:calc(7.5px*var(--k));color:#333;margin-top:2px;border-top:2px double #111;border-bottom:1px solid #111;padding:2px 0}\n#ts-repo .lmd-cols{display:grid;grid-template-columns:1fr 1fr;column-gap:calc(14px*var(--k));position:relative}\n#ts-repo .lmd-cols::before{content:\"\";position:absolute;top:0;bottom:0;left:50%;border-left:1px solid #202328}\n#ts-repo .lmd-col p{font-size:calc(7.6px*var(--k));line-height:1.32;text-align:justify;margin:0 0 2px;padding-left:1.4em;position:relative}\n#ts-repo .lmd-col p b{position:absolute;left:0;font-weight:700}\n#ts-repo .lmd-col span{display:block;font-size:calc(7.3px*var(--k));line-height:1.3;padding-left:1.4em;margin-bottom:1px}\n#ts-repo .lmd-col span + p{margin-top:calc(7px*var(--k))}\n#ts-repo .lmd-col span.sel{position:relative}\n#ts-repo .lmd-col span.sel::before{content:\"\";position:absolute;left:.9em;top:-1px;width:1.5em;height:1.25em;border:1.2px solid #1a1d2b;border-radius:50%;transform:rotate(-6deg)}\n#ts-repo .lmd-foot{display:grid;grid-template-columns:1fr auto 1fr;align-items:baseline;margin-top:calc(10px*var(--k));\n  font-family:Arial,Helvetica,sans-serif;font-size:calc(6.5px*var(--k));color:#222}\n#ts-repo .lmd-foot b{font-family:\"Times New Roman\",Times,serif;font-size:calc(7.5px*var(--k));font-weight:400;text-align:center}\n#ts-repo .lmd-foot span:last-child{text-align:right}\n#ts-repo .lmd-omr{background:#FFF7F8;border:1.5px solid #F1C8D1;border-radius:4px;color:#C03A57;font-family:\"IBM Plex Sans\",sans-serif;overflow:hidden}\n#ts-repo .lmd-omr .h{padding:calc(5px*var(--k)) calc(6px*var(--k)) calc(4px*var(--k));border-bottom:1.5px solid #F1C8D1;\n  font-size:calc(6.5px*var(--k));font-weight:800;letter-spacing:.08em;text-transform:uppercase;text-align:center}\n#ts-repo .lmd-omr .h span{display:block;font-size:calc(6px*var(--k));color:#5a2433;letter-spacing:.02em;text-transform:none;margin-top:2px}\n#ts-repo .lmd-omr .st{display:grid;grid-template-columns:repeat(3,1fr);border-bottom:1.5px solid #F1C8D1}\n#ts-repo .lmd-omr .st span{padding:calc(3px*var(--k)) 2px;text-align:center;font-size:calc(5px*var(--k));letter-spacing:.04em;text-transform:uppercase;font-weight:800;border-right:1px solid #F1C8D1}\n#ts-repo .lmd-omr .st span:last-child{border-right:0}\n#ts-repo .lmd-omr .st b{display:block;font-size:calc(9px*var(--k));color:#3b1621;line-height:1.1}\n#ts-repo .lmd-omr .grid{padding:calc(5px*var(--k)) calc(5px*var(--k)) calc(6px*var(--k));display:grid;gap:calc(2px*var(--k))}\n#ts-repo .lmd-omr .r{display:grid;grid-template-columns:calc(12px*var(--k)) repeat(4,calc(11px*var(--k)));gap:calc(2px*var(--k));align-items:center;height:calc(12px*var(--k))}\n#ts-repo .lmd-omr .r i{font-style:normal;font-size:calc(6.5px*var(--k));font-weight:800;text-align:right;padding-right:2px;color:#5a2433}\n#ts-repo .lmd-omr .r.rv i{color:var(--mustard-deep)}\n#ts-repo .lmd-omr .r.rv i::before{content:\"\\2022\";color:var(--mustard);margin-right:1px}\n#ts-repo .lmd-omr .r s{display:block;width:calc(10px*var(--k));height:calc(10px*var(--k));border-radius:50%;border:1px solid #C03A57;background:#fff;text-decoration:none}\n#ts-repo .lmd-omr .r s.on{background:repeating-linear-gradient(-45deg,#0f1017 0 1px,#232532 1px 1.75px);border-color:#15161d}\n#ts-repo .lm-demo-lnk{display:inline-flex;align-items:center;gap:7px;margin-top:9px;padding:7px 12px;border-radius:100px;\n  background:var(--navy);color:#fff;font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.08em;text-transform:uppercase;transition:.15s}\n#ts-repo .lm-demo-lnk:hover{background:var(--mustard);color:var(--navy-deep)}\n#ts-repo .lm-demo-lnk i{font-size:.55rem;color:var(--mustard)}\n#ts-repo .lm-demo-lnk:hover i{color:var(--navy-deep)}\n#ts-repo .lm-n em{font-style:normal;margin-left:6px;padding:2px 7px;border-radius:3px;background:var(--off);border:1px solid var(--line);color:var(--navy);letter-spacing:.06em}\n@media(max-width:1000px){\n  #ts-repo .lm-demo{grid-template-columns:minmax(0,1fr);gap:22px;padding:22px}\n  #ts-repo .lmd-shot{--k:1.2;max-width:720px}\n}\n@media(max-width:700px){\n  #ts-repo .lm-demo{padding:18px 16px;border-radius:12px}\n  #ts-repo .lmd-shot{--k:1}\n  #ts-repo .lmd-desk{grid-template-columns:minmax(0,1fr) 74px;gap:6px;padding:8px}\n  #ts-repo .lmd-cols{grid-template-columns:1fr;column-gap:0}\n  #ts-repo .lmd-cols::before{display:none}\n  #ts-repo .lmd-col:last-child{display:none}\n  #ts-repo .lmd-omr .st{grid-template-columns:1fr 1fr}\n  #ts-repo .lmd-omr .st span:last-child{display:none}\n  #ts-repo .lmd-omr .st span:nth-child(2){border-right:0}\n  #ts-repo .lmd-omr .r{grid-template-columns:10px repeat(4,9px)}\n  #ts-repo .lmd-omr .r s{width:8px;height:8px}\n  #ts-repo .lm-syl{grid-template-columns:1fr}\n  #ts-repo .lm-planlink .lm-plan{display:flex;padding:12px 14px}\n  #ts-repo .lmd-act{flex-direction:column;align-items:stretch;gap:8px}\n  #ts-repo .lmd-btn{justify-content:center;padding:14px 18px}\n  #ts-repo .lmd-fine{text-align:center}\n}\n\n\/* ================================================================ LIVE MOCK: paper-wise syllabus strip + full-plan links *\/\n#ts-repo .lm-planlink{margin-top:16px}\n#ts-repo .lm-plan{display:inline-flex;align-items:center;gap:9px;padding:10px 16px;border-radius:100px;background:#fff;border:1.5px solid var(--navy);\n  color:var(--navy);font-size:.8rem;font-weight:600;line-height:1.35;transition:.16s}\n#ts-repo .lm-plan:hover{background:var(--navy);color:#fff}\n#ts-repo .lm-plan i{color:var(--mustard-deep)}\n#ts-repo .lm-plan:hover i{color:var(--mustard)}\n#ts-repo .lm-syl{display:grid;grid-template-columns:1fr 1fr .8fr;gap:18px;margin:0 0 30px}\n#ts-repo .lm-sylcard{background:#fff;border:1px solid var(--line);border-top:4px solid var(--navy);border-radius:12px;padding:18px 20px;\n  box-shadow:0 1px 2px rgba(21,42,102,.05)}\n#ts-repo .lm-sylhead{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px}\n#ts-repo .lm-sylhead .pl,#ts-repo .lm-sylcard.plan > .pl{flex:none;display:inline-grid;place-items:center;min-width:64px;height:28px;padding:0 10px;border-radius:4px;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;color:var(--mustard-deep);\n  background:var(--mustard-tint);border:1px solid #F0E0B8}\n#ts-repo .lm-sylhead h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.18rem;line-height:1.2;color:var(--navy-deep);margin:0}\n#ts-repo .lm-sylhead p{font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);margin-top:4px}\n#ts-repo .lm-w{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}\n#ts-repo .lm-w li{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr) 44px;gap:10px;align-items:center}\n#ts-repo .lm-w .n{font-size:.76rem;color:var(--ink);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n#ts-repo .lm-w .b{height:8px;border-radius:99px;background:var(--off);border:1px solid var(--line);overflow:hidden}\n#ts-repo .lm-w .b i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--navy),var(--mustard))}\n#ts-repo .lm-w .q{font-family:\"IBM Plex Mono\",monospace;font-size:.62rem;color:var(--navy);text-align:right;white-space:nowrap}\n#ts-repo .lm-sylcard.plan{display:flex;flex-direction:column;border-top-color:var(--mustard);\n  background:linear-gradient(170deg,#FFFCF3,#fff 60%)}\n#ts-repo .lm-sylcard.plan > .pl{width:40px;min-width:0;height:40px;padding:0;border-radius:10px;font-size:15px;margin-bottom:12px}\n#ts-repo .lm-sylcard.plan h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.3rem;line-height:1.15;color:var(--navy-deep);margin:0 0 8px}\n#ts-repo .lm-sylcard.plan h3 em{font-style:italic;color:var(--mustard-deep)}\n#ts-repo .lm-sylcard.plan > p{font-size:.78rem;color:var(--ink-soft);line-height:1.6}\n#ts-repo .lm-plist{list-style:none;margin:12px 0 16px;padding:0;display:flex;flex-direction:column;gap:6px}\n#ts-repo .lm-plist li{display:flex;align-items:flex-start;gap:8px;font-size:.74rem;color:var(--ink);line-height:1.4}\n#ts-repo .lm-plist i{flex:none;font-size:9px;color:var(--green);margin-top:4px}\n#ts-repo .lm-planbtn{margin-top:auto;display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:12px 16px;border-radius:7px;\n  background:var(--navy);color:#fff;font-family:\"IBM Plex Mono\",monospace;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;transition:.16s}\n#ts-repo .lm-planbtn:hover{background:var(--mustard);color:var(--navy-deep)}\n@media(max-width:1000px){\n  #ts-repo .lm-syl{grid-template-columns:1fr 1fr}\n  #ts-repo .lm-sylcard.plan{grid-column:1 \/ -1}\n}\n\/* ================================================================ FULL PLAN PAGE *\/\n#ts-repo .pl-hero .ts-hero__inner{grid-template-columns:minmax(0,1.3fr) minmax(0,.7fr)}\n#ts-repo .pl-cta{display:flex;flex-wrap:wrap;gap:10px;margin-top:24px}\n#ts-repo .pl-cta .b1,#ts-repo .pl-cta .b2{display:inline-flex;align-items:center;gap:9px;padding:12px 18px;border-radius:7px;\n  font-family:\"IBM Plex Mono\",monospace;font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;transition:.16s}\n#ts-repo .pl-cta .b1{background:var(--navy);color:#fff}\n#ts-repo .pl-cta .b1:hover{background:var(--mustard);color:var(--navy-deep)}\n#ts-repo .pl-cta .b2{background:#fff;border:1.5px solid var(--line);color:var(--navy)}\n#ts-repo .pl-cta .b2:hover{border-color:var(--mustard);background:var(--mustard-tint)}\n#ts-repo .pl-glance{background:rgba(255,255,255,.97);border:1px solid var(--line);border-top:4px solid var(--mustard);border-radius:12px;\n  box-shadow:0 30px 60px -34px rgba(21,42,102,.75);padding:18px 20px}\n#ts-repo .pl-glance h2{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.15rem;color:var(--navy-deep);margin:0 0 12px;line-height:1.2}\n#ts-repo .pl-kv{display:grid;grid-template-columns:1fr 1fr;gap:10px}\n#ts-repo .pl-kv div{border:1px solid var(--line);border-radius:8px;padding:9px 11px;background:var(--off)}\n#ts-repo .pl-kv b{display:block;font-family:\"Newsreader\",serif;font-weight:500;font-size:1.2rem;color:var(--navy-deep);line-height:1.1}\n#ts-repo .pl-kv span{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.55rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft);margin-top:4px}\n#ts-repo .pl-glance .gl-mock{margin:12px 0 0}\n#ts-repo .pl-flow{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}\n#ts-repo .pl-step{background:#fff;border:1px solid var(--line);border-top:4px solid var(--navy);border-radius:12px;padding:20px}\n#ts-repo .pl-step:nth-child(2){border-top-color:var(--mustard)}\n#ts-repo .pl-step:nth-child(3){border-top-color:var(--mustard-deep)}\n#ts-repo .pl-step .n{font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--mustard-deep)}\n#ts-repo .pl-step h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.25rem;color:var(--navy-deep);margin:8px 0 6px;line-height:1.2}\n#ts-repo .pl-step p{font-size:.82rem;color:var(--ink-soft);line-height:1.65}\n#ts-repo .pl-step .codes{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}\n#ts-repo .pl-step .codes span{font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.08em;padding:4px 8px;border-radius:3px;\n  background:var(--off);border:1px solid var(--line);color:var(--navy)}\n#ts-repo .pl-tests{display:flex;flex-direction:column;gap:18px}\n#ts-repo .pl-test{display:grid;grid-template-columns:84px minmax(0,1fr);gap:22px;background:#fff;border:1px solid var(--line);border-radius:14px;\n  padding:22px;box-shadow:0 1px 2px rgba(21,42,102,.05);position:relative;overflow:hidden}\n#ts-repo .pl-test.nx{border-color:var(--mustard);box-shadow:0 0 0 3px var(--mustard-tint)}\n#ts-repo .pl-test.live{border-color:#E5484D;box-shadow:0 0 0 3px #FDECEC}\n#ts-repo .pl-test.done{opacity:.72}\n#ts-repo .pl-test .lm-date{align-self:start}\n#ts-repo .pl-thead{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:12px}\n#ts-repo .pl-thead h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.45rem;line-height:1.15;color:var(--navy-deep);margin:4px 0 4px}\n#ts-repo .pl-thead .lm-time{margin-top:4px}\n#ts-repo .pl-syl{width:100%;border-collapse:collapse;font-size:.78rem;margin-top:6px}\n#ts-repo .pl-syl th{text-align:left;font-family:\"IBM Plex Mono\",monospace;font-size:.56rem;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--ink-soft);padding:6px 8px;border-bottom:1px solid var(--line);font-weight:500}\n#ts-repo .pl-syl th:last-child,#ts-repo .pl-syl td:last-child{text-align:right;white-space:nowrap}\n#ts-repo .pl-syl td{padding:7px 8px;border-bottom:1px solid #EEF2F9;vertical-align:top;line-height:1.45;color:var(--ink)}\n#ts-repo .pl-syl tr.sub td{font-weight:600;color:var(--navy-deep);background:var(--off)}\n#ts-repo .pl-syl tr.sub td:last-child{font-family:\"IBM Plex Mono\",monospace;font-weight:600;color:var(--navy)}\n#ts-repo .pl-syl tr.ch td:first-child{padding-left:22px;color:var(--ink-soft)}\n#ts-repo .pl-syl tr.ch td:last-child{font-family:\"IBM Plex Mono\",monospace;color:var(--ink-soft)}\n#ts-repo .pl-syl tr.ch td:first-child::before{content:\"\";display:inline-block;width:5px;height:5px;margin:0 8px 2px -13px;background:var(--mustard);transform:rotate(45deg)}\n#ts-repo .pl-syl tfoot td{font-family:\"IBM Plex Mono\",monospace;font-size:.62rem;letter-spacing:.06em;text-transform:uppercase;color:var(--navy-deep);\n  border-bottom:0;border-top:2px solid var(--mustard);padding-top:9px}\n#ts-repo .pl-toggle{margin-top:10px;font-family:\"IBM Plex Mono\",monospace;font-size:.62rem;letter-spacing:.08em;text-transform:uppercase;\n  color:var(--navy);text-decoration:underline;text-underline-offset:3px}\n#ts-repo .pl-toggle:hover{color:var(--mustard-deep)}\n#ts-repo .pl-rules{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}\n#ts-repo .pl-rule{background:#fff;border:1px solid var(--line);border-left:4px solid var(--mustard);border-radius:0 10px 10px 0;padding:18px 20px}\n#ts-repo .pl-rule h3{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.1rem;color:var(--navy-deep);margin:0 0 6px}\n#ts-repo .pl-rule p{font-size:.8rem;color:var(--ink-soft);line-height:1.65}\n#ts-repo .pl-enrol{display:grid;grid-template-columns:minmax(0,1.3fr) auto;gap:30px;align-items:center;padding:38px 44px}\n#ts-repo .pl-enrol h2{font-family:\"Newsreader\",serif;font-weight:500;font-size:clamp(1.5rem,2.6vw,2.1rem);color:#fff;margin:0;letter-spacing:-.02em;line-height:1.12}\n#ts-repo .pl-enrol h2 em{font-style:italic;color:var(--mustard)}\n#ts-repo .pl-enrol p{font-size:.9rem;color:#C3CEF5;line-height:1.7;margin-top:11px;max-width:52ch}\n#ts-repo .pl-enrol .lm-buy{border-top:0;padding-top:0;flex-direction:column;align-items:flex-end;gap:10px}\n#ts-repo .pl-enrol .lm-buy .ts-price b{color:#fff}\n@media(max-width:1000px){\n  #ts-repo .pl-hero .ts-hero__inner{grid-template-columns:minmax(0,1fr)}\n  #ts-repo .pl-flow,#ts-repo .pl-rules{grid-template-columns:1fr 1fr}\n  #ts-repo .pl-enrol{grid-template-columns:minmax(0,1fr);padding:30px 24px}\n  #ts-repo .pl-enrol .lm-buy{align-items:flex-start}\n}\n@media(max-width:700px){\n  #ts-repo .pl-flow,#ts-repo .pl-rules,#ts-repo .pl-kv{grid-template-columns:1fr}\n  #ts-repo .pl-test{grid-template-columns:minmax(0,1fr);gap:12px;padding:16px}\n  #ts-repo .pl-test .lm-date{display:inline-grid;grid-auto-flow:column;gap:6px;align-items:baseline;padding:6px 10px}\n  #ts-repo .pl-test .lm-date b{font-size:1.2rem}\n  #ts-repo .pl-test .lm-date span,#ts-repo .pl-test .lm-date em{margin:0}\n  #ts-repo .pl-syl tr.ch td:first-child{padding-left:16px}\n  #ts-repo .pl-cta .b1,#ts-repo .pl-cta .b2{flex:1 1 100%;justify-content:center}\n}\n\n\/* ---- enrolment deadline ---- *\/\n#ts-repo .lm-enrolby{display:flex;align-items:flex-start;gap:8px;margin-top:12px;padding:9px 12px;border-radius:7px;\n  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16);font-size:.74rem;line-height:1.5;color:#DCE4FB}\n#ts-repo .lm-enrolby i{flex:none;margin-top:3px;color:var(--mustard)}\n#ts-repo .lm-enrolby b{color:#fff;font-weight:600}\n#ts-repo .lm-enrolby a{color:var(--mustard);text-decoration:underline;text-underline-offset:2px}\n#ts-repo .lm-enrolby:empty{display:none}\n#ts-repo .pl-hero .lm-enrolby{margin-top:16px;max-width:560px;background:rgba(255,255,255,.75);border-color:var(--line);color:var(--ink-soft)}\n#ts-repo .pl-hero .lm-enrolby b{color:var(--navy-deep)}\n#ts-repo .pl-hero .lm-enrolby i{color:var(--mustard-deep)}\n#ts-repo .pl-hero .lm-enrolby a{color:var(--navy)}\n#ts-repo .pl-enrol .lm-enrolby{width:100%;max-width:300px;text-align:left}\n#ts-repo .lm-enroll.closed,#ts-repo .lm-enroll.closed:hover{background:var(--ink-soft);color:#fff;cursor:not-allowed;opacity:.9}\n\n\/* ---- paper filter chips in the schedule ---- *\/\n#ts-repo .lm-pf{display:flex;gap:6px;flex:none}\n#ts-repo .lm-pf:empty{display:none}\n#ts-repo .lm-pf .chip{padding:5px 11px;font-size:.62rem}\n#ts-repo .lm-schedhead{align-items:center}\n#ts-repo .lm-schedhead #lm-count{margin-left:auto}\n@media(max-width:700px){#ts-repo .lm-schedhead #lm-count{flex:1 0 100%;margin-left:0}}\n#ts-repo .lm-row .lm-cov b{font-weight:600;color:var(--navy-deep)}\n\n\/* ================================================================ ENROL BAND (under the hero) *\/\n#ts-repo .sec.lm-cta{padding:26px 0 0;border-top:0;background:#fff}\n#ts-repo .lm-ctap{border-radius:14px;box-shadow:0 30px 60px -34px rgba(21,42,102,.8)}\n#ts-repo .lm-ctab{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,.65fr);gap:30px;align-items:center;padding:34px 40px}\n#ts-repo .lm-ctax .eyebrow{color:var(--mustard);margin-bottom:12px}\n#ts-repo .lm-ctax h2{font-family:\"Newsreader\",Georgia,serif;font-weight:500;font-size:clamp(1.7rem,3.2vw,2.5rem);line-height:1.08;\n  letter-spacing:-.02em;color:#fff;margin:0}\n#ts-repo .lm-ctax h2 em{font-style:italic;color:var(--mustard)}\n#ts-repo .lm-ctax > p{font-size:.9rem;color:#C3CEF5;line-height:1.7;margin-top:12px;max-width:60ch}\n#ts-repo .lm-ctaticks{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:8px 22px}\n#ts-repo .lm-ctaticks li{display:flex;align-items:center;gap:8px;font-size:.78rem;color:#DCE4FB}\n#ts-repo .lm-ctaticks i{color:var(--mustard);font-size:.7rem}\n#ts-repo .lm-ctay{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:22px 20px;\n  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.16);border-radius:12px}\n#ts-repo .lm-ctay .ts-price b{color:#fff;font-size:2.2rem}\n#ts-repo .lm-ctay .ts-price s{color:#93A6DE}\n#ts-repo .lm-ctay .ts-price i{color:#7EE2B8}\n#ts-repo .lm-ctafor{font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;color:#9FB0E8}\n#ts-repo .lm-enroll.big{width:100%;justify-content:center;padding:16px 22px;font-size:.82rem;margin-top:10px;\n  box-shadow:0 16px 30px -14px rgba(224,168,46,.9)}\n#ts-repo .lm-ctay .lm-enrolby{width:100%;margin-top:10px;text-align:left}\n#ts-repo .lm-ctalinks{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 18px;margin-top:10px}\n#ts-repo .lm-ctalinks a{font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:#DCE4FB;\n  border-bottom:1px solid rgba(255,255,255,.3);padding-bottom:2px}\n#ts-repo .lm-ctalinks a:hover{color:var(--mustard);border-color:var(--mustard)}\n#ts-repo .lm-ctalinks i{color:var(--mustard);margin-right:4px}\n#ts-repo .lm .sechead.mid .eyebrow{justify-content:center}\n#ts-repo .lm .lm-planlink{text-align:center}\n@media(max-width:1000px){\n  #ts-repo .lm-ctab{grid-template-columns:minmax(0,1fr);padding:26px 24px;gap:20px}\n}\n@media(max-width:700px){\n  #ts-repo .sec.lm-cta{padding-top:16px}\n  #ts-repo .lm-ctab{padding:22px 18px}\n  #ts-repo .lm-ctaticks{flex-direction:column;gap:6px}\n}\n\n\/* ================================================================ NOTICE (corrigendum \/ postponement) *\/\n#ts-repo .ts-alert{background:#FFF4E5;border-top:1px solid #F4D9A6;border-bottom:1px solid #F4D9A6}\n#ts-repo .ts-alert__in{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:14px 0}\n#ts-repo .ts-alert__tag{flex:none;display:inline-flex;align-items:center;gap:7px;font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;\n  letter-spacing:.14em;text-transform:uppercase;color:#fff;background:#C0392B;border-radius:3px;padding:6px 10px}\n#ts-repo .ts-alert p{flex:1;min-width:260px;font-size:.86rem;line-height:1.55;color:var(--ink)}\n#ts-repo .ts-alert p strong{color:#8E1C22;font-weight:600}\n#ts-repo .ts-alert__lnk{flex:none;font-family:\"IBM Plex Mono\",monospace;font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;color:var(--navy);\n  border-bottom:1px solid rgba(30,58,138,.35)}\n#ts-repo .ts-alert__lnk:hover{color:#8E1C22;border-color:#8E1C22}\n#ts-repo .ed.postponed{background:#FFF1F0;border-bottom-color:#F3C2BE}\n#ts-repo .ed-tag{font-style:normal;margin-left:6px;padding:2px 7px;border-radius:3px;background:#C0392B;color:#fff;letter-spacing:.1em}\n#ts-repo .ed.postponed .ed-date s{color:#9AA8C4;font-weight:400;font-size:.8rem;margin-right:2px}\n#ts-repo .ed.postponed .ed-date small{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.6rem;letter-spacing:.08em;color:#8E1C22;margin-top:2px}\n#ts-repo .ed.postponed .ed-lab{color:#8E1C22}\n#ts-repo .ed.postponed .ed-left b{color:#C0392B}\n\/* schedule placeholder while the plan is being written *\/\n#ts-repo .lm-soon{display:grid;grid-template-columns:64px minmax(0,1fr);gap:18px;align-items:start;padding:22px 20px;\n  background:linear-gradient(90deg,var(--mustard-tint),#fff 70%)}\n#ts-repo .lm-soon h4{font-family:\"Newsreader\",serif;font-weight:500;font-size:1.2rem;line-height:1.25;color:var(--navy-deep);margin:4px 0 6px}\n#ts-repo .lm-soon p{font-size:.82rem;color:var(--ink-soft);line-height:1.65}\n#ts-repo .lm-soon p strong{color:var(--navy-deep);font-weight:600}\n#ts-repo .lm-syl.one{grid-template-columns:1fr}\n#ts-repo .lm-syl.one .lm-sylcard.plan{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto;gap:4px 18px;align-items:start}\n#ts-repo .lm-syl.one .lm-sylcard.plan > .pl{grid-row:1 \/ span 3;margin:0}\n#ts-repo .lm-syl.one .lm-sylcard.plan > p{margin-bottom:4px}\n#ts-repo .lm-syl.one .lm-plist{flex-direction:row;flex-wrap:wrap;gap:6px 20px;margin:4px 0 0}\n@media(max-width:700px){\n  #ts-repo .ts-alert__in{align-items:flex-start}\n  #ts-repo .lm-soon{grid-template-columns:minmax(0,1fr);padding:18px 16px}\n  #ts-repo .lm-soon .lm-date{display:inline-grid;grid-auto-flow:column;gap:6px;align-items:baseline;padding:6px 10px}\n  #ts-repo .lm-syl.one .lm-sylcard.plan{grid-template-columns:minmax(0,1fr)}\n  #ts-repo .lm-syl.one .lm-sylcard.plan > .pl{grid-row:auto}\n  #ts-repo .lm-syl.one .lm-plist{flex-direction:column}\n}\n\n\/* ---- announce-only live mock series (no price, no schedule yet) ---- *\/\n#ts-repo .lm-ctabig{width:54px;height:54px;border-radius:50%;display:grid;place-items:center;font-size:22px;color:var(--mustard);\n  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2)}\n#ts-repo .lm-ctanote{font-size:.78rem;color:#C3CEF5;line-height:1.55;margin:4px 0 2px}\n#ts-repo .lm-enroll.notify{background:#fff;color:var(--navy-deep)}\n#ts-repo .lm-enroll.notify:hover{background:var(--mustard);color:var(--navy-deep)}\n#ts-repo .lm-tba{font-size:.8rem;color:#C3CEF5;line-height:1.4}\n#ts-repo .lm-tba b{display:block;font-family:\"IBM Plex Mono\",monospace;font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;color:var(--mustard);font-weight:600}\n#ts-repo .lm-date.tba b{font-size:1.1rem;color:var(--mustard-deep);padding:4px 0 2px}\n#ts-repo button.lm-demo-lnk{cursor:pointer}\n\n<\/style>\n<script>\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   EDIT HERE  -  every product on this page.\n   PE_EDITS   price \/ was \/ woo per series. woo 0 = \"Notify me\". hide:true takes it off.\n   PE_BUNDLES price \/ was \/ woo per bundle, and parts = the series inside it.\n              parts drives the \"Bought one by one\" price and the pop-up that offers\n              the bundle when someone adds a single series. A bundle with woo 0 is\n              shown as \"Opening soon\" and is NOT offered in the pop-up.\n              A series sold elsewhere but not on this page: 'id:price:Name'.\n   LIVE_MOCKS the live mock series - product, and one line per mock (IST).\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nvar PE_EDITS = {\n  'pvp-2022-principal'  : { price:0    , was:0    , woo:16469 , free:true },   \/\/ Principal 2022 \u2014 Previous Year Paper\n  'pvp-2022-vice-principal': { price:0    , was:0    , woo:16470 , free:true },   \/\/ Vice-Principal 2022 \u2014 Previous Year Paper\n  'pvp-nep'             : { price:199  , was:249  , woo:16568  },   \/\/ National Education Policy (NEP) 2020\n  'pvp-rte'             : { price:119  , was:149  , woo:16665  },   \/\/ Right to Education (RTE) Act,2009 & Rules, 2010\n  'pvp-schemes'         : { price:249  , was:399  , woo:16622  },   \/\/ Schemes & Policies in School Education\n  'pvp-child'           : { price:299  , was:546  , woo:17949  },   \/\/ Child Safety & Protection \u2014 related Acts & Rules (PO\n  'pvp-measure'         : { price:299  , was:399  , woo:16705  },   \/\/ Measurement & Evaluation\n  'pvp-pedagogy'        : { price:299  , was:399  , woo:17205  },   \/\/ Pedagogy in Education\n  'pvp-digital'         : { price:199  , was:249  , woo:16524  },   \/\/ Digital Literacy\n  'pyq-mop'             : { price:119  , was:149  , woo:5753   },   \/\/ Manual of Office Procedure \u2014 PYQs (UPSC SO\/Steno LDC\n  'pyq-pension'         : { price:99   , was:129  , woo:2631   },   \/\/ CCS (Pension) Rules \u2014 PYQs (UPSC SO\/Steno LDCE)\n  'pyq-conduct'         : { price:99   , was:129  , woo:5750   },   \/\/ CCS (Conduct) Rules, 1964 \u2014 PYQs (UPSC SO\/Steno LDCE\n  'pyq-cca'             : { price:99   , was:129  , woo:2630   },   \/\/ CCS (CCA) Rules, 1965 \u2014 PYQs (UPSC SO\/Steno LDCE)\n  'pyq-rti'             : { price:99   , was:129  , woo:2629   },   \/\/ Right to Information Act \u2014 PYQs (UPSC SO\/Steno LDCE)\n  'combo-rti'           : { price:149  , was:199  , woo:16040  },   \/\/ RTI Act, 2005 \u2014 Complete Pack\n  'cw-gfr'              : { price:149  , was:199  , woo:16094  },   \/\/ General Financial Rules, 2017 \u2014 Complete Pack\n  'cw-pension'          : { price:199  , was:249  , woo:16191  },   \/\/ CCS (Pension) Rules, 2021 \u2014 Complete Pack\n  'combo-leave'         : { price:149  , was:199  , woo:15560  },   \/\/ CCS (Leave\/LTC) Rules \u2014 Complete Pack\n};\n\/* a chapter-wise card is hidden where the Complete Pack of the same subject is on the shelf *\/\nvar PE_PACK_HIDES_CHAPTER = true;\nvar PE_BUNDLES = {\n  'bundle-pvp-p2'         : { price:619, was:863, woo:0,\n      parts:['pyq-conduct', 'pyq-cca', 'cw-pension', 'cw-gfr', 'pyq-mop', 'combo-rti'] },\n};\n\/* bundle pop-up: on = show it, offerSoon = also offer bundles that have no Woo ID yet, max = offers shown *\/\nvar PE_UPSELL = { on:true, offerSoon:false, max:2 };\nvar PE_VALIDITY = \"Validity \u2014 upto exam or 1 year\";\nvar PE_WA = \"https:\/\/wa.me\/919870176238\";\n\/* exam date for the hero countdown, YYYY-MM-DD. '' shows \"to be notified\". *\/\nvar PE_EXAM = { date:'2027-01-09', note:\"Postponed from 1 Nov 2026 \u2014 UPSC Corrigendum dated 16 Oct 2026\" };\n\/* LIVE MOCKS - date YYYY-MM-DD, time HH:MM in IST, mins = paper length, window = hours each mock stays\n   open for a ranked attempt. Set product.woo to the WooCommerce ID and \"Notify me\" becomes \"Enrol now\".\n   The page re-sorts the list by date. An empty list with starts set shows \"schedule to be published\". *\/\nvar LIVE_MOCKS = {\n  product: { id:'live-mock-pvp-2027', name:\"Live Mock Test Series \u2014 UPSC Principal & Vice-Principal CRT 2027\", price:2499, was:0, woo:0 },\n  window: 24,\n  \/* the series opens on this date (YYYY-MM-DD, HH:MM IST). With list empty the page shows a 'schedule coming soon' state. *\/\n  starts: \"2026-12-09\", startsTime: \"09:30\", planSoon: true,\n  \/* enrolment closes at this time (ISO, +05:30). '' = the moment the first test opens. *\/\n  enrolBy: \"\",\n  \/* enrol button with product.woo = 0: 'wa' opens a WhatsApp chat with this text; 'notify' shows the launching-soon toast *\/\n  enrol: { fallback:'wa', text:\"Hi, I want to enrol in the Live Mock Test Series \u2014 UPSC Principal & Vice-Principal CRT 2027. Please tell me how to pay.\" },\n  list: [\n\n  ]\n};\nvar PE_PAGE = {\"key\": \"pvp\", \"name\": \"UPSC Principal & Vice-Principal CRT\", \"short\": \"Principal \/ Vice-Principal\", \"url\": \"https:\/\/promotionexams.com\/test-series\/upsc-principal-vice-principal\/\", \"logo\": \"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png\", \"syllabus\": [{\"paper\": \"Free\", \"label\": \"Free papers\"}, {\"paper\": \"Head 1\", \"label\": \"Core Subjects\"}, {\"paper\": \"Head 2\", \"label\": \"Office Administration\"}, {\"paper\": \"Head 3\", \"label\": \"GK & Aptitude\"}], \"note\": {\"all\": \"Every Principal \/ Vice-Principal series on one shelf \u2014 previous year questions, chapter-wise drills and the combined packs. Narrow it down by head, format or subject.\", \"pyq\": \"Questions actually asked in past papers, arranged topic-wise, each with the governing rule cited in the explanation.\", \"chapter\": \"Fresh practice written chapter by chapter from the bare rule or manual, so every provision gets tested \u2014 not only the ones already asked.\", \"combo\": \"One subject, both formats, one price. Previous year questions to learn the examiner\u2019s pattern, chapter-wise drills to close the gaps they have not asked yet.\", \"bundle\": \"Every series for one paper in a single purchase \u2014 same banks, same validity, up to 36% less than buying them one at a time.\"}, \"examNote\": \"Curated specially for the <strong>UPSC Principal &amp; Vice-Principal Combined Recruitment Test<\/strong> &mdash; the 2022 papers free, then every series filed under one of three heads: the core education subjects, office administration, and general knowledge with language and aptitude.\", \"fmtLabel\": {\"all\": \"All formats\", \"pyq\": \"Previous year questions\", \"chapter\": \"Chapter-wise\", \"combo\": \"PYQ + Chapter-wise\", \"bundle\": \"Bundles\"}};\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 nothing below here needs editing \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n(function(){\n\"use strict\";\nvar root = document.getElementById('ts-repo');\nif(!root) return;\nvar P = PE_PAGE, EXAM = P.key;\nvar $  = function(s){ return root.querySelector(s); };\nvar $$ = function(s){ return Array.prototype.slice.call(root.querySelectorAll(s)); };\nvar INR = function(n){ return '\u20b9' + Number(n || 0).toLocaleString('en-IN'); };\nfunction esc(s){ return String(s == null ? '' : s).replace(\/[&<>\"]\/g, function(c){\n  return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;'}[c]; }); }\nfunction num(t){ return parseInt(String(t || '').replace(\/[^0-9]\/g, ''), 10) || 0; }\nfunction bumpOC(el, k, v){\n  if(!el) return;\n  var oc = el.getAttribute('onclick') || '';\n  el.setAttribute('onclick', oc.replace(new RegExp('\\\\b' + k + ':\\\\d+'), k + ':' + v));\n}\n\n\/* ================================================= 1. PE_EDITS \u2192 markup *\/\n(function(){\n  Object.keys(PE_EDITS).forEach(function(id){\n    var sel = id.indexOf('@') > -1 ? '[data-copy=\"' + id + '\"]' : '[data-id=\"' + id + '\"]';\n    var hits = $$('.ts-card' + sel);\n    if(!hits.length){ console.warn('PE_EDITS: nothing matches', id); return; }\n    hits.forEach(function(c){ applyEdit(c, PE_EDITS[id]); });\n  });\n  function applyEdit(c, e){\n    if(e.hide){ c.parentNode.removeChild(c); return; }\n    if(e.paper) c.setAttribute('data-paper', e.paper);\n    if(e.free !== undefined) c.setAttribute('data-free', e.free ? '1' : '0');\n    var isFree = c.getAttribute('data-free') === '1';\n    var buy = c.querySelector('.ts-buy');\n    if(e.price !== undefined || e.was !== undefined){\n      var pb = c.querySelector('.ts-price b'), ps = c.querySelector('.ts-price s');\n      var price = e.price !== undefined ? e.price : num(pb && pb.textContent);\n      var was   = e.was   !== undefined ? e.was   : num(ps && ps.textContent);\n      if(!was) was = price;\n      var off = was > price ? Math.round((was - price) \/ was * 100) : 0;\n      var box = c.querySelector('.ts-price');\n      if(box){\n        box.innerHTML = isFree ? '<b>Free<\/b>'\n          : (price > 0) ? '<b>' + INR(price) + '<\/b><s>' + INR(was) + '<\/s>' + (off ? '<i>' + off + '% off<\/i>' : '')\n          : '<em class=\"ts-tbd\">Price on launch<\/em>';\n      }\n      c.setAttribute('data-price', price);\n      bumpOC(buy, 'price', price); bumpOC(buy, 'originalPrice', was);\n    }\n    if(e.woo !== undefined){\n      c.setAttribute('data-woo-id', e.woo);\n      if(buy){\n        buy.setAttribute('data-woo-id', e.woo);\n        bumpOC(buy, 'wooProductId', e.woo);\n        buy.innerHTML = e.woo\n          ? (isFree ? '<i class=\"fa-solid fa-play\"><\/i> Start free test' : '<i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart')\n          : (isFree ? '<i class=\"fa-solid fa-bell\"><\/i> Free \u2014 opening soon' : '<i class=\"fa-solid fa-bell\"><\/i> Notify me');\n      }\n      c.classList.toggle('is-soon', !e.woo);\n      var rb = c.querySelector('.ribbon.soon');\n      if(e.woo && rb) rb.parentNode.removeChild(rb);\n      if(!e.woo && !rb){\n        var th = c.querySelector('.ts-thumb');\n        if(th) th.insertAdjacentHTML('afterbegin', '<span class=\"ribbon soon\">Launching soon<\/span>');\n      }\n    }\n  }\n  \/* cards written to stay off the page until they have a Woo ID *\/\n  $$('.ts-card[data-needs-woo=\"1\"]').forEach(function(c){\n    if(!parseInt(c.getAttribute('data-woo-id'), 10)) c.parentNode.removeChild(c);\n  });\n  \/* a chapter-wise card comes off a shelf that already carries the Complete Pack *\/\n  if(PE_PACK_HIDES_CHAPTER){\n    $$('.ts-card[data-type=\"chapter\"]').forEach(function(c){\n      var id = c.getAttribute('data-id') || '';\n      if(id.indexOf('cw-') === 0 && $('.ts-card[data-id=\"combo-' + id.slice(3) + '\"]')) c.parentNode.removeChild(c);\n    });\n  }\n})();\n\nvar cards = $$('.ts-card');\nvar CARD = {};                      \/\/ id -> {id,title,price,type,el}\ncards.forEach(function(c){\n  var id = c.getAttribute('data-id');\n  if(CARD[id]) return;\n  CARD[id] = { id:id, el:c, type:c.getAttribute('data-type'),\n               title:(c.querySelector('.ts-ctitle') || {}).textContent || c.getAttribute('data-title'),\n               price:parseInt(c.getAttribute('data-price'), 10) || 0 };\n});\nfunction paperOf(c){\n  var o = {}; (c.getAttribute('data-paper') || '').split(',').forEach(function(p){\n    var i = p.indexOf(':'); if(i > 0) o[p.slice(0, i)] = p.slice(i + 1); });\n  return o[EXAM] || '';\n}\nfunction isOwned(woo){ return !!(woo && typeof cssaddaPurchased !== 'undefined' && cssaddaPurchased && cssaddaPurchased[woo]); }\nfunction cartApi(){ return window.CSSAddaCart || null; }\nfunction inCart(id){ var C = cartApi(); return !!(C && C.hasItem && C.hasItem(id)); }\n\n\/* ================================================= 2. bundles *\/\nvar BUN = {}, BUN_ORDER = [];\nfunction siblingsOf(id){\n  \/* a Complete Pack contains the PYQ and the chapter-wise bank of its subject *\/\n  var c = CARD[id]; if(!c || c.type !== 'combo') return [];\n  var base = id.replace(\/^(combo|cw|pyq)-\/, '');\n  return ['pyq-' + base, 'cw-' + base, 'combo-' + base].filter(function(x){ return x !== id && CARD[x]; });\n}\n$$('.bcard[data-bundle]').forEach(function(el){\n  var id = el.getAttribute('data-bundle'), cfg = PE_BUNDLES[id] || {};\n  if(cfg.hide){ el.parentNode.removeChild(el); return; }\n  var b = { id:id, el:el, title:el.querySelector('h4').textContent.trim(), paper:el.getAttribute('data-paper') || '',\n            fmt:el.getAttribute('data-fmt') || '',\n            price:cfg.price || 0, was:cfg.was || 0, woo:cfg.woo || 0, parts:[], extra:[], covers:[], banks:0, sep:0 };\n  (cfg.parts || []).forEach(function(p){\n    var m = String(p).match(\/^([^:]+):(\\d+)(?::(.*))?$\/);\n    if(m){ b.extra.push({ id:m[1], price:+m[2], name:m[3] || m[1] }); b.banks++; b.sep += +m[2]; return; }\n    if(!CARD[p]){ console.warn('PE_BUNDLES: ' + id + ' lists ' + p + ', which is not on this page'); return; }\n    b.parts.push(p); b.sep += CARD[p].price;\n    b.banks += 1;\n    [p].concat(siblingsOf(p)).forEach(function(x){ if(b.covers.indexOf(x) < 0) b.covers.push(x); });\n  });\n  b.save = b.sep > b.price ? b.sep - b.price : 0;\n  b.pct  = b.sep ? Math.round(b.save \/ b.sep * 100) : 0;\n  b.live = !!b.woo;\n  b.product = { id:id, name:b.title + ' \u2014 ' + P.short, type:'bundle', price:b.price,\n                originalPrice:b.was || b.price, icon:'fa-layer-group', wooProductId:b.woo };\n  \/* paint *\/\n  var pr = el.querySelector('.bprice');\n  if(pr) pr.innerHTML = '<b>' + INR(b.price) + '<\/b>' + (b.was > b.price ? '<s>' + INR(b.was) + '<\/s>' : '');\n  var tag = el.querySelector('.btag'); if(tag) tag.textContent = b.banks + ' series' + (b.fmt ? ' \u00b7 ' + b.fmt : '');\n  var sv = el.querySelector('.bsave');\n  if(sv){ sv.hidden = !b.save; sv.textContent = 'Save ' + INR(b.save) + ' \u00b7 ' + b.pct + '%'; }\n  var cmp = el.querySelector('.bcmp');\n  if(cmp){\n    cmp.hidden = !(b.sep > b.price);\n    cmp.innerHTML = '<div class=\"bcmp-row\"><span>Bought one by one<\/span><s>' + INR(b.sep) + '<\/s><\/div>'\n      + '<div class=\"bcmp-bar\" aria-hidden=\"true\"><i style=\"width:' + Math.max(8, Math.round(b.price \/ (b.sep || 1) * 100)) + '%\"><\/i><\/div>'\n      + '<div class=\"bcmp-row\"><span>This bundle<\/span><b>' + INR(b.price) + '<\/b><\/div>';\n  }\n  var ul = el.querySelector('.blist[data-auto]');\n  if(ul){\n    ul.innerHTML = b.parts.map(function(p){ return '<li>' + esc(CARD[p].title) + '<\/li>'; }).join('')\n                 + b.extra.map(function(x){ return '<li>' + esc(x.name) + '<\/li>'; }).join('');\n  }\n  var btn = el.querySelector('.bbtn');\n  if(btn){\n    btn.setAttribute('data-woo-id', b.woo);\n    bumpOC(btn, 'price', b.price); bumpOC(btn, 'originalPrice', b.was || b.price); bumpOC(btn, 'wooProductId', b.woo);\n    btn.innerHTML = b.woo ? '<i class=\"fa-solid fa-cart-plus\"><\/i> Add to cart' : '<i class=\"fa-solid fa-bell\"><\/i> Notify me';\n  }\n  el.classList.toggle('is-soon', !b.woo);\n  var st = el.querySelector('.bstate'); if(st) st.hidden = !!b.woo;\n  BUN[id] = b; BUN_ORDER.push(id);\n});\nfunction bundlesCovering(pid, liveOnly){\n  return BUN_ORDER.map(function(k){ return BUN[k]; }).filter(function(b){\n    return b.covers.indexOf(pid) > -1 && (!liveOnly || b.live);\n  });\n}\n\n\/* ---- \"in a bundle\" hints on cards and on paper headings ---- *\/\nfunction paintHints(){\n  $$('.ts-inb, .ts-secb').forEach(function(n){ n.parentNode.removeChild(n); });\n  cards.forEach(function(c){\n    if(c.getAttribute('data-free') === '1') return;\n    var bs = bundlesCovering(c.getAttribute('data-id'), true);\n    if(!bs.length) return;\n    var b = bs.sort(function(x, y){ return x.price - y.price; })[0];\n    var body = c.querySelector('.ts-cbody');\n    body.insertAdjacentHTML('beforeend', '<button type=\"button\" class=\"ts-inb\" data-goto=\"' + b.id + '\">'\n      + '<i class=\"fa-solid fa-layer-group\"><\/i><span>Also in <b>' + esc(b.title) + '<\/b>'\n      + (b.pct ? ' \u00b7 save ' + b.pct + '%' : '') + '<\/span><\/button>');\n  });\n  $$('.ts-sec').forEach(function(h){\n    var paper = (h.getAttribute('data-group') || '').split('|')[1];\n    var bs = BUN_ORDER.map(function(k){ return BUN[k]; })\n      .filter(function(b){ return b.live && b.paper === paper; })\n      .sort(function(x, y){ return x.price - y.price; });\n    if(!bs.length) return;\n    var b = bs[0];\n    h.insertAdjacentHTML('beforeend', '<button type=\"button\" class=\"ts-secb\" data-goto=\"' + b.id + '\">'\n      + '<i class=\"fa-solid fa-layer-group\"><\/i> Whole paper ' + INR(b.price)\n      + (b.pct ? ' <em>save ' + b.pct + '%<\/em>' : '') + ' <span aria-hidden=\"true\">&rarr;<\/span><\/button>');\n  });\n}\npaintHints();\nroot.addEventListener('click', function(e){\n  var g = e.target.closest('[data-goto]'); if(!g) return;\n  var b = BUN[g.getAttribute('data-goto')]; if(!b) return;\n  var top = b.el.getBoundingClientRect().top + window.pageYOffset - barOffset() - 16;\n  window.scrollTo({ top:top, behavior:'smooth' });\n  b.el.classList.remove('pulse'); void b.el.offsetWidth; b.el.classList.add('pulse');\n});\n\n\/* ================================================= 3. bundle pop-up *\/\nvar UP_KEY = 'pe_up_declined';\nfunction declined(){ try { return JSON.parse(sessionStorage.getItem(UP_KEY) || '{}'); } catch(e){ return window.__peDecl || {}; } }\nfunction decline(ids){\n  var d = declined(); ids.forEach(function(i){ d[i] = 1; });\n  try { sessionStorage.setItem(UP_KEY, JSON.stringify(d)); } catch(e){ window.__peDecl = d; }\n}\nfunction pickOffers(product){\n  var d = declined();\n  return BUN_ORDER.map(function(k){ return BUN[k]; }).filter(function(b){\n    if(b.covers.indexOf(product.id) < 0) return false;\n    if(!(b.live || PE_UPSELL.offerSoon)) return false;\n    if(inCart(b.id) || isOwned(b.woo)) return false;\n    if(d[b.id]){\n      \/* a bundle turned down once comes back only when the cart already holds half of it *\/\n      var have = b.covers.filter(function(x){ return x === product.id || inCart(x); }).length;\n      if(have < Math.ceil(b.parts.length \/ 2)) return false;\n    }\n    return true;\n  }).sort(function(x, y){ return (y.live - x.live) || (x.price - y.price); }).slice(0, PE_UPSELL.max || 2);\n}\nfunction removeCovered(b){\n  var C = cartApi(), gone = 0; if(!C) return 0;\n  b.covers.forEach(function(x){ if(x !== b.id && C.hasItem(x)){ C.removeItem(x); gone++; } });\n  return gone;\n}\nvar up = null, upCtx = null;\nfunction buildUp(){\n  if(up) return up;\n  up = document.createElement('div');\n  up.id = 'pe-up'; up.hidden = true;\n  up.setAttribute('role', 'dialog'); up.setAttribute('aria-modal', 'true'); up.setAttribute('aria-labelledby', 'pe-upT');\n  up.innerHTML =\n    '<div class=\"up-card\">'\n    + '<div class=\"up-head\"><div><p class=\"up-eye\">Before it goes to your cart<\/p>'\n    + '<h3 id=\"pe-upT\">Get the whole set for a little more<\/h3><\/div>'\n    + '<button type=\"button\" class=\"up-x\" aria-label=\"Close\">&#10005;<\/button><\/div>'\n    + '<div class=\"up-body\">'\n    + '<div class=\"up-pick\"><span class=\"lab\">Your pick<\/span><b class=\"nm\"><\/b><span class=\"pr\"><\/span><\/div>'\n    + '<div class=\"up-offers\"><\/div>'\n    + '<p class=\"up-note\"><i class=\"fa-solid fa-shield-halved\"><\/i> Anything from the bundle already in your cart is swapped out \u2014 you never pay twice.<\/p>'\n    + '<\/div>'\n    + '<div class=\"up-foot\"><button type=\"button\" class=\"up-keep\"><\/button><\/div>'\n    + '<\/div>';\n  document.body.appendChild(up);\n  up.addEventListener('click', function(e){\n    if(e.target === up || e.target.closest('.up-x')){ closeUp(); return; }\n    if(e.target.closest('.up-keep')){ keepSingle(); return; }\n    var more = e.target.closest('.up-more');\n    if(more){ more.parentNode.classList.add('all'); more.parentNode.removeChild(more); return; }\n    var go = e.target.closest('.up-go');\n    if(go) switchTo(BUN[go.getAttribute('data-b')]);\n  });\n  document.addEventListener('keydown', function(e){\n    if(up.hidden) return;\n    if(e.key === 'Escape'){ e.stopPropagation(); closeUp(); }\n    if(e.key === 'Tab'){\n      var f = Array.prototype.slice.call(up.querySelectorAll('button')).filter(function(b){ return b.offsetParent; });\n      if(!f.length) return;\n      var i = f.indexOf(document.activeElement);\n      if(e.shiftKey && i <= 0){ e.preventDefault(); f[f.length - 1].focus(); }\n      else if(!e.shiftKey && i === f.length - 1){ e.preventDefault(); f[0].focus(); }\n    }\n  }, true);\n  return up;\n}\nfunction openUp(product, btn, offers){\n  buildUp();\n  upCtx = { product:product, btn:btn, offers:offers };\n  up.querySelector('.nm').textContent = product.title || (CARD[product.id] && CARD[product.id].title) || product.name;\n  up.querySelector('.pr').textContent = INR(product.price);\n  up.querySelector('#pe-upT').textContent = offers.length > 1\n    ? 'This series comes in ' + offers.length + ' bundles'\n    : 'Get the whole set for a little more';\n  up.querySelector('.up-keep').innerHTML = 'No thanks \u2014 add only this series <b>' + INR(product.price) + '<\/b>';\n  up.querySelector('.up-offers').innerHTML = offers.map(function(b, i){\n    var others = b.covers.filter(function(x){ return x !== product.id && inCart(x); });\n    var othersCost = others.reduce(function(s, x){ return s + CARD[x].price; }, 0);\n    var w = function(x){ return 1; };\n    var delta = b.price - product.price - othersCost;\n    var rows = b.parts.map(function(p){\n      var mine = p === product.id || siblingsOf(p).indexOf(product.id) > -1;\n      var tag = mine ? (p === product.id ? 'your pick' : 'includes your pick') : (inCart(p) ? 'in cart' : '');\n      return { mine:mine, html:'<li class=\"' + (mine ? 'me' : (tag ? 'in' : '')) + '\"><span>' + esc(CARD[p].title) + '<\/span>'\n        + (tag ? '<em>' + tag + '<\/em>' : '') + '<\/li>' };\n    }).concat(b.extra.map(function(x){ return { mine:false, html:'<li><span>' + esc(x.name) + '<\/span><\/li>' }; }));\n    rows.sort(function(x, y){ return y.mine - x.mine; });\n    var list = rows.map(function(r){ return r.html; }), cut = list.length <= 5 ? list.length : 4;\n    var rest = list.length - cut;\n    var more = Math.max(0, b.banks - w(product.id) - others.reduce(function(s, x){ return s + w(x); }, 0));\n    var line = delta <= 0\n      ? 'That is <b>' + INR(-delta) + ' less<\/b> than paying for ' + (others.length ? 'these series' : 'this series') + ' separately.'\n      : (others.length\n          ? 'With the ' + others.length + ' series already in your cart, it is just <b>' + INR(delta) + ' more<\/b>.'\n          : 'Only <b>' + INR(delta) + ' more<\/b> than this series alone' + (more ? ' \u2014 for ' + more + ' more series.' : '.'));\n    return '<article class=\"up-offer' + (BUN[b.id].el.classList.contains('feature') ? ' best' : '') + '\">'\n      + '<div class=\"up-otop\"><span class=\"tag\">' + b.banks + ' series' + (b.fmt ? ' \u00b7 ' + esc(b.fmt) : '') + '<\/span>'\n      + (b.pct ? '<span class=\"save\">Save ' + INR(b.save) + ' \u00b7 ' + b.pct + '%<\/span>' : '') + '<\/div>'\n      + '<h4>' + esc(b.title) + '<\/h4>'\n      + '<ul class=\"up-list' + (rest > 0 ? '' : ' all') + '\">' + list.join('')\n      + (rest > 0 ? '<li class=\"up-more\"><button type=\"button\">+ ' + rest + ' more in this bundle<\/button><\/li>' : '') + '<\/ul>'\n      + '<div class=\"up-cmp\">'\n      + (b.sep > b.price ? '<div class=\"a\"><span>Bought one by one<\/span><s>' + INR(b.sep) + '<\/s><\/div>' : '')\n      + '<div class=\"b\"><span>Bundle<\/span><b>' + INR(b.price) + '<\/b><\/div><\/div>'\n      + '<p class=\"up-delta\">' + line + '<\/p>'\n      + (b.live\n          ? '<button type=\"button\" class=\"up-go\" data-b=\"' + b.id + '\"><i class=\"fa-solid fa-layer-group\"><\/i> Switch to bundle \u00b7 ' + INR(b.price) + '<\/button>'\n          : '<p class=\"up-soon\">Bundle opening soon \u2014 you can switch once it launches.<\/p>')\n      + '<\/article>';\n  }).join('');\n  up.hidden = false;\n  document.body.style.overflow = 'hidden';\n  requestAnimationFrame(function(){ up.classList.add('open');\n    var f = up.querySelector('.up-go') || up.querySelector('.up-keep'); if(f) f.focus(); });\n}\nfunction closeUp(){\n  if(!up || up.hidden) return;\n  up.classList.remove('open'); up.hidden = true;\n  document.body.style.overflow = '';\n  if(upCtx && upCtx.btn && upCtx.btn.focus) upCtx.btn.focus();\n}\nfunction keepSingle(){\n  var ctx = upCtx; closeUp();\n  decline(ctx.offers.map(function(b){ return b.id; }));\n  window.addToCart(ctx.product, ctx.btn);\n}\nfunction switchTo(b){\n  var ctx = upCtx; closeUp();\n  var gone = removeCovered(b);\n  var r = window.addToCart(b.product, b.el.querySelector('.bbtn'));\n  var C = cartApi();\n  if(C && gone && C.hasItem(b.id)) C.showToast('\u2705 ' + b.title + ' added \u2014 ' + gone + ' series inside it taken out of your cart', 'success');\n  return r;\n}\n\/* every Add-to-cart on this page goes through here first *\/\nwindow.peAddToCart = function(product, btn){\n  if(typeof window.addToCart !== 'function'){ console.error('[PromotionExams] cart script not loaded'); return; }\n  var C = cartApi();\n  var loggedOut = typeof cssaddaIsLoggedIn !== 'undefined' && !cssaddaIsLoggedIn;\n  if(loggedOut || (btn && btn.classList.contains('purchased')) || !product.wooProductId) return window.addToCart(product, btn);\n  if(product.type === 'bundle'){\n    var b = BUN[product.id], gone = (b && !inCart(b.id)) ? removeCovered(b) : 0;\n    var r = window.addToCart(product, btn);\n    if(C && gone && C.hasItem(product.id)) C.showToast('\u2705 Bundle added \u2014 ' + gone + ' series inside it taken out of your cart', 'success');\n    return r;\n  }\n  if(inCart(product.id) || !PE_UPSELL.on || !(product.price > 0)) return window.addToCart(product, btn);\n  var holder = bundlesCovering(product.id).filter(function(b){ return inCart(b.id); })[0];\n  if(holder){ C.showToast('Already in your cart \u2014 it comes with ' + holder.title, 'info'); return; }\n  var owner = bundlesCovering(product.id).filter(function(b){ return isOwned(b.woo); })[0];\n  if(owner){ C.showToast('You already own this through ' + owner.title + ' \u2014 open My Purchases', 'info'); return; }\n  var offers = pickOffers(product);\n  if(!offers.length) return window.addToCart(product, btn);\n  openUp(product, btn, offers);\n};\n\n\/* ================================================= 4. shelf filters *\/\nvar grid = $('#ts-grid'), qEl = $('#ts-q'), empty = $('#ts-empty'), note = $('#ts-note');\nvar state = { fmt:'all', paper:'' };\nfunction q(){ return qEl ? qEl.value.trim().toLowerCase() : ''; }\nfunction okFmt(c, f){ f = f === undefined ? state.fmt : f; return f === 'all' || c.getAttribute('data-type') === f; }\nfunction okPaper(c, p){ p = p === undefined ? state.paper : p; return !p || paperOf(c) === p; }\nfunction okQ(c){ var s = q(); if(!s) return true;\n  return ((c.getAttribute('data-title') || '') + ' ' + (c.getAttribute('data-subject') || '') + ' '\n          + (c.querySelector('.ts-ctitle') || {}).textContent).toLowerCase().indexOf(s) > -1; }\nfunction tally(fns){ return cards.filter(function(c){ return fns.every(function(f){ return f(c); }); }).length; }\nfunction liveIn(g){\n  return cards.some(function(c){\n    if(c.style.display === 'none') return false;\n    var cg = c.getAttribute('data-group') || '';\n    return cg === g || cg.indexOf(g + '|') === 0;\n  });\n}\nfunction syncHeads(){\n  $$('.ts-headsoon').forEach(function(b){\n    var g = b.getAttribute('data-group'), part = g.split('|');\n    var on = state.fmt === 'all' && !q() && (!state.paper || state.paper === part[1]) && !liveIn(g);\n    b.style.display = on ? '' : 'none';\n  });\n  $$('.ts-sec, .ts-sub').forEach(function(h){\n    var g = h.getAttribute('data-group');\n    var strip = root.querySelector('.ts-headsoon[data-group=\"' + g + '\"]');\n    h.style.display = (liveIn(g) || (strip && strip.style.display !== 'none')) ? '' : 'none';\n  });\n}\nfunction drawChips(){\n  $$('#ts-paperChips .chip').forEach(function(b){\n    var p = b.getAttribute('data-paper');\n    b.setAttribute('aria-pressed', String(p === state.paper));\n    if(!p) return;\n    var n = tally([okFmt, okQ, function(c){ return okPaper(c, p); }]);\n    var soonHead = b.hasAttribute('data-soonhead');\n    b.hidden = n === 0 && p !== state.paper && !soonHead;\n    var em = b.querySelector('em'); if(em) em.textContent = n ? n : (soonHead ? 'soon' : '0');\n  });\n  $$('#ts-fmtChips .chip[data-fmt]').forEach(function(b){\n    var f = b.getAttribute('data-fmt');\n    b.setAttribute('aria-pressed', String(f === state.fmt));\n    var n = tally([function(c){ return okFmt(c, f); }, okPaper, okQ]);\n    b.hidden = n === 0 && f !== 'all' && f !== state.fmt;\n  });\n}\nfunction drawActive(){\n  var host = $('#ts-active'), out = [];\n  var X = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"><path d=\"M5 5l14 14M19 5L5 19\"\/><\/svg>';\n  if(q()) out.push({ k:'q', t:'\u201c' + esc(q()) + '\u201d' });\n  if(state.fmt !== 'all') out.push({ k:'fmt', t:P.fmtLabel[state.fmt] });\n  if(state.paper){\n    var lab = state.paper; P.syllabus.forEach(function(p){ if(p.paper === state.paper) lab = p.label; });\n    out.push({ k:'paper', t:esc(lab) });\n  }\n  host.innerHTML = out.length ? '<span class=\"lb\">Filtering by<\/span>' + out.map(function(c){\n    return '<button type=\"button\" class=\"fchip\" data-k=\"' + c.k + '\"><span>' + c.t + '<\/span>' + X + '<\/button>';\n  }).join('') + '<button type=\"button\" class=\"ts-clearall\" data-clear>Clear all<\/button>' : '';\n}\nfunction apply(){\n  var shown = 0;\n  cards.forEach(function(c){\n    var ok = okFmt(c) && okPaper(c) && okQ(c);\n    c.style.display = ok ? 'flex' : 'none'; if(ok) shown++;\n  });\n  syncHeads();\n  var soonRows = $$('.ts-headsoon').filter(function(b){ return b.style.display !== 'none'; }).length;\n  empty.hidden = shown + soonRows > 0; grid.hidden = shown + soonRows === 0;\n  note.innerHTML = (state.fmt === 'all' && P.examNote) ? P.examNote : P.note[state.fmt];\n  var qx = $('#ts-qx'); if(qx) qx.style.display = q() ? 'block' : 'none';\n  drawChips(); drawActive(); fitWidth();\n}\nfunction reset(){ if(qEl) qEl.value = ''; state.fmt = 'all'; state.paper = ''; apply(); toast('Filters cleared.'); }\nfunction barOffset(){ var bar = $('.ts-bar'); return (parseFloat(getComputedStyle(root).getPropertyValue('--ts-top')) || 0) + (bar ? bar.offsetHeight : 0); }\nfunction toShelf(){\n  var top = $('.ts-main').getBoundingClientRect().top + window.pageYOffset - barOffset() - 6;\n  window.scrollTo({ top:top, behavior:'smooth' });\n}\nif($('#ts-fmtChips')) $('#ts-fmtChips').addEventListener('click', function(e){\n  var b = e.target.closest('.chip[data-fmt]'); if(!b) return;\n  state.fmt = b.getAttribute('data-fmt'); apply();\n});\n$('#ts-paperChips').addEventListener('click', function(e){\n  var b = e.target.closest('.chip'); if(!b) return;\n  state.paper = b.getAttribute('data-paper'); apply();\n});\n$$('[data-gopaper]').forEach(function(a){\n  a.addEventListener('click', function(e){\n    e.preventDefault(); state.paper = a.getAttribute('data-gopaper'); state.fmt = 'all'; apply(); toShelf();\n  });\n});\n$('#ts-active').addEventListener('click', function(e){\n  if(e.target.closest('[data-clear]')){ reset(); return; }\n  var b = e.target.closest('.fchip'); if(!b) return;\n  var k = b.getAttribute('data-k');\n  if(k === 'q' && qEl) qEl.value = ''; else if(k === 'fmt') state.fmt = 'all'; else if(k === 'paper') state.paper = '';\n  apply();\n});\n$('#ts-reset').addEventListener('click', reset);\nif($('#ts-qx')) $('#ts-qx').addEventListener('click', function(){ qEl.value = ''; apply(); qEl.focus(); });\nif(qEl){\n  qEl.addEventListener('input', apply);\n  qEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); toShelf(); } });\n}\ngrid.addEventListener('click', function(e){\n  if(e.target.closest('.ts-headsoon button')) toast('Noted \u2014 we will email you the day this head opens.');\n});\n\n\/* ================================================= 5. live mock series *\/\nvar LM = window.LIVE_MOCKS || null, lmPaper = '';\nvar lmBtns = $$('.lm-enroll:not(.notify)');\nfunction mStart(m){ return new Date(m.date + 'T' + (m.time || '10:00') + ':00+05:30'); }\nfunction mEnd(m){ return new Date(mStart(m).getTime() + (LM.window || 24) * 3600e3); }\nvar DAYS = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'], MONS = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\nfunction ist(d){ return new Date(d.getTime() + 330 * 60e3); }   \/* read UTC fields of this = IST wall clock *\/\nfunction fmtWhen(d){\n  var t = ist(d), h = t.getUTCHours(), mi = t.getUTCMinutes();\n  return DAYS[t.getUTCDay()] + ', ' + t.getUTCDate() + ' ' + MONS[t.getUTCMonth()] + ' \u00b7 '\n    + ((h % 12) || 12) + ':' + (mi < 10 ? '0' : '') + mi + (h < 12 ? ' AM' : ' PM') + ' IST';\n}\nfunction fmtRange(m){\n  var a = ist(mStart(m)), b = ist(new Date(mStart(m).getTime() + (m.mins || 120) * 60e3));\n  function hm(t, ap){ var h = t.getUTCHours(), mi = t.getUTCMinutes(); return ((h % 12) || 12) + ':' + (mi < 10 ? '0' : '') + mi + (ap ? (h < 12 ? ' AM' : ' PM') : ''); }\n  var same = (a.getUTCHours() < 12) === (b.getUTCHours() < 12);\n  return DAYS[a.getUTCDay()] + ', ' + a.getUTCDate() + ' ' + MONS[a.getUTCMonth()] + ' \u00b7 ' + hm(a, !same) + '\u2013' + hm(b, true) + ' IST';\n}\nfunction fmtLeft(ms){\n  var s = Math.max(0, Math.floor(ms \/ 1000)), d = Math.floor(s \/ 86400), h = Math.floor(s % 86400 \/ 3600), m = Math.floor(s % 3600 \/ 60);\n  return d ? d + 'd ' + h + 'h' : (h ? h + 'h ' + m + 'm' : m + 'm');\n}\nfunction durTxt(mins){ return mins % 60 ? (mins >= 60 ? Math.floor(mins \/ 60) + ' h ' : '') + mins % 60 + ' min' : (mins \/ 60) + (mins === 60 ? ' hour' : ' hours'); }\nfunction mockState(m, now){\n  var s = mStart(m), e = mEnd(m);\n  return now < s ? 'up' : (now < e ? 'live' : 'done');\n}\nfunction seriesStart(){ return LM.starts ? new Date(LM.starts + 'T' + (LM.startsTime || '09:30') + ':00+05:30') : null; }\nfunction enrolDeadline(){\n  if(LM.enrolBy) return new Date(LM.enrolBy);\n  var f = (LM.list || []).slice().sort(function(a, b){ return mStart(a) - mStart(b); })[0];\n  return f ? mStart(f) : seriesStart();\n}\nfunction tickEnrol(){\n  var d = enrolDeadline(); if(!d) return;\n  var now = new Date(), closed = now >= d;\n  $$('.lm-enroll').forEach(function(b){\n    if(closed && !b.classList.contains('purchased') && !b.classList.contains('closed')){\n      b.classList.add('closed'); b.disabled = true; b.innerHTML = '<i class=\"fa-solid fa-lock\"><\/i> Enrolment closed';\n    }\n  });\n  $$('[data-enrol-by]').forEach(function(el){\n    el.innerHTML = closed\n      ? '<i class=\"fa-solid fa-lock\"><\/i><span>Enrolment closed ' + fmtWhen(d) + ' \\u2014 <a href=\"' + PE_WA + '\" target=\"_blank\" rel=\"noopener noreferrer\">ask on WhatsApp<\/a> for a late seat<\/span>'\n      : '<i class=\"fa-regular fa-calendar-check\"><\/i><span>Enrol any time before the first test opens \\u2014 <b>' + fmtWhen(d) + '<\/b> \\u00b7 ' + fmtLeft(d - now) + ' left<\/span>';\n  });\n}\nfunction nextMock(now){\n  var live = null, up = null;\n  (LM.list || []).forEach(function(m){\n    var st = mockState(m, now);\n    if(st === 'live' && !live) live = m;\n    if(st === 'up' && (!up || mStart(m) < mStart(up))) up = m;\n  });\n  return live || up;\n}\nfunction paintMocks(){\n  if(!LM || !$('#lm-list')){ tickMocks(); return; }\n  var now = new Date(), nx = nextMock(now), list = (LM.list || []).slice().sort(function(a, b){ return mStart(a) - mStart(b); });\n  $('#lm-list').innerHTML = list.map(function(m, i){\n    var st = mockState(m, now), s = ist(mStart(m));\n    var chip = st === 'live' ? '<span class=\"lm-st live\"><i><\/i>Live now \u00b7 closes in ' + fmtLeft(mEnd(m) - now) + '<\/span>'\n             : st === 'up'   ? '<span class=\"lm-st up\">' + (m === nx ? 'Next \u00b7 in ' + fmtLeft(mStart(m) - now) : 'Upcoming') + '<\/span>'\n             :                 '<span class=\"lm-st done\">Completed \u00b7 practice mode open<\/span>';\n    var meta = [m.paper, m.qs ? m.qs + ' Qs' : '', m.marks ? m.marks + ' marks' : '', m.mins ? durTxt(m.mins) : ''].filter(Boolean).join(' \u00b7 ');\n    var code = m.code ? esc(m.code) : 'Mock ' + (i + 1);\n    var demo = (LM.demo && LM.demo.url && m.code && LM.demo.code === m.code)\n      ? '<a class=\"lm-demo-lnk\" href=\"' + esc(LM.demo.url) + '\" target=\"_blank\" rel=\"noopener noreferrer\"><i class=\"fa-solid fa-play\"><\/i> Try the demo booklet<\/a>' : '';\n    return '<li class=\"lm-row ' + st + (m === nx ? ' nx' : '') + '\" data-paper=\"' + esc(m.paper || '') + '\"' + (lmPaper && m.paper !== lmPaper ? ' hidden' : '') + '>'\n      + '<div class=\"lm-date\"><b>' + s.getUTCDate() + '<\/b><span>' + MONS[s.getUTCMonth()] + '<\/span><em>' + DAYS[s.getUTCDay()] + '<\/em><\/div>'\n      + '<div class=\"lm-info\"><span class=\"lm-n\">' + code + (m.kind ? ' <em>' + esc(m.kind) + '<\/em>' : '') + '<\/span><h4>' + m.title + '<\/h4>'\n      + '<p class=\"lm-meta\">' + meta + '<\/p>'\n      + '<p class=\"lm-time\"><i class=\"fa-regular fa-clock\"><\/i> ' + fmtRange(m) + '<\/p>' + demo + '<\/div>'\n      + '<div class=\"lm-side\">' + chip + '<\/div><\/li>';\n  }).join('');\n  var cnt = $('#lm-count'); if(cnt) cnt.textContent = list.length + ' tests \u00b7 ' + (LM.window || 24) + '-hour ranked window each';\n  var pf = $('#lm-pf');\n  if(pf && !pf.children.length){\n    var ps = []; list.forEach(function(m){ if(m.paper && \/^Paper\/.test(m.paper) && ps.indexOf(m.paper) < 0) ps.push(m.paper); });\n    if(ps.length > 1){\n      pf.innerHTML = [''].concat(ps).map(function(x){ return '<button type=\"button\" class=\"chip\" data-lmp=\"' + esc(x) + '\" aria-pressed=\"' + String(x === lmPaper) + '\">' + (x || 'All') + '<\/button>'; }).join('');\n      pf.addEventListener('click', function(e){ var b = e.target.closest('[data-lmp]'); if(!b) return; lmPaper = b.getAttribute('data-lmp'); paintMocks(); });\n    }\n  }\n  $$('#lm-pf .chip').forEach(function(b){ b.setAttribute('aria-pressed', String(b.getAttribute('data-lmp') === lmPaper)); });\n  tickMocks();\n}\nfunction tickMocks(){\n  if(!LM) return;\n  var now = new Date(), nx = nextMock(now);\n  var boxes = $$('[data-lm-next]');\n  boxes.forEach(function(box){\n    var t = box.querySelector('.lmn-title'), w = box.querySelector('.lmn-when'), cd = box.querySelector('.lmn-cd');\n    if(LM.announce) return;\n    var ss = seriesStart();\n    if(!nx && ss && !(LM.list || []).length){\n      \/* no schedule yet: count down to the day the series opens *\/\n      if(ss > now){\n        t.textContent = 'Opens ' + fmtWhen(ss).replace(\/ \\u00b7 .*$\/, ''); w.textContent = 'Schedule to be published \\u00b7 enrol before it opens';\n        if(cd){\n          var ms0 = ss - now, s0 = Math.max(0, Math.floor(ms0 \/ 1000));\n          var p0 = [[Math.floor(s0 \/ 86400), 'days'], [Math.floor(s0 % 86400 \/ 3600), 'hrs'], [Math.floor(s0 % 3600 \/ 60), 'min'], [s0 % 60, 'sec']];\n          cd.innerHTML = p0.map(function(p){ return '<div><b>' + (p[0] < 10 ? '0' : '') + p[0] + '<\/b><span>' + p[1] + '<\/span><\/div>'; }).join('');\n        }\n      } else { t.textContent = 'The series is open'; w.textContent = 'Schedule to be published'; if(cd) cd.innerHTML = ''; }\n      return;\n    }\n    if(!nx){\n      t.textContent = 'This cycle\u2019s mocks are complete'; w.textContent = 'Every paper stays open in practice mode';\n      if(cd) cd.innerHTML = ''; box.classList.add('over'); return;\n    }\n    var live = mockState(nx, now) === 'live';\n    var k = box.querySelector('.lmn-k');\n    if(k){ if(!k.dataset.def) k.dataset.def = k.textContent; k.textContent = live ? 'Live now' : k.dataset.def; }\n    t.innerHTML = nx.title;\n    w.textContent = live ? 'Live now \u2014 ranked window closes ' + fmtWhen(mEnd(nx)) : fmtWhen(mStart(nx));\n    box.classList.toggle('is-live', live);\n    if(cd){\n      var ms = (live ? mEnd(nx) : mStart(nx)) - now, s = Math.max(0, Math.floor(ms \/ 1000));\n      var parts = [[Math.floor(s \/ 86400), 'days'], [Math.floor(s % 86400 \/ 3600), 'hrs'], [Math.floor(s % 3600 \/ 60), 'min'], [s % 60, 'sec']];\n      cd.innerHTML = parts.map(function(p){ return '<div><b>' + (p[0] < 10 ? '0' : '') + p[0] + '<\/b><span>' + p[1] + '<\/span><\/div>'; }).join('');\n      cd.setAttribute('aria-label', (live ? 'Closes in ' : 'Starts in ') + fmtLeft(ms));\n    }\n  });\n}\nif(LM){\n  \/* the enrol button follows LIVE_MOCKS.product, same rules as a card *\/\n  var pr = LM.product || {};\n  lmBtns.forEach(function(lmBtn){\n    lmBtn.setAttribute('data-woo-id', pr.woo || 0);\n    bumpOC(lmBtn, 'price', pr.price || 0); bumpOC(lmBtn, 'originalPrice', pr.was || pr.price || 0); bumpOC(lmBtn, 'wooProductId', pr.woo || 0);\n    lmBtn.innerHTML = '<i class=\"fa-solid fa-bolt\"><\/i> Enrol now';\n    \/* no Woo ID yet: \"Enrol now\" opens a WhatsApp chat (or the launching-soon toast), so enrolment never dead-ends *\/\n    if(!pr.woo && LM.enrol && LM.enrol.fallback === 'wa'){\n      lmBtn.removeAttribute('onclick');\n      lmBtn.addEventListener('click', function(){\n        window.open(PE_WA + '?text=' + encodeURIComponent(LM.enrol.text || ('I want to enrol in ' + pr.name)), '_blank', 'noopener');\n      });\n    }\n  });\n  $$('[data-lm-price]').forEach(function(lp){\n    var off = pr.was > pr.price ? Math.round((pr.was - pr.price) \/ pr.was * 100) : 0;\n    lp.innerHTML = pr.price > 0 ? '<b>' + INR(pr.price) + '<\/b>' + (pr.was > pr.price ? '<s>' + INR(pr.was) + '<\/s><i>' + off + '% off<\/i>' : '')\n                                : '<em class=\"ts-tbd\">Price on launch<\/em>';\n  });\n  if(LM.plan && LM.plan.url) $$('[data-plan-link]').forEach(function(a){ a.href = LM.plan.url; });\n  else $$('.lm-planlink, .lm-sylcard.plan:not(.soon)').forEach(function(n){ n.hidden = true; });\n  var dp = $('#lm-demo');\n  if(dp){\n    if(LM.demo && LM.demo.url){ $$('[data-demo-link]').forEach(function(a){ a.href = LM.demo.url; }); }\n    else dp.hidden = true;\n  }\n  paintMocks(); tickEnrol();\n  setInterval(tickMocks, 1000); setInterval(tickEnrol, 30000);\n  setInterval(paintMocks, 60000);\n  \/* structured data for the schedule, built from the same list *\/\n  try {\n    var pr2 = LM.product || {};\n    var ev = (LM.list || []).filter(function(m){ return mEnd(m) > new Date(); }).map(function(m){\n      return { '@type':'EducationEvent', name:pr2.name + ' \u2014 ' + m.title.replace(\/&amp;\/g, '&'),\n        startDate:m.date + 'T' + (m.time || '10:00') + ':00+05:30',\n        endDate:new Date(mStart(m).getTime() + (m.mins || 120) * 60e3).toISOString(),\n        eventAttendanceMode:'https:\/\/schema.org\/OnlineEventAttendanceMode', eventStatus:'https:\/\/schema.org\/EventScheduled',\n        location:{ '@type':'VirtualLocation', url:P.url + '#live-mocks' },\n        description:(m.covers || '').replace(\/<[^>]+>\/g, '').replace(\/&amp;\/g, '&'), image:P.logo,\n        organizer:{ '@type':'Organization', name:'PromotionExams', url:'https:\/\/promotionexams.com\/' },\n        offers:{ '@type':'Offer', price:String(pr2.price || 0), priceCurrency:'INR', url:P.url + '#live-mocks',\n                 availability:pr2.woo ? 'https:\/\/schema.org\/InStock' : 'https:\/\/schema.org\/PreOrder' } };\n    });\n    if(ev.length){\n      var sd = document.createElement('script'); sd.type = 'application\/ld+json';\n      sd.textContent = JSON.stringify({ '@context':'https:\/\/schema.org', '@graph':ev });\n      root.appendChild(sd);\n    }\n  } catch(e){ console.warn(e); }\n}\n\n\/* ================================================= 6. hero: exam countdown + counts *\/\n(function(){\n  var n = cards.length;\n  $$('[data-count=\"series\"]').forEach(function(el){ el.textContent = n; });\n  $$('[data-paper-count]').forEach(function(el){\n    var p = el.getAttribute('data-paper-count');\n    var c = cards.filter(function(x){ return paperOf(x) === p; }).length;\n    el.textContent = c ? c + ' series' : 'soon';\n  });\n  var box = $('#ts-examday');\n  if(!PE_EXAM.date){ if(box) box.classList.add('tbd'); return; }\n  var d = new Date(PE_EXAM.date + 'T09:00:00+05:30'), left = Math.ceil((d - new Date()) \/ 86400e3);\n  var t = ist(d), lab = DAYS[t.getUTCDay()] + ', ' + t.getUTCDate() + ' ' + MONS[t.getUTCMonth()] + ' ' + t.getUTCFullYear();\n  $$('[data-examdate]').forEach(function(el){ el.textContent = t.getUTCDate() + ' ' + MONS[t.getUTCMonth()] + ' ' + t.getUTCFullYear(); });\n  if(!box) return;\n  var edd = box.querySelector('.ed-date'); if(edd && !edd.textContent.trim()) edd.textContent = lab;\n  box.querySelector('.ed-left').innerHTML = left > 1 ? '<b>' + left + '<\/b> days to go' : (left === 1 ? '<b>1<\/b> day to go' : (left === 0 ? 'Today' : 'Exam held'));\n  if(left < 0) box.classList.add('past');\n})();\n\n\/* ================================================= 7. modal, FAQ, toast, carousel, validity *\/\nvar tTimer;\nfunction toast(msg){\n  var t = $('#ts-toast'); if(!t) return;\n  $('#ts-toastMsg').textContent = msg; t.classList.add('show');\n  clearTimeout(tTimer); tTimer = setTimeout(function(){ t.classList.remove('show'); }, 3000);\n}\nfunction openSyllabus(){ $('#ts-modal').classList.add('open'); }\nfunction closeSyllabus(){ $('#ts-modal').classList.remove('open'); }\n$$('[data-syllabus]').forEach(function(b){ b.addEventListener('click', openSyllabus); });\n$('#ts-modalX').addEventListener('click', closeSyllabus);\n$('#ts-modalClose').addEventListener('click', closeSyllabus);\n$('#ts-modal').addEventListener('click', function(e){ if(e.target === this) closeSyllabus(); });\ndocument.addEventListener('keydown', function(e){ if(e.key === 'Escape') closeSyllabus(); });\n$$('[data-notify]').forEach(function(b){\n  b.addEventListener('click', function(){ toast('Noted \u2014 we will email you the day it opens.'); });\n});\n$$('.faq-q').forEach(function(b){\n  b.addEventListener('click', function(){\n    var open = b.getAttribute('aria-expanded') === 'true';\n    b.setAttribute('aria-expanded', String(!open));\n    b.nextElementSibling.hidden = open;\n    b.closest('.faq-item').classList.toggle('open', !open);\n  });\n});\n(function(){\n  var HTML = '<i class=\"fa-solid fa-hourglass-half\"><\/i> ' + esc(PE_VALIDITY);\n  function line(cls){ var d = document.createElement('div'); d.className = cls; d.innerHTML = HTML; return d; }\n  cards.forEach(function(c){\n    var body = c.querySelector('.ts-cbody'); if(!body || body.querySelector('.ts-valid')) return;\n    var inb = body.querySelector('.ts-inb');\n    inb ? body.insertBefore(line('ts-valid'), inb) : body.appendChild(line('ts-valid'));\n  });\n  $$('.bcard').forEach(function(b){\n    if(b.querySelector('.b-valid')) return;\n    var foot = b.querySelector('.bfoot'); var d = line('b-valid');\n    foot ? b.insertBefore(d, foot) : b.appendChild(d);\n  });\n})();\n\/* full-bleed + top-gap, same as the Rules Repository *\/\nfunction fitWidth(){\n  root.style.setProperty('--ts-vw', document.documentElement.clientWidth + 'px');\n  var bar = $('.ts-bar'); if(bar) root.style.setProperty('--ts-barh', bar.offsetHeight + 'px');\n}\nfunction killTopGap(){\n  var manual = root.style.getPropertyValue('--ts-manual-pull').trim();\n  if(manual){ root.style.setProperty('--ts-pull', manual); return; }\n  root.style.setProperty('--ts-pull', '0px');\n  var el = root, pull = 0, hops = 0;\n  while(el.parentElement && el.parentElement.tagName !== 'BODY' && hops < 8){\n    var parent = el.parentElement, prev = el.previousElementSibling, blocked = false;\n    while(prev){\n      var ps = getComputedStyle(prev);\n      if(ps.display !== 'none' && ps.position !== 'absolute' && ps.position !== 'fixed'){ blocked = true; break; }\n      prev = prev.previousElementSibling;\n    }\n    if(blocked) break;\n    var cs = getComputedStyle(parent), es = getComputedStyle(el);\n    pull += (parseFloat(cs.paddingTop) || 0) + (parseFloat(cs.borderTopWidth) || 0);\n    if(el !== root) pull += (parseFloat(es.marginTop) || 0);\n    el = parent; hops++;\n  }\n  if(pull > 0) root.style.setProperty('--ts-pull', pull + 'px');\n}\nfunction reflow(){ fitWidth(); killTopGap(); }\nreflow();\nwindow.addEventListener('resize', reflow);\nwindow.addEventListener('load', reflow);\n(function(){\n  var deck = $('#shotDeck'), track = $('#shotTrack'), cap = $('#shotCap');\n  if(!deck || !track) return;\n  var slides = $$('.shot-slide'), dots = $$('.shot-dot'),\n      caps = ['Practice \u2014 every answer cites the governing rule',\n              'My Performance \u2014 readiness scored against exam weight',\n              'Exam Analytics \u2014 what the paper has actually asked'],\n      len = slides.length, i = 0, timer = null, paused = false;\n  var still = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  function go(k){\n    i = (k % len + len) % len;\n    track.style.transform = 'translateX(' + (-i * 100) + '%)';\n    dots.forEach(function(d, j){ d.classList.toggle('on', j === i); });\n    slides.forEach(function(s, j){ s.setAttribute('aria-hidden', j !== i); });\n    if(cap) cap.textContent = caps[i] || '';\n  }\n  function start(){ if(still || timer) return; timer = setInterval(function(){ if(!paused) go(i + 1); }, 4600); }\n  function stop(){ if(timer){ clearInterval(timer); timer = null; } }\n  dots.forEach(function(d, j){ d.addEventListener('click', function(){ go(j); stop(); start(); }); });\n  ['mouseenter','focusin'].forEach(function(e){ deck.addEventListener(e, function(){ paused = true; }); });\n  ['mouseleave','focusout'].forEach(function(e){ deck.addEventListener(e, function(){ paused = false; }); });\n  go(0);\n  if(window.IntersectionObserver){\n    new IntersectionObserver(function(en){ en[0].isIntersecting ? start() : stop(); }, { threshold:0.3 }).observe(deck);\n  } else start();\n})();\napply();\n})();\n\n<\/script>\n<!-- ===================================================================\n     CSS ADDA \u2014 Cart System v3.0. Requires the \"CSS Adda Cart Sync v3\"\n     PHP snippet in WordPress. If your theme footer already loads this\n     sitewide, delete this block \u2014 the cart re-initialises safely either way.\n     =================================================================== -->\n<script>\n(function() {\n    'use strict';\n    const CONFIG = {\n        storageKey: 'cssadda_cart',\n        maxItems: 50,\n        toastDuration: 3000,\n        DEBUG_MODE: true  \/\/ Set to false in production\n    };\n    function debug(...args) {\n        if (CONFIG.DEBUG_MODE) { console.log('[CSS ADDA Cart]', ...args); }\n    }\n    class Cart {\n        constructor() { this.items = this.loadFromStorage(); this.listeners = []; }\n        loadFromStorage() {\n            try {\n                const data = localStorage.getItem(CONFIG.storageKey);\n                const items = data ? JSON.parse(data) : [];\n                return Array.isArray(items) ? items : [];\n            } catch (e) { console.error('Error loading cart:', e); return []; }\n        }\n        saveToStorage() {\n            try { localStorage.setItem(CONFIG.storageKey, JSON.stringify(this.items)); }\n            catch (e) { console.error('Error saving cart:', e); }\n        }\n        addItem(product) {\n            if (!product || !product.id || !product.name || typeof product.price !== 'number') {\n                return { success: false, message: 'Invalid product data' };\n            }\n            if (this.hasItem(product.id)) { return { success: false, message: 'Already in cart' }; }\n            if (this.items.length >= CONFIG.maxItems) {\n                return { success: false, message: 'Cart is full (max ' + CONFIG.maxItems + ' items)' };\n            }\n            product.addedAt = new Date().toISOString();\n            this.items.push(product);\n            this.saveToStorage();\n            this.notifyListeners('add', product);\n            return { success: true, message: 'Added to cart' };\n        }\n        removeItem(productId) {\n            const index = this.items.findIndex(item => item.id === productId);\n            if (index === -1) { return { success: false, message: 'Item not found' }; }\n            const removed = this.items.splice(index, 1)[0];\n            this.saveToStorage();\n            this.notifyListeners('remove', removed);\n            return { success: true, message: 'Item removed', item: removed };\n        }\n        hasItem(productId) { return this.items.some(item => item.id === productId); }\n        getItems() { return [...this.items]; }\n        getCount() { return this.items.length; }\n        getTotal() { return this.items.reduce((s, i) => s + (i.price || 0), 0); }\n        getOriginalTotal() { return this.items.reduce((s, i) => s + (i.originalPrice || i.price || 0), 0); }\n        getSavings() { return this.getOriginalTotal() - this.getTotal(); }\n        clear() { this.items = []; this.saveToStorage(); this.notifyListeners('clear', null); }\n        addListener(cb) { this.listeners.push(cb); }\n        notifyListeners(a, p) { this.listeners.forEach(cb => { try { cb(a, p, this); } catch(e) { console.error(e); } }); }\n    }\n    class CartUI {\n        constructor(cart) { this.cart = cart; this.isOpen = false; this.elements = {}; }\n        init() {\n            this.createCartHTML(); this.cacheElements(); this.bindEvents(); this.update();\n            this.cart.addListener(() => this.update()); this.syncWithWooCommerce();\n        }\n        syncWithWooCommerce() {\n            if (typeof cssaddaCartSync !== 'undefined') {\n                if ((cssaddaCartSync.wcCartCount || 0) > 0 && this.cart.getCount() === 0) {\n                    this.clearWooCommerceCart();\n                }\n            } else {\n                console.warn('[CSS ADDA] cssaddaCartSync not found. PHP snippet may not be active.');\n            }\n        }\n        clearWooCommerceCart() {\n            if (typeof cssaddaCartSync === 'undefined') return;\n            const fd = new FormData();\n            fd.append('action', 'cssadda_clear_wc_cart');\n            fd.append('nonce', cssaddaCartSync.nonce);\n            fetch(cssaddaCartSync.ajaxUrl, { method:'POST', body:fd, credentials:'same-origin' })\n                .then(r => r.json()).catch(err => console.error('Clear WC cart error:', err));\n        }\n        createCartHTML() {\n            ['.cssadda-floating-cart','.cssadda-cart-overlay','.cssadda-cart-sidebar']\n                .forEach(s => { const el = document.querySelector(s); if (el) el.remove(); });\n            document.body.insertAdjacentHTML('beforeend', `\n                <div class=\"cssadda-floating-cart\">\n                    <div class=\"cssadda-cart-preview\" onclick=\"CSSAddaCart.toggle()\">\n                        <span>Total:<\/span><span class=\"cssadda-cart-preview-amount\">\u20b90<\/span>\n                    <\/div>\n                    <button class=\"cssadda-cart-btn\" onclick=\"CSSAddaCart.toggle()\" aria-label=\"Shopping Cart\">\n                        <i class=\"fas fa-shopping-cart\"><\/i><span class=\"cssadda-cart-count\">0<\/span>\n                    <\/button>\n                <\/div>\n                <div class=\"cssadda-cart-overlay\" onclick=\"CSSAddaCart.toggle()\"><\/div>\n                <div class=\"cssadda-cart-sidebar\">\n                    <div class=\"cssadda-cart-header\">\n                        <h2><i class=\"fas fa-shopping-cart\"><\/i> Your Cart<\/h2>\n                        <button class=\"cssadda-cart-close\" onclick=\"CSSAddaCart.toggle()\"><i class=\"fas fa-times\"><\/i><\/button>\n                    <\/div>\n                    <div class=\"cssadda-cart-items\" id=\"cssadda-cart-items\">\n                        <div class=\"cssadda-cart-empty\"><i class=\"fas fa-shopping-bag\"><\/i>\n                            <h3>Your cart is empty<\/h3><p>Add some study materials to get started!<\/p><\/div>\n                    <\/div>\n                    <div class=\"cssadda-cart-footer\">\n                        <div class=\"cssadda-cart-summary\">\n                            <div class=\"cssadda-cart-summary-row\"><span>Items<\/span><span class=\"cssadda-item-count\">0<\/span><\/div>\n                            <div class=\"cssadda-cart-summary-row cssadda-savings\"><span>You Save<\/span><span class=\"cssadda-cart-savings\">\u20b90<\/span><\/div>\n                            <div class=\"cssadda-cart-summary-row cssadda-total\"><span>Total<\/span><span class=\"cssadda-cart-total\">\u20b90<\/span><\/div>\n                        <\/div>\n                        <button class=\"cssadda-checkout-btn\" onclick=\"CSSAddaCart.checkout()\"><i class=\"fas fa-lock\"><\/i> Proceed to Checkout<\/button>\n                        <button class=\"cssadda-clear-btn\" onclick=\"CSSAddaCart.clear()\"><i class=\"fas fa-trash-alt\"><\/i> Clear Cart<\/button>\n                    <\/div>\n                <\/div>`);\n            if (!document.getElementById('cssadda-cart-styles')) { this.injectStyles(); }\n        }\n        injectStyles() {\n            const s = document.createElement('style');\n            s.id = 'cssadda-cart-styles';\n            s.textContent = `\n                .cssadda-floating-cart{position:fixed;top:20px;right:20px;z-index:99999;display:flex;align-items:center;gap:12px}\n                .cssadda-cart-btn{width:60px;height:60px;background:linear-gradient(135deg,#1E3A8A,#152A66);border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 30px rgba(21,42,102,.4);transition:all .3s ease;position:relative}\n                .cssadda-cart-btn:hover{transform:scale(1.1)}\n                .cssadda-cart-btn i{font-size:1.4rem;color:#E0A82E}\n                .cssadda-cart-count{position:absolute;top:-5px;right:-5px;min-width:24px;height:24px;background:#E0A82E;color:#152A66;font-size:.75rem;font-weight:700;border-radius:50%;display:flex;align-items:center;justify-content:center;border:3px solid #fff;font-family:'IBM Plex Mono',monospace}\n                .cssadda-cart-count.empty{display:none}\n                .cssadda-cart-count.bounce{animation:cssadda-bounce .5s ease}\n                .cssadda-cart-preview{background:#fff;padding:10px 18px;border-radius:50px;box-shadow:0 10px 40px rgba(0,0,0,.15);display:flex;align-items:center;gap:8px;font-weight:600;color:#16233F;transition:all .3s ease;cursor:pointer;border:2px solid #DFE5F0;font-family:'IBM Plex Sans',sans-serif}\n                .cssadda-cart-preview:hover{border-color:#E0A82E;transform:translateX(-5px)}\n                .cssadda-cart-preview-amount{color:#1E3A8A;font-weight:700}\n                .cssadda-cart-preview.hidden{display:none}\n                .cssadda-cart-overlay{position:fixed;inset:0;background:rgba(21,42,102,.5);z-index:100000;opacity:0;visibility:hidden;transition:all .3s ease;backdrop-filter:blur(5px)}\n                .cssadda-cart-overlay.active{opacity:1;visibility:visible}\n                .cssadda-cart-sidebar{position:fixed;top:0;right:0;width:420px;max-width:100%;height:100vh;background:#fff;z-index:100001;transform:translateX(100%);transition:transform .4s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;box-shadow:-10px 0 50px rgba(0,0,0,.2);font-family:'IBM Plex Sans',sans-serif}\n                .cssadda-cart-sidebar.active{transform:translateX(0)}\n                .cssadda-cart-header{background:linear-gradient(135deg,#152A66,#1E3A8A);padding:22px;color:#fff;display:flex;align-items:center;justify-content:space-between}\n                .cssadda-cart-header h2{font-family:'Newsreader',serif;font-size:1.4rem;font-weight:500;display:flex;align-items:center;gap:12px;margin:0}\n                .cssadda-cart-header h2 i{color:#E0A82E;font-size:1.1rem}\n                .cssadda-cart-close{width:38px;height:38px;background:rgba(255,255,255,.15);border:none;border-radius:50%;color:#fff;font-size:1.1rem;cursor:pointer;transition:all .3s ease;display:flex;align-items:center;justify-content:center}\n                .cssadda-cart-close:hover{background:rgba(255,255,255,.25);transform:rotate(90deg)}\n                .cssadda-cart-items{flex:1;overflow-y:auto;padding:20px}\n                .cssadda-cart-empty{text-align:center;padding:60px 20px;color:#8C97AE}\n                .cssadda-cart-empty i{font-size:3.4rem;margin-bottom:20px;color:#DFE5F0}\n                .cssadda-cart-empty h3{font-family:'Newsreader',serif;font-size:1.25rem;color:#16233F;margin-bottom:10px;font-weight:500}\n                .cssadda-cart-item{background:#F7F9FC;border:1px solid #DFE5F0;border-left:4px solid #E0A82E;border-radius:4px;padding:14px;margin-bottom:12px;display:flex;gap:14px;align-items:flex-start;transition:all .3s ease}\n                .cssadda-cart-item:hover{border-color:#E0A82E}\n                .cssadda-cart-item-icon{width:44px;height:44px;min-width:44px;background:#152A66;border-radius:3px;display:flex;align-items:center;justify-content:center;color:#E0A82E;font-size:1.1rem}\n                .cssadda-cart-item-details{flex:1}\n                .cssadda-cart-item-type{font-family:'IBM Plex Mono',monospace;font-size:.6rem;text-transform:uppercase;letter-spacing:.12em;color:#8A6508;margin-bottom:4px}\n                .cssadda-cart-item-name{font-size:.9rem;font-weight:600;color:#16233F;margin-bottom:5px;line-height:1.3}\n                .cssadda-cart-item-price{font-family:'Newsreader',serif;font-size:1.1rem;font-weight:600;color:#1E3A8A}\n                .cssadda-cart-item-remove{width:30px;height:30px;background:transparent;border:1px solid #DFE5F0;border-radius:50%;color:#8C97AE;cursor:pointer;transition:all .3s ease;display:flex;align-items:center;justify-content:center;font-size:.8rem}\n                .cssadda-cart-item-remove:hover{background:#C0392B;border-color:#C0392B;color:#fff}\n                .cssadda-cart-footer{padding:22px;background:#F7F9FC;border-top:1px solid #DFE5F0}\n                .cssadda-cart-summary{margin-bottom:18px}\n                .cssadda-cart-summary-row{display:flex;justify-content:space-between;align-items:center;padding:9px 0;font-size:.9rem;color:#5A6784}\n                .cssadda-cart-summary-row.cssadda-total{border-top:1px dashed #DFE5F0;padding-top:14px;margin-top:8px;font-size:1.1rem;font-weight:700;color:#16233F}\n                .cssadda-cart-summary-row.cssadda-total span:last-child{font-family:'Newsreader',serif;color:#1E3A8A;font-size:1.4rem}\n                .cssadda-cart-summary-row.cssadda-savings{color:#0B8457;font-weight:600}\n                .cssadda-checkout-btn{width:100%;padding:15px 26px;background:#1E3A8A;border:none;border-radius:3px;color:#fff;font-family:'IBM Plex Mono',monospace;font-size:.72rem;font-weight:600;cursor:pointer;transition:all .3s ease;display:flex;align-items:center;justify-content:center;gap:10px;text-transform:uppercase;letter-spacing:.1em}\n                .cssadda-checkout-btn:hover{background:#E0A82E;color:#152A66}\n                .cssadda-checkout-btn:disabled{background:#8C97AE!important;cursor:not-allowed;color:#fff}\n                .cssadda-clear-btn{width:100%;padding:11px;background:transparent;border:1px solid #DFE5F0;border-radius:3px;color:#5A6784;font-family:'IBM Plex Mono',monospace;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;transition:all .3s ease;margin-top:10px}\n                .cssadda-clear-btn:hover{border-color:#C0392B;color:#C0392B}\n                .cssadda-toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%);padding:14px 24px;border-radius:3px;font-family:'IBM Plex Sans',sans-serif;font-size:.9rem;font-weight:600;z-index:999999;box-shadow:0 10px 40px rgba(0,0,0,.2);display:flex;align-items:center;gap:10px;max-width:90%;text-align:center;border-left:4px solid #E0A82E}\n                .cssadda-toast.success{background:#0B8457;color:#fff}\n                .cssadda-toast.info{background:#152A66;color:#fff}\n                .cssadda-toast.warning{background:#E0A82E;color:#152A66}\n                .cssadda-toast.error{background:#C0392B;color:#fff}\n                @keyframes cssadda-bounce{0%,100%{transform:scale(1)}25%{transform:scale(1.2)}50%{transform:scale(.95)}75%{transform:scale(1.1)}}\n                @media(max-width:768px){.cssadda-cart-sidebar{width:100%}.cssadda-floating-cart{top:auto;bottom:20px;right:20px}.cssadda-cart-btn{width:55px;height:55px}.cssadda-cart-preview{display:none}}`;\n            document.head.appendChild(s);\n        }\n        cacheElements() {\n            this.elements = {\n                overlay: document.querySelector('.cssadda-cart-overlay'),\n                sidebar: document.querySelector('.cssadda-cart-sidebar'),\n                itemsContainer: document.getElementById('cssadda-cart-items'),\n                countBadge: document.querySelector('.cssadda-cart-count'),\n                preview: document.querySelector('.cssadda-cart-preview'),\n                previewAmount: document.querySelector('.cssadda-cart-preview-amount'),\n                itemCount: document.querySelector('.cssadda-item-count'),\n                savings: document.querySelector('.cssadda-cart-savings'),\n                total: document.querySelector('.cssadda-cart-total'),\n                checkoutBtn: document.querySelector('.cssadda-checkout-btn')\n            };\n        }\n        bindEvents() {\n            document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && this.isOpen) this.toggle(); });\n        }\n        toggle() {\n            this.isOpen = !this.isOpen;\n            if (this.elements.overlay) this.elements.overlay.classList.toggle('active', this.isOpen);\n            if (this.elements.sidebar) this.elements.sidebar.classList.toggle('active', this.isOpen);\n            document.body.style.overflow = this.isOpen ? 'hidden' : '';\n        }\n        update() {\n            const count = this.cart.getCount(), total = this.cart.getTotal(),\n                  savings = this.cart.getSavings(), items = this.cart.getItems();\n            if (this.elements.countBadge) {\n                this.elements.countBadge.textContent = count;\n                this.elements.countBadge.classList.toggle('empty', count === 0);\n            }\n            if (this.elements.preview) this.elements.preview.classList.toggle('hidden', count === 0);\n            if (this.elements.previewAmount) this.elements.previewAmount.textContent = '\u20b9' + total.toLocaleString();\n            if (this.elements.itemCount) this.elements.itemCount.textContent = count;\n            if (this.elements.savings) this.elements.savings.textContent = '\u20b9' + savings.toLocaleString();\n            if (this.elements.total) this.elements.total.textContent = '\u20b9' + total.toLocaleString();\n            if (this.elements.checkoutBtn) this.elements.checkoutBtn.disabled = count === 0;\n            this.renderItems(items); this.updateProductButtons();\n        }\n        renderItems(items) {\n            if (!this.elements.itemsContainer) return;\n            if (items.length === 0) {\n                this.elements.itemsContainer.innerHTML = `\n                    <div class=\"cssadda-cart-empty\"><i class=\"fas fa-shopping-bag\"><\/i>\n                        <h3>Your cart is empty<\/h3><p>Add some study materials to get started!<\/p><\/div>`;\n            } else {\n                this.elements.itemsContainer.innerHTML = items.map(item => `\n                    <div class=\"cssadda-cart-item\" data-id=\"${item.id}\">\n                        <div class=\"cssadda-cart-item-icon\"><i class=\"fas ${item.icon || 'fa-box'}\"><\/i><\/div>\n                        <div class=\"cssadda-cart-item-details\">\n                            <div class=\"cssadda-cart-item-type\">${this.getTypeLabel(item.type)}<\/div>\n                            <div class=\"cssadda-cart-item-name\">${item.name}<\/div>\n                            <div class=\"cssadda-cart-item-price\">\u20b9${item.price.toLocaleString()}<\/div>\n                        <\/div>\n                        <button class=\"cssadda-cart-item-remove\" onclick=\"CSSAddaCart.removeItem('${item.id}')\" title=\"Remove\">\n                            <i class=\"fas fa-times\"><\/i><\/button>\n                    <\/div>`).join('');\n            }\n        }\n        getTypeLabel(type) {\n            const labels = { 'flashcards':'Flashcards','notes':'Concise Notes','test-series':'Test Series',\n                             'lastminute':'Last Minute Notes','bundle':'Bundle Pack','pyq':'Previous Year Questions' };\n            return labels[type] || type || 'Product';\n        }\n        updateProductButtons() {\n            const cartIds = this.cart.getItems().map(i => i.id);\n            document.querySelectorAll('[data-product-id]').forEach(btn => {\n                if (btn.classList.contains('purchased')) return;\n                if (cartIds.includes(btn.dataset.productId)) {\n                    btn.classList.add('in-cart');\n                    if (!btn.innerHTML.includes('In cart')) {\n                        btn.innerHTML = '<i class=\"fas fa-check-circle\"><\/i> In cart';\n                    }\n                }\n            });\n        }\n        animateCountBadge() {\n            if (this.elements.countBadge) {\n                this.elements.countBadge.classList.add('bounce');\n                setTimeout(() => this.elements.countBadge.classList.remove('bounce'), 500);\n            }\n        }\n        showToast(message, type = 'info') {\n            const existing = document.querySelector('.cssadda-toast');\n            if (existing) existing.remove();\n            const t = document.createElement('div');\n            t.className = 'cssadda-toast ' + type;\n            t.innerHTML = message;\n            document.body.appendChild(t);\n            setTimeout(() => { t.style.opacity = '0'; setTimeout(() => t.remove(), 300); }, CONFIG.toastDuration);\n        }\n    }\n    const cart = new Cart();\n    const ui = new CartUI(cart);\n    window.CSSAddaCart = {\n        init: function() { ui.init(); },\n        addItem: function(product, buttonElement) {\n            const result = cart.addItem(product);\n            if (result.success) {\n                ui.animateCountBadge();\n                ui.showToast('\u2705 ' + product.name + ' added!', 'success');\n                if (buttonElement) {\n                    buttonElement.classList.add('in-cart');\n                    buttonElement.innerHTML = '<i class=\"fas fa-check-circle\"><\/i> In cart';\n                }\n                setTimeout(() => { if (!ui.isOpen) ui.toggle(); }, 400);\n            } else { ui.showToast(result.message, 'warning'); }\n            return result;\n        },\n        removeItem: function(productId) {\n            const result = cart.removeItem(productId);\n            if (result.success) {\n                ui.showToast('Item removed', 'info');\n                document.querySelectorAll('[data-product-id=\"' + productId + '\"]').forEach(btn => {\n                    if (!btn.classList.contains('purchased')) {\n                        btn.classList.remove('in-cart');\n                        btn.innerHTML = (btn.dataset.wooId === '0')\n                            ? '<i class=\"fas fa-bell\"><\/i> Notify me'\n                            : '<i class=\"fas fa-cart-plus\"><\/i> Add to cart';\n                    }\n                });\n            }\n            return result;\n        },\n        clear: function() {\n            if (cart.getCount() === 0) { ui.showToast('Cart is already empty!', 'warning'); return; }\n            if (confirm('Clear all items from your cart?')) {\n                ui.clearWooCommerceCart(); cart.clear(); ui.showToast('Cart cleared!', 'info');\n                document.querySelectorAll('.in-cart').forEach(btn => {\n                    if (!btn.classList.contains('purchased')) {\n                        btn.classList.remove('in-cart');\n                        btn.innerHTML = (btn.dataset.wooId === '0')\n                            ? '<i class=\"fas fa-bell\"><\/i> Notify me'\n                            : '<i class=\"fas fa-cart-plus\"><\/i> Add to cart';\n                    }\n                });\n            }\n        },\n        toggle: function() { ui.toggle(); },\n        getItems: function() { return cart.getItems(); },\n        getCount: function() { return cart.getCount(); },\n        getTotal: function() { return cart.getTotal(); },\n        hasItem: function(id) { return cart.hasItem(id); },\n        showToast: function(m, t) { ui.showToast(m, t); },\n        checkout: function() {\n            if (cart.getCount() === 0) { ui.showToast('Your cart is empty!', 'warning'); return; }\n            if (typeof cssaddaCartSync === 'undefined') {\n                console.error('cssaddaCartSync not found! PHP snippet is not active.');\n                ui.showToast('\u26a0\ufe0f System error. Please refresh the page.', 'error');\n                return;\n            }\n            const cartItems = cart.getItems();\n            const invalid = cartItems.filter(i => !i.wooProductId || i.wooProductId === 0);\n            if (invalid.length > 0) {\n                const names = invalid.map(i => i.name).slice(0, 3).join(', ');\n                const more = invalid.length > 3 ? ' and ' + (invalid.length - 3) + ' more' : '';\n                ui.showToast('\u26a0\ufe0f Not available: ' + names + more, 'warning');\n                return;\n            }\n            const btn = document.querySelector('.cssadda-checkout-btn');\n            const original = btn ? btn.innerHTML : '';\n            if (btn) { btn.disabled = true; btn.innerHTML = '<i class=\"fas fa-spinner fa-spin\"><\/i> Processing...'; }\n            ui.showToast('\ud83d\udd04 Preparing checkout...', 'info');\n            const fd = new FormData();\n            fd.append('action', 'cssadda_sync_cart');\n            fd.append('nonce', cssaddaCartSync.nonce);\n            fd.append('debug', CONFIG.DEBUG_MODE ? 'true' : 'false');\n            cartItems.forEach((item, i) => {\n                fd.append('cart_items[' + i + '][id]', item.id);\n                fd.append('cart_items[' + i + '][name]', item.name);\n                fd.append('cart_items[' + i + '][wooProductId]', item.wooProductId);\n                fd.append('cart_items[' + i + '][price]', item.price);\n                fd.append('cart_items[' + i + '][quantity]', 1);\n            });\n            fetch(cssaddaCartSync.ajaxUrl, { method:'POST', body:fd, credentials:'same-origin' })\n            .then(r => { if (!r.ok) { throw new Error('HTTP ' + r.status); } return r.json(); })\n            .then(data => {\n                if (data.success && data.data && data.data.added_count > 0) {\n                    const failed = data.data.failed_count || 0;\n                    let msg = '\u2705 ' + data.data.added_count + ' item(s) ready!';\n                    if (failed > 0) msg += ' (' + failed + ' unavailable)';\n                    ui.showToast(msg + ' Redirecting to checkout...', 'success');\n                    const to = data.data.redirect_to || data.data.checkout_url || cssaddaCartSync.checkoutUrl;\n                    sessionStorage.setItem('cssadda_checkout_pending', 'true');\n                    if (ui.isOpen) ui.toggle();\n                    setTimeout(() => { window.location.href = to; }, 1200);\n                } else {\n                    const msg = (data.data && data.data.message) ? data.data.message : 'Could not process checkout';\n                    ui.showToast('\u274c ' + msg, 'error');\n                    if (btn) { btn.disabled = false; btn.innerHTML = original; }\n                }\n            })\n            .catch(err => {\n                console.error('Checkout network error:', err);\n                ui.showToast('\u274c Connection error. Please try again.', 'error');\n                if (btn) { btn.disabled = false; btn.innerHTML = original; }\n            });\n        }\n    };\n    function initCart() {\n        CSSAddaCart.init();\n        if (typeof cssaddaCartSync === 'undefined') {\n            console.warn('[CSS ADDA] \u26a0\ufe0f PHP snippet not active! Cart sync will not work.');\n        }\n    }\n    if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initCart); }\n    else { initCart(); }\n})();\n\/\/ ============================================\n\/\/ PRODUCT BUTTON HANDLER \u2014 used by every card and bundle onclick\n\/\/ ============================================\nfunction addToCart(product, buttonElement) {\n    if (typeof cssaddaIsLoggedIn !== 'undefined' && !cssaddaIsLoggedIn) {\n        CSSAddaCart.showToast('Please login to add items to cart', 'warning');\n        if (typeof redirectToLogin === 'function') { setTimeout(redirectToLogin, 1500); }\n        else { setTimeout(function(){ window.location.href = 'https:\/\/promotionexams.com\/my-account\/'; }, 1500); }\n        return;\n    }\n    if (buttonElement && buttonElement.classList.contains('purchased')) {\n        const accessUrl = buttonElement.dataset.accessUrl;\n        if (accessUrl) { window.location.href = accessUrl; }\n        else { CSSAddaCart.showToast('Redirecting to your test...', 'info'); window.location.href = '?page_id=4602'; }\n        return;\n    }\n    if (!product.wooProductId || product.wooProductId === 0) {\n        CSSAddaCart.showToast('\u23f3 Launching soon \u2014 we will email you the moment it opens.', 'warning');\n        return;\n    }\n    CSSAddaCart.addItem(product, buttonElement);\n}\n\/\/ ============================================\n\/\/ MARK PURCHASED PRODUCTS ON PAGE LOAD\n\/\/ ============================================\nfunction markPurchasedProducts() {\n    if (typeof cssaddaPurchased === 'undefined' || !cssaddaPurchased) return;\n    document.querySelectorAll('.btn-add-cart').forEach(btn => {\n        let wooProductId = btn.dataset.wooId;\n        if (!wooProductId) {\n            const oc = btn.getAttribute('onclick');\n            if (oc) { const m = oc.match(\/wooProductId:\\s*(\\d+)\/); if (m && m[1]) wooProductId = m[1]; }\n        }\n        if (wooProductId && wooProductId !== '0' && cssaddaPurchased[wooProductId]) {\n            const p = cssaddaPurchased[wooProductId];\n            btn.classList.add('purchased');\n            btn.innerHTML = '<i class=\"fas fa-play-circle\"><\/i> Take test';\n            if (p.quiz_url) { btn.dataset.accessUrl = p.quiz_url; }\n        }\n    });\n}\ndocument.addEventListener('DOMContentLoaded', function() { setTimeout(markPurchasedProducts, 100); });\n<\/script>\n\n<!-- ============ END OF PASTE BLOCK ============ -->\n<\/body>\n<\/html>\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>UPSC Principal &amp; Vice-Principal Test Series \u2014 Exam 9 Jan 2027, Free 2022 Papers &amp; Live Mocks | PromotionExams Home [&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":[],"tags":[],"class_list":["post-18099","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Test Series- UPSC PRINCIPAL\/VICE-PRINCIPAL - 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=18099\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Test Series- UPSC PRINCIPAL\/VICE-PRINCIPAL - PromotionExams\" \/>\n<meta property=\"og:description\" content=\"UPSC Principal &amp; Vice-Principal Test Series \u2014 Exam 9 Jan 2027, Free 2022 Papers &amp; Live Mocks | PromotionExams Home [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/promotionexams.com\/?page_id=18099\" \/>\n<meta property=\"og:site_name\" content=\"PromotionExams\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-29T15:56:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png\" \/>\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=18099\",\"url\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=18099\",\"name\":\"Test Series- UPSC PRINCIPAL\\\/VICE-PRINCIPAL - PromotionExams\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/promotionexams.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=18099#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=18099#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/promotionexams.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/CSS-removebg-preview.png\",\"datePublished\":\"2026-10-29T15:56:03+00:00\",\"dateModified\":\"2026-10-29T15:56:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=18099#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/promotionexams.com\\\/?page_id=18099\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=18099#primaryimage\",\"url\":\"https:\\\/\\\/promotionexams.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/CSS-removebg-preview.png\",\"contentUrl\":\"https:\\\/\\\/promotionexams.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/CSS-removebg-preview.png\",\"width\":503,\"height\":496},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/promotionexams.com\\\/?page_id=18099#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/promotionexams.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Test Series- UPSC PRINCIPAL\\\/VICE-PRINCIPAL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/promotionexams.com\\\/#website\",\"url\":\"https:\\\/\\\/promotionexams.com\\\/\",\"name\":\"Promotionexams.com\",\"description\":\"Best platform for Govt. Departmental Promotion Exams\",\"publisher\":{\"@id\":\"https:\\\/\\\/promotionexams.com\\\/#organization\"},\"alternateName\":\"cssadda.in\",\"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":"Test Series- UPSC PRINCIPAL\/VICE-PRINCIPAL - 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=18099","og_locale":"en_GB","og_type":"article","og_title":"Test Series- UPSC PRINCIPAL\/VICE-PRINCIPAL - PromotionExams","og_description":"UPSC Principal &amp; Vice-Principal Test Series \u2014 Exam 9 Jan 2027, Free 2022 Papers &amp; Live Mocks | PromotionExams Home [&hellip;]","og_url":"https:\/\/promotionexams.com\/?page_id=18099","og_site_name":"PromotionExams","article_modified_time":"2026-10-29T15:56:04+00:00","og_image":[{"url":"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/promotionexams.com\/?page_id=18099","url":"https:\/\/promotionexams.com\/?page_id=18099","name":"Test Series- UPSC PRINCIPAL\/VICE-PRINCIPAL - PromotionExams","isPartOf":{"@id":"https:\/\/promotionexams.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/promotionexams.com\/?page_id=18099#primaryimage"},"image":{"@id":"https:\/\/promotionexams.com\/?page_id=18099#primaryimage"},"thumbnailUrl":"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png","datePublished":"2026-10-29T15:56:03+00:00","dateModified":"2026-10-29T15:56:04+00:00","breadcrumb":{"@id":"https:\/\/promotionexams.com\/?page_id=18099#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/promotionexams.com\/?page_id=18099"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/promotionexams.com\/?page_id=18099#primaryimage","url":"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png","contentUrl":"https:\/\/promotionexams.com\/wp-content\/uploads\/2025\/08\/CSS-removebg-preview.png","width":503,"height":496},{"@type":"BreadcrumbList","@id":"https:\/\/promotionexams.com\/?page_id=18099#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/promotionexams.com\/"},{"@type":"ListItem","position":2,"name":"Test Series- UPSC PRINCIPAL\/VICE-PRINCIPAL"}]},{"@type":"WebSite","@id":"https:\/\/promotionexams.com\/#website","url":"https:\/\/promotionexams.com\/","name":"Promotionexams.com","description":"Best platform for Govt. Departmental Promotion Exams","publisher":{"@id":"https:\/\/promotionexams.com\/#organization"},"alternateName":"cssadda.in","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\/18099","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=18099"}],"version-history":[{"count":3,"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/18099\/revisions"}],"predecessor-version":[{"id":18314,"href":"https:\/\/promotionexams.com\/index.php?rest_route=\/wp\/v2\/pages\/18099\/revisions\/18314"}],"wp:attachment":[{"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=18099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=18099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/promotionexams.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=18099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}