{"id":1006,"date":"2026-05-17T23:58:52","date_gmt":"2026-05-17T23:58:52","guid":{"rendered":"https:\/\/museum.wiserighteous.org\/?page_id=1006"},"modified":"2026-05-18T00:01:03","modified_gmt":"2026-05-18T00:01:03","slug":"museum-test-prep-app-jean-moulin","status":"publish","type":"page","link":"https:\/\/museum.wiserighteous.org\/index.php\/museum-test-prep-app-jean-moulin\/","title":{"rendered":"Museum Test Prep App &#8211; Jean Moulin"},"content":{"rendered":"\n<!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, user-scalable=yes\">\n    <title>Museum Test Prep App | Jean Moulin \u2022 SAT \u2022 PSAT \u2022 ACT<\/title>\n    <!-- Font Awesome for icons -->\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.0.0-beta3\/css\/all.min.css\">\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        body {\n            background: #1e2a2e;\n            font-family: 'Georgia', 'Times New Roman', Times, serif;\n            color: #2c2b28;\n            line-height: 1.5;\n            padding: 20px;\n        }\n\n        .museum-container {\n            max-width: 1400px;\n            margin: 0 auto;\n            background: #fef8ea;\n            border-radius: 28px;\n            box-shadow: 0 20px 35px rgba(0,0,0,0.3), 0 0 0 1px #b89870 inset;\n            overflow: hidden;\n        }\n\n        .hero {\n            background: linear-gradient(135deg, #2a4a4a 0%, #1a2e2e 100%);\n            padding: 1.8rem 2.5rem;\n            border-bottom: 6px solid #e0c87a;\n            color: #f5e7cf;\n            display: flex;\n            align-items: center;\n            gap: 20px;\n            flex-wrap: wrap;\n        }\n        .hero-text {\n            flex: 2;\n        }\n        .hero h1 {\n            font-size: 2rem;\n            letter-spacing: 1px;\n            font-weight: 600;\n        }\n        .hero h1 i {\n            color: #e0c87a;\n            margin-right: 10px;\n        }\n        .hero h1 .app-badge {\n            font-size: 0.8rem;\n            background: #e0c87a33;\n            padding: 0.2rem 0.8rem;\n            border-radius: 40px;\n            margin-left: 12px;\n            vertical-align: middle;\n        }\n        .hero p {\n            font-size: 1rem;\n            font-style: italic;\n            margin-top: 0.5rem;\n            opacity: 0.85;\n        }\n        .hero-portrait {\n            flex: 0 0 100px;\n            text-align: center;\n            background: #e0c87a30;\n            padding: 8px;\n            border-radius: 50%;\n            border: 2px solid #e0c87a;\n        }\n        .hero-portrait i {\n            font-size: 3.5rem;\n            color: #ecd9b4;\n        }\n        .hero-portrait p {\n            font-size: 0.65rem;\n            margin-top: 5px;\n        }\n\n        .flex-main {\n            display: flex;\n            flex-wrap: wrap;\n        }\n        .article-panel {\n            flex: 1.6;\n            min-width: 280px;\n            padding: 2rem 2rem 2rem 2.2rem;\n            background: #fffaf2;\n            border-right: 1px solid #ecd9b4;\n        }\n        .game-sat-panel {\n            flex: 1.2;\n            min-width: 350px;\n            background: #f9efdf;\n            padding: 2rem 1.8rem;\n            display: flex;\n            flex-direction: column;\n            gap: 1.5rem;\n        }\n\n        .article-panel h2 {\n            font-size: 1.8rem;\n            border-left: 7px solid #e0c87a;\n            padding-left: 1rem;\n            margin: 0.75rem 0 1rem 0;\n            color: #2a4a4a;\n        }\n        .article-panel h2 i {\n            color: #e0c87a;\n            margin-right: 10px;\n        }\n        .article-panel h3 {\n            font-size: 1.3rem;\n            margin: 1.4rem 0 0.5rem 0;\n            color: #8b5a2b;\n            font-weight: 600;\n        }\n        .article-panel p {\n            margin-bottom: 0.9rem;\n            text-align: justify;\n        }\n        .inset-quote {\n            background: #e9e0cf;\n            padding: 0.8rem 1.3rem;\n            border-left: 4px solid #e0c87a;\n            margin: 1.2rem 0;\n            border-radius: 12px;\n            font-weight: 500;\n        }\n        .reference-list {\n            font-size: 0.8rem;\n            margin-top: 1.5rem;\n            border-top: 1px dashed #cfbc93;\n            padding-top: 1rem;\n            color: #5e4b2b;\n        }\n        .timeline-item {\n            margin: 12px 0;\n            padding-left: 20px;\n            border-left: 3px solid #e0c87a;\n        }\n        .timeline-year {\n            font-weight: bold;\n            color: #8b5a2b;\n        }\n\n        \/* Mode Selection & Quiz Styles *\/\n        .mode-selector {\n            background: white;\n            border-radius: 28px;\n            padding: 1.2rem;\n            text-align: center;\n            box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n        }\n        .mode-buttons {\n            display: flex;\n            gap: 12px;\n            justify-content: center;\n            margin-top: 12px;\n            flex-wrap: wrap;\n        }\n        .mode-btn {\n            flex: 1;\n            min-width: 90px;\n            padding: 12px;\n            border: none;\n            border-radius: 60px;\n            font-weight: bold;\n            font-size: 1rem;\n            cursor: pointer;\n            transition: 0.2s;\n            font-family: inherit;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            gap: 8px;\n        }\n        .mode-btn.sat {\n            background: #1e3a2f;\n            color: white;\n        }\n        .mode-btn.psat {\n            background: #2c5f6e;\n            color: white;\n        }\n        .mode-btn.act {\n            background: #8b5a2b;\n            color: white;\n        }\n        .mode-btn:hover {\n            transform: translateY(-2px);\n            filter: brightness(1.05);\n        }\n        .mode-btn.active {\n            box-shadow: 0 0 0 3px #ffd966;\n        }\n        .quiz-header {\n            background: linear-gradient(145deg, #2a4a4a, #1a2e2e);\n            color: white;\n            padding: 1rem;\n            border-radius: 28px;\n            text-align: center;\n        }\n        .score-area {\n            font-size: 1.6rem;\n            font-weight: bold;\n            background: #00000055;\n            display: inline-block;\n            padding: 0.2rem 1.2rem;\n            border-radius: 40px;\n            margin-top: 8px;\n        }\n        .question-card {\n            background: white;\n            border-radius: 28px;\n            padding: 1.5rem;\n            box-shadow: 0 8px 18px rgba(0,0,0,0.1);\n        }\n        .question-text {\n            font-size: 1.1rem;\n            font-weight: 700;\n            margin-bottom: 1.2rem;\n            background: #fdf4e0;\n            padding: 12px;\n            border-radius: 20px;\n            border-left: 5px solid #e0c87a;\n        }\n        .options-list {\n            display: flex;\n            flex-direction: column;\n            gap: 10px;\n            margin-bottom: 1.5rem;\n        }\n        .opt-btn {\n            background: #efe2cf;\n            border: 2px solid #cfb37a;\n            padding: 10px 14px;\n            border-radius: 60px;\n            font-family: 'Segoe UI', 'Georgia', serif;\n            font-size: 0.9rem;\n            text-align: left;\n            cursor: pointer;\n            transition: 0.2s;\n        }\n        .opt-btn i {\n            margin-right: 10px;\n        }\n        .opt-btn:hover:not(:disabled) {\n            background: #e2cfb0;\n        }\n        .opt-btn.correct-highlight {\n            background: #a5d6a5;\n            border-color: #2e7d32;\n        }\n        .opt-btn.wrong-highlight {\n            background: #ef9a9a;\n            border-color: #c62828;\n        }\n        .opt-btn:disabled {\n            cursor: default;\n            opacity: 0.8;\n        }\n        .feedback {\n            margin-top: 15px;\n            padding: 12px;\n            border-radius: 20px;\n            background: #f3efdf;\n            font-size: 0.9rem;\n            border-left: 5px solid #e0c87a;\n        }\n        .next-btn, .restart-btn {\n            background: #846c3e;\n            border: none;\n            color: white;\n            font-weight: bold;\n            padding: 10px;\n            border-radius: 40px;\n            font-size: 1rem;\n            cursor: pointer;\n            margin-top: 10px;\n            width: 100%;\n        }\n        .next-btn:hover, .restart-btn:hover {\n            background: #5f4a2a;\n        }\n        .game-status {\n            font-size: 0.75rem;\n            text-align: center;\n            background: #e2d5bd;\n            padding: 6px;\n            border-radius: 50px;\n            margin-top: 8px;\n        }\n        footer {\n            text-align: center;\n            padding: 1rem;\n            background: #dfd2b6;\n            font-size: 0.7rem;\n            color: #4a3a22;\n        }\n        .disclaimer {\n            font-size: 0.65rem;\n            text-align: center;\n            margin-top: 8px;\n            color: #6b5a3e;\n        }\n        @media (max-width: 780px) {\n            .hero h1 { font-size: 1.3rem; }\n            .hero-portrait { flex-basis: 70px; }\n            .hero-portrait i { font-size: 2.2rem; }\n        }\n    <\/style>\n<\/head>\n<body>\n<div class=\"museum-container\">\n    <div class=\"hero\">\n        <div class=\"hero-text\">\n            <h1><i class=\"fas fa-fist-raised\"><\/i> Jean Moulin <span class=\"app-badge\"><i class=\"fas fa-mobile-alt\"><\/i> Museum Test Prep App<\/span><\/h1>\n            <p><i class=\"fas fa-france\"><\/i> French Resistance leader \u2014 Unifier of the National Council of the Resistance (CNR), symbol of courage and sacrifice<\/p>\n        <\/div>\n        <div class=\"hero-portrait\">\n            <i class=\"fas fa-crosshairs\"><\/i>\n            <p><i class=\"fas fa-shield-alt\"><\/i> Righteousness Hall<\/p>\n        <\/div>\n    <\/div>\n\n    <div class=\"flex-main\">\n        <div class=\"article-panel\">\n            <h2><i class=\"fas fa-scroll\"><\/i> Jean Moulin \u2014 France (1899\u20131943)<\/h2>\n            <p>Jean Moulin was a French civil servant, resistance leader, and one of the most important figures in the French Resistance during the Second World War. He played a crucial role in organizing and unifying resistance movements against Nazi occupation and the collaborationist Vichy regime. Moulin worked to coordinate diverse resistance groups across France and establish communication between them and the Free French government led by Charles de Gaulle. His leadership helped strengthen the resistance movement and provided a foundation for the eventual liberation of France. His courage, sacrifice, and dedication to the defense of freedom, national sovereignty, and human dignity made him one of the most revered figures in modern French history.<\/p>\n            \n            <div class=\"inset-quote\">\n                <i class=\"fas fa-quote-left\"><\/i> \u201cIf I am arrested, I want to be interrogated only by the best \u2014 so that I can refuse to speak to the very end.\u201d \u2014 Jean Moulin\n            <\/div>\n\n            <h3><i class=\"fas fa-microscope\"><\/i> Historical Context &#038; Early Defiance<\/h3>\n            <div class=\"timeline-item\">\n                <span class=\"timeline-year\"><i class=\"fas fa-calendar-alt\"><\/i> 1940 \u2013 Refusal to Cooperate<\/span>\n                <p>As a prefect, Moulin refused to sign a false Nazi propaganda statement blaming French colonial troops for atrocities. He chose imprisonment and abuse rather than political deception \u2014 his first act of resistance.<\/p>\n            <\/div>\n            <div class=\"timeline-item\">\n                <span class=\"timeline-year\"><i class=\"fas fa-exchange-alt\"><\/i> Secret Mission from de Gaulle<\/span>\n                <p>Moulin traveled secretly to London, met Charles de Gaulle, and was entrusted with the mission of returning to France to unify the fragmented resistance movements.<\/p>\n            <\/div>\n            <div class=\"timeline-item\">\n                <span class=\"timeline-year\"><i class=\"fas fa-handshake\"><\/i> 1943 \u2013 National Council of the Resistance (CNR)<\/span>\n                <p>Through diplomacy, patience, and leadership, Moulin overcame ideological divisions and created the CNR, which coordinated intelligence, sabotage, and political planning.<\/p>\n            <\/div>\n            <div class=\"timeline-item\">\n                <span class=\"timeline-year\"><i class=\"fas fa-skull\"><\/i> June 1943 \u2013 Arrest and Death<\/span>\n                <p>Arrested near Lyon by Gestapo officer Klaus Barbie. Despite brutal torture, Moulin refused to betray the resistance. He died later in 1943 from injuries sustained during interrogation.<\/p>\n            <\/div>\n\n            <h3><i class=\"fas fa-church\"><\/i> Righteous Act: Unifying the French Resistance<\/h3>\n            <p>Jean Moulin&#8217;s most significant contribution was his role in uniting the major resistance groups operating throughout occupied France. Returning secretly to France in 1942, he built connections among underground movements that often differed in political ideology and strategy. His efforts culminated in the creation of the National Council of the Resistance (Conseil National de la R\u00e9sistance) in 1943, bringing together multiple resistance organizations, political parties, and labor groups. This unified structure allowed coordinated intelligence, sabotage, and political planning for France\u2019s liberation.<\/p>\n\n            <h3><i class=\"fas fa-comment-dots\"><\/i> Legacy: National Hero of the French Resistance<\/h3>\n            <p>Jean Moulin is remembered as one of the greatest heroes of the French Resistance. After the war, he became a national symbol of patriotism, moral courage, and commitment to freedom. In 1964, his ashes were transferred to the Panth\u00e9on in Paris, one of France\u2019s highest honors for national heroes. His life stands as a powerful example of resistance against tyranny, demonstrating how individual courage and integrity can play a decisive role in the defense of democratic values and human dignity.<\/p>\n\n            <div class=\"reference-list\">\n                <i class=\"fas fa-book-open\"><\/i> <strong>References:<\/strong> Foot (2001), Jackson (2001), Wieviorka (2016), Az\u00e9ma (2012).\n            <\/div>\n        <\/div>\n\n        <div class=\"game-sat-panel\">\n            <div class=\"mode-selector\">\n                <i class=\"fas fa-graduation-cap\"><\/i> <strong>Choose Your Exam<\/strong>\n                <div class=\"mode-buttons\">\n                    <button id=\"modeSAT\" class=\"mode-btn sat\"><i class=\"fab fa-sat\"><\/i> SAT<\/button>\n                    <button id=\"modePSAT\" class=\"mode-btn psat\"><i class=\"fas fa-pen-fancy\"><\/i> PSAT<\/button>\n                    <button id=\"modeACT\" class=\"mode-btn act\"><i class=\"fas fa-bolt\"><\/i> ACT<\/button>\n                <\/div>\n            <\/div>\n            <div class=\"quiz-header\">\n                <h3 id=\"modeTitle\"><i class=\"fas fa-brain\"><\/i> SAT \u2726 Resistance Righteousness Prep<\/h3>\n                <div class=\"score-area\"><i class=\"fas fa-star\"><\/i> Score: <span id=\"scoreValue\">0<\/span> \/ 600<\/div>\n            <\/div>\n            <div class=\"question-card\" id=\"quizContainer\">\n                <div id=\"dynamicQuestionArea\"><\/div>\n                <div id=\"feedbackArea\" class=\"feedback\"><i class=\"fas fa-info-circle\"><\/i> Select an exam mode above to begin.<\/div>\n                <button id=\"nextButton\" class=\"next-btn\" style=\"display: none;\"><i class=\"fas fa-arrow-right\"><\/i> Next Question<\/button>\n                <button id=\"restartButton\" class=\"restart-btn\"><i class=\"fas fa-undo-alt\"><\/i> Restart Quiz<\/button>\n                <div class=\"game-status\"><i class=\"fas fa-hourglass-half\"><\/i> 6 questions per exam \u2022 Jean Moulin: French Resistance, CNR, torture, Panth\u00e9on<\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n    <footer>\n        <i class=\"fas fa-fist-raised\"><\/i> Museum Test Prep App | SAT \u2022 PSAT \u2022 ACT modes | Jean Moulin \u2014 Righteous Act: Unifying the French Resistance\n        <div class=\"disclaimer\">\n            <i class=\"fas fa-balance-scale\"><\/i> SAT, PSAT, and ACT are registered trademarks of their respective owners. This educational tool is not affiliated with or endorsed by College Board or ACT Inc. All questions are original and based on historical content.\n        <\/div>\n    <\/footer>\n<\/div>\n\n<script>\n    \/\/ ========== JEAN MOULIN QUESTION BANKS ==========\n    \/\/ Themes: prefect, refusal to sign Nazi propaganda, secret mission from de Gaulle, National Council of the Resistance (CNR), arrest by Klaus Barbie, torture and death, Panth\u00e9on interment\n    \n    const SAT_QUESTIONS = [\n        { topic: \"Early Defiance\", text: \"Jean Moulin\u2019s first major act of resistance against Nazi occupation came when he:\", options: [\"Joined the army\", \"Refused to sign a false Nazi propaganda statement and endured imprisonment and abuse\", \"Fled to England\", \"Publicly denounced the Vichy regime in a newspaper\"], correct: 1, explanation: \"As a prefect, he refused to cooperate with German propaganda, choosing imprisonment rather than political deception.\" },\n        { topic: \"Mission from de Gaulle\", text: \"Charles de Gaulle entrusted Jean Moulin with the mission to:\", options: [\"Assassinate Nazi officers\", \"Return to France and unify the fragmented resistance movements\", \"Negotiate peace with Germany\", \"Collect war taxes\"], correct: 1, explanation: \"Moulin traveled secretly to London and was sent back to create a coordinated national resistance structure.\" },\n        { topic: \"National Council\", text: \"The National Council of the Resistance (CNR), created by Moulin in 1943, achieved:\", options: [\"Immediate military victory\", \"Unification of diverse resistance groups, political parties, and labor organizations for coordinated action\", \"German surrender\", \"A peace treaty\"], correct: 1, explanation: \"The CNR brought together previously fragmented movements to plan intelligence, sabotage, and political reconstruction.\" },\n        { topic: \"Arrest & Interrogator\", text: \"Jean Moulin was arrested near Lyon by which infamous Gestapo officer?\", options: [\"Adolf Eichmann\", \"Klaus Barbie\", \"Josef Mengele\", \"Reinhard Heydrich\"], correct: 1, explanation: \"Klaus Barbie, known as the 'Butcher of Lyon,' personally interrogated and tortured Moulin.\" },\n        { topic: \"Refusal to Betray\", text: \"Despite brutal torture, Jean Moulin:\", options: [\"Gave up all resistance names\", \"Revealed only low-level members\", \"Refused to betray the resistance\", \"Escaped after three days\"], correct: 2, explanation: \"He endured torture without breaking, protecting the network he had built, and died from his injuries.\" },\n        { topic: \"National Honor\", text: \"In 1964, Jean Moulin\u2019s ashes were transferred to the Panth\u00e9on in Paris, signifying:\", options: [\"His wealth\", \"One of France\u2019s highest honors for national heroes\", \"Exile\", \"Military rank\"], correct: 1, explanation: \"The Panth\u00e9on interment reserved for France\u2019s greatest national figures honors his role as a symbol of the Resistance.\" }\n    ];\n\n    const PSAT_QUESTIONS = [\n        { topic: \"Moulin's Pre\u2011War Role\", text: \"Before the war, Jean Moulin served as a:\", options: [\"General\", \"Prefect (senior government administrator)\", \"Teacher\", \"Doctor\"], correct: 1, explanation: \"He was a prefect, a senior regional administrator known for dedication to public service.\" },\n        { topic: \"De Gaulle Meeting\", text: \"Moulin traveled secretly to London to meet with:\", options: [\"Winston Churchill\", \"Charles de Gaulle\", \"Franklin Roosevelt\", \"Joseph Stalin\"], correct: 1, explanation: \"He met with de Gaulle, who made him the delegate to unify the Resistance.\" },\n        { topic: \"German Occupation\", text: \"France was defeated by Nazi Germany in which year?\", options: [\"1939\", \"1940\", \"1941\", \"1942\"], correct: 1, explanation: \"The Battle of France ended in June 1940 with German occupation.\" },\n        { topic: \"Torture Endurance\", text: \"During interrogation, Moulin is known for:\", options: [\"Quickly confessing\", \"Refusing to reveal resistance secrets even under brutal torture\", \"Escaping easily\", \"Cooperating fully\"], correct: 1, explanation: \"His silence under torture made him a symbol of moral courage.\" },\n        { topic: \"Resistance Role\", text: \"Jean Moulin is most famous for:\", options: [\"Writing resistance pamphlets\", \"Uniting the French Resistance into the National Council of the Resistance (CNR)\", \"Leading military battles\", \"Spying for Germany\"], correct: 1, explanation: \"His greatest achievement was unifying fragmented groups into an effective national movement.\" },\n        { topic: \"Vichy Regime\", text: \"The collaborationist government that cooperated with Nazi Germany was called the:\", options: [\"Free France\", \"Vichy Regime\", \"Third Republic\", \"Paris Commune\"], correct: 1, explanation: \"The Vichy regime, led by Philippe P\u00e9tain, collaborated with the Nazis.\" }\n    ];\n\n    const ACT_QUESTIONS = [\n        { topic: \"Birth Year\", text: \"Jean Moulin was born in which year?\", options: [\"1889\", \"1899\", \"1909\", \"1919\"], correct: 1, explanation: \"He was born in 1899 in B\u00e9ziers, France.\" },\n        { topic: \"Death Year\", text: \"Jean Moulin died in which year?\", options: [\"1942\", \"1943\", \"1944\", \"1945\"], correct: 1, explanation: \"He died in 1943 from injuries sustained during torture.\" },\n        { topic: \"Resistance Council Acronym\", text: \"The unified resistance council created by Moulin is known as the:\", options: [\"FFI\", \"CNR\", \"SOE\", \"BCRA\"], correct: 1, explanation: \"Conseil National de la R\u00e9sistance (CNR) unified the French Resistance.\" },\n        { topic: \"Gestapo Officer\", text: \"The Gestapo officer who arrested and tortured Jean Moulin was:\", options: [\"Klaus Barbie\", \"Heinrich Himmler\", \"Ernst Kaltenbrunner\", \"Adolf Eichmann\"], correct: 0, explanation: \"Klaus Barbie, 'Butcher of Lyon,' was responsible for Moulin's arrest and interrogation.\" },\n        { topic: \"Panth\u00e9on Interment\", text: \"Moulin\u2019s ashes were transferred to the Panth\u00e9on in:\", options: [\"1950\", \"1964\", \"1974\", \"1984\"], correct: 1, explanation: \"On December 19, 1964, Moulin was honored with a Panth\u00e9on ceremony.\" },\n        { topic: \"Propaganda Refusal\", text: \"Moulin refused to sign a Nazi\u2011forced statement that falsely blamed French colonial troops for:\", options: [\"Tax evasion\", \"Atrocities\", \"Espionage\", \"Desertion\"], correct: 1, explanation: \"He refused to scapegoat French colonial soldiers for Nazi propaganda purposes.\" }\n    ];\n\n    let currentMode = \"SAT\";\n    let currentQuestions = [...SAT_QUESTIONS];\n    let currentIndex = 0;\n    let playerScore = 0;\n    let quizAnswered = false;\n    let selectedOptIdx = null;\n    let totalPerMode = 6;\n\n    const dynamicArea = document.getElementById(\"dynamicQuestionArea\");\n    const feedbackDiv = document.getElementById(\"feedbackArea\");\n    const nextBtn = document.getElementById(\"nextButton\");\n    const restartBtn = document.getElementById(\"restartButton\");\n    const scoreSpan = document.getElementById(\"scoreValue\");\n    const modeTitle = document.getElementById(\"modeTitle\");\n\n    function updateScoreUI() {\n        scoreSpan.innerText = playerScore;\n    }\n\n    function loadMode(mode) {\n        currentMode = mode;\n        if (mode === \"SAT\") currentQuestions = [...SAT_QUESTIONS];\n        else if (mode === \"PSAT\") currentQuestions = [...PSAT_QUESTIONS];\n        else currentQuestions = [...ACT_QUESTIONS];\n        \n        let icon = mode === \"SAT\" ? '<i class=\"fab fa-sat\"><\/i>' : (mode === \"PSAT\" ? '<i class=\"fas fa-pen-fancy\"><\/i>' : '<i class=\"fas fa-bolt\"><\/i>');\n        modeTitle.innerHTML = `${icon} ${mode} \u2726 Resistance Righteousness Prep`;\n        \n        currentIndex = 0;\n        playerScore = 0;\n        quizAnswered = false;\n        selectedOptIdx = null;\n        updateScoreUI();\n        nextBtn.style.display = \"none\";\n        feedbackDiv.innerHTML = `<i class=\"fas fa-check-circle\"><\/i> ${mode} mode activated. Answer 6 questions about Jean Moulin, the CNR, and the French Resistance.`;\n        renderQuestion();\n        \n        document.querySelectorAll('.mode-btn').forEach(btn => btn.classList.remove('active'));\n        if (mode === \"SAT\") document.getElementById(\"modeSAT\").classList.add('active');\n        if (mode === \"PSAT\") document.getElementById(\"modePSAT\").classList.add('active');\n        if (mode === \"ACT\") document.getElementById(\"modeACT\").classList.add('active');\n    }\n\n    function renderQuestion() {\n        if (currentIndex >= totalPerMode) {\n            dynamicArea.innerHTML = `\n                <div style=\"text-align:center; padding:20px;\">\n                    <i class=\"fas fa-trophy\" style=\"font-size:3rem; color:#e0c87a;\"><\/i>\n                    <h3>${currentMode} Complete!<\/h3>\n                    <p>Your score: ${playerScore} \/ ${totalPerMode*100}<\/p>\n                    <p><i class=\"fas fa-medal\"><\/i> ${getFinalMessage()}<\/p>\n                    <i class=\"fas fa-sync-alt\"><\/i> Switch exam mode or press Restart.\n                <\/div>\n            `;\n            nextBtn.style.display = \"none\";\n            quizAnswered = true;\n            return;\n        }\n\n        const q = currentQuestions[currentIndex];\n        let optionsHtml = '';\n        const letters = ['A', 'B', 'C', 'D'];\n        q.options.forEach((opt, idx) => {\n            let disabledAttr = quizAnswered ? 'disabled' : '';\n            let extraClass = '';\n            if (quizAnswered) {\n                if (idx === q.correct) extraClass = 'correct-highlight';\n                else if (idx === selectedOptIdx && idx !== q.correct) extraClass = 'wrong-highlight';\n            }\n            optionsHtml += `\n                <button class=\"opt-btn ${extraClass}\" data-opt-index=\"${idx}\" ${disabledAttr}>\n                    <i class=\"fas ${idx === 0 ? 'fa-circle' : (idx === 1 ? 'fa-dot-circle' : (idx === 2 ? 'fa-record-vinyl' : 'fa-stop'))}\"><\/i>\n                    <strong>${letters[idx]}.<\/strong> ${escapeHtml(opt)}\n                <\/button>\n            `;\n        });\n\n        const progressHtml = `<div class=\"game-status\" style=\"margin-bottom:12px;\"><i class=\"fas fa-fist-raised\"><\/i> Question ${currentIndex+1} of ${totalPerMode} (${currentMode}) \u2022 <i class=\"fas fa-france\"><\/i> ${q.topic}<\/div>`;\n        const questionHtml = `\n            ${progressHtml}\n            <div class=\"question-text\"><i class=\"fas fa-crosshairs\"><\/i> ${escapeHtml(q.text)}<\/div>\n            <div class=\"options-list\" id=\"optionsList\">${optionsHtml}<\/div>\n        `;\n        dynamicArea.innerHTML = questionHtml;\n\n        if (!quizAnswered) {\n            document.querySelectorAll('.opt-btn').forEach(btn => {\n                btn.addEventListener('click', (e) => {\n                    if (quizAnswered) return;\n                    const chosenIdx = parseInt(btn.getAttribute('data-opt-index'));\n                    handleAnswer(chosenIdx);\n                });\n            });\n        }\n    }\n\n    function handleAnswer(chosenIdx) {\n        if (quizAnswered) return;\n        const q = currentQuestions[currentIndex];\n        const isCorrect = (chosenIdx === q.correct);\n        selectedOptIdx = chosenIdx;\n        if (isCorrect) {\n            playerScore += 100;\n            updateScoreUI();\n            feedbackDiv.innerHTML = `<i class=\"fas fa-check-circle\" style=\"color:#2e7d32;\"><\/i> \u2705 ${q.explanation} <i class=\"fas fa-award\"><\/i> +100 points (${q.topic})`;\n        } else {\n            const correctLetter = String.fromCharCode(65 + q.correct);\n            const correctText = q.options[q.correct];\n            feedbackDiv.innerHTML = `<i class=\"fas fa-times-circle\" style=\"color:#b71c1c;\"><\/i> Incorrect. Correct answer: ${correctLetter}: ${escapeHtml(correctText)}.<br>\ud83d\udcd6 ${q.explanation} (${q.topic})`;\n        }\n        quizAnswered = true;\n        renderQuestion();\n        nextBtn.style.display = \"block\";\n    }\n\n    function nextQuestion() {\n        if (!quizAnswered && currentIndex < totalPerMode) {\n            feedbackDiv.innerHTML = `<i class=\"fas fa-exclamation-triangle\"><\/i> Please answer before continuing.`;\n            return;\n        }\n        if (currentIndex + 1 <= totalPerMode) {\n            currentIndex++;\n            quizAnswered = false;\n            selectedOptIdx = null;\n            nextBtn.style.display = \"none\";\n            if (currentIndex < totalPerMode) {\n                feedbackDiv.innerHTML = `<i class=\"fas fa-lightbulb\"><\/i> Read the article carefully, then choose the best answer.`;\n                renderQuestion();\n            } else {\n                renderQuestion();\n                nextBtn.style.display = \"none\";\n            }\n        }\n    }\n\n    function restartQuiz() {\n        loadMode(currentMode);\n    }\n\n    function getFinalMessage() {\n        let maxScore = totalPerMode * 100;\n        if (playerScore === maxScore) return `\ud83c\udfc6 Perfect ${currentMode} score! You understand Jean Moulin's courage, sacrifice, and role in uniting the French Resistance.`;\n        if (playerScore >= 400) return `\ud83c\udf96\ufe0f Strong ${currentMode} readiness! \u201cHe refused to betray \u2014 and died a hero of France.\u201d`;\n        return `\ud83d\udcdc Review the exhibit about the CNR, torture by Klaus Barbie, and Moulin\u2019s Panth\u00e9on legacy.`;\n    }\n\n    function escapeHtml(str) {\n        return str.replace(\/[&<>]\/g, function(m) {\n            if (m === '&') return '&amp;';\n            if (m === '<') return '&lt;';\n            if (m === '>') return '&gt;';\n            return m;\n        });\n    }\n\n    document.getElementById(\"modeSAT\").addEventListener(\"click\", () => loadMode(\"SAT\"));\n    document.getElementById(\"modePSAT\").addEventListener(\"click\", () => loadMode(\"PSAT\"));\n    document.getElementById(\"modeACT\").addEventListener(\"click\", () => loadMode(\"ACT\"));\n    nextBtn.addEventListener(\"click\", nextQuestion);\n    restartBtn.addEventListener(\"click\", restartQuiz);\n    \n    loadMode(\"SAT\");\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Museum Test Prep App | Jean Moulin \u2022 SAT \u2022 PSAT \u2022 ACT Jean Moulin Museum Test Prep App French Resistance leader \u2014 Unifier of the National Council of the Resistance (CNR), symbol of courage and sacrifice Righteousness Hall Jean Moulin \u2014 France (1899\u20131943) Jean Moulin was a French civil servant, resistance leader, and one [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1006","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/museum.wiserighteous.org\/index.php\/wp-json\/wp\/v2\/pages\/1006","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/museum.wiserighteous.org\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/museum.wiserighteous.org\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/museum.wiserighteous.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/museum.wiserighteous.org\/index.php\/wp-json\/wp\/v2\/comments?post=1006"}],"version-history":[{"count":2,"href":"https:\/\/museum.wiserighteous.org\/index.php\/wp-json\/wp\/v2\/pages\/1006\/revisions"}],"predecessor-version":[{"id":1009,"href":"https:\/\/museum.wiserighteous.org\/index.php\/wp-json\/wp\/v2\/pages\/1006\/revisions\/1009"}],"wp:attachment":[{"href":"https:\/\/museum.wiserighteous.org\/index.php\/wp-json\/wp\/v2\/media?parent=1006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}