(function(){"use strict";function E(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function A({siteKey:e}){console.log("captcha loaded"),document.querySelectorAll("form[data-moonbase-id]:not([data-moonbase-hcaptcha-widget-id])").forEach(r=>{let t=r.querySelector("[data-moonbase-role=captcha]");t===null&&(t=document.createElement("div"),t.setAttribute("data-moonbase-role","captcha"),r.appendChild(t));const n=f({container:t,siteKey:e});r.setAttribute("data-moonbase-hcaptcha-widget-id",n),r.setAttribute("data-moonbase-hcaptcha-site-key",e)})}function m(){const e=globalThis.hcaptcha;if(!e)throw new Error("hcaptcha not found or not loaded");return e}function f({container:e,siteKey:r}){const t=m(),n=E();return t.render(e,{sitekey:r,size:"invisible",theme:n})}async function p(e,r,t){try{const o=await m().execute(t,{async:!0});return e.delete("h-captcha-response"),e.set("captcha_token",o.response),e.set("captcha_provider","hcaptcha"),e.set("captcha_site_key",r),{type:"success"}}catch(n){return console.error("captcha error",n),{type:"error"}}}function _({siteKey:e}){const r="__MOONBASE_HCAPTCHA_LOADED__";globalThis[r]=()=>{A({siteKey:e})};const t=new URL("https://js.hcaptcha.com/1/api.js");t.searchParams.set("recaptchacompat","off"),t.searchParams.set("onload",r),t.searchParams.set("render","explicit");const n=document.createElement("script");n.src=t.toString(),n.async=!0,n.defer=!0,document.head.appendChild(n)}function h(e){const r=e.trim();if(r.length===0)return null;const t=v(r);if(URL.canParse(r)&&t!==null)return r;if(t===null&&!/^\//.test(r)&&!/:\/\//.test(r)){const n=`https://${r}`;if(URL.canParse(n))return n}return null}function v(e){const[r]=e.split(":",2);return k.has(r)?r:null}const k=new Set(["http","https","ftp","mailto"]),L="https://moonbase-js.com/v1/submission",T="https://moonbase-js.com/v1/forms/:id",u=new Map;async function U(e){const t=e.target?.closest("form");if(!t){console.error("form not found");return}const n=t.getAttribute("data-moonbase-id");if(!n)return;if(u.get(n)==="submitting"){console.warn("form is already submitting");return}const o=t.getAttribute("data-moonbase-hcaptcha-site-key"),l=t.getAttribute("data-moonbase-hcaptcha-widget-id");if(!o){console.error("hcaptcha site key not found");return}if(!l){console.error("hcaptcha widget id not found");return}e.stopImmediatePropagation(),e.preventDefault(),c(t,n,"submitting"),g(t)&&(console.log("webflow form detected"),t.querySelectorAll("[data-moonbase-name]").forEach(a=>{const y=a.getAttribute("data-moonbase-name"),S=a.getAttribute("data-moonbase-value");y!==null&&a.setAttribute("name",y),a instanceof HTMLInputElement&&a.type==="checkbox"&&S!==null&&a.setAttribute("value",S)}));const i=new FormData(t);switch(x(t,i),(await p(i,o,l)).type){case"success":break;case"error":{c(t,n,"idle");return}}const d=await b(i,n);switch(d.type){case"success":{c(t,n,"submitted"),d.redirectUrl?window.location.href=d.redirectUrl:H(t);break}case"validation_error":{F(t,d.validationErrors),c(t,n,"idle");break}case"unexpected_error":{c(t,n,"idle");break}}}async function C(e){const r=T.replace(":id",encodeURIComponent(e));let t;try{t=await fetch(r)}catch(n){throw new Error(`Network error while fetching form: ${String(n)}`)}if(!t.ok){const n=`Failed to load form ${e}: HTTP ${t.status}`,o=new Error(n);throw o.status=t.status,o}try{return await t.json()}catch(n){throw new Error(`Failed to parse JSON response from ${r}: ${String(n)}`)}}async function b(e,r){try{e.set("form_id",r);const t=new URLSearchParams(location.search);s(e,t,"utm_source"),s(e,t,"utm_medium"),s(e,t,"utm_campaign"),s(e,t,"utm_term"),s(e,t,"utm_content");const n=q(e),o=await fetch(L,{method:"POST",body:n});if(o.ok)return{type:"success",redirectUrl:(await o.json()).redirectUrl};if(o.status===422)return{type:"validation_error",validationErrors:(await o.json()).errors};throw new Error("unexpected response status: "+o.status)}catch(t){return{type:"unexpected_error",error:t instanceof Error?t:new Error(String(t))}}}function q(e){let r=[];for(const[t,n]of e.entries())r.push({name:t,value:n});return JSON.stringify({version:"1.0",fields:r})}function F(e,r){for(const[t,n]of Object.entries(r)){const o=e.querySelector(`[name="field_${t}"]`);if(!o){console.error("input not found",t);continue}o.setCustomValidity(n.join(", "))}e.reportValidity()}function s(e,r,t){e.get(t)||e.set(t,r.get(t)??"")}function P(e){e.querySelectorAll("button, input[type=submit]").forEach(r=>{"disabled"in r&&(r.disabled=!0,r.setAttribute("data-moonbase-disabled-form-control",""))})}function j(e){e.querySelectorAll("[data-moonbase-disabled-form-control]").forEach(r=>{"disabled"in r&&(r.disabled=!1,r.removeAttribute("data-moonbase-disabled-form-control"))})}function c(e,r,t){switch(t){case"idle":{u.set(r,"idle"),j(e);break}case"submitting":{u.set(r,"submitting"),P(e);break}case"submitted":{u.set(r,"submitted");break}}}function H(e){if(g(e)){const t=e.closest(".w-form");if(t instanceof HTMLElement){const n=t.querySelector(".w-form-done");if(n instanceof HTMLElement){e.style.display="none",n.style.display="block";return}}console.error("webflow done element not found");return}const r=e.querySelector("[data-moonbase-role=done]");if(!r){console.error("done element not found");return}r.removeAttribute("hidden"),e.querySelectorAll(":not([data-moonbase-role=done])").forEach(t=>{t instanceof HTMLElement&&t.setAttribute("hidden","")})}function M(e){const r=e.target;r&&r.setCustomValidity("")}function O(e){const r=e.target;if(!(r instanceof HTMLInputElement)||r.getAttribute("data-moonbase-field-type")!=="uri/url")return;const t=r.value;if(t.trim().length===0)return;const n=h(t);n!==null&&n!==t&&(r.value=n)}function x(e,r){e.querySelectorAll('[data-moonbase-field-type="uri/url"]').forEach(t=>{const n=r.get(t.name);if(typeof n=="string"){const o=h(n);o!==null&&r.set(t.name,o)}})}function g(e){return e.hasAttribute("data-wf-element-id")}function R(){document.addEventListener("submit",U),document.addEventListener("input",M),document.addEventListener("focusout",O)}const w="c1ac0f22-b7ac-4d76-875e-74ecf3f64bd2";globalThis.__MOONBASE__={config:{hcaptchaSiteKey:w},forms:{executeSubmit:b,getForm:C},captcha:{executeCaptcha:p,renderCaptcha:f},normalize:{normalizeUrl:h}},_({siteKey:w}),R()})();