{"id":2322,"date":"2026-07-04T01:48:50","date_gmt":"2026-07-04T01:48:50","guid":{"rendered":"https:\/\/muslimcongress.org\/new\/?page_id=2322"},"modified":"2026-07-28T23:17:18","modified_gmt":"2026-07-28T23:17:18","slug":"mc-2026-registration","status":"publish","type":"page","link":"https:\/\/muslimcongress.org\/new\/mc-2026-registration\/","title":{"rendered":"2026 Conference Registration"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2322\" class=\"elementor elementor-2322\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ea6641a e-flex e-con-boxed e-con e-parent\" data-id=\"ea6641a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-11e4862 elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"11e4862\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/muslimcongress.org\/new\/muslim-congress-2026\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-left\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Conference Details<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7a7be82 elementor-widget elementor-widget-heading\" data-id=\"7a7be82\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Complete the steps below to reserve your place.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-03395e8 elementor-icon-list--layout-inline elementor-align-center elementor-mobile-align-start elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"03395e8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items elementor-inline-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-calendar-alt\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Nov. 6-8, 2026<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-map-pin\" viewBox=\"0 0 288 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Dearborn, Michigan<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-bell\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Registration closes Oct. 15<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\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<div class=\"elementor-element elementor-element-be6d06a e-flex e-con-boxed e-con e-parent\" data-id=\"be6d06a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-df1a1ff e-con e-atomic-element e-flexbox-base e-df1a1ff-0019a8e \" data-id=\"df1a1ff\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"df1a1ff\" data-e-type=\"e-flexbox\" data-id=\"df1a1ff\">\n    \t\t<div class=\"elementor-element elementor-element-556ec43 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"556ec43\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n<meta charset=\"utf-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n<title>Muslim Congress Annual Conference \u2014 Registration<\/title>\r\n<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/@tabler\/icons-webfont@2\/tabler-icons.min.css\">\r\n<style>\r\n  \/* Design tokens \u2014 override any of these from Elementor's Custom CSS panel\r\n     or your theme's Additional CSS to match your brand. *\/\r\n  .mc-registration {\r\n    --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\r\n    --color-background-primary: white;\r\n    --color-background-secondary: none;\r\n    --color-text-primary: #1a1a1a;\r\n    --color-text-secondary: #6b6b6b;\r\n    --color-border-primary: #d9d9d6;\r\n    --color-border-secondary: #d9d9d6;\r\n    --color-border-tertiary: #e5e5e2;\r\n    --border-radius-md: 4px;\r\n    --border-radius-lg: 12px;\r\n  }\r\n  :root { --teal: #1C58A6; --teal-light: #F6F8FC; --teal-border: #1C58A6; --amber: #BA7517; --amber-light: #FAEEDA; --coral: #D85A30; --coral-light: #FAECE7; }\r\n  * { box-sizing: border-box; margin: 0; padding: 0; }\r\n  body { font-family: var(--font-sans, sans-serif); background: none; }\r\n  .mc-registration { background: none; }\r\n  .shell { padding: 0px; max-width: 100%; margin: 0 auto; }\r\n  .step-nav { display: flex; align-items: center; gap: 0; margin-bottom: 2rem; overflow-x: auto; padding-bottom: 4px; }\r\n  .step-item { display: flex; align-items: center; flex-shrink: 0; }\r\n  .step-bubble { width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 500; border: 1.5px solid var(--color-border-tertiary); background: var(--color-background-primary); color: var(--color-text-secondary); cursor: pointer; transition: all 0.15s; }\r\n  .step-bubble.active { background: #1C58A6; border-color: #1C58A6; color: #fff; }\r\n  .step-bubble.done { background: var(--teal-light); border-color: #1C58A6; color: #1C58A6; }\r\n  .step-label { font-size: 11px; color: var(--color-text-secondary); margin-top: 4px; text-align: center; max-width: 70px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\r\n  .step-label.active { color: #1C58A6; font-weight: 500; }\r\n  .step-col { display: flex; flex-direction: column; align-items: center; gap: 0; }\r\n  .step-connector { height: 1.5px; width: 28px; background: var(--color-border-tertiary); flex-shrink: 0; margin-bottom: 18px; }\r\n  .step-connector.done { background: #1C58A6; }\r\n  .panel { background: var(--color-background-primary); border: 0.5px solid var(--color-border-tertiary); border-radius: var(--border-radius-lg); padding: 1.5rem; margin-bottom: 1.5rem; }\r\n  .panel-title { font-size: 16px; font-weight: 500; color: var(--color-text-primary); margin-bottom: 4px; display: flex; align-items: center; gap: 0px; }\r\n  .panel-sub { font-size: 13px; color: var(--color-text-secondary); margin-bottom: 1.25rem; }\r\n  .field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }\r\n  .field-grid.single { grid-template-columns: 1fr; }\r\n  .field-grid.triple { grid-template-columns: 1fr 1fr 1fr; }\r\n  .field { display: flex; flex-direction: column; gap: 8px; }\r\n  .field.span2 { grid-column: span 2; }\r\n  label { font-size: 12px; color: var(--color-text-secondary); font-weight: 500; letter-spacing: 0.02em; display: flex; align-items: center; gap: 4px; }\r\n  .req { color: #D85A30; font-size: 12px; }\r\n  input, select, textarea { border-radius: var(--border-radius-md); border: 0.5px solid var(--color-border-secondary); background: var(--color-background-secondary); color: var(--color-text-primary); padding: 10px 10px; font-size: 13px; width: 100%; font-family: inherit; }\r\n  input:focus, select:focus, textarea:focus { outline: 2px solid #1C58A6; outline-offset: 1px; border-color: #1C58A6; }\r\n  input.invalid, select.invalid { border-color: #D85A30; background: #FAECE7; }\r\n  .field-error { font-size: 11px; color: #993C1D; display: none; }\r\n  .field-error.show { display: block; }\r\n  .badge { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; padding: 3px 8px; border-radius: var(--border-radius-md); font-weight: 500; }\r\n  .badge-required { background: #FAECE7; color: #993C1D; }\r\n  .badge-optional { background: var(--color-background-secondary); color: var(--color-text-secondary); }\r\n  .note { font-size: 12px; color: var(--color-text-secondary); background: var(--color-background-secondary); border-left: 2px solid #1C58A6; padding: 8px 10px; border-radius: 0 var(--border-radius-md) var(--border-radius-md) 0; margin-top: 8px; }\r\n  .member-card { border: 0.5px solid var(--color-border-tertiary); border-radius: var(--border-radius-md); padding: 1rem; margin-bottom: 10px; background: var(--color-background-secondary); }\r\n  .member-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }\r\n  .member-title { font-size: 13px; font-weight: 500; color: var(--color-text-primary); display: flex; align-items: center; gap: 6px; }\r\n  .remove-member { background: none; border: none; color: var(--color-text-secondary); cursor: pointer; font-size: 12px; display: flex; align-items: center; gap: 4px; width: auto; }\r\n  .remove-member:hover { color: #D85A30; }\r\n  .add-btn { display: flex; align-items: center; gap: 6px; border: 1px dashed var(--color-border-secondary); border-radius: var(--border-radius-md); padding: 8px 14px; font-size: 13px; color: #1C58A6; background: transparent; cursor: pointer; width: 100%; justify-content: center; margin-top: 4px; }\r\n  .add-btn:hover { background: var(--color-background-secondary); }\r\n  .ticket-row { display: flex; justify-content: space-between; align-items: center; padding: 10px 0; border-bottom: 0.5px solid var(--color-border-tertiary); gap: 12px; }\r\n  .ticket-row:last-child { border-bottom: none; }\r\n  .ticket-label { font-size: 13px; color: var(--color-text-primary); }\r\n  .ticket-sub { font-size: 11px; color: var(--color-text-secondary); margin-top: 2px; }\r\n  .ticket-price { font-size: 14px; font-weight: 500; color: var(--color-text-primary); white-space: nowrap; }\r\n  .ticket-price.free { color: #0F6E56; }\r\n  .total-row { display: flex; justify-content: space-between; padding-top: 12px; font-size: 15px; font-weight: 500; color: var(--color-text-primary); }\r\n  .empty-summary { font-size: 13px; color: var(--color-text-secondary); padding: 8px 0; }\r\n  .discount-strip { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }\r\n  .discount-msg { font-size: 12px; margin-top: 8px; display: none; }\r\n  .discount-msg.ok { color: #0F6E56; display: block; }\r\n  .discount-msg.err { color: #993C1D; display: block; }\r\n  .nav-row { display: flex; justify-content: space-between; align-items: center; margin-top: 1rem; gap: 10px; }\r\n  .btn-back { background: transparent; border: 0.5px solid var(--color-border-secondary); color: var(--color-text-secondary); padding: 9px 20px; border-radius: var(--border-radius-md); font-size: 13px; cursor: pointer; display: flex; align-items: center; gap: 6px; }\r\n  .btn-next { background: #1C58A6; border: none; color: #fff; padding: 9px 24px; border-radius: var(--border-radius-md); font-size: 13px; font-weight: 500; cursor: pointer; display: flex; align-items: center; gap: 6px; }\r\n  .btn-next:hover { background: #164685; }\r\n  .divider { height: 0.5px; background: var(--color-border-tertiary); margin: 1rem 0; }\r\n  .tag { display: inline-block; font-size: 11px; padding: 2px 7px; border-radius: 100px; font-weight: 500; }\r\n  .tag-age { background: #FAEEDA; color: #633806; }\r\n  .confirmation-icon { width: 56px; height: 56px; border-radius: 50%; background: #F6F8FC; display: flex; align-items: center; justify-content: center; margin: 0 auto 12px; }\r\n  .step-section { display: none; }\r\n  .step-section.visible { display: block; }\r\n  select option { background: var(--color-background-primary); }\r\n  .waiver-box { border: 0.5px solid var(--color-border-tertiary); border-radius: var(--border-radius-md); padding: 10px 12px; font-size: 12px; color: var(--color-text-secondary); max-height: 80px; overflow-y: auto; line-height: 1.6; background: var(--color-background-secondary); }\r\n  .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); border: 0; }\r\n\r\n  \/* Read-only fields (e.g. the auto-calculated child\/youth counts). *\/\r\n  input[readonly] { background: #eeeeec; color: var(--color-text-secondary); cursor: not-allowed; }\r\n\r\n  \/* Full-screen dim + block while we confirm the payment on return from Stripe. *\/\r\n  @keyframes mcspin { to { transform: rotate(360deg); } }\r\n  #mcLoadingOverlay { position: fixed; inset: 0; background: rgba(0,0,0,0.8); z-index: 99999; display: none; align-items: center; justify-content: center; flex-direction: column; gap: 16px; }\r\n  #mcLoadingOverlay.show { display: flex; }\r\n  #mcLoadingOverlay .spinner { width: 40px; height: 40px; border: 3px solid rgba(255,255,255,0.25); border-top-color: #fff; border-radius: 50%; animation: mcspin 0.8s linear infinite; }\r\n  #mcLoadingOverlay .overlay-msg { color: #fff; font-size: 14px; font-family: var(--font-sans, sans-serif); }\r\n\r\n  \/* Error banner shown at the top of a step when validation fails. *\/\r\n  .banner { display: none; border-radius: var(--border-radius-md); padding: 10px 12px; font-size: 13px; margin-bottom: 1rem; line-height: 1.5; }\r\n  .banner.show { display: block; }\r\n  .banner-error { background: #FAECE7; color: #993C1D; border-left: 2px solid #D85A30; }\r\n  .banner-warn { background: #FAEEDA; color: #633806; border-left: 2px solid #BA7517; }\r\n  .banner ul { margin: 4px 0 0 18px; }\r\n\r\n  \/* Filter-style chips for the Quran competition categories. *\/\r\n  .chip-row { display: flex; flex-wrap: wrap; gap: 8px; }\r\n  .chip { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 400; letter-spacing: normal; color: var(--color-text-primary); border: 0.5px solid var(--color-border-tertiary); background: var(--color-background-primary); border-radius: 100px; padding: 6px 12px; cursor: pointer; }\r\n  .chip input { width: 14px; height: 14px; accent-color: #1C58A6; flex-shrink: 0; }\r\n  .chip:has(input:checked) { border-color: #1C58A6; background: #E1F5EE; color: #0F6E56; font-weight: 500; }\r\n\r\n  \/* ---------- Elementor hover override fixes ---------- *\/\r\n  .mc-registration button.add-btn,\r\n  .mc-registration button.remove-member {\r\n    box-shadow: none !important;\r\n    text-decoration: none !important;\r\n    transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease !important;\r\n  }\r\n  .mc-registration button.add-btn,\r\n  .mc-registration button.add-btn:visited {\r\n    color: #1C58A6 !important;\r\n    background: transparent !important;\r\n    border: 1px dashed var(--color-border-secondary) !important;\r\n  }\r\n  .mc-registration button.add-btn:hover,\r\n  .mc-registration button.add-btn:focus,\r\n  .mc-registration button.add-btn:active {\r\n    color: #1C58A6 !important;\r\n    background: var(--color-background-secondary) !important;\r\n    border-color: #1C58A6 !important;\r\n    outline-color: #1C58A6 !important;\r\n  }\r\n  .mc-registration button.remove-member,\r\n  .mc-registration button.remove-member:visited {\r\n    color: var(--color-text-secondary) !important;\r\n    background: transparent !important;\r\n    border: 0 !important;\r\n  }\r\n  .mc-registration button.remove-member:hover,\r\n  .mc-registration button.remove-member:focus,\r\n  .mc-registration button.remove-member:active {\r\n    color: #D85A30 !important;\r\n    background: transparent !important;\r\n    border: 0 !important;\r\n    outline-color: #D85A30 !important;\r\n  }\r\n\r\n  \/* ---------- Responsive ---------- *\/\r\n  @media (max-width: 640px) {\r\n    .shell { padding: 0px; }\r\n    .field-grid, .field-grid.triple { grid-template-columns: 1fr; }\r\n    .field.span2 { grid-column: span 1; }\r\n    .panel { padding: 1.25rem 1rem; }\r\n    .step-label { font-size: 10px; max-width: 54px; }\r\n    .btn-next, .btn-back { padding: 8px 16px; }\r\n    .nav-row { flex-wrap: wrap; }\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<div class=\"mc-registration\">\r\n<div class=\"shell\">\r\n  <h2 class=\"sr-only\">Muslim Congress conference registration<\/h2>\r\n\r\n  <div class=\"step-nav\" id=\"stepNav\">\r\n    <div class=\"step-col\"><div class=\"step-bubble active\" id=\"b0\" onclick=\"goTo(0)\">1<\/div><div class=\"step-label active\" id=\"l0\">Personal<\/div><\/div>\r\n    <div class=\"step-connector\" id=\"c0\"><\/div>\r\n    <div class=\"step-col\"><div class=\"step-bubble\" id=\"b1\" onclick=\"goTo(1)\">2<\/div><div class=\"step-label\" id=\"l1\">Attendees<\/div><\/div>\r\n    <div class=\"step-connector\" id=\"c1\"><\/div>\r\n    <div class=\"step-col\"><div class=\"step-bubble\" id=\"b2\" onclick=\"goTo(2)\">3<\/div><div class=\"step-label\" id=\"l2\">Logistics<\/div><\/div>\r\n    <div class=\"step-connector\" id=\"c2\"><\/div>\r\n    <div class=\"step-col\"><div class=\"step-bubble\" id=\"b3\" onclick=\"goTo(3)\">4<\/div><div class=\"step-label\" id=\"l3\">Payment<\/div><\/div>\r\n    <div class=\"step-connector\" id=\"c3\"><\/div>\r\n    <div class=\"step-col\"><div class=\"step-bubble\" id=\"b4\" onclick=\"goTo(4)\">5<\/div><div class=\"step-label\" id=\"l4\">Review<\/div><\/div>\r\n  <\/div>\r\n\r\n  <div class=\"step-section visible\" id=\"step0\">\r\n    <div class=\"banner banner-error\" id=\"err0\"><\/div>\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Primary registrant<\/div>\r\n      <div class=\"panel-sub\">The person completing this registration. All confirmation details will be sent here.<\/div>\r\n      <div class=\"field-grid\">\r\n        <div class=\"field\"><label>First name <span class=\"req\">*<\/span><\/label><input id=\"p-first\" name=\"primary_first\" type=\"text\" placeholder=\"First name\"><\/div>\r\n        <div class=\"field\"><label>Last name <span class=\"req\">*<\/span><\/label><input id=\"p-last\" name=\"primary_last\" type=\"text\" placeholder=\"Last name\"><\/div>\r\n        <div class=\"field\"><label>Email address <span class=\"req\">*<\/span><\/label><input id=\"p-email\" name=\"primary_email\" type=\"email\" placeholder=\"Email address\"><\/div>\r\n        <div class=\"field\"><label>Confirm email <span class=\"req\">*<\/span><\/label><input id=\"p-email2\" name=\"primary_email_confirm\" type=\"email\" placeholder=\"Confirm email\"><\/div>\r\n        <div class=\"field\"><label>Phone number <span class=\"req\">*<\/span><\/label><input id=\"p-phone\" name=\"primary_phone\" type=\"tel\" inputmode=\"numeric\" autocomplete=\"tel\" maxlength=\"14\" placeholder=\"(123) 456-7890\"><\/div>\r\n        <div class=\"field\"><label>Country \/ region <span class=\"req\">*<\/span><\/label>\r\n          <select id=\"p-country\" name=\"country\" onchange=\"onCountryChange()\"><\/select><\/div>\r\n        <div class=\"field\"><label id=\"stateLabel\">State \/ province<\/label>\r\n          <div id=\"stateWrap\"><\/div><\/div>\r\n        <div class=\"field\"><label>City<\/label><input id=\"p-city\" name=\"city\" type=\"text\"><\/div>\r\n        <div class=\"field\"><label>Age <span class=\"req\">*<\/span> <span class=\"tag tag-age\">sets ticket price<\/span><\/label><input id=\"p-age\" name=\"primary_age\" type=\"number\" min=\"0\" max=\"120\" step=\"1\" placeholder=\"e.g. 34\"><\/div>\r\n        <div class=\"field\"><label>Gender <span class=\"req\">*<\/span><\/label>\r\n          <select id=\"p-gender\" name=\"primary_gender\"><option value=\"\">Select<\/option><option>Male<\/option><option>Female<\/option><\/select><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Registration type<\/div>\r\n      <div class=\"panel-sub\">Select your primary registration category. Your ticket price is set automatically from your age.<\/div>\r\n      <div class=\"field-grid single\">\r\n        <div class=\"field\"><label>Registration type <span class=\"req\">*<\/span><\/label>\r\n          <select id=\"reg-type\" name=\"reg_type\"><option selected>General attendee<\/option><option>Scholar \/ Speaker (invite code required)<\/option><option>Media \/ Press (credentials required)<\/option><\/select><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Community &amp; identity<\/div>\r\n      <div class=\"panel-sub\">Helps us understand our attendees and tailor programming.<\/div>\r\n      <div class=\"field-grid\">\r\n        <div class=\"field span2\"><label>Affiliated organization <span class=\"badge badge-optional\">optional<\/span><\/label><input id=\"organization\" name=\"organization\" type=\"text\" placeholder=\"e.g. Zainabia, IEC, Seattle, etc\"><\/div>\r\n        <div class=\"field span2\"><label>How did you hear about this conference?<\/label>\r\n          <select id=\"referral\" name=\"referral\"><option value=\"\">Select<\/option><option>Social media<\/option><option>Masjid announcement<\/option><option>Friend \/ family<\/option><option>Email newsletter<\/option><option>Muslim Congress website<\/option><option>Other<\/option><\/select><\/div>\r\n        <div class=\"field span2\"><label>Is this your first Muslim Congress conference?<\/label>\r\n          <select id=\"first-time\" name=\"first_time\"><option value=\"\">Select<\/option><option>Yes, first time<\/option><option>No, I've attended before<\/option><\/select><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"nav-row\">\r\n      <div><\/div>\r\n      <button class=\"btn-next\" onclick=\"goTo(1)\">Add attendees <i class=\"ti ti-arrow-right\" aria-hidden=\"true\"><\/i><\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"step-section\" id=\"step1\">\r\n    <div class=\"banner banner-error\" id=\"err1\"><\/div>\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Additional attendees<\/div>\r\n      <div class=\"panel-sub\">Add a spouse, children, or anyone else registering with you. Each person needs their own record for name badges \u2014 and their age determines their ticket price.<\/div>\r\n\r\n      <div id=\"membersContainer\"><\/div>\r\n\r\n      <button type=\"button\" class=\"add-btn\" onclick=\"addMember()\"><i class=\"ti ti-plus\" aria-hidden=\"true\"><\/i>Add another attendee<\/button>\r\n      <div class=\"note\" style=\"margin-top:12px;\"><i class=\"ti ti-info-circle\" aria-hidden=\"true\"><\/i>Include children here too. Ages 6\u201364 are $150, 65+ are $110, and 5 &amp; under are free \u2014 prices are calculated from each person's age in the Payment step.<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Youth &amp; children programming<\/div>\r\n      <div class=\"panel-sub\">The counts below are calculated automatically from the ages you enter above. Let us know your childcare preference so we can plan appropriately. (Pricing still comes from each attendee's age.)<\/div>\r\n      <div class=\"field-grid\">\r\n        <div class=\"field\"><label>Number of children (5 &amp; under) <span class=\"badge badge-optional\">auto<\/span><\/label><input id=\"num-children\" name=\"num_children\" type=\"number\" min=\"0\" value=\"0\" readonly tabindex=\"-1\"><\/div>\r\n        <div class=\"field\"><label>Number of youth (6\u201317) <span class=\"badge badge-optional\">auto<\/span><\/label><input id=\"num-youth\" name=\"num_youth\" type=\"number\" min=\"0\" value=\"0\" readonly tabindex=\"-1\"><\/div>\r\n        <div class=\"field span2\"><label>Are you interested in youth programming \/ childcare?<\/label>\r\n          <select id=\"childcare\" name=\"childcare\"><option value=\"\">Select<\/option><option>Yes \u2014 full day childcare<\/option><option>Yes \u2014 partial day<\/option><option>No thanks, children will attend with me<\/option><\/select><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"nav-row\">\r\n      <button class=\"btn-back\" onclick=\"goTo(0)\"><i class=\"ti ti-arrow-left\" aria-hidden=\"true\"><\/i>Back<\/button>\r\n      <button class=\"btn-next\" onclick=\"goTo(2)\">Logistics <i class=\"ti ti-arrow-right\" aria-hidden=\"true\"><\/i><\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"step-section\" id=\"step2\">\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Travel &amp; transportation<\/div>\r\n      <div class=\"panel-sub\">Help us coordinate shuttles and parking logistics.<\/div>\r\n      <div class=\"field-grid\">\r\n        <div class=\"field\"><label>Do you need an airport shuttle?<\/label>\r\n          <select id=\"shuttle\" name=\"shuttle\"><option value=\"\">Select<\/option><option>Yes \u2014 arrival shuttle<\/option><option>Yes \u2014 departure shuttle<\/option><option>Yes \u2014 both<\/option><option>No<\/option><\/select><\/div>\r\n        <div class=\"field\"><label>Do you need a parking pass?<\/label>\r\n          <select id=\"parking\" name=\"parking\"><option value=\"\">Select<\/option><option>Yes \u2014 reserve a parking pass<\/option><option>No<\/option><\/select><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Accessibility &amp; special needs<\/div>\r\n      <div class=\"panel-sub\">We are committed to full accessibility. Let us know what you need so we can prepare.<\/div>\r\n      <div class=\"field-grid single\">\r\n        <div class=\"field\"><label>Accessibility requirements<\/label>\r\n          <select id=\"accessibility\" name=\"accessibility\"><option value=\"\">None<\/option><option>Wheelchair \/ mobility aid<\/option><option>Sign language interpreter<\/option><option>Hearing loop \/ FM system<\/option><option>Large-print materials<\/option><option>Prayer space for specific health need<\/option><option>Other (describe below)<\/option><\/select><\/div>\r\n        <div class=\"field\"><label>Additional notes<\/label><textarea id=\"accessibility-notes\" name=\"accessibility_notes\" rows=\"2\" placeholder=\"Anything else our accessibility team should know\u2026\"><\/textarea><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"nav-row\">\r\n      <button class=\"btn-back\" onclick=\"goTo(1)\"><i class=\"ti ti-arrow-left\" aria-hidden=\"true\"><\/i>Back<\/button>\r\n      <button class=\"btn-next\" onclick=\"goTo(3)\">Payment <i class=\"ti ti-arrow-right\" aria-hidden=\"true\"><\/i><\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"step-section\" id=\"step3\">\r\n    <div class=\"banner banner-warn\" id=\"canceledBanner\">Your payment was cancelled, so nothing was charged. Your details are still here \u2014 press <strong>Continue to payment<\/strong> when you're ready to try again.<\/div>\r\n    <div class=\"banner banner-error\" id=\"err3\"><\/div>\r\n\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Order summary<\/div>\r\n      <div id=\"orderItems\"><\/div>\r\n      <div class=\"divider\"><\/div>\r\n      <div class=\"ticket-row\">\r\n        <div style=\"color: var(--color-text-secondary); font-size:13px;\">Subtotal<\/div>\r\n        <div id=\"sumSubtotal\" style=\"font-size:13px; color: var(--color-text-secondary);\">$0.00<\/div>\r\n      <\/div>\r\n      <div class=\"ticket-row\" id=\"discountRow\" style=\"display:none;\">\r\n        <div style=\"color: #0F6E56; font-size:13px;\"><i class=\"ti ti-tag\" style=\"font-size:13px;\" aria-hidden=\"true\"><\/i><span id=\"discountLabel\">Discount<\/span><\/div>\r\n        <div id=\"sumDiscount\" style=\"font-size:13px; color: #0F6E56;\">\u2212$0.00<\/div>\r\n      <\/div>\r\n      <div class=\"total-row\">\r\n        <span>Total due<\/span>\r\n        <span id=\"sumTotal\">$0.00<\/span>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Discount \/ scholarship code<\/div>\r\n      <div class=\"discount-strip\">\r\n        <input id=\"discountCode\" type=\"text\" placeholder=\"Enter code\" style=\"flex:1; max-width:220px;\">\r\n        <button onclick=\"applyDiscount()\" style=\"border: 0.5px solid var(--color-border-secondary); background: var(--color-background-secondary); color: var(--color-text-primary); padding: 7px 16px; border-radius: var(--border-radius-md); font-size:13px; cursor:pointer;\">Apply<\/button>\r\n      <\/div>\r\n      <div class=\"discount-msg\" id=\"discountMsg\"><\/div>\r\n      <div class=\"note\" style=\"margin-top:10px;\"><i class=\"ti ti-hand-heart\" aria-hidden=\"true\"><\/i>Scholarship \/ hardship waivers are available. <a href=\"#\" style=\"color:#1C58A6;\">Apply here<\/a> before registering.<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Payment<\/div>\r\n      <div class=\"panel-sub\">You'll be taken to our secure payment page to pay by card. Your place is held while you're there, and your registration is confirmed the moment payment goes through.<\/div>\r\n      <div class=\"note\"><i class=\"ti ti-lock\" aria-hidden=\"true\"><\/i>Card details are entered on Stripe's page and never touch this site. Refund policy: full refund up to 30 days before the event.<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"panel\">\r\n      <div class=\"panel-title\">Consent &amp; waiver<\/div>\r\n      <div class=\"waiver-box\">By registering, I confirm that all information provided is accurate. I consent to the Muslim Congress code of conduct, photo\/video release policy, and acknowledge the refund and cancellation policy. I understand that my registration is confirmed only upon receipt of full payment.<\/div>\r\n      <div style=\"display:flex; align-items:center; gap:8px; margin-top:16px;\">\r\n        <input type=\"checkbox\" id=\"consent\" style=\"width:16px; height:16px; accent-color:#1C58A6; flex-shrink:0;\">\r\n        <label for=\"consent\" style=\"font-size:13px; color:var(--color-text-primary); cursor:pointer;\">I have read and agree to the above terms <span class=\"req\">*<\/span><\/label>\r\n      <\/div>\r\n      <div id=\"consentError\" class=\"field-error\" style=\"margin-top:10px;\">Please agree to the terms to continue.<\/div>\r\n      <div style=\"display:flex; align-items:center; gap:8px; margin-top:10px;\">\r\n        <input type=\"checkbox\" id=\"updates\" style=\"width:16px; height:16px; accent-color:#1C58A6; flex-shrink:0;\">\r\n        <label for=\"updates\" style=\"font-size:13px; color:var(--color-text-secondary); cursor:pointer;\">Send me event updates and Muslim Congress news (optional)<\/label>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"nav-row\">\r\n      <button class=\"btn-back\" onclick=\"goTo(2)\"><i class=\"ti ti-arrow-left\" aria-hidden=\"true\"><\/i>Back<\/button>\r\n      <button id=\"completeBtn\" class=\"btn-next\" onclick=\"complete()\">Continue to payment <i class=\"ti ti-arrow-right\" aria-hidden=\"true\"><\/i><\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"step-section\" id=\"step4\">\r\n    <div class=\"panel\" style=\"text-align:center; padding:2.5rem 1.5rem;\">\r\n      <div class=\"confirmation-icon\"><i class=\"ti ti-circle-check\" style=\"font-size:28px; color:#1C58A6;\" aria-hidden=\"true\"><\/i><\/div>\r\n      <div style=\"font-size:18px; font-weight:500; color:var(--color-text-primary); margin-bottom:6px;\">Registration confirmed<\/div>\r\n      <div style=\"font-size:13px; color:var(--color-text-secondary); margin-bottom:1.5rem;\">Payment received. A confirmation email with your registration details is on its way.<\/div>\r\n      <div style=\"background:var(--color-background-secondary); border-radius:var(--border-radius-md); padding:1rem; text-align:left; font-size:13px; color:var(--color-text-secondary); line-height:2;\">\r\n        <div><strong style=\"color:var(--color-text-primary);\">Confirmation #<\/strong> &nbsp;<span id=\"confNumber\">\u2014<\/span><\/div>\r\n        <div><strong style=\"color:var(--color-text-primary);\">Attendees<\/strong> &nbsp;<span id=\"confAttendees\">\u2014<\/span><\/div>\r\n        <div><strong style=\"color:var(--color-text-primary);\">Amount paid<\/strong> &nbsp;<span id=\"confTotal\">\u2014<\/span><\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- Dim + block interaction while we confirm the payment after returning from Stripe. -->\r\n<div id=\"mcLoadingOverlay\" role=\"alertdialog\" aria-label=\"Confirming payment\" aria-hidden=\"true\">\r\n  <div class=\"spinner\"><\/div>\r\n  <div class=\"overlay-msg\">Confirming your payment\u2026<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<script>\r\n  \/* =========================================================================\r\n     Backend. Everything that matters \u2014 prices, discounts, registration IDs,\r\n     payment status \u2014 is decided by the Apps Script web app, not by this file.\r\n     The numbers below are for display only; the server recomputes them.\r\n     ========================================================================= *\/\r\n  var BACKEND_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbykrjtpoCp1NsuT-CUVRUhINDPep1Q19qk2T_ZKLzChHkJa3AcTqd7VnIbmDbQFOK43Mg\/exec';\r\n\r\n  var PRICE_ADULT  = 150;   \/\/ ages 6\u201364\r\n  var PRICE_SENIOR = 110;   \/\/ ages 65+\r\n  var PRICE_CHILD  = 0;     \/\/ ages 5 & under\r\n\r\n  var discountType = '', discountValue = 0, discountName = '';  \/\/ value: fraction for %, dollars for $\r\n\r\n  \/* ---------- Small helpers ---------- *\/\r\n  function $(sel){ return document.querySelector(sel); }\r\n  function val(sel){ var el = $(sel); return el ? el.value.trim() : ''; }\r\n  function money(n){ return '$' + n.toFixed(2); }\r\n  function escapeHtml(s){ return (s||'').replace(\/[&<>\"']\/g, function(c){ return ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]); }); }\r\n\r\n  \/* Apps Script accepts text\/plain without a CORS preflight, and its JSON\r\n     response is readable \u2014 unlike mode:'no-cors', which hides every failure. *\/\r\n  function api(path, body){\r\n    var url = BACKEND_URL + path;\r\n    var opts = { method: body ? 'POST' : 'GET', redirect: 'follow' };\r\n    if(body){\r\n      opts.headers = { 'Content-Type': 'text\/plain;charset=utf-8' };\r\n      opts.body = JSON.stringify(body);\r\n    }\r\n    return fetch(url, opts).then(function(res){\r\n      if(!res.ok) throw new Error('Server error (' + res.status + ')');\r\n      return res.json();\r\n    });\r\n  }\r\n\r\n  \/* ---------- Full-screen loading overlay (Stripe return) ---------- *\/\r\n  function showOverlay(){ var o = document.getElementById('mcLoadingOverlay'); if(o){ o.classList.add('show'); o.setAttribute('aria-hidden', 'false'); } }\r\n  function hideOverlay(){ var o = document.getElementById('mcLoadingOverlay'); if(o){ o.classList.remove('show'); o.setAttribute('aria-hidden', 'true'); } }\r\n\r\n  \/* ---------- Phone number formatting ---------- *\/\r\n  function formatPhoneNumber(value){\r\n    var numbers = (value || '').replace(\/\\D\/g, '').slice(0, 10);\r\n    if(numbers.length <= 3){ return numbers; }\r\n    if(numbers.length <= 6){ return '(' + numbers.slice(0, 3) + ') ' + numbers.slice(3); }\r\n    return '(' + numbers.slice(0, 3) + ') ' + numbers.slice(3, 6) + '-' + numbers.slice(6);\r\n  }\r\n  function initPhoneFormatting(){\r\n    document.querySelectorAll('.mc-registration input[type=\"tel\"]').forEach(function(input){\r\n      input.addEventListener('input', function(){ this.value = formatPhoneNumber(this.value); });\r\n      input.addEventListener('paste', function(e){\r\n        e.preventDefault();\r\n        var pasted = (e.clipboardData || window.clipboardData).getData('text');\r\n        this.value = formatPhoneNumber(pasted);\r\n      });\r\n      input.value = formatPhoneNumber(input.value);\r\n    });\r\n  }\r\n\r\n  \/* ---------- Name auto-capitalization ---------- *\/\r\n  function toNameCase(str){\r\n    if(!str) return str;\r\n    return str.toLowerCase().replace(\/\\s+\/g, ' ').trim()\r\n      .replace(\/(^|[\\s\\-'\u2019])([a-z\u00e0-\u00f6\u00f8-\u00ff])\/g, function(m, sep, ch){ return sep + ch.toUpperCase(); });\r\n  }\r\n  function initNameFormatting(){\r\n    var container = document.querySelector('.mc-registration');\r\n    if(!container) return;\r\n    container.addEventListener('focusout', function(e){\r\n      var t = e.target;\r\n      if(!t || t.tagName !== 'INPUT' || !t.value) return;\r\n      if(t.id === 'p-first' || t.id === 'p-last' || t.id === 'p-city' ||\r\n         t.classList.contains('m-first') || t.classList.contains('m-last')){\r\n        t.value = toNameCase(t.value);\r\n      }\r\n    });\r\n  }\r\n\r\n  \/* ---------- Country \/ region + state\u2013province selector ---------- *\/\r\n  var COUNTRIES = [\r\n    \"Afghanistan\",\"Albania\",\"Algeria\",\"Andorra\",\"Angola\",\"Antigua and Barbuda\",\"Argentina\",\"Armenia\",\"Australia\",\"Austria\",\r\n    \"Azerbaijan\",\"Bahamas\",\"Bahrain\",\"Bangladesh\",\"Barbados\",\"Belarus\",\"Belgium\",\"Belize\",\"Benin\",\"Bhutan\",\"Bolivia\",\r\n    \"Bosnia and Herzegovina\",\"Botswana\",\"Brazil\",\"Brunei\",\"Bulgaria\",\"Burkina Faso\",\"Burundi\",\"Cabo Verde\",\"Cambodia\",\r\n    \"Cameroon\",\"Canada\",\"Central African Republic\",\"Chad\",\"Chile\",\"China\",\"Colombia\",\"Comoros\",\"Congo (Brazzaville)\",\r\n    \"Congo (Kinshasa)\",\"Costa Rica\",\"C\u00f4te d'Ivoire\",\"Croatia\",\"Cuba\",\"Cyprus\",\"Czechia\",\"Denmark\",\"Djibouti\",\"Dominica\",\r\n    \"Dominican Republic\",\"Ecuador\",\"Egypt\",\"El Salvador\",\"Equatorial Guinea\",\"Eritrea\",\"Estonia\",\"Eswatini\",\"Ethiopia\",\r\n    \"Fiji\",\"Finland\",\"France\",\"Gabon\",\"Gambia\",\"Georgia\",\"Germany\",\"Ghana\",\"Greece\",\"Grenada\",\"Guatemala\",\"Guinea\",\r\n    \"Guinea-Bissau\",\"Guyana\",\"Haiti\",\"Honduras\",\"Hungary\",\"Iceland\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Ireland\",\"Israel\",\r\n    \"Italy\",\"Jamaica\",\"Japan\",\"Jordan\",\"Kazakhstan\",\"Kenya\",\"Kiribati\",\"Kuwait\",\"Kyrgyzstan\",\"Laos\",\"Latvia\",\"Lebanon\",\r\n    \"Lesotho\",\"Liberia\",\"Libya\",\"Liechtenstein\",\"Lithuania\",\"Luxembourg\",\"Madagascar\",\"Malawi\",\"Malaysia\",\"Maldives\",\r\n    \"Mali\",\"Malta\",\"Marshall Islands\",\"Mauritania\",\"Mauritius\",\"Mexico\",\"Micronesia\",\"Moldova\",\"Monaco\",\"Mongolia\",\r\n    \"Montenegro\",\"Morocco\",\"Mozambique\",\"Myanmar\",\"Namibia\",\"Nauru\",\"Nepal\",\"Netherlands\",\"New Zealand\",\"Nicaragua\",\r\n    \"Niger\",\"Nigeria\",\"North Korea\",\"North Macedonia\",\"Norway\",\"Oman\",\"Pakistan\",\"Palau\",\"Palestine\",\"Panama\",\r\n    \"Papua New Guinea\",\"Paraguay\",\"Peru\",\"Philippines\",\"Poland\",\"Portugal\",\"Qatar\",\"Romania\",\"Russia\",\"Rwanda\",\r\n    \"Saint Kitts and Nevis\",\"Saint Lucia\",\"Saint Vincent and the Grenadines\",\"Samoa\",\"San Marino\",\"Sao Tome and Principe\",\r\n    \"Saudi Arabia\",\"Senegal\",\"Serbia\",\"Seychelles\",\"Sierra Leone\",\"Singapore\",\"Slovakia\",\"Slovenia\",\"Solomon Islands\",\r\n    \"Somalia\",\"South Africa\",\"South Korea\",\"South Sudan\",\"Spain\",\"Sri Lanka\",\"Sudan\",\"Suriname\",\"Sweden\",\"Switzerland\",\r\n    \"Syria\",\"Taiwan\",\"Tajikistan\",\"Tanzania\",\"Thailand\",\"Timor-Leste\",\"Togo\",\"Tonga\",\"Trinidad and Tobago\",\"Tunisia\",\r\n    \"Turkey\",\"Turkmenistan\",\"Tuvalu\",\"Uganda\",\"Ukraine\",\"United Arab Emirates\",\"United Kingdom\",\"United States\",\"Uruguay\",\r\n    \"Uzbekistan\",\"Vanuatu\",\"Vatican City\",\"Venezuela\",\"Vietnam\",\"Yemen\",\"Zambia\",\"Zimbabwe\"\r\n  ];\r\n  var SUBDIVISIONS = {\r\n    'United States': [\"Alabama\",\"Alaska\",\"Arizona\",\"Arkansas\",\"California\",\"Colorado\",\"Connecticut\",\"Delaware\",\"Florida\",\r\n      \"Georgia\",\"Hawaii\",\"Idaho\",\"Illinois\",\"Indiana\",\"Iowa\",\"Kansas\",\"Kentucky\",\"Louisiana\",\"Maine\",\"Maryland\",\r\n      \"Massachusetts\",\"Michigan\",\"Minnesota\",\"Mississippi\",\"Missouri\",\"Montana\",\"Nebraska\",\"Nevada\",\"New Hampshire\",\r\n      \"New Jersey\",\"New Mexico\",\"New York\",\"North Carolina\",\"North Dakota\",\"Ohio\",\"Oklahoma\",\"Oregon\",\"Pennsylvania\",\r\n      \"Rhode Island\",\"South Carolina\",\"South Dakota\",\"Tennessee\",\"Texas\",\"Utah\",\"Vermont\",\"Virginia\",\"Washington\",\r\n      \"West Virginia\",\"Wisconsin\",\"Wyoming\",\"District of Columbia\",\"Puerto Rico\",\"Guam\",\"U.S. Virgin Islands\",\r\n      \"American Samoa\",\"Northern Mariana Islands\"],\r\n    'Canada': [\"Alberta\",\"British Columbia\",\"Manitoba\",\"New Brunswick\",\"Newfoundland and Labrador\",\"Northwest Territories\",\r\n      \"Nova Scotia\",\"Nunavut\",\"Ontario\",\"Prince Edward Island\",\"Quebec\",\"Saskatchewan\",\"Yukon\"]\r\n  };\r\n\r\n  function populateCountries(){\r\n    var sel = document.getElementById('p-country');\r\n    if(!sel) return;\r\n    var html = '';\r\n    for(var i = 0; i < COUNTRIES.length; i++){\r\n      var c = COUNTRIES[i];\r\n      html += '<option'+ (c === 'United States' ? ' selected' : '') +'>'+ escapeHtml(c) +'<\/option>';\r\n    }\r\n    sel.innerHTML = html;\r\n  }\r\n  function onCountryChange(){\r\n    var countrySel = document.getElementById('p-country');\r\n    var wrap = document.getElementById('stateWrap');\r\n    var lbl  = document.getElementById('stateLabel');\r\n    if(!countrySel || !wrap) return;\r\n    var country = countrySel.value;\r\n    var subs = SUBDIVISIONS[country];\r\n    if(subs){\r\n      if(lbl) lbl.textContent = (country === 'Canada') ? 'Province \/ territory' : 'State';\r\n      var html = '<select name=\"state\"><option value=\"\">Select\u2026<\/option>';\r\n      for(var i = 0; i < subs.length; i++){ html += '<option>'+ escapeHtml(subs[i]) +'<\/option>'; }\r\n      html += '<\/select>';\r\n      wrap.innerHTML = html;\r\n    } else {\r\n      if(lbl) lbl.textContent = 'State \/ province \/ region';\r\n      wrap.innerHTML = '<input name=\"state\" type=\"text\" placeholder=\"State \/ province \/ region\">';\r\n    }\r\n  }\r\n\r\n  function parseAge(v){\r\n    if(v === '' || v == null) return null;\r\n    var n = parseInt(v, 10);\r\n    if(isNaN(n) || n < 0 || n > 120) return null;\r\n    return n;\r\n  }\r\n  function priceForAge(age){\r\n    if(age === null) return null;\r\n    if(age <= 5) return PRICE_CHILD;\r\n    if(age <= 64) return PRICE_ADULT;\r\n    return PRICE_SENIOR;\r\n  }\r\n  function bracketLabel(age){\r\n    if(age <= 5) return 'Child (5 & under)';\r\n    if(age <= 64) return 'Ages 6\u201364';\r\n    return 'Senior (65+)';\r\n  }\r\n\r\n  \/* ---------- Auto-calculated child \/ youth counts ---------- *\/\r\n  function updateYouthCounts(){\r\n    var people = collectPeople();\r\n    var children = 0, youth = 0;\r\n    people.forEach(function(p){\r\n      var age = parseAge(p.age);\r\n      if(age === null) return;\r\n      if(age <= 5) children++;\r\n      else if(age <= 17) youth++;\r\n    });\r\n    var c = document.getElementById('num-children'), y = document.getElementById('num-youth');\r\n    if(c) c.value = children;\r\n    if(y) y.value = youth;\r\n  }\r\n  function initYouthCounts(){\r\n    var container = document.querySelector('.mc-registration');\r\n    if(!container) return;\r\n    \/\/ Recompute whenever any age field changes (primary or an attendee card).\r\n    container.addEventListener('input', function(e){\r\n      var t = e.target;\r\n      if(t && (t.id === 'p-age' || (t.classList && t.classList.contains('m-age')))){\r\n        updateYouthCounts();\r\n      }\r\n    });\r\n    updateYouthCounts();\r\n  }\r\n\r\n  \/* ---------- Attendee cards ---------- *\/\r\n  function memberCardHTML(){\r\n    return ''+\r\n    '<div class=\"member-card\" data-member>'+\r\n      '<div class=\"member-header\">'+\r\n        '<div class=\"member-title\"><i class=\"ti ti-user-circle\" aria-hidden=\"true\"><\/i><span class=\"member-num\">Attendee<\/span><\/div>'+\r\n        '<button type=\"button\" class=\"remove-member\" onclick=\"removeMember(this)\">Remove <i class=\"ti ti-x\" aria-hidden=\"true\"><\/i><\/button>'+\r\n      '<\/div>'+\r\n      '<div class=\"field-grid triple\">'+\r\n        '<div class=\"field\"><label>First name <span class=\"req\">*<\/span><\/label><input class=\"m-first\" type=\"text\" placeholder=\"First name\"><\/div>'+\r\n        '<div class=\"field\"><label>Last name <span class=\"req\">*<\/span><\/label><input class=\"m-last\" type=\"text\" placeholder=\"Last name\"><\/div>'+\r\n        '<div class=\"field\"><label>Age <span class=\"req\">*<\/span><\/label><input class=\"m-age\" type=\"number\" min=\"0\" max=\"120\" step=\"1\" placeholder=\"e.g. 9\"><\/div>'+\r\n        '<div class=\"field\"><label>Gender <span class=\"req\">*<\/span><\/label><select class=\"m-gender\"><option value=\"\">Select<\/option><option>Male<\/option><option>Female<\/option><\/select><\/div>'+\r\n        '<div class=\"field\"><label>Relationship to primary<\/label><select class=\"m-relationship\"><option value=\"\">Select<\/option><option>Spouse<\/option><option>Child<\/option><option>Parent<\/option><option>Sibling<\/option><option>Other<\/option><\/select><\/div>'+\r\n        '<div class=\"field\"><label>Dietary needs<\/label><select class=\"m-dietary\"><option value=\"\">None \/ standard halal<\/option><option>Vegetarian<\/option><option>Vegan<\/option><option>Nut allergy<\/option><option>Gluten-free<\/option><option>Other<\/option><\/select><\/div>'+\r\n      '<\/div>'+\r\n      '<div class=\"field-grid\" style=\"margin-top:10px;\">'+\r\n        '<div class=\"field span2\"><label>Any accessibility needs?<\/label><select class=\"m-accessibility\"><option value=\"\">None<\/option><option>Wheelchair access<\/option><option>Hearing assistance<\/option><option>Sign language interpreter<\/option><option>Other<\/option><\/select><\/div>'+\r\n      '<\/div>'+\r\n    '<\/div>';\r\n  }\r\n  function addMember(){\r\n    $('#membersContainer').insertAdjacentHTML('beforeend', memberCardHTML());\r\n    renumberMembers();\r\n    updateYouthCounts();\r\n  }\r\n  function removeMember(btn){\r\n    var card = btn.closest('[data-member]');\r\n    if(card) card.remove();\r\n    renumberMembers();\r\n    updateYouthCounts();\r\n    if(currentStep === 3) buildSummary();\r\n  }\r\n  function renumberMembers(){\r\n    document.querySelectorAll('#membersContainer [data-member]').forEach(function(c, i){\r\n      var n = c.querySelector('.member-num');\r\n      if(n) n.textContent = 'Attendee ' + (i + 2);\r\n    });\r\n  }\r\n\r\n  \/* ---------- Validation ---------- *\/\r\n  function mark(el, bad){\r\n    if(!el) return;\r\n    el.classList.toggle('invalid', !!bad);\r\n  }\r\n  function showErrors(step, list){\r\n    var banner = document.getElementById('err' + step);\r\n    if(!banner) return;\r\n    if(!list.length){ banner.classList.remove('show'); banner.innerHTML = ''; return; }\r\n    banner.innerHTML = 'Please fix the following before continuing:<ul>' +\r\n      list.map(function(m){ return '<li>' + escapeHtml(m) + '<\/li>'; }).join('') + '<\/ul>';\r\n    banner.classList.add('show');\r\n    banner.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n  }\r\n\r\n  function validateStep0(){\r\n    var errs = [];\r\n    var email = val('#p-email'), email2 = val('#p-email2');\r\n    var emailOk = \/^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$\/.test(email);\r\n    var phoneDigits = val('#p-phone').replace(\/\\D\/g, '');\r\n\r\n    mark($('#p-first'),  !val('#p-first'));\r\n    mark($('#p-last'),   !val('#p-last'));\r\n    mark($('#p-email'),  !emailOk);\r\n    mark($('#p-email2'), email !== email2 || !email2);\r\n    mark($('#p-phone'),  phoneDigits.length !== 10);\r\n    mark($('#p-age'),    parseAge(val('#p-age')) === null);\r\n    mark($('#p-gender'), !val('#p-gender'));\r\n\r\n    if(!val('#p-first') || !val('#p-last')) errs.push('Enter your first and last name.');\r\n    if(!emailOk) errs.push('Enter a valid email address.');\r\n    else if(email !== email2) errs.push('The two email addresses don\\'t match.');\r\n    if(phoneDigits.length !== 10) errs.push('Enter a 10-digit phone number.');\r\n    if(parseAge(val('#p-age')) === null) errs.push('Enter your age \u2014 it sets your ticket price.');\r\n    if(!val('#p-gender')) errs.push('Select a gender.');\r\n\r\n    showErrors(0, errs);\r\n    return errs.length === 0;\r\n  }\r\n\r\n  function validateStep1(){\r\n    var errs = [];\r\n    document.querySelectorAll('#membersContainer [data-member]').forEach(function(card, i){\r\n      var first = card.querySelector('.m-first'), last = card.querySelector('.m-last');\r\n      var age = card.querySelector('.m-age'), gender = card.querySelector('.m-gender');\r\n      var label = 'Attendee ' + (i + 2);\r\n      mark(first,  !first.value.trim());\r\n      mark(last,   !last.value.trim());\r\n      mark(age,    parseAge(age.value) === null);\r\n      mark(gender, !gender.value);\r\n      if(!first.value.trim() || !last.value.trim()) errs.push(label + ' needs a first and last name.');\r\n      if(parseAge(age.value) === null) errs.push(label + ' needs an age.');\r\n      if(!gender.value) errs.push(label + ' needs a gender.');\r\n    });\r\n    showErrors(1, errs);\r\n    return errs.length === 0;\r\n  }\r\n\r\n  \/* ---------- Order summary (display only) ---------- *\/\r\n  function collectPeople(){\r\n    var people = [{\r\n      first: val('#p-first'),\r\n      last: val('#p-last'),\r\n      age: val('#p-age'),\r\n      gender: val('#p-gender'),\r\n      relationship: 'Primary',\r\n      dietary: '',\r\n      accessibility: val('#accessibility')\r\n    }];\r\n    document.querySelectorAll('#membersContainer [data-member]').forEach(function(card){\r\n      people.push({\r\n        first: (card.querySelector('.m-first').value || '').trim(),\r\n        last:  (card.querySelector('.m-last').value  || '').trim(),\r\n        age:   card.querySelector('.m-age').value,\r\n        gender: card.querySelector('.m-gender').value,\r\n        relationship: card.querySelector('.m-relationship').value,\r\n        dietary: card.querySelector('.m-dietary').value,\r\n        accessibility: card.querySelector('.m-accessibility').value\r\n      });\r\n    });\r\n    return people;\r\n  }\r\n\r\n  function buildSummary(){\r\n    var people = collectPeople();\r\n    var container = $('#orderItems');\r\n    container.innerHTML = '';\r\n    var subtotal = 0;\r\n\r\n    people.forEach(function(p, i){\r\n      var name = (p.first || p.last) ? (p.first + ' ' + p.last).trim()\r\n                 : (i === 0 ? 'Primary registrant' : 'Attendee ' + (i + 1));\r\n      var age = parseAge(p.age);\r\n      var price = priceForAge(age);\r\n      subtotal += price;\r\n      container.insertAdjacentHTML('beforeend',\r\n        '<div class=\"ticket-row\">'+\r\n          '<div><div class=\"ticket-label\">'+ escapeHtml(name) +'<\/div>'+\r\n          '<div class=\"ticket-sub\">'+ bracketLabel(age) +' \u00b7 age '+ age +'<\/div><\/div>'+\r\n          '<div class=\"ticket-price'+ (price === 0 ? ' free' : '') +'\">'+\r\n            (price === 0 ? 'Free' : money(price)) +'<\/div>'+\r\n        '<\/div>');\r\n    });\r\n\r\n    var discount = 0;\r\n    if(discountType === 'amount'){ discount = Math.min(discountValue, subtotal); }\r\n    else if(discountType === 'percent'){ discount = subtotal * discountValue; }\r\n    $('#sumSubtotal').textContent = money(subtotal);\r\n    if(discount > 0){\r\n      $('#discountRow').style.display = 'flex';\r\n      $('#discountLabel').textContent = discountName + (\r\n        discountType === 'amount'\r\n          ? ' (' + money(discountValue) + ' off)'\r\n          : ' (' + Math.round(discountValue * 100) + '% off)');\r\n      $('#sumDiscount').textContent = '\u2212' + money(discount);\r\n    } else {\r\n      $('#discountRow').style.display = 'none';\r\n    }\r\n    $('#sumTotal').textContent = money(subtotal - discount);\r\n  }\r\n\r\n  \/* ---------- Discount codes (validated by the server) ---------- *\/\r\n  function applyDiscount(){\r\n    var code = val('#discountCode').toUpperCase();\r\n    var msg = $('#discountMsg');\r\n    if(!code){\r\n      discountType = ''; discountValue = 0; discountName = '';\r\n      msg.className = 'discount-msg'; msg.textContent = '';\r\n      buildSummary();\r\n      return;\r\n    }\r\n    msg.className = 'discount-msg ok';\r\n    msg.textContent = 'Checking\u2026';\r\n    api('?action=discount&code=' + encodeURIComponent(code))\r\n      .then(function(d){\r\n        if(d.valid){\r\n          discountType = d.type; discountName = d.code;\r\n          if(d.type === 'amount'){\r\n            discountValue = d.value \/ 100;                 \/\/ cents \u2192 dollars\r\n            msg.textContent = 'Code applied \u2014 ' + money(discountValue) + ' off.';\r\n          } else {\r\n            discountValue = d.value;                       \/\/ fraction\r\n            msg.textContent = 'Code applied \u2014 ' + Math.round(d.value * 100) + '% off.';\r\n          }\r\n          msg.className = 'discount-msg ok';\r\n        } else {\r\n          discountType = ''; discountValue = 0; discountName = '';\r\n          msg.className = 'discount-msg err';\r\n          msg.textContent = 'That code was not recognized.';\r\n        }\r\n        buildSummary();\r\n      })\r\n      .catch(function(){\r\n        msg.className = 'discount-msg err';\r\n        msg.textContent = 'Couldn\\'t check that code right now. Try again in a moment.';\r\n      });\r\n  }\r\n\r\n  \/* ---------- Step navigation ----------\r\n     Browsing between steps is free \u2014 required fields no longer block moving\r\n     forward. Validation is enforced at submit time (see complete()). *\/\r\n  var currentStep = 0;\r\n  function goTo(n){\r\n    if(currentStep === 4) return;                       \/\/ no going back from confirmation\r\n    if(n > currentStep){\r\n      if(n > 3) return;                                 \/\/ step 5 is reached by paying, not clicking\r\n    }\r\n    document.getElementById('step' + currentStep).classList.remove('visible');\r\n    document.getElementById('step' + n).classList.add('visible');\r\n    for(var i = 0; i < 5; i++){\r\n      var b = document.getElementById('b' + i), l = document.getElementById('l' + i);\r\n      b.classList.remove('active', 'done'); l.classList.remove('active');\r\n      if(i < n){ b.classList.add('done'); }\r\n      else if(i === n){ b.classList.add('active'); l.classList.add('active'); }\r\n      if(i < 4){ document.getElementById('c' + i).classList.toggle('done', i < n); }\r\n    }\r\n    currentStep = n;\r\n    if(n === 1) updateYouthCounts();\r\n    if(n === 3) buildSummary();\r\n    window.scrollTo({ top: 0, behavior: 'smooth' });\r\n  }\r\n\r\n  \/* ---------- Submit \u2192 Stripe Checkout ---------- *\/\r\n  function buildPayload(){\r\n    var stateEl = document.querySelector('#stateWrap select, #stateWrap input');\r\n    return {\r\n      primary: {\r\n        firstName: val('#p-first'),\r\n        lastName: val('#p-last'),\r\n        email: val('#p-email'),\r\n        phone: val('#p-phone'),\r\n        country: val('#p-country'),\r\n        state: stateEl ? stateEl.value : '',\r\n        city: val('#p-city'),\r\n        age: val('#p-age'),\r\n        gender: val('#p-gender'),\r\n        registrationType: val('#reg-type'),\r\n        organization: val('#organization'),\r\n        referral: val('#referral'),\r\n        firstTime: val('#first-time')\r\n      },\r\n      attendees: collectPeople(),\r\n      logistics: {\r\n        numChildrenUnderFive: val('#num-children'),\r\n        numYouth: val('#num-youth'),\r\n        childcare: val('#childcare'),\r\n        shuttle: val('#shuttle'),\r\n        parking: val('#parking'),\r\n        accessibility: val('#accessibility'),\r\n        accessibilityNotes: val('#accessibility-notes')\r\n      },\r\n      programs: {\r\n        quranCompetition: [],\r\n        youthTalks: ''\r\n      },\r\n      discountCode: discountName,          \/\/ the server re-checks this\r\n      consent: $('#consent').checked,\r\n      updatesOptIn: $('#updates').checked\r\n    };\r\n  }\r\n\r\n  function complete(){\r\n    if(!validateStep0()){ goTo(0); return; }\r\n    if(!validateStep1()){ goTo(1); return; }\r\n    if(!$('#consent').checked){\r\n      $('#consentError').classList.add('show');\r\n      $('#consent').scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n      return;\r\n    }\r\n    $('#consentError').classList.remove('show');\r\n    showErrors(3, []);\r\n\r\n    var btn = document.getElementById('completeBtn');\r\n    btn.disabled = true;\r\n    btn.style.opacity = '0.7';\r\n    btn.style.cursor = 'wait';\r\n    btn.innerHTML = '<i class=\"ti ti-loader-2\" aria-hidden=\"true\"><\/i>Taking you to payment\u2026';\r\n\r\n    api('', buildPayload())\r\n      .then(function(data){\r\n        if(!data.ok){ throw new Error((data.errors || [data.error]).join(' ')); }\r\n        if(data.checkoutUrl){\r\n          window.location.href = data.checkoutUrl;   \/\/ hand off to Stripe\r\n          return;\r\n        }\r\n        showConfirmation({                            \/\/ $0 total \u2014 nothing to charge\r\n          registrationId: data.registrationId,\r\n          total: 0,\r\n          attendees: buildPayload().attendees.map(function(a){\r\n            return { name: (a.first + ' ' + a.last).trim(), attendeeId: '' };\r\n          })\r\n        });\r\n        resetButton(btn);\r\n      })\r\n      .catch(function(err){\r\n        showErrors(3, [err.message || 'We couldn\\'t reach the registration server. Please try again.']);\r\n        resetButton(btn);\r\n      });\r\n  }\r\n  function resetButton(btn){\r\n    btn.disabled = false;\r\n    btn.style.opacity = '';\r\n    btn.style.cursor = '';\r\n    btn.innerHTML = 'Continue to payment <i class=\"ti ti-arrow-right\" aria-hidden=\"true\"><\/i>';\r\n  }\r\n\r\n  \/* ---------- Coming back from Stripe ---------- *\/\r\n  function showConfirmation(data){\r\n    hideOverlay();\r\n    $('#confNumber').textContent = data.registrationId;\r\n    $('#confAttendees').textContent = (data.attendees || []).map(function(a){\r\n      return a.attendeeId ? a.name + ' (' + a.attendeeId + ')' : a.name;\r\n    }).join(', ') || '\u2014';\r\n    $('#confTotal').textContent = money((data.total || 0) \/ 100);\r\n    document.getElementById('step' + currentStep).classList.remove('visible');\r\n    document.getElementById('step4').classList.add('visible');\r\n    for(var i = 0; i < 5; i++){\r\n      var b = document.getElementById('b' + i), l = document.getElementById('l' + i);\r\n      b.classList.remove('active'); l.classList.remove('active');\r\n      if(i < 4) { b.classList.add('done'); document.getElementById('c' + i).classList.add('done'); }\r\n    }\r\n    document.getElementById('b4').classList.add('active');\r\n    document.getElementById('l4').classList.add('active');\r\n    currentStep = 4;\r\n    window.scrollTo({ top: 0, behavior: 'smooth' });\r\n  }\r\n\r\n  function handleReturnFromStripe(){\r\n    var params = new URLSearchParams(window.location.search);\r\n    var rid = params.get('rid');\r\n    if(!rid) return;\r\n\r\n    if(params.get('canceled')){\r\n      document.getElementById('canceledBanner').classList.add('show');\r\n      goTo(3);\r\n      return;\r\n    }\r\n\r\n    \/\/ Dim + block the page while we confirm the payment.\r\n    showOverlay();\r\n\r\n    \/\/ Stripe's webhook usually lands before the browser gets back here, but not\r\n    \/\/ always. Poll for a few seconds before giving up.\r\n    function stillConfirming(){\r\n      hideOverlay();\r\n      showErrors(3, ['Your payment went through, but we\\'re still confirming it. ' +\r\n        'Your confirmation number is ' + rid + ' \u2014 save it, and check your email in a few minutes.']);\r\n      goTo(3);\r\n    }\r\n\r\n    var attempts = 0;\r\n    (function poll(){\r\n      attempts++;\r\n      api('?action=status&rid=' + encodeURIComponent(rid))\r\n        .then(function(data){\r\n          if(data.ok && data.status === 'Paid'){\r\n            showConfirmation(data);                    \/\/ hides overlay\r\n            history.replaceState({}, '', window.location.pathname);\r\n            return;\r\n          }\r\n          \/\/ If the server returns an explicit error, show it rather than hiding\r\n          \/\/ it behind the generic timeout \u2014 but allow a couple of retries first\r\n          \/\/ in case it's a transient blip.\r\n          if(data.ok === false && attempts >= 2){\r\n            hideOverlay();\r\n            showErrors(3, ['We couldn\\'t confirm your payment automatically: ' +\r\n              (data.error || 'unknown error') + '. Your confirmation number is ' + rid +\r\n              ' \u2014 please save it and contact us if you were charged.']);\r\n            goTo(3);\r\n            return;\r\n          }\r\n          if(attempts < 8){ setTimeout(poll, 1500); return; }\r\n          stillConfirming();\r\n        })\r\n        .catch(function(){\r\n          if(attempts < 8){ setTimeout(poll, 1500); return; }\r\n          stillConfirming();\r\n        });\r\n    })();\r\n  }\r\n\r\n  \/* ---------- Init ---------- *\/\r\n  $('#consent').addEventListener('change', function(){\r\n    if(this.checked) $('#consentError').classList.remove('show');\r\n  });\r\n  populateCountries();\r\n  onCountryChange();\r\n  initPhoneFormatting();\r\n  initNameFormatting();\r\n  initYouthCounts();\r\n  handleReturnFromStripe();\r\n<\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Conference Details Complete the steps below to reserve your place. Nov. 6-8, 2026 Dearborn, Michigan Registration closes Oct. 15 Muslim Congress Annual Conference \u2014 Registration Muslim Congress conference registration 1Personal 2Attendees 3Logistics 4Payment 5Review Primary registrant The person completing this registration. All confirmation details will be sent here. First name * Last name * Email [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"_angie_page":false,"footnotes":""},"class_list":["post-2322","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/muslimcongress.org\/new\/wp-json\/wp\/v2\/pages\/2322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/muslimcongress.org\/new\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/muslimcongress.org\/new\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/muslimcongress.org\/new\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/muslimcongress.org\/new\/wp-json\/wp\/v2\/comments?post=2322"}],"version-history":[{"count":5,"href":"https:\/\/muslimcongress.org\/new\/wp-json\/wp\/v2\/pages\/2322\/revisions"}],"predecessor-version":[{"id":2567,"href":"https:\/\/muslimcongress.org\/new\/wp-json\/wp\/v2\/pages\/2322\/revisions\/2567"}],"wp:attachment":[{"href":"https:\/\/muslimcongress.org\/new\/wp-json\/wp\/v2\/media?parent=2322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}