{"id":3618,"date":"2026-03-16T17:32:21","date_gmt":"2026-03-16T15:32:21","guid":{"rendered":"http:\/\/bhaswelihle.local\/lihles-100k-challenge\/?page_id=3618"},"modified":"2026-03-16T17:32:21","modified_gmt":"2026-03-16T15:32:21","slug":"educator-requests","status":"publish","type":"page","link":"https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/educator-requests\/","title":{"rendered":"Educator Requests"},"content":{"rendered":"<div id=\"pl-3618\"  class=\"panel-layout\" ><div id=\"pg-3618-0\"  class=\"panel-grid panel-no-style\" ><div id=\"pgc-3618-0-0\"  class=\"panel-grid-cell\" ><div id=\"panel-3618-0-0-0\" class=\"so-panel widget widget_sow-editor panel-first-child panel-last-child\" data-index=\"0\" ><div\n\t\t\t\n\t\t\tclass=\"so-widget-sow-editor so-widget-sow-editor-base\"\n\t\t\t\n\t\t>\n<div class=\"siteorigin-widget-tinymce textwidget\">\n\t    \n    <div class=\"educator-wizard-wrapper\">\n        \n        <!-- Progress Indicator -->\n        <div class=\"wizard-progress\">\n            <div class=\"progress-bar\">\n                <div class=\"progress-fill\" id=\"wizardProgress\" style=\"width: 25%;\"><\/div>\n            <\/div>\n            <div class=\"progress-labels\">\n                <span class=\"active\">Welcome<\/span>\n                <span>Verify Contact<\/span>\n                <span>Request Details<\/span>\n                <span>Complete<\/span>\n            <\/div>\n        <\/div>\n        \n        <div class=\"wizard-container\">\n            \n            <!-- STEP 1: WELCOME -->\n            <div class=\"wizard-step active\" id=\"step1\">\n                <h2>Dear Educators,<\/h2>\n                \n                <div class=\"welcome-message\">\n                    <p><strong>I want to begin with one word: Thank you.<\/strong><\/p>\n                    \n                    <p>Because of you, learners who have used my book, and many who have participated in the Future Global Leaders Club, are discovering courage they didn't know they had.<\/p>\n                    \n                    <p>Confidence has been reclaimed.<\/p>\n                    \n                    <p>Brilliance has shone through.<\/p>\n                    \n                    <p>Dreams have been ignited.<\/p>\n                    \n                    <p>Because of this impact, at just 17 years old, I received two African continent awards: the 2025 Youth Empowerment Champion Award and the NextGen Innovator of the Year Award.<\/p>\n                    \n                    <p>It is because of this very impact that, despite securing admission to Wits University for Biomedical Science, I have made the bold decision to pause my studies and launch <strong>Lihle's 100K Teens Challenge.<\/strong><\/p>\n                    \n                    <p>My objective is clear: to motivate and inspire 100,000 teenagers across the African continent, while I am still 18 and relatable to the teens I serve.<\/p>\n                    \n                    <p><em>Imagine a world where self-doubt loosens its grip on 100,000 teenagers.<\/em><\/p>\n                    \n                    <p><em>Where 100,000 young people truly believe in themselves.<\/em><\/p>\n                    \n                    <p><strong>That is the movement I am inviting you to join.<\/strong><\/p>\n                    \n                    <p>I cannot achieve this goal without you.<\/p>\n                    \n                    <p>I am seeking to partner with educators who nurture potential beyond the syllabus, and with schools that choose to believe boldly in their learners' futures.<\/p>\n                    \n                    <p><strong>Provide your details below and be the educator that sparks purpose, fuel ambition, and strengthen self-belief in 100,000 teens.<\/strong><\/p>\n                    \n                    <p>Because when one educator believes deeply, learners rise.<\/p>\n                    \n                    <p>When classrooms believe collectively, a generation is empowered.<\/p>\n                    \n                    <p>100,000 starts with one classroom.<\/p>\n                    \n                    <p>One educator.<\/p>\n                    \n                    <p>One decision.<\/p>\n                    \n                    <p class=\"signature\">I am BhasweLihle Zilwa, and I look forward to building the future of the African continent with you, contributing meaningfully toward the achievement of the African Union's Agenda 2063.<\/p>\n                <\/div>\n                \n                <div class=\"wizard-buttons\">\n                    <button type=\"button\" class=\"btn-primary\" onclick=\"goToStep(2)\">Join the Movement<\/button>\n                <\/div>\n            <\/div>\n            \n            <!-- STEP 2: CONTACT VERIFICATION -->\n            <div class=\"wizard-step\" id=\"step2\">\n                <h2>Verify Your Contact Details<\/h2>\n                <p>Please provide your contact information. You'll need to verify either your email or cell number.<\/p>\n                \n                <div class=\"form-grid\">\n                    <div class=\"form-group\">\n                        <label>Name <span class=\"required\">*<\/span><\/label>\n                        <input type=\"text\" id=\"educator_name\" required>\n                    <\/div>\n                    <div class=\"form-group\">\n                        <label>Last Name <span class=\"required\">*<\/span><\/label>\n                        <input type=\"text\" id=\"educator_last_name\" required>\n                    <\/div>\n                <\/div>\n                \n                <div class=\"form-group\">\n                    <label>Position <span class=\"required\">*<\/span><\/label>\n                    <input type=\"text\" id=\"educator_position\" placeholder=\"e.g., Teacher, Principal, HOD\" required>\n                <\/div>\n                \n                <div class=\"form-grid\">\n                    <div class=\"form-group\">\n                        <label>Email Address <span class=\"required\">*<\/span><\/label>\n                        <input type=\"email\" id=\"educator_email\" required>\n                    <\/div>\n                    <div class=\"form-group\">\n                        <label>Cell Number <span class=\"required\">*<\/span><\/label>\n                        <input type=\"tel\" id=\"educator_cell\" placeholder=\"+27...\" required>\n                    <\/div>\n                <\/div>\n                \n                <div class=\"verification-panel\">\n                    <div id=\"verificationNeeded\">\n                        <div class=\"verification-prompt\">\n                            <div class=\"verification-text-block\">\n                                <p><strong>Verification Required:<\/strong> Please verify your contact details to continue.<\/p>\n                            <\/div>\n                            <div class=\"verification-buttons-block\">\n                                <button type=\"button\" class=\"verify-btn\" id=\"verifyEmailBtn\" onclick=\"sendVerification('email')\">\n                                    Email\n                                <\/button>\n                                <button type=\"button\" class=\"verify-btn\" id=\"verifySmsBtn\" onclick=\"sendVerification('sms')\">\n                                    SMS\n                                <\/button>\n                            <\/div>\n                        <\/div>\n\n                        <div id=\"smsBurstNotice\" class=\"sms-throttle-notice\" style=\"display:none;\">\n                            <p><em>There seems to be a problem delivering SMS to this number. Please wait <strong id=\"smsBurstCountdown\">5:00<\/strong> and try again, or use email verification instead.<\/em><\/p>\n                        <\/div>\n                        <div id=\"smsDailyLimitNotice\" class=\"sms-throttle-notice sms-throttle-daily\" style=\"display:none;\">\n                            <p><em>Daily SMS limit reached for this number. Please use email verification instead.<\/em><\/p>\n                        <\/div>\n                        \n                        <div id=\"otpPanel\" style=\"display: none;\">\n                            <div class=\"otp-prompt\">\n                                <div class=\"otp-text-block\">\n                                    <p><strong>Enter Code:<\/strong> 6-digit code sent to your <span id=\"verifyTarget\"><\/span><\/p>\n                                <\/div>\n                                <div class=\"otp-input-block\">\n                                    <input type=\"text\" id=\"otpCode\" maxlength=\"6\" placeholder=\"Enter code\" inputmode=\"numeric\" pattern=\"[0-9]*\">\n                                    <button type=\"button\" class=\"verify-btn\" onclick=\"verifyCode()\">Verify<\/button>\n                                    <button type=\"button\" class=\"verify-btn-secondary\" id=\"resendBtn\" onclick=\"resendCode()\">Resend<\/button>\n                                <\/div>\n                            <\/div>\n                            <div id=\"verifyStatus\" class=\"verify-status\"><\/div>\n                        <\/div>\n                    <\/div>\n                    \n                    <div id=\"alreadyVerified\" style=\"display: none;\">\n                        <div class=\"verify-status-compact\">\n                            <div class=\"verify-text\">\n                                <p><strong>Verified Successfully:<\/strong> Your contact details have been verified. Please complete and submit your request within 24 hours.<\/p>\n                            <\/div>\n                            <div class=\"timer-container\">\n                                <p class=\"timer-header\">Verification Expires In<\/p>\n                                <div class=\"countdown-timer\">\n                                    <div class=\"time-unit\">\n                                        <span class=\"time-value\" id=\"timerHours\">00<\/span>\n                                        <span class=\"time-label\">HH<\/span>\n                                    <\/div>\n                                    <span class=\"time-colon\">:<\/span>\n                                    <div class=\"time-unit\">\n                                        <span class=\"time-value\" id=\"timerMinutes\">00<\/span>\n                                        <span class=\"time-label\">MM<\/span>\n                                    <\/div>\n                                    <span class=\"time-colon\">:<\/span>\n                                    <div class=\"time-unit\">\n                                        <span class=\"time-value\" id=\"timerSeconds\">00<\/span>\n                                        <span class=\"time-label\">SS<\/span>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                \n                <div class=\"wizard-buttons\">\n                    <button type=\"button\" class=\"btn-secondary\" onclick=\"goToStep(1)\">Back<\/button>\n                    <button type=\"button\" class=\"btn-primary\" id=\"continueBtn\" onclick=\"goToStep(3)\" disabled>Continue<\/button>\n                <\/div>\n            <\/div>\n            \n            <!-- STEP 3: REQUEST FORM -->\n            <div class=\"wizard-step\" id=\"step3\">\n                <h2>School & Learner Request<\/h2>\n                \n                <h3>School Information<\/h3>\n                \n                <div class=\"form-group\">\n                    <label>School Name <span class=\"required\">*<\/span><\/label>\n                    <input type=\"text\" id=\"school_name\" required>\n                <\/div>\n                \n                <div class=\"form-group\">\n                    <label>School Address <span class=\"required\">*<\/span><\/label>\n                    <textarea id=\"school_address\" rows=\"3\" required><\/textarea>\n                <\/div>\n                \n                <div class=\"form-grid\">\n                    <div class=\"form-group\">\n                        <label>Country <span class=\"required\">*<\/span><\/label>\n                        <select id=\"school_country\" required>\n                            <option value=\"\">Select Country<\/option>\n                            <option value=\"ZA\" selected>South Africa<\/option>\n                            <option value=\"NG\">Nigeria<\/option>\n                            <option value=\"KE\">Kenya<\/option>\n                            <option value=\"GH\">Ghana<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"form-group\">\n                        <label>Province <span class=\"required\">*<\/span><\/label>\n                        <select id=\"school_province\" required>\n                            <option value=\"\">Select Province<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n                \n                <div class=\"form-grid\">\n                    <div class=\"form-group\">\n                        <label>City <span class=\"required\">*<\/span><\/label>\n                        <select id=\"school_city\" required>\n                            <option value=\"\">Select City<\/option>\n                        <\/select>\n                    <\/div>\n                    \n                    <div class=\"form-group\" id=\"suburb-field\">\n                        <label>Suburb <span class=\"required\">*<\/span><\/label>\n                        <input type=\"text\" id=\"school_suburb\" placeholder=\"Enter suburb\" required>\n                    <\/div>\n                <\/div>\n                \n                <div class=\"declaration-box\">\n                    <p><strong>I have witnessed or heard about the positive impact of Lihle's Collection of Motivational Quotes for Teens on learners.<\/strong><\/p>\n                    <p><strong>I have witnessed or heard about the way the Future Global Leaders Club motivates and inspires learners.<\/strong><\/p>\n                <\/div>\n                \n                <h3>Learner Participation Request<\/h3>\n                <p>Indicate how many learners from your school should benefit:<\/p>\n                \n                <div class=\"learner-rows-container\">\n                                        <div class=\"learner-row\">\n                        <label>Grade 12<\/label>\n                        <input type=\"number\" class=\"learner-input\" id=\"grade_12\" min=\"0\" max=\"999\" placeholder=\"0\">\n                        <label class=\"na-label\"><input type=\"checkbox\" class=\"na-check\" data-target=\"grade_12\"> N\/A<\/label>\n                    <\/div>\n                                        <div class=\"learner-row\">\n                        <label>Grade 11<\/label>\n                        <input type=\"number\" class=\"learner-input\" id=\"grade_11\" min=\"0\" max=\"999\" placeholder=\"0\">\n                        <label class=\"na-label\"><input type=\"checkbox\" class=\"na-check\" data-target=\"grade_11\"> N\/A<\/label>\n                    <\/div>\n                                        <div class=\"learner-row\">\n                        <label>Grade 10<\/label>\n                        <input type=\"number\" class=\"learner-input\" id=\"grade_10\" min=\"0\" max=\"999\" placeholder=\"0\">\n                        <label class=\"na-label\"><input type=\"checkbox\" class=\"na-check\" data-target=\"grade_10\"> N\/A<\/label>\n                    <\/div>\n                                        <div class=\"learner-row\">\n                        <label>Grade 9<\/label>\n                        <input type=\"number\" class=\"learner-input\" id=\"grade_9\" min=\"0\" max=\"999\" placeholder=\"0\">\n                        <label class=\"na-label\"><input type=\"checkbox\" class=\"na-check\" data-target=\"grade_9\"> N\/A<\/label>\n                    <\/div>\n                                        <div class=\"learner-row\">\n                        <label>Grade 8<\/label>\n                        <input type=\"number\" class=\"learner-input\" id=\"grade_8\" min=\"0\" max=\"999\" placeholder=\"0\">\n                        <label class=\"na-label\"><input type=\"checkbox\" class=\"na-check\" data-target=\"grade_8\"> N\/A<\/label>\n                    <\/div>\n                                        <div class=\"learner-row\">\n                        <label>Grade 7<\/label>\n                        <input type=\"number\" class=\"learner-input\" id=\"grade_7\" min=\"0\" max=\"999\" placeholder=\"0\">\n                        <label class=\"na-label\"><input type=\"checkbox\" class=\"na-check\" data-target=\"grade_7\"> N\/A<\/label>\n                    <\/div>\n                                        \n                    <div class=\"learner-row\">\n                        <label>Other Group<\/label>\n                        <input type=\"number\" class=\"learner-input\" id=\"other_group\" min=\"0\" max=\"999\" placeholder=\"0\">\n                        <label class=\"na-label\"><input type=\"checkbox\" class=\"na-check\" data-target=\"other_group\"> N\/A<\/label>\n                    <\/div>\n                <\/div>\n                \n                <div class=\"form-group\">\n                    <label>Describe other group and average age<\/label>\n                    <textarea id=\"other_group_description\" rows=\"2\"><\/textarea>\n                <\/div>\n                \n                <div class=\"total-box\">\n                    <strong>Total Learners:<\/strong>\n                    <input type=\"number\" id=\"total_learners\" readonly value=\"0\">\n                <\/div>\n                \n                <h3>Motivation<\/h3>\n                <p>Please motivate in no more than 1,000 words why your learners will benefit:<\/p>\n                \n                <div class=\"form-group\">\n                    <textarea id=\"motivation\" rows=\"8\" required><\/textarea>\n                    <div class=\"word-counter\"><span id=\"wordCount\">0<\/span> \/ 1000 words<\/div>\n                <\/div>\n                \n                <div class=\"sponsorship-box\">\n                    <p><strong>Kindly request sponsorship on our behalf to enable our learners' dreams to be ignited.<\/strong><\/p>\n                <\/div>\n                \n                <div class=\"wizard-buttons\">\n                    <button type=\"button\" class=\"btn-secondary\" onclick=\"goToStep(2)\">Back<\/button>\n                    <button type=\"button\" class=\"btn-primary\" id=\"submitBtn\" onclick=\"submitRequest()\">Submit Request<\/button>\n                <\/div>\n            <\/div>\n            \n            <!-- STEP 4: SUCCESS -->\n            <div class=\"wizard-step\" id=\"step4\">\n                <div class=\"success-panel\">\n                    <div class=\"success-icon\">\u2713<\/div>\n                    <h2>Request Received!<\/h2>\n                    <p>We have received your request for your learners to benefit from Lihle's100kTeensChallenge, with the following details:<\/p>\n                    \n                    <div id=\"requestSummary\" class=\"summary-box\"><\/div>\n                    \n                    <p><strong>You will be contacted within the next 48 hours<\/strong> and the probable timelines for securing sponsorship and delivery of books will be communicated to you.<\/p>\n                    \n                    <div class=\"closing-text\">\n                        <p><em>I am looking forward to igniting your learners' dreams and injecting them with self-belief.<\/em><\/p>\n                        <p><em>I will do my best in raising sponsorships for them.<\/em><\/p>\n                        <p><strong>BhasweLihle Zilwa<\/strong><\/p>\n                    <\/div>\n                <\/div>\n            <\/div>\n            \n        <\/div>\n        \n        <input type=\"hidden\" id=\"email_verified\" value=\"0\">\n        <input type=\"hidden\" id=\"cell_verified\" value=\"0\">\n        <input type=\"hidden\" id=\"educator_form_nonce\" value=\"21ac0ffa86\">    <\/div>\n    \n    <style>\n    .educator-wizard-wrapper {\n        max-width: 900px;\n        margin: 40px auto;\n        padding: 0 20px;\n    }\n    \n    .wizard-progress {\n        margin-bottom: 40px;\n    }\n    \n    .progress-bar {\n        height: 4px;\n        background: #e0e0e0;\n        border-radius: 2px;\n        overflow: hidden;\n        margin-bottom: 15px;\n    }\n    \n    .progress-fill {\n        height: 100%;\n        background: #232862;\n        transition: width 0.3s ease;\n    }\n    \n    .progress-labels {\n        display: grid;\n        grid-template-columns: repeat(4, 1fr);\n        gap: 10px;\n        font-size: 13px;\n        color: #999;\n    }\n    \n    .progress-labels span.active {\n        color: #232862;\n        font-weight: 600;\n    }\n    \n    .wizard-container {\n        background: white;\n        padding: 40px;\n        border-radius: 8px;\n        box-shadow: 0 2px 10px rgba(0,0,0,0.1);\n    }\n    \n    .wizard-step {\n        display: none;\n    }\n    \n    .wizard-step.active {\n        display: block;\n        animation: fadeIn 0.3s ease;\n    }\n    \n    @keyframes fadeIn {\n        from { opacity: 0; transform: translateY(10px); }\n        to { opacity: 1; transform: translateY(0); }\n    }\n    \n        \n    h2 {\n        color: #232862;\n        margin-bottom: 15px;\n    }\n    \n    h3 {\n        color: #232862;\n        margin: 30px 0 15px;\n        font-size: 20px;\n    }\n    \n    h4 {\n        color: #232862;\n        margin-bottom: 10px;\n    }\n    \n    p {\n        color: #666;\n        line-height: 1.6;\n        margin-bottom: 20px;\n    }\n    \n    .welcome-message {\n        background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);\n        padding: 30px;\n        border-radius: 8px;\n        margin-bottom: 30px;\n        border-left: 4px solid #232862;\n    }\n    \n    .welcome-message p {\n        margin-bottom: 15px;\n        line-height: 1.8;\n        color: #333;\n    }\n    \n    .welcome-message p:last-child {\n        margin-bottom: 0;\n    }\n    \n    .welcome-message .signature {\n        margin-top: 25px;\n        padding-top: 20px;\n        border-top: 2px solid rgba(35, 40, 98, 0.2);\n        font-style: italic;\n        font-weight: 500;\n    }\n    \n    .info-panel {\n        background: #f8f9fa;\n        padding: 20px;\n        border-radius: 6px;\n        margin-bottom: 20px;\n    }\n    \n    .info-panel ul {\n        margin: 10px 0 0 20px;\n    }\n    \n    .info-panel li {\n        margin: 8px 0;\n        color: #555;\n    }\n    \n    .form-group {\n        margin-bottom: 20px;\n    }\n    \n    .form-grid {\n        display: grid;\n        grid-template-columns: 1fr 1fr;\n        gap: 20px;\n        margin-bottom: 20px;\n    }\n    \n    label {\n        display: block;\n        font-weight: 600;\n        margin-bottom: 8px;\n        color: #333;\n    }\n    \n    .required {\n        color: #d63638;\n    }\n    \n    input[type=\"text\"],\n    input[type=\"email\"],\n    input[type=\"tel\"],\n    input[type=\"number\"],\n    select,\n    textarea {\n        width: 100%;\n        padding: 10px;\n        border: 1px solid #ddd;\n        border-radius: 4px;\n        font-size: 15px;\n    }\n    \n    input:focus, select:focus, textarea:focus {\n        outline: none;\n        border-color: #232862;\n    }\n    \n    textarea {\n        resize: vertical;\n    }\n    \n    .verification-panel {\n        background: #f8f9fa;\n        padding: 20px;\n        border-radius: 6px;\n        margin: 20px 0;\n    }\n    \n    .verification-prompt {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        padding: 8px 12px;\n        background: transparent;\n        gap: 15px;\n    }\n    \n    .verification-text-block {\n        flex: 1;\n        text-align: left;\n    }\n    \n    .verification-text-block p {\n        color: #000;\n        margin: 0 !important;\n        font-size: 14px;\n        line-height: 1.4;\n    }\n    \n    .verification-text-block p strong {\n        color: #000;\n        font-weight: 600;\n    }\n    \n    .verification-buttons-block {\n        display: flex;\n        gap: 8px;\n        flex-shrink: 0;\n    }\n    \n    .verify-btn {\n        padding: 12px 24px;\n        background: white;\n        border: 2px solid #333;\n        border-radius: 20px;\n        cursor: pointer;\n        text-align: center;\n        transition: all 0.3s;\n        font-size: 15px;\n        font-weight: 600;\n        color: #000 !important;\n    }\n    \n    .verify-btn:hover {\n        background: #f5f5f5;\n        transform: translateY(-1px);\n        color: #000 !important;\n    }\n    \n    .verify-btn:active {\n        background: #232862 !important;\n        color: #fff !important;\n        border-color: #232862 !important;\n    }\n    \n    #otpPanel {\n        margin-top: 15px;\n        padding: 0;\n        background: transparent;\n    }\n    \n    .otp-prompt {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        padding: 8px 12px;\n        background: transparent;\n        gap: 15px;\n    }\n    \n    .otp-text-block {\n        flex: 1;\n        text-align: left;\n    }\n    \n    .otp-text-block p {\n        color: #000;\n        margin: 0 !important;\n        font-size: 14px;\n        line-height: 1.4;\n    }\n    \n    .otp-text-block p strong {\n        color: #000;\n        font-weight: 600;\n    }\n    \n    .otp-input-block {\n        display: flex;\n        gap: 8px;\n        flex-shrink: 0;\n        align-items: center;\n    }\n    \n    #otpCode {\n        width: 120px;\n        padding: 10px 12px;\n        border: 2px solid #333;\n        border-radius: 20px;\n        font-size: 15px;\n        font-weight: 600;\n        text-align: center;\n        letter-spacing: 2px;\n        background: white;\n        color: #000;\n    }\n    \n    #otpCode:focus {\n        outline: none;\n        border-color: #232862;\n    }\n    \n    #otpCode::placeholder {\n        color: #999;\n        letter-spacing: normal;\n        font-weight: 400;\n    }\n    \n    .verify-btn-secondary {\n        padding: 10px 20px;\n        background: white;\n        border: 2px solid #666;\n        border-radius: 20px;\n        cursor: pointer;\n        text-align: center;\n        transition: all 0.3s;\n        font-size: 15px;\n        font-weight: 600;\n        color: #666 !important;\n        min-height: 44px;\n    }\n    \n    .verify-btn-secondary:hover {\n        background: #f5f5f5;\n        transform: translateY(-1px);\n        color: #666 !important;\n    }\n    \n    .verify-btn-secondary:active {\n        background: #232862 !important;\n        color: #fff !important;\n        border-color: #232862 !important;\n    }\n    \n    .verify-status {\n        padding: 8px 12px;\n        border-radius: 4px;\n        margin-top: 8px;\n        font-size: 14px;\n    }\n    \n    .verify-status.success {\n        background: #e8f5e9;\n        color: #2e7d32;\n        border: 1px solid #a5d6a7;\n    }\n    \n    .verify-status-compact {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        padding: 8px 12px;\n        background: transparent;\n        gap: 15px;\n    }\n    \n    .verify-text {\n        flex: 1;\n        text-align: left;\n    }\n    \n    .verify-text p {\n        color: #000;\n        margin: 0;\n        font-size: 14px;\n        line-height: 1.4;\n    }\n    \n    .verify-text p strong {\n        color: #000;\n        font-weight: 600;\n    }\n    \n    .timer-container {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        gap: 3px;\n        flex-shrink: 0;\n    }\n    \n    .timer-header {\n        font-size: 10px;\n        color: #666;\n        margin: 0 0 2px 0 !important;\n        font-weight: 500;\n        text-transform: uppercase;\n        letter-spacing: 0.5px;\n        line-height: 1 !important;\n    }\n    \n    .countdown-timer {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 2px;\n        padding: 5px 10px;\n        background: white;\n        border: 2px solid #333;\n        border-radius: 20px;\n    }\n    \n    .time-unit {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n    }\n    \n    .time-value {\n        font-size: 15px;\n        font-weight: 600;\n        color: #000;\n        line-height: 1;\n        font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    }\n    \n    .time-label {\n        font-size: 7px;\n        color: #666;\n        margin-top: 1px;\n        font-weight: 400;\n        text-transform: uppercase;\n        line-height: 1;\n    }\n    \n    .time-colon {\n        font-size: 15px;\n        font-weight: 600;\n        color: #000;\n        line-height: 1;\n        margin: 0 1px;\n        align-self: flex-start;\n        padding-top: 0;\n    }\n    \n    .verify-status.error {\n        background: #ffebee;\n        color: #c62828;\n        border: 1px solid #ef9a9a;\n    }\n    \n    .declaration-box, .sponsorship-box {\n        background: #f0f0f1;\n        padding: 20px;\n        border-left: 4px solid #232862;\n        border-radius: 4px;\n        margin: 25px 0;\n    }\n    \n    .learner-rows-container {\n        display: grid;\n        grid-template-columns: 1fr 1fr;\n        gap: 15px;\n        margin-bottom: 20px;\n    }\n    \n    .learner-row {\n        display: grid;\n        grid-template-columns: 100px 80px 60px;\n        gap: 10px;\n        align-items: center;\n        padding: 12px;\n        background: #f9f9f9;\n        border-radius: 4px;\n    }\n    \n    .learner-row label:first-child {\n        font-weight: 600;\n        margin: 0;\n    }\n    \n    .learner-input {\n        padding: 8px !important;\n    }\n    \n    .na-label {\n        font-weight: normal !important;\n        margin: 0 !important;\n    }\n    \n    .total-box {\n        background: #232862;\n        color: white;\n        padding: 20px;\n        border-radius: 6px;\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        margin: 20px 0;\n    }\n    \n    .total-box input {\n        width: 120px;\n        text-align: center;\n        font-size: 18px;\n        font-weight: bold;\n    }\n    \n    .word-counter {\n        text-align: right;\n        font-size: 13px;\n        color: #666;\n        margin-top: 5px;\n    }\n    \n    .wizard-buttons {\n        display: flex;\n        gap: 15px;\n        justify-content: center;\n        margin-top: 40px;\n    }\n    \n    .btn-primary, .btn-secondary {\n        padding: 12px 32px;\n        border: none;\n        border-radius: 6px;\n        font-size: 16px;\n        font-weight: 600;\n        cursor: pointer;\n        transition: all 0.3s;\n    }\n    \n    .btn-primary {\n        background: #232862;\n        color: white;\n    }\n    \n    .btn-primary:hover {\n        background: #1a1f4a;\n    }\n    \n    .btn-primary:disabled {\n        background: #ccc;\n        cursor: not-allowed;\n    }\n    \n    .btn-secondary {\n        background: #6c757d;\n        color: white;\n    }\n    \n    .btn-secondary:hover {\n        background: #5a6268;\n    }\n    \n    .success-panel {\n        text-align: center;\n    }\n    \n    .success-icon {\n        font-size: 64px;\n        color: #00a32a;\n        margin-bottom: 20px;\n    }\n    \n    .summary-box {\n        background: #f0f0f1;\n        padding: 20px;\n        border-radius: 6px;\n        margin: 25px 0;\n        text-align: left;\n    }\n    \n    .closing-text {\n        margin-top: 30px;\n        padding-top: 20px;\n        border-top: 2px solid #e0e0e0;\n        font-style: italic;\n    }\n    \n    @media (max-width: 768px) {\n        .form-grid, .learner-rows-container {\n            grid-template-columns: 1fr;\n        }\n        \n        .wizard-container {\n            padding: 20px;\n        }\n        \n        .verification-prompt,\n        .otp-prompt,\n        .verify-status-compact {\n            flex-direction: column;\n            align-items: flex-start;\n            gap: 12px;\n        }\n        \n        .verification-text-block,\n        .otp-text-block,\n        .verify-text {\n            width: 100%;\n        }\n        \n        .verification-buttons-block,\n        .otp-input-block,\n        .timer-container {\n            width: 100%;\n            justify-content: flex-start;\n        }\n        \n        .otp-input-block {\n            flex-wrap: wrap;\n        }\n        \n        #otpCode {\n            flex: 1;\n            min-width: 120px;\n        }\n    }\n\n    .verify-btn:disabled,\n    .verify-btn[disabled] {\n        background: #f0f0f0;\n        border-color: #ccc;\n        color: #aaa !important;\n        cursor: not-allowed;\n        transform: none !important;\n        box-shadow: none;\n    }\n\n    .sms-throttle-notice {\n        margin-top: 10px;\n        padding: 10px 14px;\n        background: #fff8e1;\n        border: 1px solid #ffe082;\n        border-radius: 4px;\n        font-size: 13px;\n    }\n\n    .sms-throttle-notice p {\n        color: #5d4037 !important;\n        margin: 0 !important;\n        line-height: 1.5;\n    }\n\n    .sms-throttle-daily {\n        background: #fce4ec;\n        border-color: #f48fb1;\n    }\n\n    .sms-throttle-daily p {\n        color: #880e4f !important;\n    }\n    <\/style>\n    \n    <script>\n    const ajaxurl = 'https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/wp-admin\/admin-ajax.php';\n    const otpNonce = 'd8f1a8fc33';\n    let currentStep = 1;\n    let verificationMethod = null;\n    let isVerified = false;\n    let sentTo = '';\n\n    \/\/ SMS burst tracking \u2014 resets on page refresh (intentional per spec)\n    let smsSessionSends = 0;\n    const SMS_GREY_OUT_AFTER = 4; \/\/ grey out after this many SMS sends per session\n    let smsBurstCountdownInterval = null;\n    \n    const locationData = {\n        'ZA': {\n            provinces: {\n                'Gauteng': ['Alberton', 'Atteridgeville', 'Benoni', 'Boksburg', 'Brakpan', 'Bronkhorstspruit', 'Carletonville', 'Centurion', 'Cullinan', 'Daveyton', 'Duduza', 'Edenvale', 'Ekangala', 'Ekurhuleni', 'Germiston', 'Hammanskraal', 'Heidelberg', 'Johannesburg', 'Kagiso', 'Katlehong', 'Kempton Park', 'Krugersdorp', 'Mamelodi', 'Meyerton', 'Midrand', 'Nigel', 'Pretoria', 'Randburg', 'Randfontein', 'Roodepoort', 'Sandton', 'Sebokeng', 'Soshanguve', 'Soweto', 'Springs', 'Tembisa', 'Thokoza', 'Tsakane', 'Vanderbijlpark', 'Vereeniging', 'Westonaria'],\n                'Western Cape': ['Cape Town', 'Stellenbosch', 'Paarl', 'George', 'Mossel Bay', 'Knysna', 'Worcester', 'Hermanus', 'Oudtshoorn', 'Swellendam'],\n                'KwaZulu-Natal': ['Durban', 'Pietermaritzburg', 'Richards Bay', 'Newcastle', 'Empangeni', 'Ladysmith', 'Pinetown', 'Margate', 'Port Shepstone', 'Scottburgh'],\n                'Eastern Cape': ['Port Elizabeth', 'East London', 'Mthatha', 'Grahamstown', 'Uitenhage', 'Queenstown', 'King Williams Town', 'Mdantsane', 'Bhisho', 'Graaff-Reinet'],\n                'Limpopo': ['Polokwane', 'Tzaneen', 'Thohoyandou', 'Phalaborwa', 'Musina', 'Louis Trichardt', 'Mokopane', 'Lebowakgomo', 'Giyani', 'Bela-Bela'],\n                'Mpumalanga': ['Nelspruit', 'Witbank', 'Middelburg', 'Secunda', 'Ermelo', 'Standerton', 'Piet Retief', 'Barberton', 'White River', 'Sabie'],\n                'North West': ['Rustenburg', 'Mahikeng', 'Klerksdorp', 'Potchefstroom', 'Brits', 'Vryburg', 'Lichtenburg', 'Mmabatho', 'Zeerust', 'Schweizer-Reneke'],\n                'Free State': ['Bloemfontein', 'Welkom', 'Bethlehem', 'Kroonstad', 'Sasolburg', 'Phuthaditjhaba', 'Virginia', 'Parys', 'Odendaalsrus', 'Bothaville'],\n                'Northern Cape': ['Kimberley', 'Upington', 'Kuruman', 'Springbok', 'De Aar', 'Postmasburg', 'Kathu', 'Prieska', 'Carnarvon', 'Calvinia']\n            }\n        },\n        'NG': {\n            provinces: {\n                'Lagos': ['Lagos', 'Ikeja', 'Epe'],\n                'Abuja': ['Abuja'],\n                'Kano': ['Kano'],\n                'Rivers': ['Port Harcourt'],\n                'Oyo': ['Ibadan']\n            }\n        },\n        'KE': {\n            provinces: {\n                'Nairobi': ['Nairobi'],\n                'Mombasa': ['Mombasa'],\n                'Kisumu': ['Kisumu'],\n                'Nakuru': ['Nakuru'],\n                'Uasin Gishu': ['Eldoret']\n            }\n        },\n        'GH': {\n            provinces: {\n                'Greater Accra': ['Accra'],\n                'Ashanti': ['Kumasi'],\n                'Western': ['Sekondi-Takoradi'],\n                'Eastern': ['Koforidua']\n            }\n        }\n    };\n    \n    function goToStep(step) {\n        if (step === 3 && !isVerified) {\n            alert('Please verify your contact details first');\n            return;\n        }\n        \n        document.querySelectorAll('.wizard-step').forEach(el => el.classList.remove('active'));\n        document.getElementById('step' + step).classList.add('active');\n        \n        document.querySelectorAll('.progress-labels span').forEach((el, i) => {\n            el.classList.toggle('active', i + 1 === step);\n        });\n        \n        const progress = (step \/ 4) * 100;\n        document.getElementById('wizardProgress').style.width = progress + '%';\n        \n        currentStep = step;\n        window.scrollTo(0, 0);\n    }\n    \n    function sendVerification(method) {\n        const email = document.getElementById('educator_email').value;\n        const cell  = document.getElementById('educator_cell').value;\n\n        if (method === 'email' && !email) {\n            alert('Please enter your email address');\n            return;\n        }\n        if (method === 'sms' && !cell) {\n            alert('Please enter your cell number');\n            return;\n        }\n\n        \/\/ SMS: check if a burst cooldown is still active from localStorage\n        if (method === 'sms') {\n            const expiry = parseInt(localStorage.getItem('sms_burst_expiry') || '0');\n            if (expiry > Date.now()) {\n                showSmsBurstNotice(Math.ceil((expiry - Date.now()) \/ 1000));\n                return;\n            }\n            if (expiry) {\n                localStorage.removeItem('sms_burst_expiry');\n                resetSmsBurstUI();\n            }\n        }\n\n        verificationMethod = method;\n        sentTo = method === 'email' ? email : cell;\n\n        const btn = document.getElementById(method === 'email' ? 'verifyEmailBtn' : 'verifySmsBtn');\n        btn.disabled = true;\n        btn.textContent = 'Sending...';\n\n        const action = method === 'email' ? 'limenco_send_email_otp' : 'limenco_send_sms_otp';\n        const data = new FormData();\n        data.append('action', action);\n        data.append('otp_nonce', otpNonce);\n        data.append(method === 'email' ? 'email' : 'phone', sentTo);\n\n        fetch(ajaxurl, { method: 'POST', body: data })\n            .then(r => r.json())\n            .then(d => {\n                btn.disabled = false;\n                btn.textContent = method === 'email' ? 'Email' : 'SMS';\n\n                if (d.success) {\n                    document.getElementById('otpPanel').style.display = 'block';\n                    document.getElementById('verifyTarget').textContent = method === 'email' ? 'email' : 'cell number';\n                    document.getElementById('verifyStatus').className = '';\n                    document.getElementById('verifyStatus').textContent = '';\n                    if (method === 'sms') {\n                        smsSessionSends++;\n                        if (smsSessionSends >= SMS_GREY_OUT_AFTER) {\n                            triggerSmsBurstThrottle(300);\n                        } else {\n                            startResendCountdown(30);\n                        }\n                    }\n                } else {\n                    const code = d.data && d.data.code ? d.data.code : 'error';\n                    const msg  = d.data && d.data.message ? d.data.message : 'An error occurred. Please try again.';\n                    if (method === 'sms' && code === 'burst_exhausted') {\n                        triggerSmsBurstThrottle(d.data.retry_after || 300);\n                    } else if (method === 'sms' && code === 'daily_limit') {\n                        document.getElementById('smsDailyLimitNotice').style.display = 'block';\n                        document.getElementById('verifySmsBtn').disabled = true;\n                    } else if (method === 'sms' && (code === 'rate_limited' || code === 'budget_exceeded')) {\n                        \/\/ Hard block from IP or budget \u2014 disable SMS, show actual server message\n                        document.getElementById('verifySmsBtn').disabled = true;\n                        const status = document.getElementById('verifyStatus');\n                        status.className = 'verify-status error';\n                        status.textContent = msg;\n                    } else {\n                        const status = document.getElementById('verifyStatus');\n                        status.className = 'verify-status error';\n                        status.textContent = msg;\n                    }\n                }\n            })\n            .catch(() => {\n                btn.disabled = false;\n                btn.textContent = method === 'email' ? 'Email' : 'SMS';\n                const status = document.getElementById('verifyStatus');\n                status.className = 'verify-status error';\n                status.textContent = 'Network error. Please try again.';\n            });\n    }\n    \n    function resendCode() {\n        const btn = document.getElementById('resendBtn');\n        btn.disabled = true;\n        btn.textContent = 'Sending...';\n\n        const action = verificationMethod === 'email' ? 'limenco_send_email_otp' : 'limenco_send_sms_otp';\n        const data = new FormData();\n        data.append('action', action);\n        data.append('otp_nonce', otpNonce);\n        data.append(verificationMethod === 'email' ? 'email' : 'phone', sentTo);\n\n        fetch(ajaxurl, { method: 'POST', body: data })\n            .then(r => r.json())\n            .then(d => {\n                if (d.success) {\n                    if (verificationMethod === 'sms') {\n                        smsSessionSends++;\n                        if (smsSessionSends >= SMS_GREY_OUT_AFTER) {\n                            triggerSmsBurstThrottle(300);\n                            \/\/ throttle hides OTP panel and disables resend \u2014 don't re-enable btn\n                        } else {\n                            startResendCountdown(30);\n                        }\n                    } else {\n                        \/\/ Email: immediate re-enable, no countdown\n                        btn.disabled = false;\n                        btn.textContent = 'Resend';\n                    }\n                } else {\n                    const code = d.data && d.data.code ? d.data.code : 'error';\n                    const msg  = d.data && d.data.message ? d.data.message : 'Failed to resend. Please try again.';\n                    if (verificationMethod === 'sms' && code === 'burst_exhausted') {\n                        triggerSmsBurstThrottle(d.data.retry_after || 300);\n                    } else if (verificationMethod === 'sms' && code === 'daily_limit') {\n                        document.getElementById('smsDailyLimitNotice').style.display = 'block';\n                        document.getElementById('verifySmsBtn').disabled = true;\n                        btn.disabled = false;\n                        btn.textContent = 'Resend';\n                    } else if (verificationMethod === 'sms' && (code === 'rate_limited' || code === 'budget_exceeded')) {\n                        document.getElementById('verifySmsBtn').disabled = true;\n                        const status = document.getElementById('verifyStatus');\n                        status.className = 'verify-status error';\n                        status.textContent = msg;\n                        btn.disabled = false;\n                        btn.textContent = 'Resend';\n                    } else {\n                        const status = document.getElementById('verifyStatus');\n                        status.className = 'verify-status error';\n                        status.textContent = msg;\n                        btn.disabled = false;\n                        btn.textContent = 'Resend';\n                    }\n                }\n            })\n            .catch(() => {\n                btn.disabled = false;\n                btn.textContent = 'Resend';\n                const status = document.getElementById('verifyStatus');\n                status.className = 'verify-status error';\n                status.textContent = 'Network error. Please try again.';\n            });\n    }\n\n    function startResendCountdown(seconds) {\n        const btn = document.getElementById('resendBtn');\n        let remaining = seconds;\n        btn.disabled = true;\n\n        const tick = () => {\n            if (remaining > 0) {\n                btn.textContent = remaining + 's';\n                remaining--;\n                setTimeout(tick, 1000);\n            } else {\n                btn.disabled = false;\n                btn.textContent = 'Resend';\n            }\n        };\n        tick();\n    }\n\n    \/\/ \u2500\u2500 SMS burst throttle helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n    function triggerSmsBurstThrottle(retryAfterSeconds) {\n        const expiry = Date.now() + (retryAfterSeconds * 1000);\n        localStorage.setItem('sms_burst_expiry', expiry);\n        \/\/ Hide OTP panel \u2014 user must start fresh after the wait\n        document.getElementById('otpPanel').style.display = 'none';\n        showSmsBurstNotice(retryAfterSeconds);\n    }\n\n    function showSmsBurstNotice(remainingSeconds) {\n        document.getElementById('smsBurstNotice').style.display = 'block';\n        const smsBtn    = document.getElementById('verifySmsBtn');\n        const resendBtn = document.getElementById('resendBtn');\n        if (smsBtn)    smsBtn.disabled    = true;\n        if (resendBtn) resendBtn.disabled = true;\n        startSmsBurstCountdown(remainingSeconds);\n    }\n\n    function resetSmsBurstUI() {\n        document.getElementById('smsBurstNotice').style.display = 'none';\n        const smsBtn = document.getElementById('verifySmsBtn');\n        if (smsBtn) smsBtn.disabled = false;\n        if (smsBurstCountdownInterval) {\n            clearInterval(smsBurstCountdownInterval);\n            smsBurstCountdownInterval = null;\n        }\n    }\n\n    function startSmsBurstCountdown(totalSeconds) {\n        if (smsBurstCountdownInterval) {\n            clearInterval(smsBurstCountdownInterval);\n        }\n        let remaining = Math.max(0, Math.ceil(totalSeconds));\n        const el = document.getElementById('smsBurstCountdown');\n\n        const display = () => {\n            const m = Math.floor(remaining \/ 60);\n            const s = remaining % 60;\n            if (el) el.textContent = m + ':' + String(s).padStart(2, '0');\n        };\n        display();\n\n        smsBurstCountdownInterval = setInterval(() => {\n            remaining--;\n            if (remaining <= 0) {\n                clearInterval(smsBurstCountdownInterval);\n                smsBurstCountdownInterval = null;\n                localStorage.removeItem('sms_burst_expiry');\n                smsSessionSends = 0; \/\/ reset counter for the new burst\n                resetSmsBurstUI();\n            } else {\n                display();\n            }\n        }, 1000);\n    }\n    \n    function verifyCode() {\n        const otp = document.getElementById('otpCode').value;\n        \n        if (!otp || otp.length !== 6) {\n            alert('Please enter the 6-digit code');\n            return;\n        }\n        \n        const data = new FormData();\n        data.append('action', 'limenco_verify_otp');\n        data.append('otp_nonce', otpNonce);\n        data.append('identifier', sentTo);\n        data.append('otp', otp);\n        data.append('type', verificationMethod);\n\n        fetch(ajaxurl, { method: 'POST', body: data })\n            .then(r => r.json())\n            .then(d => {\n                const status = document.getElementById('verifyStatus');\n                if (d.success) {\n                    status.className = 'verify-status success';\n                    status.textContent = 'Verification successful!';\n                    isVerified = true;\n                    document.getElementById('continueBtn').disabled = false;\n                    document.getElementById(verificationMethod === 'email' ? 'email_verified' : 'cell_verified').value = '1';\n                    \n                    \/\/ Store verification expiry time (24 hours from now)\n                    const expiryTime = Date.now() + (24 * 60 * 60 * 1000); \/\/ 24 hours in milliseconds\n                    localStorage.setItem('verification_expiry', expiryTime);\n                    \n                    \/\/ Hide verification buttons and show verified message with timer\n                    document.getElementById('verificationNeeded').style.display = 'none';\n                    document.getElementById('alreadyVerified').style.display = 'block';\n                    \n                    \/\/ Start countdown timer\n                    startCountdownTimer();\n                } else {\n                    status.className = 'verify-status error';\n                    status.textContent = d.data.message;\n                }\n            });\n    }\n    \n        \n    function submitRequest() {\n        const total = parseInt(document.getElementById('total_learners').value) || 0;\n        if (total === 0) {\n            alert('Please enter learners for at least one grade');\n            return;\n        }\n        \n        const btn = document.getElementById('submitBtn');\n        btn.disabled = true;\n        btn.textContent = 'Submitting...';\n        \n        const data = new FormData();\n        data.append('action', 'submit_educator_request');\n        data.append('educator_name', document.getElementById('educator_name').value);\n        data.append('educator_last_name', document.getElementById('educator_last_name').value);\n        data.append('educator_position', document.getElementById('educator_position').value);\n        data.append('educator_email', document.getElementById('educator_email').value);\n        data.append('educator_cell', document.getElementById('educator_cell').value);\n        data.append('school_name', document.getElementById('school_name').value);\n        data.append('school_address', document.getElementById('school_address').value);\n        data.append('school_country', document.getElementById('school_country').value);\n        data.append('school_province', document.getElementById('school_province').value);\n        data.append('school_city', document.getElementById('school_city').value);\n        data.append('school_suburb', document.getElementById('school_suburb').value || '');\n        data.append('grade_12', document.getElementById('grade_12').value || 0);\n        data.append('grade_11', document.getElementById('grade_11').value || 0);\n        data.append('grade_10', document.getElementById('grade_10').value || 0);\n        data.append('grade_9', document.getElementById('grade_9').value || 0);\n        data.append('grade_8', document.getElementById('grade_8').value || 0);\n        data.append('grade_7', document.getElementById('grade_7').value || 0);\n        data.append('other_group', document.getElementById('other_group').value || 0);\n        data.append('other_group_description', document.getElementById('other_group_description').value);\n        data.append('total_learners', document.getElementById('total_learners').value);\n        data.append('motivation', document.getElementById('motivation').value);\n        data.append('email_verified', document.getElementById('email_verified').value);\n        data.append('cell_verified', document.getElementById('cell_verified').value);\n        data.append('nonce', document.getElementById('educator_form_nonce').value);\n\n        fetch(ajaxurl, { method: 'POST', body: data })\n            .then(r => r.json())\n            .then(d => {\n                if (d.success) {\n                    \/\/ Clear localStorage after successful submission\n                    clearFormData();\n                    \n                    document.getElementById('requestSummary').innerHTML = d.data.summary;\n                    goToStep(4);\n                } else {\n                    alert('Error: ' + d.data.message);\n                    btn.disabled = false;\n                    btn.textContent = 'Submit Request';\n                }\n            });\n    }\n    \n    \/\/ Initialize\n    document.addEventListener('DOMContentLoaded', function() {\n        \/\/ Load saved form data first\n        loadFormData();\n\n        \/\/ Check for an active SMS burst cooldown carried over from a previous session\n        const burstExpiry = parseInt(localStorage.getItem('sms_burst_expiry') || '0');\n        if (burstExpiry > Date.now()) {\n            showSmsBurstNotice(Math.ceil((burstExpiry - Date.now()) \/ 1000));\n        } else if (burstExpiry) {\n            localStorage.removeItem('sms_burst_expiry'); \/\/ expired \u2014 clean up\n        }\n        \n        \/\/ Set up auto-save on all inputs\n        const formInputs = document.querySelectorAll('input, select, textarea');\n        formInputs.forEach(input => {\n            input.addEventListener('change', saveFormData);\n            input.addEventListener('input', saveFormData);\n        });\n        \n        \/\/ Location dropdowns\n        const country = document.getElementById('school_country');\n        const province = document.getElementById('school_province');\n        const city = document.getElementById('school_city');\n        \n        country.addEventListener('change', function() {\n            province.innerHTML = '<option value=\"\">Select Province<\/option>';\n            city.innerHTML = '<option value=\"\">Select City<\/option>';\n            \n            const provinceField = province.closest('.form-group');\n            const cityField = city.closest('.form-group');\n            const suburbField = document.getElementById('suburb-field');\n            const suburbInput = document.getElementById('school_suburb');\n            \n            if (this.value === 'ZA') {\n                \/\/ South Africa - show all location fields\n                provinceField.style.display = 'block';\n                cityField.style.display = 'block';\n                suburbField.style.display = 'block';\n                province.required = true;\n                city.required = true;\n                suburbInput.required = true;\n                \n                \/\/ Populate provinces\n                Object.keys(locationData[this.value].provinces).forEach(p => {\n                    province.innerHTML += `<option value=\"${p}\">${p}<\/option>`;\n                });\n            } else {\n                \/\/ Other countries - hide all location fields\n                provinceField.style.display = 'none';\n                cityField.style.display = 'none';\n                suburbField.style.display = 'none';\n                province.required = false;\n                city.required = false;\n                suburbInput.required = false;\n                province.value = '';\n                city.value = '';\n                suburbInput.value = '';\n            }\n        });\n        \n        \/\/ Trigger change on page load to set initial state\n        country.dispatchEvent(new Event('change'));\n        \n        province.addEventListener('change', function() {\n            city.innerHTML = '<option value=\"\">Select City<\/option>';\n            const c = country.value;\n            if (c && this.value && locationData[c]) {\n                locationData[c].provinces[this.value].forEach(ct => {\n                    city.innerHTML += `<option value=\"${ct}\">${ct}<\/option>`;\n                });\n            }\n        });\n        \n        \/\/ N\/A checkboxes\n        document.querySelectorAll('.na-check').forEach(cb => {\n            cb.addEventListener('change', function() {\n                const target = document.getElementById(this.dataset.target);\n                target.disabled = this.checked;\n                if (this.checked) target.value = '';\n                calculateTotal();\n            });\n        });\n        \n        \/\/ Calculate total\n        document.querySelectorAll('.learner-input').forEach(input => {\n            input.addEventListener('input', calculateTotal);\n        });\n        \n        \/\/ Word count\n        document.getElementById('motivation').addEventListener('input', function() {\n            const words = this.value.trim().split(\/\\s+\/).filter(w => w.length > 0).length;\n            document.getElementById('wordCount').textContent = words;\n        });\n    });\n    \n    function calculateTotal() {\n        let total = 0;\n        document.querySelectorAll('.learner-input').forEach(input => {\n            if (!input.disabled) total += parseInt(input.value) || 0;\n        });\n        document.getElementById('total_learners').value = total;\n    }\n    \n    \/\/ Save form data to localStorage\n    function saveFormData() {\n        const formData = {\n            educator_name: document.getElementById('educator_name').value,\n            educator_last_name: document.getElementById('educator_last_name').value,\n            educator_position: document.getElementById('educator_position').value,\n            educator_email: document.getElementById('educator_email').value,\n            educator_cell: document.getElementById('educator_cell').value,\n            school_name: document.getElementById('school_name').value,\n            school_address: document.getElementById('school_address').value,\n            school_country: document.getElementById('school_country').value,\n            school_province: document.getElementById('school_province').value,\n            school_city: document.getElementById('school_city').value,\n            school_suburb: document.getElementById('school_suburb').value,\n            grade_12: document.getElementById('grade_12').value,\n            grade_11: document.getElementById('grade_11').value,\n            grade_10: document.getElementById('grade_10').value,\n            grade_9: document.getElementById('grade_9').value,\n            grade_8: document.getElementById('grade_8').value,\n            grade_7: document.getElementById('grade_7').value,\n            other_group: document.getElementById('other_group').value,\n            other_group_description: document.getElementById('other_group_description').value,\n            motivation: document.getElementById('motivation').value,\n            email_verified: document.getElementById('email_verified').value,\n            cell_verified: document.getElementById('cell_verified').value,\n            isVerified: isVerified\n        };\n        localStorage.setItem('educator_form_data', JSON.stringify(formData));\n    }\n    \n    \/\/ Countdown timer functionality\n    let countdownInterval = null;\n    \n    function startCountdownTimer() {\n        const expiryTime = localStorage.getItem('verification_expiry');\n        if (!expiryTime) return;\n        \n        \/\/ Clear any existing interval\n        if (countdownInterval) {\n            clearInterval(countdownInterval);\n        }\n        \n        \/\/ Update timer immediately\n        updateTimerDisplay(expiryTime);\n        \n        \/\/ Update every second\n        countdownInterval = setInterval(() => {\n            updateTimerDisplay(expiryTime);\n        }, 1000);\n    }\n    \n    function updateTimerDisplay(expiryTime) {\n        const now = Date.now();\n        const remaining = expiryTime - now;\n        \n        if (remaining <= 0) {\n            \/\/ Verification expired\n            document.getElementById('timerHours').textContent = '00';\n            document.getElementById('timerMinutes').textContent = '00';\n            document.getElementById('timerSeconds').textContent = '00';\n            \n            if (countdownInterval) {\n                clearInterval(countdownInterval);\n            }\n            \n            \/\/ Reset verification status (but keep form data)\n            isVerified = false;\n            document.getElementById('continueBtn').disabled = true;\n            document.getElementById('email_verified').value = '0';\n            document.getElementById('cell_verified').value = '0';\n            localStorage.removeItem('verification_expiry');\n            \n            \/\/ Update saved form data to reflect expired verification\n            saveFormData();\n            \n            \/\/ Show verification buttons again\n            document.getElementById('verificationNeeded').style.display = 'block';\n            document.getElementById('alreadyVerified').style.display = 'none';\n            \n            alert('Your verification has expired. Please verify again to continue.\\n\\nDon\\'t worry - your form data has been saved and will not be lost.');\n            return;\n        }\n        \n        \/\/ Calculate hours, minutes and seconds\n        const hours = Math.floor(remaining \/ 3600000);\n        const minutes = Math.floor((remaining % 3600000) \/ 60000);\n        const seconds = Math.floor((remaining % 60000) \/ 1000);\n        \n        \/\/ Update display with padding\n        document.getElementById('timerHours').textContent = String(hours).padStart(2, '0');\n        document.getElementById('timerMinutes').textContent = String(minutes).padStart(2, '0');\n        document.getElementById('timerSeconds').textContent = String(seconds).padStart(2, '0');\n    }\n    \n    \/\/ Load form data from localStorage\n    function loadFormData() {\n        const savedData = localStorage.getItem('educator_form_data');\n        if (savedData) {\n            const formData = JSON.parse(savedData);\n            \n            \/\/ Restore all form fields\n            document.getElementById('educator_name').value = formData.educator_name || '';\n            document.getElementById('educator_last_name').value = formData.educator_last_name || '';\n            document.getElementById('educator_position').value = formData.educator_position || '';\n            document.getElementById('educator_email').value = formData.educator_email || '';\n            document.getElementById('educator_cell').value = formData.educator_cell || '';\n            document.getElementById('school_name').value = formData.school_name || '';\n            document.getElementById('school_address').value = formData.school_address || '';\n            document.getElementById('school_country').value = formData.school_country || 'ZA';\n            \n            \/\/ Trigger country change to populate provinces\n            document.getElementById('school_country').dispatchEvent(new Event('change'));\n            \n            setTimeout(() => {\n                document.getElementById('school_province').value = formData.school_province || '';\n                document.getElementById('school_province').dispatchEvent(new Event('change'));\n                \n                setTimeout(() => {\n                    document.getElementById('school_city').value = formData.school_city || '';\n                    document.getElementById('school_suburb').value = formData.school_suburb || '';\n                }, 100);\n            }, 100);\n            \n            document.getElementById('grade_12').value = formData.grade_12 || '';\n            document.getElementById('grade_11').value = formData.grade_11 || '';\n            document.getElementById('grade_10').value = formData.grade_10 || '';\n            document.getElementById('grade_9').value = formData.grade_9 || '';\n            document.getElementById('grade_8').value = formData.grade_8 || '';\n            document.getElementById('grade_7').value = formData.grade_7 || '';\n            document.getElementById('other_group').value = formData.other_group || '';\n            document.getElementById('other_group_description').value = formData.other_group_description || '';\n            document.getElementById('motivation').value = formData.motivation || '';\n            \n            \/\/ Restore verification status\n            const expiryTime = localStorage.getItem('verification_expiry');\n            const now = Date.now();\n            \n            \/\/ Check if verification is still valid (within 24 hours)\n            if (expiryTime && parseInt(expiryTime) > now) {\n                isVerified = true;\n                document.getElementById('continueBtn').disabled = false;\n                document.getElementById('email_verified').value = formData.email_verified || '0';\n                document.getElementById('cell_verified').value = formData.cell_verified || '0';\n                \n                \/\/ Hide verification buttons and show \"Already Verified\" message\n                document.getElementById('verificationNeeded').style.display = 'none';\n                document.getElementById('alreadyVerified').style.display = 'block';\n                \n                \/\/ Start countdown timer\n                startCountdownTimer();\n            } else if (expiryTime) {\n                \/\/ Verification expired, reset everything\n                isVerified = false;\n                document.getElementById('continueBtn').disabled = true;\n                document.getElementById('email_verified').value = '0';\n                document.getElementById('cell_verified').value = '0';\n                localStorage.removeItem('verification_expiry');\n                \n                \/\/ Update saved form data\n                saveFormData();\n            }\n            \n            calculateTotal();\n            \n            \/\/ Update word count\n            const words = document.getElementById('motivation').value.trim().split(\/\\s+\/).filter(w => w.length > 0).length;\n            document.getElementById('wordCount').textContent = words;\n        }\n    }\n    \n    \/\/ Clear form data from localStorage (only called after successful submission)\n    function clearFormData() {\n        localStorage.removeItem('educator_form_data');\n        localStorage.removeItem('verification_expiry');\n        localStorage.removeItem('sms_burst_expiry');\n        if (countdownInterval) {\n            clearInterval(countdownInterval);\n        }\n        if (smsBurstCountdownInterval) {\n            clearInterval(smsBurstCountdownInterval);\n        }\n    }\n    \n    \/\/ Reset only verification (keep form data intact)\n    function resetVerificationOnly() {\n        isVerified = false;\n        document.getElementById('continueBtn').disabled = true;\n        document.getElementById('email_verified').value = '0';\n        document.getElementById('cell_verified').value = '0';\n        localStorage.removeItem('verification_expiry');\n\n        \/\/ Update saved form data to reflect expired verification\n        saveFormData();\n\n        \/\/ Show verification buttons again\n        document.getElementById('verificationNeeded').style.display = 'block';\n        document.getElementById('alreadyVerified').style.display = 'none';\n    }\n\n        <\/script>\n    \n    \n<\/div>\n<\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Welcome Verify Contact Request Details Complete Dear Educators, I want to begin with one word: Thank you. Because of you, learners who have used my book, and many who have participated in the Future Global Leaders Club, are discovering courage they didn&#8217;t know they had. Confidence has been reclaimed. Brilliance has shone through. Dreams have [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-3618","page","type-page","status-publish","hentry","post"],"_links":{"self":[{"href":"https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/wp-json\/wp\/v2\/pages\/3618","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/wp-json\/wp\/v2\/comments?post=3618"}],"version-history":[{"count":1,"href":"https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/wp-json\/wp\/v2\/pages\/3618\/revisions"}],"predecessor-version":[{"id":3619,"href":"https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/wp-json\/wp\/v2\/pages\/3618\/revisions\/3619"}],"wp:attachment":[{"href":"https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/wp-json\/wp\/v2\/media?parent=3618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/wp-json\/wp\/v2\/categories?post=3618"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bhaswelihlezilwa.co.za\/lihles-100k-challenge\/wp-json\/wp\/v2\/tags?post=3618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}