{"id":17,"date":"2025-07-06T17:51:57","date_gmt":"2025-07-06T17:51:57","guid":{"rendered":"https:\/\/www.thinkupacademy.com\/mw\/?page_id=17"},"modified":"2026-08-04T04:15:43","modified_gmt":"2026-08-04T04:15:43","slug":"apply","status":"publish","type":"page","link":"https:\/\/www.thinkupacademy.com\/mw\/apply\/","title":{"rendered":"Apply"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"17\" class=\"elementor elementor-17\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c14ac43 e-con-full e-flex e-con e-parent\" data-id=\"c14ac43\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2bd44a5 elementor-widget elementor-widget-html\" data-id=\"2bd44a5\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- Apply Hero Section -->\n<section class=\"apply-hero\">\n  <div class=\"apply-hero-overlay\">\n    <div class=\"apply-hero-content\">\n      <h1>Start Your Learning Journey Today<\/h1>\n      <div class=\"hero-divider\"><\/div>\n      <p>\n        ThinkUp Academy empowers you with practical, in-demand skills designed to help you grow, thrive, and lead. Whether you're launching your career or leveling up, this is your first step.\n      <\/p>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- Styles -->\n<style>\n:root {\n  --thinkup-blue-light: #00a9f4;\n  --thinkup-blue-dark: #004aaf;\n  --accent-black: #1a1a1a;\n  --text-light: #f5f7fa;\n}\n\n.apply-hero {\n  background: linear-gradient(135deg, var(--thinkup-blue-light), var(--thinkup-blue-dark));\n  padding: 6rem 2rem;\n  text-align: center;\n  color: var(--text-light);\n  font-family: 'Inter', sans-serif;\n  position: relative;\n  overflow: hidden;\n}\n\n.apply-hero-overlay {\n  max-width: 1000px;\n  margin: 0 auto;\n  padding: 0 1rem;\n}\n\n.apply-hero-content h1 {\n  font-size: 3rem;\n  font-weight: 800;\n  color: var(--text-light);\n  margin-bottom: 0.8rem;\n  text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.25);\n  letter-spacing: 0.5px;\n}\n\n.hero-divider {\n  width: 80px;\n  height: 4px;\n  margin: 1rem auto;\n  background: linear-gradient(to right, var(--thinkup-blue-light), var(--thinkup-blue-dark));\n  border-radius: 4px;\n}\n\n.apply-hero-content p {\n  font-size: 1.2rem;\n  max-width: 750px;\n  margin: 0 auto;\n  color: #ecf3fc;\n  line-height: 1.8;\n}\n\n@media (max-width: 768px) {\n  .apply-hero-content h1 {\n    font-size: 2.2rem;\n  }\n\n  .apply-hero-content p {\n    font-size: 1rem;\n  }\n}\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7f70d77 e-flex e-con-boxed e-con e-parent\" data-id=\"7f70d77\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-996ab18 elementor-widget elementor-widget-html\" data-id=\"996ab18\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- Multi-Course Application Form -->\r\n<style>\r\n\/* ===== RESET & BASE ===== *\/\r\n.gbc-app-wrap {\r\n  max-width: 1100px;\r\n  margin: 0 auto;\r\n  font-family: 'Poppins', Arial, sans-serif;\r\n}\r\n.gbc-app-card {\r\n  background: #fff;\r\n  border: 1px solid #e8edf5;\r\n  border-radius: 22px;\r\n  padding: 32px;\r\n  box-shadow: 0 20px 60px rgba(17,24,39,.08);\r\n}\r\n.gbc-app-header {\r\n  text-align: center;\r\n  margin-bottom: 28px;\r\n}\r\n.gbc-app-badge {\r\n  display: inline-block;\r\n  background: rgba(0,74,174,.08);\r\n  color: #004AAE;\r\n  font-weight: 600;\r\n  font-size: 12px;\r\n  padding: 8px 14px;\r\n  border-radius: 999px;\r\n  margin-bottom: 14px;\r\n}\r\n.gbc-app-header h2 {\r\n  margin: 0 0 8px;\r\n  font-size: 32px;\r\n  line-height: 1.2;\r\n  color: #0f172a;\r\n}\r\n.gbc-app-header p {\r\n  margin: 0;\r\n  color: #64748b;\r\n  font-size: 15px;\r\n}\r\n.gbc-progress-wrap {\r\n  margin-bottom: 28px;\r\n}\r\n.gbc-progress-top {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  gap: 10px;\r\n  font-size: 13px;\r\n  color: #475569;\r\n  margin-bottom: 10px;\r\n  flex-wrap: wrap;\r\n}\r\n.gbc-progress-top span:first-child {\r\n  font-weight: 700;\r\n  color: #004AAE;\r\n}\r\n.gbc-progress-bar {\r\n  width: 100%;\r\n  height: 10px;\r\n  background: #e2e8f0;\r\n  border-radius: 999px;\r\n  overflow: hidden;\r\n}\r\n.gbc-progress-fill {\r\n  height: 100%;\r\n  width: 20%;\r\n  background: linear-gradient(90deg,#004AAE,#0078FF);\r\n  border-radius: 999px;\r\n  transition: width .3s ease;\r\n}\r\n.gbc-step {\r\n  display: none;\r\n}\r\n.gbc-step.active {\r\n  display: block;\r\n}\r\n.gbc-section-heading {\r\n  margin-bottom: 22px;\r\n  padding-bottom: 16px;\r\n  border-bottom: 1px solid #e8edf5;\r\n}\r\n.gbc-section-heading h3 {\r\n  margin: 0 0 5px;\r\n  color: #0f172a;\r\n  font-size: 20px;\r\n}\r\n.gbc-section-heading p {\r\n  margin: 0;\r\n  color: #64748b;\r\n  font-size: 13px;\r\n}\r\n.gbc-grid {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 18px;\r\n}\r\n.gbc-full {\r\n  grid-column: 1 \/ -1;\r\n}\r\n.gbc-field label {\r\n  display: block;\r\n  margin-bottom: 8px;\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: #334155;\r\n  position: relative;\r\n  overflow: visible;\r\n}\r\n.gbc-field input,\r\n.gbc-field select,\r\n.gbc-field textarea {\r\n  width: 100%;\r\n  padding: 14px;\r\n  border: 1px solid #dbe3ee;\r\n  border-radius: 12px;\r\n  font-size: 14px;\r\n  font-family: inherit;\r\n  background: #fff;\r\n  color: #0f172a;\r\n  transition: .2s ease;\r\n  box-sizing: border-box;\r\n}\r\n.gbc-field textarea {\r\n  resize: vertical;\r\n  min-height: 95px;\r\n  line-height: 1.55;\r\n}\r\n.gbc-field input[type=\"file\"] {\r\n  padding: 11px;\r\n  background: #f8fafc;\r\n}\r\n.gbc-field input:focus,\r\n.gbc-field select:focus,\r\n.gbc-field textarea:focus {\r\n  outline: none;\r\n  border-color: #004AAE;\r\n  box-shadow: 0 0 0 4px rgba(0,74,174,.08);\r\n}\r\n.gbc-field input.error,\r\n.gbc-field select.error,\r\n.gbc-field textarea.error,\r\n.gbc-consent-card.error {\r\n  border-color: #dc2626;\r\n  background-color: #fef2f2;\r\n}\r\n.gbc-hint {\r\n  display: block;\r\n  margin-top: 6px;\r\n  color: #64748b;\r\n  font-size: 11px;\r\n  line-height: 1.45;\r\n}\r\n.gbc-review-box {\r\n  background: #f8fafc;\r\n  border: 1px solid #e2e8f0;\r\n  border-radius: 16px;\r\n  padding: 22px;\r\n}\r\n.gbc-review-box h3 {\r\n  margin: 0 0 12px;\r\n  color: #0f172a;\r\n  font-size: 20px;\r\n}\r\n.gbc-review-box p {\r\n  margin: 0 0 12px;\r\n  color: #475569;\r\n  line-height: 1.65;\r\n  font-size: 14px;\r\n}\r\n.gbc-links {\r\n  display: flex;\r\n  gap: 14px;\r\n  flex-wrap: wrap;\r\n}\r\n.gbc-links a {\r\n  color: #004AAE;\r\n  font-weight: 600;\r\n  text-decoration: none;\r\n}\r\n.gbc-links a:hover {\r\n  text-decoration: underline;\r\n}\r\n.gbc-consent-list {\r\n  display: grid;\r\n  gap: 14px;\r\n  margin-top: 20px;\r\n}\r\n.gbc-consent-card {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 12px;\r\n  padding: 16px;\r\n  border: 1px solid #dbe3ee;\r\n  border-radius: 14px;\r\n  background: #fff;\r\n  color: #334155;\r\n  font-size: 13px;\r\n  line-height: 1.55;\r\n  cursor: pointer;\r\n  transition: .2s ease;\r\n}\r\n.gbc-consent-card:hover {\r\n  border-color: #004AAE;\r\n  background: #f8fbff;\r\n}\r\n.gbc-consent-card input {\r\n  margin-top: 4px;\r\n  width: 18px;\r\n  height: 18px;\r\n  accent-color: #004AAE;\r\n  flex: 0 0 auto;\r\n}\r\n.gbc-consent-card strong {\r\n  display: block;\r\n  color: #0f172a;\r\n  margin-bottom: 3px;\r\n}\r\n.gbc-signature-box {\r\n  margin-top: 22px;\r\n  padding: 22px;\r\n  background: #f8fafc;\r\n  border: 1px solid #dbe3ee;\r\n  border-radius: 16px;\r\n}\r\n.gbc-signature-heading {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 14px;\r\n  margin-bottom: 20px;\r\n  padding-bottom: 16px;\r\n  border-bottom: 1px solid #e2e8f0;\r\n}\r\n.gbc-signature-icon {\r\n  width: 44px;\r\n  height: 44px;\r\n  flex: 0 0 44px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  border-radius: 12px;\r\n  background: rgba(0,74,174,.10);\r\n  color: #004AAE;\r\n  font-size: 21px;\r\n}\r\n.gbc-signature-heading h3 {\r\n  margin: 0 0 5px;\r\n  color: #0f172a;\r\n  font-size: 18px;\r\n}\r\n.gbc-signature-heading p {\r\n  margin: 0;\r\n  color: #64748b;\r\n  font-size: 13px;\r\n  line-height: 1.5;\r\n}\r\n.gbc-electronic-declaration {\r\n  margin-top: 16px;\r\n  padding: 15px;\r\n  background: #eff6ff;\r\n  border-left: 4px solid #004AAE;\r\n  border-radius: 10px;\r\n  color: #334155;\r\n}\r\n.gbc-electronic-declaration strong {\r\n  display: block;\r\n  margin-bottom: 6px;\r\n  color: #004AAE;\r\n  font-size: 13px;\r\n}\r\n.gbc-electronic-declaration p {\r\n  margin: 0;\r\n  font-size: 12px;\r\n  line-height: 1.6;\r\n}\r\n.gbc-actions {\r\n  display: flex;\r\n  gap: 12px;\r\n  margin-top: 28px;\r\n  flex-wrap: wrap;\r\n}\r\n.gbc-btn {\r\n  border: none;\r\n  border-radius: 12px;\r\n  padding: 14px 22px;\r\n  font-weight: 700;\r\n  font-size: 14px;\r\n  cursor: pointer;\r\n  transition: .2s ease;\r\n}\r\n.gbc-btn-primary {\r\n  background: linear-gradient(135deg,#004AAE,#0078FF);\r\n  color: #fff;\r\n}\r\n.gbc-btn-primary:hover {\r\n  transform: translateY(-1px);\r\n  box-shadow: 0 12px 24px rgba(0,74,174,.18);\r\n}\r\n.gbc-btn-secondary {\r\n  background: #eef2f7;\r\n  color: #0f172a;\r\n}\r\n.gbc-btn-secondary:hover {\r\n  background: #e2e8f0;\r\n}\r\n.gbc-btn:disabled {\r\n  opacity: .65;\r\n  cursor: not-allowed;\r\n  transform: none;\r\n  box-shadow: none;\r\n}\r\n.gbc-msg {\r\n  display: none;\r\n  margin-top: 18px;\r\n  padding: 14px 16px;\r\n  border-radius: 14px;\r\n  font-size: 14px;\r\n  font-weight: 500;\r\n}\r\n.gbc-success {\r\n  background: #ecfdf5;\r\n  color: #166534;\r\n  border: 1px solid #bbf7d0;\r\n}\r\n.gbc-error {\r\n  background: #fef2f2;\r\n  color: #991b1b;\r\n  border: 1px solid #fecaca;\r\n}\r\n.gbc-success-screen {\r\n  text-align: center;\r\n  padding: 45px 20px;\r\n}\r\n.gbc-success-screen .gbc-success-icon {\r\n  width: 70px;\r\n  height: 70px;\r\n  border-radius: 50%;\r\n  margin: 0 auto 18px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  background: #dcfce7;\r\n  color: #16a34a;\r\n  font-size: 34px;\r\n  font-weight: 800;\r\n}\r\n.gbc-success-screen h2 {\r\n  color: #16a34a;\r\n  margin: 0 0 12px;\r\n}\r\n.gbc-success-screen .gbc-reference {\r\n  display: inline-block;\r\n  margin: 10px 0 15px;\r\n  padding: 12px 20px;\r\n  border-radius: 12px;\r\n  background: #eff6ff;\r\n  color: #004AAE;\r\n  font-size: 26px;\r\n  font-weight: 800;\r\n  letter-spacing: 1px;\r\n}\r\n.gbc-audit-summary {\r\n  max-width: 680px;\r\n  margin: 18px auto;\r\n  padding: 16px 18px;\r\n  text-align: left;\r\n  background: #f8fafc;\r\n  border: 1px solid #dbe3ee;\r\n  border-radius: 14px;\r\n  color: #334155;\r\n}\r\n.gbc-audit-summary > strong {\r\n  display: block;\r\n  margin-bottom: 9px;\r\n  color: #004AAE;\r\n}\r\n.gbc-audit-summary p {\r\n  margin: 5px 0;\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n}\r\n.gbc-audit-summary span {\r\n  font-weight: 700;\r\n}\r\n.gbc-audit-summary .gbc-hash {\r\n  overflow-wrap: anywhere;\r\n  word-break: break-word;\r\n}\r\n@media (max-width:768px) {\r\n  .gbc-app-card {\r\n    padding: 22px;\r\n    border-radius: 18px;\r\n  }\r\n  .gbc-app-header h2 {\r\n    font-size: 25px;\r\n  }\r\n  .gbc-grid {\r\n    grid-template-columns: 1fr;\r\n  }\r\n  .gbc-full {\r\n    grid-column: auto;\r\n  }\r\n  .gbc-actions {\r\n    flex-direction: column;\r\n  }\r\n  .gbc-btn {\r\n    width: 100%;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<div class=\"gbc-app-wrap\">\r\n  <div class=\"gbc-app-card\">\r\n    <div class=\"gbc-app-header\">\r\n      <div class=\"gbc-app-badge\">ThinkUp Academy<\/div>\r\n      <h2>Apply for your programme at ThinkUp Academy<\/h2>\r\n      <p>Complete all required sections, upload documents and sign electronically.<\/p>\r\n    <\/div>\r\n\r\n    <div class=\"gbc-progress-wrap\">\r\n      <div class=\"gbc-progress-top\">\r\n        <span id=\"gbcStepLabel\">Step 1 of 5<\/span>\r\n        <span id=\"gbcStepTitle\">Personal Information<\/span>\r\n      <\/div>\r\n      <div class=\"gbc-progress-bar\">\r\n        <div class=\"gbc-progress-fill\" id=\"gbcProgressFill\"><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <form id=\"gbcForm\" enctype=\"multipart\/form-data\" novalidate>\r\n\r\n      <!-- STEP 1: Personal Information -->\r\n      <div class=\"gbc-step active\" data-step=\"1\" data-title=\"Personal Information\">\r\n        <div class=\"gbc-section-heading\">\r\n          <h3>Personal Information<\/h3>\r\n          <p>Legal names, ID, and contact details.<\/p>\r\n        <\/div>\r\n        <div class=\"gbc-grid\">\r\n          <div class=\"gbc-field\">\r\n            <label for=\"last_name\">Last Name *<\/label>\r\n            <input type=\"text\" id=\"last_name\" name=\"last_name\" maxlength=\"100\" required placeholder=\"Surname\">\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"first_name\">First Name *<\/label>\r\n            <input type=\"text\" id=\"first_name\" name=\"first_name\" maxlength=\"100\" required placeholder=\"Given name\">\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"middle_name\">Middle Name<\/label>\r\n            <input type=\"text\" id=\"middle_name\" name=\"middle_name\" maxlength=\"100\" placeholder=\"Optional\">\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"dob\">Date of Birth *<\/label>\r\n            <input type=\"date\" id=\"dob\" name=\"dob\" required>\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"gender\">Gender *<\/label>\r\n            <select id=\"gender\" name=\"gender\" required>\r\n\t\t\t<option value=\"\" disabled selected hidden>Select<\/option>\r\n\t\t\t<option value=\"Male\">Male<\/option>\r\n\t\t\t<option value=\"Female\">Female<\/option>\r\n\t\t  <\/select>\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"id_type\">ID Type *<\/label>\r\n            <select id=\"id_type\" name=\"id_type\" required>\r\n              <option value=\"ID\">National ID<\/option>\r\n              <option value=\"Passport\">Passport<\/option>\r\n            <\/select>\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"id_number\">ID \/ Passport *<\/label>\r\n            <input type=\"text\" id=\"id_number\" name=\"id_number\" maxlength=\"50\" required placeholder=\"Enter number\">\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"phone\">Phone *<\/label>\r\n            <input type=\"tel\" id=\"phone\" name=\"phone\" required placeholder=\"+265881 234 567\">\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"district_city_residence\">City \/ District of Residence *<\/label>\r\n            <input type=\"text\" id=\"district_city_residence\" name=\"district_city_residence\" required placeholder=\"e.g. Mzuzu\">\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"district_origin\">District of Origin *<\/label>\r\n            <input type=\"text\" id=\"district_origin\" name=\"district_origin\" required placeholder=\"e.g. Mangochi\">\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"traditional_authority\">Traditional Authority<\/label>\r\n            <input type=\"text\" id=\"traditional_authority\" name=\"traditional_authority\" placeholder=\"Optional\">\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"village\">Village \/ Suburb<\/label>\r\n            <input type=\"text\" id=\"village\" name=\"village\" placeholder=\"Optional\">\r\n          <\/div>\r\n          <!--\r\n\t\t  <div class=\"gbc-field gbc-full\">\r\n            <label for=\"address\">Street Address<\/label>\r\n            <input type=\"text\" id=\"address\" name=\"address\" placeholder=\"Optional\">\r\n          <\/div>\r\n\t\t  -->\r\n\t\t<div class=\"gbc-field\">\r\n\t\t  <label for=\"training_method\">Training Method *<\/label>\r\n\t\t  <select id=\"training_method\" name=\"training_method\" required>\r\n\t\t\t<option value=\"\" disabled selected hidden>Select training method<\/option>\r\n\t\t\t<option value=\"Face-to-Face\">Face-to-Face<\/option>\r\n\t\t\t<option value=\"Online\">Online<\/option>\r\n\t\t  <\/select>\r\n\t\t<\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"guardian_name\">Guardian Name<\/label>\r\n            <input type=\"text\" id=\"guardian_name\" name=\"guardian_name\" placeholder=\"Optional\">\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"guardian_phone\">Guardian Phone *<\/label>\r\n            <input type=\"tel\" id=\"guardian_phone\" name=\"guardian_phone\" required placeholder=\"+265881 234 567\">\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"disability_type\">Disability Type<\/label>\r\n            <input type=\"text\" id=\"disability_type\" name=\"disability_type\" placeholder=\"If any, specify\">\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- STEP 2: Course Selection -->\r\n      <div class=\"gbc-step\" data-step=\"2\" data-title=\"Course Selection\">\r\n        <div class=\"gbc-section-heading\">\r\n          <h3>Select your courses<\/h3>\r\n          <p>Choose one or more active programmes.<\/p>\r\n        <\/div>\r\n        <div class=\"gbc-grid\">\r\n          <div class=\"gbc-field gbc-full\">\r\n            <label for=\"program_ids\">Courses (select multiple) *<\/label>\r\n            <select id=\"program_ids\" name=\"program_ids[]\" multiple size=\"5\" required style=\"height:auto; min-height:120px;\">\r\n              <option value=\"\">Loading courses\u2026<\/option>\r\n            <\/select>\r\n            <small class=\"gbc-hint\">Hold Ctrl (Windows) \/ Cmd (Mac) to select multiple courses.<\/small>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- STEP 3: Uploads -->\r\n      <div class=\"gbc-step\" data-step=\"3\" data-title=\"Supporting Documents\">\r\n        <div class=\"gbc-section-heading\">\r\n          <h3>Upload required documents<\/h3>\r\n          <p>Certified ID\/Passport and qualification document (PDF, JPG, PNG, max 5MB each).<\/p>\r\n        <\/div>\r\n        <div class=\"gbc-grid\">\r\n          <div class=\"gbc-field\">\r\n            <label for=\"id_document\">ID \/ Passport Copy *<\/label>\r\n            <input type=\"file\" id=\"id_document\" name=\"id_document\" accept=\".pdf,.jpg,.jpeg,.png\" required>\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"qualification_document\">Qualification Document *<\/label>\r\n            <input type=\"file\" id=\"qualification_document\" name=\"qualification_document\" accept=\".pdf,.jpg,.jpeg,.png\" required>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- STEP 4: Terms & Signature -->\r\n      <div class=\"gbc-step\" data-step=\"4\" data-title=\"Terms & Signature\">\r\n        <div class=\"gbc-section-heading\">\r\n          <h3>Declarations and Electronic Signature<\/h3>\r\n          <p>Review and sign.<\/p>\r\n        <\/div>\r\n        <div class=\"gbc-review-box\">\r\n          <h3>Applicant Declaration<\/h3>\r\n          <p>I confirm that all information and documents provided are true, complete and accurate. I understand that false or misleading information may result in rejection or withdrawal.<\/p>\r\n          <p>I confirm that I am the person identified in this form.<\/p>\r\n          <div class=\"gbc-links\">\r\n            <a href=\"#\" target=\"_blank\">Terms &amp; Conditions<\/a>\r\n            <a href=\"#\" target=\"_blank\">Refund Policy<\/a>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"gbc-consent-list\">\r\n          <label class=\"gbc-consent-card\">\r\n            <input type=\"checkbox\" name=\"terms_accepted\" value=\"1\" required>\r\n            <span><strong>Applicant Declaration &amp; Refund Policy *<\/strong> I accept the declaration and refund policy.<\/span>\r\n          <\/label>\r\n        <\/div>\r\n\r\n        <div class=\"gbc-signature-box\">\r\n          <div class=\"gbc-signature-heading\">\r\n            <div class=\"gbc-signature-icon\" aria-hidden=\"true\">\u270d<\/div>\r\n            <div>\r\n              <h3>Electronic Signature<\/h3>\r\n              <p>Type your full legal name exactly as in Step 1.<\/p>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"gbc-field\">\r\n            <label for=\"electronic_signature\">Full Legal Name as Signature *<\/label>\r\n            <input type=\"text\" id=\"electronic_signature\" name=\"electronic_signature\" maxlength=\"255\" required placeholder=\"e.g. Luthando Kanjaye\">\r\n          <\/div>\r\n          <div class=\"gbc-electronic-declaration\">\r\n            <strong>Electronic Signature Declaration<\/strong>\r\n            <p>By typing my full legal name above and submitting, I confirm this represents my electronic signature. Submission date, IP, browser and document hash will be recorded.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"gbc-actions\">\r\n        <button type=\"button\" class=\"gbc-btn gbc-btn-secondary\" id=\"prevBtn\" style=\"display:none;\">Back<\/button>\r\n        <button type=\"button\" class=\"gbc-btn gbc-btn-primary\" id=\"nextBtn\">Next Step<\/button>\r\n        <button type=\"submit\" class=\"gbc-btn gbc-btn-primary\" id=\"submitBtn\" style=\"display:none;\">Submit Application<\/button>\r\n      <\/div>\r\n      <div id=\"msg\" class=\"gbc-msg\" role=\"alert\" aria-live=\"polite\"><\/div>\r\n    <\/form>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function() {\r\n  'use strict';\r\n\r\n  \/\/ ===== CONFIGURATION =====\r\n  \/\/ Update these endpoints to match your server\r\n  const PROGRAMS_ENDPOINT = 'https:\/\/thinkupspace.thinkupacademy.com\/api\/programs.php';\r\n  const APPLY_ENDPOINT = 'https:\/\/thinkupspace.thinkupacademy.com\/api\/apply.php';\r\n  const API_KEY = '322e07f0390c986c84e82fbe220472c0';\r\n  \r\n  const MAX_FILE_BYTES = 5 * 1024 * 1024;\r\n  const ALLOWED_EXT = ['pdf', 'jpg', 'jpeg', 'png'];\r\n\r\n  \/\/ ===== DOM REFERENCES =====\r\n  const form = document.getElementById('gbcForm');\r\n  const card = document.querySelector('.gbc-app-card');\r\n  const steps = Array.from(document.querySelectorAll('.gbc-step'));\r\n  const msg = document.getElementById('msg');\r\n  const nextBtn = document.getElementById('nextBtn');\r\n  const prevBtn = document.getElementById('prevBtn');\r\n  const submitBtn = document.getElementById('submitBtn');\r\n  const progressFill = document.getElementById('gbcProgressFill');\r\n  const stepLabel = document.getElementById('gbcStepLabel');\r\n  const stepTitle = document.getElementById('gbcStepTitle');\r\n  const programSelect = document.getElementById('program_ids');\r\n\r\n  const firstName = document.getElementById('first_name');\r\n  const middleName = document.getElementById('middle_name');\r\n  const lastName = document.getElementById('last_name');\r\n  const electronicSignature = document.getElementById('electronic_signature');\r\n\r\n  let currentStep = 0;\r\n  let submitted = false;\r\n\r\n  \/\/ ===== HELPER FUNCTIONS =====\r\n  function escapeHtml(v) {\r\n    return String(v == null ? '' : v)\r\n      .replace(\/&\/g, '&amp;')\r\n      .replace(\/<\/g, '&lt;')\r\n      .replace(\/>\/g, '&gt;')\r\n      .replace(\/\"\/g, '&quot;')\r\n      .replace(\/'\/g, '&#039;');\r\n  }\r\n\r\n  function normalize(s) {\r\n    return String(s || '').trim().replace(\/\\s+\/g, ' ').toLowerCase();\r\n  }\r\n\r\n  function expectedSignatures() {\r\n    const first = firstName.value.trim();\r\n    const middle = middleName.value.trim();\r\n    const last = lastName.value.trim();\r\n    const arr = [\r\n      normalize(first + ' ' + last),\r\n      normalize(first + ' ' + middle + ' ' + last)\r\n    ].filter(Boolean);\r\n    return [...new Set(arr)];\r\n  }\r\n\r\n  function signatureMatches() {\r\n    return expectedSignatures().includes(normalize(electronicSignature.value));\r\n  }\r\n\r\n  function getField(name) {\r\n    return form.elements[name] || null;\r\n  }\r\n\r\n  function showMsg(type, text) {\r\n    msg.className = 'gbc-msg ' + type;\r\n    msg.textContent = text;\r\n    msg.style.display = 'block';\r\n  }\r\n\r\n  function hideMsg() {\r\n    msg.style.display = 'none';\r\n    msg.textContent = '';\r\n  }\r\n\r\n  function clearErrors() {\r\n    form.querySelectorAll('.error').forEach(el => el.classList.remove('error'));\r\n  }\r\n\r\n  function isVisible(el) {\r\n    if (!el) return false;\r\n    const f = el.closest('.gbc-field');\r\n    if (f && getComputedStyle(f).display === 'none') return false;\r\n    return getComputedStyle(el).display !== 'none';\r\n  }\r\n\r\n  function markError(el) {\r\n    if (el) el.classList.add('error');\r\n    const card = el?.closest('.gbc-consent-card');\r\n    if (card) card.classList.add('error');\r\n  }\r\n\r\n  function validateFile(input) {\r\n    if (!input || !input.files || input.files.length === 0) return true;\r\n    const file = input.files[0];\r\n    const ext = (file.name.split('.').pop() || '').toLowerCase();\r\n    if (!ALLOWED_EXT.includes(ext)) {\r\n      markError(input);\r\n      showMsg('gbc-error', 'Only PDF, JPG, JPEG, PNG allowed.');\r\n      return false;\r\n    }\r\n    if (file.size > MAX_FILE_BYTES) {\r\n      markError(input);\r\n      showMsg('gbc-error', 'File must be \u2264 5 MB.');\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  \/\/ ===== VALIDATION =====\r\n  function validateStep(idx) {\r\n    hideMsg();\r\n    clearErrors();\r\n    const step = steps[idx];\r\n    const required = Array.from(step.querySelectorAll('[required]'));\r\n    let firstInvalid = null;\r\n    let customMsg = '';\r\n\r\n    for (const field of required) {\r\n      if (!isVisible(field)) continue;\r\n      let valid = true;\r\n      if (field.type === 'checkbox' || field.type === 'radio') {\r\n        valid = field.checked;\r\n      } else {\r\n        valid = String(field.value || '').trim() !== '';\r\n      }\r\n\r\n      if (valid && field.type === 'email') {\r\n        valid = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(field.value.trim());\r\n      }\r\n      if (valid && field.name === 'phone') {\r\n        valid = \/^[0-9+\\-\\s()]{7,20}$\/.test(field.value.trim());\r\n      }\r\n      if (valid && field.name === 'id_number' && document.getElementById('id_type').value === 'ID') {\r\n        valid = \/^\\d{13}$\/.test(field.value.trim());\r\n      }\r\n      if (valid && field.name === 'id_number' && document.getElementById('id_type').value === 'Passport') {\r\n        valid = \/^[A-Za-z0-9][A-Za-z0-9\\-\/ ]{4,49}$\/.test(field.value.trim());\r\n      }\r\n      if (valid && field.name === 'electronic_signature' && !signatureMatches()) {\r\n        valid = false;\r\n        customMsg = 'Signature must match full legal name from Step 1.';\r\n      }\r\n\r\n      if (!valid) {\r\n        markError(field);\r\n        if (!firstInvalid) firstInvalid = field;\r\n      }\r\n    }\r\n\r\n    \/\/ File validations\r\n    const fileInputs = Array.from(step.querySelectorAll('input[type=\"file\"]'));\r\n    for (const fi of fileInputs) {\r\n      if (!validateFile(fi) && !firstInvalid) firstInvalid = fi;\r\n    }\r\n\r\n    \/\/ Special: multi-select must have at least one selected\r\n    if (idx === 1) {\r\n      const sel = document.getElementById('program_ids');\r\n      if (sel && sel.selectedOptions.length === 0) {\r\n        markError(sel);\r\n        if (!firstInvalid) firstInvalid = sel;\r\n        customMsg = customMsg || 'Please select at least one course.';\r\n      }\r\n    }\r\n\r\n    if (firstInvalid) {\r\n      showMsg('gbc-error', customMsg || 'Please complete all required fields correctly.');\r\n      firstInvalid.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n      setTimeout(() => firstInvalid.focus(), 250);\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  \/\/ ===== UI UPDATE =====\r\n  function updateStepUI() {\r\n    if (submitted) return;\r\n    steps.forEach((s, i) => s.classList.toggle('active', i === currentStep));\r\n    const human = currentStep + 1;\r\n    const total = steps.length;\r\n    stepLabel.textContent = 'Step ' + human + ' of ' + total;\r\n    stepTitle.textContent = steps[currentStep].dataset.title || '';\r\n    progressFill.style.width = ((human \/ total) * 100) + '%';\r\n    prevBtn.style.display = currentStep === 0 ? 'none' : 'inline-block';\r\n    nextBtn.style.display = currentStep === total - 1 ? 'none' : 'inline-block';\r\n    submitBtn.style.display = currentStep === total - 1 ? 'inline-block' : 'none';\r\n    hideMsg();\r\n    clearErrors();\r\n    card.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n  }\r\n\r\n  \/\/ ===== EVENT LISTENERS =====\r\n  nextBtn.addEventListener('click', function() {\r\n    if (!validateStep(currentStep)) return;\r\n    if (currentStep < steps.length - 1) {\r\n      currentStep++;\r\n      updateStepUI();\r\n    }\r\n  });\r\n\r\n  prevBtn.addEventListener('click', function() {\r\n    if (currentStep > 0) {\r\n      currentStep--;\r\n      updateStepUI();\r\n    }\r\n  });\r\n\r\n  electronicSignature.addEventListener('input', function() {\r\n    this.classList.remove('error');\r\n  });\r\n\r\n  \/\/ ID Type change handler\r\n  document.getElementById('id_type').addEventListener('change', function() {\r\n    const hint = document.getElementById('id_number');\r\n    if (this.value === 'ID') {\r\n      hint.placeholder = '13-digit SA ID';\r\n      hint.maxLength = 13;\r\n    } else {\r\n      hint.placeholder = 'Passport number';\r\n      hint.maxLength = 50;\r\n    }\r\n  });\r\n\r\n  \/\/ ===== LOAD PROGRAMS =====\r\n  async function loadPrograms() {\r\n    programSelect.disabled = true;\r\n    programSelect.innerHTML = '<option value=\"\">Loading courses\u2026<\/option>';\r\n    try {\r\n      const resp = await fetch(PROGRAMS_ENDPOINT, {\r\n        method: 'GET',\r\n        headers: { 'Accept': 'application\/json' },\r\n        cache: 'no-store'\r\n      });\r\n      const text = await resp.text();\r\n      let data;\r\n      try {\r\n        data = JSON.parse(text);\r\n      } catch (e) {\r\n        throw new Error('Invalid API response');\r\n      }\r\n      if (!resp.ok) throw new Error(data.error || data.message || 'Could not load courses.');\r\n      \r\n      const programmes = Array.isArray(data) ? data : \r\n        (Array.isArray(data.programs) ? data.programs : \r\n        (Array.isArray(data.data) ? data.data : []));\r\n      \r\n      programSelect.innerHTML = '';\r\n      programmes.forEach(p => {\r\n        const id = p.id || p.program_id || '';\r\n        const title = p.ProgramTitle || p.title || p.name || '';\r\n        if (!id || !title) return;\r\n        const opt = document.createElement('option');\r\n        opt.value = String(id);\r\n        opt.textContent = String(title);\r\n        programSelect.appendChild(opt);\r\n      });\r\n      \r\n      if (programSelect.options.length === 0) {\r\n        programSelect.innerHTML = '<option value=\"\">No active courses<\/option>';\r\n      }\r\n    } catch (err) {\r\n      console.error(err);\r\n      programSelect.innerHTML = '<option value=\"\">Error loading courses<\/option>';\r\n      showMsg('gbc-error', err.message || 'Could not load courses.');\r\n    } finally {\r\n      programSelect.disabled = false;\r\n    }\r\n  }\r\n\r\n  \/\/ ===== FORM SUBMIT =====\r\n  form.addEventListener('submit', async function(e) {\r\n    e.preventDefault();\r\n    \r\n    \/\/ Final validation across all steps\r\n    for (let i = 0; i < steps.length; i++) {\r\n      if (!validateStep(i)) {\r\n        currentStep = i;\r\n        updateStepUI();\r\n        return;\r\n      }\r\n    }\r\n\r\n    submitBtn.disabled = true;\r\n    submitBtn.textContent = 'Submitting\u2026';\r\n    hideMsg();\r\n\r\n    const formData = new FormData(form);\r\n\r\n    try {\r\n      const resp = await fetch(APPLY_ENDPOINT, {\r\n        method: 'POST',\r\n        headers: {\r\n          'X-API-KEY': API_KEY,\r\n          'Accept': 'application\/json'\r\n        },\r\n        body: formData\r\n      });\r\n      \r\n      const text = await resp.text();\r\n      let result;\r\n      try {\r\n        result = JSON.parse(text);\r\n      } catch (e) {\r\n        throw new Error('Server returned invalid JSON');\r\n      }\r\n      \r\n      if (!resp.ok || result.status !== 'success') {\r\n        const field = result.field || '';\r\n        const errMsg = result.error || result.message || 'Submission failed.';\r\n        \r\n        if (field) {\r\n          const el = getField(field);\r\n          if (el) {\r\n            const stepIdx = steps.findIndex(s => s.contains(el));\r\n            if (stepIdx >= 0) {\r\n              currentStep = stepIdx;\r\n              updateStepUI();\r\n            }\r\n            markError(el);\r\n            el.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n            setTimeout(() => el.focus(), 300);\r\n          }\r\n        }\r\n        showMsg('gbc-error', errMsg);\r\n        submitBtn.disabled = false;\r\n        submitBtn.textContent = 'Submit Application';\r\n        return;\r\n      }\r\n\r\n      \/\/ Success\r\n      submitted = true;\r\n      const ref = escapeHtml(result.learner_ref || 'Pending');\r\n      const programs = result.programs || [];\r\n      const programNames = programs.map(p => escapeHtml(p.title || p.ProgramTitle || 'Course')).join(', ');\r\n      const formVersion = escapeHtml(result.form_version || '');\r\n      const signedAt = escapeHtml(result.signed_at || '');\r\n      const docHash = escapeHtml(result.document_hash || '');\r\n\r\n      card.innerHTML = `\r\n        <div class=\"gbc-success-screen\">\r\n          <div class=\"gbc-success-icon\">\u2713<\/div>\r\n          <h2>Application Submitted Successfully<\/h2>\r\n          <p>Your multi-course application for <strong>${programNames || 'selected courses'}<\/strong> has been received.<\/p>\r\n          <p>Reference number:<\/p>\r\n          <div class=\"gbc-reference\">${ref}<\/div>\r\n          ${(formVersion || signedAt || docHash) ? `\r\n            <div class=\"gbc-audit-summary\">\r\n              <strong>Electronic Submission Record<\/strong>\r\n              ${formVersion ? `<p><span>Form Version:<\/span> ${formVersion}<\/p>` : ''}\r\n              ${signedAt ? `<p><span>Signed At:<\/span> ${signedAt}<\/p>` : ''}\r\n              ${docHash ? `<p class=\"gbc-hash\"><span>Document Hash:<\/span> ${docHash}<\/p>` : ''}\r\n            <\/div>` : ''}\r\n          <p>Keep this reference number and check your email for confirmation.<\/p>\r\n        <\/div>\r\n      `;\r\n      card.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n      \r\n    } catch (err) {\r\n      console.error(err);\r\n      showMsg('gbc-error', err.message || 'Server error. Please try again.');\r\n      submitBtn.disabled = false;\r\n      submitBtn.textContent = 'Submit Application';\r\n    }\r\n  });\r\n\r\n  \/\/ ===== INIT =====\r\n  \/\/ Set default date constraints\r\n  const today = new Date();\r\n  const todayStr = today.getFullYear() + '-' + \r\n    String(today.getMonth() + 1).padStart(2, '0') + '-' + \r\n    String(today.getDate()).padStart(2, '0');\r\n  document.getElementById('dob').max = todayStr;\r\n\r\n  updateStepUI();\r\n  loadPrograms();\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Start Your Learning Journey Today ThinkUp Academy empowers you with practical, in-demand skills designed to help you grow, thrive, and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"unboxed","site-sidebar-style":"unboxed","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-17","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.thinkupacademy.com\/mw\/wp-json\/wp\/v2\/pages\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thinkupacademy.com\/mw\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.thinkupacademy.com\/mw\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.thinkupacademy.com\/mw\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thinkupacademy.com\/mw\/wp-json\/wp\/v2\/comments?post=17"}],"version-history":[{"count":94,"href":"https:\/\/www.thinkupacademy.com\/mw\/wp-json\/wp\/v2\/pages\/17\/revisions"}],"predecessor-version":[{"id":806,"href":"https:\/\/www.thinkupacademy.com\/mw\/wp-json\/wp\/v2\/pages\/17\/revisions\/806"}],"wp:attachment":[{"href":"https:\/\/www.thinkupacademy.com\/mw\/wp-json\/wp\/v2\/media?parent=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}