{"id":2130,"date":"2026-04-28T11:50:58","date_gmt":"2026-04-28T11:50:58","guid":{"rendered":"https:\/\/allentra.net\/usa\/?page_id=2130"},"modified":"2026-05-01T10:43:24","modified_gmt":"2026-05-01T10:43:24","slug":"book-discovery-call","status":"publish","type":"page","link":"https:\/\/allentra.net\/usa\/book-discovery-call\/","title":{"rendered":"Discovery Call"},"content":{"rendered":"<div id=\"tdi_1\" class=\"tdc-zone\"><div class=\"tdc_zone tdi_2  wpb_row td-pb-row\"  >\n<style scoped>\n\/* custom css - generated by TagDiv Composer *\/\n\n\/* custom css - generated by TagDiv Composer *\/\n.tdi_2{\r\n                    min-height: 0;\r\n                }\n<\/style><div id=\"tdi_3\" class=\"tdc-row\"><div class=\"vc_row tdi_4  wpb_row td-pb-row\" >\n<style scoped>\n\/* custom css - generated by TagDiv Composer *\/\n\n\/* custom css - generated by TagDiv Composer *\/\n.tdi_4,\r\n                .tdi_4 .tdc-columns{\r\n                    min-height: 0;\r\n                }.tdi_4,\r\n\t\t\t\t.tdi_4 .tdc-columns{\r\n\t\t\t\t    display: block;\r\n\t\t\t\t}.tdi_4 .tdc-columns{\r\n\t\t\t\t    width: 100%;\r\n\t\t\t\t}.tdi_4:before,\r\n\t\t\t\t.tdi_4:after{\r\n\t\t\t\t    display: table;\r\n\t\t\t\t}\n<\/style><div class=\"vc_column tdi_6  wpb_column vc_column_container tdc-column td-pb-span12\">\n<style scoped>\n\/* custom css - generated by TagDiv Composer *\/\n\n\/* custom css - generated by TagDiv Composer *\/\n.tdi_6{\r\n                    vertical-align: baseline;\r\n                }.tdi_6 > .wpb_wrapper,\r\n\t\t\t\t.tdi_6 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    display: block;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    width: 100%;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper > .vc_row_inner{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t    height: auto;\r\n\t\t\t\t}\n<\/style><div class=\"wpb_wrapper\" ><div class=\"td_block_wrap td_block_raw_css tdi_7 td-pb-border-top td_block_template_1\"  data-td-block-uid=\"tdi_7\" ><div id=tdi_7 class=\"td_block_inner td-fix-index\"><style>\/* \u2500\u2500 Allentra Discovery Call Booking - Complete Styles \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n   Updated: Header design matching specification\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n:root {\n  --navy-deep: #071D49;\n  --navy-mid: #1D4289;\n  --sky: #1B98E0;\n  --sky-light: #e6f4fc;\n  --amber: #E3B505;\n  --red: #E54B4B;\n  --green: #09814A;\n  --green-light: #e4f4ec;\n  --off-white: #F0EDEE;\n  --text-primary: #071D49;\n  --text-secondary: #3a4a6b;\n  --text-muted: #6b7a99;\n  --border: #cdd5e4;\n  --border-light: #e8ecf5;\n  --surface: #ffffff;\n  --surface-alt: #f7f8fc;\n  --font-display: 'Plus Jakarta Sans', sans-serif;\n  --font-heading: 'Inter', sans-serif;\n  --font-body: 'Inter', sans-serif;\n  --radius-sm: 6px;\n  --radius-md: 10px;\n  --shadow-card: 0 2px 12px rgba(7, 29, 73, 0.08);\n  --transition: 180ms ease;\n}\nhtml {\n  overflow-y: scroll;\n}\n\/* \u2500\u2500 Page wrapper \u2500\u2500 *\/\n.al-booking-wrap {\n  font-family: var(--font-body);\n  color: var(--text-primary);\n  font-size: 15px;\n  line-height: 1.6;\n  background: var(--off-white);\n  padding: 12px 12px 60px;\n}\n@media (min-width: 768px) {\n  .al-booking-wrap {\n    padding: 20px 16px 80px;\n  }\n}\n\/* \u2500\u2500 Card \u2500\u2500 *\/\n.al-booking-card {\n  max-width: 680px;\n  margin: 0 auto;\n  background: var(--surface);\n  border-radius: var(--radius-md);\n  box-shadow: var(--shadow-card);\n  border: 1px solid var(--border-light);\n  overflow: hidden;\n}\n\/* \u2500\u2500 Compact header \u2500\u2500 *\/\n.al-top-bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  background: var(--navy-deep);\n  padding: 0px 16px;\n  gap: 12px;\n  min-height: 44px;\n}\n.al-top-bar-content {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  flex: 1;\n  min-width: 0;\n}\n.al-top-bar-heading {\n  font-family: var(--font-heading);\n  font-size: 15px;\n  font-weight: 700;\n  color: #fff;\n  letter-spacing: -0.01em;\n}\n.al-top-bar-sub {\n  font-family: var(--font-body);\n  font-size: 11px;\n  color: rgba(255, 255, 255, 0.55);\n  line-height: 1.3;\n}\n\/* \u2500\u2500 Inline step dots \u2500\u2500 *\/\n.al-steps-inline {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n}\n.al-step-dot {\n  width: 26px;\n  height: 26px;\n  border-radius: 50%;\n  background: rgba(255, 255, 255, 0.15);\n  color: rgba(255, 255, 255, 0.5);\n  font-size: 11px;\n  font-weight: 600;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: all var(--transition);\n  flex-shrink: 0;\n}\n.al-step-dot.active {\n  background: var(--sky);\n  color: #fff;\n}\n.al-step-dot.done {\n  background: var(--green);\n  color: #fff;\n}\n.al-step-dot.done span {\n  display: none;\n}\n.al-step-dot.done::after {\n  content: '\u2713';\n  font-size: 14px;\n}\n\/* \u2500\u2500 Source badge header \u2500\u2500 *\/\n.al-source-header {\n  background: var(--surface-alt);\n  border-bottom: 1px solid var(--border-light);\n  padding: 6px 16px;\n  display: flex;\n  justify-content: center;\n}\n.al-source-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  font-family: var(--font-body);\n  font-size: 11px;\n  font-weight: 500;\n  color: var(--text-muted);\n  padding: 3px 10px;\n  border-radius: 12px;\n  background: rgba(27, 152, 224, 0.08);\n  border: 1px solid rgba(27, 152, 224, 0.15);\n}\n.al-source-badge::before {\n  content: '';\n  width: 4px;\n  height: 4px;\n  border-radius: 50%;\n  background: var(--sky);\n}\n\/* \u2500\u2500 Main panel (single column) \u2500\u2500 *\/\n.al-booking-body {\n  display: block;\n}\n.al-main-panel {\n  padding: 16px;\n}\n@media (min-width: 480px) {\n  .al-main-panel {\n    padding: 20px 24px;\n  }\n}\n\/* \u2500\u2500 UPDATED: Selected slot banner - Step 1 \u2500\u2500 *\/\n.al-selected-banner {\n  display: none;\n  align-items: center;\n  gap: 12px;\n  background: #E6F4FC;\n  border: 1px solid #B8DCEF;\n  border-radius: var(--radius-sm);\n  padding: 12px 16px;\n  margin-bottom: 16px;\n}\n.al-sb-icon {\n  color: var(--navy-mid);\n  flex-shrink: 0;\n  display: flex;\n  align-items: center;\n}\n.al-sb-text {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  flex: 0 0 auto;\n  min-width: 0;\n}\n.al-sb-date {\n  font-family: var(--font-body);\n  font-size: 14px;\n  font-weight: 700;\n  color: var(--navy-deep);\n  line-height: 1.3;\n}\n.al-sb-time {\n  font-family: var(--font-body);\n  font-size: 12px;\n  color: var(--text-secondary);\n  line-height: 1.3;\n}\n.al-sb-separator {\n  display: none;\n}\n.al-sb-change-btn {\n  padding: 0;\n  background: none;\n  border: none;\n  color: var(--sky);\n  font-family: var(--font-body);\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all var(--transition);\n  white-space: nowrap;\n  text-decoration: underline;\n  margin-left: 8px;\n}\n.al-sb-change-btn:hover {\n  color: var(--navy-mid);\n}\n.al-sb-continue-btn {\n  padding: 8px 24px;\n  font-size: 14px;\n  background: var(--sky);\n  border: none;\n  margin-left: auto;\n}\n.al-sb-continue-btn:hover {\n  background: #158fcf;\n}\n\/* \u2500\u2500 Calendar section \u2500\u2500 *\/\n.al-calendar-section {\n  margin-bottom: 16px;\n}\n.al-month-nav {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 12px;\n  gap: 10px;\n}\n.al-month-tabs {\n  display: flex;\n  gap: 6px;\n  flex: 1;\n}\n.al-month-tab-btn {\n  padding: 6px 12px;\n  border-radius: 16px;\n  border: 1.5px solid var(--border);\n  background: transparent;\n  font-family: var(--font-body);\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  color: var(--text-muted);\n  transition: all var(--transition);\n}\n.al-month-tab-btn.active {\n  background: var(--navy-deep);\n  border-color: var(--navy-deep);\n  color: #fff;\n}\n.al-month-nav-btns {\n  display: flex;\n  gap: 6px;\n}\n.al-nav-btn {\n  width: 32px;\n  height: 32px;\n  border: 1.5px solid var(--border);\n  background: var(--surface);\n  border-radius: var(--radius-sm);\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: var(--text-secondary);\n  font-size: 18px;\n  transition: all var(--transition);\n}\n.al-nav-btn:hover:not(:disabled) {\n  background: var(--sky-light);\n  border-color: var(--sky);\n}\n.al-nav-btn:disabled {\n  opacity: 0.3;\n  cursor: not-allowed;\n}\n\/* \u2500\u2500 Calendar grid \u2500\u2500 *\/\n.al-cal-grid {\n  width: 100%;\n  border-collapse: separate;\n  border-spacing: 0;\n}\n.al-cal-grid thead th {\n  text-align: center;\n  font-family: var(--font-body);\n  font-size: 10px;\n  font-weight: 600;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  color: var(--text-muted);\n  padding-bottom: 8px;\n}\n.al-cal-grid tbody td {\n  text-align: center;\n  padding: 2px;\n}\n.al-day-cell {\n  width: 100%;\n  aspect-ratio: 1;\n  max-width: 42px;\n  margin: 0 auto;\n  border-radius: var(--radius-sm);\n  font-family: var(--font-body);\n  font-size: 13px;\n  font-weight: 400;\n  color: var(--text-muted);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: default;\n  position: relative;\n  transition: background var(--transition);\n}\n.al-day-cell.has-slots {\n  color: var(--navy-deep);\n  font-weight: 600;\n  cursor: pointer;\n}\n.al-day-cell.has-slots:hover {\n  background: var(--sky-light);\n}\n.al-day-cell.selected {\n  background: var(--navy-deep) !important;\n  color: #fff !important;\n}\n.al-day-cell.today {\n  border: 2px solid var(--sky);\n  color: var(--navy-mid);\n  font-weight: 600;\n}\n.al-day-cell.past {\n  opacity: 0.3;\n}\n.al-slot-dot {\n  position: absolute;\n  bottom: 3px;\n  left: 50%;\n  transform: translateX(-50%);\n  width: 4px;\n  height: 4px;\n  border-radius: 50%;\n  background: var(--sky);\n}\n.al-day-cell.selected .al-slot-dot {\n  background: rgba(255, 255, 255, 0.6);\n}\n\/* \u2500\u2500 Slots section \u2500\u2500 *\/\n.al-slots-section {\n  margin-bottom: 16px;\n  padding-top: 16px;\n}\n.al-slots-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 10px;\n  gap: 10px;\n}\n.al-slots-label {\n  font-family: var(--font-body);\n  font-size: 10px;\n  font-weight: 600;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  color: var(--text-muted);\n}\n.al-slots-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(85px, 1fr));\n  gap: 8px;\n  margin-bottom: 10px;\n}\n.al-slot-btn {\n  padding: 9px 6px;\n  border: 1.5px solid var(--sky);\n  border-radius: var(--radius-sm);\n  background: transparent;\n  color: var(--navy-mid);\n  font-family: var(--font-body);\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all var(--transition);\n}\n.al-slot-btn:hover:not(.taken) {\n  background: var(--sky);\n  color: #fff;\n}\n.al-slot-btn.selected-slot {\n  background: var(--navy-deep);\n  border-color: var(--navy-deep);\n  color: #fff;\n}\n.al-slot-btn.taken {\n  border-color: var(--border);\n  color: var(--text-muted);\n  cursor: not-allowed;\n  opacity: 0.45;\n  text-decoration: line-through;\n}\n.al-slots-empty {\n  font-family: var(--font-body);\n  font-size: 13px;\n  color: var(--text-muted);\n  padding: 8px 0;\n}\n.al-tz-note {\n  font-family: var(--font-body);\n  font-size: 11px;\n  color: var(--text-muted);\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n.al-tz-icon {\n  font-size: 13px;\n}\n\/* \u2500\u2500 Call info \u2500\u2500 *\/\n.al-call-info {\n  padding: 16px;\n  background: var(--surface-alt);\n  border-radius: var(--radius-sm);\n  border: 1px solid var(--border-light);\n}\n.al-call-desc {\n  font-family: var(--font-body);\n  font-size: 13px;\n  color: var(--text-secondary);\n  line-height: 1.6;\n  margin-bottom: 12px;\n}\n.al-call-features {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n}\n.al-feature {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  font-family: var(--font-body);\n  font-size: 12px;\n  color: var(--text-secondary);\n  padding: 4px 10px;\n  background: rgba(27, 152, 224, 0.08);\n  border-radius: 12px;\n}\n.al-feature-icon {\n  font-size: 13px;\n}\n\/* \u2500\u2500 Loading \u2500\u2500 *\/\n.al-loading {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  padding: 24px 0;\n  justify-content: center;\n  color: var(--text-muted);\n  font-family: var(--font-body);\n  font-size: 13px;\n}\n.al-spinner {\n  width: 16px;\n  height: 16px;\n  border: 2px solid var(--border);\n  border-top-color: var(--sky);\n  border-radius: 50%;\n  animation: al-spin 0.7s linear infinite;\n}\n@keyframes al-spin {\n  to {\n    transform: rotate(360deg);\n  }\n}\n\/* \u2500\u2500 Error state \u2500\u2500 *\/\n.al-cal-error {\n  padding: 32px 16px;\n  text-align: center;\n  color: var(--text-muted);\n  font-family: var(--font-body);\n  font-size: 13px;\n  line-height: 1.6;\n}\n.al-cal-error-icon {\n  font-size: 24px;\n  margin-bottom: 10px;\n  color: var(--amber);\n}\n\/* \u2500\u2500 Buttons \u2500\u2500 *\/\n.al-btn-primary {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  padding: 11px 20px;\n  background: var(--sky);\n  color: #fff;\n  border: none;\n  border-radius: var(--radius-sm);\n  font-family: var(--font-display);\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: all var(--transition);\n  letter-spacing: -0.01em;\n  text-decoration: none;\n}\n.al-btn-primary:hover:not(:disabled) {\n  background: #158fcf;\n}\n.al-btn-primary:active:not(:disabled) {\n  transform: scale(0.98);\n}\n.al-btn-primary:disabled {\n  background: var(--border);\n  color: var(--text-muted);\n  cursor: not-allowed;\n  opacity: 0.6;\n}\n.al-btn-secondary {\n  padding: 10px 18px;\n  background: transparent;\n  color: var(--text-secondary);\n  border: 1.5px solid var(--border);\n  border-radius: var(--radius-sm);\n  font-family: var(--font-body);\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all var(--transition);\n}\n.al-btn-secondary:hover {\n  border-color: var(--navy-mid);\n  color: var(--navy-deep);\n}\n\/* \u2500\u2500 Step 2: Form \u2500\u2500 *\/\n.al-form-panel {\n  display: none;\n  padding: 16px 16px 20px;\n}\n.al-form-panel.visible {\n  display: block;\n}\n@media (min-width: 480px) {\n  .al-form-panel {\n    padding: 20px 24px 24px;\n  }\n}\n\/* \u2500\u2500 UPDATED: Slot recap - Step 2 \u2500\u2500 *\/\n.al-slot-recap {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 12px;\n  padding: 16px;\n  background: #E8F4F8;\n  border-radius: 8px;\n  margin-bottom: 24px;\n}\n.al-slot-info {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n.al-slot-recap-icon {\n  color: var(--navy-mid);\n  flex-shrink: 0;\n  display: flex;\n  align-items: center;\n}\n.al-slot-recap-text {\n  flex: 0 0 auto;\n  min-width: 0;\n}\n.al-slot-recap-date {\n  font-family: var(--font-body);\n  font-size: 14px;\n  font-weight: 700;\n  color: var(--navy-deep);\n  line-height: 1.3;\n}\n.al-slot-recap-time {\n  font-family: var(--font-body);\n  font-size: 12px;\n  color: var(--text-secondary);\n  line-height: 1.3;\n}\n.al-slot-recap-change {\n  font-family: var(--font-body);\n  font-size: 13px;\n  color: var(--sky);\n  text-decoration: underline;\n  cursor: pointer;\n  background: none;\n  border: none;\n  white-space: nowrap;\n  font-weight: 600;\n  padding: 0;\n  margin-left: 8px;\n  transition: all var(--transition);\n}\n.al-slot-recap-change:hover {\n  color: var(--navy-mid);\n}\n.al-form-row {\n  display: grid;\n  grid-template-columns: 1fr;\n  gap: 12px;\n  margin-bottom: 12px;\n}\n@media (min-width: 480px) {\n  .al-form-row {\n    grid-template-columns: 1fr 1fr;\n  }\n}\n.al-form-row.al-form-row-3 {\n  grid-template-columns: 1fr;\n}\n@media (min-width: 600px) {\n  .al-form-row.al-form-row-3 {\n    grid-template-columns: 1fr 1fr 1fr;\n  }\n}\n.al-form-group {\n  margin-bottom: 0;\n}\n.al-form-group label {\n  display: block;\n  font-family: var(--font-body);\n  font-size: 11px;\n  font-weight: 600;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  color: var(--text-muted);\n  margin-bottom: 5px;\n}\n.al-form-group label .req {\n  color: var(--sky);\n}\n.al-form-group input,\n.al-form-group textarea {\n  width: 100%;\n  padding: 9px 12px;\n  border: 1.5px solid var(--border);\n  border-radius: var(--radius-sm);\n  font-family: var(--font-body);\n  font-size: 14px;\n  color: var(--text-primary);\n  background: var(--surface);\n  outline: none;\n  transition: all var(--transition);\n}\n.al-form-group input:focus,\n.al-form-group textarea:focus {\n  border-color: var(--sky);\n  box-shadow: 0 0 0 3px rgba(27, 152, 224, 0.1);\n}\n.al-form-group textarea {\n  resize: vertical;\n  min-height: 80px;\n  line-height: 1.5;\n  height: 40px !important;\n}\n.al-char-count {\n  font-family: var(--font-body);\n  font-size: 11px;\n  color: var(--text-muted);\n  text-align: right;\n  margin-top: 4px;\n}\n.al-form-hint {\n  font-family: var(--font-body);\n  font-size: 11px;\n  color: var(--text-muted);\n  margin-top: 4px;\n}\n.al-privacy-notice {\n  font-family: var(--font-body);\n  font-size: 11px;\n  color: var(--text-muted);\n  line-height: 1.5;\n  margin: 16px 0 12px;\n  padding: 10px 12px;\n  background: var(--surface-alt);\n  border-radius: var(--radius-sm);\n  border: 1px solid var(--border-light);\n}\n.al-privacy-notice a {\n  color: var(--sky);\n  text-decoration: underline;\n}\n.al-privacy-notice a:hover {\n  color: var(--navy-mid);\n}\n.al-form-actions {\n  display: flex;\n  gap: 10px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n.al-btn-submit {\n  width: 100%;\n  min-width: 140px;\n}\n.al-race-error {\n  display: none;\n  align-items: center;\n  gap: 10px;\n  background: #fef2f2;\n  border: 1px solid #fca5a5;\n  border-radius: var(--radius-sm);\n  padding: 12px 14px;\n  font-family: var(--font-body);\n  font-size: 13px;\n  color: var(--red);\n  margin-top: 16px;\n  flex-wrap: wrap;\n}\n.al-race-error.visible {\n  display: flex;\n}\n.al-race-btn {\n  margin-left: auto;\n  background: var(--red);\n  color: #fff;\n  border: none;\n  padding: 6px 12px;\n  border-radius: var(--radius-sm);\n  cursor: pointer;\n  font-size: 12px;\n  white-space: nowrap;\n  font-family: var(--font-body);\n  font-weight: 500;\n}\n.al-race-notice {\n  font-family: var(--font-body);\n  font-size: 11px;\n  color: var(--text-muted);\n  margin-top: 10px;\n  line-height: 1.5;\n}\n.al-submit-spinner {\n  display: none;\n  width: 16px;\n  height: 16px;\n  border: 2px solid rgba(255, 255, 255, 0.35);\n  border-top-color: #fff;\n  border-radius: 50%;\n  animation: al-spin 0.6s linear infinite;\n}\n.al-submitting .al-submit-spinner {\n  display: block;\n}\n.al-submitting .al-submit-label {\n  display: none;\n}\n\/* \u2500\u2500 Step 3: Confirmation \u2500\u2500 *\/\n.al-confirm-panel {\n  display: none;\n  flex-direction: column;\n  align-items: center;\n  padding: 40px 24px;\n  text-align: center;\n}\n.al-confirm-panel.visible {\n  display: flex;\n}\n.al-confirm-icon {\n  width: 60px;\n  height: 60px;\n  background: var(--green-light);\n  border-radius: 50%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 28px;\n  color: var(--green);\n  margin-bottom: 18px;\n}\n.al-confirm-panel h2 {\n  font-family: var(--font-heading);\n  font-size: 24px;\n  font-weight: 700;\n  color: var(--navy-deep);\n  letter-spacing: -0.02em;\n  margin-bottom: 10px;\n}\n.al-confirm-panel p {\n  font-family: var(--font-body);\n  font-size: 14px;\n  color: var(--text-secondary);\n  max-width: 400px;\n  margin-bottom: 8px;\n  line-height: 1.6;\n}\n.al-confirm-slot-box {\n  background: var(--surface-alt);\n  border: 1px solid var(--border);\n  border-radius: var(--radius-sm);\n  padding: 16px 24px;\n  margin: 20px 0;\n}\n.al-csb-date {\n  font-family: var(--font-heading);\n  font-size: 18px;\n  font-weight: 700;\n  color: var(--navy-deep);\n  letter-spacing: -0.01em;\n}\n.al-csb-time {\n  font-family: var(--font-body);\n  font-size: 13px;\n  color: var(--text-secondary);\n  margin-top: 4px;\n}\n.al-confirm-note {\n  font-size: 12px !important;\n  margin-top: 8px;\n}\n.al-confirm-actions {\n  margin-top: 24px;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 12px;\n}\n.al-redirect-notice {\n  font-family: var(--font-body);\n  font-size: 12px;\n  color: var(--text-muted);\n}\n.al-redirect-notice span {\n  font-weight: 600;\n  color: var(--sky);\n}\n@media (max-width: 640px) {\n  .al-slot-recap {\n    display: grid;\n    grid-template-columns: 24px 1fr;\n    column-gap: 12px;\n    row-gap: 8px;\n    align-items: start;\n    justify-content: start;\n  }\n  .al-slot-recap-icon {\n    grid-column: 1;\n    grid-row: 1 \/ span 2;\n    align-self: start;\n  }\n  .al-slot-recap-text {\n    grid-column: 2;\n    grid-row: 1;\n  }\n  .al-slot-recap-change {\n    grid-column: 2;\n    grid-row: 2;\n    margin-left: 0;\n    justify-self: start;\n  }\n}\n@media (max-width: 640px) {\n  .al-selected-banner {\n    flex-wrap: wrap;\n    align-items: flex-start;\n  }\n  .al-sb-icon {\n    flex: 0 0 24px;\n  }\n  .al-sb-text {\n    flex: 1 1 calc(64%);\n    min-width: 0;\n  }\n  .al-sb-change-btn {\n    margin-left: 36px;\n    order: 2;\n  }\n  .al-sb-continue-btn {\n    order: 3;\n    flex: 0 0 100%;\n    width: fit-content;\n    margin: 8px auto 0;\n  }\n}\n.al-top-bar.al-top-bar-no-steps {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 16px;\n  min-height: 72px;\n}\n.al-top-bar.al-top-bar-no-steps .al-top-bar-heading {\n  margin: 0;\n  flex: 0 0 auto;\n}\n.al-top-bar.al-top-bar-no-steps .al-top-bar-sub {\n  margin: 0;\n  text-align: right;\n  line-height: 1.35;\n}\n#alStepTab1,\n#alStepTab2,\n#alStepTab3,\n.al-step-tabs,\n.al-steps,\n.al-step-circles {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .al-top-bar.al-top-bar-no-steps {\n    align-items: flex-start;\n    flex-direction: column;\n    min-height: 72px;\n    padding-top: 10px;\n  }\n  .al-top-bar.al-top-bar-no-steps .al-top-bar-sub {\n    flex: none;\n    text-align: left;\n  }\n}\n<\/style><\/div><\/div><div class=\"wpb_wrapper td_block_wrap vc_raw_html tdi_9 \"><div class=\"td-fix-index\"><!-- Google Fonts -->\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link\r\n  href=\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@600;700&family=Inter:wght@400;500;600;700&display=swap\"\r\n  rel=\"stylesheet\">\r\n\r\n<div class=\"al-booking-wrap\">\r\n  <div class=\"al-booking-card\">\r\n\r\n    <!-- Compact header with steps -->\r\n    <div class=\"al-top-bar\">\r\n      <div class=\"al-top-bar-content\">\r\n        <span class=\"al-top-bar-heading\">Book a Discovery Call<\/span>\r\n        <span class=\"al-top-bar-sub\" style=\"display:none\"><\/span>\r\n      <\/div>\r\n      <div class=\"al-steps-inline\">\r\n        <div class=\"al-step-dot active\" id=\"alStepTab1\" title=\"Choose a time\"><span>1<\/span><\/div>\r\n        <div class=\"al-step-dot\" id=\"alStepTab2\" title=\"Your details\"><span>2<\/span><\/div>\r\n        <div class=\"al-step-dot\" id=\"alStepTab3\" title=\"Confirmed\"><span>3<\/span><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Source badge in header -->\r\n    <div class=\"al-source-header\" id=\"alSourceHeader\" style=\"display:none\">\r\n      <div class=\"al-source-badge\" id=\"alSourceBadge\"><\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2500\u2500 Step 1: Calendar \u2500\u2500 -->\r\n    <div id=\"alStep1\">\r\n      <div class=\"al-booking-body\">\r\n\r\n        <div class=\"al-main-panel\">\r\n\r\n          <!-- Selected slot banner - UPDATED -->\r\n          <div class=\"al-selected-banner\" id=\"alSelectedBanner\" style=\"display:none\">\r\n            <div class=\"al-sb-icon\">\r\n              <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n                <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"2\" \/>\r\n                <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\" stroke=\"currentColor\" stroke-width=\"2\" \/>\r\n                <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" \/>\r\n                <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" \/>\r\n              <\/svg>\r\n            <\/div>\r\n            <div class=\"al-sb-text\">\r\n              <span class=\"al-sb-date\" id=\"alSbDate\"><\/span>\r\n              <span class=\"al-sb-time\" id=\"alSbTime\"><\/span>\r\n            <\/div>\r\n            <button class=\"al-sb-change-btn\" onclick=\"alClearSelection()\">Change<\/button>\r\n            <button class=\"al-btn-primary al-sb-continue-btn\" onclick=\"alGoToStep2()\">\r\n              Continue\r\n            <\/button>\r\n          <\/div>\r\n\r\n          <!-- Calendar -->\r\n          <div class=\"al-calendar-section\">\r\n            <div class=\"al-month-nav\">\r\n              <div class=\"al-month-tabs\" id=\"alMonthTabs\"><\/div>\r\n              <div class=\"al-month-nav-btns\">\r\n                <button class=\"al-nav-btn\" id=\"alPrevMonth\" title=\"Previous\">\u2039<\/button>\r\n                <button class=\"al-nav-btn\" id=\"alNextMonth\" title=\"Next\">\u203a<\/button>\r\n              <\/div>\r\n            <\/div>\r\n\r\n            <div id=\"alCalendarMount\">\r\n              <div class=\"al-loading\">\r\n                <div class=\"al-spinner\"><\/div>\r\n                Loading availability\u2026\r\n              <\/div>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <!-- Available slots -->\r\n          <div class=\"al-slots-section\" id=\"alSlotsSection\" style=\"display:none\">\r\n            <div class=\"al-slots-header\">\r\n              <span class=\"al-slots-label\">Available times<\/span>\r\n            <\/div>\r\n            <div id=\"alSlotsMount\"><\/div>\r\n            <div class=\"al-tz-note\">\r\n              <span class=\"al-tz-icon\">\ud83c\udf0d<\/span>\r\n              <span id=\"alTzDisplay\"><\/span>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <!-- Call info (below calendar on mobile) -->\r\n          <div class=\"al-call-info\">\r\n            <p class=\"al-call-desc\">A focused 30-minute conversation to explore where you are, where you want to get to,\r\n              and what's in the way.<\/p>\r\n            <div class=\"al-call-features\">\r\n              <span class=\"al-feature\"><span class=\"al-feature-icon\">\ud83d\udd50<\/span>30 min<\/span>\r\n              <span class=\"al-feature\"><span class=\"al-feature-icon\">\ud83d\udda5\ufe0f<\/span>Online<\/span>\r\n              <span class=\"al-feature\"><span class=\"al-feature-icon\">\ud83d\udcc5<\/span>Calendar invite<\/span>\r\n              <span class=\"al-feature\"><span class=\"al-feature-icon\">\u2709\ufe0f<\/span>Prep notes<\/span>\r\n            <\/div>\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2500\u2500 Step 2: Form \u2500\u2500 -->\r\n    <div id=\"alStep2\" class=\"al-form-panel\">\r\n\r\n      <!-- UPDATED SLOT RECAP -->\r\n      <div class=\"al-slot-recap\" id=\"alFormSlotRecap\">\r\n        <div class=\"al-slot-recap-icon\">\r\n          <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n            <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"2\" \/>\r\n            <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\" stroke=\"currentColor\" stroke-width=\"2\" \/>\r\n            <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" \/>\r\n            <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" \/>\r\n          <\/svg>\r\n        <\/div>\r\n        <div class=\"al-slot-recap-text\">\r\n          <div class=\"al-slot-recap-date\" id=\"alFsrDate\"><\/div>\r\n          <div class=\"al-slot-recap-time\" id=\"alFsrTime\"><\/div>\r\n        <\/div>\r\n        <button class=\"al-slot-recap-change\" onclick=\"alGoToStep1()\">Change<\/button>\r\n      <\/div>\r\n\r\n      <div class=\"al-form-row al-form-row-3\">\r\n        <div class=\"al-form-group\">\r\n          <label>First name <span class=\"req\">*<\/span><\/label>\r\n          <input type=\"text\" id=\"alFFirstName\" autocomplete=\"given-name\" placeholder=\"Jane\" oninput=\"alValidateForm()\">\r\n        <\/div>\r\n        <div class=\"al-form-group\">\r\n          <label>Last name <span class=\"req\">*<\/span><\/label>\r\n          <input type=\"text\" id=\"alFLastName\" autocomplete=\"family-name\" placeholder=\"Smith\" oninput=\"alValidateForm()\">\r\n        <\/div>\r\n        <div class=\"al-form-group\">\r\n          <label>Phone<\/label>\r\n          <input type=\"tel\" id=\"alFPhone\" autocomplete=\"tel\" placeholder=\"+44 7700 000000\" oninput=\"alValidateForm()\">\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"al-form-row\">\r\n        <div class=\"al-form-group\">\r\n          <label>Email address <span class=\"req\">*<\/span><\/label>\r\n          <input type=\"email\" id=\"alFEmail\" autocomplete=\"email\" placeholder=\"jane@company.com\"\r\n            oninput=\"alValidateForm()\">\r\n          <div class=\"al-form-hint\">Your calendar invitation will be sent here.<\/div>\r\n        <\/div>\r\n        <div class=\"al-form-group\">\r\n          <label>Company <span class=\"req\">*<\/span><\/label>\r\n          <input type=\"text\" id=\"alFCompany\" autocomplete=\"organization\" placeholder=\"Acme Ltd\"\r\n            oninput=\"alValidateForm()\">\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- CONTEXT FIELD - OPTIONAL -->\r\n      <div class=\"al-form-group\">\r\n        <label>What would you like to cover?<\/label>\r\n        <textarea id=\"alFContext\" rows=\"3\" maxlength=\"400\"\r\n          placeholder=\"A brief note on where you are with your US plans and what you'd like to explore on the call\u2026\"><\/textarea>\r\n        <div class=\"al-char-count\"><span id=\"alCharCount\">0<\/span> \/ 400<\/div>\r\n      <\/div>\r\n\r\n      <div class=\"al-race-error\" id=\"alRaceError\">\r\n        <strong>That slot was just taken.<\/strong> Please choose another time.\r\n        <button onclick=\"alGoToStep1(true)\" class=\"al-race-btn\">Pick another time<\/button>\r\n      <\/div>\r\n\r\n      <!-- PRIVACY NOTICE -->\r\n      <div class=\"al-privacy-notice\">\r\n        By confirming your booking, you agree to our <a href=\"https:\/\/allentra.net\/usa\/privacy-policy\/\" target=\"_blank\"\r\n          rel=\"noopener\">Privacy Policy<\/a>. We'll process your information to arrange the call and send related\r\n        communications.\r\n      <\/div>\r\n\r\n      <div class=\"al-form-actions\">\r\n        <button class=\"al-btn-primary al-btn-submit\" id=\"alSubmitBtn\" onclick=\"alSubmitBooking()\" disabled>\r\n          <span class=\"al-submit-label\">Confirm booking<\/span>\r\n          <div class=\"al-submit-spinner\"><\/div>\r\n        <\/button>\r\n      <\/div>\r\n\r\n      <div class=\"al-race-notice\">\r\n        If another person books the same slot before you confirm, you'll be asked to choose a different time.\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n    <!-- \u2500\u2500 Step 3: Confirmation \u2500\u2500 -->\r\n    <div id=\"alStep3\" class=\"al-confirm-panel\">\r\n      <div class=\"al-confirm-icon\">\u2713<\/div>\r\n      <h2>You're booked in<\/h2>\r\n      <p>A calendar invitation is on its way to <strong id=\"alConfirmEmail\"><\/strong>.<\/p>\r\n      <p>We'll also send a short note with some things to think about before the call.<\/p>\r\n      <div class=\"al-confirm-slot-box\">\r\n        <div class=\"al-csb-date\" id=\"alConfirmDate\"><\/div>\r\n        <div class=\"al-csb-time\" id=\"alConfirmTime\"><\/div>\r\n      <\/div>\r\n      <p class=\"al-confirm-note\">Need to reschedule? Reply to the confirmation email.<\/p>\r\n\r\n      <!-- REDIRECT SECTION -->\r\n      <div class=\"al-confirm-actions\">\r\n        <a href=\"https:\/\/allentra.net\/usa\/\" class=\"al-btn-primary\">Return to Allentra<\/a>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n  \/\/ \u2500\u2500 Configuration \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const AL_CONFIG = {\r\n    SLOTS_WEBHOOK: 'https:\/\/hook.eu2.make.com\/yy0iyufrgak8xihdkkfmwy130actnu9o',\r\n    MAIN_CAL_WEBHOOK: 'https:\/\/hook.eu2.make.com\/2rbsa52u8yercet6cf6vjgvbp8pjo6vo',\r\n    BOOK_WEBHOOK: 'https:\/\/hook.eu2.make.com\/6d5p2rxxgck1o4pk54nxy9956xldbrrb',\r\n    BUFFER_BEFORE: 15,\r\n    BUFFER_AFTER: 30,\r\n    MAX_SLOTS: 10,\r\n    SOURCE_LABELS: {\r\n      'homepage-hero': 'Homepage enquiry',\r\n      'services-entry': 'Market entry enquiry',\r\n      'services-growth': 'Growth acceleration enquiry',\r\n      'health-check': 'Health check enquiry',\r\n      'footer-cta': 'General enquiry',\r\n    }\r\n  };\r\n\r\n  \/\/ \u2500\u2500 State \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const alState = {\r\n    availableMonths: [],\r\n    viewMonth: null,\r\n    slots: {},\r\n    selectedDate: null,\r\n    selectedSlot: null,\r\n    sourceId: null,\r\n    redirectTimer: null,\r\n  };\r\n\r\n  \/\/ \u2500\u2500 Init \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  document.addEventListener('DOMContentLoaded', () => {\r\n    const params = new URLSearchParams(window.location.search);\r\n    alState.sourceId = params.get('src') || params.get('source') || null;\r\n\r\n    if (alState.sourceId) {\r\n      const header = document.getElementById('alSourceHeader');\r\n      const badge = document.getElementById('alSourceBadge');\r\n      if (header) header.style.display = 'block';\r\n      if (badge) badge.textContent = AL_CONFIG.SOURCE_LABELS[alState.sourceId] || alState.sourceId;\r\n    }\r\n\r\n    const tzDisplay = document.getElementById('alTzDisplay');\r\n    if (tzDisplay) {\r\n      tzDisplay.textContent = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n    }\r\n\r\n    const now = new Date();\r\n    alState.availableMonths = [\r\n      new Date(now.getFullYear(), now.getMonth(), 1),\r\n      new Date(now.getFullYear(), now.getMonth() + 1, 1),\r\n    ];\r\n    alState.viewMonth = alState.availableMonths[0];\r\n\r\n    alBuildMonthTabs();\r\n\r\n    const prevBtn = document.getElementById('alPrevMonth');\r\n    const nextBtn = document.getElementById('alNextMonth');\r\n    const contextEl = document.getElementById('alFContext');\r\n\r\n    if (prevBtn) prevBtn.addEventListener('click', () => alShiftMonth(-1));\r\n    if (nextBtn) nextBtn.addEventListener('click', () => alShiftMonth(1));\r\n\r\n    if (contextEl) {\r\n      contextEl.addEventListener('input', function () {\r\n        const charCount = document.getElementById('alCharCount');\r\n        if (charCount) charCount.textContent = this.value.length;\r\n      });\r\n    }\r\n\r\n    ['alFFirstName', 'alFLastName', 'alFEmail', 'alFCompany'].forEach(id => {\r\n      const el = document.getElementById(id);\r\n      if (el) el.addEventListener('input', alValidateForm);\r\n    });\r\n\r\n    alApplyHeaderLayout();\r\n    alFetchSlots();\r\n  });\r\n\r\n  \/\/ \u2500\u2500 Header UI \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  function alApplyHeaderLayout() {\r\n    const heading = document.querySelector('.al-top-bar-heading');\r\n    const sub = document.querySelector('.al-top-bar-sub');\r\n    const topBar = document.querySelector('.al-top-bar');\r\n\r\n    if (topBar) {\r\n      topBar.classList.add('al-top-bar-no-steps');\r\n    }\r\n\r\n    if (heading) {\r\n      heading.textContent = 'Book a Discovery Call';\r\n    }\r\n\r\n    if (sub) {\r\n      sub.textContent = '';\r\n      sub.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  function alSetHeaderDetailsMode() {\r\n    const heading = document.querySelector('.al-top-bar-heading');\r\n    const sub = document.querySelector('.al-top-bar-sub');\r\n\r\n    if (heading) {\r\n      heading.textContent = 'Your Details';\r\n    }\r\n\r\n    if (sub) {\r\n      sub.textContent = 'Calendar invitation will be sent to your email';\r\n      sub.style.display = 'inline-flex';\r\n    }\r\n  }\r\n\r\n  function alSetHeaderBookingMode() {\r\n    const heading = document.querySelector('.al-top-bar-heading');\r\n    const sub = document.querySelector('.al-top-bar-sub');\r\n\r\n    if (heading) {\r\n      heading.textContent = 'Book a Discovery Call';\r\n    }\r\n\r\n    if (sub) {\r\n      sub.textContent = '';\r\n      sub.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  \/\/ \u2500\u2500 Form validation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  function alValidateForm() {\r\n    const firstName = document.getElementById('alFFirstName')?.value.trim() || '';\r\n    const lastName = document.getElementById('alFLastName')?.value.trim() || '';\r\n    const emailEl = document.getElementById('alFEmail');\r\n    const company = document.getElementById('alFCompany')?.value.trim() || '';\r\n    const submitBtn = document.getElementById('alSubmitBtn');\r\n\r\n    if (!emailEl || !submitBtn) return;\r\n\r\n    const email = emailEl.value.trim();\r\n    const emailValid = emailEl.checkValidity() && email.length > 0;\r\n\r\n    const isValid = !!(firstName && lastName && company && emailValid);\r\n    submitBtn.disabled = !isValid;\r\n  }\r\n\r\n  \/\/ \u2500\u2500 Fetch & filter \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  async function alFetchSlots() {\r\n    try {\r\n      const [availRes, mainRes] = await Promise.all([\r\n        fetch(AL_CONFIG.SLOTS_WEBHOOK, {\r\n          method: 'POST',\r\n          headers: { 'Content-Type': 'application\/json' },\r\n          body: JSON.stringify({})\r\n        }),\r\n        fetch(AL_CONFIG.MAIN_CAL_WEBHOOK, {\r\n          method: 'POST',\r\n          headers: { 'Content-Type': 'application\/json' },\r\n          body: JSON.stringify({})\r\n        }),\r\n      ]);\r\n\r\n      if (!availRes.ok) throw new Error(`Availability: ${availRes.status}`);\r\n      if (!mainRes.ok) throw new Error(`Main calendar: ${mainRes.status}`);\r\n\r\n      const availSlots = await availRes.json();\r\n      const mainEvents = await mainRes.json();\r\n\r\n      alState.slots = alFilterAndOrganise(availSlots, mainEvents);\r\n\r\n    } catch (err) {\r\n      console.error('alFetchSlots:', err);\r\n      const mount = document.getElementById('alCalendarMount');\r\n      if (mount) {\r\n        mount.innerHTML = `\r\n        <div class=\"al-cal-error\">\r\n          <div class=\"al-cal-error-icon\">\u26a0<\/div>\r\n          Could not load availability. Please refresh or <a href=\"mailto:team@allentra.net\">contact us directly<\/a>.\r\n        <\/div>`;\r\n      }\r\n      return;\r\n    }\r\n\r\n    alRenderCalendar();\r\n  }\r\n\r\n  function alFilterAndOrganise(availSlots, mainEvents) {\r\n    const BEFORE_MS = AL_CONFIG.BUFFER_BEFORE * 60000;\r\n    const AFTER_MS = AL_CONFIG.BUFFER_AFTER * 60000;\r\n\r\n    const mainMs = (mainEvents || []).map(e => ({\r\n      start: new Date(e.start || e.start_iso).getTime(),\r\n      end: new Date(e.end || e.end_iso).getTime(),\r\n    }));\r\n\r\n    \/\/ Remove the .slice here - filter all slots first\r\n    const passing = (availSlots || []).filter(slot => {\r\n      const s = new Date(slot.start || slot.start_iso).getTime();\r\n      const e = new Date(slot.end || slot.end_iso).getTime();\r\n      return !mainMs.some(ev => ev.start < (e + AFTER_MS) && ev.end > (s - BEFORE_MS));\r\n    });\r\n\r\n    const organised = {};\r\n    passing.forEach(slot => {\r\n      const dt = new Date(slot.start || slot.start_iso);\r\n      const key = alDateKey(dt);\r\n      const time = alLocalTime(dt);\r\n\r\n      if (!organised[key]) organised[key] = [];\r\n      organised[key].push({\r\n        id: slot.id || slot.ID || '',\r\n        time,\r\n        taken: false\r\n      });\r\n    });\r\n\r\n    \/\/ Sort and limit slots PER DAY\r\n    Object.keys(organised).forEach(key => {\r\n      organised[key].sort((a, b) => a.time.localeCompare(b.time));\r\n      \/\/ Limit each day to MAX_SLOTS (optional - remove if you want all slots per day)\r\n      organised[key] = organised[key].slice(0, AL_CONFIG.MAX_SLOTS);\r\n    });\r\n\r\n    return organised;\r\n  }\r\n\r\n  \/\/ \u2500\u2500 Calendar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  function alBuildMonthTabs() {\r\n    const container = document.getElementById('alMonthTabs');\r\n    if (!container) return;\r\n\r\n    container.innerHTML = '';\r\n    alState.availableMonths.forEach((m, i) => {\r\n      const btn = document.createElement('button');\r\n      btn.className = 'al-month-tab-btn' + (i === 0 ? ' active' : '');\r\n      btn.textContent = m.toLocaleDateString('en-GB', { month: 'short', year: 'numeric' });\r\n\r\n      btn.addEventListener('click', () => {\r\n        alState.viewMonth = alState.availableMonths[i];\r\n        document.querySelectorAll('.al-month-tab-btn').forEach((b, j) => {\r\n          b.classList.toggle('active', j === i);\r\n        });\r\n        alRenderCalendar();\r\n        alUpdateNavBtns();\r\n      });\r\n\r\n      container.appendChild(btn);\r\n    });\r\n  }\r\n\r\n  function alShiftMonth(dir) {\r\n    const idx = alState.availableMonths.indexOf(alState.viewMonth) + dir;\r\n    if (idx < 0 || idx >= alState.availableMonths.length) return;\r\n\r\n    alState.viewMonth = alState.availableMonths[idx];\r\n\r\n    document.querySelectorAll('.al-month-tab-btn').forEach((b, j) => {\r\n      b.classList.toggle('active', j === idx);\r\n    });\r\n\r\n    alRenderCalendar();\r\n    alUpdateNavBtns();\r\n  }\r\n\r\n  function alUpdateNavBtns() {\r\n    const idx = alState.availableMonths.indexOf(alState.viewMonth);\r\n    const prevBtn = document.getElementById('alPrevMonth');\r\n    const nextBtn = document.getElementById('alNextMonth');\r\n\r\n    if (prevBtn) prevBtn.disabled = idx <= 0;\r\n    if (nextBtn) nextBtn.disabled = idx >= alState.availableMonths.length - 1;\r\n  }\r\n\r\n  function alRenderCalendar() {\r\n    alUpdateNavBtns();\r\n\r\n    const mount = document.getElementById('alCalendarMount');\r\n    if (!mount) return;\r\n\r\n    const m = alState.viewMonth;\r\n    const year = m.getFullYear();\r\n    const month = m.getMonth();\r\n\r\n    const now = new Date();\r\n    \/\/ Set to start of today at midnight for accurate comparison\r\n    const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n    todayStart.setHours(0, 0, 0, 0);\r\n\r\n    const firstDow = new Date(year, month, 1).getDay();\r\n    const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n    const offset = (firstDow + 6) % 7;\r\n\r\n    let html = `<table class=\"al-cal-grid\"><thead><tr>`;\r\n    ['M', 'T', 'W', 'T', 'F', 'S', 'S'].forEach(d => {\r\n      html += `<th>${d}<\/th>`;\r\n    });\r\n    html += `<\/tr><\/thead><tbody><tr>`;\r\n\r\n    let cell = 0;\r\n    for (let i = 0; i < offset; i++) {\r\n      html += `<td><\/td>`;\r\n      cell++;\r\n    }\r\n\r\n    for (let day = 1; day <= daysInMonth; day++) {\r\n      if (cell && cell % 7 === 0) html += `<\/tr><tr>`;\r\n\r\n      const date = new Date(year, month, day);\r\n      date.setHours(0, 0, 0, 0); \/\/ Normalize to midnight\r\n\r\n      const key = alDateKey(date);\r\n      const isToday = alSameDay(date, todayStart);\r\n      const isPast = date.getTime() < todayStart.getTime(); \/\/ Use timestamp comparison\r\n      const daySlots = alState.slots[key] || [];\r\n      const hasSlots = daySlots.length > 0 && !isPast;\r\n      const isSelected = alState.selectedDate === key;\r\n\r\n      let cls = 'al-day-cell';\r\n      if (isPast) cls += ' past';\r\n      if (isToday) cls += ' today';\r\n      if (hasSlots) cls += ' has-slots';\r\n      if (isSelected) cls += ' selected';\r\n\r\n      const click = hasSlots ? `onclick=\"alSelectDate('${key}')\"` : '';\r\n      const dot = hasSlots ? `<span class=\"al-slot-dot\"><\/span>` : '';\r\n\r\n      html += `<td><div class=\"${cls}\" ${click}>${day}${dot}<\/div><\/td>`;\r\n      cell++;\r\n    }\r\n\r\n    while (cell % 7 !== 0) {\r\n      html += `<td><\/td>`;\r\n      cell++;\r\n    }\r\n\r\n    html += `<\/tr><\/tbody><\/table>`;\r\n    mount.innerHTML = html;\r\n\r\n    if (alState.selectedDate) {\r\n      const sd = new Date(alState.selectedDate + 'T12:00:00');\r\n      if (sd.getMonth() === month && sd.getFullYear() === year) {\r\n        alRenderSlots(alState.selectedDate);\r\n      }\r\n    }\r\n  }\r\n\r\n  function alSelectDate(key) {\r\n    alState.selectedDate = key;\r\n    alState.selectedSlot = null;\r\n    alUpdateBanner();\r\n    alRenderCalendar();\r\n    alRenderSlots(key);\r\n\r\n    const slotsSection = document.getElementById('alSlotsSection');\r\n    if (slotsSection) {\r\n      slotsSection.style.display = 'block';\r\n      slotsSection.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n    }\r\n  }\r\n\r\n  function alRenderSlots(key) {\r\n    const slots = alState.slots[key] || [];\r\n    const mount = document.getElementById('alSlotsMount');\r\n    if (!mount) return;\r\n\r\n    if (!slots.length) {\r\n      mount.innerHTML = `<div class=\"al-slots-empty\">No slots available<\/div>`;\r\n      return;\r\n    }\r\n\r\n    mount.innerHTML = `<div class=\"al-slots-grid\">${slots.map(slot => {\r\n      const isSel = alState.selectedSlot && alState.selectedSlot.id === slot.id;\r\n      let cls = 'al-slot-btn';\r\n      if (slot.taken) cls += ' taken';\r\n      if (isSel) cls += ' selected-slot';\r\n\r\n      const click = slot.taken ? '' : `onclick=\"alSelectSlot('${key}','${slot.time}','${slot.id}')\"`;\r\n\r\n      return `<button class=\"${cls}\" ${click} ${slot.taken ? 'disabled' : ''}>${alFormatTime(slot.time)}<\/button>`;\r\n    }).join('')}<\/div>`;\r\n  }\r\n\r\n  function alSelectSlot(date, time, id) {\r\n    alState.selectedSlot = { date, time, id };\r\n    alRenderSlots(date);\r\n    alUpdateBanner();\r\n  }\r\n\r\n  function alClearSelection() {\r\n    alState.selectedSlot = null;\r\n    alUpdateBanner();\r\n    if (alState.selectedDate) alRenderSlots(alState.selectedDate);\r\n  }\r\n\r\n  function alUpdateBanner() {\r\n    const banner = document.getElementById('alSelectedBanner');\r\n    if (!banner) return;\r\n\r\n    if (alState.selectedSlot) {\r\n      const d = new Date(alState.selectedSlot.date + 'T12:00:00');\r\n      const dateEl = document.getElementById('alSbDate');\r\n      const timeEl = document.getElementById('alSbTime');\r\n\r\n      if (dateEl) {\r\n        dateEl.textContent = d.toLocaleDateString('en-GB', {\r\n          weekday: 'long',\r\n          day: 'numeric',\r\n          month: 'long',\r\n          year: 'numeric'\r\n        });\r\n      }\r\n\r\n      if (timeEl) {\r\n        timeEl.textContent = alFormatTime(alState.selectedSlot.time) + ' \u00b7 30 minutes';\r\n      }\r\n\r\n      banner.style.display = 'flex';\r\n    } else {\r\n      banner.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  \/\/ \u2500\u2500 View navigation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  function alGoToStep2() {\r\n    if (!alState.selectedSlot) return;\r\n\r\n    const d = new Date(alState.selectedSlot.date + 'T12:00:00');\r\n    const dateEl = document.getElementById('alFsrDate');\r\n    const timeEl = document.getElementById('alFsrTime');\r\n\r\n    if (dateEl) {\r\n      dateEl.textContent = d.toLocaleDateString('en-GB', {\r\n        weekday: 'long',\r\n        day: 'numeric',\r\n        month: 'long',\r\n        year: 'numeric'\r\n      });\r\n    }\r\n\r\n    if (timeEl) {\r\n      timeEl.textContent = alFormatTime(alState.selectedSlot.time) + ' \u00b7 30 minutes';\r\n    }\r\n\r\n    const step1 = document.getElementById('alStep1');\r\n    const step2 = document.getElementById('alStep2');\r\n    const raceError = document.getElementById('alRaceError');\r\n\r\n    if (step1) step1.style.display = 'none';\r\n    if (step2) step2.classList.add('visible');\r\n    if (raceError) raceError.classList.remove('visible');\r\n\r\n    alSetHeaderDetailsMode();\r\n    alValidateForm();\r\n    window.scrollTo({ top: 0, behavior: 'smooth' });\r\n  }\r\n\r\n  function alGoToStep1(fromRace) {\r\n    const step2 = document.getElementById('alStep2');\r\n    const step1 = document.getElementById('alStep1');\r\n\r\n    if (step2) step2.classList.remove('visible');\r\n    if (step1) step1.style.display = 'block';\r\n\r\n    alSetHeaderBookingMode();\r\n\r\n    if (fromRace) {\r\n      alState.selectedSlot = null;\r\n      alState.selectedDate = null;\r\n      alUpdateBanner();\r\n\r\n      const slotsSection = document.getElementById('alSlotsSection');\r\n      if (slotsSection) slotsSection.style.display = 'none';\r\n\r\n      alFetchSlots();\r\n    }\r\n  }\r\n\r\n  async function alSubmitBooking() {\r\n    const firstName = document.getElementById('alFFirstName')?.value.trim() || '';\r\n    const lastName = document.getElementById('alFLastName')?.value.trim() || '';\r\n    const emailEl = document.getElementById('alFEmail');\r\n    const company = document.getElementById('alFCompany')?.value.trim() || '';\r\n    const phone = document.getElementById('alFPhone')?.value.trim() || '';\r\n    const context = document.getElementById('alFContext')?.value.trim() || '';\r\n\r\n    if (!alState.selectedSlot) {\r\n      alert('Please select a time slot first.');\r\n      return;\r\n    }\r\n\r\n    if (!firstName || !lastName || !emailEl || !company) {\r\n      alert('Please fill in all required fields.');\r\n      return;\r\n    }\r\n\r\n    const email = emailEl.value.trim();\r\n\r\n    if (!emailEl.checkValidity() || !email) {\r\n      emailEl.reportValidity();\r\n      return;\r\n    }\r\n\r\n    const btn = document.getElementById('alSubmitBtn');\r\n    const raceError = document.getElementById('alRaceError');\r\n\r\n    if (!btn) return;\r\n\r\n    btn.classList.add('al-submitting');\r\n    btn.disabled = true;\r\n    if (raceError) raceError.classList.remove('visible');\r\n\r\n    const payload = {\r\n      slot_id: alState.selectedSlot.id,\r\n      slot_date: alState.selectedSlot.date,\r\n      slot_time: alState.selectedSlot.time,\r\n      first_name: firstName,\r\n      last_name: lastName,\r\n      email,\r\n      company,\r\n      phone,\r\n      context,\r\n      source_id: alState.sourceId,\r\n      tz: Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n      booked_at: new Date().toISOString(),\r\n    };\r\n\r\n    try {\r\n      const res = await fetch(AL_CONFIG.BOOK_WEBHOOK, {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application\/json' },\r\n        body: JSON.stringify(payload),\r\n      });\r\n\r\n      const data = await res.json();\r\n\r\n      if (!res.ok || data.result === 'taken') {\r\n        if (raceError) raceError.classList.add('visible');\r\n        btn.classList.remove('al-submitting');\r\n        btn.disabled = false;\r\n        return;\r\n      }\r\n\r\n      if (data.result && data.result !== 'ok') {\r\n        alert('Something went wrong confirming your booking. Please contact us directly at team@allentra.net');\r\n        btn.classList.remove('al-submitting');\r\n        btn.disabled = false;\r\n        return;\r\n      }\r\n\r\n      alShowConfirmation(payload);\r\n\r\n    } catch (err) {\r\n      console.error('alSubmitBooking:', err);\r\n      alert('Something went wrong. Please try again or contact team@allentra.net directly.');\r\n      btn.classList.remove('al-submitting');\r\n      btn.disabled = false;\r\n    }\r\n  }\r\n\r\n  function alShowConfirmation(payload) {\r\n    const step2 = document.getElementById('alStep2');\r\n    const step3 = document.getElementById('alStep3');\r\n\r\n    if (step2) step2.classList.remove('visible');\r\n    if (step3) step3.classList.add('visible');\r\n\r\n    const d = new Date(payload.slot_date + 'T12:00:00');\r\n    const confirmDate = document.getElementById('alConfirmDate');\r\n    const confirmTime = document.getElementById('alConfirmTime');\r\n    const confirmEmail = document.getElementById('alConfirmEmail');\r\n\r\n    if (confirmDate) {\r\n      confirmDate.textContent = d.toLocaleDateString('en-GB', {\r\n        weekday: 'long',\r\n        day: 'numeric',\r\n        month: 'long',\r\n        year: 'numeric'\r\n      });\r\n    }\r\n\r\n    if (confirmTime) {\r\n      confirmTime.textContent = alFormatTime(payload.slot_time) + ' \u00b7 30 minutes';\r\n    }\r\n\r\n    if (confirmEmail) {\r\n      confirmEmail.textContent = payload.email;\r\n    }\r\n\r\n    alSetHeaderBookingMode();\r\n    window.scrollTo({ top: 0, behavior: 'smooth' });\r\n  }\r\n\r\n\r\n  \/\/ \u2500\u2500 Utilities \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  function alDateKey(d) {\r\n    return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\r\n  }\r\n\r\n  function alLocalTime(dt) {\r\n    return `${String(dt.getHours()).padStart(2, '0')}:${String(dt.getMinutes()).padStart(2, '0')}`;\r\n  }\r\n\r\n  function alSameDay(a, b) {\r\n    return a.getFullYear() === b.getFullYear() &&\r\n      a.getMonth() === b.getMonth() &&\r\n      a.getDate() === b.getDate();\r\n  }\r\n\r\n  function alFormatTime(t) {\r\n    const [h, m] = t.split(':').map(Number);\r\n    return `${h % 12 || 12}:${String(m).padStart(2, '0')}${h >= 12 ? 'pm' : 'am'}`;\r\n  }\r\n<\/script><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2130","page","type-page","status-publish"],"_links":{"self":[{"href":"https:\/\/allentra.net\/usa\/wp-json\/wp\/v2\/pages\/2130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allentra.net\/usa\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allentra.net\/usa\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allentra.net\/usa\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allentra.net\/usa\/wp-json\/wp\/v2\/comments?post=2130"}],"version-history":[{"count":46,"href":"https:\/\/allentra.net\/usa\/wp-json\/wp\/v2\/pages\/2130\/revisions"}],"predecessor-version":[{"id":2200,"href":"https:\/\/allentra.net\/usa\/wp-json\/wp\/v2\/pages\/2130\/revisions\/2200"}],"wp:attachment":[{"href":"https:\/\/allentra.net\/usa\/wp-json\/wp\/v2\/media?parent=2130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}