{"id":12,"date":"2026-07-30T13:31:14","date_gmt":"2026-07-30T13:31:14","guid":{"rendered":"https:\/\/mahall.org\/?page_id=12"},"modified":"2026-07-30T13:33:37","modified_gmt":"2026-07-30T13:33:37","slug":"client-register","status":"publish","type":"page","link":"https:\/\/mahall.org\/index.php\/client-register\/","title":{"rendered":"Client-Register"},"content":{"rendered":"\n<!--\n  MAHALL \u2014 client registration & login (v0.4)\n  ------------------------------------------------------------------\n  HOW TO USE\n  Two pages in one file, toggled by URL hash:\n    mahall.org\/register        \u2192 shows registration (default)\n    mahall.org\/register#login  \u2192 shows login form\n\n  Registration branches immediately on role selection:\n    B2C \u2014 individual event buyer (wedding, birthday, retreat...)\n    B2B \u2014 company \/ agency \/ corporate buyer\n\n  Posts to:\n    \/wp-json\/mahall\/v1\/client-register  (registration)\n    \/wp-json\/mahall\/v1\/client-login     (login)\n  Both fall back gracefully if not yet wired up.\n\n  AI field: \"Tell us about your event\" box on the B2C flow calls the\n  same \/wp-json\/mahall\/v1\/ai-search proxy from v0.1 to pre-fill\n  category + city filters so the first search the client sees after\n  registering is already personalised to what they described.\n------------------------------------------------------------------- -->\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..700;1,9..144,400..600&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap');\n\n#mahall-reg{\n  --bg:#16130F; --bg-raised:#1E1A14; --bg-card:#241F18;\n  --ink:#F3ECE0; --ink-soft:#BBAE99; --ink-faint:#7A7163;\n  --gold:#D98E33; --gold-soft:#E8B978;\n  --teal:#2F6F62; --teal-soft:#5C988B;\n  --line:rgba(243,236,224,0.12);\n  --radius:14px;\n  font-family:'Inter',sans-serif; background:var(--bg); color:var(--ink);\n  -webkit-font-smoothing:antialiased; min-height:100vh;\n  display:flex; flex-direction:column;\n}\n#mahall-reg *{box-sizing:border-box; margin:0; padding:0;}\n#mahall-reg a{color:inherit;}\n#mahall-reg h1,#mahall-reg h2,#mahall-reg h3{font-family:'Fraunces',serif; font-weight:500; color:var(--ink); line-height:1.15;}\n#mahall-reg p{color:var(--ink-soft); line-height:1.65;}\n#mahall-reg .eyebrow{font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.12em; text-transform:uppercase; color:var(--gold-soft);}\n#mahall-reg .star{position:relative; width:16px; height:16px; flex:none;}\n#mahall-reg .star span{position:absolute; inset:0; border:1.4px solid var(--gold);}\n#mahall-reg .star span:last-child{transform:rotate(45deg);}\n\n#mahall-reg nav{border-bottom:1px solid var(--line); padding:16px 28px; display:flex; align-items:center; justify-content:space-between;}\n#mahall-reg .logo{font-family:'Fraunces',serif; font-size:18px; display:flex; align-items:center; gap:8px;}\n\n#mahall-reg .btn{\n  display:inline-flex; align-items:center; gap:8px; font-weight:500; font-size:14px;\n  padding:12px 24px; border-radius:999px; border:1px solid var(--line);\n  cursor:pointer; background:transparent; color:var(--ink); transition:border-color .2s, transform .15s;\n}\n#mahall-reg .btn:hover{border-color:var(--gold-soft); transform:translateY(-1px);}\n#mahall-reg .btn-solid{background:var(--gold); border-color:var(--gold); color:#1A1305;}\n#mahall-reg .btn-solid:hover{background:var(--gold-soft);}\n#mahall-reg .btn-block{width:100%; justify-content:center;}\n#mahall-reg .btn-ghost{background:var(--bg-raised); border-color:var(--line); justify-content:center; gap:10px;}\n\n#mahall-reg .layout{flex:1; display:grid; grid-template-columns:1fr 1fr; max-width:1000px; margin:0 auto; width:100%; padding:48px 24px;}\n#mahall-reg .brand-col{padding-right:48px; display:flex; flex-direction:column; justify-content:center; gap:24px;}\n#mahall-reg .brand-col h1{font-size:32px;}\n#mahall-reg .brand-col .proof{display:flex; flex-direction:column; gap:12px; margin-top:8px;}\n#mahall-reg .proof-item{display:flex; align-items:center; gap:10px; font-size:13px; color:var(--ink-soft);}\n#mahall-reg .proof-icon{width:28px; height:28px; border-radius:8px; background:var(--bg-card); border:1px solid var(--line); display:flex; align-items:center; justify-content:center; flex:none; font-size:14px;}\n\n#mahall-reg .form-col{background:var(--bg-raised); border:1px solid var(--line); border-radius:var(--radius); padding:28px; display:flex; flex-direction:column; gap:18px;}\n\n\/* page toggle: register vs login *\/\n#mahall-reg .page{display:none;}\n#mahall-reg .page.active{display:flex; flex-direction:column; gap:18px;}\n\n\/* role selector *\/\n#mahall-reg .role-grid{display:grid; grid-template-columns:1fr 1fr; gap:10px;}\n#mahall-reg .role-card{\n  background:var(--bg-card); border:1.5px solid var(--line); border-radius:var(--radius);\n  padding:16px; cursor:pointer; text-align:left; transition:border-color .2s;\n}\n#mahall-reg .role-card.selected{border-color:var(--gold);}\n#mahall-reg .role-card .ri{font-size:22px; display:block; margin-bottom:8px;}\n#mahall-reg .role-card b{display:block; font-size:14px; margin-bottom:3px; color:var(--ink);}\n#mahall-reg .role-card span{font-size:12px; color:var(--ink-faint);}\n\n\/* conditional panels *\/\n#mahall-reg .role-panel{display:none;}\n#mahall-reg .role-panel.active{display:flex; flex-direction:column; gap:12px;}\n\n\/* shared field styles *\/\n#mahall-reg .field{display:flex; flex-direction:column; gap:6px;}\n#mahall-reg .field label{font-size:12px; color:var(--ink-faint); font-weight:500;}\n#mahall-reg .field input, #mahall-reg .field select, #mahall-reg .field textarea{\n  background:var(--bg); border:1px solid var(--line); border-radius:8px;\n  padding:11px 13px; color:var(--ink); font-family:'Inter',sans-serif; font-size:14px; outline:none;\n}\n#mahall-reg .field input:focus, #mahall-reg .field select:focus, #mahall-reg .field textarea:focus{border-color:var(--gold-soft);}\n#mahall-reg .field-row{display:grid; grid-template-columns:1fr 1fr; gap:10px;}\n#mahall-reg .field .hint{font-size:11px; color:var(--ink-faint);}\n\n\/* AI intent field *\/\n#mahall-reg .ai-field{position:relative;}\n#mahall-reg .ai-field textarea{padding-right:80px;}\n#mahall-reg .ai-badge{\n  position:absolute; top:10px; right:10px;\n  font-family:'JetBrains Mono',monospace; font-size:10px; letter-spacing:.06em;\n  background:var(--bg-card); color:var(--gold-soft); padding:3px 8px; border-radius:6px;\n  border:1px solid var(--line);\n}\n\n\/* event types (B2C checkboxes) *\/\n#mahall-reg .event-types{display:grid; grid-template-columns:repeat(3,1fr); gap:8px;}\n#mahall-reg .etype{\n  display:flex; align-items:center; gap:7px; font-size:12px; padding:8px 10px;\n  background:var(--bg-card); border:1px solid var(--line); border-radius:8px; cursor:pointer;\n}\n#mahall-reg .etype input{accent-color:var(--gold);}\n\n\/* B2B tags *\/\n#mahall-reg .b2b-tags{display:flex; flex-wrap:wrap; gap:7px;}\n#mahall-reg .b2b-tag{\n  font-size:12px; padding:6px 14px; border-radius:999px; border:1px solid var(--line);\n  color:var(--ink-soft); cursor:pointer; background:transparent; transition:border-color .2s, color .2s;\n}\n#mahall-reg .b2b-tag.active{border-color:var(--gold); color:var(--gold-soft);}\n\n\/* divider *\/\n#mahall-reg .divider{display:flex; align-items:center; gap:10px; font-size:12px; color:var(--ink-faint);}\n#mahall-reg .divider::before, #mahall-reg .divider::after{content:''; flex:1; height:1px; background:var(--line);}\n\n\/* status message *\/\n#mahall-reg .status{font-size:13px; display:none;}\n#mahall-reg .status.show{display:block;}\n#mahall-reg .status.ok{color:var(--teal-soft);}\n#mahall-reg .status.err{color:#D9786E;}\n\n\/* password strength meter *\/\n#mahall-reg .pw-meter{height:3px; border-radius:3px; background:var(--line); overflow:hidden; margin-top:4px;}\n#mahall-reg .pw-bar{height:100%; width:0; border-radius:3px; transition:width .3s, background .3s;}\n\n\/* footer *\/\n#mahall-reg footer{text-align:center; font-size:12px; color:var(--ink-faint); padding:24px; border-top:1px solid var(--line);}\n\n@media(max-width:760px){\n  #mahall-reg .layout{grid-template-columns:1fr; padding:28px 16px;}\n  #mahall-reg .brand-col{display:none;}\n  #mahall-reg .event-types{grid-template-columns:1fr 1fr;}\n}\n<\/style>\n\n<div id=\"mahall-reg\">\n  <nav>\n    <a href=\"\/\" class=\"logo\"><span class=\"star\"><span><\/span><span><\/span><\/span> Mahall<\/a>\n    <div style=\"display:flex; gap:10px; align-items:center;\">\n      <span style=\"font-size:13px; color:var(--ink-faint)\" id=\"nav-switch-label\">Already have an account?<\/span>\n      <button class=\"btn\" id=\"nav-switch-btn\">Log in<\/button>\n    <\/div>\n  <\/nav>\n\n  <div class=\"layout\">\n    <div class=\"brand-col\">\n      <div>\n        <span class=\"eyebrow\">Join Mahall<\/span>\n        <h1 style=\"margin-top:8px;\">Morocco&#8217;s most distinctive venues, in one place<\/h1>\n      <\/div>\n      <div class=\"proof\">\n        <div class=\"proof-item\"><div class=\"proof-icon\">&#127963;<\/div>Heritage riads, kasbahs, desert camps &amp; more<\/div>\n        <div class=\"proof-item\"><div class=\"proof-icon\">&#128202;<\/div>B2B and B2C inquiry routing from day one<\/div>\n        <div class=\"proof-item\"><div class=\"proof-icon\">&#10022;<\/div>AI concierge helps you find the right fit<\/div>\n        <div class=\"proof-item\"><div class=\"proof-icon\">&#127760;<\/div>Expanding across MENA in 2026<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"form-col\">\n\n      <!-- ========== REGISTER PAGE ========== -->\n      <div class=\"page active\" id=\"page-register\">\n        <div>\n          <h2 style=\"font-size:20px;\">Create your account<\/h2>\n          <p style=\"font-size:13px; margin-top:4px;\">Who are you looking for venues for?<\/p>\n        <\/div>\n\n        <div class=\"role-grid\" id=\"role-grid\">\n          <button class=\"role-card\" data-role=\"b2c\">\n            <span class=\"ri\">&#128101;<\/span>\n            <b>Personal event<\/b>\n            <span>Wedding, birthday, retreat, celebration<\/span>\n          <\/button>\n          <button class=\"role-card\" data-role=\"b2b\">\n            <span class=\"ri\">&#127970;<\/span>\n            <b>Business \/ agency<\/b>\n            <span>Corporate events, brand activations, production<\/span>\n          <\/button>\n        <\/div>\n\n        <!-- B2C fields -->\n        <div class=\"role-panel\" id=\"panel-b2c\">\n          <div class=\"field-row\">\n            <div class=\"field\"><label>First name<\/label><input id=\"bc-fname\" placeholder=\"Fatima\"><\/div>\n            <div class=\"field\"><label>Last name<\/label><input id=\"bc-lname\" placeholder=\"Benali\"><\/div>\n          <\/div>\n          <div class=\"field\"><label>Email<\/label><input id=\"bc-email\" type=\"email\" placeholder=\"fatima@example.com\"><\/div>\n          <div class=\"field\">\n            <label>Password<\/label>\n            <input id=\"bc-pw\" type=\"password\" placeholder=\"Min. 8 characters\">\n            <div class=\"pw-meter\"><div class=\"pw-bar\" id=\"bc-pw-bar\"><\/div><\/div>\n          <\/div>\n          <div class=\"field\">\n            <label>What kind of events do you plan?<\/label>\n            <div class=\"event-types\">\n              <label class=\"etype\"><input type=\"checkbox\" value=\"wedding\"> Wedding<\/label>\n              <label class=\"etype\"><input type=\"checkbox\" value=\"engagement\"> Engagement<\/label>\n              <label class=\"etype\"><input type=\"checkbox\" value=\"birthday\"> Birthday<\/label>\n              <label class=\"etype\"><input type=\"checkbox\" value=\"retreat\"> Retreat<\/label>\n              <label class=\"etype\"><input type=\"checkbox\" value=\"family\"> Family gathering<\/label>\n              <label class=\"etype\"><input type=\"checkbox\" value=\"other\"> Other<\/label>\n            <\/div>\n          <\/div>\n          <div class=\"field\">\n            <label>Tell us about your event <span style=\"color:var(--gold-soft)\">(AI will pre-fill search)<\/span><\/label>\n            <div class=\"ai-field\">\n              <textarea id=\"bc-intent\" rows=\"3\" placeholder=\"e.g. Outdoor wedding for 120 guests near Marrakech in October...\"><\/textarea>\n              <span class=\"ai-badge\">&#10022; AI<\/span>\n            <\/div>\n            <span class=\"hint\">We use this to personalise your first venue search \u2014 you won&#8217;t be shown irrelevant listings.<\/span>\n          <\/div>\n          <div class=\"field\">\n            <label>Phone (optional \u2014 for WhatsApp follow-up)<\/label>\n            <input id=\"bc-phone\" type=\"tel\" placeholder=\"+212 6...\">\n          <\/div>\n          <button class=\"btn btn-solid btn-block\" id=\"bc-submit\">Create account &#10148;<\/button>\n          <div class=\"status\" id=\"bc-status\"><\/div>\n        <\/div>\n\n        <!-- B2B fields -->\n        <div class=\"role-panel\" id=\"panel-b2b\">\n          <div class=\"field-row\">\n            <div class=\"field\"><label>First name<\/label><input id=\"bb-fname\" placeholder=\"Youssef\"><\/div>\n            <div class=\"field\"><label>Last name<\/label><input id=\"bb-lname\" placeholder=\"El Mansouri\"><\/div>\n          <\/div>\n          <div class=\"field\"><label>Company name<\/label><input id=\"bb-company\" placeholder=\"Agence Lumi\u00e8re Events\"><\/div>\n          <div class=\"field\">\n            <label>Industry<\/label>\n            <select id=\"bb-industry\">\n              <option value=\"\">\u2014 select \u2014<\/option>\n              <option>Event management agency<\/option>\n              <option>Corporate \/ SME<\/option>\n              <option>Government \/ NGO<\/option>\n              <option>Production company (film \/ TV \/ photo)<\/option>\n              <option>Brand \/ marketing agency<\/option>\n              <option>MICE \/ DMC<\/option>\n              <option>Other<\/option>\n            <\/select>\n          <\/div>\n          <div class=\"field\">\n            <label>Typical events per year<\/label>\n            <select id=\"bb-volume\">\n              <option value=\"\">\u2014 select \u2014<\/option>\n              <option>1\u20135<\/option><option>6\u201320<\/option><option>21\u201350<\/option><option>50+<\/option>\n            <\/select>\n          <\/div>\n          <div class=\"field\">\n            <label>Typical budget per event (MAD)<\/label>\n            <select id=\"bb-budget\">\n              <option value=\"\">\u2014 select \u2014<\/option>\n              <option>Under 20,000<\/option><option>20,000\u201380,000<\/option>\n              <option>80,000\u2013250,000<\/option><option>250,000+<\/option>\n            <\/select>\n          <\/div>\n          <div class=\"field\">\n            <label>Event types you typically source venues for<\/label>\n            <div class=\"b2b-tags\" id=\"b2b-tags\">\n              <button class=\"b2b-tag\" type=\"button\">Conferences<\/button>\n              <button class=\"b2b-tag\" type=\"button\">Galas &amp; dinners<\/button>\n              <button class=\"b2b-tag\" type=\"button\">Brand activations<\/button>\n              <button class=\"b2b-tag\" type=\"button\">Film \/ photo shoots<\/button>\n              <button class=\"b2b-tag\" type=\"button\">Team retreats<\/button>\n              <button class=\"b2b-tag\" type=\"button\">Exhibitions<\/button>\n              <button class=\"b2b-tag\" type=\"button\">Award ceremonies<\/button>\n              <button class=\"b2b-tag\" type=\"button\">Weddings (agency)<\/button>\n            <\/div>\n          <\/div>\n          <div class=\"field\"><label>Work email<\/label><input id=\"bb-email\" type=\"email\" placeholder=\"youssef@agence-lumiere.ma\"><\/div>\n          <div class=\"field\">\n            <label>Password<\/label>\n            <input id=\"bb-pw\" type=\"password\" placeholder=\"Min. 8 characters\">\n            <div class=\"pw-meter\"><div class=\"pw-bar\" id=\"bb-pw-bar\"><\/div><\/div>\n          <\/div>\n          <button class=\"btn btn-solid btn-block\" id=\"bb-submit\">Create account &#10148;<\/button>\n          <div class=\"status\" id=\"bb-status\"><\/div>\n        <\/div>\n\n        <div class=\"divider\">or<\/div>\n        <button class=\"btn btn-ghost btn-block\" id=\"google-btn\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path fill=\"#EA4335\" d=\"M24 9.5c3.5 0 6.6 1.2 9 3.2l6.7-6.7C35.8 2.5 30.2 0 24 0 14.6 0 6.6 5.5 2.8 13.5l7.8 6.1C12.5 13.3 17.8 9.5 24 9.5z\"\/><path fill=\"#4285F4\" d=\"M46.5 24.5c0-1.6-.1-3.1-.4-4.5H24v8.5h12.7c-.5 2.9-2.2 5.4-4.7 7.1l7.3 5.7c4.3-3.9 6.7-9.7 6.7-16.8z\"\/><path fill=\"#FBBC05\" d=\"M10.6 28.6A14.5 14.5 0 0 1 9.5 24c0-1.6.3-3.1.9-4.5L2.6 13.4A24 24 0 0 0 0 24c0 3.9.9 7.5 2.6 10.7l8-6.1z\"\/><path fill=\"#34A853\" d=\"M24 48c6.2 0 11.4-2 15.2-5.5l-7.3-5.7c-2 1.4-4.6 2.2-7.9 2.2-6.2 0-11.5-4.2-13.4-9.8l-7.8 6.1C6.6 42.6 14.6 48 24 48z\"\/><\/svg>\n          Continue with Google\n        <\/button>\n        <p style=\"font-size:11px; text-align:center; color:var(--ink-faint);\">By registering you agree to Mahall&#8217;s <a href=\"#\" style=\"color:var(--gold-soft)\">Terms<\/a> and <a href=\"#\" style=\"color:var(--gold-soft)\">Privacy Policy<\/a>.<\/p>\n      <\/div>\n\n      <!-- ========== LOGIN PAGE ========== -->\n      <div class=\"page\" id=\"page-login\">\n        <h2 style=\"font-size:20px;\">Welcome back<\/h2>\n        <div class=\"field\"><label>Email<\/label><input id=\"li-email\" type=\"email\" placeholder=\"you@example.com\"><\/div>\n        <div class=\"field\">\n          <label>Password<\/label>\n          <input id=\"li-pw\" type=\"password\" placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\">\n          <a href=\"#\" style=\"font-size:12px; color:var(--gold-soft); margin-top:4px; display:inline-block;\">Forgot password?<\/a>\n        <\/div>\n        <button class=\"btn btn-solid btn-block\" id=\"li-submit\">Log in &#10148;<\/button>\n        <div class=\"status\" id=\"li-status\"><\/div>\n        <div class=\"divider\">or<\/div>\n        <button class=\"btn btn-ghost btn-block\" id=\"google-login-btn\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path fill=\"#EA4335\" d=\"M24 9.5c3.5 0 6.6 1.2 9 3.2l6.7-6.7C35.8 2.5 30.2 0 24 0 14.6 0 6.6 5.5 2.8 13.5l7.8 6.1C12.5 13.3 17.8 9.5 24 9.5z\"\/><path fill=\"#4285F4\" d=\"M46.5 24.5c0-1.6-.1-3.1-.4-4.5H24v8.5h12.7c-.5 2.9-2.2 5.4-4.7 7.1l7.3 5.7c4.3-3.9 6.7-9.7 6.7-16.8z\"\/><path fill=\"#FBBC05\" d=\"M10.6 28.6A14.5 14.5 0 0 1 9.5 24c0-1.6.3-3.1.9-4.5L2.6 13.4A24 24 0 0 0 0 24c0 3.9.9 7.5 2.6 10.7l8-6.1z\"\/><path fill=\"#34A853\" d=\"M24 48c6.2 0 11.4-2 15.2-5.5l-7.3-5.7c-2 1.4-4.6 2.2-7.9 2.2-6.2 0-11.5-4.2-13.4-9.8l-7.8 6.1C6.6 42.6 14.6 48 24 48z\"\/><\/svg>\n          Continue with Google\n        <\/button>\n      <\/div>\n\n    <\/div>\n  <\/div>\n\n  <footer>mahall.org &middot; Morocco &rarr; MENA<\/footer>\n<\/div>\n\n<script>\n(function(){\n\n  \/* ---- page toggle (register \u2194 login) ---- *\/\n  var pageReg = document.getElementById('page-register');\n  var pageLogin = document.getElementById('page-login');\n  var navBtn = document.getElementById('nav-switch-btn');\n  var navLabel = document.getElementById('nav-switch-label');\n  var showingLogin = window.location.hash === '#login';\n\n  function setPage(login){\n    showingLogin = login;\n    pageReg.classList.toggle('active', !login);\n    pageLogin.classList.toggle('active', login);\n    navBtn.textContent = login ? 'Register' : 'Log in';\n    navLabel.textContent = login ? \"Don't have an account?\" : 'Already have an account?';\n    history.replaceState(null,'', login ? '#login' : '#');\n  }\n  setPage(showingLogin);\n  navBtn.addEventListener('click', function(){ setPage(!showingLogin); });\n\n  \/* ---- role selection ---- *\/\n  var selectedRole = null;\n  document.getElementById('role-grid').addEventListener('click', function(e){\n    var card = e.target.closest('.role-card');\n    if(!card) return;\n    selectedRole = card.getAttribute('data-role');\n    document.querySelectorAll('.role-card').forEach(function(c){ c.classList.toggle('selected', c===card); });\n    document.querySelectorAll('.role-panel').forEach(function(p){ p.classList.remove('active'); });\n    document.getElementById('panel-'+selectedRole).classList.add('active');\n  });\n\n  \/* ---- B2B tag toggle ---- *\/\n  document.getElementById('b2b-tags').addEventListener('click', function(e){\n    var tag = e.target.closest('.b2b-tag');\n    if(tag) tag.classList.toggle('active');\n  });\n\n  \/* ---- password strength ---- *\/\n  function pwStrength(pw){\n    var s = 0;\n    if(pw.length >= 8) s++;\n    if(\/[A-Z]\/.test(pw)) s++;\n    if(\/[0-9]\/.test(pw)) s++;\n    if(\/[^A-Za-z0-9]\/.test(pw)) s++;\n    return s;\n  }\n  function bindPwMeter(inputId, barId){\n    document.getElementById(inputId).addEventListener('input', function(){\n      var s = pwStrength(this.value);\n      var bar = document.getElementById(barId);\n      var colors = ['#B5532D','#D98E33','#E8B978','#5C988B'];\n      bar.style.width = (s * 25) + '%';\n      bar.style.background = colors[s-1] || 'transparent';\n    });\n  }\n  bindPwMeter('bc-pw','bc-pw-bar');\n  bindPwMeter('bb-pw','bb-pw-bar');\n\n  \/* ---- AI intent: parse the event description and store for later ---- *\/\n  async function parseIntent(text){\n    try{\n      var res = await fetch('\/wp-json\/mahall\/v1\/ai-search',{\n        method:'POST', headers:{'Content-Type':'application\/json'},\n        body: JSON.stringify({query: text})\n      });\n      if(!res.ok) throw new Error();\n      return await res.json();\n    }catch(e){ return null; }\n  }\n\n  \/* ---- generic submit helper ---- *\/\n  async function handleSubmit(payload, endpoint, statusId, onOk){\n    var el = document.getElementById(statusId);\n    el.className = 'status show'; el.style.color = ''; el.textContent = 'Creating account...';\n    try{\n      var res = await fetch(endpoint,{\n        method:'POST', headers:{'Content-Type':'application\/json'}, body: JSON.stringify(payload)\n      });\n      if(!res.ok) throw new Error('not configured');\n      el.classList.add('ok');\n      el.textContent = 'Account created! Redirecting...';\n      if(onOk) onOk();\n    }catch(err){\n      el.classList.add('ok');\n      el.textContent = 'Demo mode \u2014 connect '+endpoint+' to persist this registration.';\n      if(onOk) onOk();\n    }\n  }\n\n  \/* ---- B2C submit ---- *\/\n  document.getElementById('bc-submit').addEventListener('click', async function(){\n    var intentText = document.getElementById('bc-intent').value.trim();\n    var intent = intentText ? await parseIntent(intentText) : null;\n    var checked = Array.from(document.querySelectorAll('#panel-b2c .etype input:checked')).map(function(i){return i.value;});\n    await handleSubmit({\n      role:'b2c',\n      firstName: document.getElementById('bc-fname').value,\n      lastName: document.getElementById('bc-lname').value,\n      email: document.getElementById('bc-email').value,\n      phone: document.getElementById('bc-phone').value,\n      eventTypes: checked,\n      intent: intentText,\n      aiFilter: intent  \/* pre-filled filter stored in user meta for first search *\/\n    }, '\/wp-json\/mahall\/v1\/client-register', 'bc-status', function(){\n      setTimeout(function(){ window.location.href = '\/venues'+(intent&&intent.category?'?cat='+intent.category:''); }, 1400);\n    });\n  });\n\n  \/* ---- B2B submit ---- *\/\n  document.getElementById('bb-submit').addEventListener('click', async function(){\n    var tags = Array.from(document.querySelectorAll('.b2b-tag.active')).map(function(t){return t.textContent;});\n    await handleSubmit({\n      role:'b2b',\n      firstName: document.getElementById('bb-fname').value,\n      lastName: document.getElementById('bb-lname').value,\n      company: document.getElementById('bb-company').value,\n      industry: document.getElementById('bb-industry').value,\n      volume: document.getElementById('bb-volume').value,\n      budget: document.getElementById('bb-budget').value,\n      email: document.getElementById('bb-email').value,\n      eventTypes: tags\n    }, '\/wp-json\/mahall\/v1\/client-register', 'bb-status', function(){\n      setTimeout(function(){ window.location.href = '\/venues'; }, 1400);\n    });\n  });\n\n  \/* ---- Login submit ---- *\/\n  document.getElementById('li-submit').addEventListener('click', async function(){\n    var el = document.getElementById('li-status');\n    el.className = 'status show'; el.textContent = 'Logging in...';\n    try{\n      var res = await fetch('\/wp-json\/mahall\/v1\/client-login',{\n        method:'POST', headers:{'Content-Type':'application\/json'},\n        body: JSON.stringify({email: document.getElementById('li-email').value, password: document.getElementById('li-pw').value})\n      });\n      if(!res.ok) throw new Error();\n      el.classList.add('ok'); el.textContent = 'Logged in \u2014 redirecting...';\n      setTimeout(function(){ window.location.href = '\/venues'; }, 1200);\n    }catch(err){\n      el.classList.add('ok'); el.textContent = 'Demo mode \u2014 connect \/wp-json\/mahall\/v1\/client-login to authenticate.';\n    }\n  });\n\n  \/* ---- Google buttons (placeholder \u2014 needs WP Google OAuth plugin) ---- *\/\n  ['google-btn','google-login-btn'].forEach(function(id){\n    document.getElementById(id).addEventListener('click', function(){\n      alert('Google login requires a WP OAuth plugin (e.g. \"Login with Google\" by WP Developers Club). Wiring scheduled for v1.0.');\n    });\n  });\n\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Mahall Already have an account? Log in Join Mahall Morocco&#8217;s most distinctive venues, in one place &#127963; Heritage riads, kasbahs, desert camps &amp; more &#128202; B2B and B2C inquiry routing from day one &#10022; AI concierge helps you find the right fit &#127760; Expanding across MENA in 2026 Create your account Who are you looking [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"folder":[],"class_list":["post-12","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/mahall.org\/index.php\/wp-json\/wp\/v2\/pages\/12","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mahall.org\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mahall.org\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mahall.org\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mahall.org\/index.php\/wp-json\/wp\/v2\/comments?post=12"}],"version-history":[{"count":2,"href":"https:\/\/mahall.org\/index.php\/wp-json\/wp\/v2\/pages\/12\/revisions"}],"predecessor-version":[{"id":14,"href":"https:\/\/mahall.org\/index.php\/wp-json\/wp\/v2\/pages\/12\/revisions\/14"}],"wp:attachment":[{"href":"https:\/\/mahall.org\/index.php\/wp-json\/wp\/v2\/media?parent=12"}],"wp:term":[{"taxonomy":"folder","embeddable":true,"href":"https:\/\/mahall.org\/index.php\/wp-json\/wp\/v2\/folder?post=12"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}